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

  • 0
    いいね
  • 0
    コメント

    この手順の目的

    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
    

    完了