【问题标题】:Associate ElasticIP on Start Up using Javascript SDK使用 Javascript SDK 在启动时关联 ElasticIP
【发布时间】:2016-06-19 10:39:19
【问题描述】:

我正在使用 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。如果可能的话,我想避免这种情况。

感谢您的帮助!

【问题讨论】:

    标签: javascript node.js amazon-web-services amazon-ec2


    【解决方案1】:

    如果您在 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 与实例相关联。 如果您想以编程方式执行此操作,请尝试在创建实例时设置 userdata。

    【讨论】:

    • 感谢您的回复。作为其他人的参考,事实证明上面的代码确实有效(基于我的测试),并且实例似乎一开始就被分配了 EIP。我正在使用 Lambda 函数,并且不希望该过程依赖于启动脚本。作为故障保险,我有另一个 lambda 函数,它会在实例启动几分钟后将 EIP 分配给设备,以防万一。
    猜你喜欢
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 2018-05-30
    • 2021-09-19
    • 1970-01-01
    • 2018-07-19
    • 2016-01-05
    • 2018-03-25
    相关资源
    最近更新 更多