LoginSignup
2
1

More than 3 years have passed since last update.

CodeCommitとECRを連携してAWS Batchで実行結果の確認する方法

Last updated at Posted at 2020-09-13

概要

前回の内容を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"
    },

image.png

image.png

image.png

  • ビルドを実行し終了することを確認します。
    • 失敗した場合はcloudWatchLogを確認します。 image.png

ジョブ定義の作成から実行

  • AWSコンソール上から Batch を選択します。
  • コンテナイメージにはECRに登録されているコンテナimageの イメージの URI を設定します。

    • 環境変数は以下のように設定します。
    • image.png
    • 引数は以下のように設定します。
    • image.png
  • 作成後 ジョブの送信 から作成したジョブを選択して実行します。

  • 結果は CloudWatch Log で確認できます。

    • 引数、環境変数が出力されていることを確認できます。 image.png
2
1
3

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
2
1