サーバーレスの開発で地味に面倒なのがCORSの問題。api gatewayからちゃんとヘッダーにcookieが返ってきているのにブラウザに反映されてなくて、AWS環境にデプロイしたら問題ない。なんていうこともしばしば発生します。
原因はだいたい、このCORSのせい。せっかくのサーバーレス開発、スムーズに開発したいので、ローカル環境にssl証明書を適用する方法のメモです。
使用するのはmkcertです。
% brew install mkcert
ワイルドカードもいけるみたいですが、awsのデブロイは環境別にドメインを設定できたりするので特に設定しません。
以下のコマンドを実行し、証明書をカレントディレクトリに生成します。
肝心なドメイン名ですがlocalhost
以外の例えばtest.com
などにした場合、webpack-dev-server
での設定方法が不明でエラーに遭遇したので、まぁ、開発環境だしということで大人しくlocalhost
しました。
% mkcert localhost
webpackで構築している場合は、環境別にすでに設定してあると思うので、そのつもりで進めます。
わからない場合は、こちらwebpackで静的サイトのレイアウトをつくる
まず、ローカルの開発環境設定が書かれているwebpack.development.jsに証明書の設定を以下のようにします。
devServer: {
host: 'localhost',
port: 8080,
https: {
https: true,
key: fs.readFileSync('./localhost-key.pem'),
cert: fs.readFileSync('./localhost.pem'),
ca: fs.readFileSync('/Users/ユーザー名/Library/Application Support/mkcert/rootCA.pem'),
}
}
これで終わりです。あとはhttps://localhost
にアクセスすればssl証明されたやつになっているはずです。
サーバーレスのローカル環境開発はまだ発展途上です。ローカル開発環境をhttps化
することはわりかし簡単ですけど、これが役にたつかと言うをあまり役に立たない。
なぜなら、だいたいのサーバーレスのアプリの構成は静的サイトをs3にセットして、そこからapi gatewayを使うみたいなのが多いので、そもそもCORSの問題が本番の環境では発生しない。
本番ではcrosの問題が発生しないのにわざわざローカルでcros対応でコードを書くのはムダ。
いろいろネットの情報をみたり、awsの中の人にも聞いたりしたが今現在では、開発者にawsの権限を最小にしたアカウントを発行して、もうほぼ本番に近い形で開発してもらうのが今のところのベストな方法。
開発者は作ったコードをPOSTMANなりを使ってローカルでレスポンスを確認して、確認したら、実際にデプロイして本番環境でも確認するみたいな作業を繰り返す感じ。
実際、サーバーレスで開発してますが、初期はrailsなどのフレームワークを使うより圧倒的に開発速度は遅いですが、慣れてしまえばサーバーレスの方が開発は早くなるし、何よりその後のサーバー管理をしなくていいのは魅力的です。
まぁ、こうやってawsから抜けられなくなるんでしょうね。。。