AWSCLIではまったこと

awscliを普通のbashとかと同じ感覚で使ってはまったのでメモ。

一般に、bashとかだと . とか .. がパスの間に挟まってもそれを解釈した上で処理してくれる。

これは、srcやdestとして使ってもおんなじ。

# 以下の2文は同じ結果を返す
ls /var
ls /var/./log/..

しかしながら、aws s3のコマンドとして利用する場合、これらは異なる意味となる。

具体的には、S3側のprefixに . を持ち込む場合、それも有効な文字列として扱われる。

S3_BUCKET_NAME=[input-your-bucket]
ARCHIVE_FILE=./archive.zip

# こうすると、指定バケットの下で prefixに "." が付いた状態でアップロードされる
aws s3 cp ${ARCHIVE_FILE} s3://${S3_BUCKET_NAME}/${ARCHIVE_FILE}

awscli(特にs3)を使う場合、ファイルライクに扱えこそするが、ファイルシステムと等価ではないということを忘れてはならないようだ。