CodeDeploy を使用して AWS にデプロイする

これらのオプションを使用すると、AWS クラウドへのデプロイを簡略化できます。このアプローチでは、ユーザーに代わってパイプラインが維持されるため、メンテナンスが少なく済みます。 

はじめる前に

AWS CodeDeploy パイプを使用してアプリケーションをデプロイするには、以下が必要です。

  • アプリケーションへのデプロイや S3 バケットへのアーティファクトのアップロードをパイプに許可するための十分な権限が構成されている IAM ユーザー。

  • CodeDeploy 用に設定された EC2 インスタンス : CodeDeploy で Amazon EC2 インスタンスを使用する

  • CodeDeploy アプリケーションとデプロイ グループが構成済みであること。AWS の簡単なチュートリアルをご確認ください: アプリケーションおよびデプロイ グループの作成

  • デプロイメント アーティファクトがコピーされる AWS S3 バケットをセットアップしていること。既定では <application_name>-codedeploy-deployment という規則に従います。注: バケット名は DNS 準拠である必要があります (バケット名には大文字が含まれてはならず、小文字または数字から始まる必要があります)。

手順

  1. AWS CodeDeploy パイプのサンプル リポジトリをクローンします。

  2. 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_BUCKET パラメーターでオーバーライドできます。

アップロードされた 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.zipmy-application-codedeploy-deployment という S3 バケットにアップロードします。アプリケーションは my-application-<build-number>-<commit> として S3 にアップロードされます。

1 2 3 4 5 6 7 8 9 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 にアップロードされます。

1 2 3 4 5 6 7 8 9 10 11 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> がデプロイされます。

1 2 3 4 5 6 7 8 9 10 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 がデプロイされます。

1 2 3 4 5 6 7 8 9 10 11 12 13 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'

デプロイメントを開始し、アプリケーション停止による任意の失敗を無視して、以前のデプロイメント ファイルを強制的に上書きします。

1 2 3 4 5 6 7 8 9 10 11 12 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 を使用する必要があります。たとえば、ビルド番号から切り離されたバージョン管理スキームを使用します。

その他のヘルプ