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でしょう。



2021-05-23

Visual Studio2019 でBlazorを利用しようとしたらパッケージが見つからない

Blazorというのが面白そうなので、遊んでみようかと思ったら、デフォルトのプロジェクトでいきなり

  • パッケージ xxxxxxxxが見つかりません。

というエラーに遭遇したのでいろいろ調べて動くようになったメモ書きです。

.NET5.0にしたほうがいいかも
もしかしたら、直接は関係なかったかもしれませんが、

 Blazor 3.2 WebAssembly プロジェクトは、.NET Standard 2.1 (<TargetFramework>netstandard2.1</TargetFramework>) をターゲットにするようコンパイルされていました。 ASP.NET Core 5.0 では、Blazor Server と Blazor WebAssembly プロジェクトの両方で .NET 5.0(<TargetFramework>net5.0</TargetFramework>) がターゲットとされます
的な話が、Microsoftのサイトに書いてました。まあ、流石に NET Standard 2.1 はもう古い気もするので、.NET5でプロジェクトを作成したほうがいいですね。PCに.NET5のSDKが入っていれば作成時に指定できます。指定できなければ入ってないのでダウンロードしてインストールしてください。

Nugetのパッケージソースを指定する
これが根本的な原因かな。。Blazorのために久しぶりにVisual Studiioをいれたんですが、エラー的にパッケージが見つけられない→Nugetがなんとかしてくれるはずだよな。。とか思ってたんですが、まさにNugetがダメでした。参照するパッケージソースが空になってるんですよね。。。なんでやねん!というわけで、正しいURLとして
  • nuget.org
    https://api.nuget.org/v3/index.json

を指定。これでBuild時に探しにいってくれました。

 参考