正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

Amazon Elastic Container Service (ECS) にデプロイします。

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

このステップごとのガイドでは、GitLab.comでホストされているプロジェクトをAmazon Elastic Container Service(ECS)にデプロイするのに役立ちます。

このガイドでは、まずAWSコンソールを使用して、ECSクラスタリングを手動で作成します。GitLabテンプレートから作成したシンプルなアプリケーションを作成し、デプロイします。

これらの手順は、GitLab.comとGitLab Self-Managedインスタンスの両方で機能します。独自のRunnerが設定されていることを確認してください。

前提要件

  • AWSアカウント。既存のAWSアカウントでサインインするか、新しいアカウントを作成します。
  • このガイドでは、us-east-2リージョンにインフラストラクチャを作成します。どのリージョンでも使用できますが、開始後に変更しないでください。

AWSでインフラストラクチャと最初のデプロイを作成します

GitLabからアプリケーションをデプロイするには、最初にAWSでインフラストラクチャと最初のデプロイを作成する必要があります。これには、ECSクラスタや、ECSタスク定義ECSサービス、コンテナ化されたアプリケーションイメージなどの関連コンポーネントが含まれます。

最初の手順として、プロジェクトテンプレートからデモアプリケーションを作成します。

テンプレートから新しいプロジェクトを作成する

GitLabプロジェクトテンプレートを使用して開始します。名前が示すように、これらのプロジェクトは、定評のあるフレームワーク上に構築された、必要最小限のアプリケーションを提供します。

  1. GitLabの左側のサイドバーの上部で、新規作成 plus )を選択し、新規プロジェクト/リポジトリを選択します。
  2. テンプレートから作成を選択して、Ruby on Rails、Spring、またはNodeJS Expressプロジェクトから選択できます。このガイドでは、Ruby on Railsテンプレートを使用します。
  3. プロジェクトに名前を付けます。この例では、ecs-demoという名前が付けられています。GitLab Ultimateプランで利用できる機能を活用できるように、公開してください。
  4. プロジェクトを作成を選択します。

デモプロジェクトを作成したので、アプリケーションをコンテナ化し、レジストリにプッシュする必要があります。

コンテナ化されたアプリケーションイメージをGitLabレジストリにプッシュする

ECSはコンテナオーケストレーションサービスであるため、インフラストラクチャのビルド中に、コンテナ化されたアプリケーションイメージを提供する必要があります。そのためには、GitLab Auto DevOpsContainer Registryを使用します。

  1. 左側のサイドバーで、検索または移動先を選択して、ecs-demoプロジェクトを見つけます。

  2. CI/CDを設定を選択します。.gitlab-ci.ymlの作成フォームが表示されます。

  3. 次のコンテンツを空の.gitlab-ci.ymlにコピーして貼り付けます。これにより、ECSへの継続的なデプロイのためのパイプラインが定義されます。

    include:
      - template: AWS/Deploy-ECS.gitlab-ci.yml
  4. Commit Changes(変更をコミット)を選択します。新しいパイプラインが自動的にトリガーされます。このパイプラインでは、buildジョブがアプリケーションをコンテナ化し、イメージをGitLab container registryにプッシュします。

  5. デプロイ > Container Registry(コンテナレジストリ)にアクセスします。アプリケーションイメージがプッシュされたことを確認してください。

    GitLabコンテナレジストリ内のコンテナ化されたアプリケーションイメージ。

これで、AWSからプルできるコンテナ化されたアプリケーションイメージができました。次に、このアプリケーションイメージがAWSでどのように使用されるかの仕様を定義します。

ECSクラスタがまだ接続されていないため、production_ecsジョブが失敗します。これは後で修正できます。

ECSタスク定義を作成する

ECSタスク定義は、アプリケーションイメージがECSサービスによってどのように起動されるかに関する仕様です。

  1. ECS > Task Definitions(タスク定義)に移動します(AWSコンソール)。

  2. Create new Task Definition(新しいタスク定義の作成)を選択します。

    「新しいタスク定義を作成」ボタンがあるタスク定義ページ。

  3. 起動タイプとしてEC2を選択します。Next Step(次のステップ)を選択します。

  4. Task Definition Name(タスク定義名)にecs_demoを設定します。

  5. Task Size(タスクサイズ) > Task memory(タスクメモリ)およびTask CPU(タスクCPU)に512を設定します。

  6. Container Definitions(コンテナ定義) > Add container(コンテナの追加)を選択します。これにより、コンテナ登録フォームが開きます。

  7. Container name(コンテナ名)にwebを設定します。

  8. イメージregistry.gitlab.com/<your-namespace>/ecs-demo/master:latestを設定します。または、GitLabコンテナレジストリページからイメージパスをコピーして貼り付けることもできます。

    コンテナ名とイメージフィールドが完了しました。

  9. ポートマッピングを追加します。Host Port(ホストポート)に80Container port(コンテナポート)に5000を設定します。

    ポートマッピングフィールドが完了しました。

  10. 作成を選択します。

これで、初期タスク定義ができました。次に、アプリケーションイメージを実行するための実際のインフラストラクチャを作成します。

ECSクラスタを作成する

ECSクラスタは、ECSサービスの仮想グループです。また、計算リソースとしてEC2またはFargateに関連付けられています。

  1. ECS > Clusters(クラスタ)に移動します(AWSコンソール)。

  2. Create Cluster(クラスタの作成)を選択します。

  3. クラスタテンプレートとしてEC2 Linux + Networking(EC2 Linux + ネットワーキング)を選択します。Next Step(次のステップ)を選択します。

  4. Cluster Name(クラスタ名)にecs-demoを設定します。

  5. Networking(ネットワーキング)でデフォルトのVPCを選択します。既存のVPCがない場合は、そのままにして新しいVPCを作成できます。

  6. VPCの利用可能なすべてのサブネットをSubnets(サブネット)に設定します。

  7. 作成を選択します。

  8. ECSクラスタが正常に作成されたことを確認してください。

    すべてのインスタンスが実行されている状態で、ECSクラスタが正常に作成されました。

次のステップで、ECSサービスをECSクラスタに登録できます。

次の点に注意してください:

  • オプションで、作成フォームでSSHペアを設定できます。これにより、デバッグのためにEC2インスタンスにSSHできます。
  • 既存のVPCを選択しない場合、デフォルトで新しいVPCが作成されます。アカウントで許可されているインターネットゲートウェイの最大数に達すると、エラーが発生する可能性があります。
  • クラスタにはEC2インスタンスが必要なので、インスタンスタイプに応じてコストがかかります。

ECSサービスを作成する

ECSサービスは、ECSタスク定義に基づいてアプリケーションコンテナを作成するデーモンです。

  1. ECS > Clusters(クラスタ) > ecs-demo > サービスに移動します(AWSコンソール)。

  2. デプロイを選択します。これにより、サービス作成フォームが開きます。

  3. Launch Type(起動タイプ)でEC2を選択します。

  4. Task definition(タスク定義)にecs_demoを設定します。これは、以前に作成したタスク定義に対応します。

  5. サービス名ecs_demoを設定します。

  6. Desired tasks(必要なタスク)に1を設定します。

    すべての入力が完了したサービスページ。

  7. デプロイを選択します。

  8. 作成されたサービスがアクティブであることを確認してください。

    タスクを実行しているアクティブなサービス。

AWSコンソールのユーザーインターフェースは随時変更されます。手順に関連するコンポーネントが見つからない場合は、最も近いものを選択してください。

デモアプリケーションを表示する

これで、デモアプリケーションにインターネットからアクセスできるようになりました。

  1. EC2 > インスタンスに移動します(AWSコンソール)。

  2. ECS Instanceで検索して、ECSクラスタが作成した対応するEC2インスタンスを見つけます。

  3. EC2インスタンスのIDを選択します。これにより、インスタンスの詳細ページが表示されます。

  4. Public IPv4 address(パブリックIPv4アドレス)をコピーして、ブラウザに貼り付けます。これで、デモアプリケーションが実行されているのがわかります。

    ブラウザで実行されているデモアプリケーション。

このガイドでは、HTTPS/SSLはnot(構成されていません)。HTTP経由でのみアプリケーションにアクセスできます(例:http://<ec2-ipv4-address>)。

GitLabから継続的なデプロイを設定する

ECSでアプリケーションを実行しているので、GitLabから継続的なデプロイを設定できます。

デプロイ担当者として新しいIAMユーザーを作成する

GitLabが以前に作成したECSクラスタ、サービス、およびタスク定義にアクセスするには、AWSにデプロイ担当者ユーザーを作成する必要があります:

  1. IAM > ユーザーに移動します(AWSコンソール)。

  2. ユーザーの追加を選択します。

  3. User nameecs_demoを設定します。

  4. Programmatic accessチェックボックスをオンにします。次へを選択します: 権限

  5. Set permissions(権限の設定)でAttach existing policies directlyを選択します。

  6. ポリシーリストからAmazonECS_FullAccessを選択します。次へを選択します: タグ次へ: レビュー

    選択された<code>AmazonECS_FullAccess</code>ポリシー。

  7. ユーザーの作成を選択します。

  8. 作成したユーザーのAccess key ID(アクセスキーID)とSecret access key(シークレットアクセスキー)をメモしておきます。

シークレットアクセスキーを公開されている場所に共有しないでください。安全な場所に保存する必要があります。

パイプラインジョブがECSにアクセスできるようにGitLabで認証情報を設定する

GitLab CICD変数を設定でアクセス情報を登録できます。これらの変数はパイプラインジョブに挿入され、ECSAPIにアクセスできます。

  1. 左側のサイドバーで、検索または移動先を選択して、ecs-demoプロジェクトを見つけます。
  2. 設定 > CI/CD > 変数に移動します。
  3. Add Variable(変数の追加)を選択し、次のキー/バリューペアを設定します。
    キーメモ
    AWS_ACCESS_KEY_ID<Access key ID of the deployer>awsコマンドラインインターフェースを認証するため。
    AWS_SECRET_ACCESS_KEY<Secret access key of the deployer>awsコマンドラインインターフェースを認証するため。
    AWS_DEFAULT_REGIONus-east-2awsコマンドラインインターフェースを認証するため。
    CI_AWS_ECS_CLUSTERecs-demoECSクラスタはproduction_ecsジョブによってアクセスされます。
    CI_AWS_ECS_SERVICEecs_demoクラスタのECSサービスは、production_ecsジョブによって更新されます。この変数のスコープが適切な環境(productionstagingreview/*)に設定されていることを確認してください。
    CI_AWS_ECS_TASK_DEFINITIONecs_demoECSタスク定義は、production_ecsジョブによって更新されます。

デモアプリケーションを変更する

プロジェクト内のファイルを変更し、ECS上のデモアプリケーションに反映されているかどうかを確認します:

  1. 左側のサイドバーで、検索または移動先を選択して、ecs-demoプロジェクトを見つけます。

  2. app/views/welcome/index.html.erbファイルを開きます。

  3. 編集を選択します。

  4. テキストをYou're on ECS!に変更します。

  5. Commit Changes(変更をコミット)を選択します。これにより、新しいパイプラインが自動的にトリガーされます。完了するまで待ちます。

  6. ECSクラスタで実行中のアプリケーションにアクセスする。次のように表示されます:

    確認メッセージ付きでECSで実行されているアプリケーション。

おつかれさまでした。ECSへの継続的なデプロイを正常に設定しました。

ECSデプロイジョブは、ロールアウトが完了するまで待機してから終了します。この動作を無効にするには、CI_AWS_ECS_WAIT_FOR_ROLLOUT_COMPLETE_DISABLEDを空でない値に設定します。

レビューアプリを設定する

ECSでレビューアプリを使用するには:

  1. 新しいサービスをセットアップします。
  2. CI_AWS_ECS_SERVICE変数を使用して、名前を設定します。
  3. 環境スコープをreview/*に設定します。

このサービスはすべてのレビューアプリで共有されているため、一度にデプロイできるレビューアプリは1つだけです。

セキュリティテストを設定する

SASTを構成する

ECSでSASTを使用するには、次の内容を.gitlab-ci.ymlファイルに追加します:

include:
   - template: Jobs/SAST.gitlab-ci.yml

詳細および設定オプションについては、SASTドキュメントを参照してください。

DASTを構成する

DASTをデフォルト以外のブランチで使用するには、レビューアプリを設定し、次の内容を.gitlab-ci.ymlファイルに追加します:

include:
  - template: Security/DAST.gitlab-ci.yml

デフォルトブランチでDASTを使用するには:

  1. 新しいサービスをセットアップします。このサービスは、一時的なDAST環境をデプロイするために使用されます。
  2. CI_AWS_ECS_SERVICE変数を使用して、名前を設定します。
  3. dast-default環境にスコープを設定します。
  4. 次の内容を.gitlab-ci.ymlファイルに追加します:
include:
  - template: Security/DAST.gitlab-ci.yml
  - template: Jobs/DAST-Default-Branch-Deploy.gitlab-ci.yml

詳細および設定オプションについては、DASTドキュメントを参照してください。

さらに詳しく

  • クラウドへの継続的なデプロイの詳細については、クラウドデプロイを参照してください。
  • プロジェクトでDevSecOpsをすばやく設定する場合は、Auto DevOpsを参照してください。
  • 本番環境レベルの環境をすばやく設定する場合は、5 Minute Production Appを参照してください。