はじめに
デジタル庁が行政職員向けの生成AI利活用基盤として発表している 「源内(げんない)」 をAWS環境に構築してみました。
本記事の内容は個人の検証によるものです。本番運用や行政利用を想定したものではありません。最新・正確な情報は公式リポジトリを参照してください。
源内とは
GenUとの関係
源内はAWSのOSSである GenU をベースに、デジタル庁が行政向け機能を追加・改修したものです。
2026年5月28日より全府省庁の約18万人の政府職員を対象とした大規模実証が開始されており、2026年5月29日時点では約10万人の政府職員が源内を利用できる状況のようです。
デプロイ前の準備
必要なツール
| ツール | 用途 |
|---|---|
| AWS CLI | デプロイ先AWSアカウントへの認証 |
| AWS CDK CLI(v2系) | CDKの実行 |
| Node.js |
.node-version または mise.toml で指定されたバージョン |
| jq | JSON操作 |
AWS CLI
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html
AWS CDK CLI
https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/getting-started.html
Node.js
https://nodejs.org/ja/download
jq
https://jqlang.org/download/
EIPクォータの事前確認
現状源内はデフォルトで内部VPC用にNATゲートウェイを2台立てるため、最低でも EIPが2個 必要です。AWSアカウントのデフォルト上限は 5個 なので、他の検証スタックなどでEIPを使っている場合はクォータに余裕があるか事前に確認しておきましょう。
# 現在のEIP使用数
aws ec2 describe-addresses --region ap-northeast-1 --query "length(Addresses)" --output text
# EIPクォータ確認
aws service-quotas get-service-quota \
--service-code ec2 \
--quota-code L-0263D0A3 \
--region ap-northeast-1 \
--query "Quota.{Name:QuotaName,Value:Value}" --output table
デプロイ手順
1. リポジトリをクローン
git clone https://github.com/digital-go-jp/genai-web.git
cd genai-web
Windows環境では、クローン先のパスに日本語を含めないでください。 ts-nodeが STATUS_STACK_BUFFER_OVERRUN(エラーコード 3221226505)でクラッシュします。C:\work\genai-web のようにASCIIのみのパスで作業しましょう。
2. 依存関係インストール
npm ci
3. CDK Bootstrap(初回のみ)
npm -w packages/cdk run cdk -- bootstrap
4. パラメータファイルの準備
テンプレートを コピーして 自分の環境用のパラメータファイルを作成します。
cd packages/cdk/env-parameters
cp self-hosting-template.ts self-hosting-dev.ts
self-hosting-dev.ts の主な編集箇所は以下です。
今回はselfHostingTemplateParams を selfHostDevParamsに変えています。
import { StackInput } from '../lib/stack-input';
export const selfHostingDevParams: Partial<StackInput> = {
// 環境名(リソース名のサフィックスになる)(必須)
appEnv: 'dev',
// ログレベル(DEBUG,INFO,WARN,ERRORのどれか)(必須)
logLevel: 'INFO',
// セルフサインアップ/許可ドメイン(任意)
selfSignUpEnabled: true,
allowedSignUpEmailDomains: ['example.co.jp'],
// WAFで許可するIPv4レンジ(自分のグローバルIP/32 など)(任意)
allowedIpV4AddressRanges: ['xxx.xxx.xxx.xxx/32'],
allowedIpV6AddressRanges: null,
// カスタムドメイン設定(カスタムドメインを使用する場合必須)
hostName: 'genai',
domainName: 'example.com',
hostedZoneId: 'Z123456789ABC',
certificateArn: 'arn:aws:acm:us-east-1:123456789012:certificate/your-certificate-id',
// 利用するBedrockモデル
modelRegion: 'ap-northeast-1',
modelIds: [
'amazon.nova-lite-v1:0',
'jp.anthropic.claude-haiku-4-5-20251001-v1:0',
'jp.anthropic.claude-sonnet-4-6',
],
};
5. parameter.ts への登録
packages/cdk/parameter.ts の deploy_envs オブジェクトに、作成したパラメータファイルをインポートして追加します。GenU構築時にはない工程ですが、この工程を飛ばすとあらゆるトラブルの原因になります。
import * as cdk from 'aws-cdk-lib';
import { preprocessContextValues, StackInput, stackInputSchema } from './lib/stack-input';
import { selfHostingDevParams } from './env-parameters/self-hosting-dev'; // ← 追加:定数名やファイル名に合わせる
const deploy_envs: Record<string, Partial<StackInput>> = {
'dev': selfHostingDevParams, // ← 追加:デプロイコマンドの -c env=dev と完全一致させる
};
// 以下省略(getParams関数はそのまま)
deploy_envs のキー名と、デプロイコマンドの -c env= の値は 完全一致 させる必要があります。一致しないと deploy_envs[params.env] が undefined で、self-hosting-dev.ts の中身が一切反映されません。
6. デプロイ実行
ルートディレクトリに戻ってから実行します。
npm -w packages/cdk run cdk -- deploy --all --require-approval never -c env=dev
初回デプロイでも 10分~15分で完了します。GenUと所要時間はあまり変わりません。
7. 動作確認
デプロイ完了時の Outputs に CloudFront URL が出力されます。
GenerativeAiUseCasesStackdev.WebUrl = https://dxxxxxxxxxxxxx.cloudfront.net
ブラウザでアクセスして、ログイン画面 → セルフサインアップ → トップページが表示されればデプロイ成功です。
ハマりどころ集
1. parameter.ts の deploy_envs に登録し忘れる
公式手順に書かれていますが、GenUとは違い複数の設定ファイルを編集する必要があります。
cdk.jsonで設定してる方は躓くことか多いんじゃないかなと思います。
症状:-c env=dev を渡してもパラメータが空のまま読み込まれ、appEnv が空文字になる。リソース名が壊れたり、WAFのWebACLにルールが1つも作られず(allowedIpV4AddressRanges が null 扱い)、CloudFront経由のアクセスが全て Block されます。
対処:手順5を必ず実施。-c env= の値と deploy_envs のキーは完全一致させる。
2. EIP上限5でNATゲートウェイ2個分のEIPが取れない
源内を構築するとデフォルトでEIPが2個新規確保されます(NATGW用)。AWSアカウントのEIP上限はデフォルト5個であるため他の検証スタックや業務リソースで既に5個近く使っていると、ここで弾かれます。
同一AWSアカウント・同一リージョンに複数の源内をデプロイしようとすると同じ問題に直面します。
症状:
The maximum number of addresses has been reached.
(AWS::EC2::EIP TeamAccessControlInvokeExAppVpcInvokeExAppVpcnateip*)
対処:
- 不要なEIPを解放
- Service QuotasでEIP上限引き上げ申請(10個推奨)
- 申請ステータスが「保留中」のままでは実効値に反映されないので、承認(CASE_CLOSED)を待つ
# 承認状況の確認
aws service-quotas list-requested-service-quota-change-history-by-quota \
--service-code ec2 \
--quota-code L-0263D0A3 \
--region ap-northeast-1 \
--query "RequestedQuotas[0].{Status:Status,Requested:DesiredValue,Date:LastUpdated}"
3. Windows + 日本語パスで ts-node がクラッシュ
手順1にも記載しましたが、デプロイに使うフォルダのパスに日本語が含まれているとエラーが発生します。
症状:
npx ts-node --prefer-ts-exts bin/generative-ai-use-cases.ts:
Subprocess exited with error 3221226505
対処:作業ディレクトリを C:\work\genai-web のようにASCIIのみのパスに変更する。
4. Bedrockのモデル指定で Unsupported Model Name
self-hosting-template.ts にまだ未対応のモデルを書くとエラーが発生します。(GenU同様)
症状:
Error: Unsupported Model Name: amazon.nova-2-lite-v1:0
at new Api (.../packages/cdk/lib/construct/api.ts:80:15)
対処:自分のリージョンで利用可能・かつ Bedrock Console でアクセス権を有効化済みのモデルだけを modelIds に列挙する。
環境の削除
npm -w packages/cdk run cdk -- destroy --all -c env=dev
まとめ
- 源内はデジタル庁公式の生成AI基盤OSSで、GenUをベースに行政向けに拡張されたもの
- AWS CDKでデプロイでき、必要なのは AWS CLI / CDK CLI / Node.js / jq
-
self-hosting-template.tsをコピー → 編集 →parameter.tsのdeploy_envsに登録 →cdk deployの流れ - リージョンは ap-northeast-1 を推奨、EIP上限は事前確認、Windows環境はASCIIパスで作業
見た目もGenUからガラッと変わっており行政職員向けのように感じました。
色々と組み合わせて使えるようなのでそちらもやってみたいなと思っています。
思ったより苦戦したので悔しいです...
