Aws lambda “你怎么看?”;“德彭森”;来自CFN资源的Lambda函数?

Aws lambda “你怎么看?”;“德彭森”;来自CFN资源的Lambda函数?,aws-lambda,amazon-cloudformation,amazon-cognito,serverless-framework,Aws Lambda,Amazon Cloudformation,Amazon Cognito,Serverless Framework,在Serverless中,我创建了一个AWS::Lambda::PermissionCFN资源,允许Cognito调用 AWS::Lambda::权限取决于Lambda。如何确保首先创建lambda 我已经尝试将DependsOn属性添加到AWS::Lambda::PermissionCFN资源,但没有成功 下面是我的CFN资源,它试图向Cognito添加调用lambda的权限: UserPoolLambdaInvokePermission: Type: AWS::Lambda::Permi

在Serverless中,我创建了一个
AWS::Lambda::Permission
CFN资源,允许Cognito调用

AWS::Lambda::权限取决于Lambda。如何确保首先创建lambda

我已经尝试将
DependsOn
属性添加到
AWS::Lambda::Permission
CFN资源,但没有成功

下面是我的CFN资源,它试图向Cognito添加调用lambda的权限:

UserPoolLambdaInvokePermission:
  Type: AWS::Lambda::Permission
  Properties:
    Action: lambda:invokeFunction
    Principal: cognito-idp.amazonaws.com
    FunctionName: arn:aws:lambda:${self:provider.region}:#{AWS::AccountId}:function:${self:service}-${self:provider.stage}-cognitoCustomMessage
    SourceArn: arn:aws:cognito-idp:${self:provider.region}:#{AWS::AccountId}:userpool/${self:provider.environment.USER_POOL_ID}
以下是我的lambda在我的
serverless.yml中的样子:

cognitoCustomMessage:
  handler: src/main/lambdas/users_handler.cognitoCustomMessage
以下是我的lambda在一个非常基本的层面上所做的工作:

cognitoCustomMessage(event, next) {
  if (event.triggerSource === 'CustomMessage_ForgotPassword') {
    // do stuff
  }
  return next(null, event);
}
我从上面得到的错误是:

出现错误:CognitoCustomMessageLambdaFunction-函数不可用 发现: arn:aws:lambda:us-west-2:1234567890:my service dev cognitoCustomMessage (服务:AWSLambdaInternal;状态代码:404;错误代码: ResourceNotFoundException;请求ID: e2a98525-5090-4d0f-a1f5-20610474f93b)

如果我添加一个
DependsOn

UserPoolLambdaInvokePermission:
  Type: AWS::Lambda::Permission
  DependsOn: arn:aws:lambda:${self:provider.region}:#{AWS::AccountId}:function:${self:service}-${self:provider.stage}-cognitoCustomMessage
  ...
  ....
我从上面得到的错误是:

CloudFormation模板无效:模板格式错误: DependsOn必须是字符串或字符串列表

我也尝试过:

UserPoolLambdaInvokePermission:
  Type: AWS::Lambda::Permission
  DependsOn: CognitoCustomMessageLambdaFunction
  ...
  ....
我从上面得到的错误是:

出现错误:CognitoCustomMessageLambdaFunction-函数不可用 发现: arn:aws:lambda:us-west-2:1234567890:my service dev cognitoCustomMessage (服务:AWSLambdaInternal;状态代码:404;错误代码: ResourceNotFoundException;请求ID: b888ae82-a0d7-4d69-888e-9e63027925c1)


我希望在CFN资源需要使用之前,应该有一些方法首先创建lambda函数,但是
DependsOn

的情况似乎并非如此,DependsOn属性应该在云形成模板中具有lambda函数的逻辑名称,而不是lambda函数的ARN。例如,如果您的Lambda函数在云形成模板中的逻辑名称为MyLambda,则DependsOn应如下所示:

UserPoolLambdaInvokePermission:
  Type: AWS::Lambda::Permission
  DependsOn: MyLambda 

在serverless.yml中定义的函数被转换为后台的cloudformation资源。该资源称为XLambdaFunction,其中X=首字母大写的函数名

因此,如果你有:

functions:
  hello:
    handler: handler.hello
    ...other function stuff...
你可以参考:

DependsOn: HelloLambdaFunction
DependsOn: CognitoCustomMessageLambdaFunctionLambdaFunction
我只能假设,如果您的函数已经命名为
CognitoCustomMessageLambdaFunction
,那么您必须引用:

DependsOn: HelloLambdaFunction
DependsOn: CognitoCustomMessageLambdaFunctionLambdaFunction

我也遇到了类似的问题,添加dependsOn键对我很有效。

我在
serverless.yml
中创建了lambda函数。我已经更新了原始帖子,如果我将
DependsOn
更改为lambda的逻辑ID,会发生什么情况。您可以将lambda函数的片段与权限资源一起共享吗?据我所见,您已将lambda命名为“cognitoCustomMessage”,并在DependsOn中编写了“CognitoCustomMessageLambdaFunction”。“DependsOn”属性确实有效。我遇到的问题与我之前删除lambda有关。因此,SLS/CFN将运行一个更新过程,并且仍然认为它在那里。只需更改lambda函数的名称/逻辑id的名称就可以了。您应该在帖子中包含lambda函数的基本声明。@jarmod我已经添加了我的lambda@JeffreyWen嘿,杰弗里,我有一个和你类似的问题,你在你的财产上写了什么?
函数名中的arn
?这是我一直在寻找的完美答案!