docker コンテナで crond を使い aws cli を定期的に実行する

docker-compose で起動させたコンテナ上で定期的に
aws cli を実行させたかったので試してみました。

ファイル構成

$ ls
Dockerfile  crontab  docker-compose.yml

Dockerfile

定期的な処理には busybox crond を使います。
update-ca-certificates しているのは
curlcurl: (60) SSL certificate problem: unable to get local issuer certificate エラーを解決するためです。

docker-compose.yml

aws cli の実行結果を保存するためにホストマシンの ./work
コンテナの /aws にマウントします。
aws cli環境変数もここで設定します。

crontab

1 分毎に aws cli を実行し、マウントしたディレクトリに結果を出力してみます。

コンテナを起動してみる

ちゃんと処理できてます。
後で知ったのですが、mattbanner/aws-cli-cron というイメージも既にあるみたいです。

$ docker-compose up -d --no-deps --build
$ docker-compose logs -f
Attaching to cronaws_cron-aws_1
cron-aws_1  | crond: crond (busybox 1.30.1) started, log level 8
cron-aws_1  | crond: USER root pid   7 cmd aws s3 ls >> /aws/log
cron-aws_1  | crond: USER root pid  13 cmd aws s3 ls >> /aws/log
$ docker-compose down
$ cat work/log 
2021-04-20 10:00:01 fugafuga-bucket-1
2021-04-20 10:00:01 fugafuga-bucket-1

参考にさせていただいたサイト