@@ -1151,4 +1151,58 @@ describe('#compileIamRole', () => {
1151
1151
] ;
1152
1152
expect ( lambdaPermissions [ 0 ] . Resource ) . to . deep . eq ( lambdaArns ) ;
1153
1153
} ) ;
1154
+
1155
+ it ( 'should support lambda::invoke resource type' , ( ) => {
1156
+ const getStateMachine = ( name , functionName ) => ( {
1157
+ name,
1158
+ definition : {
1159
+ StartAt : 'A' ,
1160
+ States : {
1161
+ A : {
1162
+ Type : 'Task' ,
1163
+ Resource : 'arn:aws:states:::lambda:invoke' ,
1164
+ Parameters : {
1165
+ FunctionName : functionName ,
1166
+ Payload : {
1167
+ 'ExecutionName.$' : '$$.Execution.Name' ,
1168
+ } ,
1169
+ } ,
1170
+ End : true ,
1171
+ } ,
1172
+ } ,
1173
+ } ,
1174
+ } ) ;
1175
+
1176
+ // function name can be...
1177
+ const lambda1 = 'a' ; // name-only
1178
+ const lambda2 = 'b:v1' ; // name-only with alias
1179
+ const lambda3 = 'arn:aws:lambda:us-west-2:1234567890:function:c' ; // full arn
1180
+ const lambda4 = '1234567890:function:d' ; // partial arn
1181
+
1182
+ serverless . service . stepFunctions = {
1183
+ stateMachines : {
1184
+ myStateMachine1 : getStateMachine ( 'sm1' , lambda1 ) ,
1185
+ myStateMachine2 : getStateMachine ( 'sm2' , lambda2 ) ,
1186
+ myStateMachine3 : getStateMachine ( 'sm3' , lambda3 ) ,
1187
+ myStateMachine4 : getStateMachine ( 'sm4' , lambda4 ) ,
1188
+ } ,
1189
+ } ;
1190
+
1191
+ serverlessStepFunctions . compileIamRole ( ) ;
1192
+ const statements = serverlessStepFunctions . serverless . service
1193
+ . provider . compiledCloudFormationTemplate . Resources . IamRoleStateMachineExecution
1194
+ . Properties . Policies [ 0 ] . PolicyDocument . Statement ;
1195
+
1196
+ const lambdaPermissions = statements . filter ( s =>
1197
+ _ . isEqual ( s . Action , [ 'lambda:InvokeFunction' ] ) ) ;
1198
+ expect ( lambdaPermissions ) . to . have . lengthOf ( 1 ) ;
1199
+
1200
+ const lambdaArns = [
1201
+ { 'Fn::Sub' : 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:a' } ,
1202
+ { 'Fn::Sub' : 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:b:v1' } ,
1203
+ 'arn:aws:lambda:us-west-2:1234567890:function:c' ,
1204
+ { 'Fn::Sub' : 'arn:aws:lambda:${AWS::Region}:1234567890:function:d' } ,
1205
+ ] ;
1206
+ expect ( lambdaPermissions [ 0 ] . Resource ) . to . deep . eq ( lambdaArns ) ;
1207
+ } ) ;
1154
1208
} ) ;
0 commit comments