通过Lambda函数上的python boto3脚本创建AWS EC2实例

时间:2019-09-27 18:27:16

标签: python aws-lambda boto3

以下是我的代码,用于在自定义VPC上启动实例,但是我看到以下错误。在查找问题时需要您的帮助:


import json
import boto3

def lambda_handler(event, context):
     session_client=boto3.client(service_name='ec2')
     response = session_client.run_instances(
     #SecurityGroupIds=['sg-0ffb80bb93205a004'],
     #SubnetId='subnet-0bb30254459fd4714',
     MaxCount=1,
     MinCount=1,
     NetworkInterfaces=[
        {
            'NetworkInterfaceId':'eni-0846a5c0c47e98b3c',
            'Description': 'Network Interface Description',
            'DeviceIndex': 123,
            'SubnetId': 'subnet-0bb30254459fd4714'
        },
    ],
     LaunchTemplate={
     'LaunchTemplateId': 'lt-0d3c7dd295796ad6b',
     'Version': '1'
      })

Error: Network interfaces and an instance-level subnet ID may not be specified on the same request",
  "errorType": "ClientError",

谢谢, 巴普·雷迪·巴图

1 个答案:

答案 0 :(得分:0)

通过boto3创建EC2实例时可以传递两个subnetid参数

1)请求中根级别的SubnetId:

  

SubnetId (字符串)-[EC2-VPC]用于启动网络的子网的ID。   实例成。如果指定网络接口,则必须指定   任何子网作为网络接口的一部分。

由于您正在传递NetworkInterfaces参数,因此不会传递此SubnetId。

2)SubnetId作为NetworkInterfaces参数的一部分

  

SubnetId (字符串)-与网络关联的子网的ID   接口。仅在启动时创建网络接口时适用   一个实例。

由于您使用的是已经存在的网络接口。您也不应在NetworkInterfaces内部传递SubnetId参数。

参考文档:EC2 run instances - Boto3 documentation