Aws lambda “你怎么看?”;“德彭森”;来自CFN资源的Lambda函数?
在Serverless中,我创建了一个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
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
?这是我一直在寻找的完美答案!