※ 当ページには【広告/PR】を含む場合があります。
2020/04/21
2024/10/06
【AWS】API GatewayのAPIエンドポイントをカスタムドメイン名を付けてRoute53で公開する基本的な手順
[AWS] 徹底図解!お名前.comで取得したDNSをAWS Route53/Cloudfrontで管理するまでの手順
これまで個人的な趣向で、AWSのLambdaでRESTfulなAPIの構築しか念頭に入れていなかったので、S3バケットからテキストから画像などありとあらゆるリソースをAPIからGETでリソースをリクエストして、拡張子ごとに適切に中身を処理して…かなり面倒です。特にリソースが画像の場合は、base64形式でリレーしてあげねばならず、そんな無理にAPIに画像を引張ってきてもらわなくても、CloudFrontから直にS3を連れてきて貰えばいいよね?というのが今回のモチベーションです。ただ今回の記事のネタは、ネットで“CloudFront S3”で検索していただけたら、設定方法がたくさんヒットします。割と使い古されているネタですので、あくまで個人の備忘録&復習にどうぞ。
【AWS独習術】AWSをじっくり独学したい人のためのオススメ書籍&教材特集
図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書 簡単なテスト環境準備
とりあえず適当な名前でS3バケットを作成し、jpeg画像(0.jpg)を突っ込んでおきます。ファイル構造…といえるほど大層なものではないですが、バケットのルートからは以下のように配置しておきます。
【AWS独習術】AWSをじっくり独学したい人のためのオススメ書籍&教材特集
図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書 CloudFront 側の設定
今回の目標は、ブラウザ等でhttp://xxxxxxxxxxxx.cloudfront.net/article1/0.jpg
を表示できるようにする事です。それでは早速、CloudFrontのコンソールに切り替えて、適当なディストリビューションを新規作成してみます。まずはCloudFrontで新規ディストリビューションを作成します。次に、サラのCloudFrontディストリビューションに、前の工程で作ったS3バケットを指定したアクセス制限をかける設定を行います。ただし、2024年現在で、この記事の当初作成したときに説明していた「OAI(Origin Access Identity)」によるアクセス制限が非推奨となり、後継の技術である「OAC(Origin Access Control)」の利用を推奨になっています。とりあえずOAI
もまだ利用できなくなっているわけではないので、OAC
と合わせて以降でその設定方法を説明します。(旧式のため非推奨)OAIによるアクセス制限の設定
せっかくですので、OAIによるS3バケットのアクセス制限の手順を記録として残しておきます。実用だけをチェックしたい方は、この節の内容をスキップして、次の「OACによるアクセス制限の設定手順」に進んでください。まず、Origin Path
には、今回アクセスしたい、S3バケットのオリジンを指定します。次に、以下のように選択肢を設定します。なお、'Grant Read Permission on Bucket'をNoにして、あとでS3のバケットポリシーを手動で設定しても良いのですが面倒な人間はYesにしとくことで、下の写真のように自動で更新してもらえます。自前のバケットポリシー更新前:CloudFrontの自動書き換え適用後:とりあえず、他の設定項目も多いですが、他はそのまま既定値にしといて、Createボタンをおしてこのディストリビューションを作成します。作成から体感15分ほどで、'Status'が'Deployed'に変わるまで待ちます。デプロイ後、サイドメニューから'Origin Access Identity'を覗くと、以下のように先ほど作成したディストリビューションに、新しいオリジンアクセスアイデンティティが発行されていれば成功です。では早速、このディストリビューションのDomain Nameを、ブラウザのアドレスにコピペしてみましょう。すると、CloudFrontのドメインからリソース画像にアクセスできます。OACによるアクセス制限の設定
※この節の内容は2024年10月に追加したものです。それではOACによるアクセス制限手順のほうも説明していきます。まずはCFディストリビューションから、[オリジン] > [オリジンを作成]
をクリックします。設定画面に移り、まず[Origin domain]
の項目で制限対象となるS3バケットを選択しましょう。次の設定項目で、[Origin access control settings (recommended)]
をチェックし、[Create new OAC]
ボタンを押すと、OACが発行されます。このOACからバケットポリシーを作るのですが、直下にある[ポリシーをコピー]
ボタンをクリックすると、以下のような自動生成されたポリシーがクリップボードにコピーされます。あとは、[S3バケットアクセス許可に移動]
のリンクを踏んで、S3のダッシュボード画面に移り、バケットポリシーをコピーした内容に変更したらOKです。先程の内容と同様に、ディストリビューションのDomain Nameを、ブラウザのアドレスにコピペしてみましょう。すると、CloudFrontのドメインからリソース画像にアクセスできていれば設定完了です。
【AWS独習術】AWSをじっくり独学したい人のためのオススメ書籍&教材特集
図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書 HTTPSでアクセスする
上の設定まででCloudFrontから十分アクセス可能ですが、できればSSL対応して使いたいです。そんな時に、デストリビューションのBehavior タグを以下のように編集してみます。そして再デプロイ後に、アクセスを試みると、キチンとhttpsでアクセスできていることがわかります。
【AWS独習術】AWSをじっくり独学したい人のためのオススメ書籍&教材特集
図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書 まとめ
以上、CloudFrontとS3からファイルを取得する基本を簡単にまとめてみました。おそらくAWS初学者が学習の最初に構築してみる代表的なマイクロサービスパターンの一つですので、ダッシュボードでの設定方法を確実に身につけましょう。参考
オリジンアクセスアイデンティティを使用して Amazon S3 コンテンツへのアクセスを制限する特定バケットに特定ディストリビューションのみからアクセスできるよう設定するCDP:Cache Distributionパターン