Jef*_*Wen 4 aws-cloudformation amazon-cognito aws-lambda serverless-framework
在无服务器中,我正在创建一个AWS::Lambda::PermissionCFN 资源,它允许 Cognito 调用自定义消息 Lambda 处理程序。
AWS::Lambda::Permission取决于 lambda。如何确保首先创建 lambda?
我已经尝试向CFN 资源添加一个DependsOn属性,但AWS::Lambda::Permission没有成功。
下面是我的 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}
Run Code Online (Sandbox Code Playgroud)
这是我的 lambda 在我的 lambda 中的样子serverless.yml:
cognitoCustomMessage:
handler: src/main/lambdas/users_handler.cognitoCustomMessage
Run Code Online (Sandbox Code Playgroud)
这是我的 lambda 在非常基本的层面上所做的:
cognitoCustomMessage(event, next) {
if (event.triggerSource === 'CustomMessage_ForgotPassword') {
// do stuff
}
return next(null, event);
}
Run Code Online (Sandbox Code Playgroud)
我从上面得到的错误是:
发生错误: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
...
....
Run Code Online (Sandbox Code Playgroud)
我从上面得到的错误是:
CloudFormation 模板无效:模板格式错误:DependsOn 必须是字符串或字符串列表。
我也试过:
UserPoolLambdaInvokePermission:
Type: AWS::Lambda::Permission
DependsOn: CognitoCustomMessageLambdaFunction
...
....
Run Code Online (Sandbox Code Playgroud)
我从上面得到的错误是:
发生错误:CognitoCustomMessageLambdaFunction - 找不到函数:arn:aws:lambda:us-west-2:1234567890:my-service-dev-cognitoCustomMessage(服务:AWSLambdaInternal;状态代码:404;错误代码:ResourceNotFoundException;请求 ID:b888ae82 -a0d7-4d69-888e-9e63027925c1)。
我希望在需要使用它的 CFN 资源之前应该有一些方法来创建一个 lambda 函数,但DependsOn.
小智 10
在 serverless.yml 中定义的函数会在后台转换为 cloudformation 资源。该资源称为 XLambdaFunction,其中 X = 函数名称,首字母大写。
所以如果你有:
functions:
hello:
handler: handler.hello
...other function stuff...
Run Code Online (Sandbox Code Playgroud)
您可以参考:
DependsOn: HelloLambdaFunction
Run Code Online (Sandbox Code Playgroud)
我只能假设,如果您的函数已经命名,CognitoCustomMessageLambdaFunction那么您必须引用:
DependsOn: CognitoCustomMessageLambdaFunctionLambdaFunction
Run Code Online (Sandbox Code Playgroud)
小智 5
DependsOn 属性应具有 Cloud 形成模板中 Lambda 函数的逻辑名称,而不是 Lambda 函数的 ARN。例如,如果您的 Lambda 函数在 Cloud Formation 模板中的逻辑名称是 MyLambda,则 DependsOn 应如下所示:
UserPoolLambdaInvokePermission:
Type: AWS::Lambda::Permission
DependsOn: MyLambda
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2327 次 |
| 最近记录: |