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

#r #amazon-web-services #amazon-ec2 #aws-lambda #amazon-elastic-beanstalk

#r #amazon-web-services #amazon-ec2 #aws-lambda #amazon-elastic-beanstalk

Вопрос:

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

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

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

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

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

Ответ №1:

Вы можете передать инструкции по запуску (пользовательские данные) при запуске нового экземпляра 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

Ответ №2:

Напишите приведенный ниже скрипт в #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