1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CloudFormationのリソース作成用ymlファイルのサンプル

Last updated at Posted at 2023-05-14

やりたいこと

  1. CloudFormationでのスタック作成用のサンプルを用意し、実際にリソースを作成したい
  2. 作成した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}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?