Amazon web services 在更新堆栈操作上删除AWS Cognito Lambda触发器
我️ 我注意到,每当部署新的CloudFormation堆栈更改时,我的用户池触发器都会被删除,并且必须在AWS仪表板中手动或以编程方式重新添加。这有点令人担忧,因为这些触发器通过Cognito和后端系统之间的通信执行一些关键操作 起初我️ 虽然这是我们正在使用的部署框架,但这里是一个CF模板I的简单示例️ 能够通过以下方式复制它: 更新以反映Lambda对用户池的附件Amazon web services 在更新堆栈操作上删除AWS Cognito Lambda触发器,amazon-web-services,amazon-cloudformation,amazon-cognito,Amazon Web Services,Amazon Cloudformation,Amazon Cognito,我️ 我注意到,每当部署新的CloudFormation堆栈更改时,我的用户池触发器都会被删除,并且必须在AWS仪表板中手动或以编程方式重新添加。这有点令人担忧,因为这些触发器通过Cognito和后端系统之间的通信执行一些关键操作 起初我️ 虽然这是我们正在使用的部署框架,但这里是一个CF模板I的简单示例️ 能够通过以下方式复制它: 更新以反映Lambda对用户池的附件 { "AWSTemplateFormatVersion": "2010-09-09"
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"UserPool": {
"Type": "AWS::Cognito::UserPool",
"Properties": {
"UserPoolName": "test",
"UsernameAttributes": [
"email"
],
"EmailVerificationMessage": "Your verification code is {####}.",
"EmailVerificationSubject": "Your verification code",
"Policies": {
"PasswordPolicy": {
"MinimumLength": 8,
"RequireLowercase": true,
"RequireNumbers": true
}
}
}
},
"UserPoolClient": {
"Type": "AWS::Cognito::UserPoolClient",
"Properties": {
"ClientName": "Test Client",
"UserPoolId": {
"Ref": "UserPool"
},
"ExplicitAuthFlows": [
"ALLOW_REFRESH_TOKEN_AUTH",
"ALLOW_USER_PASSWORD_AUTH",
"ALLOW_USER_SRP_AUTH"
],
"GenerateSecret": false
}
},
"PreSignUpHandlerLambdaFunction": {
"Type": "AWS::Lambda::Function",
"Properties": {
"Role": "arn:aws:iam::...",
"Code": {
"S3Bucket": "code-bucket",
"S3Key": "code-bucket/functions.zip"
},
"Handler": "handlers/pre-sign-up.default",
"Runtime": "nodejs12.x",
"FunctionName": "test-preSignUpHandler",
"MemorySize": 1024,
"Timeout": 6
}
},
"PreSignUpHandlerCustomCognitoUserPool1": {
"Type": "Custom::CognitoUserPool",
"Version": 1,
"DependsOn": [
"PreSignUpHandlerLambdaFunction"
],
"Properties": {
"ServiceToken": "arn:aws:lambda:...",
"FunctionName": "test-preSignUpHandler",
"UserPoolName": "test",
"UserPoolConfigs": [
{
"Trigger": "PreSignUp"
}
]
}
}
}
}
我️ 已经深入研究了更新生成的CloudWatch日志,但是关于用户池更新和触发器的删除,没有什么是透明的。
还有其他人经历过这种情况吗?有什么解决办法吗?这是CloudFormation的预期行为。当在堆栈更新中检测到配置漂移时,它将使其与堆栈模板一致。如果要保留更改,应在CFN模板中指定触发器。请确保在资源策略中授予cognito访问权限:
{
“版本”:“2012-10-17”,
“Id”:“默认值”,
“声明”:[
{
“Sid”:“lambda允许cognito我的函数”,
“效果”:“允许”,
“委托人”:{
“服务”:“cognito idp.amazonaws.com”
},
“操作”:“lambda:InvokeFunction”,
“资源”:“arn:aws:lambda:us-east-1:123456789012:function:my function”,
“条件”:{
“StringEquals”:{
“AWS:SourceAccount”:“123456789012”
},
“阿恩利克”:{
“AWS:SourceArn”:“arn:AWS:cognito idp:us-east-1:123456789012:userpool/us-east-1_myUserPoolId”
}
}
}
]
}
在CF模板中指定触发器也会分离触发器,这就是问题产生的原因。您已为允许cognito执行访问分配了正确的lambda权限?嘿,Andrew,我️ 感谢您的关注。是的,所有触发器都具有调用访问权限,即使在CF模板中指定为触发器,此行为仍将保持。我已经更新了我的帖子,以反映正在部署的内容的更准确版本️ 我已经注意到我们的部署框架以一种非传统的方式连接Lambda(它从YML生成CF模板)。我️ 我指的是更新后的示例中包含的“Custom::CognitoUserPool”资源。您使用的是什么框架?