上传时启动 AWS 实例
Launch AWS instance on upload
我想在一个小型 AWS 实例(例如 t2.micro
)上托管一个网站,每当用户上传要处理的数据时,该实例就会启动一个较大的实例(例如 m5.2xlarge
)。我还希望较大的实例在处理完成后关闭。是否有 AWS 服务或其他解决方法可以做到这一点?较大的实例只会每隔几天触发一次。
在完成任务后停止实例的最简单方法是向操作系统发出shutdown
命令。默认行为是停止 EC2 实例。
启动 实例的最简单方法是通过命令行或 SDK 调用 StartInstances()
命令。棘手的部分是告诉实例应该处理哪些数据。此外,考虑如果在处理第一个文件时上传另一个数据文件会发生什么情况——它应该关闭,还是应该处理新文件?
我会推荐:
- 如果文件上传到 S3,则使用 AWS Lambda 函数启动较大的实例(不需要较小的实例)
- 如果文件上传到较小的实例,则该实例应该:
- 将消息推送到包含要处理的数据的 Amazon SQS 队列(或将文件复制到 S3,然后让消息指向 S3 中的对象)
- 调用
StartInstances()
启动更大的实例
- 然后较大的实例应该进入一个循环,它将:
- 从 Amazon SQS 队列中检索消息
- 处理数据
- 如果SQS队列为空,则通过操作系统关闭实例
您还可以在启动期间将实例指向正确的 S3 存储桶。只需为 UserData
参数提供一个脚本:
# Point to bucket.
parent = 'my-awesome-s3-bucket'
startup_script = '''#!/bin/bash
bucket=<PARENT_NAME>
aws s3 cp s3://$bucket /home/ubuntu --recursive
'''
startup_script = startup_script.replace('<PARENT_NAME>', parent)
# Launch instance.
try:
response = ec2.run_instances(
InstanceType='m4.2xlarge',
KeyName='aws3',
SecurityGroups=['launch-wizard-12'],
MinCount=1,
MaxCount=1,
UserData=startup_script
)
我想在一个小型 AWS 实例(例如 t2.micro
)上托管一个网站,每当用户上传要处理的数据时,该实例就会启动一个较大的实例(例如 m5.2xlarge
)。我还希望较大的实例在处理完成后关闭。是否有 AWS 服务或其他解决方法可以做到这一点?较大的实例只会每隔几天触发一次。
在完成任务后停止实例的最简单方法是向操作系统发出shutdown
命令。默认行为是停止 EC2 实例。
启动 实例的最简单方法是通过命令行或 SDK 调用 StartInstances()
命令。棘手的部分是告诉实例应该处理哪些数据。此外,考虑如果在处理第一个文件时上传另一个数据文件会发生什么情况——它应该关闭,还是应该处理新文件?
我会推荐:
- 如果文件上传到 S3,则使用 AWS Lambda 函数启动较大的实例(不需要较小的实例)
- 如果文件上传到较小的实例,则该实例应该:
- 将消息推送到包含要处理的数据的 Amazon SQS 队列(或将文件复制到 S3,然后让消息指向 S3 中的对象)
- 调用
StartInstances()
启动更大的实例
- 然后较大的实例应该进入一个循环,它将:
- 从 Amazon SQS 队列中检索消息
- 处理数据
- 如果SQS队列为空,则通过操作系统关闭实例
您还可以在启动期间将实例指向正确的 S3 存储桶。只需为 UserData
参数提供一个脚本:
# Point to bucket.
parent = 'my-awesome-s3-bucket'
startup_script = '''#!/bin/bash
bucket=<PARENT_NAME>
aws s3 cp s3://$bucket /home/ubuntu --recursive
'''
startup_script = startup_script.replace('<PARENT_NAME>', parent)
# Launch instance.
try:
response = ec2.run_instances(
InstanceType='m4.2xlarge',
KeyName='aws3',
SecurityGroups=['launch-wizard-12'],
MinCount=1,
MaxCount=1,
UserData=startup_script
)