我正在使用 Amazon javascript/nodejs sdk。我可以使用以下代码成功启动现有实例,但除非重新运行代码,否则弹性 IP 地址不会分配给该实例。根据错误信息,这是因为实例尚未处于“启动”状态,因此无法为其分配弹性IP。
有没有办法在启动时为实例分配弹性IP?
var ec2 = new AWS.EC2({region: 'us-east-1'});
ec2.startInstances({InstanceIds : ['i-xxxxxxxx'] },function (err, data) {
var params = {
InstanceId: 'i-xxxxxxxx',
PublicIp: '41.222.111.222'
};
ec2.associateAddress(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
return cb(null, data);
});
});
我能想到的唯一其他选择是启动后等待几分钟,然后测试实例是否接受弹性 IP。我想尽可能避免这种情况。
感谢您的帮助!
最佳答案
如果您在 ec2-classic 上运行实例,则 eip 会取消关联,如果您在 EC2-VPC 中运行实例,则 eip 应保持关联。
以下是 AWS 提供的有关弹性 IP 的文档。
EC2-Classic:我们取消与实例关联的任何弹性 IP 地址的关联。您需要为未与实例关联的弹性 IP 地址付费。重启实例时,必须将弹性IP地址与实例关联起来;我们不会自动执行此操作。
EC2-VPC:实例保留其关联的弹性 IP 地址。您需要为与已停止的实例关联的任何弹性 IP 地址付费。
引用号:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html
如果您使用 ec2-classic,您始终可以设置一个启动脚本,将 EIP 与实例关联起来。 如果您想以编程方式执行此操作,请尝试在创建实例时设置用户数据。
关于javascript - 使用 Javascript SDK 在启动时关联 ElasticIP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37903296/