やりたいこと
- CloudFormationでのスタック作成用のサンプルを用意し、実際にリソースを作成したい
- 作成したEC2に、そのままターミナルからsshログインしたい
作成予定のリソース
- VPC
- subnet
- security group
- EC2
- EC2インスタンス
ap-norteast-1リージョンに存在するAMIの確認のためのaws-cliコマンド
AMI-IDの指定を間違いによるROLLBACKの発生が多かったため、記述
aws ec2 describe-images --owners amazon \
--filters "Name=virtualization-type,Values=hvm" \
"Name=architecture,Values=x86_64" \
"Name=name,Values=amzn2-ami-hvm-*" \
"Name=block-device-mapping.volume-type,Values=gp2" \
"Name=root-device-type,Values=ebs" \
"Name=ena-support,Values=true" \
--query "reverse(sort_by(Images, &CreationDate))[:1].ImageId" \
--output text --region ap-northeast-1
# 出力結果
ami-0828596b82405edd7
AMIについて注意すべきこと
- ami-idは、CloudFormationでスタックを作成するリージョンに存在しているものを指定する必要がある(今回はap-northeast-1のリージョン)
- 下記をコピペで流用する際は
KeyName
の項目の中から、実際に存在するキー名に変更する(EC2の「キーペア」の項目の中から指定する)
実際に使用するyamlファイル
AWSTemplateFormatVersion: '2010-09-09'
Resources:
MyVPC:
Type: 'AWS::EC2::VPC'
Properties:
CidrBlock: '10.0.0.0/16'
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: 'vpcFromCf'
MySubnet:
Type: 'AWS::EC2::Subnet'
Properties:
VpcId: !Ref MyVPC
CidrBlock: '10.0.1.0/24'
AvailabilityZone: ap-northeast-1a
Tags:
- Key: Name
Value: 'subnetFromCf'
MyInternetGateway:
Type: 'AWS::EC2::InternetGateway'
Properties:
Tags:
- Key: Name
Value: 'igwFromCf'
MyVPCGatewayAttachment:
Type: 'AWS::EC2::VPCGatewayAttachment'
Properties:
VpcId: !Ref MyVPC
InternetGatewayId: !Ref MyInternetGateway
MySecurityGroup:
Type: 'AWS::EC2::SecurityGroup'
Properties:
GroupName: 'MySecurityGroup'
GroupDescription: 'Allow inbound SSH traffic from anywhere'
VpcId: !Ref MyVPC
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
MyEC2Instance2:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: ami-0828596b82405edd7
InstanceType: t2.micro
KeyName: ${keyName}
NetworkInterfaces:
- AssociatePublicIpAddress: true
DeviceIndex: '0'
SubnetId: !Ref MySubnet
GroupSet:
- !Ref MySecurityGroup
Tags:
- Key: Name
Value: 'ec2FromCf'
MyRouteTable:
Type: 'AWS::EC2::RouteTable'
Properties:
VpcId: !Ref MyVPC
Tags:
- Key: Name
Value: 'routeTableFromCf'
MyRoute:
Type: 'AWS::EC2::Route'
DependsOn: MyInternetGateway
Properties:
RouteTableId: !Ref MyRouteTable
DestinationCidrBlock: '0.0.0.0/0'
GatewayId: !Ref MyInternetGateway
MySubnetRouteTableAssociation:
Type: 'AWS::EC2::SubnetRouteTableAssociation'
Properties:
SubnetId: !Ref MySubnet
RouteTableId: !Ref MyRouteTable
※秘密鍵の名前の箇所だけ、置き換えてます。
これで、AWSリソースを作成することができます。
また、sshコマンドでEC2へのログインも確認済みです。
ssh -i ~/.ssh/aws-infra-ssh-key.pem ec2-user@${ec2PublicIpAddress}