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



コメント