如何使用Node.js版AWS SDK配置VPC与子网创建EC2实例
解答
代码正确性说明
你贴的官方示例基础运行逻辑没有问题,可以正常启动EC2实例,但存在一个严重的安全隐患:硬编码了访问密钥到代码中,正式使用时绝对不要这么做,本地开发请通过本地AWS凭证文件、环境变量加载密钥,部署到AWS服务上时直接绑定对应权限的IAM角色即可,SDK会自动读取凭证,避免密钥泄露。
另外代码里重复初始化了三次AWS.EC2客户端,完全可以复用最开始声明的ec2实例,减少冗余代码。
VPC与子网配置方法
VPC、子网这类EC2实例启动的专属参数,既不需要写在全局config参数中,也不需要通过AWS.config.update方法设置,直接作为入参传入runInstances方法的参数对象即可。
你现在的代码没有指定子网,运行时SDK会自动把实例部署到当前区域默认VPC的默认子网中,这也是示例代码可以直接跑通的原因。如果要指定自定义VPC和子网,只需要在instanceParams中添加对应字段:
SubnetId:填写你目标子网的ID,格式为subnet-xxxxxx,实例会直接启动在该子网所属的VPC下SecurityGroupIds:填写该VPC下绑定的安全组ID数组,格式为sg-xxxxxx,注意VPC环境下必须传安全组ID,不能传经典网络的安全组名称
修改后的参数示例如下:
var instanceParams = { ImageId: 'ami-0022f774911c1d690', InstanceType: 't2.micro', KeyName: 'ec2_sampleKey1', MinCount: 1, MaxCount: 1, // 自定义VPC子网配置 SubnetId: 'subnet-替换为你的实际子网ID', SecurityGroupIds: ['sg-替换为你的VPC下实际安全组ID'] };
注意:你填写的子网、安全组必须和当前配置的区域、使用的AMI镜像、密钥对属于同一区域,否则实例启动会报错。如果需要手动控制实例是否分配公网IP,可以额外添加
NetworkInterfaces字段进行网络接口的精细化配置,也可以直接使用子网的默认公网分配规则。
内容的提问来源于stack exchange,提问作者KingShubhankar
相关产品推荐
相关产品推荐

