AWS WorkMail + App Runner:服务退役时的迁移检查清单

WorkMail迁移

第一步:导出邮件数据

ini 复制代码
import boto3
import json

def export_workmail_emails(org_id, email_domain):
    """导出WorkMail邮件到S3"""
    client = boto3.client('workmail')
    s3 = boto3.client('s3')

    # 获取邮件列表(分页)
    paginator = client.get_paginator('list_messages')

    for page in paginator.paginate(OrganizationId=org_id):
        for msg_id in page['Messages']:
            # 获取邮件原始内容
            raw_email = client.get_message(
                MessageId=msg_id['Id'],
                OrganizationId=org_id
            )

            # 上传到S3
            s3.put_object(
                Bucket='workmail-backup',
                Key=f"{msg_id['Id']}.eml",
                Body=raw_email['Body']['Raw']
            )

# 使用
export_workmail_emails('m-xxxxxxxx', 'example.com')

第二步:DNS记录切换

css 复制代码
# 删除WorkMail的MX记录
aws route53 change-resource-record-sets \
  --hosted-zone-id ZXXXXXXX \
  --change-batch '{"Changes": [{"Action": "DELETE", "RecordSet": {"Name": "mail.example.com", "Type": "MX", ...}}]}'

# 添加新邮件服务的MX记录(以Google Workspace为例)
aws route53 change-resource-record-sets \
  --hosted-zone-id ZXXXXXXX \
  --change-batch '{"Changes": [{"Action": "CREATE", "RecordSet": {"Name": "mail.example.com", "Type": "MX", "TTL": 3600, "ResourceRecords": [{"Value": "1 ASPMX.L.GOOGLE.COM"}]}]}'

App Runner → Fargate迁移

核心变化:App Runner是托管服务,Fargate需要自己管理Task Definition。

makefile 复制代码
# 判断是否适合从App Runner迁移到Fargate
# App Runner适合:无状态HTTP服务,流量波动大,不想管理基础设施
# Fargate适合:有状态或需要更多控制,需要VPC特定配置

# Fargate Task Definition关键字段
task_definition = {
    "family": "myapp-task",
    "cpu": "256",
    "memory": "512",
    "networkMode": "awsvpc",        # Fargate必须
    "requiresCompatibilities": ["FARGATE"],  # Fargate必须
    "containerDefinitions": [{
        "name": "myapp",
        "image": "myrepo/myapp:latest",
        "portMappings": [{
            "containerPort": 8080
        }]
    }]
}

App Runner → Lambda

如果你的App Runner服务是无状态的HTTP API,可以考虑Lambda:

python 复制代码
import json

def handler(event, context):
    """Lambda处理来自API Gateway的请求"""
    request = json.loads(event['body'])
    result = your_business_logic(request)

    return {
        'statusCode': 200,
        'body': json.dumps(result),
        'headers': {'Content-Type': 'application/json'}
    }

迁移检查清单

  • WorkMail邮件数据导出至S3(保留90天)
  • DNS MX记录切换至新邮件服务
  • 邮件客户端SMTP/IMAP配置更新
  • App Runner流量切换至Fargate或Lambda
  • CI/CD流水线更新镜像部署配置
  • 新服务监控和告警配置
  • 成本对比(Fargate/Lambda vs App Runner)
相关推荐
l1t2 天前
DeepSeek总结的DuckDB访谈:DuckDB的崛起、扩展与AWS收购
数据库·云计算·aws·duckdb
snpgroupcn2 天前
云端共筑·数据跃迁——德勤×SNP×AWS联袂解读SAP ECC升级实战
云计算·aws
yyuuuzz3 天前
企业出海云服务器部署踩坑记录:从频繁超时到稳定运行的复盘
运维·服务器·网络·人工智能·aws
李兆龙的博客3 天前
从一到无穷大 #84:AWS 收购 DuckLabs——DuckDB 与分析系统正在变化的物理边界
云计算·aws
Akiyama_Mio-Kon3 天前
计算机每日时报(2026-08-27):算力继续加码,Agent 先补好安全与交付边界
aws·nvidia·microsoft 365·github copilot·ai 基础设施·ai agent 安全·excel python
swancloud4 天前
AWS S3、EBS、EFS 有什么区别?不同存储场景该怎么选
云计算·aws
mmsx5 天前
Android 宠物健康服务平台实战:从架构设计到主题换肤完整解析(源码和文档)
android·架构·sqlite·app·源码·宠物
liuqs3326 天前
AWS、Azure接连宕机后,“云存储”的这个软肋被重新摆上台面
云计算·azure·aws
mmsx6 天前
基于 Android 的博物馆文化展示与预约 App —— 设计与实现(有源码和文档)
android·app·源码·文档
mmsx7 天前
Android 新闻资讯客户端实战:从零搭建一个完整的新闻 App
android·app·源码