AWS SAMの チュートリアル: Hello World アプリケーションに独自ドメインを設定してみる
今回やること
先日、AWS SAMのチュートリアル、Hello World アプリケーションをAWS上にデプロイしてみました。非常に簡単に REST API 構築することが出来ました。
今回は、これに対して独自のドメインを設定していきたいと思います。
環境
OS
- エディション Windows 10 Pro
- バージョン 21H2
- OS ビルド 19044.2965
ソフトウェア
- Python 3.9.13
- aws-cli/2.11.25 Python/3.11.3 Windows/10 exe/AMD64 prompt/off
- SAM CLI, version 1.85.0
- PSVersion 5.1.19041.2673
- git version 2.40.0.windows.1
ResourcesにAPI Gatewayのリソースを記載する
独自ドメインを設定するためには、AWS::Serverless::Apiを利用して設定していく必要があるようなので、リファレンスのAWS::Serverless::APIを参考に設定を加えました。
Serverless::Apiを作成し、Lambdaで利用するように指定
ファイル上部で作成したApiGatewayApiをApiGatewayApi:Ref:に記載することで、Lambdaが上部のServerless::Apiのリソースを利用してくれるようになります。
API Gatewayの不要なステージを削除する
API Gatewayに、「Prod」と「Stage」の2つのステージが出来ていました。1つのみで良いため、Stageを削除します。下記の記事を参考にし、OpenApiVersionを設定に書き加え、「Stage」を削除しました。
あとは、パスなどの設定を自分好みに変えて完了です。ビルド&デプロイを行い、上手く動作していることを確認して、gitへコミット&プッシュを行います。
PS E:\prog\sam-hello-world> curl https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/v1/hello
StatusCode : 200
StatusDescription : OK
Content : {"message": "hello world"}
RawContent : HTTP/1.1 200 OK
独自ドメインを手動で設定してみる
このまま、template.yamlにパラメータを書き足してもいいのですが、実際に画面上で操作をしないとイメージが付きにくいと思い、一度、画面上から独自ドメインを設定していきます。内容は、下記ページを参考にしました。
カスタムドメイン名のページを開く
まずは、カスタムドメイン名のページに遷移し、作成を押下します。
各種設定を行う
ドメイン名
利用したいドメイン名を指定します。ここでは、自分の所持しているドメイン、サブドメインを指定します。
エンドポイント設定
エッジ最適化を選択します
ACM 証明書
作成していないため新たに作成します。下部にあるリンク「新しい ACM 証明書を作成 」から遷移します。
ACM 証明書の発行、設定
ACM 証明書の発行
指定したドメイン名をここでも指定します。
その後、名前解決をしてもらうために、Route53にCNAMEレコードを作成します。しばらく経てばステータスが発行済みになる想定です。
API Gatewayで設定
先ほど作成した ACM 証明書を指定して、ドメイン名の作成を押下します。
ドメイン名の設定が完了しました。
APIマッピングの設定
どのAPIと紐づけるかの設定を行います。APIマッピングの設定を押下します。
ここでは、作成したAPIとステージを画像の通りに設定します。
API Gateway ドメイン名までルーティング
route53を用いて、API Gateway ドメイン名までルーティングします。route53まで移動して、レコードの新規作成を実施してください。
動作確認
カスタムドメイン名を指定してcurlを実行。正常に値が返却されることを確認します。
手動での設定方法はこれにて完了です。
PS E:\prog\sam-hello-world> curl https://xxxtest.xxxxxxx.com/v1/hello/
StatusCode : 200
StatusDescription : OK
Content : {"message": "hello world"}
RawContent : HTTP/1.1 200 OK
これをSAMから設定していきます。
カスタムドメイン名、API Gateway ドメイン名までルーティングのために追加したAレコードは削除します。ACM 証明書はそのままにします。
SAMを用いてカスタムドメイン名を設定する
ここまで手動で実施した内容を、template.xmlに記載していきます。設定方法は、AWS::Serverless::Api、および、DomainConfigurationを参照します。
DomainName の例に記載されている内容を設定してしまえばよいです。
YAML
Domain: DomainName: www.example.com CertificateArn: arn-example EndpointConfiguration: EDGE Route53: HostedZoneId: Z1PA6795UKMFR9 BasePath: - foo - bar
実際に設定します。手動設定を行ったので、大体何がどこに対応しているかがわかるかと思います。ビルド&デプロイを実施します。
念のためにビルド前にcurlを実行し、失敗することを確認します。
PS E:\prog\sam-hello-world> curl https://xxxtest.xxxxxxx.com/v1/hello/
curl : リモート名を解決できませんでした。: 'xxxtest.xxxxxxx.com'
デプロイ後の再実施では上手くいくことが確認できました。
PS E:\prog\sam-hello-world> curl https://xxxtest.xxxxxxx.com/v1/hello/
StatusCode : 200
StatusDescription : OK
Content : {"message": "hello world"}
RawContent : HTTP/1.1 200 OK
最後に
SAMを用いて、API Gatewayのカスタムドメイン化を行いました。手動でかなりポチポチ設定をしていたのですが、SAMを使えば少ない記述量ですくに作成できるのが非常に良いです。ただ、ドキュメントのどこを探せば情報が載っているのかわからず、なれるまで時間がかかりそうです。すこしずつ覚えていきます。
Discussion