gpt4 book ai didi

amazon-web-services - 在CloudFormation中, "A DependsOn B"是否确保A先于B被删除?

转载 作者:行者123 更新时间:2023-12-03 07:26:41 25 4
gpt4 key购买 nike

我们正在使用 CloudFormation 为其设置角色和策略。使用“DependsOn”属性将策略设置为取决于角色,如下所示:

角色定义:

"LambdaExecutionRole": {
"Type": "AWS::IAM::Role",
"Properties": {
[...]

政策定义:

"lambdaexecutionpolicy": {
"DependsOn": [
"LambdaExecutionRole"
],
"Roles": [
{
"Ref": "LambdaExecutionRole"
}
],
[...]

来自official documentation ,我理解两个实体之间的这种 DependsOn 关系应该确保策略始终在角色之前被删除。

Resource A is deleted before resource B.

但是,我们遇到一个错误,系统似乎尝试删除策略之前的角色:

Resource Name: [...] (AWS::IAM::Role)
Event Type: delete
Reason: Cannot delete entity, must delete policies first. (Service: AmazonIdentityManagement; Status Code: 409; Error Code: DeleteConflict; Request ID: [...]; Proxy: null)

我不确定这怎么可能,因为我会考虑“A DependsOn B”以确保系统在删除 A 之前不会尝试删除 B。我的理解是否错误?是否存在系统尝试在 A 之前删除 B 的情况?

是的,我知道在这种情况下,明显的解决方案是使用内联策略,因为该策略仅用于此特定角色。但由于这种行为似乎与我对官方文档的直观理解相冲突,因此我想正确理解“DependsOn”属性的实际含义。

最佳答案

TL;DR 无法复制该错误。 DependsOn 似乎不是罪魁祸首。

我使用 CDK 创建了两个版本的最小测试堆栈,仅使用两个资源:AWS::IAM::RoleAWS::IAM::ManagedPolicy 。 V1 没有对该角色设置明确的策略依赖关系。 V2 和 OP 一样,也是这么做的。差异没有什么区别。两个版本都部署并销毁,没有错误。

版本 1:CDK 生成的默认值:模板中没有“取决于”

版本 2(如 OP):具有显式依赖性 - 策略取决于角色。 CDK 在模板中添加了一行:"TestPolicyCC05E598"

下的 "DependsOn": [ "TestRole6C9272DF"]

这两个版本的区别仅在于单个DependsOn。两个版本都按预期部署和销毁,没有错误。

// resource section of CDK-generated Cloud Formation Template
"Resources": {
"TestRole6C9272DF": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
}
}
],
"Version": "2012-10-17"
}
},
"Metadata": {
"aws:cdk:path": "TsCdkPlaygroundIamDependencyStack/TestRole/Resource"
}
},
"TestPolicyCC05E598": {
"Type": "AWS::IAM::ManagedPolicy",
"Properties": {
"PolicyDocument": {
"Statement": [
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "2012-10-17"
},
"Description": "",
"Path": "/",
"Roles": [
{
"Ref": "TestRole6C9272DF"
}
]
},
"DependsOn": [
"TestRole6C9272DF" // <-- The difference that makes no difference
],
"Metadata": {
"aws:cdk:path": "TsCdkPlaygroundIamDependencyStack/TestPolicy/Resource"
}
},

关于amazon-web-services - 在CloudFormation中, "A DependsOn B"是否确保A先于B被删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70378869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com