使用 bash 脚本把 AWS EC2 数据备份到 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 脚本把 AWS EC2 数据备份到 S3的更多相关文章
- 使用 bash 脚本把 GCE 的数据备份到 GCS
目录 一.Google Cloud Storge 介绍 1.1.四种存储类别的比较 1.2.需求 1.3.给虚拟机添加授权认证 二.备份操作 2.1 创建存储分区 2.2 上传对象到存储分区 2.3 ...
- Python脚本导出AWS EC2资源清单
环境需求 单位现在每隔一段时间需要核对一下 AWS 正在运行的 EC2 资源清单,为了避免核对失误以及重复性的工作,打算用脚本来解决这一重复性的工作.大概思路为 通过 AWS AK.SK 来索取 AW ...
- Aws Dynamodb数据导出到S3
本节将描写叙述怎样从一个或多个DynamoDB的表导出数据到S3的bucket中.在运行导出之前你须要提前创建好S3的bucket. 注意 假设你还没有使用过AWS Data Pipeline,在运行 ...
- 案例:通过shell脚本实现mysql数据备份与清理
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行,实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核,不仅如此,Sh ...
- AWS EC2避免误删软件包和数据的方法:取消“终止删除”默认配置
本文介绍AWS在终止实例的时候如何保留根卷,避免误删软件包和数据. 作者:光环云 尹晓征 在aws控制台创建EC2的时候,我们在添加存储步骤中,如果使用默认配置的情况下,“终止时删除”配置默认是被选中 ...
- Linux Bash 脚本:自己定义延迟代码块(裸数据保存方案)
结合 alias 和 read 使用方法.能够保存一些将要延迟执行的脚本,或者裸数据(字符串不被扩展)到一个变量中.以备后用. $ alias BEGIN='read -d "" ...
- AWS EC2+Docker+JMeter构建分布式负载测试基础架构
目录 概述及范围 前提条件 Part 1: Local setup-本地配置 Part 2: Cloud端基础架构--Infrastructure 总结: 原文链接 @ 概述及范围 本文介绍有关如何使 ...
- 两种适用于中小量数据的mysql数据备份
近来项目的业务量开始大了,感觉如果数据不周期性地备份一下,很可能会出现问题,虽然我每天都有阿里云的自动快照,上网找了一下方法,找到两种相对简单而又适合中小项目或者中小公司的数据备份策略,以下都是数据库 ...
- Linux文件系统应用---系统数据备份和迁移(用户角度)
1 前言 首先承诺:对于从Windows系统迁移过来的用户,困扰大家的 “Linux系统下是否可以把系统文件和用户文件分开到C盘和D盘中” 的问题也可以得到完满解决. 之前的文章对Linux的文 ...
随机推荐
- 理解 shared_ptr实现copy-on-write(COW)
看muduo库某个生产者消费者的地方,利用shared_ptr有效减少了锁的范围及无用的拷贝,下面来看一看 // reader 消费者, shared_ptr<map<string,int ...
- Enum 类型
枚举类型(Enumerated Type) 什么是枚举? 枚举是一个被命名的整型常数的集合.在多种编程语言中都有使用(C/C++/c#/java等). 示例 public enum Size { S, ...
- 「NOI2019」弹跳(KD树)
题意:w×h网格中有n个点,m条边.每条边可以从p点花费t时间到一个矩形中的任意点,求1号点到每个点的最少时间. \(1<=w,h<=n<=70000,1<=m<=150 ...
- 【题解】狼和羊-C++
Description 米基家的后院养着一群羊,米基由于疲劳睡着了,这时一群饿狼钻进了后院开始攻击羊群,后院是由许多个方格构成的长方形区域,每个方格中用字符'?'表示空地,'#'表示栅栏,'o'表示羊 ...
- animation-timing-function
animation-timing-function 语法: animation-timing-function:<single-animation-timing-function>[,&l ...
- Go语言 之TCP聊天室
服务端流程图如下: package main import ( "fmt" "net" ) // 客户端结构体 type Client struct { //用 ...
- redis几种模式的部署(Windows下实现)
<参考>http://www.cnblogs.com/ruiati/p/6374152.html 1. 自行下载redis客户端.redis官方不支持Windows系统,所以官网上是下 ...
- 利用python获取自己的qq群成员信息
利用python获取自己的qq群成员信息! 首先说明一下需要使用的工具以及技术:python3 + selenium selenium安装方法:pip install selenium 前提:获取自己 ...
- java课后实验性问题3
一 .生成随机数 import java.util.*; public class Test1 { public static void main(String[] args) { //建立一个生产随 ...
- OpenResty之指令与常用API
1. 指令 通过 Lua 编写 Nginx 脚本的基本构建块是指令.指令常用于指定 Lua 代码是几时执行的以及如何使用运行的结果.下图展示了指令执行的顺序. lua_capture_error_lo ...