S3

Amazon S3のリダイレクトルールを駆使してPrime Photoのリンクを管理する

動機

最近、いろいろな機会で写真を撮ってはアルバムにまとめて、そのリンクを知人や被写体に共有することが多くなってきました。

みなさんもそういうことありますよね?

でも、URLにランダム文字列が入ってていやだなあ、とか、URLを見ても何のリンクか分からないなあ、とか、思うじゃないですか。

思いますよね?

そこで、できるだけ任意のURLを付ける方法があるんです。
そう、AWSならね。

準備するもの

AWSアカウント
リンクしたいサイト

手順

S3 Bucket作成

Amazon S3で 任意のBucket名 のBucketを作成します。
完成するエンドポイントが
http://[任意のBucket名].s3-website-[Region].amazonaws.com
になりますので、ここで自分のHNなどを入れて存在感をアピールします。

リダイレクトルールの設定

先ほど作成したBucketのプロパティの[Static website hosting]を編集します。

[このバケットを使用してウェブサイトをホストする]を選択して以下のように設定します。

  • インデックスドキュメント:使いませんが必須項目なので、適当な値( a とか)を入れます
  • リダイレクトルール (任意):以下のように設定します
<RoutingRules>
  <RoutingRule>
    <Condition>
      <KeyPrefixEquals>event_20170701</KeyPrefixEquals>
    </Condition>
    <Redirect>
      <HostName>www.amazon.co.jp</HostName>
      <ReplaceKeyWith>clouddrive/share/aaabbbccc</ReplaceKeyWith>
    </Redirect>
  </RoutingRule>
  <RoutingRule>
    <Condition>
      <KeyPrefixEquals>comiket_daredare_20170813</KeyPrefixEquals>
    </Condition>
    <Redirect>
      <HostName>www.amazon.co.jp</HostName>
      <ReplaceKeyWith>clouddrive/share/abcdefghi</ReplaceKeyWith>
    </Redirect>
  </RoutingRule>
  <RoutingRule>
    <Redirect>
      <HostName>twitter.com</HostName>
      <ReplaceKeyWith>you</ReplaceKeyWith>
    </Redirect>
  </RoutingRule>
</RoutingRules>

上記のように設定すると、
http://[任意のBucket名].s3-website-[Region].amazonaws.com/event_20170701
http://www.amazon.co.jp/clouddrive/share/aaabbbccc
のようにリダイレクトすることができます。

簡単な解説

<RoutingRule>
  <Condition>
    <KeyPrefixEquals>event_20170701</KeyPrefixEquals>
  </Condition>
  <Redirect>
    <HostName>www.amazon.co.jp</HostName>
    <ReplaceKeyWith>clouddrive/share/aaabbbccc</ReplaceKeyWith>
  </Redirect>
</RoutingRule>

Conditionに該当したらリダイレクト先に繋がります。
上の例なら、
http://[任意のBucket名].s3-website-[Region].amazonaws.com/event_20170701
にアクセスすると、
http://[任意のBucket名].s3-website-[Region].amazonaws.com 以下の event_20170701
上のRoutingRuleのConditionに一致するので、Redirectに指定した http://<HostName>/<ReplaceKeyWith> にリダイレクトしてくれるというわけです。

<RoutingRule>
  <Redirect>
    <HostName>twitter.com</HostName>
    <ReplaceKeyWith>you</ReplaceKeyWith>
  </Redirect>
</RoutingRule>

一番下のこのConditionのないルーティングは、ルールが設定されていなかったら遷移するデフォルトページとして機能します。
これを一番上に書いてしまうとデフォルトページにしか遷移しないので気をつけてくださいね。

おわり

もうできちゃいましたね。
エンドポイントはおいそれと変更できませんが、KeyPrefixEqualsは自在に設定できますので、ここに撮影日やイベント名・写っている人や送りたい人の名前を入れましょう。

おことわり

お金がかかりそうなので試してもいないのですが、長ったらしいエンドポイントはRoute53を使えば短くできると思います。試していないので責任は取れません。

ところで…

S3のプロパティの設定次第で自由にリンクを作れるようになりましたが、
毎回S3のコンソールを開くの、面倒臭いですよね…?コマンドで一発で新しいRoutingRuleを設定したいですよね…?

続く(書いたらここに続きの記事を貼ります)
続きの記事書きました。