0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS ECSタスクの環境変数ファイルは値を引用符で囲ってはいけない

Posted at

ECSタスクの動作がおかしい

ECSタスク中でこんな感じのコマンドを実行していました。

aws s3 syc ${S3_DIRECTORY_URL} /var/www/files

S3からファイルをダウンロードする単純なコマンドです。
ところがこんなエラーが発生します。

 aws s3 sync <LocalPath> <S3Uri> or <S3Uri> <LocalPath> or <S3Uri> <S3Uri>

ここで ${S3_DIRECTORY_URL} というのは環境変数ファイルから取得するようタスク定義で指定しています。

image.png

# .env の中身
VARIABLE1=value1
VARIABLE2=value2
S3_DIRECTORY_URL="s3://sample-bucket/download_source_dir"

確実に値は渡っているはずなのになんでエラーになるの???
念のため ecs exec で環境変数値を確認してみます。

$ aws ecs execute-command  \
    --region ap-northeast-1 \
    --cluster {ECSクラスタ名} \
    --task {ECSタスクのID} \
    --container app \
    --command "env" \   ※環境変数値を確認
    --interactive

The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.


Starting session with SessionId: ecs-execute-command-xxxxxxxxxxxxxx
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
VARIABLE1=value1
VARIABLE2=value2
S3_DIRECTORY_URL="s3://sample-bucket/download_source_dir"

やっぱ値入ってるよなあ・・・ってあれ?

なんでダブルクォート付きで出力されてんの???
もしや・・・

環境変数ファイルを次のように引用符なしに修正してみたら・・・動いた!!

# .env の中身
VARIABLE1=value1
VARIABLE2=value2
S3_DIRECTORY_URL=s3://sample-bucket/download_source_dir

ECSタスクの環境変数ファイルは値を引用符で囲ってはいけない

どうやらECSタスクが参照する環境変数ファイルは値を引用符で囲ってはいけないようです。
マニュアルにこう書いてあります。
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/use-environment-file.html

スペースまたは引用符は、Amazon ECS ファイルの値の一部として含まれます

非常に分かりにくいですが、スペースやダブルクォートも値とみなされるようです。試していないですが多分シングルクォートも同じじゃないでしょうか。
うっかり末尾にスペース入ってたりすると死ぬということですね。こういうの気づきづらいから厄介なんだよな・・・

おまけ

ローカルでは docker compose で動作確認していました。
そこでも環境変数ファイルを読みこんでいたのですが、こちらはダウブルクォートを引用符として認識してくれます。だからECSに上げるまで気づかなかったんですね。

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    env_file:
      - .env

まとめ

ECSタスク定義で環境変数ファイルを使う場合はダブルクォートは引用符として使えません。
末尾スペースも削除しましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?