メンチカツには醤油でしょ!!

AWS/Java/Node.js/Spreadsheets/Docker/Jenkins/コミュニティ・勉強会レポを主とした技術系ブログ

S3バケット作成時にThe requested bucket name is not available.

こんなエラー

バケットの作成 - バケット名とリージョンの選択

The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.

バケットとは、Amazon S3 に格納されるオブジェクトのコンテナです。バケットを作成する場合、レイテンシーを最適化し、コストを最小限に抑えて規制要件に対応できるリージョンを選ぶことが可能です。バケットの命名ルールに関する詳細については、『Amazon S3 ドキュメント』を参照してください。

AWS CLIだとこんな感じ

$ aws s3 mb s3://already-exists-bucket-name
make_bucket failed: s3://already-exists-bucket-name An error occurred (BucketAlreadyExists) when calling the CreateBucket operation: The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.

CLIの方がエラーメッセージは親切ですね(笑)

原因はかんたん

バケット名はAWS内でユニークでなければなりません(重複が許されません)
また、バケット名はリージョンが違ってもエラーは出ます。 

なので、tempとか適当な名前だとエラーになりますね。

なので、私はいつもドメイン名を付けるようにしています。
ドメイン名がmy-domain-name.comだとすると、
my-domain-name.com.bucket-name
bucket-name.my-domain-name.com
のような感じです。

ちなみに

$ aws s3 mb bucket-name-you-want-to-create

<S3Uri>
Error: Invalid argument type

この場合はs3://が抜けてるケアレスミスです。

$ aws s3 mb s3://bucket-name-you-want-to-create

こうですね。

 

Sublime Textのタブでファイル名が日本語表示されない (Windows10のみ?)

Windows 10にしたら・・・

f:id:ryoichi0102:20161125174157j:plain

まじかよ。
Windows 10、サブディスプレイ接続時、たまに砂嵐みたいなのよこすし…

さて、Windows10に新調したことをきっかけに特に理由もなく
Sublime Textをポータブル版に切り替えて使い始めて半年近く。
上記の現象。。日本語のタブが複数タブあるとちょっと不便ですね。
タブの位置で覚えるなどのハック(?)でだましだまし使ってたのですが
流石に不便なので、治そうかなと思った所で…

ポータブル版のせいじゃなかった

32bit Windows版、そのポータブル版
64bit Windows、そのポータブル版

クリーンインストール+Package Control+Japanizedパッケージ
というシンプル構成で全部試しましたがダメ…
どうなってるんでしょ

でもそれを差っ引いてもVS Code, Atom, Bracketsには完全に乗り換えられない…

 

解決したら追記しますm(_ _)m

www.sublimetext.com

解決してた...!

アップデートは通知が来次第、行っているのですが
今日なおってるのを確認しました。
いつからかはわかりませんが、現時点でのバージョンはBuild 3126でした。

f:id:ryoichi0102:20170210171729j:plain

AWS CLI S3 syncで更新日時が競合した場合の挙動について

AWS CLI便利! S3 syncも便利

Dropboxのhttpホスティング無き今、S3を使っているわけです。

ryoichi0102.hatenablog.com

ちょっとした疑問から課題へ

基本的には、保存や変更のがある度にローカル⇒S3と必ず実行しているのですが
競合した場合どうなるのかななぁ、と。

Dropboxだと、競合したファイルという別名で保存されながら同期されますが
シンプルなコマンドラインでは当然そんなことはしていません。

と、調べていたらなんとこんな記事が。

dev.classmethod.jp

ファイルサイズが一緒の場合はsyncでは同期されないとのことで
--exact-timestamps を指定しないとダメなようです。

$ aws s3 sync --exact-timestamps ./ s3://my-bucket-1.sample.com/

こうですか。

競合の場合は?

タイムスタンプが違った場合に同期されるのはわかったのですが
よくよく試してみると、タイムスタンプが違った場合は
強制コピーする。という仕様のようです。

つまりたとえば、
ローカル⇒サーバーのsyncで、サーバーのタイムスタンプが新しい場合でも
サーバーのファイルは上書きされてしまうのです。

これは盲点。。

しかもメッセージとしても通知されないので気づきにくいです。
せめてタイムスタンプが新しい場合のみ同期するというオプションがあれば良いのですが、syncのリファレンスを参照した所そんな感じのオプションはなさそうです。

sync — AWS CLI 1.11.19 Command Reference

気をつけましょうー