クラウドにデプロイ
GitLabは、必要なライブラリやツールがプリインストールされたDockerイメージを提供することで、このプロセスの苦痛を軽減しています。 CI/CDパイプラインでこれらを参照することで、選択したクラウドプロバイダとより簡単にやり取りできるようになります。
エーダブリュエス
GitLabは、GitLab CI/CDからAWSコマンドを実行するために使えるDockerイメージと、AWSへのデプロイを簡単にするテンプレートを提供しています。
GitLab CI/CDからのAWSコマンド実行
GitLab 12.6 で導入されました。
GitLabのAWS Dockerイメージは、aws
コマンドを aws
実行できるAWS Command Line Interfaceを提供aws
します。 aws
デプロイ戦略の一環として、GitLabのAWS Dockerイメージを指定することで、.gitlab-ci.yml
から直接コマンドをaws
実行できます aws
。
aws
コマンドを実行するには、いくつかの認証情報が必要です:
- AWSアカウントをまだお持ちでない場合は、サインアップしてください。
- コンソールにログインし、新しいIAMユーザーを作成します。
-
新しく作成したユーザーを選択し、その詳細情報にアクセスします。 セキュリティ資格情報 > 新しいアクセスキーの作成 に移動します。
注:新しいアクセスキーIDとシークレットアクセスキーペアが生成されますので、すぐに控えておいてください。 -
GitLabプロジェクトで、Settings > CI / CDに進みます。 環境変数として以下を設定します(以下の表を参照):
- アクセスキーID。
- 秘密のアクセスキー
- リージョンコード:AWSリージョナルエンドポイントのリストを確認することができます。 使用しようとしているAWSサービスが選択したリージョンで利用可能かどうかを確認するとよいでしょう。
変数名 値 AWS_ACCESS_KEY_ID
アクセスキーID AWS_SECRET_ACCESS_KEY
シークレットアクセスキー AWS_DEFAULT_REGION
地域コード -
このプロジェクトの
.gitlab-ci.yml
ファイルでaws
コマンドが使えるようになりました:deploy: stage: deploy image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest # see the note below script: - aws s3 ... - aws create-deployment ...
Note:上記の例で使用したイメージ (registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
) はGitLab Container Registry上でホストされており、すぐに使用できます。 あるいは、AWS ECR 上でホストされているイメージに置き換えてください。
CI/CD で AWS Elastic Container Registry(ECR) イメージを使用します。
GitLab レジストリでホストされているイメージを参照する代わりに、Amazon Elastic Container Registry(ECR)のようなサードパーティのレジストリでホストされているイメージを参照することができます。
そのためには、あなたのECRリポジトリに画像をプッシュしてください。 次に、.gitlab-ci.yml
ファイルでその画像を参照し、image
パスをあなたのECR画像を指すように置き換えてください。
AWS Elastic Container Serviceへのアプリケーションのデプロイ(ECS)
GitLab 12.9で導入されました。
include
GitLab はプロジェクトに含めることができる一連のCI テンプレートを提供しています。Amazon Elastic Container Service(AWS ECS) クラスターへのアプリケーションのデプロイを自動化するには、.gitlab-ci.yml
ファイルにDeploy-ECS.gitlab-ci.yml
テンプレートを記述します。
GitLabはまた、AWSでの作業を簡素化するために、gitlab-ci.yml
ファイルで使用できるDockerイメージも提供しています:
- AWS CLIコマンドを使用するには、
registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
。 -
registry.gitlab.com/gitlab-org/cloud-deploy/aws-ecs:latest
を使用して、アプリケーションを AWS ECS にデプロイします。
このプロセスを開始する前に、AWS ECS上のクラスター、およびECSサービス、ECSタスク定義、AWSRDS上のデータベースなどの関連コンポーネントが必要です。
AWS ECSのセットアップが完了したら、以下の手順に従ってください:
- AWSの認証情報がプロジェクトの環境変数として設定されていることを確認してください。上記の手順に従って、この設定を完了することができます。
-
これらの変数をプロジェクトの
.gitlab-ci.yml
ファイルに追加します:variables: CI_AWS_ECS_CLUSTER: my-cluster CI_AWS_ECS_SERVICE: my-service CI_AWS_ECS_TASK_DEFINITION: my-task-definition
このスニペットでは3つの変数が定義されています:
-
CI_AWS_ECS_CLUSTER
デプロイの対象となるAWS ECSクラスターの名前です。 -
CI_AWS_ECS_SERVICE
: AWS ECSクラスターに紐づく対象サービス名。 -
CI_AWS_ECS_TASK_DEFINITION
上記のサービスに関連付けられたタスク定義の名前。
これらの名前は、AWS ECSのダッシュボードで対象のクラスターを選択した後に見つけることができます:
-
-
このテンプレートを
.gitlab-ci.yml
に含めます:include: - template: AWS/Deploy-ECS.gitlab-ci.yml
Deploy-ECS
テンプレートはGitLabに同梱されており、GitLab.comで入手できます。 -
更新した
.gitlab-ci.yml
をコミットしてプロジェクトのリポジトリにプッシュすれば完了です!アプリケーションのDockerイメージは再構築され、GitLabレジストリにプッシュされます。 その後、対象のタスク定義は新しいDockerイメージの場所で更新され、結果としてECSに新しいリビジョンが作成されます。
最後に、タスク定義の新しいリビジョンでAWS ECSサービスが更新され、クラスターがアプリケーションの最新バージョンをプルするようになります。
Deploy-ECS.gitlab-ci.yml
テンプレートにはJobs/Build.gitlab-ci.yml
とJobs/Deploy/ECS.gitlab-ci.yml
の “サブテンプレート” が含まれています。これらの “サブテンプレート” を単独でインクルードせず、メインの](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/AWS/Deploy-ECS.gitlab-ci.yml) テンプレートのみをインクルードしてください。 “サブテンプレート” はメインテンプレートと一緒に使用するように設計されています。 メインテンプレートをインクルードしなかった場合、予期せず移動したり変更されたりしてパイプラインが失敗する可能性があります。 また、これらのテンプレート内のジョブ名は変更される可能性があります。 名前が変更されるとオーバーライドが機能しなくなるため、独自のパイプラインでこれらのジョブ名をオーバーライドしないでください。また、AWS ECSへのデプロイにDeploy-ECS.gitlab-ci.yml
テンプレートを使用したくない場合は、aws-base
Dockerイメージを使用して、ECS用の独自のAWS CLIコマンドを実行することもできます。
deploy:
stage: deploy
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- aws ecs register-task-definition ...