AWSお勉強 CodeBuild/ECR

サボり始めるとやる気が起きなくなる久々のパクリ12発目!
パクリ元
内容
CodeCommitにソース等を登録 → CodeBuildでコンテナ等作成してECRに登録(★今回ココ) → ECSで起動 の流れ。
ECR
ECRはDockerコンテナイメージを保存できるリポジトリ。CodeBuild にて作成したコンテナイメージを指定する箇所があるので先にリポジトリ(ecr-test)を作成しておく。



CodeBuild
CodeBuild は Docker Compose のようなもの。今回は CodeCommit に上げた Dockerfile に従ってコンテナを作成して ECR に登録するまでを行う。その手順は buildspec.yml に書いてある。ここでは CodeBuildTest というビルドプロジェクトを作成する。


ソースプロバイダには「AWS CodeCommit」、リポジトリは前回作成した「CodeCommitTest」、リファレンスタイプには「ブランチ」、ブランチには「master」を指定する。

環境イメージは「マネージド型イメージ」、オペレーティングシステムには「Ubuntu」、ランタイムは「Standard」、イメージやイメージのバージョンには最新っぽいのを選択、特権付与チェック、サービスロールは「新しいサービスロール」を選択、ロール名には「codebuild-CodeBuildTest-service-role」がすでに入っている。このロールには後で他のポリシーを追加することになる。

環境の追加設定で環境変数を4つ設定する。これは前回 CodeCommit に上げた buildspec.yml 内で使用しているため。
AWS_DEFAULT_REGION: ap-northeast-1(アジアパシフィック (東京))
IMAGE_REPO_NAME: ecr-test(ECRリポジトリ)
IMAGE_TAG: latest(Dockerコンテナのタグ)
AWS_ACCOUNT_ID: ************(AWSアカウントID)

AWSアカウントIDは画面右上の名前をクリックしてメニューからアカウントを指定した画面に表示されている。

ビルド仕様は「buildspecファイルを使用する」を選択。これで、このビルドプロジェクトが CodeCommit に上げた buildspec.yml ファイルを使用し、その buildspec.yml ファイル内で CodeCommit に上がっている Dockerfile をビルドする、という関連付けられる。



ロール
自動的に登録された「codebuild-CodeBuildTest-service-role」ロールだが、ECRに登録するポリシーが足りないようなので追加する。IAM>ロールから「codebuild-CodeBuildTest-service-role」を検索し、クリックする。

「許可を追加」ボタン押下、「ポリシーをアタッチ」を押下する。

「AmazonEC2ContainerRegistryPowerUser」でフィルタリングして、チェックをつけて「許可を追加」ボタンを押下する。


ビルド
CodeBuildTest ビルドプロジェクトに戻って「ビルドを開始」ボタンを押下する。

失敗。パクリ元2つ目を参考に buildspec.yml を書き換えてCommit、Pushしてビルド再試行。
さらに Too Many Requests みたいなエラーが出たりしてパクリ元3つ目を参考に、Docker Hub(https://hub.docker.com/)にてアカウントを登録して buildspec.yml 内でログインするように修正。
version: 0.2
phases:
pre_build:
commands:
- echo Logging in to Amazon ECR...
- aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
# Docker Hub へのログイン
- echo Logging in to Docker Hub...
- echo $DOCKER_HUB_PASS | docker login -u $DOCKER_HUB_USER --password-stdin
build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
- echo docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
- docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
post_build:
commands:
- echo Build completed on `date`
- echo Pushing the Docker image...
- docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
- printf '[{"name":"<container-definition>","imageUri":"%s"}]' $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG > artifacts.json
artifacts:
files: artifacts.json
環境変数を追加する。CodeBuidTest を選択して編集>環境>追加設定
DOCKER_HUB_USER: ********(Docker Hub ユーザー名)
DOCKER_HUB_PASS: ********(Docker Hub パスワード)

ビルドの再試行。成功。

ECR
登録されていることを確認する。

雑感
いろんな問題が出てくるもんだな。
ディスカッション
コメント一覧
まだ、コメントがありません