AWS-CLI使い方まとめ(S3編)

本番環境へSSH接続できなくて(権限なし)、DBのdumpファイルをどうやってGETしようか試行錯誤した時の方法です。

セッションマネージャーからAWS-CLIでS3バケットにアップロードして、S3経由で取得できました。

これは色々応用できるなと思い、AWS-CLIの使い方をまとめておきます。
ということでまずはS3操作について...

事前準備

  • AWS-CLIのインストール
    https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-install.html
    $ aws --version
    aws-cli/1.16.170 Python/3.7.4 Darwin/17.5.0 botocore/1.12.160
    

  • 設定
    以下2ファイルを用意 (無ければ作る)
    $ cat ~/.aws/config
    [default]
    region = ap-northeast-1
    
    $ cat ~/.aws/credentials
    [default]
    aws_access_key_id = AAAAAAAAAAAAAAAAAAAA
    aws_secret_access_key = BBBBBBBBBBBBBBB/CCCCCCCCCCCCCCCCCCCCCCCC
    
    ※複数環境を使い分ける場合は、credentialsに設定した[キー]を --profile [キー] で指定する

バケットの一覧

  • 書式
    aws s3 ls
    
  • 使用例
    $ aws s3 ls
    2019-10-02 12:57:09 test.images
    2019-10-25 11:52:43 test.bucket
    2019-10-23 17:46:10 test.xxxxxxxx
    

指定バケット配下のファイルの一覧

  • 書式
    aws s3 ls {バケット名}
    
  • 使用例
    $ aws s3 ls test.bucket
    2019-10-04 18:24:00 1289018 image-0001.png
    2019-10-03 16:09:47 1289018 image-0002.png
    2019-10-03 16:11:29 1289018 image-0003.png
    2019-10-02 13:12:36      10 test-0001.txt
    2019-10-03 16:16:04      10 test-0002.txt
    

ファイルアップロード

※厳密にはアップロードやダウンロードといったコマンドはなく、cpサブコマンドによって行う
  • 書式
    aws s3 cp {アップロードするファイル} s3://{アップロード先のバケット}
    
  • 使用例
    $ aws s3 cp test-0003.txt s3://test.bucket
    upload: ./test-0003.txt to s3://test.bucket/test-0003.txt
    

ファイルダウンロード

  • 書式
    aws s3 cp s3://{バケット+対象ファイル} {ダウンロード先}
    
  • 使用例
    $ aws s3 cp s3://test.bucket/test-0003.txt ./
    download: s3://test.bucket/test-0003.txt to ./test.txt
    

ファイルリネーム/バケット間移動

mvサブコマンドでリネームやバケット間の移動
  • 書式
    aws s3 mv s3://{バケット+対象ファイル} s3://{バケット+対象ファイル}
    
  • 使用例
    $ aws s3 mv s3://test.bucket/test-0003.txt s3://test.bucket/test-0004.txt
    move: s3://test.bucket/test-0003.txt to s3://test.bucket/test-0004.txt
    

ファイル削除

  • 書式
    aws s3 rm s3://{削除するファイルのバケット}/{削除するファイル}
    
  • 使用例
    $ aws s3 rm s3://test.bucket/test.txt
    delete: s3://test.bucket/test.txt
    

一時的なURLの発行

アップロードしたファイル、もしくはアップロード済みのファイルに一時的にURLを設定して外部からダウンロードできるようする。

冒頭でやろうとしていたことに加え、不特定多数に一時的なファイルを配布をする際に使える。
  • 書式
    aws s3 presign s3://{公開するファイルのバケット}/{公開対象ファイル} ¥
        --expire-in {公開する期間(秒)}
    
    ※ --expire-inは任意オプションで、省略した場合は3600(1時間)になる
  • 使用例
    $ aws s3 presign s3://test.bucket/test-0003.txt --expires-in 60
    https://test.bucket.s3.amazonaws.com/test-0003.txt
      ?AWSAccessKeyId=AAAAAAAAAAAAAAAAAAAA
      &Signature=RRRRRRRRRRRRRR&Expires=1575446854
    
    ↑で返ってきたURLで対象ファイルをダウンロードできる。発行した時間から60秒を過ぎると以下のエラーとなる。
    <Error>
      <Code>AccessDenied</Code>
      <Message>Request has expired</Message>
      <Expires>2019-12-04T00:00:00Z</Expires>
      <ServerTime>2019-12-04T00:00:00Z</ServerTime>
      <RequestId>nnn</RequestId>
      <HostId>
        xxxxxxxx
      </HostId>
    </Error>
    

マニュアル

なお、各サブコマンドについてのマニュアルも用意されている
aws s3 [サブコマンド] help

この記事へのコメント

スポンサーリンク