はじめに
-
動かして学ぶ!Pythonサーバレスアプリ開発入門 著:本田崇智 を読み
Python+サーバレスを学習する中で
作成したアプリケーションをAWS環境にデプロイしてくれるzappa
というツールが
どのようにApiGatewayとLambdaを構築したのか気になり、確認した際のメモ
デプロイするアプリケーション構成
- 参考書のchapter9が完了した時点での構成をざっくり抜粋して書くと、以下のようになる
application
├sever.py # アプリ起動プログラム
├zappa_settings.json # zappa設定ファイル
└ flask_blog
├__init__.py # 初期処理プログラム
├config.py # アプリケーション設定プログラム
├models/ # モデルプログラム群
├static
│ └style.css # CSS定義ファイル
├templates/ # HTMLファイル群
└ views # ビュープログラム群
zappaでデプロイしたリソース確認
- 以下コマンドでデプロイ
$ zappa deploy dev
- ApiGatewayの確認

- Lambdaの確認

でてきた疑問点
- HTMLファイルの実体どこにあるんだ?
- よく目にするのは静的ファイルはs3に格納して表示するパターン
- lambdaのソースコードどうなっている?
-
以下のようにコードのファイルサイズが大きすぎると表示されて、
コンソールからはファイルが確認できないthe deployment package of your Lambda function "application-dev" is too large to enable inline code editing. However, you can still invoke your function.
-
調べた内容
AWS Webアプリのサーバレスアーキテクチャ例
- そもそもサーバレスでどういったアーキテクチャが考えられるのか調べてみたところ
やっぱり静的コンテンツをS3(またはs3を内包するamplify)に格納しておいて
動的コンテンツはApigatewayとlambdaを使うといったアーキテクチャは公開されていた - s3 + ApiGateway + Lambda

- CloudFrontを使って設計するパターンもあるよう

-
参考:
-
ここまで調べた段階で、zappaが作成するs3を確認してみたが何も入ってなかった、、、
どうやら作成されたs3は一時的に使用しているだけのようで
調べてきたアーキテクチャとは違う模様 -
上記から結論づけるにHTMLもlambdaから返却している
->Flaskで作成して動的にHTMLを返すアプリケーションなので当たり前か -
後述するがlambdaのソースコードを確認しても
作成したアプリケーションのコードが全部含まれていた
Lambdaのソースコード取得方法
- Lambdaのソースコードは調べたところ以下コマンド取得できた
(コンソールからアクション->関数のエクスポート
でも取得できるみたい)
$ aws lambda get-function --function-name [function名] --query 'Code.Location' | xargs curl -o [出力ファイル名指定(例 xxx.zip)]
取得した結果を確認したところ
デプロイするアプリケーション構成に記載したファイルもまるっと含まれていた
終わりに
- いつかサーバレスアプリケーションを作ってみたいなと思っていたので
Pythonの学習に加えてサーバレスのアーキテクチャパターンを調査できたのはよかった - SPAとMPAの違いもろくに分かっていなかったので
Webアプリ開発の理解が乏しすぎることを再認識しました、、、