Help us understand the problem. What is going on with this article?

[JAWS-UG CLI] CloudFormation:#5 スタックの作成

More than 3 years have passed since last update.

この手順の目的

CloudFormationスタック"BasicWebServerInVPC"を作成します。

作業対象

  • CloudFormationサービス

標準時間

8分

前提条件

作業権限

CloudFormationへの権限

CloudFormationに対してフル権限があること。

作業環境

AWS CLIのバージョン

以下のバージョンで動作確認済

  • AWS CLI 1.11.14
コマンド
aws --version

結果(例):

  aws-cli/1.11.97 Python/2.7.12 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.5.60

バージョンが古い場合は最新版に更新しましょう。

コマンド
sudo -H pip install -U awscli

開始条件

作業に必要なモノ・情報

作業開始には、以下が全て揃っていることが必要です。

  • 設定ファイル用ディレクトリ

    • 今回は"${HOME}/tmp/conf-cloudformation"を設定ファイルディレクトリとします。
ls ${HOME}/tmp/conf-cloudformation
  • 存在しない場合は作成します。
mkdir -p ${HOME}/tmp/conf-cloudformation
  • CloudFormationスタック名

    • 作成するCloudFormationスタックの名称です。
    • 今回は"BasicWebServerInVPC"とします。
  • テンレートファイル

    • 検査の対象となるCloudFormationテンプレートファイルです。
    • 今回は"BasicWebServerInVPC.template"とします。
  • テンプレートのパラメータ

    • テンプレートに必要なパラメータです。
    • パラメータに含まれているリソースは存在するものとします。
変数の設定
EC2_KEYPAIR_NAME='<キーペア名>'

0. 準備

まず変数の確認をします。

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}
        DIR_CONF:            (0.3) ${DIR_CONF}
        CF_STACK_NAME:       (0.4) ${CF_STACK_NAME}
        FILE_INPUT:          (0.5) ${FILE_INPUT}
        CF_STACK_PARAMETERS: (0.6) ${CF_STACK_PARAMETERS}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <CloudFormationのフル権限が許可されているプロファイル>
  AWS_DEFAULT_REGION:  (0.2) ap-northeast-1
  DIR_CONF:            (0.3) ${HOME}/tmp/conf-cloudformation
  CF_STACK_NAME:       (0.4) BasicWebServerInVPC
  FILE_INPUT:          (0.5) ${HOME}/tmp/conf-cloudformation/BasicWebServerInVPC.template
  CF_STACK_PARAMETERS: (0.6) ParameterKey=KeyName,ParameterValue=${EC2_KEYPAIR_NAME}

変数が入っていない、適切でない場合は、それぞれの手順番号について作業を行います。

0.1. プロファイルの指定

プロファイルの一覧を確認します。

コマンド
cat ~/.aws/credentials \
       | grep '\[' \
       | sed 's/\[//g' | sed 's/\]//g'

結果(例):

  iamFull-prjz-mbpr13
  <CloudFormationのフル権限が許可されているプロファイル>
変数の設定
export AWS_DEFAULT_PROFILE='<CloudFormationのフル権限が許可されているプロファイル>'

0.2. リージョンの決定

変数の設定
export AWS_DEFAULT_REGION='ap-northeast-1'

0.3. 設定ファイルディレクトリの指定

変数の設定
DIR_CONF="${HOME}/tmp/conf-cloudformation"

0.4. スタック名の指定

変数の設定
CF_STACK_NAME='BasicWebServerInVPC'

0.5. テンプレートファイル名の指定

変数の設定
FILE_INPUT="${DIR_CONF}/${CF_STACK_NAME}.template" \
        && echo ${FILE_INPUT}

0.6. パラメータの指定

変数の設定
CF_STACK_PARAMETERS="ParameterKey=KeyName,ParameterValue=${EC2_KEYPAIR_NAME}" \
        && echo ${CF_STACK_PARAMETERS}

再確認

設定された変数の内容を再確認します。

変数の確認
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}
        DIR_CONF:            (0.3) ${DIR_CONF}
        CF_STACK_NAME:       (0.4) ${CF_STACK_NAME}
        FILE_INPUT:          (0.5) ${FILE_INPUT}
        CF_STACK_PARAMETERS: (0.6) ${CF_STACK_PARAMETERS}

ETX

結果(例):

  AWS_DEFAULT_PROFILE: (0.1) <CloudFormationのフル権限が許可されているプロファイル>
  AWS_DEFAULT_REGION:  (0.2) ap-northeast-1
  DIR_CONF:            (0.3) ${HOME}/tmp/conf-cloudformation
  CF_STACK_NAME:       (0.4) BasicWebServerInVPC
  FILE_INPUT:          (0.5) ${HOME}/tmp/conf-cloudformation/BasicWebServerInVPC.template
  CF_STACK_PARAMETERS: (0.6) ParameterKey=KeyName,ParameterValue=${EC2_KEYPAIR_NAME}

1. 事前作業

1.1. 作業対象の状態確認

設定ファイル用ディレクトリが存在することを確認します。

コマンド
ls -d ${DIR_CONF}

結果(例):

  <ディレクトリのフルパス名>

テンプレートファイルが設定ファイル用ディレクトリに存在することを確認します。

コマンド
ls -1 ${FILE_INPUT}

結果:

  ${HOME}/tmp/conf-cloudformation/BasicWebServerInVPC.template

作成しようとしているCloudFormationスタック"BasicWebServerInVPC"はまだ存在しないことを確認します。

コマンド
aws cloudformation describe-stacks \
        --stack-name ${CF_STACK_NAME}

結果(例):

  An error occurred (ValidationError) when calling the DescribeStacks operation: Stack with id BasicWebServerInVPC does not exist

2. 本作業

2.1. スタックの作成

変数の確認
cat << ETX

        CF_STACK_NAME:       ${CF_STACK_NAME}
        CF_STACK_PARAMETERS: ${CF_STACK_PARAMETERS}
        FILE_INPUT:          ${FILE_INPUT}

ETX
コマンド
aws cloudformation create-stack \
        --stack-name "${CF_STACK_NAME}" \
        --template-body file://${FILE_INPUT} \
        --parameters ${CF_STACK_PARAMETERS}

結果(例):

  {
    "StackId": "arn:aws:cloudformation:ap-northeast-1:XXXXXXXXXXXX:stack/BasicWebServerInVPC/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
  }

2.2. ステータスの確認

コマンド
CF_STACK_STATUS=$( \
        aws cloudformation describe-stacks \
          --stack-name ${CF_STACK_NAME} \
          --query "Stacks[?StackName == \`${CF_STACK_NAME}\`].StackStatus" \
          --output text \
) \
        && echo ${CF_STACK_STATUS}

結果(例):

  CREATE_IN_PROGRESS

2.3. イベントの確認

ステータスがROLLBUCKになった場合は、イベントを確認して原因を特定します

コマンド
aws cloudformation describe-stack-events \
        --stack-name ${CF_STACK_NAME}

結果(例):

  (省略)

3. 事後作業

3.1. 完了条件の確認

作成したCloudFormationスタック"BasicWebServerInVPC"が存在することを確認します。

コマンド
CF_STACK_STATUS=$( \
        aws cloudformation describe-stacks \
          --stack-name ${CF_STACK_NAME} \
          --query "Stacks[?StackName == \`${CF_STACK_NAME}\`].StackStatus" \
          --output text \
) \
        && echo ${CF_STACK_STATUS}

結果(例):

  CREATE_COMPLETE

完了

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away