Я пытаюсь развернуть расписание AWS EventBridge и прикрепить к нему все соответствующие политики с помощью следующей конфигурации terraform.
обновление: Решение:
resource "aws_iam_role" "eventbridge_role" {
name = "EventBridgeRoleForStepFunctions"
assume_role_policy = jsonencode({
"Version" = "2012-10-17",
"Statement" = [
{
"Effect" = "Allow",
"Principal" = {
"Service" = "scheduler.amazonaws.com"
},
"Action" = "sts:AssumeRole"
}
]
})
}
resource "aws_iam_policy" "eventbridge_invoke_stepfunctions_policy" {
name = "EventBridgeInvokeStepFunctionsPolicy"
path = "/"
description = "Allow EventBridge to invoke Step Functions"
policy = jsonencode({
Version = "2012-10-17",
Statement = [
{
Effect = "Allow",
Action = "states:StartExecution",
Resource = aws_sfn_state_machine.MySandboxStateMachine.arn
}
]
})
}
resource "aws_iam_policy_attachment" "eventbridge_role_policy_attachment" {
name = "StepFunctionPolicyAttachment"
policy_arn = aws_iam_policy.eventbridge_invoke_stepfunctions_policy.arn
roles = [aws_iam_role.eventbridge_role.name]
}
resource "aws_scheduler_schedule" "every_five_minutes" {
name = "every-five-minutes"
group_name = "default"
flexible_time_window {
mode = "OFF"
}
schedule_expression = "cron(0/5 * * * ? *)"
target {
arn = aws_sfn_state_machine.MySandboxStateMachine.arn
role_arn = aws_iam_role.eventbridge_role.arn
}
}
Creating Amazon EventBridge Scheduler Schedule (every-five-minutes): operation error Scheduler: CreateSchedule, https response error StatusCode: 400, RequestID: a3a7f4fa-b96e-4107-a041-2cd339e266c7, ValidationException: The execution role you provide must allow AWS EventBridge Scheduler to assume the role.
Каким будет исправление для правильного прикрепления политики, поскольку я готов поспорить, что следую рекомендациям Terraform AWS.
Вам необходимо использовать правильное имя службы в политике принятия роли. В данном случае это (документы ):
"scheduler.amazonaws.com"
Итак, вам нужно изменить код на следующий:
resource "aws_iam_role" "eventbridge_role" {
name = "EventBridgeRoleForStepFunctions"
assume_role_policy = jsonencode({
"Version" = "2012-10-17",
"Statement" = [
{
"Effect" = "Allow",
"Principal" = {
"Service" = "scheduler.amazonaws.com"
},
"Action" = "sts:AssumeRole"
}
]
})
}
Большое спасибо, что заметили это! Просто потратил столько времени на отладку! <3. Я обновил вопрос рабочим решением.