-
概要 ECS Taskを定期実行したい要件があり、それをただ実行するならEventBridgeからcronのように呼び出すことになる。 しかし、ECS Taskそのものにはリトライ処理が無く、EventBridgeだけだと複数のジョブの処理などに限界があったので、今回はStepFunctionsを検証した。その辺りをざっくりまとめる。 なお、今回はAWSコンソールの作業のみでIaCは検証のため無し。 EventBridgeのリトライ処理について EventBridgeでもリトライ処理はできるが、意図したエラーハンドリングが出来ない可能性がある。 例えば、ECS Taskでアプリが例外を吐いてもリトライされない。 おそらくECS Taskそのものが起動しないなどのエラーだけをリトライ処理できると思われるので、何をトリガーにリトライ処理をしたいかは確認しておく必要がある。 アプリのエラーについては素直にStepFunctionsを使うと良さそう。 下記の記事で詳しく記載されていた。 ちなみに自分の場合、FargateのECS Taskでも同様だったので、EventBridge自体の制約だと思われる。 [AWS] EventBridge Rules による ECS Scheduled Task はエラー時リトライできない 要件 自分で作成したコンテナイメージを使いたい コンテナイメージにコマンドを上書きして、実行させたい(イメージを共通化) リトライ処理したい 定期実行したい コンテナイメージ 今回はシンプルにこんなコードを用意した。 コードの良し悪しはさておき、引数を取って、各関数を実行させられるかの確認。 <?php function main(){ global $argc; global $argv; print("start: run php test function\n"); if ($argc != 2){ print("info: please set argument\n"); return; } $argval = $argv[1]; print($argval()); } function example_1(){ print("result: exmaple 1\n"); } function example_2(){ print("Created
Mon, 20 Feb 2023 13:53:37 +0000 -
想定する環境 ECS Fargate ALB配下にコンテナを配置して、NAT Gateway経由でインターネットへ出ていく。 パターン1. ロググループが無い エラー内容 CannotStartContainerError: Error response from daemon: failed to initialize logging driver: failed to create Cloudwatch log stream: ResourceNotFoundException: The specified log group does not exist. status code: 400, request id: 状況詳細 コンテナ自体起動しないで、起動を何度も試みている状態。 解決方法 CloudWatchLogsで自分でタスク定義で指定したロググループを作成する。 パターン2. コンテナは起動するが503などのエラーを返す エラー内容 503 Service Temporarily Unavailable 状況詳細 CloudWatchLogsを見ると、アプリケーションは起動している様子。 しかしながら、ALBでunhelthyになっている。 解決方法 データベースへ接続するアプリケーションだった場合に、データベースへ接続できていない場合。 セキュリティグループで接続が許可されていない。 パターン3. コンテナも起動するし、サイトにもアクセスできるが途中からアクセスできなくなる。 エラー内容 503 Service Temporarily Unavailable または、 504 Gateway Time-out 状況詳細Created
Wed, 12 Feb 2020 15:00:51 +0000 -
概要 夏頃、AWS FargateとEKS祭りに参加してきた。 Fargateが東京リージョンにもやってきたので、そのためだ。 会社のチーム内でもAWS Fargateの機運が高まり、頑張って検証をしたので、まずはTerraformで構築する簡単なものを記録しておく。 なお、基本的には下記Terraformのドキュメントを参考にしている。 https://www.terraform.io/docs/providers/aws/r/ecr_repository.html <a href=“https://www.terraform.io/docs/providers/aws/r/ecs_cluster.html” rel=“noopener noreferrer” target="_blank">https://www.terraform.io/docs/providers/aws/r/ecs_cluster.html https://www.terraform.io/docs/providers/aws/r/ecs_service.html https://www.terraform.io/docs/providers/aws/r/ecs_task_definition.html 構成 PrivateサブネットにFargateを設置する。 コンテナにグローバルIPを付与することもできるが、EIPをつけずALBにぶら下げる場合はNAT Gateway経由でインターネットに接続するようなサブネット構成にすることになると思う。でないとイメージをpullできない!(ここでまずハマった) 今回はALBにぶら下げるようにする。 ALB 先にコンテナをぶら下げるALBを作成しておく。(グローバルIPを振る場合は不要) SSL証明書の設定(ACM)等は自分の環境にあわせて修正する。 下記ではACMで取得した証明書を指定して、443へリダイレクトするようにしている。 resource "aws_lb" "staging-inamuu" { name = "staging-inamuu" internal = false load_balancer_type = "application" security_groups = ["${aws_security_group.staging-inamuu-alb.id}"] subnets = ["${aws_subnet.staging-public-1a.id}"] enable_deletion_protection = true tags { Env = "staging" } } resource "aws_lb_target_group" "staging-inamuu" { name = "staging-inamuu-lb-tg" port = 80 protocol = "HTTP" vpc_id = "${aws_vpc.staging-inamuu-vpc.id}" target_type = "