CodeDeployのリビジョンにバージョン情報を付与する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS CodeDeployでは、デプロイするアプリケーションをリビジョンと呼ばれるアーカイブとしてS3やCodeCommitにアップロードします。 リビジョンはS3やCodeCommitのバージョニングすることも可能です。 しかし、運用面では各リビジョンにバージョン情報が付与されている方が解りやすくなります。 今回は、S3にアップロードする時にバージョン情報を付与する手順を紹介します。

リビジョンのバージョン情報

リビジョンをS3にアップロードする場合は、aws deploy pushコマンドを利用するのが便利です。 この時、アップロード先のS3ロケーション(バケット名+キー)を指定します。

aws deploy push --region $REGION --application-name $APP_NAME
   --s3-location s3://$S3_BUCKET/$S3_KEY --source .

バージョン情報を付与するならば、次のようなS3ロケーションとなるでしょう。

  • s3:///application_1.0.zip
  • s3:///application_1.1.zip
  • s3:///application_201604011011.zip
  • s3:///application_201604155030.zip

前者はバージョン番号を、後者はリビジョン作成日時をバージョン情報として付与しています。

本番環境はリビジョンにバージョン情報を付与する

本番環境や検証環境にデプロイする場合、リポジトリのソースコードのバージョニングとデプロイするパッケージを同期させることが望ましい運用です。 したがって、gitのタグをバージョン情報として設定しましょう。 シェルスクリプトでgitのタグを取得するにはgit describeコマンドを利用します。

TAG=`git describe`

ただし、必ずgit checkoutでタグをチェックアウトした状態でコマンドを実行してください。 タグが付けられた後でコミットがある場合、describeコマンドはタグ以外の情報も返す事になります(詳細はgitのヘルプを確認してください)。

また、最初のバージョンがないとデプロイの確認ができないため、必要最低限の実装(Hello WorldレベルでOK)が終わったならば、v0.0などでタグを打ってください。

開発環境はリビジョンに日時を付与する

開発環境にデプロイする場合は、都度タグ付けをするのは現実的ではありません。 gitであればdevelopブランチを利用し、ちょっとした修正を行って、ユニットテストを通したならば、即開発環境に反映させたいと思います。

このような場合は、日時をバージョン情報として設定しましょう。 シェルスクリプトで日時を取得するにはdateコマンドを利用します。

TAG=`date '+%Y%m%d%H%M'`

ただし、日時が新しいかといって必ずしも最新版のリビジョンであるとは限らない点は注意してください。 あくまで開発用途の運用になります。

デプロイスクリプト(リビジョン作成対応)

リビジョンにバージョン情報を付与してS3にリビジョンを作成するスクリプトです。 ご自由にお使いください。

#!/usr/bin/env bash

REGION=ap-northeast-1
APP_NAME=development_yourapplication
S3_BUCKET=revisions.yourapplication
SOURCE="."
TAG=`date '+%Y%m%d%H%M'`
#TAG=`git describe`
S3_KEY=development/${APP_NAME}_${TAG}.zip

echo "create revision for CodeDeploy: ${S3_KEY}"
aws deploy push --region ${REGION} --application-name ${APP_NAME} --s3-location s3://${S3_BUCKET}/${S3_KEY} --source ${SOURCE}

タグの部分は適宜修正して活用してください。

まとめ

CodeDeployでリビジョンを作成する時は、円滑な運用を行うため、バージョン情報を付与しましょう。