■ 最初の要件
今回立てたいEC2インスタンスの要件はこんな感じ。
- NodeJSのツール(インターネットアクセス有り)を実行できる。
- TimeZoneは JST
- sshで入る(=22ポートを開けたい)
ひとまずこんなところ。他は随時拡張したくなったら。
■ 作るもの
今回明示的に用意するものは以下
- VPC(CIDERは適当に既存のものに被らないものを)
- Security-Group(22ポートだけひとまずフルオープンしておく)
- EC2インスタンス(t2.small)
一旦まずはTimeZoneなどは置いておいてインスタンスにsshできればいいや、程度から作る。
■ コード
さっくり
- const prefix = 'Sample';
- // VPC
- const vpc = new ec2.Vpc(this, `${prefix}Vpc`, {
- cidr: 'x.x.x.x/y', // 空いているところを適当に使用
- natGateways: 0,
- subnetConfiguration: [
- { name: `${prefix}PublicSubnet`, cidrMask: 20, subnetType: ec2.SubnetType.PUBLIC }
- ]
- });
- // SecurityGroup
- const instanceSecurityGroup = new ec2.SecurityGroup(
- this,
- `${prefix}SecurityGroup`,
- {
- securityGroupName: `${prefix}SecurityGroup`,
- vpc: vpc
- }
- );
- instanceSecurityGroup.node.applyAspect(
- new cdk.Tag("Name", prefix)
- );
- instanceSecurityGroup.addIngressRule(
- ec2.Peer.anyIpv4(),
- ec2.Port.tcp(22)
- );
- // EC2
- const instance = new ec2.CfnInstance(this, `${prefix}Instance`, {
- imageId: new ec2.AmazonLinuxImage(
- {generation: ec2.AmazonLinuxGeneration.AMAZON_LINUX_2}
- ).getImage(this).imageId,
- instanceType: new ec2.InstanceType("t2.small").toString(),
- keyName: "sample-key", // 鍵は別途作ってあるものを使う
- networkInterfaces: [{
- associatePublicIpAddress: true,
- deviceIndex: "0",
- groupSet: [instanceSecurityGroup.securityGroupId],
- subnetId: vpc.publicSubnets[0].subnetId
- }],
- tags: [
- {"key": "Name", "value": `${prefix}-A01`},
- ]
- });
主に悩んだのは「Tagの宣言の仕方色々あるんやなぁ(´・ω・`)」というくらい。
あとはどちらかと言うと AWSの知識(どんな設定項目が必要なのか)の方が大事でコード的には難しいことはなにもない。
このあたりは実際にAWSコンソールから対象をまず手作業で作ってみて、「どんな設定、入力項目があるのか」を見てきた方が早いし納得しやすいかと。
■ この後やりたいこと
このままだとサーバのTimeZoneが UTC のままなのでJSTにしたい。
ついでに設定ファイルとかわざわざ scpしたりするのめんどい。
ので AWS::CloudFormation::Init を設定して楽したい。
というのは長くなったので次で。
0 件のコメント:
コメントを投稿