Прикрепите роль IAM к существующему экземпляру EC2 с помощью terraform

#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 .