如何自动启动ec2实例,运行命令然后将其关闭?

时间:2019-04-24 01:35:34

标签: r amazon-web-services amazon-ec2 aws-lambda amazon-elastic-beanstalk

我想每周对redshift postgres数据库中的数据运行一次机器学习模型。

我使用plumbr将R脚本设置为rest api,然后将其设置为由pm2作为任务进行管理。我有它,所以任务在ec2实例启动后继续运行。

要让R脚本运行并从机器学习模型上载新数据,我要做的就是运行一个简单的curl请求curl http://localhost:4208/main

模型的整个过程大约需要10分钟。

如何使启动ec2实例,运行curl请求然后将其关闭的过程自动化?这是AWS Beanstalk可以完成的事情吗?

2 个答案:

答案 0 :(得分:2)

在启动新的EC2实例时,您可以传递启动说明(用户数据)。假设您正在运行Linux AMI:

是这样的:

#!/bin/bash
curl http://localhost:4208/main

更多信息可以在这里找到:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html

这将以适当的curl请求启动EC2实例,以帮助您入门。

现在要使用您创建的启动脚本自动启动EC2实例,则需要使用命令行。

您可以在此处了解更多信息:https://docs.aws.amazon.com/cli/latest/userguide/cli-services-ec2-instances.html

答案 1 :(得分:1)

在ec2的#User数据中的脚本下面编写。该脚本将执行您的程序,它将等待10分钟,并在ec2实例元数据的帮助下将停止ec2。

先决条件是具有角色的启动ec2实例,该角色具有ec2实例停止访问权限。

用于创建ec2实例角色的参考URL为[在此处输入链接描述] [1]

test.sh

## Your Program
curl http://localhost:4208/main

# expecting curl call will finish in 10 min.
sleep 10m

# teminating your ec2 instance.
Imageid=`curl http://169.254.169.254/latest/meta-data/ami-id`
aws ec2 stop-instances --instance-ids $Imageid