[英]How to run a script on a newly created EC2 instance via AWS SDK?
我目前正在使用AWS的Javascript SDK来启动自定义EC2实例,到目前为止到目前为止还不错。
但是现在,我需要这些实例在创建它们时能够运行某些任务,例如,从Github克隆存储库,安装软件堆栈并配置一些服务。
这旨在模拟我对本地虚拟机部署的类似行为。 在这种情况下,我使用Ansible运行一些配置脚本来完成工作。
就我的用例而言,哪种方法是AWS的各种服务中使用AWS的Javascript SDK实现这一目标的最佳选择?
无论如何,我是否可能会有一个模板脚本,我将一些运行时获得的变量传递给该模板脚本,以在刚创建的实例中执行某些任务? 我阅读了有关user-data
但无法弄清楚如何使用AWS的SDK进行包装。 而且,它似乎不是可定制的。
归根结底,我认为我需要一种使用SDK的方法:
“在新创建的实例上,运行存储在该位置的脚本,用我现在给您的这些值替换脚本中的这些占位符值”
有什么提示吗?
启动新实例时,您可以在那时通过同一AWS开发工具包/ API调用提供user-data
。 那是放置任何服务器初始化代码的最佳位置。
通过SDK在实例上启动脚本的唯一其他方法是通过SSM服务的“运行命令”功能。 但这要求实例已经安装了AWS SSM代理。 这对于远程服务器管理非常有用,但是user-data
更适合于首次启动时初始化实例。
如Mark B.所述,UserData是在实例启动时执行命令的一种方式。 当您使用javascript
标记问题时,以下是在ec2.runInstances
命令中传递此问题的示例:
let AWS = require('aws-sdk')
let ec2 = new AWS.EC2({region: 'YOUR_REGION'})
// Example commands to create a folder, a file and delete it
let commands = [
'#!/usr/bin/env bash',
'mkdir /home/ubuntu/test',
'touch /home/ubuntu/test/examplefile',
'rm -rf /home/ubuntu/test'
];
let params = {
...YOUR PARAMS HERE...
UserData: new Buffer(commands.join("\n")).toString('base64')
}
// You need to encode it with Base64 for it to be executed by the userdata interpreter
ec2.runInstances(params).promise().then(res => { console.log(res); })
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.