【unity】AddressablesとAWSのS3+CloudFrontを使用してサーバからアセットをダウンロードできるようにする その1

unityのAddressablesを使用してアセットのビルド+アプリ側でのダウンロードを行います。Addressablesを使用すると設定でアセットをアプリに含めて読み込むかサーバからダウンロードして読み込むなど行いますが今回はS3からダウンロードをしてみます。

こちらも参考にしてください。

概要

Addressablesでアプリ内ダウンロードやLocalhostからのダウンロードはできているので、実際にサーバからアセットダウンロードしてみる。

S3から直接ダウンロードも可能だと思いますがS3内に保存したアセットデータをCloudFront経由でダウンロードして読み込むようにする。(CloudFrontを使用するのは、より実際のアプリの運用に近いと思ったからです。)

AWS側の設定

S3とCloudFrontの設定をしていきます。(よく設定画面が変わるので参考程度)

S3

S3ではバケットというものでアセットを管理します、今回は「unity-assets-sample」というバケット名で作成しています。(バケット名はグローバルで一意なのでほかの方がすでに作っていると作成できないので注意してください)

一般的な設定

  • バケット名「unity-assets-sample」お好み(グローバルで一意)
  • リージョン「大阪」自分の近い地域を選択

オブジェクト所有者

  • 「ACL無効(推奨)」おそらくデフォルト

このバケットのブロックパブリックアクセス設定

  • すべてチェックを外す(設定が詳しくわかる人は用途に合わせてすればいいがよくわからない)
  • アプリから取得できるようにしたいので警告は承認しておく

その他はデフォルトのまま

重要!!バケットとオブジェクトへのアクセスを許可するためにバケットポリシーに追記

重要としているが自分が躓いただけ、最終的にアセットバンドルダウンロードするのでs3のオブジェクト取得を許可する。

CloudFrontのディストリビューションを作成するときに、バケットポリシーを自動で反映するにしていると自動で下記のようなポリシーが追加される。

  • s3:GetObjectが許可されていると良い。

CloudFront

ディストリビューションの作成を行います、S3を事前に作成しているとオリジンドメインの候補に出てくると思います。

オリジンの設定

  • S3のバケットにアクセスにして、新しいOAIを作成(初めてだったので)
  • とりあえずs3に対してバケットポリシーを反映したいので「はい」にしておく。

デフォルトのキャッシュビヘイビア

  • HTTP を HTTPS にリダイレクトする
  • 開発段階だと頻繁にアセットを更新するのでキャッシュを無効にしておいてもいいかもしれない。

関数の関連付けウェブ アプリケーション ファイアウォール (WAF)

  • セキュリティ保護を有効にする

設定

  • 北米、欧州、アジア、中東、アフリカを使用(アジアが必要なので料金が安くなるのか?)

※代替ドメイン、カスタム SSL 証明書 – オプションはRoute53などのドメイン取得で取得した場合はそちらの設定を行う。

実際に使用する

代替ドメインを設定していれば見慣れたURLになると思いますが今回は設定しなかったので、謎なURLですがこちらを使用してunity側でアセットダウンロードしたいと思います。

おわりに

正直作成時の設定はどのようにすればいいのかあまりわかってないのでセキュリティ的に問題がある設定になっている場合がある、unityでダウンロードできるようになったらいろいろ試してみないといけない。

コメント