Skip to content

AWS CLI

インストール方法

macOSでインストールする場合はHomebrewでインストールするのが楽。

% brew install awscli

インストール後は以下のコマンドを実行するか、~/.aws/credentials~/.aws/config を直接編集してアカウント情報を設定する。

% aws configure

s3サブコマンド

バケットやオブジェクトの一覧を表示する

バケットの一覧を表示したい場合はs3 lsサブコマンドを引数なしで実行する。

$ aws s3 ls

オブジェクトの一覧を指定したい場合はs3 URLを指定すれば表示できる。

# バケット直下の一覧を取得する
$ aws s3 ls s3://バケット名/
# バケット直下からすべてのオブジェクトの一覧を取得する
$ aws s3 ls --recursive s3://バケット名/
# 特定のディレクトリ配下の一覧を取得する
$ aws s3 ls s3://バケット名/フォルダパス/

補足

  • 出力結果のPREはPrefixの略でフォルダを表す。
  • S3のフォルダは実際はオブジェクトパスの一部でしかなく
    AWSの管理コンソールやs3サブコマンドはフォルダっぽく扱っているだけ。
  • 空のフォルダはオブジェクトパスが/で終わる0バイトのフォルダっぽい空ファイルが配置されてるだけ。

バケットの作成と削除

s3 mbサブコマンドの引数にs3 URLを指定するとバケットが作成できる。
mbは多分、Make Bucketの略。
なお、バケット名は全世界でグローバルな名前を指定する必要があり、アカウントあたりに登録可能なバケット数の上限は標準で100個。

$ aws s3 mb s3://バケット名

逆にs3 rbサブコマンドを利用するとバケットを削除できる。

$ aws s3 rb s3://バケット名
# ただし、オブジェクトが存在すると削除できないので
# オブジェクトが存在していても削除したい場合は--forceオプションを作成する
$ aws s3 rb --force s3://バケット名

S3にファイルをアップロードする

# ローカルファイルをバケット直下にアップロードする場合は以下の指定できる
# ディレクトリを指定するとディレクトリを丸ごとアップロードする
$ aws s3 cp ローカルファイル s3://バケット名
# もちろんアップロード先のフォルダを指定することも可能
$ aws s3 cp ローカルファイル s3://バケット名/フォルダパス/
# -を送信元に指定すると標準入力から受け取ることができる。
$ echo TEST | aws s3 cp - s3://バケット名/オブジェクトパス

S3からファイルをダウンロードする

# バケットに存在するすべてのオブジェクトをローカルのディレクトリにダウンロードする
$ aws s3 sync s3://バケット名 ローカルディレクトリパス
# 指定されたS3フォルダに存在するオブジェクトをローカルのディレクトリにダウンロードする
$ aws s3 sync s3://バケット名/フォルダパス ローカルディレクトリパス

ファイルやフォルダを削除する

s3 rmサブコマンドを利用するとS3上のオブジェクトが削除できる。

$ aws s3 rm s3://バケット名/オブジェクトパス

--recursiveオプションを指定するとフォルダを丸ごと削除できる。

% aws s3 rm --recursive s3://バケット名/ディレクトリパス

glueサブコマンド

データベースの一覧を表示する

$ aws glue get-databases

テーブルの一覧を取得する

$ aws glue get-tables --database-name データベース名

テーブルの内容を取得する

$ aws glue get-table --database-name データベース名 --name テーブル名

Icebergのメタデータファイルの場所もこのコマンドで確認できる。

$ aws glue get-table --database-name Icebergデータベース名 --name テーブル名 | jq '.Table.Parameters'

テーブルを削除する

$ aws glue delete-table --database-name データベース名 --name テーブル名

データベースを作成する

$ aws glue create-database --database-input '{"Name": "データベース名"}'

データベースを削除する

$ aws glue delete-database --database-name