クラウドにデプロイ

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 コマンドを実行するには、いくつかの認証情報が必要です:

  1. AWSアカウントをまだお持ちでない場合は、サインアップしてください。
  2. コンソールにログインし、新しいIAMユーザーを作成します。
  3. 新しく作成したユーザーを選択し、その詳細情報にアクセスします。 セキュリティ資格情報 > 新しいアクセスキーの作成 に移動します。

    注:新しいアクセスキーIDとシークレットアクセスキーペアが生成されますので、すぐに控えておいてください。
  4. GitLabプロジェクトで、Settings > CI / CDに進みます。 環境変数として以下を設定します(以下の表を参照):

    変数名
    AWS_ACCESS_KEY_ID アクセスキーID
    AWS_SECRET_ACCESS_KEY シークレットアクセスキー
    AWS_DEFAULT_REGION 地域コード
  5. このプロジェクトの.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のセットアップが完了したら、以下の手順に従ってください:

  1. AWSの認証情報がプロジェクトの環境変数として設定されていることを確認してください。上記の手順に従って、この設定を完了することができます。
  2. これらの変数をプロジェクトの.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のダッシュボードで対象のクラスターを選択した後に見つけることができます:

    AWS ECS dashboard

  3. このテンプレートを.gitlab-ci.ymlに含めます:

    include:
      - template: AWS/Deploy-ECS.gitlab-ci.yml
    

    Deploy-ECS テンプレートはGitLabに同梱されており、GitLab.comで入手できます。

  4. 更新した.gitlab-ci.yml をコミットしてプロジェクトのリポジトリにプッシュすれば完了です!

    アプリケーションのDockerイメージは再構築され、GitLabレジストリにプッシュされます。 その後、対象のタスク定義は新しいDockerイメージの場所で更新され、結果としてECSに新しいリビジョンが作成されます。

    最後に、タスク定義の新しいリビジョンでAWS ECSサービスが更新され、クラスターがアプリケーションの最新バージョンをプルするようになります。

警告:Deploy-ECS.gitlab-ci.ymlテンプレートにはJobs/Build.gitlab-ci.ymlJobs/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 ...