将字符串从AWS Lambda传输到在同一lambda函数中启动的EC2实例

时间:2019-09-20 12:34:42

标签: input amazon-ec2 aws-lambda instance transfer

我对使用AWS完全陌生。当前,我处于以下情况:我的lambda函数启动EC2实例。该实例将需要包含在“ ID”变量中的信息。我想知道如何将这些数据从lambda函数传输到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实例ID。 此lambda函数由网关API触发。使用以下行从此Gatway API获取ID:ID = event.get('ID')

2 个答案:

答案 0 :(得分:0)

这些EC2实例已经启动,并且在此lambda中,它们是通过boto3 ec2.start_instances启动的。在此之前,您必须做一些巧妙的AWS工作,以修改实例的user-data,还必须将实例配置为在开始时(而不只是启动)重新运行user-data。非常复杂的恕我直言。

两个替代建议:

  • 请重新启动现有的EC2实例,因为您可以在client.run_instances函数中使用boto3轻松地将数据传递到新实例。
  • 或者,如果您确实需要恢复现有EC2实例,则可能需要第三个组件来管理EC2实例ID与事件ID的关联:DynamoDB呢?首先,您的脚本在上面编写了InstanceID和Event ID的键值对。然后调用ec2.start_instances,并在EC2实例启动时对其进行预先配置的to do curl http://169.254.169.254/latest/meta-data/instance-id,并使用该值查询DynamoDB?

答案 1 :(得分:0)

启动Amazon EC2实例时,您可以在用户数据参数中提供数据。

然后可以通过以下方式在实例上访问此数据:

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

此技术还用于将启动脚本传递给实例。如果脚本以特定标识符开头,则标准Amazon AMI上将提供运行该脚本的软件。但是,您只需通过用户数据传递任何数据,即可将其提供给实例。