
【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のサンプルコード
CloudFormationのサンプルコード
Terraformのサンプルコード
料金計算
| 課金項目 | 説明 |
|---|---|
| ビルド時間 | コンピューティングタイプ別のビルド分数 |