(lambda@edge編)福岡拠点の野田です。前回、S3を使った静的コンテンツ配信を実現しましたが、ちょっとカッコ悪い点がありました。参照するようにできます。Objectの設定が効きません。サブディレクトリ配下で/news/とアクセスしたとき、/news/index.htmlを参照するためにはlambda@edgeを使う必要があります。/で終わるuriの場合に/index.htmlを参照する設定について、今回は以下の流れで設定を行います。lambdaを追加CloudFrontで使えるようにIAMを修正lambdaにトリガーを追加し、CloudFrontと関連付けlambdaを追加リージョンus-east-1のlambda画面から関数を追加します。ほかのリージョンではCloudFrontへのトリガーを作成できないため、正しいリージョンが選択されているか確認してください。https://console.aws.amazon.com/lambda/home?region=us-east-1lambdaは1から作る形で進めます。関数詳細ページが表示されるので、関数コードに以下を追加します。request);};画面右上の「保存」を押下してコードを保存します。CloudFrontで使えるようにIAMを修正そのままでは使うことができないため、関数詳細ページ「アクセス権限」のタブを選択します。」のリンクをクリックします。ロールの詳細ページから「信頼関係」のタブをクリックします。「信頼関係の編集」ボタンを押下して、以下のようにedgelambdaの設定を追加します。"sts:AssumeRole"}]}これにより信頼されたエンティティにedgelambdaが追加されます。edgelambda.amazonaws.com続いて「アクセス権限」のタブに再度戻ります。+インラインポリシーの追加から以下のポリシーを追加します。UpdateDistribution(対象リソースは、展開するCloudFrontのARNを指定)ここまでやってようやくlambda@edgeが使えるようになります。lambdaにトリガーを追加し、CloudFrontと関連付け仕上げにlambdaの関数詳細画面に戻ります。画面上の「アクション」から新しいバージョンを発行します。コメントは必要あれば適宜入力してください。そののちにデザイナーから「トリガー」を追加します。トリガーの種類は、CloudFrontを選択します。ここでCloudFrontが選択できない場合はlambdaのリージョンが間違っていますので、最初からやり直してください。設定はデフォルトのままで以下のチェックボックスにチェックを入れます。リージョン間でレプリケートされることに同意します。リージョン間でレプリケートされることに同意します。追加ボタンを押下するとCloudFrontへの更新が入ります。Distributionの更新が終わるまでしばし待つと、晴れてサブディレクトリのリダイレクト処理を利用することができるようになります。まとめlambdaというと単機能のAPIや軽量サーバーとして使うイメージが強いですが、実はいろいろなところに組み込めます。BASIC認証など多岐にわたって処理を組み込むことができます。静的コンテンツに対してちょっとした動的処理を行いたいな、というときはlambda@edgeの出番です。ご活用いただければと思います。面倒なところもありますが、ひと手間かけるといろいろなことができるのがAWSの良いところ。エンジニアとしていろいろHackしていければと思います。53を使って静的コンテンツ配信方式に切り替えてみました。手順の大きな流れは以下のようになります。既存サイトを取得します。東京リージョンにて新規バケットを作成して、上記取得したファイルを配置します。S3における設定ですが、アクセス権限の設定を行います。静的コンテンツとして公開するため、以下のバケットポリシーのブロックをオフにすることで外部からのアクセスを行えるようにします。新規のパブリックバケットポリシーまたはアクセスポイントポリシーを介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックするオフ任意のパブリックバケットポリシーまたはアクセスポイントポリシーを介したバケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックするオフバケットポリシーは、以下のようなCloudFrontからの接続を許可する設定を行いますが、CloudFront側から設定ができるため、ひとまずスキップで大丈夫です。DistributionでCDNを新規作成します。Namesは割り当てるドメイン名を改行区切りで入力。証明書については、独自ドメインで割り当てる場合、ACMに登録したものを選択。GeneralタブでEditボタンを押下して、以下を設定します。Restrictionsタブを選択して、GeoRestrictionをEditします。今回は、日本のみを対象とします。全世界を対象とするとコストと直結します。1日1000円以上かかってもいい!どんな攻撃もどんとこい!という方以外は、対象を絞ったほうが良いと思います(私もこれで当初1日放置して1000円かかってしまい冷や汗、急遽制限を追加しました)。Route53でCloudFrontへ振り分け仕上げにRoute53からCloudFrontへ振り分けします。A(IPv4アドレス)およびAAAA(IPv6アドレス)のエイリアス指定でCloudFrontにつなげることができます。まとめCloudは設定をミスると高額な請求が発生してしまうリスクはありますが、うまく使えば個人で使っても安く運用することができます。最近では予算設定や請求が高額になりそうなときにアラートも出せる機能もありますので、そうしたものを組み合わせて、安全に運用すると良いと思います。先月からの運用の感じだとアクセス数次第なところがありますが、100円~300円/月ぐらいで運用できそうな感じでした。初心者にはおすすめはしませんが、興味ある方は是非チャレンジしてみてください。