如何通过Node.js的aws-sdk调用API创建已停止状态的EC2实例
解决方案
AWS EC2 官方的runInstances接口没有提供创建时直接指定实例状态的参数,所有通过该接口创建的实例默认都会进入运行状态。要实现创建后直接为停止状态的需求,采用「创建实例+立即停止实例」的两步操作即可实现。
实现步骤
- 调用
runInstances方法创建实例,从返回结果中提取新实例的ID - 调用
stopInstances方法,传入第一步获取的实例ID,执行停止操作
如果担心实例还未创建完成就调用停止接口报错,可以使用SDK内置的等待器(waiter)等待实例进入running状态后再执行停止操作
完整代码示例(Node.js aws-sdk v2版本)
const AWS = require('aws-sdk'); // 配置对应AWS区域和访问凭证 AWS.config.update({ region: 'cn-northwest-1' }); const ec2 = new AWS.EC2({ apiVersion: '2016-11-15' }); const runParams = { ImageId: "ami-0dd2fbaxxxxx", InstanceType: "t3a.xlarge", KeyName: "xxxxx", MaxCount: 1, MinCount: 1, SecurityGroupIds: ['sg-xxx', 'sg-xxx'], CreditSpecification: { CpuCredits: 'standard' }, TagSpecifications: [ { ResourceType: "instance", Tags: [ { Key: "xxx", Value: "xxx" } ] } ] }; const createAndStopEC2 = async () => { try { // 第一步:创建实例 const runRes = await ec2.runInstances(runParams).promise(); const instanceId = runRes.Instances[0].InstanceId; console.log('实例创建成功,ID:', instanceId); // 可选:等待实例状态变为running,避免停止时报错 await ec2.waitFor('instanceRunning', { InstanceIds: [instanceId] }).promise(); // 第二步:停止实例 await ec2.stopInstances({ InstanceIds: [instanceId] }).promise(); console.log('实例已成功停止'); } catch (err) { console.error('操作失败:', err); } }; createAndStopEC2();
如果你使用的是aws-sdk v3版本,仅需要调整SDK的引入和调用方式,整体操作逻辑完全一致。
内容的提问来源于stack exchange,提问作者amarveer
相关产品推荐
相关产品推荐

