やりたいこと
- 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 のドメインを指定する
手順
- Certificate Manager で CloudFront に設定する SSL 証明書を取得
- 事前にドメインの管理者アドレスでメール受信できるようにしておくこと(下記記事が詳しいです)
- AWS Certificate Manager (ACM)で申請前に事前に確認しておくべき大切なこと
- 1.で取得した証明書使って CloudFront の Distribution 作成
- 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 時点)