LoginSignup
20
23

More than 3 years have passed since last update.

Fargateで起動したコンテナからS3へファイルをアップロードする

Last updated at Posted at 2019-06-29

概要

  • EC2上で動かしてたバッチスクリプトをコンテナへ移植するにあたり、そのバッチ処理の結果をEC2上に保管する処理をS3へアップロードする処理へ変更するために試してみたことのメモ。
  • Docker に aws cli を入れて、コンテナ内から aws s3 cp コマンドを実行してコンテナ内のファイルをS3へアップロードする。

前提

  • Fargate と S3 は同じAWSアカウントの東京リージョンにある

設定

バッチの結果を保存するS3バケットを作成

  • バケット名
    任意。今回は世界でユニークなものにするため、末尾にこのS3のAWSアカウントIDを付けている。

  • log-infra-batch-AWSアカウントID

  • アクセス権限
    01.png

  • フォルダ(プレフィックス)作成
    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

スクリーンショット 2019-06-29 12.03.04.png

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 タスク定義 作成

Fargete でタスクを実行テスト

  • タスク定義で上記で作成したタスク定義を選択、アクションで タスクの実行 を選択
    06.png

  • 起動タイプはFargateを選択、VPCは適当なものを選択して、タスクを実行する
    07.png

  • タスク実行中
    08.png

  • 実行結果は CloudWatch ログの /ecs/タスク定義 ログストリームに出力される
    09.png

    10.png

  • S3にアップロードされたか確認
    11.png

20
23
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
20
23