2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

API Gatewayのカスタムドメイン設定で躓いたお話

Last updated at Posted at 2022-03-11

はじめに

みなさま,はじめまして.
株式会社オプティマインドにて,GISエンジニアをしている@tkmbnです.
Qiitaへの2回目の投稿です.

概要

SAMを用いてデプロイしたアプリケーションの,AWS API Gatewayカスタムドメインにおけるマッピングの設定方法についてまとめました.

なぜ書いたか

「開発環境でデプロイもできたし,次は本番や!」と思っていた矢先,CloudFormation上でエラー...
どうやら,マッピングの設定でエラーを吐いていた模様...
公式ドキュメントなどをさらってみましたが,解決方法が見つからず,試行錯誤でトライしていた際に無事原因がわかったので,備忘録として書き記します.

本題

現状の環境

  • SAM テンプレートの内容
    • API Gateway
      • カスタムドメインは,別途設定済み
        • エンドポイントタイプ:エッジ最適化
        • 最小TLS:1.0
      • 適用しようとしたマッピングは,xxxx/v1 というように,階層をもたせようとした
    • Lambda
      • 今回の話では,中身は関係ないので,割愛します.

何が問題だったのか

試行錯誤1 エンドポイントタイプの設定

カスタムドメインには,エンドポイントタイプの設定が存在し,それぞれ以下のような特徴があります.(公式ドキュメントより抜粋)

  • エッジ最適化
    - 地理的に分散されたクライアントに最適です。API リクエストは、最寄りの CloudFront POP (Point Of Presence) にルーティングされます。これは、API Gateway REST API のデフォルトのエンドポイントタイプです。
  • リージョン
    - 同じリージョンのクライアントを対象としています。EC2 インスタンスで実行されているクライアントが同じリージョンの API を呼び出す場合、または API が要求の高い少数のクライアントへのサービスを目的としている場合、リージョン別 API は接続のオーバーヘッドを減らします。
  • プライベート
    - Amazon Virtual Private Cloud (VPC) からしかアクセスできない API エンドポイントです。

当初,エッジ最適化として,エンドポイントタイプを設定しておりました.
API GatewayのマッピングをSAMテンプレート内で設定を行う際,CloudFormationのAWS::ApiGateway::BaseMappingAWS::ApiGatewayV2::ApiMapping のどちらかを使用することになります.
エッジ最適化の場合,AWS::ApiGateway::BaseMappingを使うしかないようですが,マッピングのパスに/を入れることが不可能で,適用時にエラーを吐きます.AWS::ApiGatewayV2::ApiMappingだと,可能な感じ.

Screen Shot 2022-02-25 at 11.08.10.png

API Gateway V1 doesn't support the slash character (/) in base path mappings. To create a multi-level base path mapping, use API Gateway V2. (Service: AmazonApiGateway; Status Code: 400; Error Code: BadRequestException; Request ID: xxxxxx-xxxx-xxxxxxxxxxxxxx; Proxy null)

ということで,
AWS::ApiGatewayV2::ApiMappingを利用するため,エンドポイントタイプをリージョンに変更しました.

試行錯誤2 TLSの設定

エンドポイントタイプもリージョンにし,リソースタイプもAWS::ApiGatewayV2::ApiMappingに変更し,
満を持して,再デプロイ!と思いきや,再びエラー・・・

Screen Shot 2022-02-25 at 11.09.35.png

Invalid character '/' detected in the ApiMapping key. If you are trying to create a multi-level ApiMapping, update your custom domain name to security policy TLS 1.2. (Service: AmazonApiGatewayV2; Status Code: 400; Error Code: BadRequestException; Request ID: xxxxxx-xxxx-xxxxxxxxxxxxxx; Proxy null)

当初デプロイしたときは,このようなエラーが出てくませんでした(謎...)が,
別環境ですべての設定を合わせてトライしたところ,このようなエラーが出てきました.

最小TLSが1.0の場合も,どうやら/をマッピングに入れることができないみたいです.

1.2に変更したところ無事にデプロイ,マッピング適用することができました…!

まとめ

カスタムドメインの設定及びマッピングで躓いた点をまとめてみました.
カスタムドメインで,階層を持ったマッピングを行う場合は,

  • エンドポイントタイプ → リージョン
  • 最小TLS → 1.2
  • リソースタイプ → AWS::ApiGatewayV2::ApiMapping
    とする.

困っている方の手助けになれば,幸いです.
最後まで読んでいただきありがとうございした.
なにか疑問点,間違っている点,等ございましたら,コメントお願いいたします.

最後に宣伝

株式会社オプティマインドでは、一緒に働く仲間を大募集中です。
カジュアル面談も大歓迎ですので、気軽にお声がけください。

【エンジニア領域の募集職種】
ソフトウェアエンジニア
QAエンジニア
Androidアプリエンジニア
組合せ最適化アルゴリズムエンジニア
経路探索アルゴリズムエンジニア
バックエンドエンジニア
インフラエンジニア
UXUIデザイナー

【ビジネス領域の募集職種】
セールスコンサルタント

『オプティマインドってどんな会社?』については、こちらから
Wantedlyでもこちらで募集中

参考文献

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?