#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