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プロジェクトテンプレートを使用して開始します。名前が示すように、これらのプロジェクトは、定評のあるフレームワーク上に構築された、必要最小限のアプリケーションを提供します。
- GitLabの左側のサイドバーの上部で、新規作成( )を選択し、新規プロジェクト/リポジトリを選択します。
- テンプレートから作成を選択して、Ruby on Rails、Spring、またはNodeJS Expressプロジェクトから選択できます。このガイドでは、Ruby on Railsテンプレートを使用します。
- プロジェクトに名前を付けます。この例では、
ecs-demoという名前が付けられています。GitLab Ultimateプランで利用できる機能を活用できるように、公開してください。 - プロジェクトを作成を選択します。
デモプロジェクトを作成したので、アプリケーションをコンテナ化し、レジストリにプッシュする必要があります。
コンテナ化されたアプリケーションイメージをGitLabレジストリにプッシュする
ECSはコンテナオーケストレーションサービスであるため、インフラストラクチャのビルド中に、コンテナ化されたアプリケーションイメージを提供する必要があります。そのためには、GitLab Auto DevOpsとContainer Registryを使用します。
左側のサイドバーで、検索または移動先を選択して、
ecs-demoプロジェクトを見つけます。CI/CDを設定を選択します。
.gitlab-ci.ymlの作成フォームが表示されます。次のコンテンツを空の
.gitlab-ci.ymlにコピーして貼り付けます。これにより、ECSへの継続的なデプロイのためのパイプラインが定義されます。include: - template: AWS/Deploy-ECS.gitlab-ci.ymlCommit Changes(変更をコミット)を選択します。新しいパイプラインが自動的にトリガーされます。このパイプラインでは、
buildジョブがアプリケーションをコンテナ化し、イメージをGitLab container registryにプッシュします。デプロイ > Container Registry(コンテナレジストリ)にアクセスします。アプリケーションイメージがプッシュされたことを確認してください。
これで、AWSからプルできるコンテナ化されたアプリケーションイメージができました。次に、このアプリケーションイメージがAWSでどのように使用されるかの仕様を定義します。
ECSクラスタがまだ接続されていないため、production_ecsジョブが失敗します。これは後で修正できます。
ECSタスク定義を作成する
ECSタスク定義は、アプリケーションイメージがECSサービスによってどのように起動されるかに関する仕様です。
ECS > Task Definitions(タスク定義)に移動します(AWSコンソール)。
Create new Task Definition(新しいタスク定義の作成)を選択します。
起動タイプとしてEC2を選択します。Next Step(次のステップ)を選択します。
Task Definition Name(タスク定義名)に
ecs_demoを設定します。Task Size(タスクサイズ) > Task memory(タスクメモリ)およびTask CPU(タスクCPU)に
512を設定します。Container Definitions(コンテナ定義) > Add container(コンテナの追加)を選択します。これにより、コンテナ登録フォームが開きます。
Container name(コンテナ名)に
webを設定します。イメージに
registry.gitlab.com/<your-namespace>/ecs-demo/master:latestを設定します。または、GitLabコンテナレジストリページからイメージパスをコピーして貼り付けることもできます。ポートマッピングを追加します。Host Port(ホストポート)に
80、Container port(コンテナポート)に5000を設定します。作成を選択します。
これで、初期タスク定義ができました。次に、アプリケーションイメージを実行するための実際のインフラストラクチャを作成します。
ECSクラスタを作成する
ECSクラスタは、ECSサービスの仮想グループです。また、計算リソースとしてEC2またはFargateに関連付けられています。
ECS > Clusters(クラスタ)に移動します(AWSコンソール)。
Create Cluster(クラスタの作成)を選択します。
クラスタテンプレートとしてEC2 Linux + Networking(EC2 Linux + ネットワーキング)を選択します。Next Step(次のステップ)を選択します。
Cluster Name(クラスタ名)に
ecs-demoを設定します。Networking(ネットワーキング)でデフォルトのVPCを選択します。既存のVPCがない場合は、そのままにして新しいVPCを作成できます。
VPCの利用可能なすべてのサブネットをSubnets(サブネット)に設定します。
作成を選択します。
ECSクラスタが正常に作成されたことを確認してください。
次のステップで、ECSサービスをECSクラスタに登録できます。
次の点に注意してください:
- オプションで、作成フォームでSSHペアを設定できます。これにより、デバッグのためにEC2インスタンスにSSHできます。
- 既存のVPCを選択しない場合、デフォルトで新しいVPCが作成されます。アカウントで許可されているインターネットゲートウェイの最大数に達すると、エラーが発生する可能性があります。
- クラスタにはEC2インスタンスが必要なので、インスタンスタイプに応じてコストがかかります。
ECSサービスを作成する
ECSサービスは、ECSタスク定義に基づいてアプリケーションコンテナを作成するデーモンです。
ECS > Clusters(クラスタ) > ecs-demo > サービスに移動します(AWSコンソール)。
デプロイを選択します。これにより、サービス作成フォームが開きます。
Launch Type(起動タイプ)で
EC2を選択します。Task definition(タスク定義)に
ecs_demoを設定します。これは、以前に作成したタスク定義に対応します。サービス名に
ecs_demoを設定します。Desired tasks(必要なタスク)に
1を設定します。デプロイを選択します。
作成されたサービスがアクティブであることを確認してください。
AWSコンソールのユーザーインターフェースは随時変更されます。手順に関連するコンポーネントが見つからない場合は、最も近いものを選択してください。
デモアプリケーションを表示する
これで、デモアプリケーションにインターネットからアクセスできるようになりました。
EC2 > インスタンスに移動します(AWSコンソール)。
ECS Instanceで検索して、ECSクラスタが作成した対応するEC2インスタンスを見つけます。EC2インスタンスのIDを選択します。これにより、インスタンスの詳細ページが表示されます。
Public IPv4 address(パブリックIPv4アドレス)をコピーして、ブラウザに貼り付けます。これで、デモアプリケーションが実行されているのがわかります。
このガイドでは、HTTPS/SSLはnot(構成されていません)。HTTP経由でのみアプリケーションにアクセスできます(例:http://<ec2-ipv4-address>)。
GitLabから継続的なデプロイを設定する
ECSでアプリケーションを実行しているので、GitLabから継続的なデプロイを設定できます。
デプロイ担当者として新しいIAMユーザーを作成する
GitLabが以前に作成したECSクラスタ、サービス、およびタスク定義にアクセスするには、AWSにデプロイ担当者ユーザーを作成する必要があります:
IAM > ユーザーに移動します(AWSコンソール)。
ユーザーの追加を選択します。
User nameに
ecs_demoを設定します。Programmatic accessチェックボックスをオンにします。次へを選択します: 権限
Set permissions(権限の設定)で
Attach existing policies directlyを選択します。ポリシーリストから
AmazonECS_FullAccessを選択します。次へを選択します: タグと次へ: レビュー。ユーザーの作成を選択します。
作成したユーザーのAccess key ID(アクセスキーID)とSecret access key(シークレットアクセスキー)をメモしておきます。
シークレットアクセスキーを公開されている場所に共有しないでください。安全な場所に保存する必要があります。
パイプラインジョブがECSにアクセスできるようにGitLabで認証情報を設定する
GitLab CICD変数を設定でアクセス情報を登録できます。これらの変数はパイプラインジョブに挿入され、ECSAPIにアクセスできます。
- 左側のサイドバーで、検索または移動先を選択して、
ecs-demoプロジェクトを見つけます。 - 設定 > CI/CD > 変数に移動します。
- 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ジョブによって更新されます。この変数のスコープが適切な環境(production、staging、review/*)に設定されていることを確認してください。CI_AWS_ECS_TASK_DEFINITIONecs_demoECSタスク定義は、 production_ecsジョブによって更新されます。
デモアプリケーションを変更する
プロジェクト内のファイルを変更し、ECS上のデモアプリケーションに反映されているかどうかを確認します:
左側のサイドバーで、検索または移動先を選択して、
ecs-demoプロジェクトを見つけます。app/views/welcome/index.html.erbファイルを開きます。編集を選択します。
テキストを
You're on ECS!に変更します。Commit Changes(変更をコミット)を選択します。これにより、新しいパイプラインが自動的にトリガーされます。完了するまで待ちます。
ECSクラスタで実行中のアプリケーションにアクセスする。次のように表示されます:
おつかれさまでした。ECSへの継続的なデプロイを正常に設定しました。
ECSデプロイジョブは、ロールアウトが完了するまで待機してから終了します。この動作を無効にするには、CI_AWS_ECS_WAIT_FOR_ROLLOUT_COMPLETE_DISABLEDを空でない値に設定します。
レビューアプリを設定する
ECSでレビューアプリを使用するには:
- 新しいサービスをセットアップします。
CI_AWS_ECS_SERVICE変数を使用して、名前を設定します。- 環境スコープを
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を使用するには:
- 新しいサービスをセットアップします。このサービスは、一時的なDAST環境をデプロイするために使用されます。
CI_AWS_ECS_SERVICE変数を使用して、名前を設定します。dast-default環境にスコープを設定します。- 次の内容を
.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を参照してください。









