AWS Fargateでバッチシステムを構築しよう(上)

記事タイトルとURLをコピーする

技術4課の古川です。 AWS FargateでAmazon RDS for PostgreSQLのテーブルダンプをするバッチ処理を作成しました。

今回はその手順について2部構成で紹介したいと思います。 本記事はAWS Fargateでバッチシステムを構築しよう(上)ということで、Amazon ECRの構築とDockerイメージのPush手順について紹介します。

1) Amazon ECSコンソール画面へ遷移

1-1) AWS Management Console画面からAmazon ECSを検索

画面上部の「サービス」を選択し、サービス検索フォームに「ECS」を入力します。 Elastic Containaer Serviceがサジェストされるので、選択します。

f:id:swx-furukawa:20210218110908p:plain

1-2) Amazon ECSコンソール画面へ遷移

f:id:swx-furukawa:20210218112347p:plain

2) Amazon ECRリポジトリの作成

2-1) リポジトリ作成画面遷移

Amazon ECSコンソール画面から「Repositories」を選択します。 ECRリポジトリ一覧画面に遷移した後、「リポジトリ作成」を押下します。

f:id:swx-furukawa:20210218112454p:plain

2-2) アクセスとタグ

「アクセスとタグ」にて以下を設定します。 ※タグのイミュータビリティを有効にすると、イメージのバージョンを上書き不可になります。 今回は厳密にバージョンを管理する必要性がないので、無効とします。

f:id:swx-furukawa:20210218112629p:plain

可視性設定 リポジトリ名 タグのイミュータビリティ
Private batch_sample(任意) 無効

2-3) イメージスキャンの設定

「プッシュ時にスキャン」を「有効」にします。

f:id:swx-furukawa:20210218113134p:plain

2-4) 暗号化設定

ECRのイメージは、AES-256 暗号化アルゴリズムによってデフォルトで暗号化されております。 よって今回は、「KMS暗号化」を「無効」にします。

f:id:swx-furukawa:20210218113202p:plain

2-5) リポジトリの作成

「リポジトリの作成」を押下します。

f:id:swx-furukawa:20210218113855p:plain

リポジトリ一覧画面にて、作成したリポジトリが表示されていることを確認します。

3) Dockerファイルのpush

3-1) ファイルの準備

以下、batch_sampleフォルダ直下に、以下のDockerfileシェルスクリプトを格納します。

 batch_sample
   ├── Dockerfile
   └── backup.sh

Dockerfile

FROM alpine:3.12.3

RUN apk add --update postgresql-client python3 py3-pip
RUN pip3 install awscli

RUN mkdir src
WORKDIR /src
COPY backup.sh /src

ENTRYPOINT ["sh"]
CMD ["/src/backup.sh"]

backup.sh

#!/bin/sh

export PGPASSWORD= {DBのUserPassword}

DBNAME= {DBのName}
DBUSER= {DBのUserName}
BUCKET={ダンプファイル保存用のS3バケット名}
PSQL_HOST1= {DBのName}

TABLE={ダンプするデーブル名}
pg_dump -h $PSQL_HOST1 \
          -U $DBUSER \
          -t $TABLE \
          $DBNAME > $TABLE.sql
aws s3 cp $TABLE.sql s3://$BUCKET/backup/$(date "+%Y-%m-%d")_$TABLE.sql
rm -f $TABLE.sql

指定したDB、デーブルのダンプファイルをS3バケットにアップロードします。

3-2) レジストリの認証

最新バージョンの AWS CLI と Docker がインストールされていることを確認し、ローカルにて以下コマンドを実行します。

aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin {AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com

3-3) Dockerイメージの構築

ローカルにて以下コマンドを実行します。

docker build -t batch_sample .

3-4) タグ付け

Dockerイメージの構築完了後、ローカルにて以下コマンドを実行します。 ※タグはlatestになっておりますが、任意です。 バージョン管理をしたい場合は、v1,v2をタグ付けすると良いです。

docker tag  batch_sample:latest {AWSアカウントID}dkr.ecr.ap-northeast-1.amazonaws.com/batch_sample:latest

3-5) ECRリポジトリへpush

タグ付けの完了後、ローカルにて以下コマンドを実行します。

docker push {AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/batch_sample:latest

ECRリポジトリにイメージがpushされていることを確認します。

f:id:swx-furukawa:20210226165026p:plain

以上でAmazon ECRの構築とDockerイメージのPushが完了しました。

次回の記事では、実際にAmazon RDSとAmazon S3を用意して、AWS Fargateを起動してみたいと思います。