はじめに
皆さん、こんにちは。
私は業務でデータ利活用基盤を取り扱っていること、2024 AWS Japan Top Engineer に選出されたということから、AWS GenU およびそれに必要なデータ基盤の探求 (Snowflake, dbt, Iceberg, etc) に取り組む必要があると考えています。
本投稿では、GenU のデプロイオプションを詳細に解説します。
自身そして閲覧して頂いた皆様の GenU への理解が少しでも深まり、生成 AI の民主化につながっていければと考えています。
GenU とは
GenU は生成 AI を安全に業務活用するための、ビジネスユースケース集です。
バックエンドは AWS で、フロントエンドは Vite + React で動作します。
2025/3/10 時点の GenU のバックエンドについては、14 回に分けて解説していますので、詳しく知りたい方はお読みいただけると嬉しいです。
- ①AWS CDK のセットアップ
- ②AWS CDK の動作確認
- ③GenU の概要
- ④GenU CDK スタックの概要
- ⑤CloudFrontWafStack スタックの解説
- ⑥RagKnowledgeBaseStack スタックの解説
- ⑦WebSearchAgentStack スタックの解説
- ⑧GuardrailStack スタックの解説
- ⑨GenerativeAiUseCasesStack > Auth スタックの解説
- ⑩GenerativeAiUseCasesStack > Database, Api スタックの解説
- ⑪GenerativeAiUseCasesStack > CommonWebAcl, Web, Rag スタックの解説
- ⑫GenerativeAiUseCasesStack > RagKnowledgeBase, UseCaseBuilder, Transcribe スタックの解説
- ⑬DashBoard スタックの解説
- ⑭GenU の Outputs の解説
GenU のデプロイオプション
GenU のデプロイオプションを解説します。
デプロイオプションは GenU の構築オプション設定であり、機能の有効化/無効化や、既存の生成 AI 基盤モデルを利用する場合にモデル ID を指定することができます。
packages/cdk/cdk.json
および packages/cdk/parameter.ts
でデプロイオプションを指定することができます。
両方に値が設定されている場合、parameter.ts が優先されます。
公式では、複数環境の設定を定義できるため、新規に構築する場合は parameter.ts での指定を推奨する、としています。
デプロイオプションの例 ①
{
"app": "npx ts-node --prefer-ts-exts bin/generative-ai-use-cases.ts",
"watch": {
"include": [
~~ 略 ~~
],
"exclude": [
~~ 略 ~~
]
},
"context": {
"env": "",
"ragEnabled": false
~~ 略 ~~
}
}
上記例では、cdk.json
の env
は指定されておらず、ragEnabled
オプションは false
となっています。
この場合、parameter.ts
の設定は無視され、すべて cdk.json
の context
の値を使用してデプロイされます。
デプロイオプションの例 ②
{
"app": "npx ts-node --prefer-ts-exts bin/generative-ai-use-cases.ts",
"watch": {
"include": [
~~ 略 ~~
],
"exclude": [
~~ 略 ~~
]
},
"context": {
"env": "prod",
"ragEnabled": false
~~ 略 ~~
}
}
この例では、cdk.json
の env
は prod
を指定しており、ragEnabled
オプションは false
となっています。
加えて、parameter.ts
が以下の設定だった場合を考えます。
const envs: Record<string, Partial<StackInput>> = {
dev: {
ragEnabled: false,
~~ 略 ~~
},
staging: {
ragEnabled: false,
~~ 略 ~~
},
prod: {
ragEnabled: true,
~~ 略 ~~
},
};
この場合、parameter.ts
の値が優先されるため、最終的な ragEnabled
は true
としてデプロイされます。
デプロイオプションで設定できる値
デプロイオプションで設定できる値は、cdk.json や stack-input.ts が参考になります。
なお、この記事に記載のコードやデプロイオプションは、あくまでもこの記事の執筆時点(2025/3/30)のもの であることにご留意ください。
各デプロイオプションの解説
共通のデプロイオプション例
{
"context": {
"env": "dev"
}
// 東京リージョンを優先しつつ、別リージョンの最新のモデルも使いたい場合
const envs: Record<string, Partial<StackInput>> = {
dev: {
modelRegion: 'ap-northeast-1',
modelIds: [
{modelId: 'us.anthropic.claude-3-7-sonnet-20250219-v1:0', region: 'us-east-1'},
'apac.anthropic.claude-3-5-sonnet-20241022-v2:0',
'anthropic.claude-3-5-sonnet-20240620-v1:0',
{modelId: 'us.anthropic.claude-3-5-haiku-20241022-v1:0', region: 'us-east-1'},
'apac.amazon.nova-pro-v1:0',
'apac.amazon.nova-lite-v1:0',
'apac.amazon.nova-micro-v1:0',
{modelId: 'us.deepseek.r1-v1:0', region: 'us-east-1'},
{modelId: 'us.meta.llama3-3-70b-instruct-v1:0', region: 'us-east-1'},
{modelId: 'us.meta.llama3-2-90b-instruct-v1:0', region: 'us-east-1'},
],
imageGenerationModelIds: [
'amazon.nova-canvas-v1:0',
{modelId: 'stability.sd3-5-large-v1:0', region: 'us-west-2'},
{modelId: 'stability.stable-image-core-v1:1', region: 'us-west-2'},
{modelId: 'stability.stable-image-ultra-v1:1', region: 'us-west-2'},
],
videoGenerationModelIds: [
'amazon.nova-reel-v1:0',
{modelId: 'luma.ray-v2:0', region: 'us-west-2'},
],
endpointNames: [
"jumpstart-dft-hf-llm-rinna-3-6b-instruction-ppo-bf16",
"jumpstart-dft-bilingual-rinna-4b-instruction-ppo-bf16"
],
crossAccountBedrockRoleArn: 'arn:aws:iam::[アカウントID]:role/[ロール名]',
},
};
共通のデプロイオプション
env
cdk.json のみ設定可能。構築する環境を指定する。デフォルトは空文字。
- 例: "prod"
modelRegion
使用する生成 AI 基盤モデルのリージョンを指定する。デフォルトは us-east-1。
modelIds
テキスト生成に使用する生成 AI 基盤モデルの ID を指定する。デフォルトは以下の配列。
- "us.anthropic.claude-3-5-sonnet-20241022-v2:0"
- "us.anthropic.claude-3-5-haiku-20241022-v1:0"
- "us.amazon.nova-pro-v1:0"
- "us.amazon.nova-lite-v1:0"
- "us.amazon.nova-micro-v1:0"
別リージョンのモデルを使用したい場合は、{modelId: '[モデル名]', region: '[リージョンコード]'} で指定する。
imageGenerationModelIds
画像生成に使用する生成 AI 基盤モデルの ID を指定する。デフォルトは以下の配列。
- "amazon.nova-canvas-v1:0"
別リージョンのモデルを使用したい場合は、{modelId: '[モデル名]', region: '[リージョンコード]'} で指定する。
videoGenerationModelIds
動画生成に使用する生成 AI 基盤モデルの ID を指定する。デフォルトは以下の配列。
- "amazon.nova-reel-v1:0"
別リージョンのモデルを使用したい場合は、{modelId: '[モデル名]', region: '[リージョンコード]'} で指定する。
endpointNames
デプロイ済の SageMaker エンドポイントを使用する場合、エンドポイント名のリストを指定する。デフォルトは空配列。
crossAccountBedrockRoleArn
異なる AWS アカウントの Becrock を呼び出す際に指定する。デフォルトは空。
一度 GenU を作成した後に設定を追加する必要がある。
ユースケース表示制御のデプロイオプション例
// 特定のユースケースを非表示にする
const envs: Record<string, Partial<StackInput>> = {
dev: {
hiddenUseCases: {
generate: true, // 文章生成を非表示
summarize: true, // 要約を非表示
writer: true, // 執筆を非表示
translate: true, // 翻訳を非表示
webContent: true, // Web コンテンツ抽出を非表示
image: true, // 画像生成を非表示
video: true, // 動画生成を非表示
videoAnalyzer: true, // 映像分析を非表示
diagram: true, // ダイアグラム生成を非表示
}
},
};
// RAG (Kendra), RAG (ナレッジベース), Agent, ガードレール, ユースケースビルダーを有効化する
// 画像生成ユースケース、動画生成ユースケースを無効化する
const envs: Record<string, Partial<StackInput>> = {
dev: {
ragEnabled: true,
ragKnowledgeBaseEnabled: true,
agentEnabled: true,
guardrailEnabled: true,
useCaseBuilderEnabled: true,
imageGenerationModelIds: [],
videoGenerationModelIds: [],
},
};
ユースケース表示制御のデプロイオプション
hiddenUseCases
子要素で指定したユースケース (GenU の機能) を非表示にする。デフォルトはすべて false。
以下の値が設定可能。
- generate: 文章生成
- summarize: 要約
- writer: 執筆
- translate: 翻訳
- webContent: Web コンテンツ抽出
- image: 画像生成
- video: 動画生成
- videoAnalyzer: 映像分析
- diagram: ダイアグラム生成
ragEnabled
Amazon Kendra を使用した RAG を構築する場合は true を指定する。RAG を構築する場合、比較的高額になるため注意。デフォルトは false。
ragKnowledgeBaseEnabled
ナレッジベースを使用した RAG を構築する場合は true を指定する。デフォルトは false。
agentEnabled
Agent チャットユースケースのスタックを作成するかを指定する。デフォルトは false。
guardrailEnabled
ガードレール (生成 AI の入出力に含まれる機密情報のフィルタリング機能) スタックを作成するかを指定する。デフォルトは false。
useCaseBuilderEnabled
ユースケースビルダースタックを作成するかを指定する。デフォルトは false。
imageGenerationModelIds
画像生成に使用する生成 AI 基盤モデルの ID を指定する。デフォルトは以下の配列。
- "amazon.nova-canvas-v1:0"
別リージョンのモデルを使用したい場合は、{modelId: '[モデル名]', region: '[リージョンコード]'} で指定する。
1 つ以上指定する場合、画像生成ユースケースが有効化される。
videoGenerationModelIds
動画生成に使用する生成 AI 基盤モデルの ID を指定する。デフォルトは以下の配列。
- "amazon.nova-reel-v1:0"
別リージョンのモデルを使用したい場合は、{modelId: '[モデル名]', region: '[リージョンコード]'} で指定する。
1 つ以上指定する場合、動画生成ユースケースが有効化される。
ログイン関連設定のデプロイオプション例
// amazon.com, amazon.jp のメールドメインに限り、ユーザ自身のサインアップを許可する場合
const envs: Record<string, Partial<StackInput>> = {
dev: {
selfSignUpEnabled: true,
allowedSignUpEmailDomains: ["amazon.com", "amazon.jp"],
},
};
// SAML認証を行う場合
const envs: Record<string, Partial<StackInput>> = {
dev: {
selfSignUpEnabled: false, // false が必須
allowedSignUpEmailDomains: null,
samlAuthEnabled: true,
samlCognitoDomainName: "your-preferred-name.auth.ap-northeast-1.amazoncognito.com",
samlCognitoFederatedIdentityProviderName: "EntraID",
},
};
ログイン関連設定のデプロイオプション例
selfSignUpEnabled
Cognito ログインアカウントをユーザ自身が作成できるか (サインアップできるか) を指定する。デフォルトは true。
allowedSignUpEmailDomains
サインアップ時に、特定のドメインのメールアドレスのみ許可する場合に指定する。デフォルトは null。
@をつけずに、配列形式で指定する。
samlAuthEnabled
Cognito ログインに Active Directory などの IdP が提供する SAML 認証機能を使用する場合に指定する。デフォルトは false。
samlCognitoDomainName
SAML 認証時に Cognito の App integration で設定する Cognito ドメイン名を指定する。デフォルトは null。
samlCognitoFederatedIdentityProviderName
SAML 認証時に Cognito の Sign-in experience で設定する IdP 名を指定する。デフォルトは null。
WAF 関連のデプロイオプション例
const envs: Record<string, Partial<StackInput>> = {
dev: {
allowedIpV4AddressRanges: ["192.168.0.0/24"],
allowedIpV6AddressRanges: ["2001:0db8::/32"],
allowedCountryCodes: ["JP"],
},
};
WAF 制限関連のデプロイオプション
allowedIpV4AddressRanges
Web アプリへのアクセスを IPv4 アドレスで制限したい場合に設定する。デフォルトは null。
allowedIpV6AddressRanges
Web アプリへのアクセスを IPv4 アドレスで制限したい場合に設定する。デフォルトは null。
allowedCountryCodes
Web アプリへのアクセスをアクセス元の国で制限したい場合に設定する。デフォルトは null。
カスタムドメイン関連のデプロイオプション例
const envs: Record<string, Partial<StackInput>> = {
dev: {
hostName: 'genai',
domainName: 'example.com',
hostedZoneId: 'XXXXXXXXXXXXXXXXXXXX',
},
};
カスタムドメイン関連のデプロイオプション
hostName
Web サイトの URL としてカスタムドメインを使用する場合に Web サイトのホスト名を設定する。デフォルトは null。
以下の domainName と hostedZoneId が事前に作成されていれば、hostName で指定した A レコードが自動で作成される。
domainName
Web サイトの URL としてカスタムドメインを使用する場合に、事前作成した Route 53 パブリックホストゾーンのドメイン名を設定する。デフォルトは null。
hostedZoneId
Web サイトの URL としてカスタムドメインを使用する場合に、事前作成した Route 53 パブリックホストゾーンのゾーン ID を設定する。デフォルトは null。
モニタリング関連のデプロイオプション例
const envs: Record<string, Partial<StackInput>> = {
dev: {
dashboard: true,
},
};
モニタリング関連のデプロイオプション
dashboard
モニタリング用の Amazon CloudWatch ダッシュボードを作成する場合に指定する。デフォルトは false。
RAG (ナレッジベース) 関連のデプロイオプション例
const envs: Record<string, Partial<StackInput>> = {
dev: {
ragKnowledgeBaseEnabled: true,
ragKnowledgeBaseId: 'XXXXXXXXXX',
ragKnowledgeBaseStandbyReplicas: false,
embeddingModelId: 'amazon.titan-embed-text-v2:0',
ragKnowledgeBaseAdvancedParsing: true,
ragKnowledgeBaseAdvancedParsingModelId: 'anthropic.claude-3-sonnet-20240229-v1:0',
rerankingModelId: 'amazon.rerank-v1:0',
queryDecompositionEnabled: true,
ragKnowledgeBaseBinaryVector: false,
},
};
RAG (ナレッジベース) 構築関連のデプロイオプション
ragKnowledgeBaseEnabled
ナレッジベースを使用した RAG を構築する場合は true を指定する。デフォルトは false。
ragKnowledgeBaseId
既存の ナレッジベースを利用する場合に、ナレッジベース ID を指定する。デフォルトは null。
null の場合、OpenSearch Serverless のナレッジベースが作成される。
ragKnowledgeBaseStandbyReplicas
false の場合、OpenSearch Serverless をシングル AZ で動作させる。true の場合、マルチ AZ で動作させる。デフォルトは false。
コストと可用性を鑑みて設定する。
embeddingModelId
非構造化データのベクトル化に用いる Embedding モデルを指定する。デフォルトは amazon.titan-embed-text-v2:0。
以下のいずれかが指定できる。
- "amazon.titan-embed-text-v1"
- "amazon.titan-embed-text-v2:0"
- "cohere.embed-multilingual-v3"
- "cohere.embed-english-v3"
RAG (ナレッジベース) 精度向上、コスト削減関連のデプロイオプション
ragKnowledgeBaseAdvancedParsing
RAG の精度向上のために、非構造化データ内の表やグラフから情報を分析したり抽出したりする Advanced Parsing を利用するかを指定する。デフォルトは false。
ragKnowledgeBaseAdvancedParsingModelId
Advanced Parsing を行う際に利用するモデル ID を指定する。デフォルトは anthropic.claude-3-sonnet-20240229-v1:0。
以下のいずれかが指定できる。
- "anthropic.claude-3-sonnet-20240229-v1:0"
- "anthropic.claude-3-haiku-20240307-v1:0"
rerankingModelId
RAG の精度向上のための Re-ranking 用モデルを指定する。デフォルトは null。
以下のいずれかが指定できる。
- "amazon.rerank-v1:0"
- "cohere.rerank-v3-5:0"
queryDecompositionEnabled
RAG の精度向上のためのクエリ分解 (Query Decomposition) を利用するかを指定する。デフォルトは false。
ragKnowledgeBaseBinaryVector
コスト最適化のための Binary Vector Embedding 機能を利用するかを指定する。デフォルトは false。
Agent チャット関連のデプロイオプション例
const envs: Record<string, Partial<StackInput>> = {
dev: {
agentEnabled: true,
searchAgentEnabled: true,
searchApiKey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
agents: [
{
displayName: 'MyCustomAgent',
agentId: 'XXXXXXXXX',
aliasId: 'YYYYYYYY',
},
],
inlineAgents: true,
},
};
Agent チャット関連のデプロイオプション
agentEnabled
Agent チャットユースケースのスタックを作成するかを指定する。デフォルトは false。
searchAgentEnabled
検索 Agent を使用するかを指定する。デフォルトは false。
使用する場合、Agent チャットユースケース内で外部 API を叩きにいくため、セキュリティポリシー等の確認が必要。
searchApiKey
検索エンジンの API キーを指定する。デフォルトは空文字。
デフォルトでは、検索エンジンは Brave Search API の Data for AI を使用する。
agents
自作のカスタム Bedrock Agent を使用する場合、Agent の情報を設定する。デフォルトは空配列。
inlineAgents
インライン Agent モードを使用する場合に設定する。デフォルトは false。
インライン Agent モードを使用すると、Agent チャットユースケースは表示されずに、他のユースケースで Agent を使用できるようになる。
ガードレール関連のデプロイオプション例
const envs: Record<string, Partial<StackInput>> = {
dev: {
guardrailEnabled: true,
},
};
ガードレール関連のデプロイオプション
guardrailEnabled
ガードレール (生成 AI の入出力に含まれる機密情報のフィルタリング機能) スタックを作成するかを指定する。デフォルトは false。
Flow チャット関連のデプロイオプション例
const envs: Record<string, Partial<StackInput>> = {
dev: {
flows: [
{
flowId: "XXXXXXXXXX",
aliasId: "YYYYYYYYYY",
flowName: "WhatIsItFlow",
description: "任意のキーワードをウェブ検索して、説明を返すフローです。文字を入力してください",
},
{
flowId: "ZZZZZZZZZZ",
aliasId: "OOOOOOOOOO",
flowName: "RecipeFlow",
description: "与えられたJSONをもとに、レシピを作成します。\n{\"dish\": \"カレーライス\", \"people\": 3} のように入力してください。",
},
{
flowId: "PPPPPPPPPP",
aliasId: "QQQQQQQQQQQ",
flowName: "TravelPlanFlow",
description: "与えられた配列をもとに、旅行計画を作成します。\n[{\"place\": \"東京\", \"day\": 3}, {\"place\": \"大阪\", \"day\": 2}] のように入力してください。",
}
]
},
};
Flow チャット関連のデプロイオプション
flows
自作のカスタム Bedrock Flow を使用する場合、Flow の情報を設定する。デフォルトは空配列。
RAG (Amazon Kendra) のデプロイオプション例
// 新規に Kendra インデックスを作成
const envs: Record<string, Partial<StackInput>> = {
dev: {
ragEnabled: true,
kendraIndexLanguage: 'jp',
kendraIndexArn: null,
kendraDataSourceBucketName: null,
kendraIndexScheduleEnabled: true,
kendraIndexScheduleCreateCron: { "minute": "0", "hour": "23", "month": "\*", "weekDay": "SUN-THU" },
kendraIndexScheduleDeleteCron: { "minute": "0", "hour": "11", "month": "\*", "weekDay": "MON-FRI" }
},
};
// 既存の Kendra インデックスを利用
const envs: Record<string, Partial<StackInput>> = {
dev: {
ragEnabled: true,
kendraIndexLanguage: 'jp',
kendraIndexArn: 'arn:aws:kendra:ap-northeast-1:111122223333:index/0123456789abcdef',
kendraDataSourceBucketName: 'kendra-datasource-111122223333',
kendraIndexScheduleEnabled: false,
kendraIndexScheduleCreateCron: null,
kendraIndexScheduleDeleteCron: null
},
};
RAG (Amazon Kendra) 構築関連のデプロイオプション
ragEnabled
Amazon Kendra を使用した RAG を構築する場合は true を指定する。RAG を構築する場合、比較的高額になるため注意。デフォルトは false。
kendraIndexLanguage
Amazon Kendra の使用言語を指定する。デフォルトは日本語の ja。
kendraIndexArn
既存の Amazon Kendra インデックスを利用する場合に、インデックスの ARN を指定する。デフォルトは null。
kendraDataSourceBucketName
既存の Amazon Kendra インデックスを利用する場合かつ、S3 データソースを利用している場合は、バケット名を指定する。デフォルトは null。
RAG (Amazon Kendra) コスト削減関連のデプロイオプション
kendraIndexScheduleEnabled
Amazon Kendra インデックスの料金を抑えるために、スケジュール作成/削除停止を行う場合は true を指定する。デフォルトは false。
-
注意事項: 既存の Amazon Kendra インデックスに対しては機能しないため注意。つまり
kendraIndexArn
は null であることが必要。
kendraIndexScheduleCreateCron
Amazon Kendra インデックスのスケジュール作成/削除を行う場合、作成スケジュールを cron 式で指定する。デフォルトは null。
kendraIndexScheduleDeleteCron
Amazon Kendra インデックスのスケジュール作成/削除を行う場合、削除スケジュールを cron 式で指定する。デフォルトは null。
ユースケースビルダー関連のデプロイオプション例
const envs: Record<string, Partial<StackInput>> = {
dev: {
useCaseBuilderEnabled: true,
},
};
ユースケースビルダー関連のデプロイオプション
useCaseBuilderEnabled
ユースケースビルダースタックを作成するかを指定する。デフォルトは false。
その他
anonymousUsageTracking
直訳で「匿名の使用状況追跡」だがその機能は見当たらない。デフォルト値は true。
現状、GenerativeAiUseCasesStack の description 設定のみに使用されている。
// GenU Stack
const generativeAiUseCasesStack = new GenerativeAiUseCasesStack(
app,
`GenerativeAiUseCasesStack${params.env}`,
{
env: {
account: params.account,
region: params.region,
},
+ description: params.anonymousUsageTracking
? 'Generative AI Use Cases JP (uksb-1tupboc48)'
: undefined,
params: params,
crossRegionReferences: true,
// RAG Knowledge Base
knowledgeBaseId: ragKnowledgeBaseStack?.knowledgeBaseId,
knowledgeBaseDataSourceBucketName:
ragKnowledgeBaseStack?.dataSourceBucketName,
// Agent
agents: agentStack?.agents,
// Video Generation
videoBucketRegionMap,
// Guardrail
guardrailIdentifier: guardrail?.guardrailIdentifier,
guardrailVersion: 'DRAFT',
// WAF
webAclId: cloudFrontWafStack?.webAclArn,
// Custom Domain
cert: cloudFrontWafStack?.cert,
}
);
AWS CDK オプション
その他の AWS CDK オプションは以下の通りです。
@aws-cdk/aws-lambda:recognizeLayerVersion
デフォルト値は true。
@aws-cdk/core:checkSecretUsage
デフォルト値は true。
@aws-cdk/core:target-partitions
: 以下の配列
- "aws"
- "aws-cn"
@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver
デフォルト値は true。
@aws-cdk/aws-ec2:uniqueImdsv2TemplateName
デフォルト値は true。
@aws-cdk/aws-ecs:arnFormatIncludesClusterName
デフォルト値は true。
@aws-cdk/aws-iam:minimizePolicies
デフォルト値は true。
@aws-cdk/core:validateSnapshotRemovalPolicy
デフォルト値は true。
@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName
デフォルト値は true。
@aws-cdk/aws-s3:createDefaultLoggingPolicy
デフォルト値は true。
@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption
デフォルト値は true。
@aws-cdk/aws-apigateway:disableCloudWatchRole
デフォルト値は true。
@aws-cdk/core:enablePartitionLiterals
デフォルト値は true。
@aws-cdk/aws-events:eventsTargetQueueSameAccount
デフォルト値は true。
@aws-cdk/aws-iam:standardizedServicePrincipals
デフォルト値は true。
@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker
デフォルト値は true。
@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName
デフォルト値は true。
@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy
デフォルト値は true。
@aws-cdk/aws-route53-patters:useCertificate
デフォルト値は true。
@aws-cdk/customresources:installLatestAwsSdkDefault
: false,
デフォルト値は false。
@aws-cdk/aws-rds:databaseProxyUniqueResourceName
デフォルト値は true。
@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup
デフォルト値は true。
@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId
デフォルト値は true。
@aws-cdk/aws-ec2:launchTemplateDefaultUserData
デフォルト値は true。
@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments
デフォルト値は true。
@aws-cdk/aws-redshift:columnId
デフォルト値は true。
@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2
デフォルト値は true。
@aws-cdk/aws-ec2:restrictDefaultSecurityGroup
デフォルト値は true。
@aws-cdk/aws-apigateway:requestValidatorUniqueId
デフォルト値は true。
@aws-cdk/aws-kms:aliasNameRef
デフォルト値は true。
@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig
デフォルト値は true。
@aws-cdk/core:includePrefixInUniqueNameGeneration
デフォルト値は true。
@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby
デフォルト値は true。
デプロイオプションの設定例
以下がデプロイオプションの設定例です。
とにかく早く始める
デフォルトで構築します。
CloudFront にホストされた Web アプリが起動し、テキスト生成や画像生成を行うことができます。
個人でとりあえず使ってみる程度のオプションです。
{
"context": {
"env": "dev"
}
const envs: Record<string, Partial<StackInput>> = {
dev: {
},
};
- WAF: なし
- RAG (ナレッジベース) チャット: なし
- Agent チャット: なし
- ガードレール (機密情報フィルタ): なし
- GenU: あり
- Cognito ユーザプール, ID プール: あり
- DynamoDB テーブル: あり
- API GW (Lambda 関数): あり
- CloudFront にホストされた Web アプリケーション: あり
- RAG (Amazon Kendra) チャット: なし
- ユースケースビルダー: あり
- 翻訳, 文字起こし: あり
- モニタリングダッシュボード: なし
RAG 以外を有効化し、セキュリティも高める
コストを抑えつつ、セキュリティや Agent 機能などを開放します。
企業内で試しに利用する程度のオプションです。
{
"context": {
"env": "dev"
}
const envs: Record<string, Partial<StackInput>> = {
dev: {
// WAF
allowedIpV4AddressRanges: ["[企業のGIP CIDR]"],
// Agent チャット
agentEnabled: true,
// ガードレール
guardrailEnabled: true,
// モニタリングダッシュボード
dashboard: true,
},
};
- WAF: あり
- RAG (ナレッジベース) チャット: なし
- Agent チャット: あり ※ただし Web 検索エージェントは利用しない
- ガードレール (機密情報フィルタ): あり
- GenU: あり
- Cognito ユーザプール, ID プール: あり
- DynamoDB テーブル: あり
- API GW (Lambda 関数): あり
- CloudFront にホストされた Web アプリケーション: あり
- RAG (Amazon Kendra) チャット: なし
- ユースケースビルダー: あり
- 翻訳, 文字起こし: あり
- モニタリングダッシュボード: あり
可能な限り全機能を開放し、新規作成する
商用利用など競争優位性を確保するために RAG を有効化する際のオプションです。
{
"context": {
"env": "dev"
}
const envs: Record<string, Partial<StackInput>> = {
dev: {
// WAF
allowedIpV4AddressRanges: ["[企業のGIP CIDR]"],
allowedCountryCodes: ["JP"],
// RAG (ナレッジベース) チャット
ragKnowledgeBaseEnabled: true,
ragKnowledgeBaseStandbyReplicas: true,
embeddingModelId: 'amazon.titan-embed-text-v2:0',
ragKnowledgeBaseAdvancedParsing: true,
ragKnowledgeBaseAdvancedParsingModelId: 'anthropic.claude-3-sonnet-20240229-v1:0',
rerankingModelId: 'amazon.rerank-v1:0',
queryDecompositionEnabled: true,
ragKnowledgeBaseBinaryVector: true,
// Agent チャット
agentEnabled: true,
searchAgentEnabled: true,
searchApiKey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
agents: [
{
displayName: 'MyCustomAgent',
agentId: 'XXXXXXXXX',
aliasId: 'YYYYYYYY',
},
],
inlineAgents: true,
// ガードレール
guardrailEnabled: true,
// GenU Cognito
selfSignUpEnabled: true,
allowedSignUpEmailDomains: ["hogehoge.co.jp"],
// GenU Web アプリケーション
hostName: 'genai',
domainName: 'hogehoge.co.jp',
hostedZoneId: 'XXXXXXXXXXXXXXXXXXXX',
// GenU RAG (Kendra)
ragEnabled: true,
kendraIndexLanguage: 'jp',
kendraIndexScheduleEnabled: true,
kendraIndexScheduleCreateCron: { "minute": "0", "hour": "23", "month": "\*", "weekDay": "SUN-THU" },
kendraIndexScheduleDeleteCron: { "minute": "0", "hour": "11", "month": "\*", "weekDay": "MON-FRI" }
// モニタリングダッシュボード
dashboard: true,
},
};
- WAF: あり
- IPv4 でのアクセス制限
- 日本国内のみアクセス可能
- RAG (ナレッジベース) チャット: あり
- 新規にナレッジベースを作成
- OpenSearch Serverless をマルチ AZ で動作させる
- Advanced Parsing を有効化
- Re-ranking を有効化
- クエリ分解 (Query Decomposition) を有効化
- Binary Vector Embedding を有効化
- Agent チャット: あり
- Web 検索エージェントも有効化
- 独自エージェントを追加
- インライン Agent モードで各ユースケースで Agent を利用可能に
- ガードレール (機密情報フィルタ): あり
- GenU: あり
- Cognito ユーザプール, ID プール: あり
- 企業ドメイン hogehoge.co.jp のメールアドレスであればユーザ自身でサインアップが可能
- DynamoDB テーブル: あり
- API GW (Lambda 関数): あり
- CloudFront にホストされた Web アプリケーション: あり
- 独自ドメイン genai.hogehoge.co.jp でアクセス可能
- RAG (Amazon Kendra) チャット: あり
- Kendra インデックスを新規作成
- データソースを新規作成
- Kendra インデックスのスケジュール作成/削除を有効化
- 月曜日~金曜日の 08:00(JST)に Kendra インデックスの作成およびデータソースの同期
- 月曜日~金曜日の 20:00(JST)に Kendra インデックスの削除
※約 64%のコスト削減
- ユースケースビルダー: あり
- 翻訳, 文字起こし: あり
- Cognito ユーザプール, ID プール: あり
- モニタリングダッシュボード: あり
以上で GenU のデプロイオプションの解説は完了です。
(参考) GenU のバックエンド (CDK) 詳細解説投稿一覧
- ①AWS CDK のセットアップ
- ②AWS CDK の動作確認
- ③GenU の概要
- ④GenU CDK スタックの概要
- ⑤CloudFrontWafStack スタックの解説
- ⑥RagKnowledgeBaseStack スタックの解説
- ⑦WebSearchAgentStack スタックの解説
- ⑧GuardrailStack スタックの解説
- ⑨GenerativeAiUseCasesStack > Auth スタックの解説
- ⑩GenerativeAiUseCasesStack > Database, Api スタックの解説
- ⑪GenerativeAiUseCasesStack > CommonWebAcl, Web, Rag スタックの解説
- ⑫GenerativeAiUseCasesStack > RagKnowledgeBase, UseCaseBuilder, Transcribe スタックの解説
- ⑬DashBoard スタックの解説
- ⑭GenU の Outputs の解説