CodeBuild

【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 Logslogs:CreateLogGroup
logs:CreateLogStream
logs:PutLogEvents
VPCec2:CreateNetworkInterface
ec2:DescribeNetworkInterfaces
ec2:DeleteNetworkInterface
ec2:DescribeSubnets
ec2:DescribeSecurityGroups
ec2:DescribeDhcpOptions
ec2:DescribeVpcs
S3s3: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
CodeCommitcodecommit:GitPull
CodeArtifactcodeartifact:GetAuthorizationToken
codeartifact:ReadFromRepository
sts:GetServiceBearerToken
SSM Parameter Storessm:GetParameter
kms:Decrypt
Secrets Managersecretsmanager:GetSecretValue
kms:Decrypt
KMSkms:Encrypt
kms:Decrypt
※)権限設計の原則

信頼ポリシー: CodeBuild

   {
     "Version": "2012-10-17",
     "Statement": [{
       "Effect": "Allow",
       "Principal": {"Service": "codebuild.amazonaws.com"},
       "Action": "sts:AssumeRole"
     }]
   }

ログ・監視

ログ出力先ログの種類
CloudWatch Logsビルドログ
CloudWatch Logs優先の原則
標準メトリクス
メトリクス名説明
Durationビルド時間
Buildsビルド数
FailedBuilds失敗ビルド数
SucceededBuilds成功ビルド数

制限値(固定値/ハードリミット/ソフトリミット)

ハードリミット制限値
ビルドの最大実行時間8時間
ビルドキュー時間8時間
環境変数数/ビルド100

ソフトリミット制限値
プロジェクト数/リージョン5,000
同時ビルド数60

AWS CLIのサンプルコード

CloudFormationのサンプルコード

Terraformのサンプルコード

料金計算

課金項目説明
ビルド時間コンピューティングタイプ別のビルド分数
料金計算ツール

公式ページ

AWSドキュメント CodeBuild