【问题标题】:AWS-RunShellScript not invoked from Lambda function未从 Lambda 函数调用 AWS-RunShellScript
【发布时间】:2021-02-17 23:14:15
【问题描述】:

我正在使用 nodeJS 12.x lambda 函数在其中一个 EC2 实例上调用某些命令。我已经确定了

  • SSM 代理已安装在 EC2 实例上
  • 为 lambda 函数分配了适当的角色,策略是 - AmazonEC2ReadOnlyAccess、AmazonSSMFullAccess、AWSLambdaExecute。

下面是 lambda 代码:

var AWS = require('aws-sdk');
const ssm = new AWS.SSM();
AWS.config.update({region:'ap-south-1'});

exports.handler = function(event, context) {
    var ec2 = new AWS.EC2();

    ec2.describeInstances(function(err, data) {
        if(err) {
            console.log(err, err.stack);
        }
        else {
            let instance = data.Reservations[0].Instances[0].InstanceId;
            console.log("\nInstance Id: ", instance);
            
            ssm.sendCommand({
                DocumentName: "AWS-RunShellScript",
                InstanceIds: [ instance ],
                TimeoutSeconds: 3600,
                Parameters: {
                    commands: ['ifconfig']
                }
            }, function(err, data) {
                if (err) {
                    console.log("\nError:", err);
                } else {
                    console.log("\nSuccess: ", data);
                }
                context.done(null, 'Function Finished!');
            })
        }        
    });    
};

当我手动调用这个函数时,我得到的状态是pending。下面是输出日志。

Response:
"Function Finished!"

Request ID:
"748b280a-4277-42a1-a0c3-************"

Function logs:
START RequestId: 748b280a-4277-42a1-a0c3-************ Version: $LATEST
2020-11-05T08:52:26.895Z    748b280a-4277-42a1-a0c3-************    INFO    
Inside describe instances:
2020-11-05T08:52:26.952Z    748b280a-4277-42a1-a0c3-************    INFO    
Instance Id:  i-016f4673e082a829e
2020-11-05T08:52:27.237Z    748b280a-4277-42a1-a0c3-************    INFO    
Success:  {
  Command: {
    CommandId: '8b7a3b6d-4a7a-4259-9c82-************',
    DocumentName: 'AWS-RunShellScript',
    DocumentVersion: '',
    Comment: '',
    ExpiresAfter: 2020-11-05T10:52:27.220Z,
    Parameters: { commands: [Array] },
    InstanceIds: [ 'i-****************' ],
    Targets: [],
    RequestedDateTime: 2020-11-05T08:52:27.220Z,
    Status: 'Pending',
    StatusDetails: 'Pending',
    OutputS3BucketName: '',
    OutputS3KeyPrefix: '',
    MaxConcurrency: '50',
    MaxErrors: '0',
    TargetCount: 1,
    CompletedCount: 0,
    ErrorCount: 0,
    DeliveryTimedOutCount: 0,
    ServiceRole: '',
    NotificationConfig: {
      NotificationArn: '',
      NotificationEvents: [],
      NotificationType: ''
    },
    CloudWatchOutputConfig: { CloudWatchLogGroupName: '', CloudWatchOutputEnabled: false },
    TimeoutSeconds: 3600
  }
}
END RequestId: 748b280a-4277-42a1-a0c3-************
REPORT RequestId: 748b280a-4277-42a1-a0c3-************  Duration: 677.90 ms Billed Duration: 700 ms Memory Size: 128 MB Max Memory Used: 96 MB  

为什么状态不是success?当我手动使用“RunCommand”时,它可以正常工作。 我做错了什么?

【问题讨论】:

    标签: javascript node.js amazon-ec2 aws-lambda aws-ssm


    【解决方案1】:

    命令状态显示为待处理,因为它当前处于待处理状态。执行命令后,它会从挂起 ----> 完成。

    如果您获取命令 ID(在上述情况下,CommandId: '8b7a3b6d-4a7a-4259-9c82-************')并查看系统管理器运行命令,那么当您尝试搜索,会显示成功或失败

    【讨论】:

      猜你喜欢
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 2018-08-21
      • 2019-09-14
      • 1970-01-01
      • 2021-09-19
      相关资源
      最近更新 更多