Amazon web services 地形:由于IAM DynamodBautoscale角色,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

简短问题:

为什么aws_appautoscaling_策略和aws_appautoscaling_目标没有看到最近创建的DynamoDBAutoscaleRole(可能是由于IAM DynamoDBAutoscaleRole最终的一致性)

地形版本:v0.10.7

详细描述和问题:

Terraform配置具有以下资源(创建顺序如下所述):DynamoDBAutoscaleRole, DynamoDB表格,读写表格的自动缩放资源 aws_appautoscaling_策略和aws_appautoscaling_目标

有时此脚本运行正常(使用
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角色
添加到了
依赖的列表中?当然,我添加了。按以下顺序创建资源(使用
的设置取决于
):DynamoDBAutoscaleRole
aws\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目标之后执行)