この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
コンニチハ、千葉です。
CodeBuildにて、Dockerコンテナをビルドしてみたのでご紹介します。
フローはこんな感じです。
GitHubに配置しているDockerfileを元にビルドし、コンテナイメージをECRにpushします。
作業サマリ
作業サマリです。
- ECRリポジトリを作成
- CodeBuild用のIAMロール作成
- Codebuildプロジェクト作成
- gitへコードをpush
- ビルド
- pushしたコンテナイメージをローカル端末で起動してみる
やってみた
では、さっそくやっていきます。
ECRリポジトリを作成する
マネージメントコンソールの、ECSよりリポジトリを作成します。
CodeBuild用のIAMロールを作成する
CodeBuildで利用するIAMロールを作成します。 IAMロールを作成して、ポリシーをアタッチします。
ハイライト部分は適宜修正してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Resource": [
"arn:aws:logs:us-east-1:xxxxxxxxxxx:log-group:/aws/codebuild/build-docker",
"arn:aws:logs:us-east-1:xxxxxxxxxxx:log-group:/aws/codebuild/build-docker:*"
],
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
]
},
{
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::codepipeline-us-east-1-*"
],
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion"
]
},
{
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:CompleteLayerUpload",
"ecr:GetAuthorizationToken",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:UploadLayerPart"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
Codebuildプロジェクト作成
マネージメントコンソールから、CodeBuildを選択し「Create Project」からプロジェクトを作成します。
以下、それぞれ指定しました
- ソースの配置先※今回はGithub
- ランタイムとしてDockerを指定
- アーティファクトはなし
また「Show advanced settings」より、下記のように環境変数を指定します。 リージョン、アカウントID、ECRリポジトリを指定します。
- "name": "AWS_DEFAULT_REGION" "value": "region-ID"
- "name": "AWS_ACCOUNT_ID" "value": "account-ID"
- "name": "IMAGE_REPO_NAME" "value": "Amazon-ECR-repo-name"
- "name": "IMAGE_TAG" "value": "latest"
GitHubへコードをpush
今回は、リポジトリとしてGitHubを選択しました。以下のファイルをpushしました。
ファイルの配置
├── Dockerfile
└── buildspec.yml
Dockerfile
FROM maven:3.3.9-jdk-8
RUN echo "Hello World"
buildspec.yml
version: 0.1
phases:
pre_build:
commands:
- echo Logging in to Amazon ECR...
- $(aws ecr get-login --region $AWS_DEFAULT_REGION)
build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- docker build -t $IMAGE_REPO_NAME .
- 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
ビルド
マネージメントコンソールのCodeBuildより、「Start build」をクリックします。
ビルドが成功し、ECRにイメージがアップされます。
最後に
簡単に設定できました。AWS内で完結するので、外部サービスとのキーのやりとりもないので、よりセキュアに利用できそうです。
参考
http://docs.aws.amazon.com/codebuild/latest/userguide/sample-docker.html