Получить атрибут EC2, созданный с помощью LaunchConfiguration

#amazon-cloudformation

#aws-cloudformation

Вопрос:

Я хотел бы получить атрибут PrivateIP EC2s, который я создаю с помощью LaunchConfiguration.

Мне нужен этот атрибут, чтобы я мог назначить экземпляру DNS-запись типа A для других целей.

Вот мой код:

 Resources:
    webLaunchConfig:
      Type: 'AWS::AutoScaling::LaunchConfiguration'
      Properties:
        ImageId: !Ref webEc2AMI
        InstanceType: !Ref ec2WebInstanceType
        SecurityGroups: !Ref webEc2SG
        UserData:
          'Fn::Base64': !Sub >
            #!/bin/bash -xe

            apt update -y
    dnsWebServerName:
      Type: 'AWS::Route53::RecordSet'
      Properties:
        HostedZoneId: !Ref hostedZoneId
        Comment: DNS name for my db server.
        Name: !Ref dnsWebServerNamePar
        Type: A
        TTL: '900'
        ResourceRecords:
          - !GetAtt webLaunchConfig.PrivateIp
  

… и когда я пытаюсь запустить его, я получаю эту ошибку:

Шаблон содержит ошибки.: Ошибка шаблона: ресурс webLaunchConfig не поддерживает тип атрибута PrivateIp в Fn::GetAtt

… указывает мне, что то, что я пытаюсь сделать, не поддерживается. Хотя должен быть способ добиться этого.

Вы знаете, как это сделать? Или обходной путь для этого?

Ответ №1:

К сожалению, вы не можете этого сделать. AWS::AutoScaling::LaunchConfiguration это только схема экземпляра, который будет запущен. Таким образом, он не предоставляет информацию об экземпляре PrivateIp . Чтобы получить PrivateIp , вам нужно фактически запустить экземпляр.

Для этого вам необходимо использовать AWS ::EC2::Instance. Однако AWS::EC2::Instance не поддерживает запуск из `AWS :: AutoScaling:: LaunchConfiguration . So either you have to change your LaunchConfiguration into LaunchTemplate or just create instance directly using AWS :: EC2:: Instance», а не из любых шаблонов.

Комментарии:

1. Большое спасибо, на самом деле шаблон запуска может помочь мне. Но как мне получить доступ к частному IP-адресу ec2, созданному с помощью launchtemplate? Я читаю документацию, но, похоже, не могу найти способ ее получить. Возможно, у меня просто возникли проблемы при просмотре документов aws

2. @BabaNew Вы переходите AWS::EC2::Instance из своего шаблона запуска, используя свойство LaunchTemplate. После создания экземпляра вы можете получить его частный IP-адрес из возвращаемых значений .