こんにちは。ディベロップメントサービス3課の平松です。
少し前に、AWS CodeBuild(以下、CodeBuild)がGitHubとのAWS CodeConnections(以下、CodeConnection)接続に対応したので、実際に構築して動かしてみようと思います。 記事の最後に、記事と同様の設定ですぐにデプロイできるCloudFormationテンプレートのおまけつきです。
これまでのCodeBuildとGitHubとの接続方法の整理
今回のアップデートが入る前の、これまでCodeBuildのGitHubとの接続方法として、以下の2つがありました。
- アクセストークン
- GitHub OAuth アプリ
ここに今回、新たな手法が加わったわけです。
- GitHub App接続←NEW!!
GitHubとのCodeConnection接続を試してみる
GitHubとの接続(AWS CodeConnections)を作成
まず、CodeConnectionを作成するわけですが、ここは長くなるので、割愛します。 まだ作成されていない方は、以下のブログをご覧ください!
CodeBuildプロジェクトを作成
CodeBuildページからプロジェクトの作成を押下
「ビルドプロジェクトを作成する」ページの「ソース」セクションで以下のように設定
- ソースプロバイダ:GitHub
- 認証情報:カスタムソース認証情報
- アカウントのデフォルトのソース資格情報をすべてのプロジェクトに適用する場合は「デフォルトソース認証情報」を使用し、アカウントのデフォルト設定を上書きする場合は「カスタムソース認証情報」を使用します。今回は、カスタムソース認証情報を設定します。
- 認証情報タイプ:GitHubアプリ
- 接続:任意のCodeConnectionsを選択
- リポジトリ:任意のリポジトリを選択
GitHubからソースを取得できていることを確認するため、buildspecには、「ls -la」コマンドを記載
その他の設定は任意(今回は全てデフォルト)で設定し「ビルドプロジェクトを作成する」を押下する
必要なIAM権限の追加
CodeBuildプロジェクトのIAMロールに、CodeConnection経由でGitHubと接続できるようにするために、以下のポリシーを許可
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codeconnections:GetConnectionToken", "codeconnections:GetConnection" ], "Resource": [ "arn:aws:codeconnections:ap-northeast-1:12345678910:connection/xxxx-xxxxxxxx-xxxxxx" ] } ] }
動作確認
コンソールから手動実行して、動作確認をします。
ビルドログを見ると、GitHubからソースが取得できていることがわかりますね。(今回はREADME.mdのみ存在するリポジトリを選択)
CloudFormationで作成する
CloudFormationで構築する場合は以下のようなテンプレートになります。
CodeBuildProject -> Property -> Source -> Auth -> Type にCODECONNECTIONS
を選択できるようになりました。
AWSTemplateFormatVersion: '2010-09-09' Parameters: CodeConnectionArn: Type: String Description: CodeConnection ARN Default: arn:aws:codeconnections:ap-northeast-1:12345678910:connection/xxxxxxx-xxxxxxxx-xxxxxx RepositoryUrl: Type: String Description: Repository URL Default: https://github.com/xxxxxxxxxx/xxxxxxxxxxx.git Resources: ServiceRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: codebuild.amazonaws.com Action: sts:AssumeRole Policies: - PolicyName: codebuild-codeconnection-demo PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - codeconnections:GetConnectionToken - codeconnections:GetConnection Resource: !Ref CodeConnectionArn CodeBuildProject: Type: AWS::CodeBuild::Project Properties: Name: codebuild-codeconnection-demo Description: CodeBuild CodeConnection Demo ServiceRole: !GetAtt ServiceRole.Arn Artifacts: Type: no_artifacts Environment: Type: LINUX_CONTAINER ComputeType: BUILD_GENERAL1_SMALL Image: aws/codebuild/amazonlinux2-x86_64-standard:5.0 Source: Type: GITHUB Auth: Type: CODECONNECTIONS Resource: !Ref CodeConnectionArn Location: !Ref RepositoryUrl BuildSpec: | version: 0.2 phases: build: commands: - echo "Hello" - ls -la
最後に
これまで CodePipeline でのみ CodeConnection 経由での GitHub App 接続がサポートされていましたが、今回のアップデートで CodeBuild 単体でも使用できるようになりました。
これにより、CodePipeline は使わずに CodeBuild だけでサクッとGitHubと連携して、簡単なCI/CDパイプラインなどは作成できるようになったので、個人的には非常に嬉しいアップデートでした。 ただ、CodePipeline V2 でサポートされている、実行トリガーをGit Tagなどでフィルタする機能は、まだサポートされていないので注意が必要です。(将来的にCodeBuild単体でもサポートされることを期待!!)
最後までご覧いただきありがとうございました。