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