概要
- EC2上で動かしてたバッチスクリプトをコンテナへ移植するにあたり、そのバッチ処理の結果をEC2上に保管する処理をS3へアップロードする処理へ変更するために試してみたことのメモ。
- Docker に aws cli を入れて、コンテナ内から aws s3 cp コマンドを実行してコンテナ内のファイルをS3へアップロードする。
前提
- Fargate と S3 は同じAWSアカウントの東京リージョンにある
設定
バッチの結果を保存するS3バケットを作成
-
バケット名
任意。今回は世界でユニークなものにするため、末尾にこのS3のAWSアカウントIDを付けている。 -
log-infra-batch-AWSアカウントID
-
フォルダ(プレフィックス)作成
S3バケット 「log-infra-batch-AWSアカウントID」 に様々なバッチの結果を保存する予定。
今回は terraform-plan の実行結果を保存するプレフィックスを作成する。 -
terraform-plan
コンテナからS3へファイルをアップロードする権限をもったIAMロール、IAMポリシーを作成
- IAMポリシーを作成
- ポリシー名:s3-log-infra-batch
- JSON
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "20190629s3loginfrabatch",
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::log-infra-batch-AWSアカウントID/*"
}
]
}
- IAMロール作成
- ロール名:s3-log-infra-batch
- 信頼されたエンティティの種類:Elastic Container Service の Elastic Container Service Task
- ロールにアタッチするポリシー:s3-log-infra-batch
Dockerfile
-
概要
-
軽量のAlpine Linux に awscli をインストール
-
コンテナ内で test.txt を作成
-
aws s3 コマンドで test.txt を S3 バケットへアップロード
-
Dockerfileの内容
FROM python:3.7-alpine
RUN pip3 install awscli
RUN echo "test" > /test.txt
CMD aws s3 cp test.txt s3://log-infra-batch-AWSアカウントID/terraform-plan/
Dockerfile をビルドしてDockerイメージをECRへプッシュ
Fargate タスク定義 作成
-
参照