3
3
const _ = require ( 'lodash' ) ;
4
4
const BbPromise = require ( 'bluebird' ) ;
5
5
const path = require ( 'path' ) ;
6
- const { isIntrinsic } = require ( '../../utils/aws' ) ;
6
+ const { isIntrinsic, translateLocalFunctionNames } = require ( '../../utils/aws' ) ;
7
7
8
8
function getTaskStates ( states ) {
9
9
return _ . flatMap ( states , ( state ) => {
@@ -177,7 +177,7 @@ function getLambdaPermissions(state) {
177
177
// so you should be able to use Fn::GetAtt here to get the ARN
178
178
return [ {
179
179
action : 'lambda:InvokeFunction' ,
180
- resource : functionName ,
180
+ resource : translateLocalFunctionNames . bind ( this ) ( functionName ) ,
181
181
} ] ;
182
182
} if ( _ . has ( functionName , 'Ref' ) ) {
183
183
// because the FunctionName parameter can be either a name or ARN
@@ -188,7 +188,7 @@ function getLambdaPermissions(state) {
188
188
'Fn::Sub' : [
189
189
'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${FunctionName}' ,
190
190
{
191
- FunctionName : functionName ,
191
+ FunctionName : translateLocalFunctionNames . bind ( this ) ( functionName ) ,
192
192
} ,
193
193
] ,
194
194
} ,
@@ -239,16 +239,16 @@ function consolidatePermissionsByResource(permissions) {
239
239
. value ( ) ; // unchain
240
240
}
241
241
242
- function getIamPermissions ( serverless , taskStates ) {
242
+ function getIamPermissions ( taskStates ) {
243
243
return _ . flatMap ( taskStates , ( state ) => {
244
244
switch ( state . Resource ) {
245
245
case 'arn:aws:states:::sqs:sendMessage' :
246
246
case 'arn:aws:states:::sqs:sendMessage.waitForTaskToken' :
247
- return getSqsPermissions ( serverless , state ) ;
247
+ return getSqsPermissions ( this . serverless , state ) ;
248
248
249
249
case 'arn:aws:states:::sns:publish' :
250
250
case 'arn:aws:states:::sns:publish.waitForTaskToken' :
251
- return getSnsPermissions ( serverless , state ) ;
251
+ return getSnsPermissions ( this . serverless , state ) ;
252
252
253
253
case 'arn:aws:states:::dynamodb:updateItem' :
254
254
return getDynamoDBPermissions ( 'dynamodb:UpdateItem' , state ) ;
@@ -274,16 +274,16 @@ function getIamPermissions(serverless, taskStates) {
274
274
275
275
case 'arn:aws:states:::lambda:invoke' :
276
276
case 'arn:aws:states:::lambda:invoke.waitForTaskToken' :
277
- return getLambdaPermissions ( state ) ;
277
+ return getLambdaPermissions . bind ( this ) ( state ) ;
278
278
279
279
default :
280
280
if ( isIntrinsic ( state . Resource ) || state . Resource . startsWith ( 'arn:aws:lambda' ) ) {
281
281
return [ {
282
282
action : 'lambda:InvokeFunction' ,
283
- resource : state . Resource ,
283
+ resource : translateLocalFunctionNames . bind ( this ) ( state . Resource ) ,
284
284
} ] ;
285
285
}
286
- serverless . cli . consoleLog ( 'Cannot generate IAM policy statement for Task state' , state ) ;
286
+ this . serverless . cli . consoleLog ( 'Cannot generate IAM policy statement for Task state' , state ) ;
287
287
return [ ] ;
288
288
}
289
289
} ) ;
@@ -317,7 +317,7 @@ module.exports = {
317
317
customRolesProvided . push ( 'role' in stateMachineObj ) ;
318
318
319
319
const taskStates = getTaskStates ( stateMachineObj . definition . States ) ;
320
- iamPermissions = iamPermissions . concat ( getIamPermissions ( this . serverless , taskStates ) ) ;
320
+ iamPermissions = iamPermissions . concat ( getIamPermissions . bind ( this ) ( taskStates ) ) ;
321
321
} ) ;
322
322
if ( _ . isEqual ( _ . uniq ( customRolesProvided ) , [ true ] ) ) {
323
323
return BbPromise . resolve ( ) ;
0 commit comments