Scheduled Job

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

レポートを作成する cron ジョブのサンプル Manifest
    # Service 名はロググループや ECS タスクなどのリソースの命名に利用されます。
    name: report-generator
    type: Scheduled Job

    on:
      schedule: "@daily"
    cpu: 256
    memory: 512
    retries: 3
    timeout: 1h

    image:
      # Service で利用する Dockerfileへのパス.
      build: ./Dockerfile

    variables:
      LOG_LEVEL: info
    env_file: log.env
    secrets:
      GITHUB_TOKEN: GITHUB_TOKEN

    # 上記すべての値は Environment ごとにオーバーライド可能です。
    environments:
      prod:
        cpu: 2048               # prod Enviroment では 大きな CPU 値。
        memory: 4096

name String
Job 名。

type String
Job のアーキテクチャタイプ。 現在、Copilot は定期的にもしくは固定したスケジュールでトリガーされるタスクである "Scheduled Job" タイプのみをサポートしています。

on Map
Job をトリガーするイベントの設定。

on.schedule String
定期的に Job をトリガーする頻度を指定できます。 サポートする頻度は:

頻度 以下と同一 UTC を用いた可読表記による実行タイミング
"@yearly" "cron(0 * * * ? *)" 1 月 1 日の午前 0 時
"@monthly" "cron(0 0 1 * ? *)" 毎月 1 日の午前 0 時
"@weekly" "cron(0 0 ? * 1 *)" 毎週日曜日の午前 0 時
"@daily" "cron(0 0 * * ? *)" 毎日午前 0 時
"@hourly" "cron(0 * * * ? *)" 毎時 0 分
  • "@every {duration}" (例: "1m", "5m")
  • "rate({duration})" CloudWatch のrate 式 の形式

特定の時間に Job をトリガーしたい場合、cron でスケジュールを指定できます。

最後に、例えば schedule フィールドを none に設定することで、Job がトリガーされないようにすることができます。

on:
  schedule: "none"

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 コンテナが正常に完了してから起動します。

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"]

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

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

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

生成された文字列を上書きして、有効な異なる osfamilyarchitecture を明示的に指定してビルドすることができます。例えば Windows ユーザーの場合は、

platform: windows/x86_64
とするとデフォルトは WINDOWS_SERVER_2019_CORE が利用されますが、 Map を使って以下のように指定できます:
platform:
  osfamily: windows_server_2019_full
  architecture: x86_64

retries Integer
Job が失敗するまでにリトライする回数。

timeout Duration
Job の実行時間。この時間を超えた場合、Job は停止されて失敗となります。単位には h, m, sが利用できます。

network Map
network セクションは VPC 内の AWS リソースに接続するためのパラメータを持ちます。

network.vpc Map
タスクにアタッチするサブネットとセキュリティグループ。

network.vpc.placement String
'public''private'のいずれかである必要があります。デフォルトではタスクはパブリックサブネットで起動します。

Info

Copilot が作成した VPC の 'private' サブネットを利用してタスクを実行する場合、Copilot は Environment に NAT ゲートウェイを追加します。あるいは Copilot 外で作成した VPC を copilot env init コマンドにてインポートしている場合は、その VPC に NAT ゲートウェイがあり、プライベートサブネットからインターネットへの接続性があることを確認してください。

network.vpc.security_groups Array of Strings
タスクに関連づける追加のセキュリティグループのリスト。Copilot は常にセキュリティグループを含んでおり、環境内のコンテナは互いに通信できるようになっています。

variables Map
Job に環境変数として渡される key-value ペア。Copilot ではデフォルトでいくつかの環境変数が含まれています。

secrets Map
AWS Systems Manager パラメータストア から環境変数として Job に安全に渡される key-value ペア。

storage Map
Storage セクションではコンテナとサイドカーからマウントする外部の EFS ボリュームを指定します。これにより、データ処理や CMS のワークロードのために、リージョン内で永続ストレージへアクセスできるようになります。より詳しくは ストレージ のページを確認してください。

storage.volumes Map
アタッチする EFS ボリュームの名前と設定を指定します。volumes フィールドは次の形式の Map として指定されます:

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

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

volume.path String
必須項目。コンテナ内でボリュームをマウントしたい場所を指定します。利用できる文字は a-zA-Z0-9.-_/ のみで、 242 文字未満である必要があります。

volume.read_only Bool
任意項目。デフォルトでは true です。ボリュームが読み込み専用か否かを定義します。 false の場合、コンテナにファイルシステムへの elasticfilesystem:ClientWrite 権限が付与され、ボリュームは書き込み可能になります。

volume.efs Map
より詳細な EFS の設定。

volume.efs.id String
必須項目。マウントするファイルシステムの ID 。

volume.efs.root_dir String
任意項目。デフォルトは / です。ボリュームのルートとして使用する EFS ファイルシステム内の場所を指定します。利用できる文字は a-zA-Z0-9.-_/ のみで、 255 文字未満である必要があります。アクセスポイントを利用する場合、root_dir は空か / であり、auth.iamtrue である必要があります。

volume.efs.auth Map
EFS の高度な認可の設定を指定します。

volume.efs.auth.iam Bool
任意項目。デフォルトは true です。volume の EFS への接続の可否の判定に IAM を利用するかしないかを設定します。

volume.efs.auth.access_point_id String
任意項目。デフォルトでは "" が設定されます。接続する EFS アクセスポイントの ID です。アクセスポイントを利用する場合、root_dir は空か / であり、auth.iamtrue である必要があります。

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

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 イメージ内の設定ファイルのフルパス。

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 トピックの設定を保持します。

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

environments Map
environments セクションは Environment の設定を Manifest で指定した値によって上書きできるようにします。 上記の例の Manifest では、 CPU のパラメータを上書きしているので production のコンテナはよりパフォーマンスが高くなります。