最低限の設定でFargateでタスクを定期実行させて雰囲気を掴んでみる
バッチ処理を行うときの選択肢の一つとして、AWS Fargateでタスクを定期実行させる、というのがあると思います。
今回は、コンソール画面でFargateを作成しタスクを定期実行させる環境を作っていきます。
簡略化のため
・インフラのコード化はしない
・CI/CD環境はなくデプロイはコンソール画面から手動
・ECRは使用せずDocker Hubのイメージを使う
・VPCは既に作成済み
とします
Fargate作成
ネットワーキングのみを選択
- クラスター名
test-cluster
- VPCの作成
今回は既にあるものを使うので不要 - Tags
お好みで。今回は無し - CloudWatch Container Insights
お好みで。今回は無し
タスク定義作成
FARAGTEを選択
- タスク定義名
test-task-definision
- タスクロール
タスクが別のAWSリソースにアクセスする必要がある場合は設定してください。
例えばタスクからRDSへ繋ぐよ、と言った。
今回は無し - ネットワークモード
awsvpc(固定) - タスク実行ロール
タスクロールとは違い、Fargateエージェントに持たせることになるロールです。
ECRへのアクセスやCloudWatchへのアクセスへの権限になります。
デフォルトでecsTaskExcutionRole
があるので特にカスタマイズする必要がない場合はこちらを使うで良いと思います。 - タスクサイズ
お好みで。
今回はどちらも最低の値を設定 - コンテナ定義
別途下記 - App Mesh 統合の有効化, プロキシ設定, ログルーターの統合, ボリューム, Tags
お好みで。今回は無し
コンテナ定義
最低限設定するものだけ書いていきます。
- コンテナ名
test
- イメージ
基本的にECRのリポジトリを使うことになると思います。
今回は簡略化のためDocker Hubにあるaws-cliを使うことにしてみます。
https://hub.docker.com/r/amazon/aws-cli - 環境 コマンド
コンテナの起動時のコマンドを設定することができます。
実行を確認するために--version
を設定 - ストレージとログ
タスク実行時のログをCloudWatchへ書き出すことができます。
Auto-configure CloudWatch Logsを有効にし、
awslogs-group, awslogs-region, awslogs-streamはデフォルトのものを使用します。
/ecs/test-task-definision
へログが書き出されるので、そこを見てコンテナが起動されたかをみます。
タスクを実行させる
タスクを実行させます。
タスク定義のアクションからタスクの実行をします。
- 起動タイプ
FARGATE - プラットフォームのバージョン
LATEST - クラスター
test-cluster
- タスクの数
1
- タスククループ
無し - VPC とセキュリティグループ
お手持ちのVPCを。 - パブリック IP の自動割り当て
[自動割り当てパブリック IP] で、タスクがパブリック IP アドレスを受け取るかどうかを選択します。Fargate タスクを使用している場合、タスクがコンテナイメージをプルするには、パブリックサブネットを使用し、パブリック IP アドレス、またはインターネットへのルートを持つプライベートサブネット、またはインターネットへのリクエストをルーティングできる NAT ゲートウェイを割り当てる必要があります。
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/service-configure-network.html
今回はパブリックなサブネットを使用し、パブリックIPの自動割り当てをENABLED
に。
実行
CludWatchのログを見て成功を確認
タスクを定期実行させる
CloudWatchのイベントから定期実行のためのルールを作成します
ひとまずCron式で30分ごとに起動するように設定してみます。
- スケジュール
- Cron式
0/30 * * * ? *
- ターゲット
ECSタスク - クラスター
test-cluster
- タスク定義
test-task-definision
- 起動タイプ
FARGATE - タスクグループ
無し
プラットフォームのバージョン
LATEST
- タスク定義リビジョンの設定
最新
ちなみにここで最新にしておくと、実行時に常に最新のリビジョンで実行させることができます。
イベントルール設定時点での最新という意味ではなく、イベントルール設定後にタスク定義に更新を加えても自動で最新のものを実行してくれます。 - タスクカウントの設定
カウント1 - ネットワーク構成の設定
先ほどのタスク実行の時と同じ
ロールはecsEventsRole
というのがデフォルトであるのでそれを使います。
- 名前
test-rule
これで設定完了です。
ログで時間通り実行されているのを確認
Discussion