カピバラ好きなエンジニアブログ

興味ある技術とか検証した内容を赴くままに書いていきます。カピバラの可愛さこそ至高。

CloudformationでEC2(Windows)を構築する

タイトル通りです。
今回は普段コンソールから作成しているEC2をCloudformationで作ってみたので、その備忘として書いていきます。

Cloudformationのテンプレート形式はこちらにあります。
docs.aws.amazon.com


EC2のCloudformationのリソースタイプリファレンスは以下に記載されています。
docs.aws.amazon.com


今日使用したCloudformationは以下にアップしています。
github.com


実施作業

EC2を構築・起動する

cloudformationのyamlファイルを作成します。

AWSTemplateFormatVersion: "2010-09-09"
Description: EC2 template
Resources:
  EC2Instance:
    Type: "AWS::EC2::Instance"
    Properties:
      # ベースとなるAMIのIDを指定(Windows Server 2019 Japanese)
      ImageId: "ami-027a63125bb60c403"
      # インスタンスタイプを指定
      InstanceType: t2.micro
      # Cドライブに設定するEBSを設定する
      BlockDeviceMappings:
        -
          DeviceName: /dev/sda1
          Ebs:
            VolumeType: gp2
            DeleteOnTermination: false
            VolumeSize: 30



デプロイはAWS CLIの以下のコマンドを使用して行います。
docs.aws.amazon.com
docs.aws.amazon.com


cloudformation packageコマンドはS3バケットを指定する必要があるので、以下のコマンドでS3バケットを作成しておきます。(ただし今回は使いません)

$ aws s3api create-bucket --bucket test-tmp-20210301 --region ap-northeast-1 --create-bucket-configuration LocationConstraint=ap-northeast-1



S3バケットが作成されました。
f:id:live-your-life-dd18:20210301182733p:plain


以下のコマンドでpackageファイルを出力します。

$ aws cloudformation package --template ec2-instance.yaml --s3-bucket test-tmp-20210301 --output-template-file ec2-instance-packaged.yaml



出力されたpackageファイルはこちらです。

AWSTemplateFormatVersion: '2010-09-09'
Description: EC2 template
Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-027a63125bb60c403
      InstanceType: t2.micro
      BlockDeviceMappings:
      - DeviceName: /dev/sda1
        Ebs:
          VolumeType: gp2
          DeleteOnTermination: false
          VolumeSize: 30



続いて以下のコマンドでCloudformationをデプロイします。

$ aws cloudformation deploy --template-file ec2-instance-packaged.yaml  --stack-name ec2-instance-stack



cloudformationがデプロイされ、stackが作成されています。
CREATE_COMPLETEとなっているのでリソースは作成できてそうです。
f:id:live-your-life-dd18:20210301183221p:plain


EC2が作成されていました。
アタッチされているIPやVPCを見る限り、デフォルトのVPCとサブネットに紐づいているようでした。
f:id:live-your-life-dd18:20210301184737p:plain


作成したEC2は不要になれば以下のコマンドでStackから削除することも可能です。

$ aws cloudformation delete-stack --stack-name ec2-instance-stack



CloudformationのDeleteOnTerminationパラメータをfalseに設定していたため、EC2は削除されましたがEBSは削除されずに残っています。
f:id:live-your-life-dd18:20210301202425p:plain

VPCとサブネットを指定してEC2を構築・起動する

さて、CloudformationでEC2を構築できることは確認できたので、次はもう少し設定を入れていきます。

以下の追加したパラメータは以下になります。

  • サブネット
  • keypair
  • タグ

また併せてEBSのDeleteOnTerminationパラメータをtrueに変更しました。

修正後yamlファイル

AWSTemplateFormatVersion: "2010-09-09"
Description: EC2 template
Resources:
  EC2Instance:
    Type: "AWS::EC2::Instance"
    Properties:
      # ベースとなるAMIのIDを指定(Windows Server 2019 Japanese)
      ImageId: "ami-027a63125bb60c403"
      # インスタンスタイプを指定
      InstanceType: t2.micro
      # 作成するサブネットを指定(test-subnet-a)
      SubnetId: "subnet-XXXXXXXXXXXXXXXXXXX"
      # keypair指定
      KeyName: test-key
      # タグ指定
      Tags:
        - key: Name
          Value: "TEST-SERVER"
      # Cドライブに設定するEBSを設定する
      BlockDeviceMappings:
        -
          DeviceName: /dev/sda1
          Ebs:
            VolumeType: gp2
            DeleteOnTermination: true
            VolumeSize: 30



上記の内容でもう一度パッケージファイルを作成し、デプロイをします。
設定した内容でEC2が構築されていることが確認できます。
f:id:live-your-life-dd18:20210301211704p:plain


キーペアも想定通り設定されていました。
f:id:live-your-life-dd18:20210301211814p:plain


最後にStackを削除した時にEC2にアタッチされたEBSが削除されるか見てみます。


以下の通り、EC2と一緒に削除されていました。
f:id:live-your-life-dd18:20210301212317p:plain

感想及び所感

今回はCloudformationを使ってEC2を構築してみました。

手動でやるときはコンソールからそれっぽい設定を選んでやっていましたが、Cloudformationを使用することでちゃんと設定する内容を理解しながらできるので、とてもよかったです。