AWS CodeBuld で dockefile から docker image を ECR にアップロード

aws
ECR でレポジトリ作成

まずは、ECR で docker image 用レポジトリを作成する必要があります。

名前は何でもいいですが、以下のように作成したとします。

リポジトリ名
hellogo-image-repo

URI
407419187097.dkr.ecr.ap-northeast-1.amazonaws.com/hellogo-image-repo

github でレポジトリ作成

github でも bitbucket でもいいですが、dockerfile 用のレポジトリを作成する必要があります。

以下ような構成でファイルをコミットしpushしましょう。

dockerfile
main.go
buildspec.yml
各ファイルの説明

dockerfile

FROM golang:1.16-alpine

WORKDIR /go
ADD . /go

EXPOSE  8080

CMD ["go", "run", "main.go"]

main.go

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World 77777")
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

ここのレポジトリのURIは各自のURIに直してください。

buildspec.yml

version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - $(aws ecr get-login --no-include-email --region ap-northeast-1)
  build:
    commands:
      - echo Building the Docker image on `date`
      - docker build --no-cache -t hellogo-image-repo:latest .
      - docker tag hellogo-image-repo:latest 407419187097.dkr.ecr.ap-northeast-1.amazonaws.com/hellogo-image-repo:latest
  post_build:
    commands:
      - echo Pushing the Docker image on `date`
      - docker push 407419187097.dkr.ecr.ap-northeast-1.amazonaws.com/hellogo-image-repo:latest
CodeBuild 設定

CodeBuild で以下を設定したビルドプロジェクトを作成します。

プロジェクト名(適当に)
example_gohello

github または bitbucket のレポジトリを指定

オペレーティングシステム
Amazon Linux 2

ランタイム
Standard

イメージ
x64-standard:3.0

特権付与にチェック
Docker イメージを構築するか、ビルドで昇格されたアクセス権限を取得するには、このフラグを有効にします

ロール名(自動生成)
codebuild-go_build_project-service-role

ECRへのアップロードを許可するため、
あとで、このロールに IAM でECRの操作を許可する
AmazonEC2ContainerRegistryPowerUser
ポリシーをアタッチする。

そうしないと

XXXXXXXXX is not authorized to perform: ecr:GetAuthorizationToken on resource: *

的なエラーが出る

docker image のアップロード先は buildspec.yml に指定されています。

ビルド開始

CodeBuild でビルド開始を行うと

無事 docker image が ECR にアップロードされているはずです。

アーティファクトとは

CodeBuildでは処理の成果物をアーティファクトと呼びます

今回の場合は、アーティファクトは ECR ですね。

参考文献

Docker sample for CodeBuild – aws official
https://docs.aws.amazon.com/codebuild/latest/userguide/sample-docker.html

AWS CodeBuild 入門 – Actindi Developers blog
https://tech.actindi.net/2018/08/31/120906

コメント

タイトルとURLをコピーしました