AWS的S3基本使用

 安装和配置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计费:

Amazon S3价格_AWS云存储服务-AWS云服务              

日志文件上传到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博客

Amazon S3价格_AWS云存储服务-AWS云服务

如果对你有帮助,一块也是爱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

容器云服务

如果对你有用,一块钱也是爱。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值