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
コメント