AWS CLI を使用して最初の Express Mode サービスを作成する
このチュートリアルでは、AWS AWS CLI を使用して Express Mode サービスアプリケーションを作成する方法を紹介します。Express Mode サービスのコア機能を示すシンプルなウェブアプリケーションをデプロイします。
前提条件
開始する前に、以下があることを確認してください。
適切なアクセス許可が付与されている AWS アカウント
AWS AWS CLI がインストールされ、設定されている
Amazon ECR またはプライベートレジストリに保存されたコンテナイメージ
サービスを作成する AWS リージョンにパブリックサブネットがあるデフォルトの VPC。デフォルトでは、Express Mode サービスは、アカウントのデフォルト VPC とパブリックサブネットにインターネット向けロードバランサーを作成します。アカウントにデフォルト VPC がない場合は、開始する前に作成するか、サービス作成時に独自のサブネットを指定します。詳細については、Amazon VPC ユーザーガイド の「デフォルト VPC」を参照してください。
ステップ 1: IAM ロールを作成する
Express Mode サービスには 2 つの IAM ロールが必要です。タスク実行ロールを使用すると、Amazon ECS はユーザーに代わってコンテナイメージをプルし、ログを書き込むことができます。次のポリシーを使用して、タスク実行ロールとインフラストラクチャロールを作成します。
#Create the roles with ECS trust policies aws iam create-role --role-name ecsTaskExecutionRole \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }' aws iam create-role --role-name ecsInfrastructureRoleForExpressServices \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessInfrastructureForECSExpressServices", "Effect": "Allow", "Principal": { "Service": "ecs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'
#Attach the AWS managed policies aws iam attach-role-policy --role-name ecsTaskExecutionRole \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy aws iam attach-role-policy --role-name ecsInfrastructureRoleForExpressServices \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSInfrastructureRoleforExpressGatewayServices
詳細については、「Amazon ECS タスク実行IAM ロール」を参照してください。
注記
IAM ロールは結果整合性があるため、新しく作成されたロールはすぐには使用できない場合があります。これらのロールの作成直後に最初の create-express-gateway-service 呼び出しが Unable to assume the service linked role で失敗した場合 (または同様の assume-role エラー)、ロールが伝播されるまでしばらく (約 1 分) 待ってからコマンドを再試行します。
ステップ 2: 最初の Express Mode サービスアプリケーションを作成する
最低限の必要なパラメータを使用して Express Mode サービスアプリケーションを作成します。
aws ecs create-express-gateway-service \ --primary-container "image"="public.ecr.aws/nginx/nginx:latest" \ --execution-role-arn arn:aws:iam::123456789012:role/ecsTaskExecutionRole \ --infrastructure-role-arn arn:aws:iam::123456789012:role/ecsInfrastructureRoleForExpressServices \ --monitor-resources
このコマンドは、以下を備えた Express Mode サービスアプリケーションを作成します。
イメージ名から生成された一意のサービス名
1 vCPU と 2 GB メモリ
HTTPS トラフィック用のポート 80
CPU 使用率に基づく自動スケーリング
デフォルトの VPC およびパブリックサブネットのインターネット向け Application Load Balancer
このサービスに一意の URL (
servicename.ecs.region.on.aws形式)
このコマンドは、プロビジョニング中のリソースを継続的にモニタリングし、ステータスを返します。サービスのデプロイが完了すると、アプリケーション URL はトラフィックを受信する準備が整います。モニタリングを中断すると、サービス ARN や URL など、作成されたサービスに関する情報が返されます。
{ "service": { "cluster": "arn:aws:ecs:region:123456789012:cluster/default", "serviceName": "nginx-1234", "serviceArn": "arn:aws:ecs:region:123456789012:service/default/nginx-1234", "infrastructureRoleArn": "arn:aws:iam::123456789012:role/ecsInfrastructureRoleForExpressServices", "status": { "statusCode": "ACTIVE" }, "createdAt": "UNIXTIMESTAMP" } }
ステップ 3: カスタム設定で Express Mode サービスアプリケーションを作成する
追加のパラメータを指定することで、Express Mode サービスアプリケーションをカスタマイズできます。
aws ecs create-express-gateway-service \ --execution-role-arn arn:aws:iam::123456789012:role/ecsTaskExecutionRole \ --infrastructure-role-arn arn:aws:iam::123456789012:role/ecsInfrastructureRoleForExpressServices \ --primary-container '{"image":"123456789012.dkr.ecr.region.amazonaws.com/my-app:latest","containerPort":8080,"environment":[{"name":"ENV","value":"production"},{"name":"DEBUG","value":"false"}]}' \ --service-name "my-web-app" \ --cpu 2 \ --memory 4 \ --health-check-path "/health" \ --scaling-target '{"minTaskCount":3,"maxTaskCount":100}' \ --monitor-resources
これにより、以下を備えたアプリケーションが作成されます。
カスタム名「my-web-app」
2 vCPU と 4 GB メモリ
アプリケーショントラフィック用のポート 8080
カスタムのヘルスチェックエンドポイント
環境変数
最小 3 タスク、最大 100 タスクの自動スケーリング
独自のタスク定義を使用して Express Mode サービスを作成
独自のタスク定義を使用して Express Mode サービスを作成することもできます。独自のタスク定義を使用すれば、タスクレベルの設定を完全に制御できます。Express Mode は、ロードバランシング、自動スケーリング、カナリアデプロイなどのインフラストラクチャを引き続き管理します。
次の AWS Command Line Interface (AWS AWS CLI) コマンドは、カスタムタスク定義を使用して Express Mode サービスを作成します。
aws ecs create-express-gateway-service \ --infrastructure-role-arn arn:aws:iam::123456789012:role/ecsInfrastructureRoleForExpressServices \ --task-definition-arn arn:aws:ecs:us-west-2:123456789012:task-definition/my-td:3 \ --health-check-path "/health" \ --monitor-resources
タスク定義は、以下の要件を満たしている必要があります。
コンテナ名
MainMainコンテナには、コンテナポートとポート名を含む単一の TCP ポートマッピングが必要ですタスク定義の互換性には
FARGATEが必要です
注記
taskDefinitionArn パラメータは、同じ API コールの primaryContainer、executionRoleArn、taskRoleArn、cpu、または memory で指定することはできません。Express Mode は、指定されたタスク定義からこれらの値を取得します。
ステップ 4: デプロイをモニタリングする
--monitor-resources フラグは、Express Mode サービスへの Create、Update、Delete 呼び出しで機能します。ただし、変更アクションとは別に、サービスのリソースをいつでもモニタリングできます。デプロイの時間は、プロビジョニングする必要があるリソースによって異なります。ステータスが ACTIVE に変わると、アプリケーションはトラフィックを受信する準備が整います。
aws ecs monitor-express-gateway-service --service-arn arn:aws:ecs:region:123456789012:service/default/app-23d97h88
Express Mode サービスアプリケーションの現在の設定とステータスを確認することもできます。
aws ecs describe-express-gateway-service --service-arn arn:aws:ecs:region:123456789012:service/default/app-23d97h88
ステップ 5: アプリケーションにアクセスする
Express Mode サービスアプリケーションがアクティブになったら、提供された URL を使用してアクセスします。URL 形式は次のとおりです。
https://<service-name>.ecs.<region>.on.aws/
例えば、次のようになります。
https://app-23d97h88.ecs.us-west-2.on.aws/
以下を備えたアプリケーションが実行されます。
SSL/TLS の自動終了
複数のアベイラビリティーゾーンでのロードバランシング
CPU 使用率に基づく自動スケーリング
CloudWatch のログ記録とモニタリング
今後の更新のための 5XX ロールバックアラームとカナリアデプロイ