CodeDeploy を使用して AWS にデプロイする
これらのオプションを使用すると、AWS クラウドへのデプロイを簡略化できます。このアプローチでは、ユーザーに代わってパイプラインが維持されるため、メンテナンスが少なく済みます。
はじめる前に
AWS CodeDeploy パイプを使用してアプリケーションをデプロイするには、以下が必要です。
アプリケーションへのデプロイや S3 バケットへのアーティファクトのアップロードをパイプに許可するための十分な権限が構成されている IAM ユーザー。
CodeDeploy 用に設定された EC2 インスタンス : CodeDeploy で Amazon EC2 インスタンスを使用する
CodeDeploy アプリケーションとデプロイ グループが構成済みであること。AWS の簡単なチュートリアルをご確認ください: アプリケーションおよびデプロイ グループの作成
デプロイメント アーティファクトがコピーされる AWS S3 バケットをセットアップしていること。既定では <application_name>-codedeploy-deployment という規則に従います。注: バケット名は DNS 準拠である必要があります (バケット名には大文字が含まれてはならず、小文字または数字から始まる必要があります)。
手順
AWS CodeDeploy パイプのサンプル リポジトリをクローンします。
AWS 資格情報を Bitbucket Pipelines に追加します。Bitbucket リポジトリで [設定] に移動し、[Pipelines] で [リポジトリ変数] を選択し、次の変数を追加します。
共通の変数
AWS_ACCESS_KEY_ID (*): ご使用の AWS アクセス キー。
AWS_SECRET_ACCESS_KEY (*): ご使用の AWS 秘密アクセス キー。セキュアな変数として保存されている必要があります。
AWS_DEFAULT_REGION (*):AWS リソースを含むリージョンの AWS リージョン コード (us-east-1、us-west-2 など)。詳細については、Amazon Web Services 全般のリファレンスの「リージョンとエンドポイント」を確認してください。
APPLICATION_NAME (*): アプリケーション名。
COMMAND (*): 動作モード: upload または deploy。各モードの仕組みについては「詳細」セクションを参照してください。
DEBUG: 追加のデバッグ情報を有効化します。既定: false。
(*) = 必須の変数
アップロード コマンド変数
COMMAND が upload に設定されている場合、次のものを利用できます。
ZIP_FILE (*): S3 にアップロードするアプリケーション アーティファクト。"update" に必要です。
S3_BUCKET: アプリケーション zip のアップロード先およびデプロイ元となる S3 バケットをオーバーライドします。既定では <application_name>-codedeploy-deployment という規則に従います。
VERSION_LABEL: S3 のアプリケーション リビジョンの名前をオーバーライドします。既定では <application_name>-<build_number>-<commit> という規則に従います。
(*) = 必須の変数
デプロイ コマンド変数
COMMAND が deploy に設定されている場合、次のものを利用できます。
DEPLOYMENT_GROUP (*): デプロイ グループの名前です。
S3_BUCKET: アプリケーション zip のアップロード先およびデプロイ元となる S3 バケットをオーバーライドします。既定では <application_name>-codedeploy-deployment という規則に従います。
VERSION_LABEL: S3 のアプリケーション リビジョンの名前をオーバーライドします。既定では <application_name>-<build_number>-<commit> という規則に従います。
WAIT: デプロイメントの完了を待機するかどうか。既定: true。
FILE_EXISTS_BEHAVIOR: デプロイ ターゲットの場所 (AppSpec ファイルで定義) にファイルが既に存在する場合に実行するアクションです。許可されている値: OVERWRITE、DISALLOW、RETAIN、既定: DISALLOW。
IGNORE_APPLICATION_STOP_FAILURES: デプロイされたアプリケーションの以前のバージョンを停止しようとしたときにスローされる任意のエラーを無視します。既定: false。
EXTRA_ARGS: aws deploy create-deployment に渡す追加の引数です。
(*) = 必須の変数
詳細
パイプは Upload と Deploy の 2 つの動作モードを提供します。
アップロード
S3 バケットにアプリケーション (zip ファイル) をアップロードしたり、CodeDeploy で新しいアプリケーション リビジョンを登録したりします。既定では、zip ファイルは、命名規則 <application_name>-codedeploy-deployment に従う S3 バケットにアップロードされます。これは S3_BUKET パラメーターでオーバーライドできます。
アップロードされた zip アーティファクトの名前は <application_name>-<build_number>-<commit> となります。これは VERSION_LABEL パラメーターでオーバーライドできます。
デプロイ
以前にアップロードしたアプリケーション リビジョンをデプロイ グループにデプロイします。既定では、リビジョンを含むリビジョン S3 バケットは命名規則 <application_name>-codedeploy-deployment に従います。これは S3_BUKET パラメーターでオーバーライドできます。
パイプは <application_name>-<build_number>-<commit> (これは VERSION_LABEL パラメーターでオーバーライドできます) に一致するアプリケーション リビジョンのデプロイを試行し、デプロイが成功するまで待機します。
注意事項
既定の VERSION_LABEL で deploy モードを使用すると、パイプはビルド番号とコミット ハッシュに基づいて新しいバージョン ラベルを作成します。また、対応するバージョンが S3 であらかじめ設定されるように、同じパイプライン内で upload モードのパイプを実行する必要があります。パイプの upload 部分を同じパイプラインで実行しない場合は、明示的な VERSION_LABEL を使用する必要があります。たとえば、ビルド番号から切り離されたセマンティック バージョニングまたは別のバージョン管理スキームを使用します。
例
アップロード
アプリケーション myapp.zip を my-application-codedeploy-deployment という S3 バケットにアップロードします。アプリケーションは my-application-<build-number>-<commit> として S3 にアップロードされます。
script:
- pipe: atlassian/aws-code-deploy:0.2.10
variables:
AWS_DEFAULT_REGION: 'ap-southeast-2'
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
COMMAND: 'upload'
APPLICATION_NAME: 'my-application'
ZIP_FILE: 'myapp.zip'
アプリケーション myapp.zip を my-bucket という S3 バケットにアップロードします。アプリケーションは my-app-1.0.0 として S3 にアップロードされます。
script:
- pipe: atlassian/aws-code-deploy:0.2.10
variables:
AWS_DEFAULT_REGION: 'ap-southeast-2'
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
COMMAND: 'upload'
APPLICATION_NAME: 'my-application'
ZIP_FILE: 'myapp.zip'
S3_BUCKET: 'my-bucket'
VERSION_LABEL: 'my-app-1.0.0'
デプロイ
デプロイメントを開始し、完了するまで待ちます。S3 バケット my-application-codedeploy-deployment からのアプリケーション リビジョン my-application-<build-number>-<commit> がデプロイされます。
script:
- pipe: atlassian/aws-code-deploy:0.2.10
variables:
AWS_DEFAULT_REGION: 'ap-southeast-2'
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
COMMAND: 'deploy'
APPLICATION_NAME: 'my-application'
DEPLOYMENT_GROUP: 'my-deployment-group'
WAIT: 'true'
S3 のカスタムの場所にアップロードされたアプリケーション リビジョンを参照して、デプロイメントを開始します。S3 バケット my-bucket からのアプリケーション リビジョン my-app-1.0.0 がデプロイされます。
script:
- pipe: atlassian/aws-code-deploy:0.2.10
variables:
AWS_DEFAULT_REGION: 'ap-southeast-2'
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
COMMAND: 'deploy'
APPLICATION_NAME: 'my-application'
DEPLOYMENT_GROUP: 'my-deployment-group'
WAIT: 'true'
S3_BUCKET: 'my-bucket'
VERSION_LABEL: 'my-app-1.0.0'
デプロイメントを開始し、アプリケーション停止による任意の失敗を無視して、以前のデプロイメント ファイルを強制的に上書きします。
script:
- pipe: atlassian/aws-code-deploy:0.2.10
variables:
AWS_DEFAULT_REGION: 'ap-southeast-2'
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
COMMAND: 'deploy'
APPLICATION_NAME: 'my-application'
DEPLOYMENT_GROUP: 'my-deployment-group'
WAIT: 'true'
IGNORE_APPLICATION_STOP_FAILURES: 'true'
FILE_EXISTS_BEHAVIOR: 'OVERWRITE'
注意
既定の VERSION_LABEL で deploy モードを使用すると、パイプはビルド番号とコミット ハッシュに基づいて新しいバージョン ラベルを生成します。また、対応するバージョンが S3 であらかじめ設定されるように、同じパイプライン内で upload モードでパイプを実行する必要があります。パイプの upload 部分を同じパイプラインで実行しない場合は、明示的な VERSION_LABEL を使用する必要があります。たとえば、ビルド番号から切り離されたバージョン管理スキームを使用します。