You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

将AWS账户数据及配置备份至本地存储(含EC2快照恢复需求)

AWS数据/配置本地备份及EC2快照备份恢复实操指南

嘿,我来帮你搞定AWS数据备份到本地以及EC2快照的备份恢复这件事——毕竟这是运维里很关键的一环,容不得马虎。下面分两部分给你拆解:先讲全量备份的通用思路,再重点把EC2快照的操作说透。

一、全量AWS数据与配置备份到本地的通用方案

如果要把整个AWS账户的配置和数据都拉到本地,你可以针对不同服务用对应的工具/命令:

  • IAM权限配置:用AWS CLI导出所有权限细节,命令是 aws iam get-account-authorization-details > ./iam-backup.json,角色、用户、策略这些信息都会包含在内,后续恢复可以直接用CLI导入。
  • 网络架构(VPC/子网/安全组):要么用 aws ec2 describe-vpcsaws ec2 describe-security-groups 等命令导出配置到本地文件,更高效的方式是用AWS Config或者直接导出CloudFormation模板,这样恢复的时候直接部署模板就能还原整个网络架构。
  • S3存储桶数据:最直接的就是用 aws s3 sync s3://your-bucket-name /local/backup-path 同步桶内所有文件到本地,记得加上 --delete 参数保持和源桶一致,同时别忘了备份桶的权限和版本控制配置。
  • 数据库(RDS/Redshift):先创建数据库快照,然后把快照导出到S3(RDS支持直接导出到S3),再用S3同步工具把备份文件拉到本地;如果是小体量数据库,也可以用mysqldump、pg_dump这类工具直接导出数据到本地。

二、EC2快照的备份与恢复实操

EC2的快照是EBS卷的增量备份,是最常用的EC2数据保护方式,下面从手动操作、自动备份、本地导出、恢复四个维度给你讲:

2.1 手动创建EC2快照(控制台/CLI)

  • 控制台操作
    1. 登录EC2控制台,找到目标实例,右键选「创建快照」
    2. 给快照加清晰的标签(比如 Backup-Date: 2024-05-20Instance-ID: i-1234abcd),后续找起来会方便很多
    3. 等待快照创建完成——时间长短取决于磁盘大小,大磁盘可能要等几十分钟
  • CLI操作
    先找到实例对应的卷ID,然后执行创建命令:
    aws ec2 create-snapshot --volume-id vol-8765dcba --description "Manual backup for EC2 i-1234abcd on 2024-05-20"
    
    给快照加标签:
    aws ec2 create-tags --resources snap-11223344 --tags Key=Backup-Type,Value=Manual Key=Instance-ID,Value=i-1234abcd
    

2.2 自动定期备份EC2快照

手动备份太繁琐,推荐用Lambda+CloudWatch Events做自动化:

  • 写一个Python Lambda函数,过滤带指定标签(比如 Auto-Backup: Yes)的EC2实例,自动给所有挂载的EBS卷创建快照,同时清理N天前的旧快照(避免占用存储空间)
  • 用CloudWatch Events设置定时触发(比如每天凌晨2点)
  • 给你一段简化版的Lambda代码参考:
import boto3
from datetime import datetime, timedelta

ec2 = boto3.client('ec2')
RETENTION_DAYS = 7  # 保留7天的自动备份

def lambda_handler(event, context):
    # 获取需要自动备份的实例
    instances = ec2.describe_instances(Filters=[{'Name': 'tag:Auto-Backup', 'Values': ['Yes']}])
    
    # 遍历实例创建快照
    for reservation in instances['Reservations']:
        for instance in reservation['Instances']:
            instance_id = instance['InstanceId']
            for volume in instance['BlockDeviceMappings']:
                volume_id = volume['Ebs']['VolumeId']
                # 创建快照
                snap_response = ec2.create_snapshot(
                    VolumeId=volume_id,
                    Description=f"Auto backup for {instance_id} - {volume_id} | {datetime.now().isoformat()}"
                )
                # 给快照打标签
                ec2.create_tags(
                    Resources=[snap_response['SnapshotId']],
                    Tags=[
                        {'Key': 'Instance-ID', 'Value': instance_id},
                        {'Key': 'Backup-Type', 'Value': 'Auto'},
                        {'Key': 'Expire-Date', 'Value': (datetime.now() + timedelta(days=RETENTION_DAYS)).strftime('%Y-%m-%d')}
                    ]
                )
    
    # 清理过期快照
    cutoff_date = (datetime.now() - timedelta(days=RETENTION_DAYS)).strftime('%Y-%m-%d')
    expired_snaps = ec2.describe_snapshots(Filters=[
        {'Name': 'tag:Backup-Type', 'Values': ['Auto']},
        {'Name': 'tag:Expire-Date', 'Values': [cutoff_date]}
    ])
    for snap in expired_snaps['Snapshots']:
        ec2.delete_snapshot(SnapshotId=snap['SnapshotId'])

2.3 将EC2快照导出到本地

AWS不支持直接下载快照到本地,得绕个弯:

  1. 从目标快照创建一个EBS卷,注意要选和临时EC2实例相同的可用区(AZ)
  2. 启动一个临时EC2实例(用t2.micro就行,省钱),把创建好的EBS卷挂载到实例上
  3. 在临时实例里把挂载的卷内容打包,比如 sudo tar -czf /home/ec2-user/ec2-backup.tar.gz /mnt/ebs-mount-point
  4. 用SCP把打包文件传到本地:scp ec2-user@your-temp-instance-ip:/home/ec2-user/ec2-backup.tar.gz /your/local/folder
  5. 用完记得删除临时实例和EBS卷,别忘花钱!

2.4 从EC2快照恢复实例

  • 恢复数据卷
    1. 从快照创建EBS卷,挂载到目标EC2实例上(注意设备名要和实例兼容,比如 /dev/sdf
    2. 登录实例,挂载卷后就能访问快照里的数据了
  • 恢复根卷(替换系统盘)
    1. 先停止目标EC2实例(不能在运行状态替换根卷)
    2. 从快照创建EBS卷,然后用控制台或者CLI修改实例的根卷配置:
      aws ec2 modify-instance-attribute --instance-id i-1234abcd --block-device-mappings "[{\"DeviceName\":\"/dev/sda1\",\"Ebs\":{\"SnapshotId\":\"snap-11223344\"}}]"
      
    3. 启动实例,就能回到快照拍摄时的系统状态了

三、避坑提醒

  • 权限要够:执行备份操作的IAM角色必须有 ec2:CreateSnapshots3:Synciam:GetAccountAuthorizationDetails 等权限,最好用最小权限原则配置
  • 成本控制:快照存储按容量收费,自动备份一定要加清理逻辑;临时实例和卷用完就删,别留着吃钱
  • 验证备份有效性:每月至少测试一次恢复流程,别等出问题才发现备份是坏的
  • 加密问题:如果EBS卷是加密的,快照会自动继承加密属性,恢复时要确保KMS密钥可用;本地备份的文件也要加密,避免数据泄露

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

火山引擎 最新活动