
【VPC外リージョンサービス / ENIでVPC接続】
CodeBuild は、フルマネージドのビルドサービスです。
コンテナ上の Build Environment(ビルド環境) で、Buildspec(ビルド仕様書)(buildspec.yml) に基づいて依存関係の取得、ビルド、テスト、成果物の生成を実行します。この設定は Build Project(ビルドプロジェクト) として定義され、ソースコードは Source Provider(ソースプロバイダ)(CodeCommit/GitHub/S3など)から取得します。
ビルド結果は Artifacts(アーティファクト) として S3(Simple Storage Service)や ECR(Elastic Container Registry) に保存でき、ビルド中の 環境変数、Compute types(コンピュートタイプ) の選択、Privileged Mode(特権モード) によるDockerビルド、VPC Configuration(VPC接続設定) によるプライベートリソースアクセスにも対応しています。また、IAM Role(サービスロール) を使用して、S3・ECR・Secrets ManagerなどのAWSサービスへ安全にアクセスできます。
さらに、CodePipeline と統合して自動ビルドをパイプライン化したり、CodeCommit でのコミットをトリガーに起動したり、CodeDeploy、ECS(Elastic Container Service)、EKS(Elastic Kubernetes Service)、Lambda などのデプロイ先サービスと連携させることで、再現性の高い CI/CD(継続的インテグレーション/継続的デリバリー) 環境を簡単に構築することができます。
ビルドログやメトリクスは CloudWatch で確認でき、成果物は S3/ECR に出力されます。
重要用語
ユースケース
| アプリケーションのビルド・テスト自動化 | ソースコードからコンパイル・ユニットテスト・パッケージングまでをビルドプロジェクトとして定義し、コミットごとに自動実行する。 |
| コンテナイメージの自動ビルド | Dockerfileを元にコンテナイメージをビルドし、ECRなどのコンテナレジストリへ自動的にpushする処理を行う。 |
| 静的解析やセキュリティスキャンの実行 | ビルドプロセスの中でコードの静的解析ツールや脆弱性スキャナを実行し、品質とセキュリティチェックを自動化する。 |
ベストプラクティス
| 最小権限のサービスロール | ビルドに必要なリソースだけにアクセス可能なIAMロールを利用する。 |
| buildspec.ymlの標準化 | 共通のビルド手順をbuildspecで管理し、再利用性を高める。 |
| キャッシュとアーティファクト管理 | 依存パッケージや成果物をキャッシュ/S3に保存し、ビルド時間を短縮する。 |
セキュリティ
| 関連サービス | 設定内容 |
|---|---|
| KMS(データの暗号化と鍵の安全管理) | - |
| Secrets Manager(機密情報の安全管理) | シークレット(秘密情報)の作成が推奨 Git認証情報・APIキー・環境設定パスワード |
| SSM Parameter Store(設定情報の一元管理) | パラメータ(Parameter)の作成が推奨 環境依存変数・リポジトリURL・APIキー |
| CloudTrail(操作履歴の記録・監査・追跡) | 【自動記録】 作成・更新・削除・設定変更は自動記録される。(コントロールプレーンAPI) データ操作は追跡できない(データプレーンAPI) |
| Config(リソースの構成状態・設定変更を記録) | 【Configが有効な場合】 プロジェクト設定変更履歴・環境変数に認証情報直書き検知等の準拠評価 |
| GuardDuty(脅威を自動検出) | 【GuardDutyが有効な場合】 プロジェクト変更のAPI異常検知 |
CodeBuildが実行ロールを引き受ける典型的な連携パターン
| 実行ロールを介して連携するサービス | 実行ロールにアタッチするポリシー |
|---|---|
| CloudWatch Logs | logs:CreateLogGroup logs:CreateLogStream logs:PutLogEvents |
| VPC | ec2:CreateNetworkInterface ec2:DescribeNetworkInterfaces ec2:DeleteNetworkInterface ec2:DescribeSubnets ec2:DescribeSecurityGroups ec2:DescribeDhcpOptions ec2:DescribeVpcs |
| S3 | s3:ListBucket s3:GetObject s3:PutObject s3:GetBucketLocation s3:GetBucketVersioning |
| ECR(Push) | ecr:GetAuthorizationToken ecr:BatchGetImage ecr:GetDownloadUrlForLayer ecr:BatchCheckLayerAvailability ecr:InitiateLayerUpload ecr:UploadLayerPart ecr:CompleteLayerUpload ecr:PutImage |
| ECR(Pull) | ecr:GetAuthorizationToken ecr:BatchGetImage ecr:GetDownloadUrlForLayer |
| CodeCommit | codecommit:GitPull |
| CodeArtifact | codeartifact:GetAuthorizationToken codeartifact:ReadFromRepository sts:GetServiceBearerToken |
| SSM Parameter Store | ssm:GetParameter kms:Decrypt |
| Secrets Manager | secretsmanager:GetSecretValue kms:Decrypt |
| KMS | kms:Encrypt kms:Decrypt |
信頼ポリシー: CodeBuild
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"Service": "codebuild.amazonaws.com"},
"Action": "sts:AssumeRole"
}]
}
ログ・監視
| ログ出力先 | ログの種類 |
|---|---|
| CloudWatch Logs | ビルドログ |
標準メトリクス
| メトリクス名 | 説明 |
|---|---|
| Duration | ビルド時間 |
| Builds | ビルド数 |
| FailedBuilds | 失敗ビルド数 |
| SucceededBuilds | 成功ビルド数 |
制限値(固定値/ハードリミット/ソフトリミット)
| ハードリミット | 制限値 |
|---|---|
| ビルドの最大実行時間 | 8時間 |
| ビルドキュー時間 | 8時間 |
| 環境変数数/ビルド | 100 |
| ソフトリミット | 制限値 |
|---|---|
| プロジェクト数/リージョン | 5,000 |
| 同時ビルド数 | 60 |
AWS CLIのサンプルコード
サービスロールを作成する(信頼ポリシーのファイル名 指定)
codebuild-trust-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "codebuild.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
aws iam create-role \
--role-name CodeBuildServiceRole \
--assume-role-policy-document file://codebuild-trust-policy.json
サービスロールを表示する
aws iam list-roles
サービスロールを削除する(実行ロール名 指定)
aws iam list-attached-role-policies \
--role-name CodeBuildServiceRole
サービスロールにAWS管理ポリシーをアタッチする(ロール名 指定)
aws iam attach-role-policy \
--role-name CodeBuildServiceRole \
--policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
サービスロールからAWS管理ポリシーをデタッチする(ロール名 指定)
aws iam detach-role-policy \
--CodeBuildServiceRole \
--policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
プロジェクトを作成する(ロール名 指定)
aws codebuild create-project \
--name MyProject \
--source type=GITHUB,location=https://github.com/user/repo.git \
--artifacts type=S3,location=my-build-bucket \
--environment type=LINUX_CONTAINER,image=aws/codebuild/standard:7.0,computeType=BUILD_GENERAL1_SMALL \
--service-role arn:aws:iam::123456789012:role/CodeBuildServiceRole
プロジェクトの一覧を表示する
aws codebuild list-projects
プロジェクトの詳細を表示する(プロジェクト名 指定)
aws codebuild batch-get-projects \
--names MyProject
プロジェクトを削除する(プロジェクト名 指定)
aws codebuild delete-project \
--name MyProject
ビルドを開始する(プロジェクト名 指定)
aws codebuild start-build \
--project-name MyProject
ビルド履歴を表示する
aws codebuild list-builds
プロジェクトのビルド履歴を表示する(プロジェクト名 指定)
aws codebuild list-builds-for-project \
--project-name MyProject
ビルドの詳細を表示する(ビルド ID 指定)
aws codebuild batch-get-builds \
--ids MyProject:build-id-12345
ビルドを停止する(ビルド ID 指定)
aws codebuild stop-build \
--id MyProject:build-id-12345
CloudFormationのサンプルコード
Terraformのサンプルコード
料金計算
| 課金項目 | 説明 |
|---|---|
| ビルド時間 | コンピューティングタイプ別のビルド分数 |