Amazon ECS Express Mode サービスによって作成されたリソース
Express Mode サービスは、適切なデフォルトを提供し、補助的な AWS サービスの設定を自動化することで、コンテナ化されたアプリケーションのデプロイの複雑さを軽減します。Express Mode サービスでは、複数のサービスの何百もの設定パラメータを管理する代わりに、開始に必要となるのはコンテナイメージ、タスク実行ロール、インフラストラクチャロールだけです。
Express Mode サービスでは、本番稼働用ウェブアプリケーションを実行するための優先インフラストラクチャをバンドルする Amazon ECS Service のプロビジョニングと設定の手順が簡素化されています。Express Mode サービスには、運用と設定のベストプラクティスが自動的に組み込まれています。以下のリソースが作成されます。
Fargate キャパシティプロバイダーを備えた ECS デフォルトクラスター (存在しない場合)
コンテナ、ログ記録、ネットワーク設定を含むタスク定義
カナリアデプロイと自動スケーリングを備えたサービス
HTTPS リスナー、リスナールール、ターゲットグループを含む Application Load Balancer
最小限の必要なイングレスを持つセキュリティグループ
自動スケーリングとロードバランシングのための、サービスにリンクされたロール
Application Auto Scaling のスケーラブルターゲットとターゲット追跡スケーリングポリシー。
スケーリングポリシーは、指定されたターゲット値、またはそれに近い値にメトリクスを維持するため、必要に応じてサービスタスクを追加または削除します。ターゲットの追跡スケーリングポリシーは、メトリクスをターゲット値近くに維持することに加えて、負荷パターンの変動によるメトリクスの変動に合わせて調整し、サービスで実行されているタスク数の急速な変動を最小化します。
サービスに固有のロググループ
障害のあるデプロイを検出するためのメトリクスアラーム
ACM 証明書
デフォルトを使用して Express Mode サービスを開始するか、最小限のパラメータセットを使用してアプリケーションを設定します。
クラスターのデフォルト
以下のクラスター用のデフォルトは、Express Mode 内から設定できます。
-
clusterName:
defaultクラスターを使用します。このオプションは、コンソールの追加設定オプションを使用するか、
create-express-gateway-service --clusterを指定することでカスタマイズできます。
以下のデフォルトは Express Mode によって設定されますが、クラスターで直接更新できます。
-
capacityProviders: ["FARGATE"] – Fargate を使用します
タスク定義のデフォルト
以下のタスク定義用のデフォルトは、Express Mode 内から設定できます。
cpu: 1024 – タスクに割り当てられた 1 vCPU 単位
このオプションは、コンソールの追加設定オプションを使用するか、
create-express-gateway-service --cpuを実行することでカスタマイズできます。メモリ: 2048 – タスクに割り当てられた 2 GB のメモリ
このオプションは、コンソールの追加設定オプションを使用するか、
create-express-gateway-service --memoryを実行することでカスタマイズできます。
以下のデフォルトは Express Mode によって設定されますが、タスク定義で直接更新できます。
networkMode: "awsvpc" –
awsvpcネットワークモードを使用しますoperatingSystemFamily: "LINUX" – Linux オペレーティングシステムで実行されます
cpuArchitecture: "X86_64" – x86_64 プロセッサアーキテクチャを使用します
requiresCompatibilities: ["FARGATE"] – Fargate 起動タイプと互換性があります
platformVersion: "LATEST" – 最新の Fargate プラットフォームバージョンを使用します
コンテナ定義のデフォルト
以下のコンテナ用のデフォルトは、Express Mode 内から設定できます。
port: 80 – コンテナトラフィックのデフォルトポート
以下のデフォルトは Express Mode によって設定されますが、タスク定義 – コンテナ定義で直接更新できます。
essential: true – コンテナはタスクの正常性に必須としてマークされます
protocol: "tcp" – ロードバランサーの通信のデフォルトプロトコル
name: "Main" – プライマリコンテナのデフォルト名
デフォルトコンテナの名前を変更すると、Express Mode がサービスに対して後続の更新を実行できなくなる可能性があります。これは、Express Mode コンソールまたは API を引き続き使用する場合はお勧めしません。
versionConsistency: enabled – 一貫したデプロイのためにイメージタグをダイジェスト ID に解決します
initProcessEnabled: true – Docker init プロセスのサポートを有効にします。
stopTimeout: 30 秒 – SIGTERM シグナルと SIGKILL シグナルの間の時間。
ログ記録のデフォルト
以下の CloudWatch Logs 用のデフォルトは、Express Mode 内から設定できます。
awslogs-group: "/aws/ecs/<cluster>/<name>-####" – クラスターとサービス名に由来するロググループ名
このオプションは、コンソールの追加設定オプションを使用するか、
create-express-gateway-service --primary-container “awsLogsConfiguration”=[{“logGroup”=“/my/logGroup/”}]を実行することでカスタマイズできます。awslogs-stream-prefix: "ecs" – ログストリーム名のプレフィックス
このオプションは、コンソールの追加設定オプションを使用するか、
create-express-gateway-service --primary-container “awsLogsConfiguration”=[{“logStreamPrefix”=“myprefix”}]を実行することでカスタマイズできます。
以下のデフォルトは Express Mode によって設定されますが、タスク定義 – ログ設定で直接更新できます。
logDriver: "awslogs" – CloudWatch Logs を使用します
awslogs-region: 現在のリージョン – Express Mode サービスと同じリージョンを使用します
mode: "non-blocking" – ログ記録モードがノンブロッキングに設定されます
max-buffer-size: "25m" – ログ書き込みの最大バッファサイズ
サービスのデフォルト
以下の Amazon ECS Service 用のデフォルトは、Express Mode 内から設定できます。
serviceName: Express Mode service → Name – サービスの名前 (お客様が提供したもの、またはイメージ名に由来するもの)
名前は作成時にのみ設定でき、更新時に設定することはできません。
cluster: Express Mode service → Cluster – このサービスの ECS クラスター (お客様が提供したもの、またはデフォルト)
クラスターは作成時にのみ設定でき、更新時に設定することはできません。
desiredCount: Express Mode service → MinTasks – サービスに必要な数 (デフォルトは 1)
このオプションは、コンソールの追加設定オプションを使用するか、
create-express-gateway-service --scaling-target ‘{“minTaskCount”=3}',を実行することでカスタマイズできます。tags: AWS タグ付け用の Express Mode サービスタグ (お客様が提供したもの)
このオプションは、コンソールの追加設定オプションを使用するか、
create-express-gateway-service --tagsを実行することでカスタマイズできます。タグは、新しいリソースの作成時にのみ追加できます。
以下のデフォルトは Express Mode によって設定されますが、Amazon ECS Service で直接更新できます。
availabilityZoneRebalancing: true – 自動の AZ リバランシングを有効にします
CapacityProviderStrategy: {"base": 1, "capacityProvider": "FARGATE", "weight": 1} – コンピューティングキャパシティに Fargate を使用します
deploymentConfiguration: デフォルトは Canary – Express Mode サービスはカナリアデプロイを使用します
Express Mode サービスではデプロイ戦略を更新できないことに注意してください。
enableECSManagedTags: true – ECS マネージドリソースのタグ付けを有効にします
healthCheckGracePeriodSeconds: 300 – スケジューラが ELB または Lattice ヘルスチェックを確認する前の猶予期間 (ELB ヘルスチェックの猶予期間のデフォルトと一致)
launchType: <Not set> – キャパシティプロバイダーを使用します
loadBalancers: ECS によって処理されるロードバランサーの設定
Express Mode サービスではロードバランサー設定を更新できないことに注意してください。
placementStrategy: 未設定 – 起動時に Fargate を使用します (常に AZ スプレッドである必要があります)
platformVersion: LATEST – Fargate プラットフォームバージョン (LATEST にハードコーディング)
propagateTags: "SERVICE" – サービスからタスクにタグを伝播します
schedulingStrategy: "REPLICA" – Express Mode サービスは REPLICA サービスです
taskDefinition: Express Mode service created – 使用するタスク定義 (Express Mode サービスが提供したもの)
ネットワーク設定のデフォルト
以下の Amazon ECS Service – ネットワーク設定用のデフォルトは、Express Mode 内から設定できます。
networkConfiguration.Subnets: 何も指定しない場合、Express Mode はデフォルト VPC のデフォルトパブリックサブネットを使用します。
デフォルト VPC には、2 つ以上のアベイラビリティーゾーンに少なくとも 2 つのパブリックサブネットがあり、サブネットごとに割り当てられた CIDR ブロックあたり使用できる IP が 8 つ以上ある必要があります。
カスタムパブリックサブネットを指定すると、Express Mode はインターネット向け ALB をプロビジョニングし、タスクの assignPublicIP を有効にします。プライベートサブネット (ルートテーブルにインターネットゲートウェイがないサブネット) を指定すると、Express Mode は内部 ALB をプロビジョニングします。
サブネットを指定すると、VPC の最初の Express Mode サービスは、その VPC のインターネット向けロードバランサーまたは内部ロードバランサーに関連付けられたサブネットを定義します。同じ VPC で起動する後続の Express Mode サービスには、ロードバランサーでサポートされているアベイラビリティーゾーンと一致するサブネットが必要です。このため、すべてのアベイラビリティーゾーンのサブネットを使用して Express Mode サービスを作成することをお勧めします。
networkConfiguration.SecurityGroups: 何も指定されていない場合、Express Mode はサービスセキュリティグループとロードバランサーセキュリティグループの両方を作成します。
サービスセキュリティグループは、パブリックインターネットへのアウトバウンドトラフィックを許可しますが、サブネット設定など、ネットワークの他の側面によっては制限される場合があります。
ロードバランサーセキュリティグループは、指定したコンテナポート (デフォルトは 80) で、HTTPS 解決のためのインバウンドトラフィックとサービスセキュリティグループへのアウトバウンドトラフィックを許可します。また、Express Mode の Create または Update 呼び出しで提供されるコンテナポートと一致するように自動的に更新されます。
このオプションは、コンソールの追加設定オプションを使用するか、
create-express-gateway-service --network-configuration '{"securityGroup": ["sg-xxxxxxx"]}'を実行することでカスタマイズできます。セキュリティグループを指定するときに、サービスへの追加のイングレスパスを提供します。
以下のデフォルトは Express Mode によって設定されますが、Amazon ECS Service – ネットワーク設定で直接更新できます。
assignPublicIp: サブネットタイプに基づく – デフォルト VPC のユーザーがパブリックインターネットにアクセスできるようにパブリックサブネットに対して有効になります。デフォルトで各タスクのパブリック IP を有効にします。これは、プライベートサブネットを指定すると無効になり、タスクでインターネットアクセスが必要な場合は NAT ゲートウェイを設定する必要があります。
IAM ロールのデフォルト
以下の IAM ロールは Express Mode サービスに対して設定でき、必要に応じてサービスにリンクされたロールが自動的に作成されます。
executionRoleArn: タスク実行ロール (必須パラメータ)
必要なアクセス許可はマネージドポリシーにありますが、追加のポリシーとアクセス許可をアタッチできます。「AWS マネージドポリシーリファレンスガイド」の「AmazonECSTaskExecutionRolePolicy」で追加の詳細を参照してください。
infrastructureRoleArn: Express Gateway サービスのインフラストラクチャロール (必須パラメータ)
必要なアクセス許可はマネージドポリシーにありますが、追加のポリシーとアクセス許可をアタッチできます。「AWS マネージドポリシーリファレンスガイド」の「AmazonECSInfrastructureRoleforExpressGatewayServices」で追加の詳細を参照してください。
taskRoleArn: コンテナアプリケーションコードからの呼び出し用のタスクロール (オプション)
このオプションは、コンソールの追加設定オプションを使用するか、
create-express-gateway-service --task-role-arnを実行することでカスタマイズできます。Express Mode サービスを作成または更新する前に、新しい IAM ロールを作成する必要があります。
次の IAM ロールは、Express Mode によって自動的に設定されます。
ecsServiceRoleForECS: Amazon ECS にクラスターの管理を許可します
AWSServiceRoleForElasticLoadBalancing: 他の AWS サービスをユーザーに代わって呼び出します – Elastic Load Balancing によって自動的に作成されます
AWSServiceRoleForApplicationAutoScaling_ECSService: ユーザーに代わって他の AWS サービスを呼び出します – Application Auto Scaling によって自動的に作成されます
Application Auto Scaling のデフォルト
次の Application Auto Scaling 設定は、Express Mode で設定できます。
autoScalingTargetValue: 60 – スケーリングのターゲット CPU 使用率
autoScalingMetric: "CPUUtilization" – 自動スケーリングの決定に使用されるメトリクス
desiredMinTaskCount: 1 – 維持するタスクの最小数
desiredMaxTaskCount: 20 – スケールするタスクの最大数 (増減可能)
以下の設定は、Application Auto Scaling で直接設定できます。
policyType: "TargetTrackingScaling" – ターゲット追跡スケーリングポリシーを使用します
disableScaleIn: false – 需要が減少したときのスケールダウンを許可します
アプリケーションスケーリングターゲットのデフォルト
Application Auto Scaling ターゲットは、自動スケーリングオペレーションのスケーラブルなリソースと容量の制限を定義します。Express Mode では、以下を変更できます。
MaxCapacity: Express Mode service → MaxTasks – サービスがスケールアップする最大タスク数 (デフォルトは CreateLoadBalancedService またはお客様提供)
MinCapacity: Express Mode service → MinTasks – サービスがスケールダウンする最小タスク数 (デフォルトは CreateLoadBalancedService またはお客様提供)
ScalableDimension: ecs:service:DesiredCount – スケールするプロパティ
Tags: CreateLoadBalancedService で渡されたタグに由来 – このリソースのリソースタグ
Application Auto Scaling スケーラブルターゲットでは、次のデフォルトを変更できます。
DynamicScalingInSuspended: false – スケーリングが中断されているかどうかを示します
DynamicScalingOutSuspended: false – スケールアウトが中断されているかどうかを示します
ScheduledScalingSuspended: false – スケジュールされたスケーリングが中断されているかどうかを示します
アプリケーションスケーリングポリシーのデフォルト
スケーリングポリシーは、CPU 使用率をモニタリングし、最適なパフォーマンスを維持するためにタスク数を調整するターゲット追跡アルゴリズムを実装します。Express Mode から以下を変更できます。
TargetValue: 60% – 追跡ポリシーのターゲット値 (Express Mode service → scaling-target-value)
PredefinedMetricType: ECSServiceAverageCPUUtilization – 追跡されるメトリクスの名前タイプ (Express Mode service → scaling-metric)
Express Mode は、平均 CPU 使用率、平均メモリ使用率、ターゲットあたりのリクエスト数のスケーリングメトリクスを提供します。ターゲットあたりのリクエスト数は Application Load Balancer に由来し、1 秒あたりターゲットごとに最大 65536 リクエストまで設定できます。これが Application Load Balancer ターゲットグループの Amazon ECS サービスです。
次のデフォルトは Express Mode によって設定されますが、Application Auto Scaling ポリシーで変更できます。
PolicyName: <ServiceName><"TargetMetric"> – このスケーリングポリシーの名前 (ECS サービス名とターゲットメトリクスに由来)
PolicyType: TargetTrackingScaling – 実行されるスケーリングのタイプ (事前定義されたデフォルト)
ScalableDimension: "ecs:service:DesiredCount" – スケーリングされるプロパティ (事前定義されたデフォルト)
DisableScaleIn: false – スケールインが無効かどうかを示します
Application Load Balancer のデフォルト
Express Mode では、次の Application Load Balancer のデフォルトを設定できます。
scheme: サブネットによって異なる – パブリックサブネットが指定された場合、パブリック IP アドレスを持つインターネット向けロードバランサーを作成します。プライベートサブネットが指定された場合、プライベート IP アドレスを持つ内部ロードバランサーを作成します。
ip-address-type: サブネットによって異なる – アドレスが IPv4 の場合、IPv4 のみの Application Load Balancer を作成します。IPv6 対応のサブネットがある場合、デュアルスタック Application Load Balancer が作成されます。IPv6 対応のサブネットがある場合、VPC の最初の Express Mode サービスは、その VPC の内部ロードバランサーまたはインターネット向けロードバランサーを定義することに注意してください。このため、IPv6 のみのサブネットを最初に作成するか、新しい VPC 内に作成することをお勧めします。
次のデフォルトは Express Mode で設定されますが、Application Load Balancer で構成できます。
desync-mitigation-mode: Off – HTTP 非同期緩和が無効になります
access-logs.enabled: false – アクセスログ記録が無効になります
listener-configurations.protocol: https – 安全な通信に HTTPS プロトコルを使用します
listener-configurations.port: 443 – 標準 HTTPS ポートでリッスンします
listener-configurations.rule-type: host-header – ホストヘッダールールに基づいてトラフィックをルーティングします
ターゲットグループのデフォルト
次の Amazon EC2 ターゲットグループのデフォルトは、Express Mode で設定できます。
health-check-path: (デフォルト "/") Express Mode サービスのヘルスチェックパス – ヘルスチェックリクエストの URL パス
port: (デフォルト 80) – ターゲットがトラフィックを受信するポート
health-check-port: (デフォルト 80) – ヘルスチェックリクエストのポート
次のデフォルトは Express Mode で設定されますが、Amazon EC2 ターゲットグループで構成できます。
protocol: HTTP – ターゲットにトラフィックをルーティングするためのプロトコル
protocol-version: HTTP1 – 通信用の HTTP プロトコルバージョン
vpc-id: デフォルトはデフォルト VPC – ターゲットグループの仮想プライベートクラウド識別子ですが、指定されたサブネットに由来します
health-check-protocol: プロトコルと同じ – ヘルスチェックリクエストのプロトコル
health-check-enabled: Always enabled – ヘルスチェックは自動的に有効になります
health-check-interval-seconds: 30 – 各ターゲットのヘルスチェック間隔
health-check-timeout-seconds: 5 – ヘルスチェック応答のタイムアウト期間
healthy-threshold-count: 5 – 正常なステータスに必要な連続した正常なヘルスチェック
unhealthy-threshold-count: 2 – 異常なステータスに必要な連続して失敗したヘルスチェック
target-type: ip – ターゲットは IP アドレスによって登録されます
ip-address-type: ipv4 – ターゲット登録に IPv4 アドレスを使用します
リソース共有とコストの最適化
Express Mode サービスは、可能な限りリソースを自動的に共有してコストを最適化します。
-
ロードバランサーの共有 – 同じ VPC 内の最大 25 の Express Mode サービスが Application Load Balancer を共有できます。Express Mode は、プロビジョニングした Express Mode サービスの量に基づき、必要に応じて追加の Application Load Balancer をプロビジョニングします。また、VPC の Express Mode サービスの量を減らすと、Express Mode は未使用の Application Load Balancer のプロビジョニングも解除します。このような共有により、Express Mode サービスをデプロイするほど、アプリケーションあたりのコストを削減できます。
-
クラスター共有 – Express Mode サービスは、Amazon ECS クラスターでグループ化できます。Express Mode サービスは、Amazon ECS クラスターを Express Mode で管理されていない Amazon ECS サービスと共有することもできます。