AWS
CloudFront
lambda
APIGateway

Lambda + API Gateway を任意のドメイン(SSL)で使用する方法を調べてみた

More than 3 years have passed since last update.


やりたいこと


  • example.execute-api.ap-northeast-1.amazonaws.com っていう URL の Lambda + API Gateway の API を

  • example.com または api.example.com っていうドメインで使用したい

  • SSL で。

下記 2通りの方法がありそうです。


1. CloudFront の Origin に API Gateway のドメインを指定する


手順



  1. Certificate Manager で CloudFront に設定する SSL 証明書を取得



  2. 1.で取得した証明書使って CloudFront の Distribution 作成

  3. Origin に example.execute-api.ap-northeast-1.amazonaws.com 指定


気になる点


  • 後述の API mapping 使えないので、ドメイン以降の URL を好きにできない


    • しかし API Gateway の公開用エイリアスを api っていう名前にしとけば、https://example.com/api/hello とかで公開用 API だけを CloudFront に設定できそう



  • 二重に CloudFront 使ってる気がする


    • そもそも API Gateway が CloudFront を使ってそうなので、クラウド-クラウドやんっていう




所感


  • SSL 証明書は勝手に更新してくれてしかも無料なんて最高


2. API Gateway のカスタムドメインを使用する


手順

公式ドキュメント参照ください。簡単。


気になる点


  • まだ Certificate Manager が使用できない

  • 証明書は自前で用意する必要がある

  • そのSSL 証明書が今のところ更新不能らしい(致命的)


    • 証明書を更新するには証明書を作りなおしてカスタムドメインの設定をやり直す必要があるのでダウンタイムが発生する

    • CLI でも無理そう(クライアント側証明書は更新できそう?) - CLI ドキュメント

    • letsencrypt の SSL 使って証明書自動更新とか考えてたけど諦めた



  • SSL を使用する場合の料金


    • SNI だから多分安い




いいところ


  • API mapping が使用できる

例えば、hello っていう API があって下記のようにエイリアスが設定されているとして、


  • /dev/hello (開発用エイリアス)

  • /prod/hello (本番用エイリアス)

下記のようにマッピングすることができます。

https://api.example.com/hello -> /prod/hello


所感

公式ドキュメントにはこっちが記載されてるので使っちゃいそうですが、

SSL 証明書更新できないのであればまだ止めといた方がよさそうです。(2016/3/4 時点)


参考URL