首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Lambda - NodeJS -无效实例ID错误调用SSM文档

从Lambda - NodeJS -无效实例ID错误调用SSM文档
EN

Stack Overflow用户
提问于 2020-06-19 09:49:25
回答 1查看 1.1K关注 0票数 0

我正在尝试从AWS调用一个SSM文档。下面是同一个函数的lambda函数:

代码语言:javascript
复制
const AWS = require('aws-sdk');
const ssm = new AWS.SSM();
const SSM_DOCUMENT_NAME = process.env.SSM_DOCUMENT_NAME;
AWS.config.update({region: 'ap-south-1'});

const sendCommand = (instance_id) => {
 
    var params = {
        DocumentName: SSM_DOCUMENT_NAME,
        InstanceIds: [instance_id],
        TimeoutSeconds: 300
    };
    console.log("before call:"+params.InstanceIds);
    return ssm.sendCommand(params).promise();
 
}
exports.handler = async (event) => {
    console.log('event ', JSON.stringify(event));
    try {
        
            const instance_id = event.detail.EC2InstanceId;
            console.log("processing autoscaling event for "+instance_id);
        
            await sendCommand(instance_id);
            console.log('sent command');
        
    } catch (error) {
        throw error;
    }
}

这将在记录行“调用前:”之后引发以下异常。该实例已经存在了很长时间,并且不是最近创建的,因此不存在一致性问题。

代码语言:javascript
复制
Invoke Error    
{
    "errorType": "InvalidInstanceId",
    "errorMessage": null,
    "code": "InvalidInstanceId",
    "message": null,
    "time": "2020-06-19T09:43:10.348Z",
    "requestId": "150decf1-be1d-407f-9a86-a4f986c04807",
    "statusCode": 400,
    "retryable": false,
    "retryDelay": 20.23844834854607,
    "stack": [
        "InvalidInstanceId: null",
        "    at Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:51:27)",
        "    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20)",
        "    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10)",
        "    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)",
        "    at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)",
        "    at AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)",
        "    at /var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10",
        "    at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)",
        "    at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:685:12)",
        "    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:116:18)"
    ]
}

在从lambda进行测试时,该功能运行良好。当我运行完整的设置时,会发生错误。以下是我正在努力实现的目标:

实例终止>生命周期钩子> Cloudwatch事件> Lambda > SSM运行命令。根据我的理解,来自lambda的测试与实时设置之间的唯一区别是,在测试实例时处于运行状态,而最终运行处于终止状态:等待状态。我也增加了等待时间到600秒,但没有运气。

附加观察:在自动缩放组>活动-我可以有一条消息说等待生命周期事件。但是,一旦我终止实例,它就从Systems选项卡中的管理实例列表中消失。因此,在触发lambda时,系统管理器无法使用instanceid。

观察/解决方案2:我测试错了。只有在扩展策略认为实例不健康的情况下,生命周期挂钩才能工作。手动终止实例不起作用。现在我把它写下来了,这似乎是显而易见的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-19 22:10:32

基于这些评论。

问题是,这些实例是,没有在SSM服务中注册

解决方案是通过向实例角色添加AWS托管策略 AmazonSSMManagedInstanceCore来注册它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62467633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档