1
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?

CloudFormation テンプレート詳細解説:Bedrock Knowledge Base with Aurora Serverless

Last updated at Posted at 2025-12-16

はじめに

Aurora ServerlessをベクトルストアとしたAWS Bedrock Knowledge BaseのCloudFormationテンプレートについて深く理解するためにこの記事を書きました。

各パラメータやリソースの役割を読み解いていくことで、Bedrock Knowledge Baseでどのような設定が可能なのか、より具体的に理解することができました。

本記事では、このテンプレートの各セクションを詳細に解説し、それぞれのパラメータやリソースがどのような役割を果たしているのかを記載しています。

目次

  1. テンプレート概要
  2. Metadata セクション
  3. Parameters セクション
  4. Conditions セクション
  5. Resources セクション
  6. まとめ

テンプレート概要

目的

このCloudFormationテンプレートは、AWS Bedrock Knowledge BaseAurora Serverlessクラスターをベクトルストアとして使用する形でデプロイするために設計されています。

主な構成要素

  1. Aurora Serverless クラスター(ベクトルデータベース)
  2. Bedrock Knowledge Base(ナレッジベース本体)
  3. 最大5つのデータソース設定
  4. IAMロールとポリシー
  5. ログ配信設定(CloudWatch Logs、S3、Data Firehose)

Metadata セクション

cfn-lint 設定

Metadata:
  cfn-lint:
    config:
      ignore_checks:
        - ERDSStorageEncryptionEnabled
        - E3002
        - E3510
        - W1030

CloudFormationテンプレートの静的解析ツールであるcfn-lintで、特定のチェックを無視するよう設定します。以下のチェックを無視しています:

  • ERDSStorageEncryptionEnabled: RDSストレージ暗号化の有効化チェック
  • E3002: リソースプロパティが無効または非推奨
  • E3510: パラメータの許可値の検証エラー
  • W1030: 警告レベルの汎用チェック

AWS::CloudFormation::Interface

CloudFormationコンソールでのパラメータ表示を整理するためのメタデータです。

ParameterGroups(パラメータのグループ化)

パラメータを論理的なグループに分類し、ユーザーが入力しやすくします。

AWS::CloudFormation::Interface:
  ParameterGroups:
    - Label:
        default: Secret Manager Configuration
      Parameters:
        - SecretsKMSKeyId

主なグループ:

  1. Secret Manager Configuration: KMSキー設定
  2. Aurora Database Cluster Configuration: Auroraクラスターの設定
  3. Bedrock Knowledge Base Configuration: Knowledge Baseの基本設定
  4. Bedrock Knowledge Base Data Source Configuration: データソース1〜5の設定

ParameterLabels(パラメータラベル)

各パラメータにユーザーフレンドリーな表示名を付与します。

ParameterLabels:
  SecretsKMSKeyId:
    default: KMS Key Arn
  AuroraDBName:
    default: Aurora Cluster Database name

Parameters セクション

Secret Manager Configuration

SecretsKMSKeyId

SecretsKMSKeyId:
  Description: Enter the KMS Key Arn to encrypt the secrets value. Leave it blank if you want to use AWS Managed Key.
  Type: String
  Default: ''

Secrets Managerで管理するシークレット(データベース認証情報)の暗号化に使用するKMSキーARNです。カスタムKMSキーを使用する場合に指定し、空欄の場合はAWS管理キーを使用します。

Aurora Database Cluster Configuration

AuroraDBName

AuroraDBName:
  Description: Enter the Database name for the Aurora Cluster.
  Type: String
  Default: bedrock_vector_db

Auroraクラスター内に作成するデータベース名で、ベクトルデータを格納するPostgreSQLデータベースの名前として使用されます。

AuroraDBUsername

AuroraDBUsername:
  Description: Enter the Username for the Aurora Cluster.
  Type: String
  Default: postgres

Auroraクラスターの管理者ユーザー名で、データベースへの接続に使用されます。

AuroraDBSubnetGroupName

AuroraDBSubnetGroupName:
  Description: Enter the name of the existing DB Subnet Group.
  Type: String

既存のDBサブネットグループ名で、Auroraクラスターを配置するサブネットを指定します。事前に作成されたサブネットグループを利用するためにこのパラメータを追加しています。

AuroraDBSecurityGroupIds

AuroraDBSecurityGroupIds:
  Description: Enter the Security Group IDs (comma separated).
  Type: CommaDelimitedList

Auroraクラスターに適用するセキュリティグループIDのリストで、ネットワークアクセス制御に使用されます。カンマ区切りで複数指定可能です(形式: sg-xxxxx,sg-yyyyy)。

AuroraDBNetworkType

AuroraDBNetworkType:
  Description: Choose the network type (IPv4 or Dual-stack).
  Type: String
  AllowedValues:
    - IPV4
    - DUAL
  Default: IPV4

ネットワークタイプの選択で、IPv4のみまたはIPv4/IPv6デュアルスタックを選択できます(デフォルト: IPV4)。

AuroraDBEncryption

AuroraDBEncryption:
  Description: Enable encryption for Aurora Cluster.
  Type: String
  AllowedValues:
    - 'true'
    - 'false'
  Default: 'true'

Auroraクラスターの保管時の暗号化を有効化するかどうかを設定します(デフォルト: true)。

AuroraDBKMSKeyId

AuroraDBKMSKeyId:
  Description: Enter the KMS Key Arn for Aurora Cluster encryption. Leave it blank to use AWS managed key.
  Type: String
  Default: ''

Aurora暗号化用のカスタムKMSキーARNで、暗号化に使用するキーを指定します。空欄の場合はAWS管理キーを使用します。

AuroraDBMinCapacity

AuroraDBMinCapacity:
  Description: Enter the minimum capacity for Aurora Serverless.
  Type: Number
  AllowedValues:
    - 0.5
    - 1
    - 2
    - 4
    - 8
  Default: 0.5

Aurora Serverlessの最小キャパシティユニット(ACU):Aurora Serverlessのコンピューティングとメモリ容量を表す単位で、自動スケーリングの下限値を設定します。
0.5 ACU = 約1GBメモリ、軽いワークロード向け

AuroraDBMaxCapacity

AuroraDBMaxCapacity:
  Description: Enter the maximum capacity for Aurora Serverless.
  Type: Number
  AllowedValues:
    - 1
    - 2
    - 4
    - 8
    - 16
  Default: 2

Aurora Serverlessの最大キャパシティユニット(ACU)で、自動スケーリングの上限値を設定します。

AuroraDBSecondsUntilAutoPause

AuroraDBSecondsUntilAutoPause:
  Description: Enter the time in seconds before Aurora auto-pauses.
  Type: Number
  Default: 300

アイドル状態が続いた場合に自動的に一時停止するまでの秒数で、コスト最適化(使用されていない時間の課金を削減)に使用されます。

AuroraDBStorageType

AuroraDBStorageType:
  Description: Choose the storage type for Aurora Cluster.
  Type: String
  AllowedValues:
    - aurora
    - aurora-iopt1
  Default: aurora

Auroraストレージタイプの選択で、標準ストレージまたはI/O最適化ストレージを選択できます。

Bedrock Knowledge Base Configuration

BedrockKnowledgeBaseName(必須)

BedrockKnowledgeBaseName:
  Description: Enter the name for Bedrock Knowledge Base.
  Type: String

Knowledge Baseの名前。

BedrockKnowledgeBaseDescription

BedrockKnowledgeBaseDescription:
  Description: Enter the description for Bedrock Knowledge Base.
  Type: String
  Default: ''

Knowledge Baseの説明文。

ExistingBedrockServiceExecutionRoleArn

ExistingBedrockServiceExecutionRoleArn:
  Description: Enter the existing Bedrock Service Execution Role Arn.
  Type: String
  Default: ''

既存のBedrock実行ロールARNで、既存のIAMロールを使用する場合に指定します。空欄の場合は新規作成されます。

BedrockServiceExecutionRoleName

BedrockServiceExecutionRoleName:
  Description: Enter the name for Bedrock Service Execution Role.
  Type: String

新規作成するBedrock実行ロールの名前を指定します。ExistingBedrockServiceExecutionRoleArnが空の場合に使用されます。

BedrockKBEmbeddingModelArn

BedrockKBEmbeddingModelArn:
  Description: Enter the Bedrock Embedding Model Arn.
  Type: String

テキストをベクトルに変換するBedrockモデルのARNを指定します(例: arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-embed-text-v1)。

BedrockKBEmbeddingModelDimensionConfigurable

BedrockKBEmbeddingModelDimensionConfigurable:
  Description: Is the embedding model dimension configurable?
  Type: String
  AllowedValues:
    - 'true'
    - 'false'
  Default: 'false'

埋め込みモデルの次元数が設定可能かどうかを指定します。モデルによっては次元数をカスタマイズできます。

BedrockKBEmbeddingModelDimensions

BedrockKBEmbeddingModelDimensions:
  Description: Enter the embedding model dimensions.
  Type: Number
  Default: 1024

埋め込みベクトルの次元数で、ベクトル空間の次元を指定します。

BedrockKBMultiModalS3Uri

BedrockKBMultiModalS3Uri:
  Description: Enter the S3 URI for multi-modal data.
  Type: String
  Default: ''

マルチモーダルデータ(画像、音声など)のS3 URIで、テキスト以外のデータをKnowledge Baseに含める場合に使用します。

BedrockKnowledgeBaseTags

BedrockKnowledgeBaseTags:
  Description: Enter tags for Knowledge Base (Key1=Value1,Key2=Value2).
  Type: CommaDelimitedList

Knowledge Baseに付与するタグで、リソースの分類、コスト配分、管理に使用します(形式: Environment=Production,Project=MyProject)。

ログ配信設定

KnowledgeBaseDeliveryDestinationCW

KnowledgeBaseDeliveryDestinationCW:
  Description: Enter the CloudWatch Log Group Arn for logging.
  Type: String
  Default: ''

既存のCloudWatch LogsグループARNで、Knowledge Baseのログを既存のロググループに配信します。

KnowledgeBasePrefixCWLogGroupName

KnowledgeBasePrefixCWLogGroupName:
  Description: Enter the prefix for new CloudWatch Log Group name.
  Type: String
  Default: ''

新規作成するCloudWatch Logsグループ名のプレフィックスで、ログループ名の命名規則に従った名前付けに使用します。

KnowledgeBaseIDInLogGroupName

KnowledgeBaseIDInLogGroupName:
  Description: Include Knowledge Base ID in the log group name?
  Type: String
  AllowedValues:
    - 'true'
    - 'false'
  Default: 'false'

ログループ名にKnowledge Base IDを含めるかどうかを設定し、複数のKnowledge Baseを運用する際の識別に使用します。

KnowledgeBaseSuffixCWLogGroupName

KnowledgeBaseSuffixCWLogGroupName:
  Description: Enter the suffix for CloudWatch Log Group name.
  Type: String
  Default: ''

CloudWatch Logsグループ名のサフィックス(文字列の末尾に追加される接尾辞)で、ログループ名のカスタマイズに使用します。

KnowledgeBaseDeliveryDestinationS3

KnowledgeBaseDeliveryDestinationS3:
  Description: Enter the S3 bucket ARN for logging.
  Type: String
  Default: ''

ログ配信先のS3バケットARN(同一アカウント)で、ログの長期保存やコスト最適化に使用します。

KnowledgeBaseDeliveryDestinationS3CrossAccount

KnowledgeBaseDeliveryDestinationS3CrossAccount:
  Description: Enter the S3 bucket ARN for cross-account logging.
  Type: String
  Default: ''

ログ配信先のS3バケットARN(クロスアカウント)で、別AWSアカウントでのログ集中管理に使用します。

KnowledgeBaseDeliveryDestinationDF

KnowledgeBaseDeliveryDestinationDF:
  Description: Enter the Data Firehose ARN for logging.
  Type: String
  Default: ''

ログ配信先のKinesis Data Firehose ARNで、リアルタイムログ分析やストリーミング処理に使用します。

KnowledgeBaseDeliveryDestinationDFCrossAccount

KnowledgeBaseDeliveryDestinationDFCrossAccount:
  Description: Enter the Data Firehose ARN for cross-account logging.
  Type: String
  Default: ''

クロスアカウントのData Firehose ARNで、別アカウントでのストリーミングログ処理に使用します。

Data Source Configuration

テンプレートでは最大5つのデータソースを定義できます。各データソースには同じパラメータセットが用意されています。ここではDataSource1を例に説明します。

DataSourceName1

DataSourceName1:
  Description: Enter the name for Knowledge Base Data Source 1
  Type: String
  Default: ''

データソース1の名前。

DataSourceDescription1

DataSourceDescription1:
  Description: Enter the description for the Knowledge Base Data Source 1
  Type: String
  MaxLength: 200
  Default: ''

データソース1の説明文。

DataSourceDeletionPolicy1

DataSourceDeletionPolicy1:
  Description: Enter the data deletion Policy for Knowledge Base Data Source 1
  Type: String
  AllowedValues:
    - RETAIN
    - DELETE
  Default: RETAIN

データソース削除時のポリシーで、RETAINはデータソースを削除してもS3のデータは保持し、DELETEはデータソースとS3のデータを両方削除します。

DataSourceBucketArn1

DataSourceBucketArn1:
  Description: Enter the S3 Bucket Arn for Knowledge Base Data Source 1
  Type: String
  Default: ''

データソース1のS3バケットARNで、ナレッジベースに取り込むデータの保存場所を指定します(形式: arn:aws:s3:::my-bucket)。

DataSourceOwnerAccountId1

DataSourceOwnerAccountId1:
  Description: Enter the Owner Account Id for Knowledge Base Data Source 1
  Type: String
  Default: ''

データソース1の所有者アカウントIDで、クロスアカウントアクセスの設定に使用します。

DataSourceInclusionPrefixes1

DataSourceInclusionPrefixes1:
  Description: Enter the Inclusion Prefixes for Knowledge Base Data Source 1 (semicolon separated)
  Type: String
  Default: ''

取り込むデータのS3プレフィックス(セミコロン区切り)で、特定のフォルダやファイルのみを対象にします(形式: documents/;manuals/)。

IsDataSourceObject1

IsDataSourceObject1:
  Description: Is Data Source 1 an S3 object or folder?
  Type: String
  AllowedValues:
    - 'true'
    - 'false'
  Default: 'false'

データソースが単一オブジェクトかフォルダかを指定します。trueは単一のS3オブジェクト、falseはフォルダ(複数ファイル)を意味します。

DataSourceBucketKmsKeyArn1

DataSourceBucketKmsKeyArn1:
  Description: Enter the KMS Key Arn for Data Source 1 bucket encryption
  Type: String
  Default: ''

S3バケットの暗号化に使用するKMSキーARNで、バケット全体の暗号化キーを指定します。

DataSourceKMSKeyArn1

DataSourceKMSKeyArn1:
  Description: Enter the KMS key Arn for Data Source 1 transient data storage
  Type: String
  Default: ''

データソースの取り込み処理中に一時データを暗号化するためのKMSキーARNです。空欄の場合は暗号化なしで処理されます。

チャンキング戦略パラメータ

DataSourceChunkingStrategy1

DataSourceChunkingStrategy1:
  Description: Enter the Chunking Strategy for Data Source 1
  Type: String
  AllowedValues:
    - FIXED_SIZE
    - HIERARCHICAL
    - SEMANTIC
    - NONE
    - DEFAULT_CHUNKING
  Default: DEFAULT_CHUNKING

検索精度とパフォーマンスに影響するデータの分割戦略を選択します。固定トークン数で分割(FIXED_SIZE)、階層的に分割(HIERARCHICAL)、意味的なまとまりで分割(SEMANTIC)、分割なし(NONE)、デフォルト設定(DEFAULT_CHUNKING)から選択できます。

固定サイズチャンキング

DataSourceFixedSizeMaxTokens1

DataSourceFixedSizeMaxTokens1:
  Description: Enter the Fixed Size Chunking Strategy Max Tokens for Data Source 1
  Type: Number
  MinValue: 1
  Default: 1

1チャンクあたりの最大トークン数を設定します。大きいほど文脈を保持し、小さいほど精密な検索が可能になります。

DataSourceFixedSizeOverlapPercentage1

DataSourceFixedSizeOverlapPercentage1:
  Description: Enter the Fixed Size Chunking Strategy Percentage of overlap between adjacent chunks for Data Source 1
  Type: Number
  MinValue: 1
  MaxValue: 99
  Default: 1

隣接チャンク間のオーバーラップ率(%)を設定し、チャンク境界での情報欠落を防ぎます。

階層型チャンキング

DataSourceHierarchicalMaxParentTokens1

DataSourceHierarchicalMaxParentTokens1:
  Description: Enter the Hierarchical Chunking Strategy Max Parent Tokens for Data Source 1
  Type: Number
  MinValue: 1
  MaxValue: 8192
  Default: 1

親チャンクの最大トークン数を設定し、文書の大枠構造を保持します。
※補足
階層型チャンキング(Hierarchical Chunking)では、文書を親チャンクと子チャンクの2層構造で分割します。
親チャンクは文書の大きな単位(例: 章や節全体)を表し、子チャンクはその中の細かい部分(例: 段落や文)を表します。

DataSourceHierarchicalMaxChildTokens1

DataSourceHierarchicalMaxChildTokens1:
  Description: Enter the Hierarchical Chunking Strategy Max Child Tokens for Data Source 1
  Type: Number
  MinValue: 1
  MaxValue: 8192
  Default: 1

子チャンクの最大トークン数を設定し、詳細情報を保持します。

DataSourceHierarchicalOverlapTokens1

DataSourceHierarchicalOverlapTokens1:
  Description: Enter the Hierarchical Chunking Strategy Overlapping Tokens for Data Source 1
  Type: Number
  MinValue: 1
  Default: 1

階層間のオーバーラップトークン数を設定し、親子チャンク間の連続性を保ちます。

セマンティックチャンキング

DataSourceSemanticBreakpointPercentile1

DataSourceSemanticBreakpointPercentile1:
  Description: Enter the Semantic Chunking Strategy Breakpoint Percentile Threshold for Data Source 1
  Type: Number
  MinValue: 50
  MaxValue: 99
  Default: 50

セマンティック分割のブレークポイント閾値を設定し、意味的な区切りの感度を制御します。値が高いほど大きなチャンクになります。

DataSourceSemanticBufferSize1

DataSourceSemanticBufferSize1:
  Description: Enter the Semantic Chunking Strategy Buffer Size for Data Source 1
  Type: Number
  MinValue: 0
  MaxValue: 1
  Default: 0

セマンティック分析のバッファサイズを設定し、文脈分析の範囲を指定します。

DataSourceSemanticMaxTokens1

DataSourceSemanticMaxTokens1:
  Description: Enter the Semantic Chunking Strategy Max Tokens for Data Source 1
  Type: Number
  MinValue: 1
  Default: 1

セマンティックチャンクの最大トークン数を設定し、意味的なまとまりの最大サイズを制限します。

データ変換パラメータ

DataSourceTransformationLambdaArn1

DataSourceTransformationLambdaArn1:
  Description: Enter the Transformation Lambda Function Arn for Data Source 1
  Type: String
  Default: ''

カスタムデータ変換処理(HTMLパース、PDFテキスト抽出など)を実行するLambda関数のARNを指定します。

DataSourceTransformationStepToApply1

DataSourceTransformationStepToApply1:
  Description: Enter when the Bedrock service applies the transformation for Data Source 1
  Type: String
  Default: POST_CHUNKING

変換処理を適用するタイミングを設定します。PRE_CHUNKING(チャンク分割前)またはPOST_CHUNKING(チャンク分割後)を選択できます。

DataSourceTransformationS3URI1

DataSourceTransformationS3URI1:
  Description: Enter the Transformation S3 Bucket URI for Data Source 1
  Type: String
  Default: ''

変換後のデータを保存するS3 URIを指定し、中間データの保存場所として使用します。

DataSourceTransformationS3KmsKeyArn1

DataSourceTransformationS3KmsKeyArn1:
  Description: Enter the KMS Key Arn for Transformation S3 bucket for Data Source 1
  Type: String
  Default: ''

変換データ保存用S3バケットの暗号化に使用するKMSキーARNを指定し、中間データのセキュリティを確保します。

データ解析パラメータ

DataSourceParsingStrategy1

DataSourceParsingStrategy1:
  Description: Enter the Parsing Strategy for Data Source 1
  Type: String
  Default: ''

データ解析方法を選択するためのパース戦略を指定します(例: BEDROCK_FOUNDATION_MODEL)。

DataSourceParsingModelArn1

DataSourceParsingModelArn1:
  Description: Enter the Parsing Model Arn for Data Source 1
  Type: String
  Default: ''

文書解析やテキスト抽出に使用するBedrockモデルのARNを指定します。

DataSourceParsingPromptText1

DataSourceParsingPromptText1:
  Description: Enter the Parsing Prompt Text for Data Source 1
  Type: String
  Default: ''

モデルに対する指示を提供するプロンプトテキストを設定し、解析精度を向上させます。

UseTrgm

UseTrgm:
  Description: Use trigram index instead of tsvector for text search
  Type: String
  AllowedValues:
    - 'true'
    - 'false'
  Default: 'false'

PostgreSQLのトライグラムインデックスを使用するかを選択し、テキスト検索のパフォーマンスを最適化します(falseの場合はtsvectorを使用)。


Conditions セクション

Conditionsセクションでは、リソース作成や設定の条件分岐を定義します。

基本的な条件

SecretsDefaultKMSKey

SecretsDefaultKMSKey: !Equals [!Ref SecretsKMSKeyId, '']

SecretsKMSKeyIdが空かどうかを判定し、AWS管理キーを使用するかカスタムキーを使用するかを決定します。

AuroraDBDefaultKMSKey

AuroraDBDefaultKMSKey: !Equals [!Ref AuroraDBKMSKeyId, '']

AuroraDBKMSKeyIdが空かどうかを判定し、Aurora暗号化キーを選択します。

NoBedrockKBDescription

NoBedrockKBDescription: !Equals [!Ref BedrockKnowledgeBaseDescription, '']

Knowledge Base説明が空かどうかを判定し、Description属性の設定有無を制御します。

NoBedrockKBRoleExists

NoBedrockKBRoleExists: !Equals [!Ref ExistingBedrockServiceExecutionRoleArn, '']

既存のBedrockロールARNが空かどうかを判定し、新規IAMロールを作成するか既存ロールを使用するかを決定します。

マルチモーダル設定の条件

MultiModalConfigurationExists

MultiModalConfigurationExists: !Not [!Equals [!Ref BedrockKBMultiModalS3Uri, '']]

マルチモーダルS3 URIが設定されているかを判定し、マルチモーダル機能の有効化を判定します。

ConfigurableModelDimensions(1279行目)

ConfigurableModelDimensions: !Equals [!Ref BedrockKBEmbeddingModelDimensionConfigurable, 'true']

埋め込みモデルの次元数が設定可能かを判定し、モデル次元数パラメータの使用可否を制御します。

ログ配信の条件

BedrockCWLoggingEnabledwithNewLogGroup(1281行目)

BedrockCWLoggingEnabledwithNewLogGroup: !Not [!Equals [!Ref KnowledgeBasePrefixCWLogGroupName, '']]

新規CloudWatch Logsグループを作成するかを判定し、新規ロググループの作成を制御します。

BedrockCWLoggingEnabledwithExistingLogGroup(1283行目)

BedrockCWLoggingEnabledwithExistingLogGroup: !Not [!Equals [!Ref KnowledgeBaseDeliveryDestinationCW, '']]

既存CloudWatch Logsグループを使用するかを判定し、既存ロググループへの配信を制御します。

BedrockCWLoggingEnabled(1284行目)

BedrockCWLoggingEnabled: !Or [!Condition BedrockCWLoggingEnabledwithNewLogGroup, !Condition BedrockCWLoggingEnabledwithExistingLogGroup]

CloudWatch Logsへのログ配信が有効かを判定し、ログ配信全体を制御します。

BedrockS3LoggingEnabled(1287行目)

BedrockS3LoggingEnabled: !Or [!Condition BedrockS3LoggingEnabledCrossAccount, !Condition BedrockS3LoggingEnabledSameAccount]

S3へのログ配信が有効かを判定し、S3ログ配信を制御します。

LoggingEnabled(1291行目)

LoggingEnabled: !Or [!Condition BedrockCWLoggingEnabled, !Condition BedrockS3LoggingEnabled, !Condition BedrockDFLoggingEnabled]

いずれかのログ配信が有効かを判定し、ログ配信機能全体の有効化を判定します。

データソースの条件

各データソース(1〜5)に対して、以下のような条件が定義されています。

NoDataSource1Description(1292行目)

NoDataSource1Description: !Equals [!Ref DataSourceDescription1, '']

データソース説明が空かを判定し、Description属性の設定有無を制御します。

DataSource1KMSKeyPresent(1298行目)

DataSource1KMSKeyPresent: !Not [!Equals [!Ref DataSourceKMSKeyArn1, '']]

データソース1にKMSキーが設定されているかを判定し、暗号化設定を制御します。

DefaultDataSource1Chunking(1299行目)

DefaultDataSource1Chunking: !Equals [!Ref DataSourceChunkingStrategy1, 'DEFAULT_CHUNKING']

デフォルトチャンキング戦略が選択されているかを判定し、チャンキング設定を制御します。

FixedSizeDataSource1Chunking(1300行目)

FixedSizeDataSource1Chunking: !Equals [!Ref DataSourceChunkingStrategy1, 'FIXED_SIZE']

固定サイズチャンキングが選択されているかを判定し、固定サイズパラメータの使用を制御します。

HierarchicalDataSource1Chunking(1301行目)

HierarchicalDataSource1Chunking: !Equals [!Ref DataSourceChunkingStrategy1, 'HIERARCHICAL']

階層型チャンキングが選択されているかを判定し、階層型パラメータの使用を制御します。


Resources セクション

Resourcesセクションでは、実際にデプロイされるAWSリソースを定義します。

Aurora Serverless クラスター

AuroraDBCluster

AuroraDBCluster:
  Type: AWS::RDS::DBCluster
  Properties:
    Engine: aurora-postgresql
    EngineMode: provisioned
    EngineVersion: '15.5'
    DatabaseName: !Ref AuroraDBName
    MasterUsername: !Ref AuroraDBUsername
    MasterUserPassword: !Sub '{{resolve:secretsmanager:${BedrockUserSecret}:SecretString:password}}'
    DBSubnetGroupName: !Ref AuroraDBSubnetGroupName
    VpcSecurityGroupIds: !Ref AuroraDBSecurityGroupIds
    NetworkType: !Ref AuroraDBNetworkType
    StorageEncrypted: !Ref AuroraDBEncryption
    KmsKeyId: !If [AuroraDBDefaultKMSKey, !Ref 'AWS::NoValue', !Ref AuroraDBKMSKeyId]
    ServerlessV2ScalingConfiguration:
      MinCapacity: !Ref AuroraDBMinCapacity
      MaxCapacity: !Ref AuroraDBMaxCapacity
    EnableHttpEndpoint: true

主要なプロパティ:

  • Engine: aurora-postgresql - PostgreSQLエンジンを使用
  • EngineMode: provisioned - Serverless v2モード
  • EngineVersion: 15.5 - PostgreSQL 15.5
  • ServerlessV2ScalingConfiguration: 自動スケーリング設定
  • EnableHttpEndpoint: true - Data API有効化(Lambdaなどから直接SQL実行可能)

Secrets Manager

BedrockUserSecret

BedrockUserSecret:
  Type: AWS::SecretsManager::Secret
  Properties:
    Description: Secret for Bedrock Knowledge Base Aurora user
    KmsKeyId: !If [SecretsDefaultKMSKey, !Ref 'AWS::NoValue', !Ref SecretsKMSKeyId]
    GenerateSecretString:
      SecretStringTemplate: !Sub '{"username": "${AuroraDBUsername}"}'
      GenerateStringKey: password
      PasswordLength: 32
      ExcludeCharacters: '"@/\'

役割:

  • データベース認証情報を安全に保管
  • パスワードを自動生成(32文字、特殊文字除外)
  • KMSで暗号化

IAM ロールとポリシー

BedrockKnowledgeBaseRolePolicy

BedrockKnowledgeBaseRolePolicy:
  Type: AWS::IAM::ManagedPolicy
  Condition: NoBedrockKBRoleExists
  Properties:
    Description: Managed Policy for Bedrock Knowledge Base
    PolicyDocument:
      Version: "2012-10-17"
      Statement:
        - Sid: BedrockInvokeModelStatement
          Effect: Allow
          Action:
            - 'bedrock:InvokeModel'
          Resource: !Ref BedrockKBEmbeddingModelArn

役割:

  • Bedrockモデルの呼び出し権限
  • Aurora Data APIへのアクセス権限
  • Secrets Managerからの認証情報取得権限

BedrockKBDataSourcePolicy

BedrockKBDataSourcePolicy:
  Type: AWS::IAM::ManagedPolicy
  Condition: NoBedrockKBRoleExists
  Properties:
    Description: Managed Policy for Knowledge Base Data Sources
    PolicyDocument:
      Version: "2012-10-17"
      Statement:
        - Sid: S3ListBucketStatement
          Effect: Allow
          Action:
            - "s3:ListBucket"
          Resource: [データソースのバケットARN]
        - Sid: S3GetObjectStatement
          Effect: Allow
          Action:
            - "s3:GetObject"
          Resource: [データソースのオブジェクトARN]

役割:

  • データソースS3バケットへのアクセス権限
  • KMSキーによる復号化権限
  • Lambda関数の呼び出し権限(変換処理用)

Bedrock Knowledge Base

BedrockKnowledgeBase

BedrockKnowledgeBase:
  Type: AWS::Bedrock::KnowledgeBase
  DependsOn:
    - AuroraDBCluster
    - BedrockUserSecret
  Properties:
    Name: !Ref BedrockKnowledgeBaseName
    Description: !If [NoBedrockKBDescription, !Ref "AWS::NoValue", !Ref BedrockKnowledgeBaseDescription]
    RoleArn: !If [NoBedrockKBRoleExists, !GetAtt BedrockKnowledgeBaseRole.Arn, !Ref ExistingBedrockServiceExecutionRoleArn]
    KnowledgeBaseConfiguration:
      Type: VECTOR
      VectorKnowledgeBaseConfiguration:
        EmbeddingModelArn: !Ref BedrockKBEmbeddingModelArn
        EmbeddingModelConfiguration:
          !If
            - ConfigurableModelDimensions
            - BedrockEmbeddingModelConfiguration:
                Dimensions: !Ref BedrockKBEmbeddingModelDimensions
            - !Ref "AWS::NoValue"
    StorageConfiguration:
      Type: RDS
      RdsConfiguration:
        ResourceArn: !Sub "arn:${AWS::Partition}:rds:${AWS::Region}:${AWS::AccountId}:cluster:${AuroraDBCluster}"
        DatabaseName: !Ref AuroraDBName
        TableName: bedrock_integration.bedrock_kb
        FieldMapping:
          PrimaryKeyField: id
          VectorField: embedding
          TextField: chunks
          MetadataField: metadata
        CredentialsSecretArn: !Ref BedrockUserSecret

主要なプロパティ:

  • Type: VECTOR - ベクトルストア型Knowledge Base
  • EmbeddingModelArn: 埋め込みモデルの指定
  • StorageConfiguration: Auroraをベクトルストアとして使用
  • FieldMapping: データベーステーブルのフィールドマッピング

Bedrock Data Sources

各データソースは以下のような構造で定義されます。

BedrockKBDataSource1

BedrockKBDataSource1:
  Type: AWS::Bedrock::DataSource
  Properties:
    Name: !Ref DataSourceName1
    Description: !If [NoDataSource1Description, !Ref "AWS::NoValue", !Ref DataSourceDescription1]
    KnowledgeBaseId: !Ref BedrockKnowledgeBase
    DataDeletionPolicy: !Ref DataSourceDeletionPolicy1
    DataSourceConfiguration:
      Type: S3
      S3Configuration:
        BucketArn: !Ref DataSourceBucketArn1
        BucketOwnerAccountId: !If [NoDataSource1AccountID, !Ref "AWS::NoValue", !Ref DataSourceOwnerAccountId1]
        InclusionPrefixes: !If [NoDataSource1InclustionPrefixes, !Ref "AWS::NoValue", !Split [';', !Ref DataSourceInclusionPrefixes1]]
    ServerSideEncryptionConfiguration:
      !If
        - DataSource1KMSKeyPresent
        - KmsKeyArn: !Ref DataSourceKMSKeyArn1
        - !Ref "AWS::NoValue"
    VectorIngestionConfiguration:
      ChunkingConfiguration:
        # チャンキング設定
      CustomTransformationConfiguration:
        # 変換処理設定
      ParsingConfiguration:
        # パース設定

主要なプロパティ:

  • DataSourceConfiguration: S3バケットの設定
  • VectorIngestionConfiguration: データ取り込み時の処理設定
    • ChunkingConfiguration: チャンキング戦略
    • CustomTransformationConfiguration: Lambda変換処理
    • ParsingConfiguration: データ解析設定

まとめ

本記事では、AWS Bedrock Knowledge BaseとAurora Serverlessを組み合わせたCloudFormationテンプレートの詳細を解説しました。

テンプレートの主な特徴

  1. 柔軟なデータソース設定: 最大5つのデータソースをサポート
  2. 高度なチャンキング戦略: 固定サイズ、階層型、セマンティックから選択可能
  3. 企業レベルの要件に沿った設計: カスタムKMS暗号化、ログ配信、クロスアカウント対応
  4. コスト最適化: Aurora Serverlessの自動スケーリングと一時停止機能
  5. セキュリティ強化: IAMロール、KMS暗号化、Secrets Manager統合

次回

次回の記事では、このテンプレートを使って実際にどのようなスタックを作成したか、具体的なパラメータ設定とデプロイしたときのナレッジベースを確認していこうと思います。


本記事の内容について質問やフィードバックがあれば、お気軽にコメントください!

1
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
1
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?