Как я могу автоматически запустить мой экземпляр ec2, запустить команду и затем выключить ее? - PullRequest
4 голосов
/ 24 апреля 2019

Я хочу запускать модель машинного обучения для своих данных в базе данных redshift postgres один раз в неделю.

Я настроил свой R-скрипт как API для отдыха, используя plumbr, а затем настроил его науправляется как задание pm2.У меня так, задача запускается при запуске экземпляра ec2, а затем продолжает работать.

Все, что мне нужно сделать, чтобы запустить скрипт R и загрузить новые данные из модели машинного обучения, этовыполните простой запрос curl curl http://localhost:4208/main

Весь процесс для модели занимает около 10 минут.

Как я могу автоматизировать процесс запуска экземпляра ec2, выполнения запроса curl и затем его выключения?Это можно сделать с помощью AWS Beanstalk?

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

Вы можете передать инструкции по запуску (пользовательские данные) при запуске нового экземпляра EC2.Предполагая, что вы используете Linux AMI:

Примерно так:

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

Более подробную информацию можно найти здесь: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html

Это запустит ваш EC2экземпляр с правильным запросом curl, чтобы вы начали.

Теперь, чтобы автоматизировать запуск экземпляра EC2 с помощью созданного вами сценария запуска, вам нужно будет использовать командную строку.

Подробнее об этом можно узнать здесь: https://docs.aws.amazon.com/cli/latest/userguide/cli-services-ec2-instances.html

1 голос
/ 24 апреля 2019

Напишите ниже скрипт в #User data вашего ec2.этот скрипт выполнит вашу программу, он будет ждать 10 минут и с помощью метаданных экземпляра ec2 остановит вашу ec2.

Предварительными условиями для этого является запуск экземпляра ec2 с ролью, у которой есть экземпляр остановки доступа ec2.

Ссылочный URL для создания роли экземпляра ec2: [введите описание ссылки здесь] [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
...