コマンドラインからサーバーレスコンテナをクラウドにデプロイする
fargate は、 AWS Fargate にコンテナをデプロイするためのコマンドライン インターフェイスです。 fargate を使用すると、開発者はアプリケーション (イメージと環境変数) のデプロイ、デプロイの監視、コンテナ ログの表示、再起動とスケーリングなどの Fargate サービスを簡単に操作できます。
最新の安定した CLI は、curl ユーティリティ スクリプトを使用するか、リリース ページからバイナリをダウンロードしてインストールできます。インストールすると、 fargate
コマンドが表示されます。
curl -s get-fargate.turnerlabs.io | sh
最新のプレリリースをインストールする場合は、次のコマンドを使用します。
curl -s get-fargate.turnerlabs.io | RELEASE=develop sh
デフォルトでは、Fargate は AWS Fargate が利用できる単一リージョンであるus-east-1を使用します。 CLI は、将来の使用のために --region パラメータを受け入れ、 AWS_REGIONおよびAWS_DEFAULT_REGION環境設定を尊重します。必要なサービスがすべて利用できないリージョンを指定すると、エラーが返されることに注意してください。
どのリージョンでどのサービスが利用できるかの詳細については、リージョン表を参照してください。
fargate は、次の場所で認証情報を検索する AWS SDK for Go を使用して構築されています。
環境変数
共有認証情報ファイル
EC2インスタンスプロファイル
詳細については、AWS SDK for Go ドキュメントの「認証情報の指定」を参照してください。
パラメータを指定するにはいくつかの方法があります。各項目は、その下の項目より優先されます。
CLI 引数 (例: --cluster my-cluster
)
環境変数 (例: FARGATE_CLUSTER=my-cluster
)
fargate.yml
(例: 以下)
cluster : my-cluster
service : my-service
task : my-task
rule : my-event-rule
verbose : false
nocolor : true
フラグ | 短い | デフォルト | 説明 |
---|---|---|---|
- クラスタ | -c | ECSクラスター名 | |
- 地域 | 米国東部-1 | AWS リージョン | |
--色なし | 間違い | カラー出力を無効にする | |
--冗長 | -v | 間違い | 詳細な出力 |
サービスは、AWS Fargate で実行されるコンテナの長期間存続するインスタンスを管理します。何らかの理由でコンテナが終了した場合、サービス スケジューラはコンテナを再起動し、サービスで必要な数のタスクが実行されるようにします。サービスをロード バランサーと連携して使用して、サービス内のタスク間でトラフィックを分散できます。
フラグ | 短い | デフォルト | 説明 |
---|---|---|---|
- サービス | -s | ECSサービス名 |
fargate service list
リストサービス
fargate service deploy [--image <docker-image>]
新しいイメージをサービスにデプロイする
サービスで使用する Docker コンテナ イメージは、 --image フラグを介して指定できます。
fargate service deploy [--file docker-compose.yml]
Docker Compose ファイルで定義されたイメージ、環境変数、シークレットをサービスにデプロイする
docker イメージと docker compose ファイルで定義された環境変数を 1 つのユニットとして一緒にデプロイします。環境変数とシークレットは、構成ファイル内の内容に置き換えられることに注意してください。
シークレットは、 docker compose ファイル拡張子フィールドx-fargate-secrets
の下でキーと値のペアとして定義できます。拡張フィールドを使用するには、作成ファイルのバージョンが 2.x シリーズの場合は2.4
以上、3.x シリーズの場合は3.7
以上である必要があります。
これにより、 docker-compose up
ローカルで実行して、AWS で実行するのと同じ方法でアプリを実行できるようになります。 docker-compose yaml 構成は多数のオプションをサポートしていますが、fargate にデプロイされるのはイメージ変数と環境変数のみであることに注意してください。 docker compose ファイルで複数のコンテナが定義されている場合は、ラベルaws.ecs.fargate.deploy: 1
使用して、どのコンテナをデプロイするかを指定できます。例えば:
version : " 3.7 "
services :
web :
build : .
image : 1234567890.dkr.ecr.us-east-1.amazonaws.com/my-service:0.1.0
ports :
- 80:5000
environment :
FOO : bar
BAZ : bam
env_file :
- hidden.env
x-fargate-secrets :
QUX : arn:key:ssm:us-east-1:000000000000:parameter/path/to/my_parameter
labels :
aws.ecs.fargate.deploy : 1
redis :
image : redis
fargate service info
検査サービス
ロードバランサー構成、アクティブなデプロイメント、環境変数、シークレットなどのサービスの拡張情報を表示します。
デプロイメントには、実行中のサービスのアクティブなバージョンが表示されます。 CPU、メモリ、環境変数などの構成のデプロイメントまたは更新によってサービスが移行している場合、複数のデプロイメントが表示されます。
fargate service logs [--follow] [--start <time-expression>] [--end <time-expression>]
[--filter <filter-expression>] [--task <task-id>]
[--time] [--no-prefix]
サービス内のタスクのログを表示する
--follow オプションを使用して、サービス ログの特定のセグメントまたは末尾のログをリアルタイムで返します。ログには、「fargate/<service-name>/<task-id>」の形式のログ ストリーム名が接頭辞として付けられます。
Follow は、Control-C で中断されるまで実行を続け、ログを返します。 --follow を渡した場合、--end は指定できません。
--task フラグを介してタスク ID を渡すことで、サービス内の特定のタスクのログを返すことができます。複数の特定のタスクからログを取得するには、タスク ID を指定して --task を複数回渡します。
--start および --end オプションを時間式とともに渡すことで、ログの特定のウィンドウを要求できます。時間表現は期間またはタイムスタンプのいずれかになります。
--filter フラグを介してフィルター式を渡すことで、特定の用語のログをフィルターできます。単一の用語を渡すとその用語を検索し、複数の用語を渡すとすべての用語を含むログ メッセージを検索します。詳細については、CloudWatch Logs のドキュメントを参照してください。
--time は出力にログのタイムスタンプを含めます。
--no-prefix は、出力からログ ストリームのプレフィックスを除外します。
fargate service ps
サービスの実行中のタスクをリストする
fargate service scale <scale-expression>
サービス内のタスクの数をスケールする
指定されたスケール式によって、サービス内で実行する必要なタスクの数を変更します。スケール式は、絶対数か、+5 や -2 などの符号で指定されたデルタのいずれかになります。
fargate service env set [--env <key=value>] [--file <pathname>]
[--secret <key=valueFrom>] [--secret-file <pathname>]
環境変数とシークレットを設定する
--env、--file、--secret、または --secret-file フラグを使用して、少なくとも 1 つの環境変数またはシークレットを指定する必要があります。コマンドラインで各変数の前に --env を繰り返して任意の数の変数を指定することも、複数の変数をテキスト ファイルに 1 行に 1 つずつ配置して、--file や --secret-file でファイル名を指定することもできます。 。
ファイル内の各 --env および --secret パラメータ文字列または行は、「key=value」の形式である必要があり、値の先頭にリテラルの空白が必要な場合を除き、引用符や「=」の前後に空白を含めることはできません。さらに、「キー」側は正当なシェル識別子である必要があります。つまり、ASCII 文字 A ~ Z またはアンダースコアで始まり、文字、数字、アンダースコアのみで構成されている必要があります。
各 --secret フラグの「key=value」の「value」は、AWS Secrets Manager シークレットまたは AWS Systems Manager パラメータ ストア パラメータへの ARN を参照する必要があります。
fargate service env unset --key <key-name>
環境変数とシークレットの設定を解除する
--key フラグで指定された環境変数またはシークレットの設定を解除します。複数の変数の設定を解除するには、キー名を指定して --key を複数回指定します。
fargate service env list
環境変数を表示する
フラグ | 短い | デフォルト | 説明 |
---|---|---|---|
- CPU | 各タスクに割り当てる CPU ユニットの量 | ||
- メモリ | -m | 各タスクに割り当てる MiB の量 |
fargate service update [--cpu <cpu-units>] [--memory <MiB>]
サービス構成を更新する
CPU とメモリの設定は、--cpu フラグと --memory フラグを使用して、それぞれ CPU ユニットとメビバイトとして指定されます。 1024 個の CPU ユニットはそれぞれ 1 つの vCPU に相当します。 AWS Fargate は、CPU とメモリ構成の特定の組み合わせのみをサポートします。
CPU(CPUユニット) | メモリ (MiB) |
---|---|
256 | 512、1024、または 2048 |
512 | 1024 ~ 4096 (1GiB 単位) |
1024 | 2048 ~ 8192 (1GiB 単位) |
2048年 | 4096 ~ 16384 (1GiB 増分) |
4096 | 8192 ~ 30720 (1GiB 単位) |
--cpu または --memory の少なくとも 1 つを指定する必要があります。
fargate service restart
サービスを再起動する
サービスの新しいタスクのセットを作成し、以前のタスクを停止します。これは、サービスが外部ソースからキャッシュされたデータを再ロードする必要がある場合などに便利です。
フラグ | 短い | デフォルト | 説明 |
---|---|---|---|
- タスク | -t | タスク定義ファミリー |
タスクはコンテナーの 1 回限りの実行です。タスクのインスタンスは、AWS API、AWS マネジメントコンソールを通じて手動で停止するか、何らかの理由で中断されるまで実行されます。
fargate task register [--image <docker-image>]
[-e KEY=value -e KEY2=value] [--env-file dev.env]
[--secret KEY3=valueFrom] [--secret-file secrets.env]
タスク ファミリの最新リビジョンに基づいて、指定された Docker イメージ、環境変数、またはシークレットの新しいタスク定義を登録し、新しいリビジョン番号を返します。
新しいタスク定義で使用する Docker コンテナ イメージは、 --image フラグを介して指定できます。
環境変数は、1 つまたは複数の--env
フラグまたは--env-file
フラグを使用して指定できます。
シークレットは、1 つまたは複数の--secret
フラグまたは--secret-file
フラグを使用して指定できます。
fargate task register [--file docker-compose.yml]
docker compose ファイルで定義されたイメージ、環境変数、およびシークレットを使用して、新しいタスク定義を登録します。環境変数は構成ファイル内の内容に置き換えられることに注意してください。
シークレットは、 docker compose ファイル拡張子フィールドx-fargate-secrets
の下でキーと値のペアとして定義できます。拡張フィールドを使用するには、作成ファイルのバージョンが 2.x シリーズの場合は2.4
以上、3.x シリーズの場合は3.7
以上である必要があります。
docker compose ファイルで複数のコンテナが定義されている場合は、ラベルaws.ecs.fargate.deploy: 1
使用して、どのコンテナをデプロイするかを指定できます。
fargate task describe
description コマンドは、Docker Compose 形式でタスク定義を記述します。 Docker イメージ、環境変数、シークレット、およびターゲット ポートがマップされた要素です。
このコマンドは、 task register
、 service deploy
、またはservice env set
コマンドによって加えられた変更を確認するのに役立ちます。デバッグやトラブルシューティングの目的でタスク定義をローカルで実行する場合にも役立ちます。
fargate task describe -t my-app > docker-compose.yml
docker-compose up
タスク定義ファミリーを指定するには、 fargate.yml
ファイル、 FARGATE_TASK
環境変数、または-t
フラグ (オプションのリビジョン番号を含む) を使用します。
fargate task describe -t my-app
fargate task describe -t my-app:42
出力例:
version : " 3.7 "
services :
app :
image : 1234567890.dkr.ecr.us-east-1.amazonaws.com/my-app:1.0
ports :
- published : 8080
target : 8080
environment :
AWS_REGION : us-east-1
ENVIRONMENT : dev
FOO : bar
x-fargate-secrets :
KEY : arn:key:ssm:us-east-1:000000000000:parameter/path/to/my_parameter
labels :
aws.ecs.fargate.deploy : " 1 "
fargate task logs [--follow] [--start <time-expression>] [--end <time-expression>]
[--filter <filter-expression>] [--task <task-id>]
[--container-name] [--time] [--no-prefix]
タスクのログを表示する
次の規則を持つ CloudWatch ログ グループを想定します: fargate/task/<task>
ここで、 task
--task
、 fargate.yml 、または環境変数オプションで指定されます。
--follow オプションを使用して、タスク ログの特定のセグメントまたは末尾のログをリアルタイムで返します。ログにはfargate/<container-name>/<task-id>.
--container-name
と、タスク定義内でログを取得するコンテナを指定できます (デフォルトはapp
)。
Follow は、Control-C で中断されるまで実行を続け、ログを返します。 --follow
渡した場合、 --end
指定できません。
--task
フラグを介してタスク ID を渡すことで、特定のタスクのログを返すことができます。複数の特定のタスクからログを取得するには、タスク ID を指定して--task
複数回渡します。
--start
および--end
オプションを時間式とともに渡すことで、ログの特定のウィンドウを要求できます。時間表現は期間またはタイムスタンプのいずれかになります。
--filter
フラグを介してフィルター式を渡すことで、特定の用語のログをフィルターできます。単一の用語を渡すとその用語を検索し、複数の用語を渡すとすべての用語を含むログ メッセージを検索します。
--time
出力にログのタイムスタンプを含めます。
--no-prefix
出力からログ ストリームのプレフィックスを除外します。
フラグ | 短い | デフォルト | 説明 |
---|---|---|---|
- ルール | -r | CloudWatch イベント ルール |
events
コマンドは、CloudWatch イベント (スケジュールされたタスクなど) を操作するためのサブコマンドを提供します。
fargate events target --revision <revision>
ルールターゲットのEcsParameters.TaskDefinitionArn
更新することで、タスク定義リビジョンを CloudWatch イベント ルールに「デプロイ」します (次のイベントルール呼び出しで新しいバージョンが実行されます)。
典型的な CI/CD システムは次のようなことを行います。
REVISION=$(fargate task register -i 123456789.dkr.ecr.us-east-1.amazonaws.com/my-app:${VERSION}-${CIRCLE_BUILD_NUM} -e FOO=bar)
fargate events target -r ${REVISION}