Skip to content

Instantly share code, notes, and snippets.

@thebrecht
Created July 1, 2016 09:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thebrecht/8a6b84d6a17c23ee996706cf92d4696b to your computer and use it in GitHub Desktop.
Save thebrecht/8a6b84d6a17c23ee996706cf92d4696b to your computer and use it in GitHub Desktop.
最近遇到需要在命令列底下上傳檔案到AWS S3,查了一些介紹。
首先是官網的資源 http://aws.amazon.com/tw/cli/ ,其實這裡應該可以查到所有需要的資訊了。(不過雖然掛正體中文的版本,但目前還是英文的內容就是了)
安裝 AWS Command Line Interface (CLI)
要在 commadn line 上和AWS溝通,首先要安裝 awscli,下載路徑,Windows有 32 / 64位元 的執行檔,Mac/Linux的話需要使用Python套件管理工具 pip 安裝 awscli。
我自己的環境中沒有pip,所以要先從pip裝起。
install pip
在Ubuntu底下,一行搞定。
sudo apt-get install python-pip
install awscli
pip install awscli
讓子彈飛一下,很快就裝完了。
使用 AWS IAM 服務,取得API key和 Secret Key
在使用 awscli 之前,需要設定 API key 和 Secret key。如果你已經有這兩組Key,就可以跳過這段;如果沒有,這時需要到AWS 的 IAM ( Identity and Access Management) 服務註冊一個 User,並取得 User 的 API key 和 Secret key 。
到AWS web控制台上找到 IAM的服務,在Dashboard中找到 User、進去後點選 Create New User,建完後,有一個「Show User Security Credentials」點開來看,就可以看到這個 User的 API Key 和 Secret Key,請把它存下來,或是下方也有一個 「Download Credentials」可以下載這2組的csv檔案。
注意:請妥善保存這組key,API key查得到,但是 Secret Key生成後,就好像就查不到了,弄丟好像就只能再生成另一組 key 。
取得 S3 的存取權限
雖然我們已經有key 可以準備存取 S3了,但是在此之前,還得先開權限給它,才能正常使用。請回到 IAM 的 User 列表中,點選剛剛建立的 User名稱,進去後有一個 Permissions 的區塊,點選 Attach Policy。進入後有各種權限的設定,我們要找的是「AmazonS3FullAccess」,勾選 Attach 即可。
這樣,我就們取得了 S3 的存取權限。
設定 awscli
終於回到了 awscli ,在command line 底下輸入:
aws configure
執行後它會問下面四個問題:
AWS Access Key ID
AWS Secret Access Key
Default region name
Default output format
前兩個我們已經取得了,依序填入即可。
region name 是你的 S3 所在的 region ,以我自己為例,是使用 us standard,也就是 us-east-1 ,region可以到這裡查詢 http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region 。
第四個是輸出的格式(有 json、text、table 三種格式),沒有特別需求的話,enter 按下去留白即可。
使用awscli
awscli 可以跟許多AWS的服務溝通(不知道是不是全部啦,aws服務那麼多,誰曉得。不過常用的都有啦),而我們的目標是使用S3,它的基本組成語法結構就是:
aws s3 (命令) 〔本地端檔案路徑〕(s3 bucket 路徑,以s3:// 開頭) [其餘的參數]
可以用:
aws s3 help
來查詢可以用的命令。
使用mb指令建立 bucket
在開始上傳檔案之前,我們要先建立一個bucket來當作存放的位置。由於 bucket 的名稱不能重複,所以可以考慮使用網址格式的命名方式來命名 bucket。例如可以取成 test.brecht.im。 那就讓我們來建立 bucket:
aws s3 mb s3://test.brecht.im
建立完成後,會回傳make_bucket的訊息。如果還想確認一下,那就使用:
aws s3 ls
這時就會列出剛剛建立的bucket了。
ps. 預設 bucket的權限不是公開的,不過只要對後面的存取檔案設定公開讀取權限,檔案就可以公開存取。如果要進一步了解用指令修改 bucket的權限設定,可參考 http://docs.aws.amazon.com/cli/latest/userguide/using-s3api-commands.html
使用 cp 指令上傳檔案
假設我們有一個 README.md 的檔案,要放在剛剛建立的bucket底下的 backup目錄,那就就用以下的語法:
aws s3 cp README.md s3://test.brecht.im/backup/ --acl public-read
上傳後,就可以透過 https://s3.amazonaws.com/test.brecht.im/backup/README.md 下載或讀取檔案了。
可以用下面指令檢查:
aws s3 ls s3://test.brecht.im/backup
注意到後面的--acl是設定存取權限,public-read是讓大家都可以讀取,沒加上這個參數的話,上傳的檔案別人就讀不到了。就上傳物件來說,它可以設定的權限有:
private
public-read
public-read-write
請視實際需要服用,另外 bucket也可以作權限的設定,詳細的情況,可以參考: http://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html
aws s3 的指令大抵類似 linux的指令,接在 aws s3後面可以使用的指令還有:
cp (複製檔案)
help (說明檔)
ls (列出檔案)
mb (建立 bucket)
mv (搬移檔案)
rb (刪除bucket)
rm (刪除檔案)
sync (本地端與bucket或是bucket與bucket之間同步)
website (bucket用作網站的設定)
相關資源
http://aws.amazon.com/tw/cli/ (awscli 官方網站)
http://tmont.com/blargh/2014/1/uploading-to-s3-in-bash (如果想用bash script來備份檔案到S3可參考)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment