はじめに
あくまで個人的メモです。特に記事を1つ作るほどでもないけど、覚えときたいことをちょこちょこメモする用です。
役立つ資料
ハンズオン
サーバーレスをサクッと作る
Lambda、API Gateway、DynamoDBを勉強したい人におすすめ。
Cloud9とVSCodeで開発環境を構築する
EC2インスタンスの選び方
非本番環境にはT3
がおすすめ
汎用のインスタンスファミリーには、M系とT系がある。M系にはM5
、M4
があり、T系にはT3
、T2
がある。M系はCPUやメモリ、ネットワークをバランスよく提供するものなので、一般的な本番環境用であればM系が良さそう。T系はバースト機能がついている。スパイクが想定されるような本番環境であればT系が良さそう。
開発環境やステージング環境には、M系よりもT系がいい。もちろん開発環境やステージング環境ではバースト機能は必要ないことが多いがM系よりもT系の方が単純に安いので。
またT2
よりも、T3
の方が安く、パフォーマンスも高いので、特に理由がなければT3
を選ぶべし。
RDSとDynamoDBはどっちを使うべき?
DynamoDBは、RDSに比べて一貫性が低い代わりに、スケーラビリティが高い。ただ上記の記事で以下のように言及されているように、よほどトラフィックの多いサービス以外、あまり関係ないかと。なのでより扱いやすいフルマネージドのDynamoDBの方がいいのではと個人的には思う。
しかし、極端にハイトラフィックへの対応や一貫性の確保が必要となるプロジェクトは、それなりにエッジケースではないかとも思っています。多くのシステムはRDSでもDynamoDBでも実装可能でしょう。
RDSを使用するにはVPCを構築する必要があるのと冗長化、容量などを考える必要があるが、DynamoDBはサーバーレスなのでVPCは必要ないし、冗長化や容量を気にしなくていい。ただ、DynamoDBはRDSに比べて検索がしづらいというデメリットがある。RDSとDynamoDBのそれぞれのメリットを活かすためにハイブリッド構成にするのもあり。
ELBの種類
AmplifyとCloudFront+S3の違い
Lambda Function URLs vs. API Gateway
個人的には、Lambdaから別のLambdaを呼ぶときに、呼ばれる方のLambdaにLambda Function URLsを使うのがいいかなと思った。ユーザーによって直接叩かれるAPI(Lambda)に関してはAPI Gatewayを使うのがいいかと。
Lambdaのレイヤー
レイヤーをLambda関数から使用するのに手こずったのでメモ。Zip化したPythonパッケージをレイヤーにアップロードすると思うが、Zip化するディレクトリの構造はpython/<パッケージ>
にする必要がある。つまり、例えばrequests
というパッケージをレイヤーに加えたいときは、以下のようにディレクトリを作った上でZip化する必要がある。
% mkdir python
% cd python
% python3 -m pip install requests -t .
このようにしてレイヤーを作り、Lambda関数にそのレイヤーを紐づけたら、以下のように普通にLambda関数内ではパッケージをインポートできる。
import requests