0
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 3 years have passed since last update.

CloudFormationをゼロから勉強する。(その4:コマンドからの操作)

Last updated at Posted at 2020-09-10

はじめに

以前の記事で何度か紹介してきたBlack Belt Online Seminarの記事ですが、2020年度版が公開されたようです。

前回からのアップデートの内容や、新たなツールの紹介もされているので、色々と参考になります。

さて、前回はGUI画面上から値を入出力させましたが、今回は今までGUIで行ってきたスタックの作成&削除をコマンドで操作してみようと思います。

CloudFormationコマンド

普段使いそうなコマンドを抜粋しました。

その他のコマンドや詳細は以下を参照して下さい。

内容 コマンド
スタックの作成(ローカルファイル) aws cloudformation create-stack --template-body [ファイル格納場所] --stack-name [stack名]
スタックの作成(リモートURL) aws cloudformation create-stack --template-url [ファイル格納場所] --stack-name [stack名]
スタックの作成(入力項目指定) aws cloudformation create-stack --template-[body/url] [ファイル格納場所] --stack-name [stack名] --parameters [データタイプ(後述)/jsonファイル格納場所]
テンプレートの構文チェック aws cloudformation validate-template --template-[body/url] [ファイル格納場所]
スタックイベント履歴の表示 aws cloudformation list-stacks
リソースのリスト表示 aws cloudformation list-stack-resources --stack-name [stack名]
実行中スタックの表示 aws cloudformation describe-stacks --stack-name [stack名]
スタックの削除 aws cloudformation delete-stack --stack-name [stack名]
  • Parametersのデータタイプ
内容 コマンド
パラメータに関連付けられた値 ParameterKey=[string],ParameterValue=[string]
既存パラメータ値の使用 ParameterKey=[string],UsePreviousValue=[boolean]
SSMパラメータのスタック定義に使用される値 ParameterKey=[string],ResolvedValue=[string]

作業用EC2インスタンスへのファイルコピー

前回作成したテンプレートを、「その1:前準備」で準備した作業用EC2インスタンスに格納しておきます。

今回はコピー後のテンプレート名をcloudformation.yamlとします。

テンプレートファイルのコピー
aws s3 cp s3://cf-templates-xxxxxxxxxxxx-[リージョン名]/xxxxxxxxxx-designer/new.templatexxxxxxxxxxx ./cloudformation.yaml

VS Codeで作業用EC2インスタンスへ接続

その1:前準備」で書き忘れていましたがVSCodeの拡張機能であるRemote DevelopmentをインストールしてRemote DevelopmentでEC2インスタンスに接続します。(Remote Developmentのインストール&セットアップは、他サイトを参考にして下さい)

EC2インスタンスの追加

前回のテンプレートにEC2インスタンスを追加してみようと思います。

構成は前回作成したVPCSubnetの中に新しくEC2インスタンスを追加した構成を想定しています。

capture_25082020_072051.jpg

上図の構成を組んだ際に生成されるEC2インスタンスのコードは以下となります。

Resourcesセクションの記載は、前回作成したテンプレート内に記載されているので、Resources行を抜かしたコードをVPCSubnetリソースの後ろにコピペしておきます。

EC2インスタンスデフォルト定義
Resources:
  EC2I3Q8S8:
    Type: 'AWS::EC2::Instance'
    Properties:
      NetworkInterfaces:
        - SubnetId: !Ref EC2SJOWQ

必要パラメータの追加(AMI設定)

EC2インスタンスのテンプレートリファレンス」で必須項目を確認するとImageId条件付きとなっている以外は特に必須項目は無いようです。

ImageIdEC2インスタンスを作成する際に選択する以下AMIのIDになります。

capture_25082020_074203.jpg

今回はAmazon Linx2 AMI (64ビットx86)AMIを選択しようと思いますが、EC2インスタンステンプレートのエンティティのうち、InstanceTypeのデフォルト値はm1.smallとなります。

ただ、Amazon Linx2 AMI (64ビットx86)にはm1.smallのインスタンスタイプは無いためInstanceTypeも明示的に指定する必要があります。

必要パラメータの追加(NetworkInterface設定)

EC2インスタンステンプレートリファレンスの「NetworkInterface」を確認すると、DeviceIndex条件付きとなっており、今回はDeviceIndexの記載も必要となります。

EC2インスタンスの設定

最終的なEC2インスタンスのテンプレートは以下となりました。

EC2インスタンス定義
EC2I3Q8S8:
  Type: 'AWS::EC2::Instance'
  Properties:
    ImageId: ami-0cc75a8978fbbc969
    InstanceType: t2.micro
    NetworkInterfaces:
      - SubnetId: !Ref EC2SJOWQ
        DeviceIndex: 0

コマンドからの実行

EC2インスタンスの追加も行ったので、実際にコマンド操作でスタックを作成していこうと思います。

尚、後述するコマンドの指定パラメータは以下表の通りとなるので、適宜読み替えて下さい。

内容 パラメータ
スタック名 stack-test
テンプレートファイルのパス /home/ec2-user/cloudformation.yaml
パラメータファイルのパス /home/ec2-user/param.json

コマンドからのスタック作成

aws cloudformation create-stack コマンドで作成が可能ですが、前回の作業で入力項目を追加していることから、--parametersオプションで入力項目を追記する必要があります。

スタック作成(パラメータ直接指定)
aws cloudformation create-stack --template-body file:///home/ec2-user/cloudformation.yaml --stack-name stack-test --parameters ParameterKey=VPCRange,ParameterValue=172.24.0.0/16 ParameterKey=SubnetRange,ParameterValue=172.24.0.0/24

パラメータは直接コマンドオプションで記載する以外に、json形式のファイルを読み込むことも可能です。(yaml形式不可)

以下、/home/ec2-userの配下にparam.jsonというパラメータファイルを作成した場合の例。

/home/ec2-user/param.json
[
  { "ParameterKey" : "VPCRange", "ParameterValue" : "172.24.0.0/16" },
  { "ParameterKey" : "SubnetRange", "ParameterValue" : "172.24.0.0/24" }
]
スタック作成(パラメータファイル読み込み)
aws cloudformation create-stack --template-body file:///home/ec2-user/cloudformation.yaml --stack-name stack-test --parameters file:///home/ec2-user/param.json

おわりに

インプットパラメータを長々書くのは可読性が悪く分かりづらいと感じていましたが、ファイルにまとめられるのは良いですね。

次回はMappingsセクションなどを使ってみようと思います。

0
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
0
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?