@@ -20,9 +20,9 @@ import {Apis} from "../resources/Apis"
2020import { Functions } from "../resources/Functions"
2121import { Storage } from "../resources/Storage"
2222import { Secrets } from "../resources/Secrets"
23+ import { OpenSearchResources } from "../resources/OpenSearchResources"
2324
2425const EMBEDDING_MODEL = "amazon.titan-embed-text-v2:0"
25- const COLLECTION_NAME = "eps-assist-vector-db"
2626const VECTOR_INDEX_NAME = "eps-assist-os-index"
2727const BEDROCK_KB_NAME = "eps-assist-kb"
2828
@@ -148,38 +148,6 @@ export class EpsAssistMeStack extends Stack {
148148 const GUARD_RAIL_ID = guardrail . attrGuardrailId
149149 const GUARD_RAIL_VERSION = guardrailVersion . attrVersion
150150
151- //Define OpenSearchServerless Collection & depends on policies
152- const osCollection = new ops . CfnCollection ( this , "osCollection" , {
153- name : COLLECTION_NAME ,
154- description : "EPS Assist Vector Store" ,
155- type : "VECTORSEARCH"
156- } )
157-
158- // Define AOSS vector DB encryption policy with AWSOwned key true
159- const aossEncryptionPolicy = new ops . CfnSecurityPolicy ( this , "aossEncryptionPolicy" , {
160- name : "eps-assist-encryption-policy" ,
161- type : "encryption" ,
162- policy : JSON . stringify ( {
163- Rules : [ { ResourceType : "collection" , Resource : [ "collection/eps-assist-vector-db" ] } ] ,
164- AWSOwnedKey : true
165- } )
166- } )
167- osCollection . addDependency ( aossEncryptionPolicy )
168-
169- // Define Vector DB network policy with AllowFromPublic true. include collection & dashboard
170- const aossNetworkPolicy = new ops . CfnSecurityPolicy ( this , "aossNetworkPolicy" , {
171- name : "eps-assist-network-policy" ,
172- type : "network" ,
173- policy : JSON . stringify ( [ {
174- Rules : [
175- { ResourceType : "collection" , Resource : [ "collection/eps-assist-vector-db" ] } ,
176- { ResourceType : "dashboard" , Resource : [ "collection/eps-assist-vector-db" ] }
177- ] ,
178- AllowFromPublic : true
179- } ] )
180- } )
181- osCollection . addDependency ( aossNetworkPolicy )
182-
183151 // Define createIndexFunction execution role and policy. Managed role 'AWSLambdaBasicExecutionRole'
184152 const createIndexFunctionRole = new iam . Role ( this , "CreateIndexFunctionRole" , {
185153 assumedBy : new iam . ServicePrincipal ( "lambda.amazonaws.com" ) ,
@@ -210,7 +178,14 @@ export class EpsAssistMeStack extends Stack {
210178 effect : iam . Effect . ALLOW
211179 } ) )
212180
213- const endpoint = `${ osCollection . attrId } .${ region } .aoss.amazonaws.com`
181+ // Create OpenSearch Resources
182+ const openSearchResources = new OpenSearchResources ( this , "OpenSearchResources" , {
183+ bedrockExecutionRole,
184+ createIndexFunctionRole,
185+ account
186+ } )
187+
188+ const endpoint = openSearchResources . collection . endpoint
214189
215190 // Define a Bedrock knowledge base with type opensearch serverless and titan for embedding model
216191 const bedrockkb = new CfnKnowledgeBase ( this , "EpsKb" , {
@@ -226,7 +201,7 @@ export class EpsAssistMeStack extends Stack {
226201 storageConfiguration : {
227202 type : "OPENSEARCH_SERVERLESS" ,
228203 opensearchServerlessConfiguration : {
229- collectionArn : osCollection . attrArn ,
204+ collectionArn : openSearchResources . collection . collection . attrArn ,
230205 fieldMapping : {
231206 vectorField : "bedrock-knowledge-base-default-vector" ,
232207 textField : "AMAZON_BEDROCK_TEXT_CHUNK" ,
@@ -249,7 +224,7 @@ export class EpsAssistMeStack extends Stack {
249224 slackSigningSecretParameter : secrets . slackSigningSecretParameter ,
250225 guardrailId : GUARD_RAIL_ID ,
251226 guardrailVersion : GUARD_RAIL_VERSION ,
252- collectionId : osCollection . attrId ,
227+ collectionId : openSearchResources . collection . collection . attrId ,
253228 knowledgeBaseId : bedrockkb . attrKnowledgeBaseId ,
254229 region,
255230 account,
@@ -275,7 +250,7 @@ export class EpsAssistMeStack extends Stack {
275250 ]
276251 } ] )
277252 } )
278- osCollection . addDependency ( aossAccessPolicy )
253+ openSearchResources . collection . collection . addDependency ( aossAccessPolicy )
279254
280255 const vectorIndex = new cr . AwsCustomResource ( this , "VectorIndex" , {
281256 installLatestAwsSdk : true ,
@@ -287,7 +262,7 @@ export class EpsAssistMeStack extends Stack {
287262 InvocationType : "RequestResponse" ,
288263 Payload : JSON . stringify ( {
289264 RequestType : "Create" ,
290- CollectionName : osCollection . name ,
265+ CollectionName : openSearchResources . collection . collection . name ,
291266 IndexName : VECTOR_INDEX_NAME ,
292267 Endpoint : endpoint
293268 } )
@@ -302,7 +277,7 @@ export class EpsAssistMeStack extends Stack {
302277 InvocationType : "RequestResponse" ,
303278 Payload : JSON . stringify ( {
304279 RequestType : "Delete" ,
305- CollectionName : osCollection . name ,
280+ CollectionName : openSearchResources . collection . collection . name ,
306281 IndexName : VECTOR_INDEX_NAME ,
307282 Endpoint : endpoint
308283 } )
@@ -318,12 +293,12 @@ export class EpsAssistMeStack extends Stack {
318293 } )
319294
320295 // Ensure vectorIndex depends on collection
321- vectorIndex . node . addDependency ( osCollection )
296+ vectorIndex . node . addDependency ( openSearchResources . collection . collection )
322297
323298 // add a dependency for bedrock kb on the custom resource. Enables vector index to be created before KB
324299 bedrockkb . node . addDependency ( vectorIndex )
325300 bedrockkb . node . addDependency ( functions . functions . createIndex )
326- bedrockkb . node . addDependency ( osCollection )
301+ bedrockkb . node . addDependency ( openSearchResources . collection . collection )
327302 bedrockkb . node . addDependency ( bedrockExecutionRole )
328303
329304 // Define a bedrock knowledge base data source with S3 bucket
0 commit comments