如何通过AWS SDK在新创建的EC2实例上运行脚本



我目前正在使用AWS的Javascript SDK来启动自定义EC2实例,到目前为止效果良好。

但现在,我需要这些实例在创建时能够运行一些任务,例如,从Github克隆repo,安装软件堆栈和配置一些服务。

这是为了模仿我在本地虚拟机部署中的类似行为。在这种情况下,我使用Ansible运行一些配置脚本来完成任务。

对于我的用例,在AWS的不同服务中,使用AWS的Javascript SDK实现这一点的最佳选择是什么?

我是否可以有一个模板脚本,我将一些运行时获得的变量传递给它,以执行我刚刚创建的实例中的一些任务?我读过关于user-data的文章,但我不知道它是如何与AWS的SDK结合在一起的。此外,它似乎不可定制。

最后,我想我需要一种使用SDK的方法来做到这一点:

"在新创建的实例上,运行存储在该位置的脚本,替换脚本中的占位符值,我现在给你的是">

有什么提示吗?

正如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); })

当您启动新实例时,您可以在同一个AWS SDK/neneneba API调用中提供user-data。这是放置任何服务器初始化代码的最佳位置。

通过SDK在实例上启动脚本的唯一其他方法是通过SSM服务的Run Command功能。但这需要实例已经安装了AWS SSM代理。这对于远程服务器管理非常好,但user-data更适合在首次启动时初始化实例。

最新更新