LoginSignup
3
3

More than 5 years have passed since last update.

[JAWS-UG CLI] CloudFormation:#2 S3バケットの作成

Last updated at Posted at 2014-09-22

http://jawsug-cli.doorkeeper.jp/events/13797 でのハンズオン資料です。

CloudFormationの共通テンプレートを置くためのS3バケットを、CloudFormationで作成します。

前提条件

  • S3へのフルアクセス権限

0. 事前作業

0.1. S3バケット名の決定

S3バケット名を決めておいてください。

コマンド
   $ CF_BUCKET_NAME='cf-example'

バケット名はS3全体でユニークである必要があります。

0.2. 作業用ディレクトリの作成

作業用ディレクトリを作成します。

コマンド
   $ WORK_DIR="${HOME}/tmp/aws_cf"
   $ mkdir -p ${WORK_DIR}
   $ cd ${WORK_DIR}

1. S3バケット作成

1.1. テンプレートの作成 (S3バケット作成)

CloudFormationテンプレートを作成します。

コマンド
   $ FILE_CF_TEMPLATE="${CF_BUCKET_NAME}-bucket.json"
   $ CF_RESOURCE_ID='S3Bucket'
   $ CF_DESCRIBE='CloudFormation template bucket'

JSONファイルを作成したら、フォーマットが壊れてないか必ず確認します。

コマンド
$ cat << EOF > ${FILE_CF_TEMPLATE}
{
     "AWSTemplateFormatVersion" : "2010-09-09",
     "Resources" : {
       "${CF_RESOURCE_ID}" : {
         "Type" : "AWS::S3::Bucket",
         "Properties" : {
            "BucketName" : "${CF_BUCKET_NAME}"
         }
       }
     },
     "Description": "${CF_DESCRIBE}"
}
EOF

JSONファイルを作成したら、フォーマットが壊れてないか必ず確認します。

コマンド
   $ cat ${FILE_CF_TEMPLATE} | json_verify
結果
   JSON is valid

1.2. S3バケットの作成

コマンド
   $ CF_STACK_NAME="${CF_BUCKET_NAME}-bucket" && echo ${CF_STACK_NAME}
結果
   cf-example01-bucket
コマンド
   $ aws cloudformation create-stack --stack-name ${CF_STACK_NAME} --template-body file://${FILE_CF_TEMPLATE}
結果
   {
       "StackId": "arn:aws:cloudformation:us-west-1:XXXXXXXXXXXX:stack/s3-bucket-www-example-jp/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
   }

1.3. スタックの状況確認

list-stacksコマンドで、スタックの状況を確認してみましょう。

コマンド
   $ aws cloudformation list-stacks \
     | jq -r --arg stackname ${CF_STACK_NAME} '.StackSummaries[] | select(.StackName == $stackname) | .StackStatus'
結果
CREATE_COMPLETE

StackStatusが'CREATE_COMPLETE'になっていれば作成は完了です。

それ以外が表示されている場合は、下記コマンドでFailedの文字が出ている前後を見て原因を調べます。

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

1.4. S3バケットの確認

コマンド
   $ aws s3 ls | grep ${CF_BUCKET_NAME}
結果
   2014-09-09 15:19:34 cf-example

1.5. スタックの内容確認

コマンド
   $ aws cloudformation get-template --stack-name ${CF_STACK_NAME}
結果
   {
       "TemplateBody": {
           "AWSTemplateFormatVersion": "2010-09-09", 
           "Description": "cf bucket", 
           "Resources": {
               "S3Bucket": {
                   "Type": "AWS::S3::Bucket", 
                   "Properties": {
                       "BucketName": "cf-example"
                   }
               }
           }
       }
   }

1.6. バケットのURL取得(HTTPS)

コマンド
   CF_BUCKET_URL="s3-`aws s3api get-bucket-location --bucket=${CF_BUCKET_NAME} --query LocationConstraint --output text | sed 's/None/us-east-1/'`.amazonaws.com/${CF_BUCKET_NAME}" \
   && echo ${CF_BUCKET_URL}
3
3
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
3
3