はじめに
Aurora ServerlessをベクトルストアとしたAWS Bedrock Knowledge BaseのCloudFormationテンプレートについて深く理解するためにこの記事を書きました。
各パラメータやリソースの役割を読み解いていくことで、Bedrock Knowledge Baseでどのような設定が可能なのか、より具体的に理解することができました。
本記事では、このテンプレートの各セクションを詳細に解説し、それぞれのパラメータやリソースがどのような役割を果たしているのかを記載しています。
目次
テンプレート概要
目的
このCloudFormationテンプレートは、AWS Bedrock Knowledge BaseをAurora Serverlessクラスターをベクトルストアとして使用する形でデプロイするために設計されています。
主な構成要素
- Aurora Serverless クラスター(ベクトルデータベース)
- Bedrock Knowledge Base(ナレッジベース本体)
- 最大5つのデータソース設定
- IAMロールとポリシー
- ログ配信設定(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
主なグループ:
- Secret Manager Configuration: KMSキー設定
- Aurora Database Cluster Configuration: Auroraクラスターの設定
- Bedrock Knowledge Base Configuration: Knowledge Baseの基本設定
- 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テンプレートの詳細を解説しました。
テンプレートの主な特徴
- 柔軟なデータソース設定: 最大5つのデータソースをサポート
- 高度なチャンキング戦略: 固定サイズ、階層型、セマンティックから選択可能
- 企業レベルの要件に沿った設計: カスタムKMS暗号化、ログ配信、クロスアカウント対応
- コスト最適化: Aurora Serverlessの自動スケーリングと一時停止機能
- セキュリティ強化: IAMロール、KMS暗号化、Secrets Manager統合
次回
次回の記事では、このテンプレートを使って実際にどのようなスタックを作成したか、具体的なパラメータ設定とデプロイしたときのナレッジベースを確認していこうと思います。
本記事の内容について質問やフィードバックがあれば、お気軽にコメントください!