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

如何实现定时删除创建超24小时的关联XYZ的SQS队列?

整合SNS订阅筛选与SQS队列清理的PowerShell脚本

完整实现脚本

# 设定AWS区域
$region = "us-east-1"

# 1. 获取所有Endpoint包含"XYZ"的SQS类型SNS订阅
$targetSubscriptions = Get-Subscription -Region $region | Where-Object {
    $_.Endpoint -like '*XYZ*' -and $_.Protocol -eq "sqs"
}

# 遍历每个目标订阅,处理关联的SQS队列
foreach ($sub in $targetSubscriptions) {
    # 从SNS Endpoint(ARN格式)中解析SQS队列信息
    $sqsArnParts = $sub.Endpoint -split ':'
    $sqsAccountId = $sqsArnParts[4]
    $sqsQueueName = $sqsArnParts[5]
    $sqsQueueUrl = "https://sqs.$region.amazonaws.com/$sqsAccountId/$sqsQueueName"

    try {
        # 2. 获取SQS队列的创建时间属性
        $queueAttrs = Get-SQSQueueAttribute -QueueUrl $sqsQueueUrl -AttributeName CreatedTimestamp -Region $region
        $createdUnixTime = [double]$queueAttrs.CreatedTimestamp
        $createdDateTime = [DateTimeOffset]::FromUnixTimeSeconds($createdUnixTime).LocalDateTime

        # 3. 判断是否超过24小时,执行删除逻辑
        $24HoursAgo = (Get-Date).AddHours(-24)
        if ($createdDateTime -lt $24HoursAgo) {
            # 先取消SNS订阅,避免后续推送报错
            Unsubscribe-Subscription -SubscriptionArn $sub.SubscriptionArn -Region $region -Confirm:$false
            # 删除SQS队列
            Remove-SQSQueue -QueueUrl $sqsQueueUrl -Region $region -Confirm:$false
            Write-Host "已清理队列:$sqsQueueName | 创建时间:$createdDateTime"
        } else {
            Write-Host "队列$sqsQueueName未超过24小时,跳过 | 创建时间:$createdDateTime"
        }
    } catch {
        Write-Warning "处理队列$sqsQueueUrl失败:$_"
    }
}

关键逻辑说明

  • 精准筛选订阅:新增Protocol -eq "sqs"过滤,只处理SQS类型的订阅,避免非SQS端点(如邮件、短信)导致的无效解析。
  • 解析队列URL:从SNS订阅的Endpoint(ARN格式)拆分出账号ID和队列名,拼接成SQS Cmdlet所需的标准URL格式。
  • 时间戳转换:将SQS返回的Unix时间戳转换为本地DateTime,便于和当前时间做阈值对比。
  • 安全清理流程:删除队列前先取消对应的SNS订阅,避免后续SNS推送失败产生报错;添加-Confirm:$false跳过交互确认,适配定时任务无人值守场景。
  • 异常容错:用try/catch包裹单个队列的处理逻辑,防止某一个队列处理失败中断整个脚本执行。

定时任务配置(Windows)

  1. 打开「任务计划程序」,创建新任务。
  2. 触发器:设置脚本执行频率(如每日凌晨、每小时一次)。
  3. 操作:选择「启动程序」,程序路径填powershell.exe,参数填:
    -ExecutionPolicy Bypass -File "C:\你的脚本路径\CleanupSQS.ps1"
    
    (-ExecutionPolicy Bypass用于绕过PowerShell执行策略限制)
  4. 设置:勾选「不管用户是否登录都要运行」,并配置拥有AWS权限的执行账号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:35:22