安装和配置awscli2.0版本
1、 安装awscli2.0
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install
ln -s /usr/local/bin/aws /usr/bin/aws
2、安装完成,检查awscli版本号
aws --version
aws-cli/2.15.22 Python/3.11.6 Linux/3.10.0-1160.25.1.el7.x86_64 exe/x86_64.centos.7 prompt/off
3、 配置awscli
配置awscli主要就是提供登录凭证,AWS采用Access Keys的方式
aws configure --profile product
AWS Access Key ID [None]: A**************
AWS Secret Access Key [None]: M*********************
Default region name [None]: us-east-2
Default output format [None]: json
配置完后,就会用户家目录下生成.aws目录,里面的文件会记录我们的登录凭证
cat .aws/credentials
[product]
aws_access_key_id = A******************W
aws_secret_access_key = M******************a
[root@localhost ~]# cat .aws/config
[profile product]
region = us-east-2
output = json
AWS S3怎么收费的?
Amazon Simple Storage Service(S3)是亚马逊网络服务(AWS)提供的一个高度可扩展的对象存储服务,广泛应用于数据存储、备份、归档和大数据分析等领域。S3的计费模式相对灵活,旨在满足不同用户的需求。
1. 存储费用
S3的存储费用是根据您存储的数据量来计算的。AWS提供了多种存储类别,每种类别针对不同的使用场景和性能需求,价格也有所不同。主要的存储类别包括:
标准存储:适用于频繁访问的数据,如网站内容、数据备份等。
标准-IA(不频繁访问)存储:适用于不经常访问但需要快速访问的数据。
一冷存储:适用于长期存储的数据,访问频率较低。
归档存储:适用于长期归档的数据,访问频率极低。
每GB存储的费用会根据存储类别的不同而有所变化。例如,标准存储的价格通常高于标准-IA存储,而归档存储则因为访问频率低,价格相对较低。
2. 请求费用
除了存储费用外,S3还对数据的读取和写入操作收取费用。这些费用包括:GET请求:读取数据的请求,如下载对象。
PUT请求:上传数据的请求,如上传文件。
其他请求:如列出对象、删除对象等。
请求费用同样根据请求的类型和存储类别而有所不同。例如,标准存储的GET请求费用通常低于标准-IA存储的GET请求费用。
3. 数据传输费用
数据传输费用是指将数据从S3传输到互联网或AWS其他服务的费用。数据传输分为两种:
出站数据传输:将数据从S3传输到互联网。
入站数据传输:将数据从互联网或其他AWS服务传输到S3。
出站数据传输通常需要付费,而入站数据传输在某些条件下是免费的,例如从其他AWS服务到S3的传输。
4. 数据管理费用
数据管理费用包括:
生命周期管理:自动将对象从一个存储类别迁移到另一个存储类别。
版本控制:保留对象的多个版本。
跨区域复制:将对象复制到另一个AWS区域。
这些服务的费用会根据操作的复杂性和数据量来计算。
5. 其他费用
除了上述费用外,还可能产生其他费用,如:
数据恢复:从S3 Glacier或S3 Glacier Deep Archive恢复数据。
数据迁移:使用AWS Snowball或AWS Snowmobile等服务将大量数据迁移到S3。
S3上传和下载文件(AWS命令行)
1、AWS命令行工具的安装
参考第一部分
配置 AWS 凭证
AWS CLI 需要使用 AWS 访问密钥和秘密访问密钥进行身份验证。您可以使用以下两种方式之一来配置凭证:
使用 aws configure 命令
在命令提示符或 PowerShell 中输入:
aws configure
系统将提示您输入 AWS Access Key ID、AWS Secret Access Key、默认区域名称和默认输出格式。您可以从 AWS 管理控制台获取访问密钥和秘密访问密钥。
其他配置选项
您还可以配置其他选项,如默认区域和输出格式。例如:
aws configure set default.region us-west-2
aws configure set default.output json
这将把默认区域设置为 us-west-2,默认输出格式设置为 JSON。
2、AWS S3 存储桶创建
aws s3 mb s3://my-bucket
3、AWS S3 文件上传
aws s3 cp example.txt s3://my-bucket/
4、AWS S3 文件下载
aws s3 cp s3://my-bucket/example.txt .
上面命令是将S3文件下载到当前目录
5、AWS S3 文件批量上传和下载
AWS S3 SYNC 命令用于同步本地目录或 S3 存储桶中的内容与另一个 S3 存储桶。它可以上传、更新和删除对象,以确保源和目标之间的内容保持同步。
(1). 将本地目录同步到 S3 存储桶
aws s3 sync /path/to/local/dir s3://my-bucket
#S3 Standard - Infrequent Access S3 Standard - Infrequent Access * — 支持毫秒级访问的长期保存但不经常访问的数据 每 GB USD 0.0138
aws s3 sync databak s3://international-sms-log-file/p6_deal1/databak --storage-class STANDARD_IA
这将把本地目录 /path/to/local/dir 中的所有文件和子目录上传到 S3 存储桶 my-bucket。如果存储桶中已经存在同名对象,它们将被覆盖。
(2). 将 S3 存储桶同步到本地目录
aws s3 sync s3://my-bucket /path/to/local/dir
这将把 S3 存储桶 my-bucket 中的所有对象下载到本地目录 /path/to/local/dir。如果本地目录中已经存在同名文件,它们将被覆盖。
(3). 在两个 S3 存储桶之间同步
aws s3 sync s3://source-bucket s3://destination-bucket
这将把 S3 存储桶 source-bucket 中的所有对象复制到 destination-bucket。如果目标存储桶中已经存在同名对象,它们将被覆盖。
(4). 排除某些文件或目录
您可以使用 --exclude 参数排除某些文件或目录。例如:
aws s3 sync /path/to/local/dir s3://my-bucket --exclude "*.tmp" --exclude "temp/*"
这将同步本地目录,但排除所有以 .tmp 结尾的文件和 temp 子目录中的所有文件。
(5). 删除目标中多余的对象
默认情况下,sync 命令不会删除目标中多余的对象。如果您希望在同步过程中删除目标中多余的对象,可以使用 --delete 参数:
aws s3 sync /path/to/local/dir s3://my-bucket --delete
这将同步本地目录,并删除 S3 存储桶 my-bucket 中多余的对象。
aws s3 sync 命令还支持许多其他选项,如设置 ACL、元数据、存储类和加密等。您可以使用 aws s3 sync help 获取更多信息。
S3计费:
日志文件上传到s3脚本rsync2S3Bucket.sh
#!/bin/bash
# 日志文件路径
logfile="/hskj/logs/upload_log_2_s3.log"
# 定义一个函数来添加时间戳到日志消息
function log_with_timestamp {
echo "$(date '+%Y-%m-%d %H:%M:%S') $1" >> "$logfile"
}
# 获取主机名并处理以获取备份目录名
hostname_full=$(hostname)
hostname_short=$(echo $hostname_full | cut -d'-' -f1) # 假设主机名格式为 p6_deal1-...
# 设置日期
date_str=$(date -d "357 day ago" +%Y-%m-%d)
# 拼接目标目录名
target_dir="/hskj/databak/${hostname_short}-${date_str}"
# 检查目录是否存在
if [ -d "$target_dir" ]; then
log_with_timestamp "Found directory: $target_dir"
# 计算本地目录中的文件大小
local_file_count=$(du -sb /hskj/databak/${hostname_short}-${date_str}/* | awk '{sum += $1} END {print sum}')
# 使用 aws s3 sync 上传目录,并捕获输出到日志文件
aws s3 sync "$target_dir" "s3://international-sms-log-file/${hostname_short}/databak/${hostname_short}-${date_str}" --storage-class STANDARD_IA 2>&1
# 检查AWS CLI命令的退出状态
if [ $? -eq 0 ]; then
# 列出S3中的对象数量(这里只作为示例,实际可能需要更复杂的逻辑来精确匹配)
# 直接计算大小(注意:这里计算大小的方法可能需要调整,因为aws s3 ls --summarize不直接给出总大小)
s3_object_count=$(aws s3 ls s3://international-sms-log-file/${hostname_short}/databak/${hostname_short}-${date_str}/ --summarize | tail -n 1 | awk '{print $3 }')
# 比较文件数量(注意:这只是一个粗略的匹配)
if [ "$local_file_count" -eq "$s3_object_count" ]; then
log_with_timestamp "Upload successful and file counts match. Deleting local directory..."
cd /hskj/databak/
rm -rf "${hostname_short}-${date_str}" # 取消注释以实际删除目录
#ls -l "$target_dir"
#log_with_timestamp "Local directory listing (not deleted for safety)."
else
log_with_timestamp "Upload successful, but file counts do not match."
fi
else
log_with_timestamp "Upload failed."
fi
else
log_with_timestamp "Directory $target_dir not found."
fi
从s3上获取文件到本地 脚本downloadS3tolocal.sh
#!/bin/bash
# 日志文件路径
logfile="/hskj/logs/download_log.log"
# 定义一个函数来添加时间戳到日志消息
function log_with_timestamp {
echo "$(date '+%Y-%m-%d %H:%M:%S') $1" >> "$logfile"
}
# 获取主机名并处理以获取备份目录名前缀
hostname_full=$(hostname)
hostname_short=$(echo $hostname_full | cut -d'-' -f1) # 假设主机名格式为 p6_deal1-...
# 请求用户输入日期
read -p "请输入日期(格式 YYYY-MM-DD): " user_date
# 验证日期格式
if ! [[ $user_date =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
log_with_timestamp "输入的日期格式不正确,应为 YYYY-MM-DD。"
exit 1
fi
# 拼接 S3 和本地目录名
s3_dir="s3://international-sms-log-file/${hostname_short}/databak/${hostname_short}-${user_date}/"
local_dir="/hskj/databak/${hostname_short}-${user_date}"
# 检查 S3 目录是否存在(通过尝试列出目录中的对象)
s3_list_output=$(aws s3 ls "$s3_dir" 2>&1)
if [[ $? -ne 0 ]]; then
# 如果 aws s3 ls 失败(比如因为权限问题或目录确实不存在),则打印错误并退出
if echo "$s3_list_output" | grep -q 'NoSuchBucket|NoSuchKey|AccessDenied'; then
log_with_timestamp "S3 上不存在目录或访问被拒绝: $s3_dir"
exit 1
else
# 其他 AWS CLI 错误
log_with_timestamp "检查 S3目录时不存在: $s3_list_output"
exit 1
fi
elif [ -z "$s3_list_output" ]; then
# 如果 aws s3 ls 没有输出(通常意味着目录为空),则给出提示
log_with_timestamp "S3 目录存在但为空: $s3_dir"
# 这里可以决定是否继续下载(即使目录为空),或者采取其他行动
# ...
fi
# 检查本地目录是否存在,如果不存在则创建
if [ ! -d "$local_dir" ]; then
mkdir -p "$local_dir"
log_with_timestamp "创建了本地目录: $local_dir"
fi
# 使用 aws s3 sync 从 S3 下载目录
aws s3 sync "$s3_dir" "$local_dir" 2>&1
# 检查 AWS CLI 命令的退出状态
if [ $? -eq 0 ]; then
log_with_timestamp "下载成功。"
# 列出下载的文件(可选)
ls -l "$local_dir" | tee -a "$logfile"
else
log_with_timestamp "下载失败。"
fi
参考链接:
AWS S3怎么收费的?一文带你搞懂!_s3的计费标准-CSDN博客
使用 Amazon S3 存储类 - Amazon Simple Storage Service
AWS入门实践-S3对象存储的基本用法_aws s3-CSDN博客
如果对你有帮助,一块也是爱