Amazon ECS FargateでS3から環境変数読み込むときの注意点

S3に保存するときのファイルの拡張子は .env であること .env 以外でやろうとするとTaskDefinitionの作成時に An invalid environment file extension was used. Specify a valid .env file and try again. というエラーを見ることになる プラットフォームバージョンは 1.4.0 以上であること AWSのECS FargateでプラットフォームバージョンをLATESTにしたときの挙動がLATESTぽくない気がする S3から環境変数を読み込む機能を利用できるのが1.4.0からなんだけどLATESTだと使えなくて明示的に1.4.0にすると使えたからLATESTにしたときに古いバージョンが利用されているのではないか? — 煩悩 (@ast839) November 5, 2020 これは注意点と言うよりもおかしな挙動をしてるんじゃないかってことなんだけど. 公式のマニュアルには When specifying a platform version, you can use either a specific version number, for example 1.4.0, or LATEST (which uses the 1.4.0 platform version). と書いてあるので LATEST でも大丈夫なはずなんだけど実際にやってみたら One or more of the requested capabilities are not supported....

<span title='2020-11-06 07:49:35 +0900 +0900'>11月 6, 2020</span>

ECSでSQSのAPIを叩くときハマった

golangでSQSのqueueの一覧を取得しようとしたときこんなふうに書くことができる. package main import ( "fmt" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/sqs" ) func main() { c := &aws.Config{ Region: aws.String("ap-northeast-1"), } svc := sqs.New(session.Must(session.NewSession(c))) list, err := svc.ListQueues(&sqs.ListQueuesInput{}) if err != nil { panic(err) } fmt.Println(list.String()) } このように書いた場合 github.com/aws/aws-sdk-go/aws/credentials とか github.com/aws/aws-sdk-go/aws/stscredes とかを利用していない. つまり利用されるawsのアクセス権限の元になる情報は ~/.aws 以下に設定された情報だったり ECSの場合はtaskRoleARNに設定された情報となる. 私が上記の実装をした上でdocker containerをビルドして実行したときハマったことを書こうと思う. ECSは標準出力の内容をcloud watch logsに出力することができる. 上記の実装を実行したと気次のようなエラーが出力された. For verbose messaging see aws.Config.CredentialsChainVerboseErrors panic: NoCredentialProviders: no valid providers in chain. Deprecated. はじめはtask roleにsqsのアクセス権限を忘れたことによって発生していた問題かと思ったが違った. ECS上でコンテナを動かしたとき特に何もしない場合はtask roleで設定した情報を元に権限が設定される. 実際のところ裏側ではAWS SDK側で 169.254.170.2 にアクセスしてメタ情報からクレデンシャル情報を引っ張ってくる....

<span title='2018-10-25 00:00:00 +0000 UTC'>10月 25, 2018</span>