やりたかったこと
S3へオブジェクト(画像ファイル)をアップロードし、それとあわせてオブジェクトにタグを付与する。
※なお、今回は「S3RVER」というモックS3にアップする方法です。
ハマった点
一生懸命、1コマンドでアップロードとタグつけをしようとしてましたが、どうも同時にできないようでした。
解決できたコマンド
まずはオブジェクトをS3にアップロードし、アップロードしたオブジェクトにタグをつけるという2ステップが必要でした。
# アップロード
$ aws --endpoint http://localhost:4568/ s3api put-object --bucket バケット名 --key アップ後のオブジェクトのパス --body アップするファイルのフルパス --content-type image/jpg --profile s3local
# タグ付与
$ aws --endpoint http://localhost:4568/ s3api put-object-tagging --bucket バケット名 --key アップ後のオブジェクトのパス --tagging "TagSet=[{Key=tagKey,Value=tagValue}]" --profile s3local
コマンドの違い
put-object
オブジェクトをS3にアップするコマンド。--taggingオプションは使えるようだが、今回はタグを設定できなかった。
https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html
put-object-tagging
すでにS3にアップ済みのオブジェクトに対し、タグを付与するコマンド。--bodyオプションは使えない。
https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object-tagging.html
各オプションの説明
--bucket
バケットを指定します。バケットとは、S3配下の最上位の入れ物のことです。
--key
アップ後のオブジェクトのフルパス。アップ後は設定したこの一意のkeyを指定することで、オブジェクトを指定、取得できます。
--body
これからアップする(今回はローカル)ファイルのフルパスを指定します。
--content-type
オブジェクトのタイプです。今回は画像なので、image/jpg
としています。
--profile
ユーザー名
--tagging
付けたいタグをkey valueで指定します。タグ付け後は、keyを渡せば、valueが取得できるようになります。
https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object-tagging.html
おまけ
バケット配下にフォルダだけ作る方法
S3ではそもそも、フォルダという概念がないらしいです。--key の値を/
で終わらせれば、フォルダがオブジェクトとして作られるようです。
$ aws --endpoint http://localhost:4568/ s3api put-object --bucket バケット名 --key folderName/ --profile s3local
参考にした記事
https://qiita.com/ajhsscs3/items/7615c01ed02bddd88606
https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html
https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object-tagging.html
https://dev.classmethod.jp/articles/amazon-s3-folders/