33const _ = require ( 'lodash' ) ;
44const BbPromise = require ( 'bluebird' ) ;
55const path = require ( 'path' ) ;
6- const { isIntrinsic } = require ( '../../utils/aws' ) ;
6+ const { isIntrinsic, translateLocalFunctionNames } = require ( '../../utils/aws' ) ;
77
88function getTaskStates ( states ) {
99 return _ . flatMap ( states , ( state ) => {
@@ -177,7 +177,7 @@ function getLambdaPermissions(state) {
177177 // so you should be able to use Fn::GetAtt here to get the ARN
178178 return [ {
179179 action : 'lambda:InvokeFunction' ,
180- resource : functionName ,
180+ resource : translateLocalFunctionNames . bind ( this ) ( functionName ) ,
181181 } ] ;
182182 } if ( _ . has ( functionName , 'Ref' ) ) {
183183 // because the FunctionName parameter can be either a name or ARN
@@ -188,7 +188,7 @@ function getLambdaPermissions(state) {
188188 'Fn::Sub' : [
189189 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${FunctionName}' ,
190190 {
191- FunctionName : functionName ,
191+ FunctionName : translateLocalFunctionNames . bind ( this ) ( functionName ) ,
192192 } ,
193193 ] ,
194194 } ,
@@ -239,16 +239,16 @@ function consolidatePermissionsByResource(permissions) {
239239 . value ( ) ; // unchain
240240}
241241
242- function getIamPermissions ( serverless , taskStates ) {
242+ function getIamPermissions ( taskStates ) {
243243 return _ . flatMap ( taskStates , ( state ) => {
244244 switch ( state . Resource ) {
245245 case 'arn:aws:states:::sqs:sendMessage' :
246246 case 'arn:aws:states:::sqs:sendMessage.waitForTaskToken' :
247- return getSqsPermissions ( serverless , state ) ;
247+ return getSqsPermissions ( this . serverless , state ) ;
248248
249249 case 'arn:aws:states:::sns:publish' :
250250 case 'arn:aws:states:::sns:publish.waitForTaskToken' :
251- return getSnsPermissions ( serverless , state ) ;
251+ return getSnsPermissions ( this . serverless , state ) ;
252252
253253 case 'arn:aws:states:::dynamodb:updateItem' :
254254 return getDynamoDBPermissions ( 'dynamodb:UpdateItem' , state ) ;
@@ -274,16 +274,16 @@ function getIamPermissions(serverless, taskStates) {
274274
275275 case 'arn:aws:states:::lambda:invoke' :
276276 case 'arn:aws:states:::lambda:invoke.waitForTaskToken' :
277- return getLambdaPermissions ( state ) ;
277+ return getLambdaPermissions . bind ( this ) ( state ) ;
278278
279279 default :
280280 if ( isIntrinsic ( state . Resource ) || state . Resource . startsWith ( 'arn:aws:lambda' ) ) {
281281 return [ {
282282 action : 'lambda:InvokeFunction' ,
283- resource : state . Resource ,
283+ resource : translateLocalFunctionNames . bind ( this ) ( state . Resource ) ,
284284 } ] ;
285285 }
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 ) ;
287287 return [ ] ;
288288 }
289289 } ) ;
@@ -317,7 +317,7 @@ module.exports = {
317317 customRolesProvided . push ( 'role' in stateMachineObj ) ;
318318
319319 const taskStates = getTaskStates ( stateMachineObj . definition . States ) ;
320- iamPermissions = iamPermissions . concat ( getIamPermissions ( this . serverless , taskStates ) ) ;
320+ iamPermissions = iamPermissions . concat ( getIamPermissions . bind ( this ) ( taskStates ) ) ;
321321 } ) ;
322322 if ( _ . isEqual ( _ . uniq ( customRolesProvided ) , [ true ] ) ) {
323323 return BbPromise . resolve ( ) ;
0 commit comments