AWS CodeBuildがGitHubとのAWS CodeConnections接続に対応したのでやってみた

記事タイトルとURLをコピーする

こんにちは。ディベロップメントサービス3課の平松です。

少し前に、AWS CodeBuild(以下、CodeBuild)がGitHubとのAWS CodeConnections(以下、CodeConnection)接続に対応したので、実際に構築して動かしてみようと思います。 記事の最後に、記事と同様の設定ですぐにデプロイできるCloudFormationテンプレートのおまけつきです。

aws.amazon.com

これまでのCodeBuildとGitHubとの接続方法の整理

今回のアップデートが入る前の、これまでCodeBuildのGitHubとの接続方法として、以下の2つがありました。

  • アクセストークン
  • GitHub OAuth アプリ

ここに今回、新たな手法が加わったわけです。

  • GitHub App接続←NEW!!

docs.aws.amazon.com

GitHubとのCodeConnection接続を試してみる

GitHubとの接続(AWS CodeConnections)を作成

まず、CodeConnectionを作成するわけですが、ここは長くなるので、割愛します。 まだ作成されていない方は、以下のブログをご覧ください!

blog.serverworks.co.jp

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を選択できるようになりました。

docs.aws.amazon.com

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単体でもサポートされることを期待!!)

最後までご覧いただきありがとうございました。

平松 暢顕 (記事一覧)

22卒。日々勉強中。

少しでもお役に立てる情報を発信できるよう頑張ります