Передача строки из AWS Lambda в экземпляр EC2, который запускается в той же самой лямбда-функции - PullRequest
0 голосов
/ 20 сентября 2019

Я совершенно новичок в работе с AWS.В настоящее время я нахожусь в следующей ситуации: Моя лямбда-функция запускает экземпляр EC2.Для этого экземпляра потребуется информация, содержащаяся в переменной 'ID'.Мне было интересно, как я могу перенести эти данные из моей лямбда-функции в экземпляр EC2.Это вообще возможно?

import boto3

region = 'eu-west-1'
instances = ['AnEC2Instance-ID']
ec2 = boto3.client('ec2', region_name=region)
import os

def lambda_handler(event, context):

    ID = event.get('ID')
    ec2.start_instances(InstanceIds=instances)
    print('started your instance: ' + str(instances))

Здесь «AnEC2Instance-ID» должен быть идентификатором экземпляра EC2.Эта лямбда-функция запускается шлюзом API.Идентификатор получается из этого API Gatway с помощью строки: ID = event.get ('ID')

Ответы [ 2 ]

0 голосов
/ 22 сентября 2019

При запуске экземпляра Amazon EC2 вы можете предоставить данные в параметре Данные пользователя .

Эти данные будут доступны в экземпляре через:

http://169.254.169.254/latest/user-data/

Этот метод также используется для передачи сценария запуска в экземпляр.В стандартных Amazon AMI есть программное обеспечение, которое будет запускать сценарий, если он начинается с определенных идентификаторов.Однако вы можете просто передать любые данные через Данные пользователя , чтобы сделать их доступными для экземпляра.

0 голосов
/ 20 сентября 2019

Эти экземпляры EC2 уже запущены и в этой лямбде запускаются через boto3 ec2.start_instances.До этого вам нужно было бы сделать несколько хитрых вещей AWS, чтобы изменить экземпляр user-data, а также настроить экземпляр так, чтобы он запускал user-data при запуске (а не только при запуске).Довольно сложный ИМХО.

Два альтернативных предложения:

  • Пересмотрите необходимость запуска существующего экземпляра EC2, поскольку вы можете легко передавать данные в новый экземпляр с помощью boto3 в client.run_instancesfunction.
  • Или, если вам действительно необходимо восстановить существующий экземпляр EC2, вам может понадобиться третий компонент для управления соотношением идентификаторов экземпляров EC2 и ваших идентификаторов событий: как насчет DynamoDB?Сначала ваш скрипт выше записывает пару ключ-значение InstanceID и Event ID.Затем вызывается ec2.start_instances, и когда запускается экземпляр EC2, он предварительно настроен для выполнения curl http://169.254.169.254/latest/meta-data/instance-id и использует это значение для запроса к DynamoDB?
...