每次发生特定事件时,我都尝试通过 lambda 启动一个新的 ec2 实例。我有一个 bash 脚本,我想在每次启动新的 ec2 实例时运行它,我希望使用运行实例的 userdata 参数附加它。
我已经测试了脚本,当我通过 aws 控制台启动实例时,它运行良好。
我怀疑这可能是因为我的语法错误。我意识到这个问题非常基本,但我多次尝试了各种排列,但无法启动和运行它。
function(next) {
console.log("INITIALIZING EC2");
var params = {
ImageId: 'ami-b2c934d2',
InstanceType: 't2.micro', //'c4.4xlarge',
MinCount: 1, MaxCount: 1,
KeyName: 'malpem2102'
UserData : console.log(new Buffer('#!/bin/bash n
sudo apt-get install awscli -y n
echo alarm n
aws configure set default.region us-west-2 n
aws configure set aws_access_key_id AKIAIXXXXXXXXX n
aws configure set aws_secret_access_key U2fyRtyakG1kAXXXXXXXXXX n
instance=`curl -s http://169.254.169.254/latest/meta-data/instance-id/` n
aws cloudwatch put-metric-alarm --alarm-name $instance --alarm-description
"Terminate the instance when it is idle for 10mins" --namespace "AWS/EC2"
--dimensions Name=InstanceId,Value=$instance --statistic Average
--metric-name CPUUtilization --comparison-operator LessThanThreshold
--threshold 5 --period 120 --evaluation-periods 5 --alarm-actions
arn:aws:automate:us-west-2:ec2:terminate n').toString('base64'));
};
使用 API 调用时,需要将命令作为 base64 编码的文本字符串发送。
因此,您需要获取原始命令数据并将其编码为 base64 以输入UserData
参数。
例如,如果您有以下命令:
#!/bin/bash
curl --silent --location https://rpm.nodesource.com/setup_10.x | sudo bash -
sudo yum install -y nodejs
sudo yum install -y git
git clone https://github.com/user/repo
cd repo
npm i
npm run start
使用 Base64 解码和编码等工具编码为 base64 后,您可以将 UseData 用作参数,如下所示:
const params = {
ImageId: 'ami-b2c934d2',
InstanceType: 't2.micro', //'c4.4xlarge',
MinCount: 1, MaxCount: 1,
KeyName: 'malpem2102',
UserData: 'IyEvYmluL2Jhc2gNCmN1cmwgLS1zaWxlbnQgLS1sb2NhdGlvbiBodHRwczovL3JwbS5ub2Rlc291cmNlLmNvbS9zZXR1cF8xMC54IHwgc3VkbyBiYXNoIC0NCnN1ZG8geXVtIGluc3RhbGwgLXkgbm9kZWpzDQpzdWRvIHl1bSBpbnN0YWxsIC15IGdpdA0KZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RlcmFkZS9hd3MtZWMyLWV4YW1wbGVzDQpjZCBoYmZsDQpucG0gaQ0KbnBtIHJ1biBzdGFydA=='
};
您还可以使用以下代码使用本机 Javascript 方法进行编码:
let commandsString = `#!/bin/bash
curl --silent --location https://rpm.nodesource.com/setup_10.x | sudo bash -
sudo yum install -y nodejs
sudo yum install -y git
git clone https://github.com/user/repo
cd repo
npm i
npm run start`;
UserData: new Buffer(commandsString).toString('base64');
有关更多信息,请阅读启动时在 Linux 实例上运行命令的文档。
我认为您只需要从代码中删除控制台.log指令即可。