ニクニクドットミー

カッコいいおっさんを目指すエンジニアの厳かなブログ

【AWS】CodeDeployでS3をRevision Locationにしてデプロイしてみた

Codedeploy つい先日CodeDeployを試してみました。【AWS】5分で分かるAWS CodeDeploy その時はGithubと連携してデプロイを試したのですが、今回はS3で試してみたいと思います。

前回の記事で用意したApplicationを使いまわします。

S3バケットの作成

肝心のS3バケットを作成します。バケットのリージョンに注意しましょう。 CodeDeployはヴァージニア、オレゴンにしか対応してないので、それ以外のリージョンに作ってしまうとデプロイがDownloadBundleでコケます。 s3

aws deploy pushでリビジョンのアップロード

リビジョンとはデプロイするソースコードを指します。 リビジョンのアップロードにawscliを使ってみます。 ちなみにawscliのversion。2015/04/22時点の最新。

aws-cli/1.7.23 Python/2.7.5 Darwin/13.4.0

awscliにdeployとかあったんですね。知らなかった^^; ドキュメントはこちら。 http://docs.aws.amazon.com/cli/latest/reference/deploy/push.html

aws deploy push --application-name WordPress_App --description "This is my deployment" --ignore-hidden-files --s3-location s3://CodeDeployDemoBucket/WordPressApp.zip --source /tmp/MyLocalDeploymentFolder/

sourceで指定したディレクトリをzip圧縮して、それをs3-locationで指定したS3バケットにアップロードします。 今回は前回作ったApplicationを使い回してますが、aws deployコマンドでApplication作ることもできます。

サンプルを例にdeploy push してみます。前回のApplicationを使うので、test_v1という前回作ったものを指定してみます。


aws deploy push --region us-west-2 --application-name test_v1 --s3-location s3://s3-deploy/test_v1.zip --source ./CodeDeployLab/

push成功すると、こんな感じ


To deploy with this revision, run:
aws deploy create-deployment --application-name test_v1 --s3-location bucket=s3-deploy,key=test_v1.zip,bundleType=zip,eTag="66f02fcb38c7e4987e7bb0ee246c6b50" --deployment-group-name  --deployment-config-name <deployment-config-name> --description <description>

eTagというのがつきました。

Etagはオブジェクトのハッシュです。Etagはオブジェクトのコンテンツの同一性を識別するものなので、メタデータの変更はEtagには反映されません。 Etagはオブジェクトが作成されたときに決まります。 PUTまたはPOSTオペレーションにより作成されたオブジェクトの場合、Etagはクォート付の32桁の16進数となり、これはオブジェクトデータのmd5ダイジェストを表しています。

オブジェクトのコンテンツの同一性を識別するものみたいです。 s3_1

CodeDeployでデプロイする

Create New DeploymentでRevision TypeをS3を選択します。 s3_2

これでデプロイ! s3_3 無事成功ですね。

失敗もしたのですが、その時はS3のバケットをTokyoリージョンで作ってしまったが原因でした。

まとめ

自動化必須! 次はLambdaと組み合わせて自動化してみよう!

参考

LambdaでCodeDeployの自動デプロイ機能を実装する