本篇介紹如何使用 AWS CLI 命令列界面,存取自己的 S3 設備,上傳、下載、管理檔案。
AWS Command Line Interface 是 AWS 官方提供的指令工具,可用來操作各種 AWS 服務,當然也可以用來操控 S3。
若在 Debian/Ubuntu Linux 中,可用 apt
直接安裝 AWS 命令列界面套件:
# 安裝 AWS 命令列界面
sudo apt install awscli
若在 CentOS Linux 中,也可以用 yum
安裝:
sudo yum install awscli
另外亦可用 pip
來安裝:
pip3 install awscli
將 S3 認證用的金鑰存放在 ~/.aws/credentials
這個設定檔中(若此檔案不存在則自己新增),此檔案可以存放多個 S3 帳號的金鑰,其內容格式如下:
[default] aws_access_key_id=ASFHDGN345JGS436FG53 aws_secret_access_key=45G54d4cbGDF56bnFsfdgh489dfGHDdfgDFGHs4e [mys3] aws_access_key_id=HJN456GUGZ45XF94FG87 aws_secret_access_key=FGadsgf543DFGjtgy45DSzgtSdfGH67NHzxdpqZ3
為了後續執行指令方便,我們把共通的 aws
指令參數放在 ARGS
變數中:
# 指令參數設定 ARGS="--profile=mys3 --endpoint-url=https://s3.example.com"
這裡的 --profile
是指定要使用的金鑰(若不設定則會使用 default
),而 --endpoint-url
則是用來指定 S3 的主機。
--no-verify-ssl
取消驗證憑證。這裡的設定方式主要是針對私有的 S3 設備,若為一般性的使用者,可以使用 aws configure
指令以互動式的方式,產生所需要的設定檔。
關於 AWS CLI 的各種通用參數,可以參考 AWS CLI 官方文件。
接著就可以使用 aws
指令開始操作 S3,首先使用 s3 mb
指令建立一個 bucket:
# 建立 bucket aws ${ARGS} s3 mb s3://gtwang
make_bucket: gtwang
s3 ls
指令可用來列出 bucket 或是檔案:
# 列出所有 bucket aws ${ARGS} s3 ls
2019-10-24 02:04:36 gtwang
若要複製檔案,可用 s3 cp
指令,例如上傳檔案:
# 複製檔案(上傳) aws ${ARGS} s3 cp test.txt s3://gtwang/
upload: ./test.txt to s3://gtwang/test.txt
若要查看 bucket 中的檔案列表,可以使用 s3 ls
指令:
# 列出檔案 aws ${ARGS} s3 ls s3://gtwang
2019-10-24 02:31:52 44 test.txt
s3 cp
指令亦可用來下載檔案:
# 複製檔案(下載) aws ${ARGS} s3 cp s3://gtwang/test.txt .
download: s3://gtwang/test.txt to ./test.txt
若要上傳(或下載)整個目錄,可以加上 --recursive
參數:
# 上傳目錄 aws ${ARGS} s3 cp myfolder s3://gtwang/myfolder --recursive
upload: myfolder/test.php to s3://gtwang/myfolder/test.php upload: myfolder/test2.txt to s3://gtwang/myfolder/test2.txt upload: myfolder/test.tmp to s3://gtwang/myfolder/test.tmp
s3 sync
指令就類似 Linux 的 rsync
,可用來同步檔案或目錄,並且可以指定排除規則:
# 同步檔案或目錄(上傳) aws ${ARGS} s3 sync myfolder s3://gtwang/myfolder --exclude *.tmp
upload: myfolder/test.php to s3://gtwang/myfolder/test.php upload: myfolder/test2.txt to s3://gtwang/myfolder/test2.txt
也可用來下載:
# 同步檔案或目錄(下載) aws ${ARGS} s3 sync s3://gtwang/myfolder myfolder
若要讓別人可以透過網頁瀏覽器直接下載 S3 上面的檔案,可以使用 s3 presign
指令針對特定檔案產生一個下載專用網址,只要知道這個網址的人就可以直接下載檔案(不需要帳號或密碼):
# 產生下載專用網址 aws ${ARGS} s3 presign s3://gtwang/test.txt
https://s3.example.com/gtwang/test.txt?AWSAccessKeyId=HJN456GUGZ45XF94FG87&Signature=QnAqHel7Qpvun7jQJnGSQET98MQ%3D&Expires=1571964188
這個下載網址預設的有效期間是一小時,若要自訂有效期間,可以用 --expires-in
參數指定時間(單位為秒):
# 產生下載專用網址(有效期間為一週) aws ${ARGS} s3 presign s3://gtwang/test.txt --expires-in 604800
若要將 S3 上面的檔案重新命名,或是搬到新的位置,可以使用 s3 mv
指令:
# 重新命名(搬移)檔案 aws ${ARGS} s3 mv s3://gtwang/test.txt s3://gtwang/new_name.txt
move: s3://gtwang/test.txt to s3://gtwang/new_name.txt
若要刪除 S3 上面的檔案或目錄,可以使用 s3 rm
指令:
# 刪除檔案(或目錄) aws ${ARGS} s3 rm s3://gtwang/myfolder
delete: s3://gtwang/myfolder
若要刪除空的 bucket,可以使用 s3 rb
指令:
# 刪除空的 bucket aws ${ARGS} s3 rb s3://gtwang
參考資料:AWS CLI s3 指令文件