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?

デジタル庁の生成AI基盤「源内」をデプロイしてハマった話

0
Posted at

はじめに

デジタル庁が行政職員向けの生成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 の主な編集箇所は以下です。
今回はselfHostingTemplateParamsselfHostDevParamsに変えています。

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.tsdeploy_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

ブラウザでアクセスして、ログイン画面 → セルフサインアップ → トップページが表示されればデプロイ成功です。

源内ログイン画面.png

ハマりどころ集

1. parameter.tsdeploy_envs に登録し忘れる

公式手順に書かれていますが、GenUとは違い複数の設定ファイルを編集する必要があります。
cdk.jsonで設定してる方は躓くことか多いんじゃないかなと思います。

症状-c env=dev を渡してもパラメータが空のまま読み込まれ、appEnv が空文字になる。リソース名が壊れたり、WAFのWebACLにルールが1つも作られず(allowedIpV4AddressRangesnull 扱い)、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.tsdeploy_envs に登録 → cdk deploy の流れ
  • リージョンは ap-northeast-1 を推奨、EIP上限は事前確認、Windows環境はASCIIパスで作業

見た目もGenUからガラッと変わっており行政職員向けのように感じました。
色々と組み合わせて使えるようなのでそちらもやってみたいなと思っています。
思ったより苦戦したので悔しいです...

参考

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?