この記事の経緯
同僚にS3にあるファイルを公開したいので、方法を教えてほしいと言われました。(知識として持っておきたいので、構築作業はご本人で実施したいとのことでした)
ぱっと思いついた方法が3つあり、口頭で説明するよりかは資料として説明した方が理解しやすいだろうと思い、かつ、外部公開しても問題ない内容なので、記事にします。
同僚への説明資料のため、詳細なやり方までは記載しておりません。各やり方のメリット、デメリットを記載していますので、ご自身の要望に沿う方法の選定に役立てて頂ければと思います。
S3にあるファイルを公開する方法3種
今回はS3のWEBホスティング
CloudFront + S3
Lambda + S3
の3パターンを考えます。
それぞれの特徴を簡単に纏めると以下となります。
項目 | S3のWEBホスティング |
CloudFront + S3 |
Lambda + S3 |
---|---|---|---|
SSL | x | ○ | ○ |
独自ドメイン | ○ | ○ | x |
手間 | ◎ | x | △ |
パフォーマンス | x | ○ | x |
アクセス制御 | △ | ○ | △ |
では、それぞれ見ていきましょう。
S3のWEBホスティング
S3には、そもそも今回のようなファイルを公開するようにエンドポイントを利用できます。設定で有効にするだけで使えるので簡単に利用できますが、 HTTPS をサポートしていません。
IPアドレスのアクセス制御などはS3に設定することで可能です。
メリット
- 簡単!
- S3のバケット名をアクセスしたいドメイン名にすれば、任意のドメイン名でアクセスできる
デメリット
- HTTPS 非対応
- S3から直接ファイルを読み込むので、パフォーマンスはよくない(S3の性能があがっており、今は気にしなくてよいかも)
CloudFront + S3
S3にHTTPSでアクセスしたいといった場合に、良く出てくるのが、このパターンです。S3の前にCloudFrontを置くことで、HTTPS でのアクセスを可能とし、CDNとしてキャッシュもできるので、パフォーマンスも素晴らしいものとなります。また、WAF
を使えば、詳細なアクセス制御も実施可能です。ただ、構築するには、CloudFront
、S3
の他に ACM
と Route53
を使う必要があり、手間ではあります。
メリット
- HTTPS 対応
- キャッシュすれば、爆速
- 他のサービスとの組み合わせで、自由に制御できる
デメリット
- 構築が手間
Lambda + S3
AWSは今年、LambdaにHTTPSエンドポイントを追加してくれました!
これを使えば、S3にあるファイルを外部公開できます。LambdaのHTTPSエンドポイントにアクセスして、Lambdaでは、S3にあるファイルを取得して返すという方法です。ただ、HTTPSは可能ですが、Lambdaのエンドポイントはこちらで指定できないので、カスタムドメインは非対応となります。また、今までの方法は、AWSコンソールでボタンをポチポチすれば、構築可能ですが、こちらLambdaを実装する必要があります。逆にいうと、アクセス制御やリダイレクトなど、Lambdaで出来ることはなんでもできます。
メリット
- HTTPS 対応
- Lambdaの実装によっては、リダイレクト設定など、自由に設定できる。
デメリット
- カスタムドメインは不可。(API Gateway を使えば出来るが、今回は省く)
- 実装する必要がある (人によってはメリットにもなりえる)
- S3から直接ファイルを読み込むので、パフォーマンスはよくない(S3の性能があがっており、今は気にしなくてよいかも)
おわり
S3を公開したいというに人の助けになれば幸いですし、他の方法が思いつく方は教えて頂けれると嬉しいです。
個人的には S3のWEBホスティング
が https
対応してほしいです。