2016-06-03 2 views
0

Всякий раз, когда я бегу в первый раз следующий файл терраформировать я получаю ошибку:Invalid главным в политике

Ошибка создания IAM Роль SecurityMonkey: MalformedPolicyDocument: Invalid принципала в политике: «AWS».

Однако, wen Я выполняю код во второй раз, когда выполнение преуспевает, создавая объект роли принятия. Мне кажется, что есть некоторые проблемы с зависимостями между ролью A и ролью B. В качестве средства защиты я поставил даже выражение depend_on на роль A, но не повезло.

SecurityMonkeyInstanceProfile

Здесь вы можете проверить свой код TF.

resource "aws_iam_role" "SecurityMonkey" { 
name    = "SecurityMonkey" 
depends_on = ["aws_iam_role.SecurityMonkeyInstanceProfile"] 
path    = "/" 
assume_role_policy = <<POLICY 
{ 
"Version": "2008-10-17", 
"Statement": [ 
{ 
    "Sid": "", 
    "Effect": "Allow", 
    "Principal": { 
    "AWS": "arn:aws:iam::<AccountID>:role/SecurityMonkeyInstanceProfile" 
    }, 
    "Action": "sts:AssumeRole" 
    } 
    ] 
} 
POLICY 
} 


resource "aws_iam_role" "SecurityMonkeyInstanceProfile" { 
name    = "SecurityMonkeyInstanceProfile" 
path    = "/" 
assume_role_policy = <<POLICY 
{ 
"Version": "2012-10-17", 
"Statement": [ 
{ 
    "Effect": "Allow", 
    "Principal": { 
    "Service": "ec2.amazonaws.com" 
    }, 
    "Action": "sts:AssumeRole" 
} 
] 
} 
POLICY 
} 

Первый запуск с ошибкой.

aws_iam_role.SecurityMonkey: Error creating IAM Role SecurityMonkey: MalformedPolicyDocument: Invalid principal in policy: "AWS":"arn:aws:iam::<AccountID>:role/SecurityMonkeyInstanceProfile" 
    status code: 400, request id: 0810c923-28dd-11e6-af5d-47689d50861a 

Второй запуск без ошибок.

terraform apply -var-file=../../aws.tfvars 
aws_iam_role.SecurityMonkeyInstanceProfile: Refreshing state... (ID: SecurityMonkeyInstanceProfile) 
aws_iam_role.SecurityMonkey: Creating... 
    arn:    "" => "<computed>" 
    assume_role_policy: "" => "{\n \"Version\": \"2008-10-17\",\n \"Statement\": [\n {\n  \"Sid\": \"\",\n  \"Effect\": \"Allow\",\n  \"Principal\": {\n  \"AWS\": \"arn:aws:iam::<AccountID>:role/SecurityMonkeyInstanceProfile\"\n  },\n  \"Action\": \"sts:AssumeRole\"\n }\n ]\n}\n" 
    name:    "" => "SecurityMonkey" 
    path:    "" => "/" 
    unique_id:   "" => "<computed>" 
aws_iam_role.SecurityMonkey: Creation complete 

Apply complete! Resources: 1 added, 0 changed, 0 destroyed. 

Очевидно, что ресурсы создаются в правильном порядке, но, кажется, что есть какой-то тайм-аут, что делает SecurityMonkeyInstanceProfile роль не обнаружить роботу SecurityMonkey роли. В значительной степени проблема с курицей и яйцом.

Любые подсказки?

ответ

0

С какой версией в terraform вы использовали?

Если это уже самая последняя версия, то я угадаю, что промежуток времени между двумя ресурсами слишком короткий, система API не имеет достаточного времени, чтобы сообщить новый ресурс SecurityMonkeyInstanceProfile, который будет создан при последующем последующем создании ресурсов уже.

Попробуйте добавить функцию сна и сообщите мне, может ли это исправить вашу проблему или нет.

resource "aws_iam_role" "SecurityMonkeyInstanceProfile" { 
    ... 
    provisioner "local-exec" { 
     command = "sleep 10" 
    } 
} 

см отчет об ошибке: https://github.com/hashicorp/terraform/issues/1885

+0

Привет, спасибо за Ваш ответ. Я пробовал команду сна без успеха даже до открытия вопроса о SO. В любом случае я поднял вопрос о Github, https://github.com/hashicorp/terraform/issues/7076 –

Смежные вопросы