2020年7月1日水曜日

AWS CDKでサクッとEC2インスタンスを立てたかった話

前回 ひとまずcdk の initまで完了してプロジェクトの用意ができたので、次は実際に構成したい内容を書いていく。

■ 最初の要件


今回立てたいEC2インスタンスの要件はこんな感じ。
  • NodeJSのツール(インターネットアクセス有り)を実行できる。
  • TimeZoneは JST
  • sshで入る(=22ポートを開けたい)
ひとまずこんなところ。他は随時拡張したくなったら。

■ 作るもの


今回明示的に用意するものは以下
  • VPC(CIDERは適当に既存のものに被らないものを)
  • Security-Group(22ポートだけひとまずフルオープンしておく)
  • EC2インスタンス(t2.small)
一旦まずはTimeZoneなどは置いておいてインスタンスにsshできればいいや、程度から作る。

■ コード

さっくり
  1. const prefix = 'Sample';
  2.  
  3. // VPC
  4. const vpc = new ec2.Vpc(this, `${prefix}Vpc`, {
  5. cidr: 'x.x.x.x/y', // 空いているところを適当に使用
  6. natGateways: 0,
  7. subnetConfiguration: [
  8. { name: `${prefix}PublicSubnet`, cidrMask: 20, subnetType: ec2.SubnetType.PUBLIC }
  9. ]
  10. });
  11. // SecurityGroup
  12. const instanceSecurityGroup = new ec2.SecurityGroup(
  13. this,
  14. `${prefix}SecurityGroup`,
  15. {
  16. securityGroupName: `${prefix}SecurityGroup`,
  17. vpc: vpc
  18. }
  19. );
  20. instanceSecurityGroup.node.applyAspect(
  21. new cdk.Tag("Name", prefix)
  22. );
  23. instanceSecurityGroup.addIngressRule(
  24. ec2.Peer.anyIpv4(),
  25. ec2.Port.tcp(22)
  26. );
  27. // EC2
  28. const instance = new ec2.CfnInstance(this, `${prefix}Instance`, {
  29. imageId: new ec2.AmazonLinuxImage(
  30. {generation: ec2.AmazonLinuxGeneration.AMAZON_LINUX_2}
  31. ).getImage(this).imageId,
  32. instanceType: new ec2.InstanceType("t2.small").toString(),
  33. keyName: "sample-key", // 鍵は別途作ってあるものを使う
  34. networkInterfaces: [{
  35. associatePublicIpAddress: true,
  36. deviceIndex: "0",
  37. groupSet: [instanceSecurityGroup.securityGroupId],
  38. subnetId: vpc.publicSubnets[0].subnetId
  39. }],
  40. tags: [
  41. {"key": "Name", "value": `${prefix}-A01`},
  42. ]
  43. });
主に悩んだのは「Tagの宣言の仕方色々あるんやなぁ(´・ω・`)」というくらい。
あとはどちらかと言うと AWSの知識(どんな設定項目が必要なのか)の方が大事でコード的には難しいことはなにもない。
このあたりは実際にAWSコンソールから対象をまず手作業で作ってみて、「どんな設定、入力項目があるのか」を見てきた方が早いし納得しやすいかと。

■ この後やりたいこと


このままだとサーバのTimeZoneが UTC のままなのでJSTにしたい。
ついでに設定ファイルとかわざわざ scpしたりするのめんどい。

ので AWS::CloudFormation::Init を設定して楽したい。

というのは長くなったので次で。

0 件のコメント:

コメントを投稿

AWS CDKで立てたEC2インスタンスのTimeZoneとかいじりたかった話

EC2を立てることはできたけど、立てたインスタンスは UTCのままだし設定ファイルとかいちいちscpしてくるのはダルい。 当初UserDataでなんとかしようとしたものの、「書く量がヤバいしメンテしにくい」と悩んでいたところ見かけたのが  AWS::CloudFormation:...