Amazon web services 地形:由于IAM DynamodBautoscale角色,aws_appautoscaling_目标和aws_appautoscaling_策略出现错误
简短问题: 为什么aws_appautoscaling_策略和aws_appautoscaling_目标没有看到最近创建的DynamoDBAutoscaleRole(可能是由于IAM DynamoDBAutoscaleRole最终的一致性) 地形版本:v0.10.7 详细描述和问题: Terraform配置具有以下资源(创建顺序如下所述):DynamoDBAutoscaleRole, DynamoDB表格,读写表格的自动缩放资源 aws_appautoscaling_策略和aws_appautoscaling_目标 有时此脚本运行正常(使用Amazon web services 地形:由于IAM DynamodBautoscale角色,aws_appautoscaling_目标和aws_appautoscaling_策略出现错误,amazon-web-services,amazon-dynamodb,autoscaling,terraform,Amazon Web Services,Amazon Dynamodb,Autoscaling,Terraform,简短问题: 为什么aws_appautoscaling_策略和aws_appautoscaling_目标没有看到最近创建的DynamoDBAutoscaleRole(可能是由于IAM DynamoDBAutoscaleRole最终的一致性) 地形版本:v0.10.7 详细描述和问题: Terraform配置具有以下资源(创建顺序如下所述):DynamoDBAutoscaleRole, DynamoDB表格,读写表格的自动缩放资源 aws_appautoscaling_策略和aws_appauto
terraform apply
),但在大多数情况下aws\u appautoscaling\u target
和aws\u appautoscaling\u policy
会因以下不同错误而失败:
“aws_appautoscaling_policy.Read:未能创建缩放策略:
放置缩放策略时出错:FailedResourceAccessException:无法
检索资源的容量:表/首选项,可扩展维度:
dynamodb:表:ReadCapacityUnits。原因:包含安全令牌
请求中的无效。状态代码:400“
“aws\u appautoscaling\u target.Read:创建应用程序时出错
自动缩放目标:ValidationException:的验证失败
资源:表/首选项,可扩展维度:
dynamodb:表:ReadCapacityUnits。原因:包含安全令牌
请求中的无效。状态代码:400“
如果我重新运行terraform apply
,有时会多次运行,它会正常工作<代码>地形平面图始终成功运行
如果我只运行DynamoDBAutoscaleRole的创建(在一个单独的.tf文件中),
在运行表创建、aws_appautoscaling_策略和aws_appautoscaling_目标几分钟后,此配置始终成功运行
所以我猜问题出在aws_appautoscaling_策略中,aws_appautoscaling_目标没有看到最近创建的角色,可能是由于IAM DynamoDBAutoscaleRole最终的一致性。这个假设是真的吗?是否存在等待aws_appautoscaling_策略和aws_appautoscaling_目标明确看到角色的解决方法
resource "aws_appautoscaling_target" "Read" {
max_capacity = 100
min_capacity = 5
resource_id = "table/Preferences"
role_arn = "arn:aws:iam::XXX:role/service-role/DynamoDBAutoscaleRole"
scalable_dimension = "dynamodb:table:ReadCapacityUnits"
service_namespace = "dynamodb"
depends_on = [ "aws_dynamodb_table.Preferences-table", "aws_iam_role.DynamoDBAutoscale", "aws_iam_role_policy.DynamoDBAutoscale" ]
}
resource "aws_appautoscaling_policy" "Read" {
name = "${aws_appautoscaling_target.Read.id}"
service_namespace = "dynamodb"
policy_type = "TargetTrackingScaling"
resource_id = "table/Preferences"
scalable_dimension = "dynamodb:table:ReadCapacityUnits"
target_tracking_scaling_policy_configuration {
predefined_metric_specification {
predefined_metric_type = "DynamoDBReadCapacityUtilization"
}
scale_in_cooldown = 60
scale_out_cooldown = 60
target_value = 70
}
depends_on = ["aws_appautoscaling_target.Read"]
}
您是否也将角色资源
dynamodbautoscale角色添加到了依赖的列表中?当然,我添加了。按以下顺序创建资源(使用的设置取决于):DynamoDBAutoscaleRoleaws\u iam\u role
带策略、DynamoDB表aws\u DynamoDB\u表
、aws\u appautoscaling\u目标、aws\u appautoscaling\u策略
。因此,在我的terraform配置中,资源是一个接一个地创建的。顺序是由terraform设置的,而不是由您逐个编写的资源代码序列设置的。因此,在某些情况下,您必须添加“依赖”。@BMW,也许您没有正确理解我的评论。谢谢,我知道。我添加了以下资源的依赖:*表(在iam策略之后执行)*aws\u appautoscaling\u目标(在表之后执行)*aws\u appautoscaling\u策略(在aws\u appautoscaling\u目标之后执行)