🪣

どうやってS3バケットをホスティングしたらいいのか?最近のCloudFrontとAmplify Hostingの比較

2024/11/08に公開

概要

S3のパブリックアクセスはセキュリティ面でリスクが高いため非推奨とされています。(絶対やめましょう)
S3のコンテンツをホスティングする場合、以下の2つの方法が有力だと思うので紹介・簡単な比較をします。

  • CloudFront + S3 構成 (OAC)をCDKで実装する
  • ワンクリックAmplify Hosting

CloudFront+S3の構成をCDK管理としているのは、CloudFrontを入れる際に何かしらIaCは欲しいだろうという点と個人的にIaCとしてCDKをよく使うという主観+個人的な理由です。Terraformでも全く問題はありません。

ワンクリックAmplify Hostingという名前は正式なものではなく、後述するS3のコンソールからAmplify Hostingが作成できるようになった新しい機能のことを指しています。

CloudFront+S3 構成 (OAC)

実現方法

今まで(2024/09以前)は、CloudFront+S3の構成でOACをCDKで実現するためには、L1コンストラクタで実装する必要がありましたが、2024/09にL2コンストラクタのCloudFrontのOACがリリースされ、めちゃくちゃ実装が楽になりました。
https://x.com/365_step_tech/status/1831934518271602887

OACの実装例:

const myBucket = new s3.Bucket(this, 'myBucket');
new cloudfront.Distribution(this, 'myDist', {
  defaultBehavior: {
    origin: origins.S3BucketOrigin.withOriginAccessControl(myBucket) // Automatically creates a S3OriginAccessControl construct
  },
});

aws-cdkのリポジトリにある実装例を参照。
https://github.com/aws/aws-cdk/tree/main/packages/aws-cdk-lib/aws-cloudfront-origins#setting-up-a-new-origin-access-control-oac

それ以前がどれくらい手間だったかについてはこちらの記事に詳しく書かれていたのでこちらを参照ください。(これについて書こうと思っていたら既に公開済みだった)
https://blog.supica.work/entry/try-cloudfront-oac-cdk-l2-construct

CloudFront+S3構成の特徴

  • メリット
    • CloudFrontの機能を使うことができるので多機能
    • WAFの導入も可能(Amplify Hostingとの比較)
    • CDKでの構築もL2コンストラクタのおかげで簡単!
  • デメリット
    • ワンクリックAmplify Hostingに比べると知る必要のある知識や設定が多い

Amplify Hosting

実現方法

2024/11/01の公式ブログですが、S3のコンソール画面からAmplify Hostingを設定できる新機能紹介がありました。まだ実際に動かしたことはないですが、自分としてはインパクトの大きいアップデートだなと感じました。公式ブログ内に手順も詳しく書かれていますがとても楽そうです。

https://aws.amazon.com/jp/blogs/news/simplify-and-enhance-amazon-s3-static-website-hosting-with-aws-amplify/

今までAmplifyは少し独立した位置付けである印象があり、Amplifyから他のAWSリソースと連携する、扱いやすくするようなアップデートが多かったと感じていて、既存のAWSサービス(S3)からAmplifyのリソースを作るアップデートは珍しい気がしました。

特徴

  • メリット
    • マネジメントコンソールを使った操作では工程が少なく済む
  • デメリット
    • Amplify Hostingでは直接WAFのアタッチができない
      • Progressになったらしい(応援)
    • CDKなどのIaCツールとの棲み分けが悩ましい(主観)

まとめ

広い意味でS3を公開する技術周りのアップデートが重なり興味深かったです。

どちらを使うべきかという点の個人的な結論としては、WAFを使いたい、CDKなどのIaCに慣れている、というケースならCloudFront+S3の方がメリットが大きいと思っています。とにかく早く安全にリリースしたい、IaCムズカシイ、といった場合はコンソールからAmplify Hostingは強力な方法だなと感じています。

どちらを選ぶにせよ、複数の選択肢があり、どちらも便利な状況としてはユーザーをしては嬉しい限りだなという思いなので今後のアップデートにも期待したいです。

以上、誰かの役に立てれば幸いです。

Discussion