速い・自動化出来る
CLIでAWSを操作するメリットは無駄が少なく速いこと、そしてスクリプトで自動化出来ることです。こちらではAWSリソースへのssh接続を半自動化しましたが、その他のリソースもCLIで扱えるようになるといざという時に役立ちます。
初めのうちは覚えるのが億劫かもしれませんがどんな事が出来るかを把握しておくだけでも大分変わります。とうい訳で覚えておきたいAWS CLIをまとめていきます。
AWS CLIアカウント設定
まず新しくIAMユーザを作成します。権限は「AdministratorAccess」ポリシーをアタッチしておきます。発行されたアクセスキーIDとシークレットアクセスキーを次のコマンドに従って入力します。
自分の場合は既にCLIアカウントを持っているのでプロファイルに名前を付けて差別しています。
$ aws configure --profile my
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]: ap-northeast-1
Default output format [None]: json
アカウント設定は完了です。AWS CLIではプロファイルを指定しない場合だと~/.aws/credentials
のdefaultのアカウントが採用されて、プロファイルを指定した場合は指定したプロファイルのアカウントが採用されます。
$ aws s3 ls --profile my
※myのs3バケット一覧が表示される
S3操作
一覧表示
バケットでもフォルダでもオブジェクトでも、一覧取得コマンドの基本形はaws s3 ls
です。
※myのs3バケット一覧が表示される
$ aws s3 ls
※myのs3バケット内のディレクトリ・オブジェクト一覧が表示される
$ aws s3 ls s3://[bucket]/[folder]/
コピー
※S3からローカルにファイルをコピーする
$ aws s3 cp s3://[bucket]/[folder]/hoge.txt ./
ローカルからS3にファイルをコピー(アップロード)する
$ aws s3 cp hoge.txt s3://[bucket]/[folder]/hoge.txt
移動・削除
移動と削除も同様な形式で下記のコマンドの通りです。
※ファイル名をhoge.txtからkoge.txtに変更
$ aws s3 mv s3://[bucket]/[folder]/hoge.txt s3://[bucket]/[folder]/koge.txt
※koge.txtを削除する
$ aws s3 rm s3://[bucket]/[folder]/koge.txt
fzfを使った応用
fzfを使えば順番に参照していく事も可能です。次のコードを.zshrcに追記してから実行してみて下さい。最後まで行くとオブジェクトへのパスがクリップボードにコピーされます。
## fs3lsでS3の各パスを取得
fs3ls() {
BUCKETS=`aws s3 ls | cut -d" " -f3`
BUCKET=`echo $BUCKETS | fzf`
TOP_OBJECT_PATH="s3://${BUCKET}/"
OBJECT_PATH=`aws s3 ls ${TOP_OBJECT_PATH} | fzf`
OBJECT_PATH=`echo $OBJECT_PATH | awk '{print $NF}'`
OBJECT_PATH=$TOP_OBJECT_PATH$OBJECT_PATH
# 「/」というサフィックスがある場合aws s3 lsを回してパスを整形する
while [ ${OBJECT_PATH: -1} = "/" ]
do
TMP=`aws s3 ls ${OBJECT_PATH} | fzf`
LAST_PATH=`echo $TMP | awk '{print $NF}'`
OBJECT_PATH=$OBJECT_PATH$LAST_PATH
done
echo $OBJECT_PATH >&2 | pbcopy
}
aws cliコマンドの自動補完
aws cliは初期状態だと自動補完してくれないので、後から設定する必要があります。公式ドキュメントに詳しく記載されています。