【CloudFormation講座7】AWS CLIでパラメーター値を指定する / 外部設定ファイルからパラメーターを読み込む【6:20】

・この講座は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 で削除まで完了してデモを終了したいと思います。

改善リクエスト

📍 改善リクエスト対象
カテゴリ: -
問題番号: -
📝
テキストを改善したほうが良い
🖼️
画像を改善したほうが良い
🎬
動画を改善したほうが良い
📌
その他
💡 こんな報告を歓迎しています
  • 技術的な誤り(正解が間違っている、解説に誤りがある など)
  • 設問の誤記・不備
  • 最新のAWS仕様との相違
  • フォーマット崩れ・表示の乱れ
💡 こんな報告を歓迎しています
  • 文字が潰れて読めない
  • 画像内容の技術的な誤り
  • 図の説明と内容の不一致
📌 画像右上の管理番号(例:SAA-123-1)を添えていただけると特定しやすくなります
💡 こんな報告を歓迎しています
  • 問題集と情報が異なる
  • 読み方がおかしい
  • 技術的な間違いがある
💡 その他のご要望
  • 上記カテゴリに当てはまらない改善要望

この教材の改善リクエストがある場合は、お気軽にご報告ください。
カテゴリを選択のうえ、詳細をご記入いただけますと幸いです。

CloudTech(クラウドテック)は多くのユーザーの皆様から改善リクエストをご協力いただき運営できております。
あなたの視点での気づきは他の学習者の迷いを解決する手助けとなります。
運営側でもチェックをしておりますが限界があるため、誠に恐縮ではございますが細かい点でもご遠慮なくご指摘をお願いいたします。

※ 匿名での報告となり、内容は一般公開されません。
※ 技術的なご質問への回答を行うフォームではございませんのでご注意ください。

リクエストを受け付けました
ご報告ありがとうございます!
内容を確認のうえ、改善対応いたします。