はじめに
近年生成AIが開発の中でも活用されているケースが多くなってきました。
今回はAWSが提供するBedrockを使って、GitHubで管理しているCloudFormationの変更内容の要約をPull Requestに記載するワークフローを実現したいと思います。
対応方法
ここから実際の手順を紹介します。
Bedrockを有効化
まずはAWSアカウントでBedrockのモデルを有効化します。
今回はそれぞれ以下のモデルをAWSコンソールから有効化します。
- Light Model: Claude 3.5 Haiku(anthropic.claude-3-5-haiku-20241022-v1:0)
- Heavy Model: Claude 3.5 Sonnet v2(anthropic.claude-3-5-sonnet-20241022-v2:0)
GitHub Actionsから実行できるIAMロールを作成
次にGitHubリポジトリからBedrockのモデルを実行できる(bedrock:InvokeModel)IAMロールを作成します。
CloudFormationテンプレートを記載していますのでぜひ参考にしてください。
AWSTemplateFormatVersion: '2010-09-09'
Description: 'PR Summary by Bedrock'
Parameters:
GitHubOrganizationName:
Type: 'String'
Description: 'GitHub Organization Name'
GitHubRepositoryName:
Type: 'String'
Description: 'GitHub Repository Name'
Resources:
IAMRole:
Type: 'AWS::IAM::Role'
Properties:
RoleName: 'pr-summary-by-bedrock-role'
AssumeRolePolicyDocument:
Statement:
- Effect: 'Allow'
Action: 'sts:AssumeRoleWithWebIdentity'
Principal:
Federated: !Sub 'arn:${AWS::Partition}:iam::${AWS::AccountId}:oidc-provider/token.actions.githubusercontent.com'
Condition:
StringLike:
token.actions.githubusercontent.com:sub: !Sub 'repo:${GitHubOrganizationName}/${GitHubRepositoryName}:*'
Policies:
- PolicyName: 'pr-summary-by-bedrock-policy'
PolicyDocument:
Statement:
- Action:
- 'bedrock:InvokeModel'
Effect: 'Allow'
Resource: '*'
GitHub Actionsのワークフローを追加
次は該当のGitHubリポジトリにGitHub Actionsのワークフローを追加します。
今回は公開されている tmokmss/bedrock-pr-reviewer を利用します。
その際、defaultではyamlファイルは除外されているため、個別での設定が必要となります。
各自のプロジェクトに合わせてpath_filtersの変更をお願いします。
name: PR Summary by Bedrock
permissions:
id-token: write
contents: read
pull-requests: write
on:
pull_request:
pull_request_review_comment:
types: [created]
concurrency:
group:
${{ github.repository }}-${{ github.event.number || github.head_ref ||
github.sha }}-${{ github.workflow }}-${{ github.event_name ==
'pull_request_review_comment' && 'pr_comment' || 'pr' }}
cancel-in-progress: ${{ github.event_name != 'pull_request_review_comment' }}
env:
AWS_IAM_ROLE_ARN: arn:aws:iam::123456789012:role/pr-summary-by-bedrock-role
AWS_REGION: ap-northeast-1
CODE_REVIEW_LIGHT_MODEL: anthropic.claude-3-5-haiku-20241022-v1:0
CODE_REVIEW_HEAVY_MODEL: anthropic.claude-3-5-sonnet-20241022-v2:0
jobs:
review:
runs-on: ubuntu-latest
if: >-
${{
github.event_name != 'pull_request_review_comment' || github.event.comment.in_reply_to_id != null
}}
steps:
- name: configure aws credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ env.AWS_IAM_ROLE_ARN }}
aws-region: ${{ env.AWS_REGION }}
- name: PR review
uses: tmokmss/bedrock-pr-reviewer@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
debug: false
review_simple_changes: false
review_comment_lgtm: false
language: ja-JP
disable_review: true
disable_release_notes: false
bedrock_light_model: ${{ env.CODE_REVIEW_LIGHT_MODEL }}
bedrock_heavy_model: ${{ env.CODE_REVIEW_HEAVY_MODEL }}
path_filters: |
!**/dist/**
!**/*.tfstate
!**/package-lock.json
動作確認
実際にPull Requestをあげると以下のようなリリースノートがDescription欄に自記載されていることを確認します。
おわりに
以上、今回はAmazon Bedrockを使ってCloudFormationの変更内容の要約をPull Requestに記載する仕組みをご紹介しました。
Bedrockでの変更内容の要約検討されている方の参考になれば幸いです。