#やりたかったこと
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/