チュートリアル: Amazon ECS にアプリケーションをデプロイする
このチュートリアルでは、ワークフロー、Amazon ECS、およびその他のいくつかの AWS サービスを使用して、サーバーレスアプリケーションを Amazon Elastic Container Service (Amazon ECS) にデプロイする方法について説明します。デプロイされたアプリケーションは、Apache ウェブサーバー Docker イメージ上にビルドされたシンプルな Hello World ウェブサイトです。このチュートリアルでは、クラスターのセットアップなど必要な準備作業を順を追って説明し、アプリケーションをビルドおよびデプロイするためのワークフローを作成する方法について説明します。
ヒント
このチュートリアルを進める代わりに、完全な Amazon ECS セットアップを実行するブループリントを使用できます。[Node.js API with AWS Fargate] または、[Java API with AWS Fargate] ブループリントで使用する必要があります。詳細については、「ブループリントを使用したプロジェクトの作成」を参照してください。
トピック
前提条件
開始する前に:
-
接続された AWS アカウントを持つ CodeCatalyst スペース が必要です。詳細については、「スペースを作成する」を参照してください。
-
スペースには、次の名前の空のプロジェクトが必要です。
codecatalyst-ecs-project
このプロジェクトを作成するには、[ゼロから開始] オプションを使用します。
詳細については、「Amazon CodeCatalyst での空のプロジェクトの作成」を参照してください。
-
プロジェクトには、以下と呼ばれる CodeCatalyst [環境] が必要です。
codecatalyst-ecs-environment
この環境を次のように設定します。
-
[非本番稼働用] など、任意のタイプを選択します。
-
AWS アカウントに接続します。
-
[デフォルトの IAM ロール] で、任意のロールを選択します。後で別のロールを指定します。
詳細については、「AWS アカウント と VPC へのデプロイ」を参照してください。
-
ステップ 1: AWS ユーザーと AWS CloudShell をセットアップする
このチュートリアルの最初のステップは、AWS IAM Identity Center でユーザーを作成し、このユーザーとして AWS CloudShell インスタンスを起動することです。このチュートリアルの期間中、CloudShell は開発コンピュータであり、AWS リソースとサービスを設定する場所です。チュートリアルを完了したら、このユーザーを削除してください。
注記
このチュートリアルにルートユーザーを使用しないでください。(AWS Command Line Interface CLI) で後でアクションを実行するときに問題が発生する可能性のある別のユーザーを作成する必要があります。
IAM アイデンティティセンターユーザーと CloudShell の詳細については、「AWS IAM Identity Center ユーザーガイド」と「AWS CloudShell ユーザーガイド」を参照してください。
IAM アイデンティティセンターユーザーを作成するには
AWS Management Console にサインインし、AWS IAM Identity Center コンソールを https://console.aws.amazon.com/singlesignon/
で開きます。 注記
CodeCatalyst スペースに接続されている AWS アカウント を使用してサインインしてください。スペースに移動し、[AWS アカウント] タブを選択することで、接続されているアカウントを確認できます。詳細については、「スペースを作成する」を参照してください。
-
ナビゲーションペインで [Users] (ユーザー)、[Add user] (ユーザーの追加) の順に選択します。
-
[ユーザー名] に次のように入力します。
CodeCatalystECSUser
-
[パスワード] で、[このユーザーと共有できるワンタイムパスワードを生成] を選択します。
-
[E メールアドレス] と [E メールアドレスを確認] で、IAM アイデンティティセンターにまだ存在しない E メールアドレスを入力します。
-
[名] と [姓] で、次のように入力します。
CodeCatalystECSUser
-
[表示名] で、自動的に生成された名前を保持します。
CodeCatalystECSUser CodeCatalystECSUser
-
[Next] を選択します。
-
[グループにユーザーを追加] ページで、[次へ] を選択します。
-
「ユーザーを確認と追加」ページで情報を確認し、[ユーザーを追加] を選択します。
[ワンタイムパスワード] ダイアログボックスが表示されます。
-
AWS アクセスポータル URL やワンタイムパスワードなど、サインイン情報を [コピー] して貼り付けます。
-
[閉じる] を選択します。
アクセス権限セットを作成するには
このアクセス許可セットは、後で CodeCatalystECSUser
に割り当てられます。
-
ナビゲーションペインで [アクセス許可セット] を選択し、[アクセス許可セットの作成] を選択します。
-
[事前定義されたアクセス許可セットのポリシー] で [AdministratorAccess] を選択します。このポリシーではすべての AWS のサービス アクションに対するアクセス許可が与えられています。
-
[Next] を選択します。
-
「アクセス許可セット名」に、次のように入力します。
CodeCatalystECSPermissionSet
-
[Next] を選択します。
-
[確認と作成] ページで情報を確認し、[グループの作成] を選択します。
アクセス許可セットを CodeCatalystECSUser に割り当てるには
-
ナビゲーションペインで AWS アカウント を選択し、現在サインインしている AWS アカウント の横にあるチェックボックスをオンにします。
-
[ユーザーまたはグループの割り当て] を選択します。
-
[ユーザー] タブを選択します。
-
[
CodeCatalystECSUser
] のチェックボックスをオンにします。 -
[Next] を選択します。
-
[
CodeCatalystECSPermissionSet
] のチェックボックスをオンにします。 -
[Next] を選択します。
-
情報を確認し、[送信] を選択します。
これで、
CodeCatalystECSUser
とCodeCatalystECSPermissionSet
をバインドして、AWS アカウント に割り当てました。
CodeCatalystECSUser としてサインアウトしてサインインし直すには
-
サインアウトする前に、AWS アクセスポータル URL と、
CodeCatalystECSUser
のユーザー名とワンタイムパスワードがあることを確認します。この情報は、事前にテキストエディタにコピーしておく必要があります。注記
この情報がない場合は、IAM アイデンティティセンターの
CodeCatalystECSUser
詳細ページに移動し、[パスワードをリセット]、[ワンタイムパスワードを生成 [...]] を選択して、もう一度 [パスワードをリセットする] と、画面に情報が表示されます。 -
AWS からサインアウトします。
-
AWS アクセスポータル URL をブラウザのアドレスバーに貼り付けます。
-
CodeCatalystECSUser
のユーザー名とワンタイムパスワードを使用してサインインします。 -
[新しいパスワード] で、パスワードを入力し、[新しいパスワードを設定] を選択します。
画面に AWS アカウント ボックスが表示されます。
-
[AWS アカウント] を選択し、AWS アカウント ユーザーとアクセス許可セットを割り当てた
CodeCatalystECSUser
の名前を選択します。 -
CodeCatalystECSPermissionSet
の横にある [管理コンソール] を選択します。AWS Management Consoleが表示されます。これで、適切なアクセス許可を使用し、
CodeCatalystECSUser
としてサインインしました。
AWS CloudShell インスタンスを起動するには
-
CodeCatalystECSUser
として、ナビゲーションバーで、AWS アイコン () を選択します。
AWS Management Console のメインページが表示されます。
-
ナビゲーションバーで、AWS CloudShell アイコン (
) を選択します。
CloudShell が開きます。CloudShell 環境が作成されるまで待ちます。
注記
CloudShell アイコンが表示されない場合は、CloudShell でサポートされているリージョンにいることを確認してください。このチュートリアルは、米国西部 (オレゴン) リージョンにいることを前提としています。
AWS CLI がインストールされていることを確認するには
-
CloudShell ターミナルで、次のように入力します。
aws --version
-
バージョンが表示されることを確認します。
AWS CLI は現在のユーザー、
CodeCatalystECSUser
用に既に設定されているため、通常どおり、AWS CLI キーと認証情報を設定する必要はありません。
ステップ 2: プレースホルダーアプリケーションを Amazon ECS にデプロイする
このセクションでは、プレースホルダーアプリケーションを Amazon ECS に手動でデプロイします。このプレースホルダーアプリケーションは、ワークフローによってデプロイされた Hello World アプリケーションに置き換えられます。プレースホルダーアプリケーションは Apache Web Server です。
Amazon ECS の詳細については、「Amazon Elastic Container Service デベロッパーガイド」を参照してください。
プレースホルダーアプリケーションをデプロイするには、以下の一連の手順を実行します。
タスク実行のロールを作成するには
このロールは、ユーザーに代わって API コールを実行するためのアクセス許可を Amazon ECS と AWS Fargate エージェントに付与します。
-
信頼ポリシーを作成します。
-
AWS CloudShell で次のコマンドを入力します。
cat > codecatalyst-ecs-trust-policy.json
CloudShell ターミナルに点滅するプロンプトが表示されます。
-
プロンプトで、次のコードを入力します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
最後の角括弧 (
}
) の後にカーソルを置きます。 -
Enter
とCtrl+d
を押してファイルを保存し、終了します。
-
-
タスク実行ロールを作成する方法
aws iam create-role \ --role-name codecatalyst-ecs-task-execution-role \ --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
-
AWS 管理
AmazonECSTaskExecutionRolePolicy
ポリシーをロールにアタッチします。aws iam attach-role-policy \ --role-name codecatalyst-ecs-task-execution-role \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
-
ロールの詳細を表示します。
aws iam get-role \ --role-name codecatalyst-ecs-task-execution-role
-
ロールの
"Arn":
値、例えばarn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role
を書き留めます。この Amazon リソースネーム (ARN) は後で必要になります。
Amazon ECS クラスターを作成するには
このクラスターには、Apache プレースホルダーアプリケーションと、それ以降は Hello World アプリケーションが含まれます。
-
CodeCatalystECSUser
として、AWS CloudShell で空のクラスターを作成する方法aws ecs create-cluster --cluster-name codecatalyst-ecs-cluster
-
(オプション) クラスターが正常に作成されたことを確認します。
aws ecs list-clusters
codecatalyst-ecs-cluster
クラスターの ARN が一覧表示され、正常に作成されたことを示します。
新しいタスク定義ファイルを作成するには
タスク定義ファイルは、DockerHub からプルされた [Apache 2.4 Web サーバー]httpd:2.4
) を実行することを示します。
-
「
CodeCatalystECSUser
」として、「AWS CloudShell」でタスク定義ファイルを作成します。cat > taskdef.json
-
コマンドプロンプトで、以下を貼り付けます。
{ "executionRoleArn": "
arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role
", "containerDefinitions": [ { "name": "codecatalyst-ecs-container", "image": "httpd:2.4", "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "family": "codecatalyst-ecs-task-def", "memory": "512", "networkMode": "awsvpc" }上記のコードで、
[arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role]
を置き換えます。タスク実行のロールを作成するには でメモしたタスク実行ロールの ARN を使用します。
-
最後の角括弧 (
}
) の後にカーソルを置きます。 -
Enter
とCtrl+d
を押してファイルを保存し、終了します。
Amazon ECS でタスク定義ファイルに登録します。
-
CodeCatalystECSUser
として、AWS CloudShell でタスク定義を登録します。aws ecs register-task-definition \ --cli-input-json file://taskdef.json
-
(オプション) タスク定義が登録されていることを確認します。
aws ecs list-task-definitions
codecatalyst-ecs-task-def
タスク定義が一覧表示されます。
Amazon ECS サービスを作成するには
Amazon ECS サービスは、Apache プレースホルダーアプリケーションのタスク (および関連する Docker コンテナ) を実行し、その後、Hello World アプリケーションを実行します。
-
CodeCatalystECSUser
として、Amazon Elastic Container Service コンソールをまだ切り替えていない場合は、切り替えます。 -
先ほど作成したクラスター「
codecatalyst-ecs-cluster
」を選択します。 -
[サービス] タブで、[作成] を選択します。
-
[作成] ページで、次のとおり設定します。
-
次に一覧表示されているものを除き、すべてのデフォルト設定を保持します。
-
[Launch type (起動タイプ)] で、[FARGATE] を選択します。
-
[タスク定義] の [ファミリー] ドロップダウンリストで、以下を選択します。
codecatalyst-ecs-task-def
-
[サービス名] に次のように入力します。
codecatalyst-ecs-service
-
[必要なタスク] に次のように入力します。
3
このチュートリアルでは、各タスクが単一の Docker コンテナを起動します。
-
[ネットワーク] セクションを展開します。
-
[VPC] で、任意の VPC を選択します。
-
[サブネット] では、任意のサブネットを選択します。
注記
サブネットは 1 つだけ指定します。このチュートリアルに必要なのはこれだけです。
注記
VPC とサブネットがない場合は、作成します。「Amazon VPC ユーザーガイド」で、「VPC を作成」、「VPC にサブネットを作成」を参照してください。
-
[セキュリティグループ] で、[新しいセキュリティグループを作成] を選択し、次の操作を行います。
-
[セキュリティグループ名] に次のように入力します。
codecatalyst-ecs-security-group
-
[セキュリティグループの説明] には、次のように入力します。
CodeCatalyst ECS security group
-
[ルールを追加] を選択します。[タイプ] の場合は、[HTTP] を選択し、[ソース]の場合は [任意の場所] を選択します。
-
-
一番下で [作成] を選択します。
-
サービスが作成されるまで待ちます。このプロセスには数分かかることがあります。
-
-
[タスク] タブを選択し、[更新] を選択します。3 つのタスクすべてで、[前回のステータス] 列が [実行中] に設定されていることを確認します。
(オプション) Apache プレースホルダーアプリケーションが実行されていることを確認するには
-
[タスク] タブで、3 つのタスクのいずれかを選択します。
-
[パブリック IP] フィールドで、[オープンアドレス] を選択します。
It Works!
ページが表示されます。これは、Amazon ECS サービスが Apache イメージで Docker コンテナを起動するタスクを正常に開始したことを示します。チュートリアルのこの時点で、Amazon ECS クラスター、サービス、タスク定義、および Apache プレースホルダーアプリケーションを手動でデプロイしました。これらの項目がすべて整ったら、Apache プレースホルダーアプリケーションをチュートリアルの Hello World アプリケーションに置き換えるワークフローを作成する準備が整いました。
ステップ 1: Amazon ECR イメージリポジトリを作成する
このセクションでは、Amazon Elastic Container Registry (Amazon ECR) にプライベートイメージリポジトリを作成します。このリポジトリには、以前にデプロイした Apache プレースホルダーイメージを置き換えるチュートリアルの Docker イメージが保存されます。
Amazon ECR の詳細については、Amazon Elastic Container Registry User Guide を参照してください。
Amazon ECR にイメージリポジトリを作成するには
-
CodeCatalystECSUser
として、AWS CloudShell で Amazon ECR に空のリポジトリを作成します。aws ecr create-repository --repository-name codecatalyst-ecs-image-repo
-
Amazon ECR リポジトリの詳細を表示します。
aws ecr describe-repositories \ --repository-names codecatalyst-ecs-image-repo
-
“repositoryUri”:
の値、例えば「111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo
」を書き留めます。ワークフローにリポジトリを追加するときは、後にこれが必要となります。
ステップ 4: AWS ロールを作成する
このセクションでは、CodeCatalyst ワークフローが機能するために必要な AWS IAM ロールを作成します。これらのロールは次のとおりです。
-
ビルドロール – CodeCatalyst ビルドアクション (ワークフロー内) に、AWS アカウントにアクセスして Amazon ECR と Amazon EC2 に書き込むアクセス許可を付与します。
-
ロールをデプロイ – AWS アカウント、Amazon ECS、その他のいくつかの AWS サービスにアクセスするための CodeCatalyst [ECS にデプロイ] アクション (ワークフロー内) 許可を付与します。
IAM ロールの詳細については、「AWS Identity and Access Management ユーザーガイド」の「IAM ロール」を参照してください。
注記
時間を節約するため、前に一覧表示した 2 つのロールではなく、CodeCatalystWorkflowDevelopmentRole-
ロールと呼ばれる 1 つのロールを作成できます。詳細については、「アカウントとスペース用の CodeCatalystWorkflowDevelopmentRole-spaceName ロールを作成する」を参照してください。spaceName
CodeCatalystWorkflowDevelopmentRole-
ロールには、セキュリティリスクをもたらす可能性のある非常に広範なアクセス許可があることを理解します。このロールは、セキュリティが懸念されないチュートリアルやシナリオでのみ使用することをお勧めします。このチュートリアルでは、前述の 2 つのロールを作成することを前提としています。spaceName
ビルドロールとデプロイロールを作成するには、AWS Management Console または AWS CLI を使用します。
ステップ 5: CodeCatalyst に AWS ロールを追加する
このステップでは、ビルドロール (codecatalyst-ecs-build-role
) を追加し、スペース内の CodeCatalyst アカウント接続にロール (codecatalyst-ecs-deploy-role
) をデプロイします。
ビルドロールとデプロイロールをアカウント接続に追加するには
-
CodeCatalyst で、スペースに移動します。
-
[AWS アカウント] を選択します。アカウント接続が一覧表示されます。
-
ビルドロールとデプロイロールを作成したアカウントを表す AWS アカウント接続を選択します。
-
[AWS 管理コンソールからロールの管理] を選択します。
[Amazon CodeCatalyst スペースに IAM ロールの追加] ページが表示されます。ページにアクセスするには、サインインが必要な場合があります。
-
[IAM で作成した既存のロールを追加] を選択します。
ドロップダウンリストが表示されます。この一覧表示には、
codecatalyst-runner.amazonaws.com
およびcodecatalyst.amazonaws.com
サービスプリンシパルを含む信頼ポリシーを持つすべての IAM ロールが表示されます。 -
ドロップダウンリストで [
codecatalyst-ecs-build-role
] を選択し、[ロールを追加] を選択します。注記
The security token included in the request is invalid
が表示された場合は、適切なアクセス許可がない可能性があります。この問題を修正するには、CodeCatalyst スペースの作成時に使用した AWS アカウントで AWS からサインアウトしてサインインし直します。 -
[IAM ロールを追加] を選択し、[IAM で作成した既存のロールを追加] を選択し、ドロップダウンリストから [
codecatalyst-ecs-deploy-role
] を選択します。[Add role] を選択します。これで、ビルドロールとデプロイロールをスペースに追加しました。
-
[Amazon CodeCatalyst 表示名] の値をコピーします。この値は、ワークフローを作成するときに後で必要になります。
ステップ 6: ソースレポジトリを作成する
このステップでは、CodeCatalyst に空のソースリポジトリを作成します。このリポジトリには、タスク定義ファイルなどのチュートリアルのソースファイルが保存されます。
ソースリポジトリの詳細については、「ソースリポジトリを作成する」を参照してください。
ソースリポジトリを作成するには
https://codecatalyst.aws/
で CodeCatalyst コンソールを開きます。 -
プロジェクト「
codecatalyst-ecs-project
」に移動します。 -
ナビゲーションペインで [コード] を選択してから、[ソースリポジトリ] を選択します。
-
[リポジトリの追加] を選択し、[リポジトリの作成] を選択します。
-
[リポジトリ名] に次のように入力します。
codecatalyst-ecs-source-repository
-
[Create] (作成) を選択します。
ステップ 7: ソースファイルを追加する
このセクションでは、Hello World ソースファイルを CodeCatalyst リポジトリ「codecatalyst-ecs-source-repository
」 に追加します。これらは以下で構成されます。
-
index.html
ファイル - ブラウザに Hello World メッセージを表示します。 -
Dockerfile – Docker イメージに使用するベースイメージと、それに適用する Docker コマンドについて説明します。
-
taskdef.json
ファイル - クラスターでタスクを起動するときに使用する Docker イメージを定義します。
フォルダは次のような構造になっています。
. |— public-html | |— index.html |— Dockerfile |— taskdef.json
注記
次の手順では、CodeCatalyst コンソールを使用してファイルを追加する方法を示しますが、必要に応じて Git を使用できます。詳細については、「ソースリポジトリのクローンを作成する」を参照してください。
index.html
index.html
ファイルには、ブラウザに Hello World メッセージが表示されます。
index.html ファイルを追加するには
-
CodeCatalyst コンソールで、ソースリポジトリ「
codecatalyst-ecs-source-repository
」に移動します。 -
[ファイル] で、[ファイルを作成] を選択します。
-
[ファイル名] に次のように入力します。
public-html/index.html
重要
同じ名前のフォルダを作成するには、必ず
public-html/
プレフィックスを含めてください。index.html
は、このフォルダにあることが期待されます。 -
テキストボックスに次のコードを入力します。
<html> <head> <title>Hello World</title> <style> body { background-color: black; text-align: center; color: white; font-family: Arial, Helvetica, sans-serif; } </style> </head> <body> <h1>Hello World</h1> </body> </html>
-
[コミット] を選択し、再度 [コミット] を選択します。
index.html
は、public-html
フォルダ内のリポジトリに追加されます。
Dockerfile
Dockerfile は、使用するベース Docker イメージと、それに適用する Docker コマンドについて説明します。Dockerfile の詳細については、「Dockerfile リファレンス
ここで指定された Dockerfile は、Apache 2.4 ベースイメージ (httpd
) を使用することを示します。また、ウェブページを提供する Apache サーバーのフォルダに「index.html
」というソースファイルをコピーする手順も含まれています。Dockerfile の EXPOSE
命令は、コンテナがポート 80 でリッスンしていることを Docker に伝えます。
Dockerfile を追加するには
-
ソースリポジトリで、[ファイルを作成] を選択します。
-
[ファイル名] には、次のように入力します。
Dockerfile
ファイル名に拡張子は含めないでください。
重要
Dockerfile はリポジトリのルートフォルダに存在する必要があります。ワークフローの
Docker build
コマンドは、ワークフローが存在することを期待します。 -
テキストボックスに次のコードを入力します。
FROM httpd:2.4 COPY ./public-html/index.html /usr/local/apache2/htdocs/index.html EXPOSE 80
-
[コミット] を選択し、再度 [コミット] を選択します。
Dockerfile がリポジトリに追加されます。
taskdef.json
このステップで追加した taskdef.json
ファイルは、ステップ 2: プレースホルダーアプリケーションを Amazon ECS にデプロイする で既に指定したファイルと同じですが、次の違いがあります。
image:
フィールド (httpd:2.4
) でハードコードされた Docker イメージ名を指定する代わりに、ここでのタスク定義は、イメージ「$REPOSITORY_URI
」と「$IMAGE_TAG
」を示すためにいくつかの変数を使用します。これらの変数は、後のステップでワークフローを実行するときに、ワークフローのビルドアクションによって生成された実際の値に置き換えられます。
タスク定義パラメータに関する詳細については、「Amazon Elastic Container Service デベロッパーガイド」の「タスク定義パラメータ」を参照してください。
taskdef.json ファイルを追加するには
-
ソースリポジトリで、[ファイルを作成] を選択します。
-
[ファイル名] には、次のように入力します。
taskdef.json
-
テキストボックスに次のコードを入力します。
{ "executionRoleArn": "
arn:aws:iam::account_ID:role/codecatalyst-ecs-task-execution-role
", "containerDefinitions": [ { "name": "codecatalyst-ecs-container", # The $REPOSITORY_URI and $IMAGE_TAG variables will be replaced # by the workflow at build time (see the build action in the # workflow) "image": $REPOSITORY_URI:$IMAGE_TAG, "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "256", "memory": "512", "family": "codecatalyst-ecs-task-def" }上記のコードで置き換えます。
arn:aws:iam::account_ID:role/codecatalyst-ecs-task-execution-role
タスク実行のロールを作成するには でメモしたタスク実行ロールの ARN を使用します。
-
[コミット] を選択し、再度 [コミット] を選択します。
taskdef.json
ファイルをリポジトリに追加します。
ステップ 8: ワークフローを作成して実行する
このステップでは、ソースファイルを取得し、Docker イメージにビルドし、そのイメージを Amazon ECS クラスターにデプロイするワークフローを作成します。このデプロイは、既存の Apache プレースホルダーアプリケーションを置き換えます。
ワークフローは、連続して実行される次の構成要素で構成されます。
-
トリガー – このトリガーは、ソースリポジトリに変更をプッシュすると、ワークフローを自動的に開始します。トリガーについての詳細は、「トリガーを使用したワークフロー実行の自動的な開始」を参照してください。
-
ビルドアクション (
BuildBackend
) – トリガー時に、アクションは Dockerfile を使用して Docker イメージをビルドし、そのイメージを Amazon ECR にプッシュします。ビルドアクションは、taskdef.json
を正しいimage
フィールド値で更新し、このファイルの出力アーティファクトを作成します。このアーティファクトは、次のデプロイアクションの入力として使用されます。ビルドアクションの詳細については、「ワークフローを使用したビルド」を参照してください。
-
デプロイアクション (
DeployToECS
) – ビルドアクションが完了すると、デプロイアクションはビルドアクション (TaskDefArtifact
) によって生成された出力アーティファクトを検索し、その内部のtaskdef.json
を見つけて Amazon ECS サービスに登録します。その後、サービスはtaskdef.json
ファイルの指示に従って、Amazon ECS クラスター内で 3 つの Amazon ECS タスク、および関連付けられた Hello World Docker コンテナを実行します。
ワークフローを作成するには
-
CodeCatalyst コンソールのナビゲーションペインで [CI/CD]、[ワークフロー] の順に選択します。
-
[ワークフローを作成] を選択します。
-
[ソースリポジトリ] で、
codecatalyst-ecs-source-repository
を選択します。 -
[ブランチ] で、
main
を選択します。 -
[Create] (作成) を選択します。
YAML サンプルコードを削除します。
-
次の YAML コードを追加します。
注記
次の YAML コードでは、必要に応じて
Connections:
セクションを省略できます。このセクションを省略する場合は、環境の [デフォルト IAM ロール] フィールドで指定されたロールに、ステップ 5: CodeCatalyst に AWS ロールを追加する で記述されている両方のロールのアクセス許可と信頼ポリシーが含まれていることを確認する必要があります。デフォルトの IAM ロールを使用して環境を設定する方法の詳細については、「環境を作成する」を参照してください。Name: codecatalyst-ecs-workflow SchemaVersion: 1.0 Triggers: - Type: PUSH Branches: - main Actions: BuildBackend: Identifier: aws/build@v1 Environment: Name:
codecatalyst-ecs-environment
Connections: - Name:codecatalyst-account-connection
Role:codecatalyst-ecs-build-role
Inputs: Sources: - WorkflowSource Variables: - Name: REPOSITORY_URI Value:111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo
- Name: IMAGE_TAG Value: ${WorkflowSource.CommitId} Configuration: Steps: #pre_build: - Run: echo Logging in to Amazon ECR... - Run: aws --version - Run: aws ecr get-login-password --regionus-west-2
| docker login --username AWS --password-stdin111122223333.dkr.ecr.us-west-2.amazonaws.com
#build: - Run: echo Build started on `date` - Run: echo Building the Docker image... - Run: docker build -t $REPOSITORY_URI:latest . - Run: docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG #post_build: - Run: echo Build completed on `date` - Run: echo Pushing the Docker images... - Run: docker push $REPOSITORY_URI:latest - Run: docker push $REPOSITORY_URI:$IMAGE_TAG # Replace the variables in taskdef.json - Run: find taskdef.json -type f | xargs sed -i "s|\$REPOSITORY_URI|$REPOSITORY_URI|g" - Run: find taskdef.json -type f | xargs sed -i "s|\$IMAGE_TAG|$IMAGE_TAG|g" - Run: cat taskdef.json # The output artifact will be a zip file that contains a task definition file. Outputs: Artifacts: - Name: TaskDefArtifact Files: - taskdef.json DeployToECS: DependsOn: - BuildBackend Identifier: aws/ecs-deploy@v1 Environment: Name:codecatalyst-ecs-environment
Connections: - Name:codecatalyst-account-connection
Role:codecatalyst-ecs-deploy-role
Inputs: Sources: [] Artifacts: - TaskDefArtifact Configuration: region:us-west-2
cluster: codecatalyst-ecs-cluster service: codecatalyst-ecs-service task-definition: taskdef.json上記のコードで置き換えます。
-
前提条件 で作成された環境名を持つ
[codecatalyst-ecs-environment]
の両方のインスタンス。 -
アカウント接続の表示名を持つ
codecatalyst-account-connection
の両方のインスタンス。表示名は数値である場合があります。詳細については、「ステップ 5: CodeCatalyst に AWS ロールを追加する」を参照してください。 -
ステップ 4: AWS ロールを作成する で作成したビルドロールの名前を持つ
[codecatalyst-ecs-build-role]
。 -
ステップ 1: Amazon ECR イメージリポジトリを作成する で作成された Amazon ECR リポジトリの URI を持つ
[111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo]
(Value:
プロパティ内)。 -
[111122223333.dkr.ecr.us-west-2.amazonaws.com]
(Run: aws ecr
コマンド内) と、イメージサフィックス (/codecatalyst-ecs-image-repo
) のない Amazon ECR リポジトリの URI。 -
ステップ 4: AWS ロールを作成する で作成したデプロイロールの名前を持つ
[codecatalyst-ecs-deploy-role]
。 -
AWS リージョンコードを持つ
[us-west-2]
の両方のインスタンス。リージョンコードの一覧については、「AWS 全般のリファレンス」の「Regional endpoints」を参照してください。
注記
ビルドロールとデプロイロールを作成しない場合は、
[codecatalyst-ecs-build-role]
と[codecatalyst-ecs-deploy-role]
をCodeCatalystWorkflowDevelopmentRole-
ロールの名前に置き換えます。このロールの詳細については、「ステップ 4: AWS ロールを作成する」を参照してください。spaceName
ヒント
前のワークフローコードに示されている
find
およびsed
コマンドを使用してリポジトリとイメージ名を更新する代わりに、この目的のために [Render Amazon ECS タスク定義] アクションを使用できます。詳細については、「Amazon ECS タスク定義の変更」を参照してください。 -
-
(オプション) [検証] を選択して、コミットする前に YAML コードが有効であることを確認します。
-
[Commit] (コミット) を選択します。
-
[コミットワークフロー] ダイアログボックスで、次のように入力します。
-
[コミットメッセージ] の場合、テキストを削除して次のように入力します。
Add first workflow
-
[レポジトリ] に
codecatalyst-ecs-source-repository
を選択します。 -
[ブランチ名] で、main を選択します。
-
[Commit] (コミット) を選択します。
これでワークフローが作成されました。ワークフローの先頭で定義されているトリガーにより、ワークフローの実行が自動的に開始されます。具体的には、
workflow.yaml
ファイルをソースリポジトリにコミット (およびプッシュ) すると、トリガーによってワークフローの実行が開始します。 -
ワークフロー実行の進行状況を表示するには
-
CodeCatalyst コンソールのナビゲーションペインで、[CI/CD] を選択し、[ワークフロー] を選択します。
-
先ほど作成したワークフロー「
codecatalyst-ecs-workflow
」を選択します。 -
[BuildBackend] を選択すると、ビルドの進行状況が表示されます。
-
[DeployToECS] を選択してデプロイの進行状況を確認します。
実行の詳細を表示する方法については、「ワークフロー実行のステータスと詳細の表示」を参照してください。
デプロイを確認するには
-
Amazon ECS クラシックコンソール (https://console.aws.amazon.com/ecs/
) を開きます。 -
codecatalyst-ecs-cluster
でクラスターを選択します。 -
[タスク] タブを選択します。
-
3 つのタスクのいずれかを選択します。
-
[パブリック IP] フィールドで、[オープンアドレス] を選択します。
ブラウザに「Hello World」ページが表示され、Amazon ECS サービスがアプリケーションを正常にデプロイしたことを示します。
ステップ 9: ソースファイルを変更する
このセクションでは、ソースリポジトリ内の index.html
ファイルを変更します。この変更により、ワークフローは新しい Docker イメージをビルドし、コミット ID でタグ付けして Amazon ECR にプッシュし、Amazon ECS にデプロイします。
index.html を変更するには
-
CodeCatalyst コンソールのナビゲーションペインで、[コード] を選択し、[ソースリポジトリ] を選択し、リポジトリ「
codecatalyst-ecs-source-repository
」を選択します。 -
[
public-html
] を選択し、[index.html
] を選択します。index.html
の内容が表示されます。 -
[編集] を選択します。
-
行 14 で、
Hello World
テキストをTutorial complete!
に変更します。 -
[コミット] を選択し、再度 [コミット] を選択します。
コミットにより、新しいワークフローの実行が開始します。
-
(オプション) ソースリポジトリのメインページに移動し、[コミットを表示] を選択し、
index.html
変更のコミット ID を書き留めます。 -
デプロイの進行状況を確認します。
-
ナビゲーションペインで [CI/CD]、[ワークフロー] の順に選択します。
-
codecatalyst-ecs-workflow
を選択して最新の実行を表示します。 -
BuildBackend、および DeployToECS を選択して、ワークフローの実行の進行状況を確認します。
-
-
次のように、アプリケーションが更新されていることを確認します。
-
Amazon ECS クラシックコンソール (https://console.aws.amazon.com/ecs/
) を開きます。 -
codecatalyst-ecs-cluster
でクラスターを選択します。 -
[タスク] タブを選択します。
-
3 つのタスクのいずれかを選択します。
-
[パブリック IP] フィールドで、[オープンアドレス] を選択します。
Tutorial complete!
ページが表示されます。
-
-
(オプション) AWS で、Amazon ECR コンソールに切り替え、新しい Docker イメージにステップ 6 のコミット ID がタグ付けされていることを確認します。
クリーンアップ
このチュートリアルで使用されているファイルとサービスをクリーンアップして、料金が発生しないようにします。
AWS Management Console で、次の順序でクリーンアップします。
-
Amazon ECS で、以下を実行します。
-
codecatalyst-ecs-service
を削除します。 -
codecatalyst-ecs-cluster
を削除します。 -
codecatalyst-ecs-task-definition
の登録を解除します。
-
-
Amazon ECR で、
codecatalyst-ecs-image-repo
を削除します。 -
Amazon EC2 で、
codecatalyst-ecs-security-group
を削除します。 -
IAM アイデンティティセンターで削除します。
-
CodeCatalystECSUser
-
CodeCatalystECSPermissionSet
-
CodeCatalyst コンソールで、次のようにクリーンアップします。
-
codecatalyst-ecs-workflow
を削除します。 -
codecatalyst-ecs-environment
を削除します。 -
codecatalyst-ecs-source-repository
を削除します。 -
codecatalyst-ecs-project
を削除します。
このチュートリアルでは、CodeCatalyst ワークフローと Amazon ECS へのデプロイアクションを使用してアプリケーションを [Amazon ECS サービスにデプロイ] する方法について説明します。