Load Balanced Web Service

以下は 'Load Balanced Web Service' Manifest で利用できるすべてのプロパティのリストです。Copilot Service の概念説明のページも合わせてご覧ください。

インターネット向け Service のサンプル Manifest
name: 'frontend'
type: 'Load Balanced Web Service'

image:
  build: './frontend/Dockerfile'
  port: 8080

http:
  path: '/'
  healthcheck: '/_healthcheck'

cpu: 256
memory: 512
count: 3
exec: true

variables:
  LOG_LEVEL: info
secrets:
  GITHUB_TOKEN: GITHUB_TOKEN
  DB_SECRET:
    secretsmanager: 'mysql'
name: 'frontend'
type: 'Load Balanced Web Service'

image:
  build: './frontend/Dockerfile'
  port: 8080

http:
  path: '/'
  alias: 'example.com'

environments:
  qa:
    http:
      alias: # 証明書インポート済みの "qa" Environment
        - name: 'qa.example.com'
          hosted_zone: Z0873220N255IR3MTNR4
# 例えば、外部からのトラフィックを受け入れる前に、Java サービスをウォームアップしておきたい場合など。
name: 'frontend'
type: 'Load Balanced Web Service'

image:
  build:
    dockerfile: './frontend/Dockerfile'
    context: './frontend'
  port: 80

http:
  path: '/'
  healthcheck:
    path: '/_deephealthcheck'
    port: 8080
    success_codes: '200,301'
    healthy_threshold: 4
    unhealthy_threshold: 2
    interval: 15s
    timeout: 10s
    grace_period: 2m
  deregistration_delay: 50s
  stickiness: true
  allowed_source_ips: ["10.24.34.0/23"]

cpu: 2048
memory: 4096
count: 3
storage:
  ephemeral: 100

network:
  vpc:
    placement: 'private'
name: 'frontend'
type: 'Load Balanced Web Service'

http:
  path: '/'
image:
  location: aws_account_id.dkr.ecr.us-west-2.amazonaws.com/frontend:latest
  port: 80

cpu: 512
memory: 1024
count:
  range: 1-10 
  cooldown:
    in: 60s
    out: 30s
  cpu_percentage: 70
  requests: 30
  response_time: 2s
# https://aws.github.io/copilot-cli/docs/developing/publish-subscribe/ を参照してください。
name: 'orders'
type: 'Load Balanced Web Service'

image:
  build: Dockerfile
  port: 80
http:
  path: '/'
  alias: 'orders.example.com'

variables:
  DDB_TABLE_NAME: 'orders'

publish:
  topics:
    - name: 'products'
    - name: 'orders'
      fifo: true
name: 'frontend'
type: 'Load Balanced Web Service'

image:
  build: Dockerfile
  port: 8080

http: false
nlb:
  alias: 'example.com'
  port: 80/tcp
  target_container: envoy

network:
  vpc:
    placement: 'private'

sidecars:
  envoy:
    port: 80
    image: aws_account_id.dkr.ecr.us-west-2.amazonaws.com/envoy:latest
# http://localhost:8000/copilot-cli/docs/developing/storage.ja.md#ファイルシステム を参照してください。
name: 'frontend'
type: 'Load Balanced Web Service'

image:
  build: Dockerfile
  port: 80
  depends_on:
    bootstrap: success

http:
  path: '/'

storage:
  volumes:
    wp:
      path: /bitnami/wordpress
      read_only: false
      efs: true

# ブートストラップコンテナを使って、ファイルシステム内のコンテンツを用意しておきます。
sidecars:
  bootstrap:
    image: aws_account_id.dkr.ecr.us-west-2.amazonaws.com/bootstrap:v1.0.0
    essential: false
    mount_points:
      - source_volume: wp
        path: /bitnami/wordpress
        read_only: false
name: 'frontend'
type: 'Load Balanced Web Service'

image:
  build: Dockerfile
  port: 8080

http:
  alias: 'example.com'
  path: '/'
  healthcheck:
    path: '/_health'

  # プロトコルでの指定の結果により、envoy コンテナのポートは 443 です。ヘルチェックプロトコルは `HTTPS` になります。
  # ロードバランサーは Fargate タスクと TLS 接続します。envoy コンテナに
  # インストールした証明書が利用されます。それらの証明書は自己証明書です。
  target_container: envoy

sidecars:
  envoy:
    port: 443
    image: aws_account_id.dkr.ecr.us-west-2.amazonaws.com/envoy-proxy-with-selfsigned-certs:v1

network:
  vpc:
    placement: 'private'
name: 'frontend'
type: 'Load Balanced Web Service'

image:
  build: './frontend/Dockerfile'
  port: 8080

nlb:
  port: 8080/tcp              # Traffic on port 8080/tcp is forwarded to the main container, on port 8080.
  additional_listeners:  
    - port: 8084/tcp          # Traffic on port 8084/tcp is forwarded to the main container, on port 8084.
    - port: 8085/tcp          # Traffic on port 8085/tcp is forwarded to the sidecar "envoy", on port 3000.
      target_port: 3000         
      target_container: envoy   

http:
  path: '/'
  target_port: 8083           # Traffic on "/" is forwarded to the main container, on port 8083. 
  additional_rules: 
    - path: 'customerdb'
      target_port: 8081       # Traffic on "/customerdb" is forwarded to the main container, on port 8083.  
    - path: 'admin'
      target_port: 8082       # Traffic on "/admin" is forwarded to the sidecar "envoy", on port 8082.
      target_container: envoy    

sidecars:
  envoy:
    port: 80
    image: aws_account_id.dkr.ecr.us-west-2.amazonaws.com/envoy-proxy-with-selfsigned-certs:v1

name String
Service の名前。

type String
Service のアーキテクチャタイプ。 Load Balanced Web Service は、ロードバランサー及び AWS Fargate 上の Amazon ECS によって構成される、インターネットに公開するための Service です。

http Boolean or Map http セクションは Application Load Balancer と Service との連携に関するパラメータを含みます。

Application Load Balancer を無効化する場合は、 http: false と指定します。 Load Balanced Web Service では、Application Load Balancer または、Network Load Balancer が少なくとも 1 つ有効となっていなければならない事に注意してください。

http.path String
このパスに到着したリクエストが、Service に転送されます。各リスナールールは一意のパスでリクエストを受け付ける必要があります。

http.alb String v1.32.0 にて追加
インポートする既存のインターネット向け ALB の ARN または ALB 名。リスナーにリスナールールが追加されます。Copilot は証明書などの DNS 関連リソースを管理しません。

http.healthcheck String or Map
文字列を指定した場合、Copilot は、ターゲットグループからのヘルスチェックリクエストを処理するためにコンテナが公開しているパスと解釈します。デフォルトは "/" です。

http:
  healthcheck: '/'
あるいは以下のように Map によるヘルスチェックも指定可能です。
http:
  healthcheck:
    path: '/'
    port: 8080
    success_codes: '200'
    healthy_threshold: 3
    unhealthy_threshold: 2
    interval: 15s
    timeout: 10s
    grace_period: 60s

http.healthcheck.path String
ヘルスチェックリクエスト送信先。

http.healthcheck.port Integer ヘルスチェックリクエストを送信するポート。デフォルト値は、image.port です。http.target_containerで公開ポートが設定されている場合、公開しているポートが設定されます。
ポートが 443 で公開されている場合、 ヘルスチェックは自動で HTTPS に設定されます。

http.healthcheck.success_codes String
healthy なターゲットがヘルスチェックに対して返す HTTP ステータスコードを指定します。200 から 499 の範囲で指定可能です。また、"200,202" のように複数の値を指定することや "200-299" のような値の範囲指定も可能です。デフォルト値は 200 です。

http.healthcheck.healthy_threshold Integer
unhealthy なターゲットを healthy とみなすために必要な、連続したヘルスチェックの成功回数を指定します。デフォルト値は 5 で、設定可能な範囲は、2 〜 10 です。

http.healthcheck.unhealthy_threshold Integer
ターゲットが unhealthy であると判断するまでに必要な、連続したヘルスチェックの失敗回数を指定します。デフォルト値は 2 で、設定可能な範囲は、2 〜 10 です。

http.healthcheck.interval Duration
個々のターゲットへのヘルスチェックを行う際の、おおよその間隔を秒単位で指定します。デフォルト値は 30 秒で、設定可能な範囲は、5 〜 300 です。

http.healthcheck.timeout Duration
ターゲットからの応答がない場合、ヘルスチェックが失敗したとみなすまでの時間を秒単位で指定します。デフォルト値は 5 秒で、設定可能な範囲は、5 〜 300 です。

http.healthcheck.grace_period Duration
コンテナ起動時にターゲットグループのヘルスチェックが失敗した場合の、それを無視する時間を指定します。デフォルトは 60 秒です。これは、healthy であることを担保しながら着信を待機するまでに時間がかかるコンテナのデプロイ時の問題を修正したり、迅速な起動が保証されているコンテナのデプロイを高速化したりするのに役立ちます。

http.deregistration_delay Duration

登録解除時にターゲットがクライアントとの接続を閉じるのを待つ時間を指定します。デフォルトでは 60 秒です。この値を大きくするとターゲットが安全に接続を閉じるための時間を確保できますが、新バージョンのデプロイに必要となる時間が長くなります。範囲は 0 〜 3600 です。

http.target_container String
サイドカーコンテナを指定することで、Service のメインコンテナの代わりにサイドカーでロードバランサーからのリクエストを受け取れます。 ターゲットコンテナのポートが 443 に設定されている場合、プロトコルは HTTP に設定され、ロードバランサーは Fargate タスクと TLS 接続します。ターゲットコンテナにインストールされた証明書が利用されます。

http.target_port String
任意項目。トラフィックを受信するコンテナポート。デフォルトでは、ターゲットコンテナがメインコンテナの場合、image.port 、 ターゲットコンテナがサイドカーの場合は、sidecars.<name>.port です。

http.stickiness Boolean
スティッキーセッションの有効化、あるいは無効化を指定します。

http.allowed_source_ips Array of Strings
Service へのアクセスを許可する CIDR IP アドレスのリストを指定します。

http:
  allowed_source_ips: ["192.0.2.0/24", "198.51.100.10/32"]

http.alias String or Array of Strings or Array of Maps
Service の HTTPS ドメインエイリアス。

# String version.
http:
  alias: example.com
# Alternatively, as an array of strings.
http:
  alias: ["example.com", "v1.example.com"]
# Alternatively, as an array of maps.
http:
  alias:
    - name: example.com
      hosted_zone: Z0873220N255IR3MTNR4
    - name: v1.example.com
      hosted_zone: AN0THE9H05TED20NEID
http.hosted_zone String
既存のプライベートホストゾーンの ID。http.alias とのみ使用可能です。証明書をインポートした Environment がある場合、ロードバランサーの作成後に Copilot が A レコードを挿入するホストゾーンを指定できます。
http:
  alias: example.com
  hosted_zone: Z0873220N255IR3MTNR4
# Also see http.alias array of maps example, above.
http.redirect_to_https Boolean Application Load Balancer で、HTTP から HTTPS へ自動的にリダイレクトします。デフォルトは true です。

http.version String
HTTP(S) プロトコルのバージョン。 'grpc''http1'、または 'http2' を指定します。省略した場合は、'http1' が利用されます。 gRPC を利用する場合は、Application にドメインが関連付けられていなければなりません。

http.additional_rules Array of Maps
複数の ALB リスナールール設定します。

http.additional_rules.path String
Requests to this path will be forwarded to your service. Each listener rule should listen on a unique path.

http.additional_rules.healthcheck String or Map
If you specify a string, Copilot interprets it as the path exposed in your container to handle target group health check requests. The default is "/".

http:
  additional_rules:
    - healthcheck: '/'
You can also specify healthcheck as a map:
http:
  additional_rules:
    - healthcheck:
        path: '/'
        port: 8080
        success_codes: '200'
        healthy_threshold: 3
        unhealthy_threshold: 2
        interval: 15s
        timeout: 10s

http.additional_rules.healthcheck.path String
The destination that the health check requests are sent to.

http.additional_rules.healthcheck.port Integer
The port that the health check requests are sent to. The default is image.port, or the port exposed by http.target_container, if set.
If the port exposed is 443, then the health check protocol is automatically set to HTTPS.

http.additional_rules.healthcheck.success_codes String
The HTTP status codes that healthy targets must use when responding to an HTTP health check. You can specify values between 200 and 499. You can specify multiple values (for example, "200,202") or a range of values (for example, "200-299"). The default is 200.

http.additional_rules.healthcheck.healthy_threshold Integer
The number of consecutive health check successes required before considering an unhealthy target healthy. The default is 5. Range: 2-10.

http.additional_rules.healthcheck.unhealthy_threshold Integer
The number of consecutive health check failures required before considering a target unhealthy. The default is 2. Range: 2-10.

http.additional_rules.healthcheck.interval Duration
The approximate amount of time, in seconds, between health checks of an individual target. The default is 30s. Range: 5s–300s.

http.additional_rules.healthcheck.timeout Duration
The amount of time, in seconds, during which no response from a target means a failed health check. The default is 5s. Range 5s-300s.

http.additional_rules.deregistration_delay Duration
The amount of time to wait for targets to drain connections during deregistration. The default is 60s. Setting this to a larger value gives targets more time to gracefully drain connections, but increases the time required for new deployments. Range 0s-3600s.

http.additional_rules.target_container String
A sidecar container that requests are routed to instead of the main service container.
If the target container's port is set to 443, then the protocol is set to HTTPS so that the load balancer establishes TLS connections with the Fargate tasks using certificates that you install on the target container.

http.additional_rules.target_port String
The container port that receives traffic. Specify this field if the container port is different from image.port for the main container or sidecar.port for the sidecar containers.

http.additional_rules.stickiness Boolean
Indicates whether sticky sessions are enabled.

http.additional_rules.allowed_source_ips Array of Strings
CIDR IP addresses permitted to access your service.

http:
  additional_rules:
    - allowed_source_ips: ["192.0.2.0/24", "198.51.100.10/32"]

http.additional_rules.alias String or Array of Strings or Array of Maps
HTTPS domain alias of your service.

# String version.
http:
  additional_rules:
    - alias: example.com
# Alternatively, as an array of strings.
http:
  additional_rules:
    - alias: ["example.com", "v1.example.com"]
# Alternatively, as an array of maps.
http:
  additional_rules:
    - alias:
        - name: example.com
          hosted_zone: Z0873220N255IR3MTNR4
        - name: v1.example.com
          hosted_zone: AN0THE9H05TED20NEID
http.additional_rules.hosted_zone String
ID of your existing hosted zone; can only be used with http.alias and http.additional_rules.alias. If you have an environment with imported certificates, you can specify the hosted zone into which Copilot should insert the A record once the load balancer is created.
http:
  additional_rules:
    - alias: example.com
      hosted_zone: Z0873220N255IR3MTNR4
# Also see http.alias array of maps example, above.
http.additional_rules.redirect_to_https Boolean
Automatically redirect the Application Load Balancer from HTTP to HTTPS. By default it is true.

http.additional_rules.version String
The HTTP(S) protocol version. Must be one of 'grpc', 'http1', or 'http2'. If omitted, then 'http1' is assumed. If using gRPC, please note that a domain must be associated with your application.

nlb Map
nlb セクションは Service を Network Load Balancer と統合するためのパラメーターを含みます。

Network Load Balancerは、nlb フィールドを指定した場合のみ有効になります。 Load Balanced Web Service では、Application Load Balancer と Network Load Balancer のいずれかが有効になっている必要があることに注意してください。

nlb.port String
必須項目。Network Load Balancer がリッスンするポートとプロトコルを指定します。

使用可能なプロトコルは tcpudptls です。プロトコルを指定しない場合、デフォルトで tcp が使用されます。
設定例:

nlb:
  port: 80
tcp リクエストをポート 80 で待ち受けるようにするためには、以下のように設定します。
設定例:
nlb:
  port: 80/tcp

簡単に TLS 終端を有効にすることができます。
設定例:

nlb:
  port: 443/tls

nlb.healthcheck Map
Network Load Balancer のヘルスチェックの設定を指定します。

nlb:
  healthcheck:
    port: 80
    healthy_threshold: 3
    unhealthy_threshold: 2
    interval: 15s
    timeout: 10s

nlb.healthcheck.port String
ヘルスチェックのリクエストが送信されるポート。ヘルスチェックが、コンテナターゲットポートとは異なるポートで実行される必要がある場合に指定します。

nlb.healthcheck.healthy_threshold Integer
unhealthy なターゲットを healthy とみなすために必要な、連続したヘルスチェックの成功回数を指定します。デフォルト値は 3 で、設定可能な範囲は、2 〜 10 です。

nlb.healthcheck.unhealthy_threshold Integer
ターゲットが unhealthy であると判断するまでに必要な、連続したヘルスチェックの失敗回数を指定します。デフォルト値は 3 で、設定可能な範囲は、2 〜 10 です。

nlb.healthcheck.grace_period Duration
コンテナ起動時にターゲットグループのヘルスチェックが失敗した場合の、それを無視する時間を指定します。デフォルトは 60 秒です。これは、healthy であることを担保しながら着信を待機するまでに時間がかかるコンテナのデプロイ時の問題を修正したり、迅速な起動が保証されているコンテナのデプロイを高速化したりするのに役立ちます。

Info

この説明を書いている時点では、ドキュメントによると、Network Load Balancer の 'unhealthy threshold' は 'healthy threshold' と同じである必要があるとされています。

nlb.healthcheck.interval Duration
個々のターゲットへのヘルスチェックを行う際の、おおよその間隔を秒単位で指定します。設定可能な値は 10s (10 秒) または 30s (30 秒) で、デフォルト値は 30s です。

nlb.healthcheck.timeout Duration
ターゲットからの応答がない場合、ヘルスチェックが失敗したとみなすまでの時間を秒単位で指定します。デフォルト値は 10s (10 秒)です。

nlb.target_container String
サイドカーコンテナを指定することで、Service のメインコンテナの代わりにサイドカーでロードバランサからのリクエストを受け取れます。

nlb.target_port Integer
トラフィックを受信するコンテナのポート。コンテナポートがリスナーポートの nlb.port と異なる場合、このフィールドを指定します。

nlb.ssl_policy String
どのようなプロトコルや暗号をサポートするかを定義するセキュリティポリシーです。詳しくはこのドキュメントをご覧ください。

nlb.stickiness Boolean
スティッキーセッションの有効化、あるいは無効化を指定します。

nlb.alias String or Array of Strings
Service のドメインエイリアス

# 文字列で指定する場合
nlb:
  alias: example.com
# 別の方法として、文字列配列の場合
nlb:
  alias: ["example.com", "v1.example.com"]
nlb.additional_listeners Array of Maps
複数の NLB リスナーを設定します。

nlb.additional_listeners Map

nlb.additional_listeners.port String
必須項目。Network Load Balancer が待ち受ける為の追加ポートとプロトコル。

使用可能なプロトコルには tcpudptls です。プロトコルが指定されていない場合、デフォルト値として tcp が使用されます。

nlb.additional_listeners.healthcheck Map Network Load Balancer の追加リスナーに対するヘルスチェック設定を指定します。

nlb:
  additional_listeners:
    - healthcheck:
        port: 80
        healthy_threshold: 3
        unhealthy_threshold: 2
        interval: 15s
        timeout: 10s

nlb.additional_listeners.healthcheck.port String
ヘルスチェックリクエストが送信されるポート。コンテナターゲットポートと異なるポートでヘルスチェックが実行される場合に指定します。

nlb.additional_listeners.healthcheck.healthy_threshold Integer
unhealthy なターゲットを healthy とみなすために必要な、連続したヘルスチェックの成功回数を指定します。デフォルト値は 3 で、設定可能な範囲は、2-10 です。

nlb.additional_listeners.healthcheck.unhealthy_threshold Integer
ターゲットが unhealthy であると判断するまでに必要な、連続したヘルスチェックの失敗回数を指定します。デフォルト値は 3 で、設定可能な範囲は、2-10 です。

nlb.additional_listeners.healthcheck.interval Duration
個々のターゲットへのヘルスチェックを行う際の、おおよその間隔を秒単位で指定します。 10 秒または 30 秒が設定可能です。デフォルト値は 30 秒です。

nlb.additional_listeners.healthcheck.timeout Duration
ターゲットからの応答がない場合、ヘルスチェックが失敗したとみなすまでの時間を秒単位で指定します。デフォルト値は 10 秒です。

nlb.additional_listeners.target_container String
サービスコンテナの代わりとなるサイドカーコンテナ。

nlb.additional_listeners.target_port Integer
トラフィックを受信するコンテナポート。コンテナポートが nlb.port、リスナーポートと異なる場合にこのフィールドを指定します。

nlb.additional_listeners.ssl_policy String

サポートするプロコルと暗号を定義するセキュリティポリシーです。詳細については、こちらのドキュメントを確認してください。

<span class="parent-field">nlb.additional_listeners.</span><a id="nlb-additional-listeners-stickiness" href="#nlb-additional-listeners-stickiness" class="field">`stickiness`</a> <span class="type">Boolean</span>  
スティッキーセッションの有効化、あるいは無効化を指定します。

image Map
image セクションは、Docker ビルドに関する設定や、既にあるコンテナイメージに対する参照についてのパラメータを含みます。

image.build String or Map
オプションの引数で指定した Dockerfile からコンテナをビルドします。後述の image.location フィールドとは排他的な使用となります。

このフィールドに String(文字列)を指定した場合、Copilot はそれを Dockerfile の場所を示すパスと解釈します。その際、指定したパスのディレクトリ部が Docker のビルドコンテキストであると仮定します。以下は build フィールドに文字列を指定する例です。

image:
  build: path/to/dockerfile
これにより、イメージビルドの際に次のようなコマンドが実行されることになります: $ docker build --file path/to/dockerfile path/to

build フィールドには Map も利用できます。

image:
  build:
    dockerfile: path/to/dockerfile
    context: context/dir
    target: build-stage
    cache_from:
      - image:tag
    args:
      key: value
この例は、Copilot は Docker ビルドコンテキストに context フィールドの値が示すディレクトリを利用し、args 以下のキーバリューのペアをイメージビルド時の --build-args 引数として渡します。上記例と同等の docker build コマンドは次のようになります:
$ docker build --file path/to/dockerfile --target build-stage --cache-from image:tag --build-arg key=value context/dir.

Copilot はあなたの意図を理解するために最善を尽くしますので、記述する情報の省略も可能です。例えば、context は指定しているが dockerfile は未指定の場合、Copilot は Dockerfile が "Dockerfile" という名前で存在すると仮定しつつ、docker コマンドを context ディレクトリ以下で実行します。逆に dockerfile は指定しているが context が未指定の場合は、Copilot はあなたが dockerfile で指定されたディレクトリをビルドコンテキストディレクトリとして利用したいのだと仮定します。

すべてのパスはワークスペースのルートディレクトリからの相対パスと解釈されます。

image.location String
Dockerfile からコンテナイメージをビルドする代わりに、既存のコンテナイメージ名の指定も可能です。image.locationimage.build の同時利用はできません。 location フィールドの制約を含む指定方法は Amazon ECS タスク定義の image パラメータのそれに従います。

Warning

Windows コンテナイメージを指定する場合、Manifest に platform: windows/amd64 を指定する必要があります。
ARM アーキテクチャベースのコンテナイメージを指定する場合、Manifest に platform: linux/arm64 を指定する必要があります。

image.credentials String
任意項目です。プライベートリポジトリの認証情報の ARN。credentials フィールドは、Amazon ECS タスク定義の credentialsParameter と同じです。

image.labels Map
コンテナに付与したい Docker ラベルを key/value の Map で指定できます。これは任意設定項目です。

image.depends_on Map
任意項目。コンテナに追加する Container Dependencies の任意の key/value の Map。Map の key はコンテナ名で、value は依存関係を表す値 (依存条件) として starthealthycompletesuccess のいずれかを指定できます。なお、必須コンテナに completesuccess の依存条件を指定することはできません。

設定例:

image:
  build: ./Dockerfile
  depends_on:
    nginx: start
    startup: success
上記の例では、タスクのメインコンテナは nginx サイドカーが起動し、startup コンテナが正常に完了してから起動します。

image.port Integer
公開するポート番号。Dockerfile 内に EXPOSE インストラクションが記述されている場合、Copilot はそれをパースした値をここに挿入します。 ポートを 443 に設定し、 ロードバランサーが http で有効化されている場合、プロトコルは HTTPS に設定され、ロードバランサーは Fargate タスクと TLS 接続します。ターゲットコンテナにインストールされた証明書が利用されます。

image.healthcheck Map
コンテナヘルスチェックの設定。この設定はオプションです。

image.healthcheck.command Array of Strings
コンテナが healthy であると判断するためのコマンド。
このフィールドに設定する文字列配列の最初のアイテムには、コマンド引数を直接実行するための CMD、あるいはコンテナのデフォルトシェルでコマンドを実行する CMD-SHELL が利用できます。

image.healthcheck.interval Duration
各ヘルスチェックの実行間の秒単位の間隔です。デフォルト値は10秒です。

image.healthcheck.retries Integer
コンテナが unhealthy と見なされるまでに、失敗したヘルスチェックを再試行する回数です。デフォルト値は2です。

image.healthcheck.timeout Duration
ヘルスチェックの実行開始から失敗とみなすまでに待機する秒単位の期間です。デフォルト値は5秒です。

image.healthcheck.start_period Duration ヘルスチェックの実行と失敗がリトライ回数としてカウントされ始める前に、コンテナに対して起動処理を済ませる猶予期間の長さです。秒単位で指定し、デフォルトは0秒です。

cpu Integer タスクに割り当てる CPU ユニット数。指定可能な値については Amazon ECS ドキュメントをご覧ください。

memory Integer
タスクに割り当てるメモリ量(MiB)。指定可能な値については Amazon ECS ドキュメントをご覧ください。

platform String or Map
docker build --platform で渡すオペレーティングシステムとアーキテクチャ。([os]/[arch] の形式で指定)
例えば linux/arm64windows/x86_64 などが指定できます。デフォルトは linux/x86_64 です。

異なる osfamilyarchitecture を明示的に指定することもできます。 例えば、Windows では以下の設定はデフォルトで WINDOWS_SERVER_2019_CORE が利用されますが

platform: windows/x86_64

Map を使って WINDOWS_SERVER_2019_FULL を明示的に指定できます。

platform:
  osfamily: windows_server_2019_full
  architecture: x86_64
platform:
  osfamily: windows_server_2019_core
  architecture: x86_64
platform:
  osfamily: windows_server_2022_core
  architecture: x86_64
platform:
  osfamily: windows_server_2022_full
  architecture: x86_64

count Integer or Map Service が保つべきタスクの数。

次の様に指定すると、

count: 5
Service は、希望するタスク数を 5 に設定し、Service 内に 5 つのタスクが起動している様に保ちます。

count.spot Integer

spot サブフィールドに数値を指定することで、Service の実行に Fargate Spot キャパシティを利用できます。

count:
  spot: 5

Info

ARM アーキテクチャで動作するコンテナでは、Fargate Spot はサポートされていません。

あるいは、Map を指定してオートスケーリングの設定も可能です。

count:
  range: 1-10
  cooldown:
    in: 30s
    out: 60s
  cpu_percentage: 70
  memory_percentage:
    value: 80
    cooldown:
      in: 80s
      out: 160s
  requests: 10000
  response_time: 2s

count.range String or Map メトリクスに指定した値に基づいて、Service が保つべきタスク数の最小と最大を範囲指定できます。

count:
  range: n-m
これにより Application Auto Scaling がセットアップされ、MinCapacityn が、MaxCapacitym が設定されます。

あるいは次の例に挙げるように range フィールド以下に minmax を指定し、加えて spot_from フィールドを利用することで、一定数以上のタスクを実行する場合に Fargate Spot キャパシティを利用する設定が可能です。

count:
  range:
    min: 1
    max: 10
    spot_from: 3

上記の例では Application Auto Scaling は 1-10 の範囲で設定されますが、最初の2タスクはオンデマンド Fargate キャパシティに配置されます。Service が3つ以上のタスクを実行するようにスケールした場合、3つ目以降のタスクは最大タスク数に達するまで Fargate Spot に配置されます。

count.range.min Integer Service がオートスケーリングを利用する場合の最小タスク数。

count.range.max Integer Service がオートスケーリングを利用する場合の最大タスク数。

count.range.spot_from Integer Service の何個目のタスクから Fargate Spot キャパシティプロバイダーを利用するか。

count.cooldown Map 指定されたすべてのオートスケーリングフィールドのデフォルトクールダウンとして使用されるクールダウンスケーリングフィールド。

count.cooldown.in Duration Service をスケールアップするためのオートスケーリングのクールダウン時間。

count.cooldown.out Duration Service をスケールダウンさせるためのオートスケーリングクールダウン時間。

cpu_percentagememory_percentagerequests および response_time のオプションは、オートスケーリングに関する count フィールドにて、フィールド値としてあるいはフィールド値とクールダウン設定に関する詳細情報を含むマップとして定義することができます。

value: 50
cooldown:
  in: 30s
  out: 60s
ここで指定したクールダウン設定は、デフォルトのクールダウン設定より優先されます。

count.cpu_percentage Integer or Map Service が保つべき平均 CPU 使用率を指定し、それによってスケールアップ・ダウンします。

count.memory_percentage Integer Service が保つべき平均メモリ使用率を指定し、それによってスケールアップ・ダウンします。

count.requests Integer タスク当たりのリクエスト数を指定し、それによってスケールアップ・ダウンします。

count.response_time Duration Service の平均レスポンスタイムを指定し、それによってスケールアップ・ダウンします。

exec Boolean
コンテナ内部でのインタラクティブなコマンド実行機能を有効化します。デフォルト値は false です。$ copilot svc exec コマンドの利用には、この値に true を指定しておく必要があります。

deployment Map
deployment セクションには、デプロイ中に実行されるタスクの数や、タスクの停止と開始の順序を制御するためのパラメータが含まれています。

deployment.rolling String
ローリングデプロイ戦略。有効な値は以下の通りです。

  • "default": 古いタスクを停止する前に、更新されたタスク定義で必要な数だけ新しいタスクを作成します。内部的には、minimumHealthyPercent を 100 に、maximumPercent を 200 に設定することになります。
  • "recreate": 実行中のタスクをすべて停止し、新しいタスクを起動します。内部的には、minimumHealthyPercent を 0 に、maximumPercent を 100 に設定します。

deployment.rollback_alarms 文字列またはマップの配列

Info

デプロイの開始時にアラームが「In alarm」状態にある場合、Amazon ECS はそのデプロイの間、アラームを監視しません。詳細については、こちらのドキュメントをお読みください。

文字列のリストとして、デプロイのロールバックを引き起こす可能性のある、Service に関連付ける既存の CloudWatch アラームの名前を指定します。

deployment:
  rollback_alarms: ["MyAlarm-ELB-4xx", "MyAlarm-ELB-5xx"]
マップとして、Copilot が作成したアラームのアラーム メトリックとしきい値 利用可能なメトリクス:

deployment:
  rollback_alarms:
    cpu_utilization: 70    // Percentage value at or above which alarm is triggered.
    memory_utilization: 50 // Percentage value at or above which alarm is triggered.

entrypoint String or Array of Strings
コンテナイメージのデフォルトエントリポイントをオーバーライドします。

# 文字列による指定。
entrypoint: "/bin/entrypoint --p1 --p2"
# あるいは文字列配列による指定も可能。
entrypoint: ["/bin/entrypoint", "--p1", "--p2"]

command String or Array of Strings
コンテナイメージのデフォルトコマンドをオーバーライドします。

# 文字列による指定。
command: ps au
# あるいは文字列配列による指定も可能。
command: ["ps", "au"]

network Map
network セクションは VPC 内の AWS リソースに接続するための設定です。

network.connect Bool or Map
Service に対し Service Connect を有効にします。Service 間のトラフィックを負荷分散し、より弾力的にします。デフォルトは false です。

Map として利用すると、Service で利用するエイリアスを指定出来ます。エイリアスは Environment 内でユニークである必要があります。

network.connect.alias String
Service Connect 経由で公開する Service のカスタム DNS 名です。デフォルトは Service 名です。

network.vpc Map
タスクを配置するサブネットとアタッチされるセキュリティグループの設定です。

network.vpc.placement String or Map
String として利用する場合、public あるいは private のどちらかを指定します。デフォルトではタスクはパブリックサブネットに配置されます。

Info

Copilot が生成した VPC を利用して private サブネットにタスクを配置する場合、Copilot は Environment にインターネット接続用の NAT ゲートウェイを作成します。(価格はこちら。)あるいは copilot env init コマンドで既存の VPC をインポートして利用することや、分離されたワークロード用に VPC エンドポイントが構成された VPC を構成ができます。詳細は、custom environment resourcesを確認してください。

Map として利用する場合、 Copilot が ECS タスクを起動するサブネットを指定します。例:

network:
  vpc:
    placement:
      subnets: ["SubnetID1", "SubnetID2"]

network.vpc.placement.subnets Array of Strings or Map
String のリストとする場合、Copilot が ECS タスクを起動するサブネット ID を指定します。

Map の場合、サブネットをフィルタリングするための名前と値のペアを指定します。フィルタは AND で結合され、各フィルタの値は OR で結合されることに注意してください。例えば、タグセット org: bitype: public を持つサブネットと、タグセット org: bitype: private を持つサブネットの両方は、以下の方法でマッチングされることになります。

network:
  vpc:
    placement:
      subnets:
        from_tags:
          org: bi
          type:
            - public
            - private

network.vpc.placement.subnetsfrom_tags Map of String and String or Array of Strings
Copilot が ECS タスクを起動するサブネットをフィルタリングするためのタグセット。

network.vpc.security_groups Array of Strings or Map
タスクに関連する追加のセキュリティグループ ID。

network:
  vpc:
    security_groups: [sg-0001, sg-0002]
Copilot にはセキュリティグループが含まれており、Environment 内のコンテナ同士が通信できるようになっています。デフォルトのセキュリティグループを無効にするには、Map 形式で以下のように指定します。
network:
  vpc:
    security_groups:
      deny_default: true
      groups: [sg-0001, sg-0002]

network.vpc.security_groups.from_cfn String
CloudFormation スタックエクスポートの名称。

network.vpc.security_groups.deny_default Boolean
Environment 内のすべての Service からの侵入を許可するデフォルトのセキュリティグループを無効化します。

network.vpc.security_groups.groups Array of Strings
タスクに関連する追加のセキュリティグループ ID。

network.vpc.security_groups.groupsfrom_cfn String
CloudFormation スタックエクスポートの名称。

variables Map
Copilot は Service 名などを常に環境変数としてタスクに対して渡します。本フィールドではそれら以外に追加で渡したい環境変数をキーバーリューのペアで指定します。

variables.from_cfn String
CloudFormation スタックエクスポートの名称。

env_file String
ワークスペースのルートから、メインコンテナに引き渡す環境変数を含むファイルへのパスを指定します。環境変数ファイルの詳細については、環境変数ファイルの指定に関する考慮事項を参照してください。

secrets Map
AWS Systems Manager (SSM) パラメータストアまたは AWS Secrets Managerから環境変数として、Service に安全に渡される秘密値を表すキー・値ペアを指定します。

secrets.from_cfn String
CloudFormation スタックエクスポートの名称。

storage Map
storage セクションでは、コンテナやサイドカーでマウントしたい EFS ボリュームを指定できます。これにより、リージョン内のアベイラビリティゾーンにまたがって永続化ストレージへのアクセスが必要となるデータ処理や CMS のようなワークロードの実行が可能となります。詳細はストレージページもご覧ください。また、タスクレベルのエフェメラルストレージの拡張を設定もできます。

storage.ephemeral Int タスクに割り当てたいエフェメラルストレージのサイズを GiB で指定します。デフォルトかつ最小値は 20 GiB で、最大値は 200 GiB です。20 GiB を超えるサイズを指定した場合、サイズに応じた追加の料金が発生します。

タスクのメインコンテナとサイドカーでファイルシステムを共有したい場合、例えば次のように空ボリュームを使う方法が検討できます。

storage:
  ephemeral: 100
  volumes:
    scratch:
      path: /var/data
      read_only: false

sidecars:
  mySidecar:
    image: public.ecr.aws/my-image:latest
    mount_points:
      - source_volume: scratch
        path: /var/data
        read_only: false
この例ではサイドカーとメインコンテナで共有されるボリュームとして、100 GiB のストレージがプロビジョンされます。例えば大きなサイズのデータセットを利用したい場合、あるいはディスク I/O の要求が高いワークロードにおいてサイドカーを利用して EFS からデータをコピーするような場合に有効な方法と言えます。

storage.readonly_fs Boolean コンテナのルートファイルシステムに読み取り専用でアクセス出来る様にするには、true を指定します。

storage.volumes Map
マウントしたい EFS ボリュームの名前や設定を指定します。volumes フィールドでは次のように Map を利用して指定します。

volumes:
  <volume name>:
    path: "/etc/mountpath"
    efs:
      ...

storage.volumes.<volume> Map
ボリュームの設定を指定します。

storage.volumes.<volume>.path String
必須設定項目です。ボリュームをマウントするコンテナ内のパスを指定します。指定する値は242文字未満かつ a-zA-Z0-9.-_/ の文字種である必要があります。

storage.volumes.<volume>.read_only Boolean
任意設定項目で、デフォルト値は true です。ボリュームを読み取り専用とするかどうかを指定します。false に設定した場合、コンテナにファイルシステムへの elasticfilesystem:ClientWrite 権限が付与され、それによりボリュームへ書き込めるようになります。

storage.volumes.<volume>.efs Boolean or Map
詳細な EFS 設定を指定します。Boolean 値による指定、あるいは uidgid サブフィールドのみを指定した場合に、EFS ファイルシステムと Service 専用の EFS アクセスポイントが作成されます。

// Boolean 値を指定する場合
efs: true

// POSIX uid/gid を指定する場合
efs:
  uid: 10000
  gid: 110000

storage.volumes.<volume>.efs.id String
必須設定項目です。マウントする EFS ファイルシステムの ID を指定します。

storage.volumes.<volume>.efs.id.from_cfn String v1.30.0 にて追加
CloudFormation スタック出力値のエクスポートの名前を指定します。

storage.volumes.<volume>.efs.root_dir String 任意設定項目で、デフォルト値は / です。EFS ファイルシステム内のどのパスをマウントするボリュームのルートとするのかを指定します。指定する値は 255 文字未満かつ a-zA-Z0-9.-_/ の文字種である必要があります。EFS アクセスポイントを利用する場合、本設定値に空もしくは / を指定し、かつ auth.iam の設定値が true となっている必要があります。

storage.volumes.<volume>.efs.uid Uint32 任意設定項目で、gid とともに指定する必要があります。また、root_dirauthid とともに指定することはできません. Copilot 管理の EFS ファイルシステムに対する EFS アクセスポイントを作成する際の POSIX UID として利用されます。

storage.volumes.<volume>.efs.gid Uint32 任意設定項目で、uid とともに指定する必要があります。また、root_dirauthid とともに指定することはできません. Copilot 管理の EFS ファイルシステムに対する EFS アクセスポイントを作成する際の POSIX GID として利用されます。

storage.volumes.<volume>.efs.auth Map
EFS に関連する認可設定を指定します。

storage.volumes.<volume>.efs.auth.iam Boolean
任意設定項目で、デフォルトは true です。EFS リソースへのアクセスに IAM による認可を利用するかどうかを指定します。

storage.volumes.<volume>.efs.auth.access_point_id String
任意設定項目で、デフォルトは "" です。利用する EFS アクセスポイントの ID を指定します。EFS アクセスポイントを利用する場合、root_dir の設定値に空もしくは / を指定しており、かつ本設定値が true となっている必要があります。

publish Map
publish セクションを使用すると、サービスは 1 つまたは複数の SNS トピックにメッセージをパブリッシュできます。

publish:
  topics:
    - name: orderEvents

上記の例では、この Manifest は、Copilot の Environment にデプロイされた他の Worker Service がサブスクライブできる orderEvents という名前の SNS トピックを定義しています。COPILOT_SNS_TOPIC_ARNS という名前の環境変数が、JSON 文字列としてワークロードに設定されます。

JavaScriptでは、次のように記述できます。

const {orderEvents} = JSON.parse(process.env.COPILOT_SNS_TOPIC_ARNS)
詳しくは、パブリッシュ / サブスクライブのページをご覧ください。

publish.topics Array of topics
topic オブジェクトのリスト。

publish.topics.topic Map
1 つの SNS トピックの設定を保持します。

publish.topics.topic.name String 必須項目。SNS トピックの名前です。大文字、小文字、数字、ハイフン、アンダースコアのみを含む必要があります。

publish.topics.topic.fifo Boolean or Map FIFO (first in, first out) SNS トピック設定。 true と指定した場合、 Copilot は FIFO でトピックを作成します。

publish:
  topics:
    - name: mytopic
      fifo: true

また, SNS FIFO トピックの高度な設定も可能です。

publish:
  topics:
    - name: mytopic
      fifo:
        content_based_deduplication: true

publish.topics.topic.fifo.content_based_deduplication Boolean パブリッシュされたメッセージごとにメッセージ本文が一意であることが保証されている場合、SNS FIFO トピックの重複排除を有効化できます。

logging Map
logging セクションには、ログ設定を含みます。このセクションでは、コンテナの FireLens ログドライバ用のパラメータを設定できます。(設定例はこちら)

logging.retention Integer
任意項目。 ログイベントを保持する日数。設定可能な値については、こちらを確認してください。省略した場合、デフォルトの 30 が設定されます。

logging.image Map
任意項目。使用する Fluent Bit のイメージ。デフォルト値は public.ecr.aws/aws-observability/aws-for-fluent-bit:stable

logging.destination Map
任意項目。FireLens ログドライバーにログを送信するときの設定。

logging.enableMetadata Map
任意項目。ログに ECS メタデータを含めるかどうか。デフォルトは true

logging.secretOptions Map
任意項目。ログの設定に渡す秘密情報です。

logging.configFilePath Map
任意項目。カスタムの Fluent Bit イメージ内の設定ファイルのフルパス。

logging.env_file String
ロギングサイドカーコンテナに設定する環境変数を含むファイルのワークスペースのルートからのパス。環境変数ファイルに関する詳細については、環境変数ファイルの指定に関する考慮事項を確認してください。

observability Map
observability セクションは、Service の現在の状態を測定する方法を設定することができます。現在のところ、トレース設定のみサポートされています。

詳細については、observability のページを参照してください。

observability.tracing String
トレースに使用するベンダー。現在、awsxray のみサポートしています。

taskdef_overrides Array of Rules
taskdef_overrides セクションでは、ECS のタスク定義のオーバーライドルールを適用できます (例はこちら)。

taskdef_overrides.path String 必須設定項目です。オーバーライドするタスク定義のフィールドのパス。

taskdef_overrides.value Any 必須設定項目です。オーバーライドするタスク定義のフィールドの値。

environments Map
environments セクションでは、Manifest 内の任意の設定値を Environment ごとにオーバーライドできます。上部記載の Manifest 例では count パラメータをオーバーライドすることで 'prod' Environment で実行されるタスク数を 2 に設定し、'staging' Environment で実行される Fargate Spot capacity によるタスク数を 2 に設定します。