使用 AWS Lambda 对 EC2 RunInstances 的 UserData 参数进行 Base64 编码

Base64 encode UserData parameter for EC2 RunInstances using AWS Lambda

我在传递用户数据以使用 AWS Lambda 启动 EC2 实例时遇到问题。我想将它作为纯文本或某种格式传递,它可以将我的纯文本转换为 Base64。当我将我的纯文本转换为 Base64 时,它正确传递并且可以以所需格式检索。

请检查我的代码并建议我如何传递我的用户数据以在实例启动时正确检索它。

console.log('Loading function');
var AWS = require('aws-sdk');
var ec2 = new AWS.EC2();

exports.handler = function(event, context) {
  console.log('Received event:', JSON.stringify(event, null, 2));
  // Get the object from the event and show its content type
  var params = {
    ImageId: 'ami-******', // EC2 instance 
    MinCount: 1, 
    MaxCount: 1,
    DryRun: false,
    EbsOptimized: false,
    InstanceInitiatedShutdownBehavior: 'terminate',
    InstanceType: 't2.micro',
    KeyName: '*******',
    Monitoring: {
      Enabled: false /* required */
    },
    NetworkInterfaces: [
      {
        AssociatePublicIpAddress: true,
        DeleteOnTermination: true,
        Description: 'Primary network interface',
        DeviceIndex: 0,
        SubnetId: 'subnet-******'
      },
    ],
    Placement: {
      AvailabilityZone: 'us-****-**',
      Tenancy: 'default'
    },
    UserData: "requestid"
  };
  ec2.runInstances(params, function(err, data) {
    if (err) {
      console.log("Could not create instance", err);    
      context.fail('Error', "Error getting file: " + err);
      return;         
    } else {
      var instanceId = data.Instances[0].InstanceId;          
      console.log("Created instance", instanceId);   
      context.succeed("Created instance");
    }
  });
};

根据 [AWS.EC2.runInstances() API 文档],UserData 参数需要是 Base64 编码的字符串。看起来您将其作为纯文本传递。

var params = {
...
  UserData: new Buffer('requestid').toString('base64')
...
};