我正在尝试在AWS Lambda创建的新EC2实例的Userdata字段中传递脚本(使用AWS SDK for Javascript,Node.js 6.10):
...
var paramsEC2 = {
ImageId: 'ami-28c90151',
InstanceType: 't1.micro',
KeyName: 'myawesomekwy',
MinCount: 1,
MaxCount: 1,
SecurityGroups: [groupname],
UserData:'#!/bin/sh \n echo "Hello Lambda"'
};
// Create the instance
ec2.runInstances(paramsEC2, function(err, data) {
if (err) {
console.log("Could not create instance", err);
return;
}
var instanceId = data.Instances[0].InstanceId;
console.log("Created instance", instanceId);
// Add tags to the instance
params = {Resources: [instanceId], Tags: [
{
Key: 'Name',
Value: 'taggggg'
}
]};
ec2.createTags(params, function(err) {
console.log("Tagging instance", err ? "failure" : "success");
});
});
...
我尝试了几件事: - 创建一个字符串并将字符串传递给UserData - 无法正常工作 - 创建一个字符串并将其编码为base64并将该字符串传递给UserData - 无法正常工作 - 粘贴base64编码的字符串 - 不工作
你能帮我理解如何在UserData中传递脚本吗? AWS SDK文档有点缺乏。
是否也可以将放入S3存储桶的脚本传递给UserData?
答案 0 :(得分:3)
首先,您的示例中需要base64编码 。尽管文档声明这是自动完成的,但我总是需要在我的lambda函数中创建带有用户数据的ec2实例。其次,从ES6开始,只要在lambda函数中添加脚本,多行字符串就可以让您的生活更轻松。
请尝试以下方法:
var userData= `#!/bin/bash
echo "Hello World"
touch /tmp/hello.txt
`
var userDataEncoded = new Buffer(userData).toString('base64');
var paramsEC2 = {
ImageId: 'ami-28c90151',
InstanceType: 't1.micro',
KeyName: 'AWSKey3',
MinCount: 1,
MaxCount: 1,
SecurityGroups: [groupname],
UserData: userDataEncoded
};
// Create the instance
// ...