Boto3创建EC2实例时如何指定securitygroup、实例类型等参数
boto3 client调用run_instances指定配置的方法
直接在run_instances方法里传入对应参数即可,常用配置对应参数如下:
- 实例类型:
InstanceType,传标准实例类型字符串,比如t3.micro、m5.large - 安全组:默认VPC环境下用
SecurityGroups传安全组名称列表;非默认VPC环境下用SecurityGroupIds传安全组ID列表,该参数优先级高于名称传参 - 其他常用启动参数:
KeyName指定登录密钥对、SubnetId指定部署子网、BlockDeviceMappings覆盖存储卷配置、TagSpecifications给实例打标签、IamInstanceProfile指定实例绑定的IAM角色
完整示例代码:
import boto3 client = boto3.client('ec2', region_name="eu-central-1") response = client.run_instances( ImageId="ami-0df63501d4a3233e8", MinCount=1, MaxCount=1, # 指定实例类型 InstanceType="t3.micro", # 指定SSH登录密钥对 KeyName="your-prod-key", # 非默认VPC传安全组ID SecurityGroupIds=["sg-0123456789abcdef"], # 指定部署子网 SubnetId="subnet-0123456789abcdef", # 自定义根卷配置,覆盖AMI默认值 BlockDeviceMappings=[ { "DeviceName": "/dev/sda1", "Ebs": { "VolumeSize": 30, "VolumeType": "gp3", "DeleteOnTermination": True } } ], # 实例打标签 TagSpecifications=[ { "ResourceType": "instance", "Tags": [{"Key": "Name", "Value": "app-server-01"}] } ] )
配置项与AMI的存储关系
AMI不会存储你提到的实例类型、安全组这类运行时配置,具体存储边界如下:
- AMI内仅固化根卷快照数据、操作系统预装环境、默认块设备映射模板、CPU架构/虚拟化类型这类镜像基础信息
- 实例类型、安全组、子网、密钥对、IAM角色、标签都属于实例启动时的外部配置,完全不随AMI保存,启动时如果不显式传参,会使用AWS平台默认值(比如不传实例类型会默认用老旧的通用实例类型,不传安全组会绑定默认VPC的默认安全组)
- AMI自带的默认块设备配置可以被
BlockDeviceMappings参数覆盖,不会强制生效
单元测试适配
基于boto3 client的实现可以直接用mock工具模拟接口返回,不需要依赖resource层的封装,测试逻辑更可控,pytest环境下的测试示例:
from moto import mock_aws import boto3 @mock_aws def test_ec2_creation(): ec2_client = boto3.client("ec2", region_name="eu-central-1") # 前置创建测试安全组 test_sg = ec2_client.create_security_group(GroupName="test-sg", Description="unit test sg") # 调用创建接口 resp = ec2_client.run_instances( ImageId="ami-0df63501d4a3233e8", MinCount=1, MaxCount=1, InstanceType="t3.micro", SecurityGroupIds=[test_sg["GroupId"]] ) # 断言校验 created_ins = resp["Instances"][0] assert created_ins["InstanceType"] == "t3.micro" assert created_ins["SecurityGroups"][0]["GroupId"] == test_sg["GroupId"]
内容的提问来源于stack exchange,提问作者codedor
相关产品推荐
相关产品推荐

