繁体   English   中英

如何通过AWS开发工具包在新创建的EC2实例上运行脚本?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM