@@ -20,14 +20,27 @@ export class AiStack {
20
20
description : 'Layer with aws-sdk' ,
21
21
} )
22
22
23
- // Defining the Node.js Lambda function
23
+ const aiRole = new iam . Role ( scope , 'AiRole' , {
24
+ assumedBy : new iam . ServicePrincipal ( 'lambda.amazonaws.com' ) ,
25
+ } )
26
+
27
+ // Granting the Lambda permission to invoke the AI model
28
+ aiRole . addToPolicy (
29
+ new iam . PolicyStatement ( {
30
+ actions : [ 'bedrock:InvokeModel' ] ,
31
+ resources : config . ai . models ?. map ( model => `arn:aws:bedrock:us-east-1:${ props . env . account } :foundation-model/${ model } ` ) ,
32
+ effect : iam . Effect . ALLOW ,
33
+ } ) ,
34
+ )
35
+
24
36
const aiLambda = new lambda . Function ( scope , 'LambdaFunction' , {
25
37
functionName : `${ props . slug } -${ props . appEnv } -ai` ,
26
38
description : 'Lambda function to invoke the AI model' ,
27
39
runtime : lambda . Runtime . NODEJS_20_X ,
28
40
handler : 'index.handler' ,
29
41
code : lambda . Code . fromAsset ( 'src/cloud/lambda' ) , // path relative to the cloud root package dir
30
42
layers : [ awsSdkLayer ] ,
43
+ role : aiRole ,
31
44
} )
32
45
33
46
const api = new lambda . FunctionUrl ( scope , 'AiLambdaUrl' , {
@@ -38,14 +51,6 @@ export class AiStack {
38
51
} ,
39
52
} )
40
53
41
- // Granting the Lambda permission to invoke the AI model
42
- aiLambda . role ?. addToPrincipalPolicy (
43
- new iam . PolicyStatement ( {
44
- actions : [ 'bedrock:InvokeModel' ] ,
45
- resources : config . ai . models ?. map ( model => `arn:aws:bedrock:us-east-1:${ props . env . account } :foundation-model/${ model } ` ) ,
46
- } ) ,
47
- )
48
-
49
54
new Output ( scope , 'AiApiUrl' , {
50
55
value : api . url ,
51
56
} )
0 commit comments