GenUを最速で更新！AWS CodePipelineで実現するワンクリック更新術

AWSで生成AIの活用方法を検討する際に、GenU（Generative AI Use Cases JP）を使われている方は多いと思います。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/55efb0ea-bb3e-4e82-9ac6-3cdfd2fdec8c.png)

https://aws-samples.github.io/generative-ai-use-cases-jp/

:::note
オフィシャルサイトがかっこいい！！
:::

## GenUとは

GenUはAWSのソリューションアーキテクトの皆様が作成されたアプリケーションで、オープンソースで公開されています。

デプロイの手順もとても簡単にまとめられており、AWSにはじめて触る人でも十分構築できると思います。

ただ、生成AIを扱ったアプリケーションであるため、**更新が高頻度で発生する**という特徴があります。
最近では、「Claude 3.7」がAmazon Bedrockで利用できるようになりましたが、**当日中**にGenUでも利用できるよう対応されました。

:::note
翌日には新機能である**extended thinking**にも対応済みです！驚きの速さですね！！
:::

以下のように、毎日更新がありますw

![github.com_aws-samples_generative-ai-use-cases-jp_commits_main_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/a77bf9bd-fe34-4c1c-995e-0c4daeeea563.png)


更新頻度が高いので、毎回開発環境を立ち上げてコマンドを実行する作業自体が手間になってきます。
そこで、新機能が追加された際に素早く簡単に更新する方法として、AWS CodePipelineをGitHubと連携して使用する方法を紹介します。

GitHubの画面で**差分を取り込むだけ**で**GenUが最新版になります**！

:::note
知識として知っているのと、実際に使って実感する便利さは雲泥の差です。さあ、レッツトライ！
:::

## 全体イメージ

まずは、本家のリポジトリを自分用のフォークします。フォークしたリポジトリに変更を取り込むと、変更をCodePipelineが自動で検知し、ビルドとデプロイを開始します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/7ed13036-20b4-4914-9b8d-b05e6e44f610.png)

なので、更新時にすることは、「**最新の変更を自分のGitリポジトリに取り込む**」だけです。

↓↓↓百聞は一見にしかず↓↓↓

![Animation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/344446d5-9b87-4e27-ab85-7d62caeaa702.gif)

:::note
「Sync fork」を行って少し待つと、CodePipelineによるビルドとデプロイが始まります。
:::


## 手順

### GitHubのリポジトリをフォークする

1. GitHubの[GenUリポジトリ](https://github.com/aws-samples/generative-ai-use-cases-jp)を開く
    右上の「Fork」ボタンをクリックします

    :::note
    同時にStarもつけましょう！！！
   :::

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/783160eb-7f16-462d-b1c4-f7fa8bcd29d3.png)

1. Fork先のリポジトリの情報を入力します。デフォルトで構いません
    「Create fork」をクリックします

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/85329bc0-8a6b-4535-959c-e628a8f34b3f.png)

    少し待ちます

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/28209ea2-6717-4227-a5e8-f95b43b4938f.png)

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/87161744-6567-4e6b-ae78-9626e4c68ee2.png)

### AWS CodePipelineの設定

1. AWSのマネジメントコンソールでCodePipelineの画面を開きます
    「パイプラインを作成する」をクリックします

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/db8e9935-7b59-4556-aebf-2785b669266a.png)

1. 「カスタムパイプラインを構築する」を選択して、「次に」をクリックします（次に　ってなによ）

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/946b23a1-3449-415e-8ca7-47df34fb5712.png)

1. パイプライン名（「GenU-Pipeline」とします）を入力し、「次に」をクリックします（次に　ってなによ）

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/884d381f-c113-420e-8273-730489b92118.png)

1. ソースプロバイダーとして「GitHub（GitHubアプリ経由）」を選択します

    ![us-east-1.console.aws.amazon.com_codesuite_codepipeline_home_region=us-east-1 (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/6c5c8808-af3c-46a2-bc9e-82eff91a286b.png)

    入力欄が出てくるので、「GitHubに接続する」をクリックします

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/a7531c88-1824-4781-942f-cbfbfaf560be.png)

1. ポップアップが開きます
    接続名（ここでは「GitHub」）を入力して、「GitHubに接続する」をクリックします

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/f8c3f6a5-4339-4af1-8fd2-d601863eb9e3.png)

1. 「新しいアプリをインストールする」をクリックします

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/d8ddf37d-3a07-401b-85ed-ed24a2a4c1ba.png)

1. GitHubの画面に遷移します（未ログイン状態の場合はログインを求められると思います）
    GitHubに「AWS Connector for GitHub」アプリをインストールするかどうかの同意を求められます
    このアプリにアクセスを許可するリポジトリを選択します（Allでも良いですしGenUのリポジトリのみでもOKです）
    
    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/b57b8ca3-4229-41be-ac88-7c1d836d567c.png)

1. AWS側の画面に遷移しますので、「接続」をクリックします
    
    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/7c22a481-f922-4411-bbcf-4e2618d35279.png)

1. モーダルが閉じ、元の画面に戻ります（「接続」が入力された状態になります）
    リポジトリ名とデフォルトブランチを入力します
    「次に」をクリックします（次に　ってなによ）

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/24ead0ee-5f07-49b9-8f52-324be3b3e941.png)

1. ビルドステージを追加します
    プロバイダーを構築するは「コマンド」を選択します

    :::note
    最近のアップデートで、別途CodeBuildを設定しなくても、CodePipelineのウィザードでビルドコマンドを指定できるようになりました！！！
    
    参考：https://dev.classmethod.jp/articles/codepipeline-action-commands/
   :::

    コマンドに以下のコマンドを入力します（空白行があると後でエラーになるので注意）

    ```shell
    npm ci
    npm run cdk:deploy:quick
    ```

    ブートストラップ処理（`npx -w packages/cdk cdk bootstrap`）は必要に応じて追加してください。私はすでに実施済みのため、上記コマンドには含めていません。

    「次に」をクリックします（次に　ってなによ）

1. テストは行わないので、「テストステージをスキップ」をクリックします

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/5b9d64c5-d954-4739-8140-eec9ccb78ada.png)

1. ビルドステージですでにCDKコマンドでデプロイしてしまうので、デプロイステージはスキップします。「導入段階をスキップ」をクリックします（導入段階　ってなによ）

1. 内容を確認し、画面最下部の「パイプラインを作成する」をクリックします

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/d83286cd-a169-45b0-9238-27919202319a.png)
    
    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/24c0219b-a900-4ab7-9393-6697bc31edf4.png)

1. パイプラインが作成されると自動的に実行が開始します

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/01858a72-c4f0-47ec-93a9-9fb7f196a293.png)

    ただし、設定がまだ足りていない（IAM権限が不足している）ので必ず失敗します

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/7914bbfa-695c-45f4-90a4-6975d34fb0cc.png)

1. 「設定」タブにサービスロールARNが表示されるのでリンクをクリックし、IAMの設定画面を表示します

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/e702d23d-3927-4010-b6b9-88a3924ba54d.png)

1. 「許可を追加」メニューの「インラインポリシーを作成」をクリックします

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/e98e4d41-337a-438d-a2ad-713575d95423.png)

1. 「JSON」表示に切り替えて、以下のJSONを入力します

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/bab12543-b98c-46b1-b2fb-ba1348edce0c.png)

    :::note
    付与するIAM権限は以下のものです
    
    - CDKのデプロイに必要な権限
        参考：[AWS CDK でデプロイするときの最小権限について考えてみる
    ](https://dev.classmethod.jp/articles/cdk-minimum-deploy-policy/)
    - 何故か不足しているCloudWatch Logsの権限
        参考：[[アップデート] AWS CodePipeline で CodeBuild セットアップなしでコマンド実行が出来る新しいビルドアクション「Commands」を使ってみた
    ](https://dev.classmethod.jp/articles/codepipeline-action-commands/)
   :::

    :::note warn
    ロググループのARNはご自分の環境に合わせてください。ロググループ名は「/aws/codepipeline/{pipeline-name}」です）
   :::
    
    ```json
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "VisualEditor0",
    			"Effect": "Allow",
    			"Action": [
    				"logs:CreateLogStream",
    				"logs:CreateLogGroup",
    				"logs:PutLogEvents"
    			],
    			"Resource": [
    				"arn:aws:logs:us-east-1:123456789012:log-group:/aws/codepipeline/GenU-Pipeline",
    				"arn:aws:logs:us-east-1:123456789012:log-group:/aws/codepipeline/GenU-Pipeline:log-stream:*"
    			]
    		},
    		{
    			"Sid": "VisualEditor1",
    			"Effect": "Allow",
    			"Action": "sts:AssumeRole",
    			"Resource": "*",
    			"Condition": {
    				"ForAnyValue:StringEquals": {
    					"iam:ResourceTag/aws-cdk:bootstrap-role": [
    						"image-publishing",
    						"file-publishing",
    						"deploy",
    						"lookup"
    					]
    				}
    			}
    		}
    	]
    }
    ```

1. ポリシー名を入力して、「ポリシーの作成」をクリックします

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/2f2f4ef6-ee5d-449e-8c2f-a86fb9ff6fb6.png)

1. CodePipelineの画面に戻り、「変更をリリースする」をクリックします。こうすることで同じソースコードに対して再ビルドが動きます

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/bfb91008-e9a1-42b3-acdc-2fd50d00f576.png)

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/0a31559f-2817-478e-ba90-6a1fbdbffe80.png)

    成功すると、緑色になります。やったね

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/258e8fdf-66ec-4770-9ded-5bb909ea8789.png)

これで、`main`ブランチに変更が入るたびに、自動でパイプラインが動くようになります。

## まとめ

本記事では、AWS CodePipelineを活用してGenU（Generative AI Use Cases JP）を効率的に最新版に保つ方法を紹介しました。

- GenUは高頻度で更新されるため、手動での更新作業が負担になりがち
- GitHubリポジトリをフォークし、AWS CodePipelineと連携することで自動更新が可能に
- 更新時には「Sync fork」ボタンをクリックするだけというシンプルな運用
- IAM権限設定などの初期セットアップは少し手間ですが、一度設定すれば長期的に大幅な時間節約になる

このパイプラインを構築することで、Claude 3.7のextended thinkingなど、続々と追加される最新機能をすぐに試せるようになります。AWSの生成AI機能をビジネスに活用したい方や、常に最新の開発環境を維持したい方には特におすすめの方法です。
ぜひ皆さんもAWS CodePipelineの魔法を体験して、GenUの最新機能を存分にお楽しみください！

:::note
コマンドはシンプルなので、CDKで構築されたものは同様にPipelineを構築できると思います
:::