You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置AWS SQS在队列长度大于0时启动Spot EC2实例

AWS SQS触发启动Spot EC2实例实现方案

核心逻辑

通过CloudWatch监控SQS队列的未处理消息数量,当队列存在待处理消息时触发告警,再由告警触发Lambda函数调用EC2 API启动Spot实例,实现按需启动资源处理视频任务。

具体实现步骤

1. 配置CloudWatch告警监控SQS队列

  • 登录CloudWatch控制台,进入「告警」>「创建告警」
  • 选择指标:搜索并选中目标SQS队列的ApproximateNumberOfMessages指标(该指标默认自动采集)
  • 设置阈值:将阈值设为大于0,评估周期选1分钟,连续1个周期满足条件即触发告警
  • 配置告警动作:选择「Lambda函数」作为触发目标,关联后续创建的Lambda函数

2. 创建并配置Lambda函数

第一步:配置IAM权限

创建Lambda执行角色,添加以下权限(通过自定义IAM策略实现):

  • ec2:RequestSpotInstances:用于提交Spot实例请求
  • ec2:CreateTags:可选,给实例打标签便于管理和识别
  • sqs:GetQueueAttributes:可选,验证队列当前消息状态

第二步:编写启动Spot实例的代码

示例Python代码(按需替换参数):

import boto3

ec2_client = boto3.client('ec2')

def lambda_handler(event, context):
    # 提交Spot实例请求
    spot_req_response = ec2_client.request_spot_instances(
        InstanceCount=1,
        LaunchSpecification={
            'ImageId': 'ami-xxxxxxx',  # 替换为你的业务AMI ID
            'InstanceType': 't3.medium',  # 按需选择合适的实例类型
            'KeyName': 'your-key-pair-name',  # 替换为你的密钥对名称
            'SecurityGroupIds': ['sg-xxxxxxx'],  # 替换为你的安全组ID
            'SubnetId': 'subnet-xxxxxxx'  # 替换为你的子网ID
        },
        # 可选:设置竞价价格,留空则使用当前市场价
        # SpotPrice='0.05'
    )

    # 给Spot实例请求打标签(可选)
    spot_req_ids = [item['SpotInstanceRequestId'] for item in spot_req_response['SpotInstanceRequests']]
    ec2_client.create_tags(
        Resources=spot_req_ids,
        Tags=[
            {'Key': 'Purpose', 'Value': 'VideoProcessing'},
            {'Key': 'Trigger', 'Value': 'SQS-Message'}
        ]
    )

    return {
        'statusCode': 200,
        'body': f"Spot instance request submitted: {spot_req_ids}"
    }

第三步:Lambda额外配置

  • 若Lambda需要访问VPC内资源,需配置对应VPC、子网和安全组,并确保有NAT网关让Lambda能访问EC2公网API
  • 调整Lambda执行超时时间(建议设为30秒以上,确保EC2 API调用完成)

3. 实例任务处理优化

  • 避免重复启动:在Lambda函数中添加逻辑,先通过EC2标签过滤是否已有运行中的视频处理实例,若存在则跳过启动
  • 实例自动终止:在实例启动脚本中添加逻辑,处理完SQS所有消息后执行shutdown -h now自动终止;或通过CloudWatch监控实例CPU/内存负载,低负载时触发终止操作
  • 实例权限配置:给EC2实例附加IAM角色,授予sqs:ReceiveMessage、sqs:DeleteMessage等权限,让实例能正常拉取并处理SQS消息

内容的提问来源于stack exchange,提问作者Naveen Ravi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:22:41