ITと筋トレの二刀流

未だゼロ刀流

S3の静的コンテンツをCloudFrontを通して公開する

AWSの環境構築を続けていますが、アプリケーション開発で欠かせないのが画像やHTMLなどの静的コンテンツです。

オンプレ時代はApacheなどのWebサーバーを構築して、そこにコンテンツを置いて公開していましたが、AWSのS3は静的コンテンツのホスティングを行えるので今回試してみようと思います。

S3バケット

勘違いしていました。S3上のコンテンツ単位で公開の設定を行うものだと思っていたのですが、バケット単位での設定が必要となります。

ホスティングの設定

公開するためのバケットを作成したら、対象バケット→「プロパティ」→「Static website hosting」を選択します。

f:id:tatsuyashi:20180731004101p:plain

静的コンテンツホスティングの設定が開くので、「このバケットを使用してウェブサイトをホストする」を選択し、必要な情報を入力します。

f:id:tatsuyashi:20180731004722p:plain

アクセス権限の設定

次にアクセス権限の設定を行います。

対象バケット→「アクセス権限」→「バケットポリシー」を選択して、以下の通り入力します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

バケットがパブリックになったことで注意されていますが、承知の上です。

f:id:tatsuyashi:20180731010711p:plain

これでS3の設定は完了です。

コンテンツの確認

では、実際にコンテンツが配信されるかどうか確認してみます。

適当なJSONファイルをアップロードします。

f:id:tatsuyashi:20180731011651p:plain


アクセスしてみます。

f:id:tatsuyashi:20180731012110p:plain

無事表示されましたね。

CloudFront

次にCloudFrontの設定を行います。

CloudFrontの設定

CloudFrontコンソールから「Create Distribution」をクリックします。

f:id:tatsuyashi:20180731012726p:plain

静的コンテンツの配信なので、Webの「Get Started」をクリックします。

f:id:tatsuyashi:20180731012910p:plain

Origin Settingsを入力します。Origin Domain NameはS3のバケット名を選択します。

f:id:tatsuyashi:20180731013226p:plain

Default Cache Behavior Settingsを入力します。

f:id:tatsuyashi:20180731013951p:plain

f:id:tatsuyashi:20180731014104p:plain

  • Viewer Protocol Policyを「Redirect HTTP to HTTPS
  • Compress Object Automaticallyを「Yes」

上記以外はデフォルトのままにしておきます。

Distribution Settingsは全てデフォルトのままです。

そのまま進めていくと、Distributionの作成が完了します。

f:id:tatsuyashi:20180731014332p:plain

処理中ですね....

10分ほど待つと「Deployed」になりました。

f:id:tatsuyashi:20180731015441p:plain

コンテンツの確認

以下のURLにアクセスします。

https://{DomainName}.cloudfront.net/sample.json

f:id:tatsuyashi:20180731020336p:plain

無事JSONが表示されましたね。

まとめ

以上で静的コンテンツを配信することができました。
S3への直接アクセスを抑えてキャッシュを有効にするためにCloudFrontを利用するというのは鉄板のやり方ですが、今回初めて自分で全て行ってみました。

これと言って詰まる箇所もなく進められたかなと思います。

実はこの仕組みを使ったある企みがあるのですが、またそれは後日公開します。