GenU のバックエンド (CDK) 詳細解説　⑭GenU の Outputs の解説

## はじめに

皆さん、こんにちは。

私は業務でデータ利活用基盤を取り扱っていること、2024 AWS Japan Top Engineer に選出されたということから、[AWS GenU](https://aws-samples.github.io/generative-ai-use-cases-jp/) およびそれに必要なデータ基盤の探求 ([Snowflake](https://www.snowflake.com/ja/), [dbt](https://www.getdbt.com/), [Iceberg](https://iceberg.apache.org/), etc) に取り組む必要があると考えています。

本投稿では、[GenU のバックエンドである CDK コード](https://github.com/aws-samples/generative-ai-use-cases-jp/tree/main/packages/cdk)を詳細に解説します。
自身そして閲覧して頂いた皆様の GenU への理解が少しでも深まり、生成 AI の民主化につながっていければと考えています。

## 前回までのおさらい

前回までで、以下が完了しました。

- [①AWS CDK のセットアップ](https://qiita.com/siruko/items/fd25fdcf89615cb85262)
- [②AWS CDK の動作確認](https://qiita.com/siruko/items/73169f986b4173e3d3a5)
- [③GenU の概要](https://qiita.com/siruko/items/625801b9e1847b305c1e)
- [④GenU CDK スタックの概要](https://qiita.com/siruko/items/8570ed43f7162ea4b907)
- [⑤CloudFrontWafStack スタックの解説](https://qiita.com/siruko/items/30439576ee7c63165d21)
- [⑥RagKnowledgeBaseStack スタックの解説](https://qiita.com/siruko/items/1223c9d22e73168a8809)
- [⑦WebSearchAgentStack スタックの解説](https://qiita.com/siruko/items/aef0a9599df60d47eb1e)
- [⑧GuardrailStack スタックの解説](https://qiita.com/siruko/items/d16e9fe27df4673d7554)
- [⑨GenerativeAiUseCasesStack > Auth スタックの解説](https://qiita.com/siruko/items/0c14040a1af132f42382)
- [⑩GenerativeAiUseCasesStack > Database, Api スタックの解説](https://qiita.com/siruko/items/5f249f11847f3829c18a)
- [⑪GenerativeAiUseCasesStack > CommonWebAcl, Web, Rag スタックの解説](https://qiita.com/siruko/items/1063daa2efe0b374a3fc)
- [⑫GenerativeAiUseCasesStack > RagKnowledgeBase, UseCaseBuilder, Transcribe スタックの解説](https://qiita.com/siruko/items/73d6006004caf8648594)
- [⑬DashBoard スタックの解説](https://qiita.com/siruko/items/73a75c7d0146d12ecbc3)

GenU の CDK は最大で以下の 6 つの子スタックを作成します。
前回までで全てのスタックについて解説が終わりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217144/04fb6ba4-fe3c-457a-8f09-69039e80ec86.png)

- `CloudFrontWafStack`
- `RagKnowledgeBaseStack`
- `AgentStack`
- `GuardrailStack`
- `GenerativeAiUseCasesStack` ※メインスタック
- `DashboardStack`

今回が最終回となります。
今回は、スタックからエクスポート (CfnOutput) される値を解説したいと思います。

### CfnOutput とは

CfnOutput はスタックの出力情報です。
Web ページの URL やダッシュボードの URL など、リソースに関する重要な情報の出力や、[クロススタック参照用のエクスポート値](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnOutput.html)として利用できます。

GenU では、以下の CfnOutput を行っています。

- [CloudFrontWafStack](https://qiita.com/siruko/items/30439576ee7c63165d21) 関連
  - `WebAclId`: CloudFront ディストリビューション用の [`CfnWebACL`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_wafv2.CfnWebACL.html) の ARN ([解説](https://qiita.com/siruko/items/30439576ee7c63165d21#cloudfrontwafstack--commonwebacl-%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%BB%E3%83%83%E3%83%88))
- [RagKnowledgeBaseStack](https://qiita.com/siruko/items/1223c9d22e73168a8809#ragknowledgebasestack-%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF) 関連
  - `RagKnowledgeBaseEnabled`: スタック作成時のパラメータ `ragKnowledgeBaseEnabled` (デフォルト値は false)
- [WebSearchAgentStack](https://qiita.com/siruko/items/aef0a9599df60d47eb1e) 関連
  - `AgentEnabled`: スタック作成時のパラメータ `false` (デフォルト値は false)
  - `AgentNames`: 以下のいずれか (上を優先)
    - WebSearchAgentStack で生成した Web 検索エージェントおよびコードインタプリタの `displayName`
    - スタック作成時のパラメータ `agents` の `displayName` (デフォルト値は空配列)
- **GenerativeAiUseCasesStack** 関連
  - 共通
    - `Region`: スタック作成時のパラメータ `region` (デフォルト値は以下のいずれか)
      - CDK 実行時の環境変数 `CDK_DEFAULT_REGION`
      - 固定値 `'us-east-1'`
    - `ModelRegion`: スタック作成時のパラメータ `modelRegion` (デフォルト値は 'us-east-1')
    - `ModelIds`: スタック作成時のパラメータ `modelIds` (デフォルト値は以下の配列)
      - `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`
    - `ImageGenerateModelIds`: スタック作成時のパラメータ `imageGenerationModelIds` (デフォルト値は以下の配列)
    - `HiddenUseCases`: スタック作成時のパラメータ `hiddenUseCases` (デフォルト値は空オブジェクト)
  - [Web リソース](https://qiita.com/siruko/items/1063daa2efe0b374a3fc#generativeaiusecasesstack--web-%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9) 関連
    - `WebUrl`: GenU Web ページの URL (以下のいずれか)
      - カスタムドメインを利用する場合、`https://[ホスト名].[ドメイン名]`
        - ホスト名はスタック作成時のパラメータ `hostName`
        - ドメイン名はスタック作成時のパラメータ `domainName`
      - カスタムドメインを利用しない場合、CloudFront ディストリビューションの URL
    - `Flows`: スタック作成時のパラメータ `flows` の JSON 文字列を base64 エンコードしたもの (デフォルト値は空配列)
      - Web ビルド時の環境変数 `VITE_APP_FLOWS` に使用する
    - `EndpointNames`: スタック作成時のパラメータ `endpointNames` (デフォルト値は空配列) ※SageMaker エンドポイント
      - Web ビルド時の環境変数 `VITE_APP_ENDPOINT_NAMES` に使用する
    - `SamlAuthEnabled`: スタック作成時のパラメータ `samlAuthEnabled` (デフォルト値は false)
      - Web ビルド時の環境変数 `VITE_APP_SAMLAUTH_ENABLED` に使用する
    - `SamlCognitoDomainName`: スタック作成時のパラメータ `samlCognitoDomainName` (デフォルト値は null)
      - Web ビルド時の環境変数 `VITE_APP_SAML_COGNITO_DOMAIN_NAME` に使用する
    - `SamlCognitoFederatedIdentityProviderName`: スタック作成時のパラメータ `samlCognitoFederatedIdentityProviderName` (デフォルト値は null)
      - Web ビルド時の環境変数 `VITE_APP_SAML_COGNITO_FEDERATED_IDENTITY_PROVIDER_NAME` に使用する
    - `InlineAgents`: スタック作成時のパラメータ `inlineAgents` (デフォルト値は false)
      - Web ビルド時の環境変数 `VITE_APP_INLINE_AGENTS` に使用する
  - [Api リソース](https://qiita.com/siruko/items/5f249f11847f3829c18a#generativeaiusecasesstack--api-%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9) 関連
    - `ApiEndpoint`: [API GW のルート URL](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.RestApi.html#url)
    - `PredictStreamFunctionArn`: Lambda 関数 [`predictStreamFunction`](https://qiita.com/siruko/items/5f249f11847f3829c18a#predictstreamfunction) の関数 ARN
    - `OptimizePromptFunctionArn`: Lambda 関数 [`optimizePromptFunction`](https://qiita.com/siruko/items/5f249f11847f3829c18a#optimizepromptfunction) の関数 ARN
    - `InvokeFlowFunctionArn`: Lambda 関数 [`invokeFlowFunction`](https://qiita.com/siruko/items/5f249f11847f3829c18a#invokeflowfunction) の関数 ARN
  - [Auth リソース](https://qiita.com/siruko/items/0c14040a1af132f42382#generativeaiusecasesstack--auth-%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9) 関連
    - `UserPoolId`: Cognito ユーザプール ID
    - `UserPoolClientId`: Cognito アプリケーションクライアント ID
    - `IdPoolId`: Cognito ID プール ID
    - `SelfSignUpEnabled`: スタック作成時のパラメータ `selfSignUpEnabled` (デフォルト値は true)
  - [Rag リソース](https://qiita.com/siruko/items/1063daa2efe0b374a3fc#generativeaiusecasesstack--rag-%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9) 関連
    - `RagEnabled`: スタック作成時のパラメータ `ragEnabled` (デフォルト値は false)
      - `amazon.nova-canvas-v1:0`
  - [UseCaseBuilder リソース](https://qiita.com/siruko/items/73d6006004caf8648594#generativeaiusecasesstack--usecasebuilder-%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9) 関連
    - `UseCaseBuilderEnabled`: スタック作成時のパラメータ `ragEnabled` (デフォルト値は true)
- [`DashboardStack`](https://qiita.com/siruko/items/73a75c7d0146d12ecbc3) 関連
  - `BedrockLogGroup`: Becrock 用の [`CloudWatch ロググループ`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_logs.LogGroup.html)のロググループ名 ([解説](https://qiita.com/siruko/items/73a75c7d0146d12ecbc3#dashboardstack--loggroup-%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9))
  - `DashboardName`: [`CloudWatch ダッシュボード`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_cloudwatch.Dashboard.html)のダッシュボード名 ([解説](https://qiita.com/siruko/items/73a75c7d0146d12ecbc3#dashboardstack--dashboard-%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9))
  - `DashboardUrl`: CloudWatch ダッシュボードの URL
    - `https://console.aws.amazon.com/cloudwatch/home#dashboards/dashboard/[ダッシュボード名]`

以上です。
全 14 回に渡り、GenU のバックエンド (CDK) を解説してきました。
まだまだ発展していく OSS のため、様々な変更が入っていくと思いますが、コンセプトは変わらないと思いますので、読んで頂いた方の助けになれば幸いです。

この後は、フロントエンド (Vite + React) およびデプロイオプションの解説を行っていきと思います。

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

- [①AWS CDK のセットアップ](https://qiita.com/siruko/items/fd25fdcf89615cb85262)
- [②AWS CDK の動作確認](https://qiita.com/siruko/items/73169f986b4173e3d3a5)
- [③GenU の概要](https://qiita.com/siruko/items/625801b9e1847b305c1e)
- [④GenU CDK スタックの概要](https://qiita.com/siruko/items/8570ed43f7162ea4b907)
- [⑤CloudFrontWafStack スタックの解説](https://qiita.com/siruko/items/30439576ee7c63165d21)
- [⑥RagKnowledgeBaseStack スタックの解説](https://qiita.com/siruko/items/1223c9d22e73168a8809)
- [⑦WebSearchAgentStack スタックの解説](https://qiita.com/siruko/items/aef0a9599df60d47eb1e)
- [⑧GuardrailStack スタックの解説](https://qiita.com/siruko/items/d16e9fe27df4673d7554)
- [⑨GenerativeAiUseCasesStack > Auth スタックの解説](https://qiita.com/siruko/items/0c14040a1af132f42382)
- [⑩GenerativeAiUseCasesStack > Database, Api スタックの解説](https://qiita.com/siruko/items/5f249f11847f3829c18a)
- [⑪GenerativeAiUseCasesStack > CommonWebAcl, Web, Rag スタックの解説](https://qiita.com/siruko/items/1063daa2efe0b374a3fc)
- [⑫GenerativeAiUseCasesStack > RagKnowledgeBase, UseCaseBuilder, Transcribe スタックの解説](https://qiita.com/siruko/items/73d6006004caf8648594)
- [⑬DashBoard スタックの解説](https://qiita.com/siruko/items/73a75c7d0146d12ecbc3)
- [⑭GenU の Outputs の解説](https://qiita.com/siruko/items/afc14128a5b1a15ab69c)