#amazon-web-services #amazon-ec2 #terraform #amazon-iam
#amazon-web-services #amazon-ec2 #terraform #amazon-iam
Вопрос:
Я пытаюсь прикрепить роль IAM к экземпляру EC2 с помощью terraform. Но после просмотра некоторых веб-страниц.. Я обнаружил, что присоединение может быть выполнено во время создания экземпляра ec2.
resource "aws_instance" "web" {
ami = data.aws_ami.ubuntu.id
instance_type = "t3.micro"
iam_instance_profile = "${aws_iam_instance_profile.ec2_profile.name}"
tags = {
Name = "HelloWorld"
}
}
Как и в приведенной выше части, можно четко видеть, что передается AMI, который создаст новый экземпляр.
Возможно ли каким-то образом, что вместо использования идентификатора AMI мы можем предоставить его экземпляр, чтобы он мог прикрепить роль к этому экземпляру?
Я обнаружил одну ссылку от сообщества terraform, указывающую на то, что эта функция еще не выпущена. https://github.com/hashicorp/terraform/issues/11852
Пожалуйста, предоставьте информацию о том, как выполнить эту задачу. Заранее спасибо
Комментарии:
1. Вы хотите сказать, что ваша единственная проблема заключается в том, что AMI, возвращаемый источником данных, отличается от вашего существующего экземпляра, который вы импортировали, и поэтому он хочет уничтожить и воссоздать экземпляр? Рассматривали ли вы возможность жесткого кодирования AMI или использования
ignore_changes = [ami]
, если вы не хотите, чтобы экземпляр заменялся? Было бы полезно просмотреть выходные данные вашего плана, отредактированные в вопросе.2. Если я передам идентификатор AMI, он всегда будет создавать новый экземпляр и присоединять к нему новую роль. Но если мы каким-то образом передадим идентификатор экземпляра, мы сможем напрямую прикрепить к нему роль IAM.
3. Я не уверен, что понимаю, что вы говорите. Не могли бы вы отредактировать вопрос, чтобы включить выходные данные вашего плана, пожалуйста?
Ответ №1:
Как вы указали, это не поддерживается. Но если вы действительно хотите использовать terraform для этого, вы можете рассмотреть два варианта:
-
Используйте local-exec, который будет использовать AWS CLI associate-iam-instance-profile для прикрепления роли к существующему экземпляру.
-
Используйте aws_lambda_invocation. Таким образом, вы можете вызвать пользовательскую лямбда-функцию из вашего terraform, которая будет использовать AWS SDK для связывания профиля с экземпляром. Например, для boto3 метод является associate_iam_instance_profile .