Сообщение об ошибке, которым вы поделились, похоже, предполагает, что политика предполагаемой роли для данной роли не включает ни одного из принципалов службы, используемых Step Functions. Для роли потребуется политика предполагаемой роли, в которой этот сервис указан как один из разрешенных принципалов:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "states.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
В Terraform мы обычно устанавливаем это как аргумент ресурса aws_iam_role
:
resource "aws_iam_role" "example" {
name = "stepfunctions"
assume_role_policy = jsonencode({
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "states.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
})
}
Затем мы можем ссылаться на ARN этой роли в ресурсе aws_sfn_state_machine
, который автоматически создаст зависимость, чтобы гарантировать, что Terraform не будет пытаться создать пошаговую функцию, пока не создаст роль:
resource "aws_sfn_state_machine" "example" {
name = "my-state-machine"
role_arn = aws_iam_role.example.arn
# ...
}
К сожалению, из-за внутренней конструкции AWS IAM иногда может пройти несколько минут после создания объекта IAM, прежде чем этот объект станет полностью функциональным. API AWS не предоставляет какой-либо полностью надежный способ определить, когда участник IAM является полностью работоспособным после изменения настроек, поэтому провайдер Terraform AWS часто прилагает все усилия для опроса о завершении, но не всегда может гарантировать, что .
Если вы по-прежнему видите указанную вами ошибку в конфигурации, подобной приведенной выше, я бы посоветовал подождать 10 минут после того, как вы увидите ошибку, и попробуйте снова запустить terraform apply
( без уничтожив роль и воссоздав ее), чтобы посмотреть, работает ли она. Конечно, необходимость дважды запускать Terraform, чтобы получить желаемый ответ, далеко не удобно, но, по крайней мере, выявление отложенной согласованности как причины позволит избежать тратить время на исследование других возможных проблем.