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. Add your AWS credentials to Bitbucket Pipelines. In your repository, select Repository settings on the left sidebar.

  3. Under Pipelines, select Repository variables and add the following variables.

You can define these variables at the deployment environment, repository, or workspace level.

共通の変数

  • 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。

  • WAIT_INTERVAL: Time to wait between polling for deployment to complete (in seconds). Default: 15.

  • FILE_EXISTS_BEHAVIOR: デプロイ ターゲットの場所 (AppSpec ファイルで定義) にファイルが既に存在する場合に実行するアクションです。許可されている値: OVERWRITE、DISALLOW、RETAIN、既定: DISALLOW。

  • IGNORE_APPLICATION_STOP_FAILURES: デプロイされたアプリケーションの以前のバージョンを停止しようとしたときにスローされる任意のエラーを無視します。既定: false。

  • EXTRA_ARGS: aws deploy create-deployment に渡す追加の引数です。

  • BUNDLE_TYPE: The file types of the application revision stored in S3: zip, tar, tgz, YAML or JSON. Default: zip. BUNDLE_TYPE should correspond to ZIP_FILE extension.

  • FOLDER: If the deployable artifact is in any folder inside bucket, specify the folder name.

  •  

(*) = 必須の変数

詳細

パイプは Upload と Deploy の 2 つの動作モードを提供します。

アップロード

Upload the application (as a zip file) to an S3 bucket, and register a new application revision with CodeDeploy. By default, the zip file is uploaded to an S3 bucket following the naming convention <application_name>-codedeploy-deployment, which can be overridden with the S3_BUCKET parameter.

The uploaded zip artifact will be named <application_name>-<build_number>-<commit>, which can be overridden with the VERSION_LABEL parameter.

デプロイ

Deploy a previously uploaded application revision to a deployment group. By default, the revision S3 bucket containing the revision follows the naming convention <application_name>-codedeploy-deployment, which can be overridden with the S3_BUCKET parameter.

The pipe will attempt to deploy the application revision matching <application_name>-<build_number>-<commit>, which can be overridden with the VERSION_LABEL parameter, and wait until deployment has succeeded.

注意事項

  • When you use the deploy mode with the default VERSION_LABEL, the pipe will generate a new version label based on the build number and commit hash, so you need to make sure to also run the pipe with the upload mode within the same pipeline so the corresponding version is preset in S3. If you don't run the upload part of the pipe in the same pipeline, you should use explicit VERSION_LABEL, for example, use semantic or another versioning scheme that is decoupled from the build number.

アップロード

Upload the application myapp.zip to S3 bucket called my-application-codedeploy-deployment, with the application uploaded to S3 as 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: 'upload' APPLICATION_NAME: 'my-application' ZIP_FILE: 'myapp.zip'


Upload the application myapp.zip to custom S3 bucket called my-bucket, with the application uploaded to S3 as 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: 'upload' APPLICATION_NAME: 'my-application' ZIP_FILE: 'myapp.zip' S3_BUCKET: 'my-bucket' VERSION_LABEL: 'my-app-1.0.0'


デプロイ

Start a deployment and wait for it to finish. The application revision my-application-<build-number>-<commit> from the S3 bucket my-application-codedeploy-deployment will be deployed.

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'

Start a deployment, referencing an application revision uploaded to a custom location in S3. The application revision my-app-1.0.0 from the S3 bucket my-bucket will be deployed.

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'

When you use the deploy mode with the default VERSION_LABEL, the pipe generates a new version label based on the build number and commit hash. You need to make sure to also run the pipe with the upload mode within the same pipeline so the corresponding version is preset in S3. If you don't run the upload part of the pipe in the same pipeline, you should use explicit VERSION_LABEL, for instance, use a versioning scheme that is decoupled from the build number.

さらにヘルプが必要ですか?

アトラシアン コミュニティをご利用ください。