・この講座はCloudFormationの応用操作を扱ったものです。SAA試験の取得を優先されている方などはスキップしていただいて構いません。
■stack_s3.yml
AWSTemplateFormatVersion: "2010-09-09"
Description: CloudTechDemoS3
Parameters:
S3BucketName:
Type: String
Description: Type of this BacketName.
Resources:
S3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub ${S3BucketName}■s3config.cfg
S3BucketName=samplecloudtechbucket2■コマンド
aws cloudformation deploy --template-file stack_s3.yml --stack-name s3bucketcreate --parameter-overrides S3BucketName=samplecloudtechbucket
aws cloudformation deploy --template-file stack_s3.yml --stack-name s3bucketcreate --parameter-overrides $(cat s3config.cfg)
aws cloudformation describe-stack-resource --stack-name s3bucketcreate --logical-resource-id S3Bucket
aws cloudformation delete-stack --stack-name s3bucketcreate(0:00) ここからはパラメータを使ったCloudFormationのコマンドラインの実行方法を見ていきましょう。stack_s3.ymlというファイルを開きます。先ほどのものと何が違うのかと言いますと、VS CodeのComplete機能で比較をしてみましょう。こちらのような状態になります。ざっくり言いますと、バケットネームをパラメータで指定しているというのが違いになります。先ほどのものでは、バケットネームを直接打ち込んでいましたが、今回はパラメータを使っています。パラメータのおさらいですけれども、CloudFormationにテンプレートを流し込む際に、バケットネームを何にしますかというボックスが出てきますので、そこに作成したいバケット名を作成の都度打ち込んで使用していくという、パラメータの流れになりますけれども、AWS CLIコマンドを使用してパラメータを指定していくというハンズオンをやっていきます。 (0:57) ではコマンドラインを実行していきましょう。といっても先ほどと同様にaws cloudformation deployでテンプレートファイルを指定します。今回はstack_s3.ymlという、今開いているファイルを指定しまして、スタックの名前については先ほどと同様に、--stack-name s3create、ここまでは先ほどと同様ですが、ここからに注目です。こちらがコマンドラインで引数を指定する方法となります。--parameter-overridesというオプションの後にパラメータを指定していきます。今回はS3BucketNameという変数を渡していますので、変数をイコールで繋ぎまして、この後に作成したいバケット名を打ち込みます。今回はsamplecloudtechbucketという名前を指定して、この状態でEnterを押して実行しましょう。 (1:51) 作成中の状態となりました。おさらいですが、要はコマンドラインで直接パラメータを指定することができます。--parameter-overrides このオプションの後に指定したいパラメータ、そしてパラメータの値を指定していきます。今回の例で言いますと、S3BucketNameという変数として用意されているので、そのパラメータの値は直接コマンドラインでsamplecloudtechbucketというバケット名を指定した上で、コマンドラインを実行するという流れになります。 (2:23) CloudFormationの画面を更新すると、先ほどと同じs3createというスタック名の処理が完了しています。 (2:31) ここからは、外部ファイルでパラメータを指定して、コマンドラインで流し込んでいく方法を見ていきます。どういうことかというと、予め設定ファイルを用意しています。s3config.cfgファイルです。S3BucketName=samplecloudtechbucket2という、イコールで繋いだ先ほどのパラメータのコマンドラインで指定したのと同様なものの設定ファイルを用意しておきます。テンプレートと設定ファイルを並べてみましょう。右側に設定ファイル、左側にCloudFormationのテンプレートファイルを並べておきます。S3BucketNameというパラメータで指定するべき論理IDを設定ファイルで持たせておく形になります。では確認として、catでs3config.cfgファイルを開くとどうなるかというと、右上の表示内容と同じであるという確認ができます。 (3:29) では設定ファイルを使ったCLIコマンドを流し込む例を見ていきましょう。aws cloudformation deploy --template-file に stack_s3.yml を指定して--stack-name は s3bucketcreate です。パラメータも先ほどと同様に指定していきましょう。--parameter-overrides の後にパラメータを指定しますが、ここからがテクニックです。$(cat[スペース]の後に設定ファイルの名前を指定します。$(cat [設定ファイル])というコマンド実行結果がこちらに反映されますので、S3BucketName=samplecloudtechbucket2という文字列に置き換えられて、パラメータとして読み込ませてあげるといったテクニックとなります。 ではこちらを実行してみます。CloudFormationの画面で確認してみましょう。スタックを更新しますと、s3bucketcreateが進行中です。スタックの名前で指定したものが進行中となります。スタックの作成、バケットの作成が進行中の状態となりまして、更新ボタンを押すとバケット及びスタックテンプレート自体の作成も完了されましたし、S3バケットのマネジメントコンソールを更新してみますと、samplecloudtechbucket2という、設定ファイルで指定したバケット名どおりの状態になっていることが確認できました。以上がAWS CLIコマンドを使用したCloudFormationの作成及びパラメータで外部ファイルを参照するテクニックとなります。 (5:07) ここからは1つ小ネタなんですけれども、aws cloudformation describe-stack-resource そして --stack-name s3bucketcreate こちらはスタックのリソース情報を出力します。論理IDで指定することができますが、こちらのテクニックのご紹介です。s3bucketcreate の状態を説明して下さい、但しこちらの引数、--logical-resource-id 少し長いですけれども、論理ID S3Bucketを引数に指定して実行しますと、S3BucketというCloudFormationで作成した論理IDの状態が出力されていることを確認できます。S3Bucketという論理IDの詳細情報がこちらのように出力されますけれども、CloudFormationテンプレートでいくつかリソースを作成していくと、どうしても長くなりがちですので、特定のリソースの論理ID情報だけをコマンドラインでさっと確認したい時に、describe-stack-resourceを試してみて下さい。では作成したリソースはdeleteで削除しましょう。 aws cloudformation delete-stack --stack-name s3bucketcreate で削除まで完了してデモを終了したいと思います。