使用bash脚本把AWSEC2数据备份到S3

云计算 一、IAM 秘钥授权方式(普通)

Amazon Simple Storage Service (Amazon S3) 是一种面向 Internet 的存储服务。您可以通过 Amazon S3 随时在 Web 上的任何位置存储和检索的任意大小的数据。您可以使用 AWS 管理控制台简单而直观的 web 界面来完成这些任务。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、雅安服务器托管、营销软件、网站建设、横县网站维护、网站推广。1.1、打开 IAM

单击 AWS Identity and Access Management 控制面板左侧的用户。

单击添加用户按钮。

1.2、添加用户

在用户名: 旁的文本框中输入用户名 (在本示例中,我们将使用 aws_backup),然后从“选择 AWS 访问类型”部分中选择编程访问。单击下一步: 权限按钮。

单击直接附加现有策略选项。选择 AdministratorAccess,然后单击下一步: 审核。

单击创建用户。

单击下载凭证按钮并将 credentials.csv 文件保存到安全位置 (您稍后在步骤 3 中将需要此文件),然后单击关闭按钮。

1.3、安装和配置 AWS CLI

您已经拥有 IAM 用户,现在需要安装 AWS 命令行界面 (CLI)。
有关安装文档请查看 https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/cli-chap-install.html 。

我这里直接使用自带的源安装。

apt  install awscli
1.4、配置授权

登陆到我们的 Ubuntu 系统,输入 aws configure,然后按 Enter 键。在系统提示时输入以下信息:

root@ip-172-31-47-132:~# aws configure
AWS Access Key ID [None]: AKIA5NAGHF6NVEPKATFQ
AWS Secret Access Key [None]: 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
Default region name [None]: ap-northeast-1
Default output format [None]: json
root@ip-172-31-47-132:~# 
二、IAM 角色授权方式(安全)

上面一种方式相对来说已经够安全了,但是秘钥信息都以明文的方式存储在了服务器上面,也变成了一种不安全,那我们就配置一下更加安全的角色方式,角色是赋予信任的实体授予权限的安全方法。

2.1、创建一个 EC2 访问 S3 的角色

选择受信任的实体,我们这里选择 EC2。

赋予访问 S3 权限。

创建角色。

2.2、为 EC2 添加 访问 S3 的角色

找到 EC2 实例界面。

选择我们刚刚创建的角色。

2.3、测试

这里的前提条件是没有配置秘钥授权的方式。

aws s3 ls s3://myweb-backup-eu-west-1/
三、使用 AWS CLI 和 S3 备份数据 3.1、创建存储桶

要新建一个名为myweb-backup的存储桶,请输入:

root@ip-172-31-47-132:~# aws s3 mb s3://myweb-backup
make_bucket: myweb-backup
3.2、上传文件

要将/etc/passwd文件上传到 S3 存储桶 myweb-backup,您需要使用以下命令:

root@ip-172-31-47-132:~# aws s3 cp /etc/passwd s3://myweb-backup/
upload: ../../etc/passwd to s3://myweb-backup/passwd  

3.3、下载文件

要从 S3 中将 passwd 下载至本地目录,我们需要颠倒命令的次序,如下所示:

root@ip-172-31-47-132:~# aws s3 cp s3://myweb-backup/passwd .
download: s3://myweb-backup/passwd to ./passwd   
3.4、删除文件

要将 passwd 从您的 myweb-backup 存储桶中删除,请使用以下命令:

root@ip-172-31-47-132:~# aws s3 rm s3://myweb-backup/passwd 
delete: s3://myweb-backup/passwd
四、实际案例(使用秘钥这种方法)

比如我每天把 /etc 目前下面的所有内容打包上传备份。

#!/bin/bash
export HOME=/home/ubuntu

cd /tmp/;
tar -zcPf etc$(date +%Y%m%d).tar.gz /etc;
aws s3 cp etc$(date +%Y%m%d).tar.gz s3://myweb-backup/;
rm -f etc$(date +%Y%m%d).tar.gz;

然后添加一个定时任务即可。

我这里遇到一个问题,就是放在定时任务之后一直无法上传成功,不清楚使用角色授权的方式会不会出现这种情况,我觉得应该不会,大家可以自己去试试,通过打印日志查看,发现unable to locate credentials这个问题,找了半天,加了一个环境变量export HOME=/home/ubuntu解决了,真是费尽周折,如果再遇到手动执行脚本正常,而定时任务不正常,我们可以用下面的办法对比一下两种方式的环境变量的区别。

# 定时任务环境变量输出
set | sort > /tmp/env.cron
# 手动执行脚本输出
set | sort > /tmp/env.interactive
# 然后进行比较
diff /tmp/env.cron /tmp/env.interactive

为了节省空间,我们可以添加生命周期规则。

参考文档: https://aws.amazon.com/cn/getting-started/tutorials/backup-to-s3-cli/

欢迎大家扫码关注,获取更多信息
当前标题:使用bash脚本把AWSEC2数据备份到S3
文章源于:http://ybzwz.com/article/cgsoss.html