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?

GenU のデプロイオプション詳細解説

Last updated at Posted at 2025-03-30

はじめに

皆さん、こんにちは。

私は業務でデータ利活用基盤を取り扱っていること、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 回に分けて解説していますので、詳しく知りたい方はお読みいただけると嬉しいです。

GenU のデプロイオプション

GenU のデプロイオプションを解説します。

デプロイオプションは GenU の構築オプション設定であり、機能の有効化/無効化や、既存の生成 AI 基盤モデルを利用する場合にモデル ID を指定することができます。

packages/cdk/cdk.json および packages/cdk/parameter.ts でデプロイオプションを指定することができます。

両方に値が設定されている場合、parameter.ts が優先されます。
公式では、複数環境の設定を定義できるため、新規に構築する場合は parameter.ts での指定を推奨する、としています。

デプロイオプションの例 ①

cdk.jsonの例①
{
  "app": "npx ts-node --prefer-ts-exts bin/generative-ai-use-cases.ts",
  "watch": {
    "include": [
      ~~  ~~
    ],
    "exclude": [
      ~~  ~~
    ]
  },
  "context": {
    "env": "",
    "ragEnabled": false
    ~~  ~~
  }
}

上記例では、cdk.jsonenv は指定されておらず、ragEnabled オプションは false となっています。
この場合、parameter.ts の設定は無視され、すべて cdk.jsoncontext の値を使用してデプロイされます。

デプロイオプションの例 ②

cdk.jsonの例②
{
  "app": "npx ts-node --prefer-ts-exts bin/generative-ai-use-cases.ts",
  "watch": {
    "include": [
      ~~  ~~
    ],
    "exclude": [
      ~~  ~~
    ]
  },
  "context": {
    "env": "prod",
    "ragEnabled": false
    ~~  ~~
  }
}

この例では、cdk.jsonenvprod を指定しており、ragEnabled オプションは false となっています。

加えて、parameter.ts が以下の設定だった場合を考えます。

parameter.tsの例
const envs: Record<string, Partial<StackInput>> = {
  dev: {
    ragEnabled: false,
    ~~  ~~
  },
  staging: {
    ragEnabled: false,
    ~~  ~~
  },
  prod: {
    ragEnabled: true,
    ~~  ~~
  },
};

この場合、parameter.ts の値が優先されるため、最終的な ragEnabledtrue としてデプロイされます。

デプロイオプションで設定できる値

デプロイオプションで設定できる値は、cdk.jsonstack-input.ts が参考になります。
なお、この記事に記載のコードやデプロイオプションは、あくまでもこの記事の執筆時点(2025/3/30)のもの であることにご留意ください。

各デプロイオプションの解説

共通のデプロイオプション例

cdk.json
{
  "context": {
    "env": "dev"
}
parameter.ts
// 東京リージョンを優先しつつ、別リージョンの最新のモデルも使いたい場合
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 を作成した後に設定を追加する必要がある。

ユースケース表示制御のデプロイオプション例

parameter.ts
// 特定のユースケースを非表示にする
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, // ダイアグラム生成を非表示
    }
  },
};
parameter.ts
// 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 つ以上指定する場合、動画生成ユースケースが有効化される。

ログイン関連設定のデプロイオプション例

parameter.ts
// amazon.com, amazon.jp のメールドメインに限り、ユーザ自身のサインアップを許可する場合
const envs: Record<string, Partial<StackInput>> = {
  dev: {
    selfSignUpEnabled: true,
    allowedSignUpEmailDomains: ["amazon.com", "amazon.jp"],
  },
};
parameter.ts
// 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 関連のデプロイオプション例

parameter.ts
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。

カスタムドメイン関連のデプロイオプション例

parameter.ts
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。

モニタリング関連のデプロイオプション例

parameter.ts
const envs: Record<string, Partial<StackInput>> = {
  dev: {
    dashboard: true,
  },
};

モニタリング関連のデプロイオプション

dashboard
モニタリング用の Amazon CloudWatch ダッシュボードを作成する場合に指定する。デフォルトは false。

RAG (ナレッジベース) 関連のデプロイオプション例

parameter.ts
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 チャット関連のデプロイオプション例

parameter.ts
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 を使用できるようになる。

ガードレール関連のデプロイオプション例

parameter.ts
const envs: Record<string, Partial<StackInput>> = {
  dev: {
    guardrailEnabled: true,
  },
};

ガードレール関連のデプロイオプション

guardrailEnabled
ガードレール (生成 AI の入出力に含まれる機密情報のフィルタリング機能) スタックを作成するかを指定する。デフォルトは false。

Flow チャット関連のデプロイオプション例

parameter.ts
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) のデプロイオプション例

parameter.ts
// 新規に 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" }
  },
};
parameter.ts
// 既存の 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。

ユースケースビルダー関連のデプロイオプション例

parameter.ts
const envs: Record<string, Partial<StackInput>> = {
  dev: {
    useCaseBuilderEnabled: true,
  },
};

ユースケースビルダー関連のデプロイオプション

useCaseBuilderEnabled
ユースケースビルダースタックを作成するかを指定する。デフォルトは false。

その他

anonymousUsageTracking
直訳で「匿名の使用状況追跡」だがその機能は見当たらない。デフォルト値は true。
現状、GenerativeAiUseCasesStack の description 設定のみに使用されている。

create-stack.ts
  // 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 アプリが起動し、テキスト生成や画像生成を行うことができます。
個人でとりあえず使ってみる程度のオプションです。

cdk.json
{
  "context": {
    "env": "dev"
}
parameter.ts
const envs: Record<string, Partial<StackInput>> = {
  dev: {
  },
};
  • WAF: なし
  • RAG (ナレッジベース) チャット: なし
  • Agent チャット: なし
  • ガードレール (機密情報フィルタ): なし
  • GenU: あり
    • Cognito ユーザプール, ID プール: あり
    • DynamoDB テーブル: あり
    • API GW (Lambda 関数): あり
    • CloudFront にホストされた Web アプリケーション: あり
    • RAG (Amazon Kendra) チャット: なし
    • ユースケースビルダー: あり
    • 翻訳, 文字起こし: あり
  • モニタリングダッシュボード: なし

RAG 以外を有効化し、セキュリティも高める

コストを抑えつつ、セキュリティや Agent 機能などを開放します。
企業内で試しに利用する程度のオプションです。

cdk.json
{
  "context": {
    "env": "dev"
}
parameter.ts
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 を有効化する際のオプションです。

cdk.json
{
  "context": {
    "env": "dev"
}
parameter.ts
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%のコスト削減
    • ユースケースビルダー: あり
    • 翻訳, 文字起こし: あり
  • モニタリングダッシュボード: あり

以上で GenU のデプロイオプションの解説は完了です。

(参考) GenU のバックエンド (CDK) 詳細解説投稿一覧

(参考) 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?