源内とは
源内(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ブラウジングします。

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

ユーザ作成
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 の画面を見に行き、残っているリソースを手動で削除します。
私の環境では特に残っておりませんでした。
以上!






