0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】デジタル庁の生成AI基盤「源内(GenAI)」を構築してみた

0
Posted at

源内とは

源内(GenAI)は、デジタル庁が開発・運用する生成 AI 利活用基盤です。行政職員が業務特化の生成 AI アプリケーションを、迅速かつ安全かつ簡単に利用できる環境を提供します。

手順

事前準備・環境整備

デプロイ手順

アカウント登録

環境イメージ

下記にdraw.ioのファイルがあります。

ハンズオン

事前準備・環境整備

基本的にはGithubに用意されている手順に合わせればOKです。

今回はホームラボにUbuntu24.04サーバを立てて、そこにNode.js,AWS CLI,CDK,git,jqをインストールしていきます。
Windowsでも対して手順は変わらないはずです。

まず、AWS CLIに読み込ませるアクセスキー、シークレットアクセスキーを発行するユーザを作成します。
今回はcli-userというユーザを作成して、そのユーザでアクセスキーを作成しました。
このユーザはAdministratorAccessのポリシーを付けてます。運用面だとダメですが、勉強用なので。。。

立ち上げたEC2にアクセスします。
以下のコマンドを実行してNode.js、AWS CLI,CDK,gitをインストールします。

# Node.jsのインストール
test@ubuntu-cui:~$ sudo su -
[sudo] password for test:
root@ubuntu-cui:~# apt update && apt upgrade -y
root@ubuntu-cui:~# curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash
root@ubuntu-cui:~# \. "$HOME/.nvm/nvm.sh"
root@ubuntu-cui:~# nvm install 24
root@ubuntu-cui:~# node -v
v24.15.0
root@ubuntu-cui:~# npm -v
11.12.1

# AWS CLIのインストール
root@ubuntu-cui:~# curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
root@ubuntu-cui:~# apt install -y unzip
root@ubuntu-cui:~# ls
awscliv2.zip
root@ubuntu-cui:~# unzip awscliv2.zip
root@ubuntu-cui:~# ./aws/install
root@ubuntu-cui:~# aws --version
aws-cli/2.34.45 Python/3.14.4 Linux/6.8.0-111-generic exe/x86_64.ubuntu.24

# CDK
root@ubuntu-cui:~# npm install -g aws-cdk
root@ubuntu-cui:~# cdk --version
2.1121.0 (build 7abdd4e)

# git
root@ubuntu-cui:~# apt install -y git

gitを使って源内のリポジトリをクローンします。

root@ubuntu-cui:~# git clone https://github.com/digital-go-jp/genai-web.git
root@ubuntu-cui:~# ls
aws  awscliv2.zip  genai-web
root@ubuntu-cui:~# cd genai-web/
root@ubuntu-cui:~/genai-web# npm ci

AWS CLIにアクセスキーとシークレットアクセスキーを設定します。
今回は諸般の理由でデフォルトリージョンを東京リージョンにします。基本的に東京で良いと思います。
大阪にすると、Bedrockで提供するモデルの兼ね合いでデプロイ失敗します(1敗)

root@ubuntu-cui:~/genai-web# aws configure

Tip: You can deliver temporary credentials to the AWS CLI using your AWS Console session by running the command 'aws login'.

AWS Access Key ID [None]: {アクセスキー}
AWS Secret Access Key [None]: {シークレットアクセスキー}
Default region name [None]: ap-northeast-1
Default output format [None]:

CDKのBootstrapを行います。
これを行う事で東京リージョンとバージニアリージョンにCFnのスタックが作成されます。

root@ubuntu-cui:~/genai-web# npm -w packages/cdk run cdk -- bootstrap


jqをインストールします。

root@ubuntu-cui:~/genai-web# apt install -y jq

デプロイ準備

テンプレートファイルを編集します。
今回はとりあえずappEnvだけ修正しますが、ここでAIのモデルとかSAMLの設定とかもいじれそうです。

root@ubuntu-cui:~/genai-web# cd packages/cdk/env-parameters
root@ubuntu-cui:~/genai-web/packages/cdk/env-parameters# cp self-hosting-template.ts self-hosting-dev.ts
root@ubuntu-cui:~/genai-web/packages/cdk/env-parameters# nano self-hosting-dev.ts
root@ubuntu-cui:~/genai-web/packages/cdk/env-parameters# diff self-hosting-dev.ts self-hosting-template.ts
23c23
<   appEnv: 'dev-genai',
---
>   appEnv: 'your-environment-name',

parameter.tsを編集します。
allowedSignUpEmailDomainsは源内を使用するユーザのメールアドレスの@以降を設定しておきます。

root@ubuntu-cui:~/genai-web/packages/cdk/env-parameters# cd ~/genai-web/packages/cdk/
root@ubuntu-cui:~/genai-web/packages/cdk# ls
bin               cdk.json  env-parameters  lib           package.json  tests          vitest.config.ts
cdk.context.json  cdk.out   lambda          node_modules  parameter.ts  tsconfig.json
root@ubuntu-cui:~/genai-web/packages/cdk# cp -p parameter.ts parameter.ts.org
root@ubuntu-cui:~/genai-web/packages/cdk# nano parameter.ts
root@ubuntu-cui:~/genai-web/packages/cdk# diff parameter.ts parameter.ts.org
15,25c15,26
<    // 開発環境のパラメータ
<    '-selfHostingDev': { //-selfHostingDevに修正
<      appEnv: 'dev-genai', //dev-genaiに修正
<      logLevel: 'INFO',
<      allowedSignUpEmailDomains: ['gmail.com'], // ← ここを gmail.com に変更しました
<
<      allowedIpV4AddressRanges: [
<        '0.0.0.0/1', //アクセス許可をするIPアドレス(実質0.0.0.0/0)
<        '128.0.0.0/1', //アクセス許可をするIPアドレス(実質0.0.0.0/0)
<      ],
<    },
---
>   // 開発環境のサンプルパラメータ
>   // '-dev': {
>   //   appEnv: 'dev',
>   //   logLevel: 'INFO',
>   //   allowedSignUpEmailDomains: ['example.co.jp'],
>   //
>   //   allowedIpV4AddressRanges: [
>   //     '192.168.0.1/32', // 源内Webアプリへのアクセスを許すIPアドレス
>   //     '192.168.0.2/32', // 源内Webアプリへのアクセスを許すIPアドレス
>   //   ],
>   // },
>   // 他環境も必要に応じて定義を追加可能

デプロイ

以下のコマンドを実行して環境をAWSにデプロイしていきます。リポジトリのルートフォルダに移動します。
このコマンドを実行することでCFnのスタックが作成されていきます。
デプロイする前にEIPが2つ作れるか、VPCが1つ作れるかを確認しておくと良いと思います。

root@ubuntu-cui:~/genai-web/packages/cdk# cd ../..
root@ubuntu-cui:~/genai-web# pwd
/root/genai-web
root@ubuntu-cui:~/genai-web# npm -w packages/cdk run cdk -- deploy --all --require-approval never -c env=-selfHostingDev

~中略~

✨  Deployment time: 610.41s

Outputs:
GenerativeAiUseCasesStack-selfHostingDev.APIApiEndpoint036547C6 = https://z2fx3jkyce.execute-api.ap-northeast-1.amazonaws.com/api/
GenerativeAiUseCasesStack-selfHostingDev.ApiEndpoint = https://z2fx3jkyce.execute-api.ap-northeast-1.amazonaws.com/api/
GenerativeAiUseCasesStack-selfHostingDev.AppEnv = dev-genai
GenerativeAiUseCasesStack-selfHostingDev.EndpointNames = []
GenerativeAiUseCasesStack-selfHostingDev.ExAppTableName = GenerativeAiUseCasesStack-selfHostingDev-TeamAccessControlStackNestedStackTeamAccessCo-1DR3EKPF82G7M-TeamAccessControlExAppTable45FCA18E-1UN3NZJC7EQWL
GenerativeAiUseCasesStack-selfHostingDev.GenUusecasesTableName = GenerativeAiUseCasesStack-selfHostingDev-DatabaseTableF104A135-3QQ96ZELPWB3
GenerativeAiUseCasesStack-selfHostingDev.GovaisForHomepage = W10=
GenerativeAiUseCasesStack-selfHostingDev.HiddenUseCases = {}
GenerativeAiUseCasesStack-selfHostingDev.IdPoolId = ap-northeast-1:68174494-f0e4-4d07-8197-2e9a6a30f25a
GenerativeAiUseCasesStack-selfHostingDev.ImageGenerateModelIds = ["amazon.nova-canvas-v1:0"]
GenerativeAiUseCasesStack-selfHostingDev.InvokeExAppHistoryTableName = GenerativeAiUseCasesStack-selfHostingDev-TeamAccessControlStackNestedStackTeamAccessCo-1DR3EKPF82G7M-TeamAccessControlInvokeExAppHistoryTable77A491E1-L1K2FJCLF5UV
GenerativeAiUseCasesStack-selfHostingDev.InvokeExAppTableName = GenerativeAiUseCasesStack-selfHostingDev-TeamAccessControlStackNestedStackTeamAccessCo-1DR3EKPF82G7M-TeamAccessControlTable43C5517B-VD0XE16RUXD
GenerativeAiUseCasesStack-selfHostingDev.ModelIds = ["jp.anthropic.claude-sonnet-4-6","amazon.nova-lite-v1:0","jp.anthropic.claude-haiku-4-5-20251001-v1:0","jp.anthropic.claude-sonnet-4-5-20250929-v1:0"]
GenerativeAiUseCasesStack-selfHostingDev.ModelRegion = ap-northeast-1
GenerativeAiUseCasesStack-selfHostingDev.OptimizePromptFunctionArn = arn:aws:lambda:ap-northeast-1:535002847634:function:GenerativeAiUseCasesStack-APIOptimizePromptFunctio-cqUFWZr6oVGC
GenerativeAiUseCasesStack-selfHostingDev.PredictStreamFunctionArn = arn:aws:lambda:ap-northeast-1:535002847634:function:GenerativeAiUseCasesStack-APIPredictStream44DDBC25-eB5pr0Shk0jS
GenerativeAiUseCasesStack-selfHostingDev.Region = ap-northeast-1
GenerativeAiUseCasesStack-selfHostingDev.SamlAuthEnabled = false
GenerativeAiUseCasesStack-selfHostingDev.SamlCognitoDomainName =
GenerativeAiUseCasesStack-selfHostingDev.SamlCognitoFederatedIdentityAdditionalProviderNames = []
GenerativeAiUseCasesStack-selfHostingDev.SamlCognitoFederatedIdentityPrimaryProviderName =
GenerativeAiUseCasesStack-selfHostingDev.SelfSignUpEnabled = false
GenerativeAiUseCasesStack-selfHostingDev.TeamAccessControlApiEndpoint = https://l1uymc3f8d.execute-api.ap-northeast-1.amazonaws.com/api/
GenerativeAiUseCasesStack-selfHostingDev.TeamAccessControlTableName = GenerativeAiUseCasesStack-selfHostingDev-TeamAccessControlStackNestedStackTeamAccessCo-1DR3EKPF82G7M-TeamAccessControlTable43C5517B-VD0XE16RUXD
GenerativeAiUseCasesStack-selfHostingDev.UserPoolClientId = 3alvuvs5s9vsops733eke8a14
GenerativeAiUseCasesStack-selfHostingDev.UserPoolId = ap-northeast-1_5Xt7VsMYo
GenerativeAiUseCasesStack-selfHostingDev.WebUrl = https://d1cduaw3r22u4e.cloudfront.net
Stack ARN:
arn:aws:cloudformation:ap-northeast-1:535002847634:stack/GenerativeAiUseCasesStack-selfHostingDev/854d8690-4e1b-11f1-b9bf-06e973a5c2db

✨  Total time: 629.48s

デプロイが成功するとバージニアリージョンに以下2つのスタックが作成されます。

  • AppDomainStack-selfHostingDev
  • CloudFrontWafStack-selfHostingDev

東京リージョンにも2つのスタック(うち1つはネスト)が作成されます。

  • GenerativeAiUseCasesStack-selfHostingDev
  • GenerativeAiUseCasesStack-selfHostingDev-TeamAccessControlStackNestedStackTeamAccessCo-1DR3EKPF82G7M

CFを見ると1つデプロイされているので、そのドメインにWebブラウジングします。

以下のようなログイン画面が出ればデプロイは成功です。
これにログイン出来るユーザを作成します。

ユーザ作成

Cognitoにアクセスします。ユーザを作成を押下します。

Eメールで招待を送信
Eメールアドレスを検証済みとしてマークする
パスワードを任意のものを指定
この状態で作成します。

お好みですが、作成したユーザをSystemAdminGroupに追加します。

源内にログインします。
Cognitoに登録したユーザとパスワードを指定します。
この後パスワードを変更する画面が表示されるので、任意のものに変更します。

ログインすることが出来ました。

チャットタブを押下するとモデルを選ぶことが出来ます。
Nova Liteを選択して適当に質問を投げてみます。ちゃんと帰ってくればOKです。

DynamoDBのテーブルを見ると、チャットの履歴が格納されています。

環境削除

cdk destroyコマンドを実行する。

root@ubuntu-cui:~/genai-web# npm -w packages/cdk run cdk -- destroy --all --force -c env=-selfHostingDev

コマンド完了後、AWSコンソールの CloudFormation画面を開き、GenerativeAiUseCasesStack... などのスタックがすべて消えているか確認する。(もし DELETE_FAILED になっていたら、S3を空にしてから手動でスタックを削除する。)

S3、DynamoDB、Cognito の画面を見に行き、残っているリソースを手動で削除します。
私の環境では特に残っておりませんでした。

以上!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?