10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ECS Fargateにてcronが実行できない事象を解消する

Last updated at Posted at 2024-10-31

この記事の対象とする方

コンテナにてcronサービスを起動しており、ECS on EC2では起動していたがFargateにすると起動しなくなる事象に遭遇している方。

エラー内容

AWS-SDK等でIAM ロール(タスクロール)の認証情報を取得しようとしたタイミングで以下のようなエラーが出力される。(Cloudwatch Logsに出力されるように設定していればそこを見に行く)

Error retrieving credentials from the instance profile metadata service. 
(cURL error 7: Failed to connect to 169.254.169.254 port 80 after 0 ms: Couldn't connect to server (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)
for http://169.254.169.254/latest/meta-data/iam/security-credentials/

エラー原因

上記に記載の通り、
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
の環境変数がcronのサービス起動時に取得できていない。

この環境変数が取得できないためEC2用の

http://169.254.169.254/latest/meta-data/iam/security-credentials/

にリクエストを送ってしまっている。

対応方法

cronの環境変数に AWS_CONTAINER_CREDENTIALS_RELATIVE_URI を読み込ませる。

コード例

export-env
というファイルを作成し、以下のように記述する。

# docker-entrypoint.sh にて sed で置換する。
export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=aws_container_credentials_relative_uri

Dockerfile にて コンテナ内にコピーする。

COPY ./export-env /usr/local/etc/export-env

docker-entrypoint.sh など起動時に、 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI の環境変数に設定されている内容を export-env のファイルに書き込む。

# cronにて読み込ませるための環境変数をexport-envに設定
sed -i "s@aws_container_credentials_relative_uri@$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI@g" /usr/local/etc/export-env

crontab など cron設定ファイルにて source /usr/local/etc/export-env で AWS_CONTAINER_CREDENTIALS_RELATIVE_URI の環境変数を設定する。

# source /usr/local/etc/export-env で 環境変数を読み込んだ後にcron実行したいコマンドを記載する
* * * * * source /usr/local/etc/export-env && /usr/local/bin/php /var/www/html/artisan inspire > /tmp/stdout 2>&1

参考資料

10
5
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
10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?