Loading [MathJax]/extensions/tex2jax.js

2021-06-10

Zappaを使ってLambdaにFlaskアプリを導入した際のURL問題の解決法

 Zappaを使うと、AWS Lambda上にてウェブアプリをお手軽にDeployさせることができます。おちラボで動かしているのはFlaskのアプリなんですが、1つだけ問題が。。。。

ディレクトリ階層に余分なprefixがつく問題

ZappaでアップロードしたURLには、/dev/みたいな余分なURL(Stageという概念ですね)が付いちゃいます。これはAPI Gatewayの仕様らしく、回避不能のようです。api的な使い方だったら別にそれを前提にしておけばいいんですが、アプリとしてDeployする場合、アプリ内で自身の別URLを呼ぶ場合に都合が悪くなります。例えば、

  • (ローカル環境)/update
  • (Lambda環境) /dev/update
というふうに、”/dev”みたいなstage表記がもれなく付いてきます。静的にURLを記述しちゃうとローカルで動くけどLambdaにデプロイするとURLがNot foundでエラーになったりするわけです。

解決策:動的にURLを定義する
まあ、当たり前の解決策なんですが、実行環境に合わせて動的に定義するしかないです。例えば以下のようにosの環境を調べておいてからstageを渡すという方法ですね。下記の場合は、ローカルがWindows環境を想定していますので、まあLambdaのOSがWindowsなわけがないので(Amazon Linuxのはず)、これでOKでしょう。

<a href={{stage}}/start>次へ</a></td>
view raw sample.html hosted with ❤ by GitHub
#AWSでも動くようにするためのおまじない)
stage=""
if os.name == "nt":
stage=""
else:
stage="/dev"
#ステージの情報をhtmlに渡しておく
return render_template("sample.html",stage=stage)
view raw setBaseURL.py hosted with ❤ by GitHub


0 件のコメント:

コメントを投稿