概要
前回の内容をCodeCommitからECRにプッシュしてAWS Batchで実行する形を作ります。
CodeCommitとの連携でいろいろ試行錯誤したのでその内容をメモしていこうかと。
準備
Dockerファイルは前回のものをそのまま使います。
Commitするソースの準備
- ディレクトリは以下のようになっています。
- CodeCommitにコミットするため.gitignoreを設定しています。
.gitignore
buildspec.yml
dockerfile
module\data
module\data\signal-datas_1.csv
module\src
module\src\logger.py
module\src\pandasTest.py
- pandasTest.py
- 今回は環境変数、引数に与えたものを出力できるように修正しています。
import pandas as pd
from logger import LoggerObj
import sys
import os
aws_region_name = os.getenv('DYNAMODB_REGION', 'ap-northeast-1')
if __name__ == "__main__":
args=sys.argv
logObj=LoggerObj()
log=logObj.createLog()
log.info('処理開始')
log.info(args)
log.info(aws_region_name)
test=pd.read_csv('data/signal-datas_1.csv')
log.info(test.head())
log.info('処理終了')
- buildspec.yml
- CodeBuildを使うためbuildspec.ymlを作成します。
-
XXXXXXXXXX
はAWSのアカウントID -
pandastest2
はECRのリポジトリを指定します。(事前に作成してください) - 公式のサンプルでは環境変数で設定していますが、今回はお試しなので固定値にしています。
version: 0.2
phases:
install:
runtime-versions:
docker: 19
commands:
- echo install step...
pre_build:
commands:
- echo logging in to AWS ECR...
- $(aws ecr get-login --no-include-email --region ap-northeast-1)
build:
commands:
- echo build Docker image on `date`
- echo Building the Docker image...
- docker build -t pandastest:latest .
- docker tag pandastest:latest XXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/pandastest2:latest
post_build:
commands:
- echo build Docker image complete `date`
- echo push latest Docker images to ECR...
- docker push XXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/pandastest2:latest
ソースのコミットからビルド
-
リポジトリにソースをコミットします。
- 事前にリポジトリを作成しソースをコミットします。認証の方法などは公式ページ参照
-
CodeBuildでビルドの実行を行います。
- オペレーティングシステムは
ubuntu
にしないとDockerファイルのapt-get
がエラーになってしまうようです。 - 特権付与
Docker イメージを構築するか、ビルドで昇格されたアクセス権限を取得するには、このフラグを有効にします
をチェックしないとイメージの作成で失敗します。 - アーティファクトはECRにプッシュするのでなしです。
- ロールには権限が足りないのでこちらを参照して権限を追加します。以下の記述を追加します。
- オペレーティングシステムは
{
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:CompleteLayerUpload",
"ecr:GetAuthorizationToken",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:UploadLayerPart"
],
"Resource": "*",
"Effect": "Allow"
},