サーバーレスアンチパターン今昔物語 第2夜 です。 第1夜はメモらなかったのが悔やまれる。
サーバーレスアンチパターン今昔物語 第2夜 - connpass
https://www.youtube.com/watch?v=ENs82QzJSsg
いきなり利用規約違反で再配信からスタート。
説明ブログ
今回の内容のブログ
以下、自分メモ。
Lambda 特性の前提について
コールドスタートをいかに短くするかが基本でそのお話のメモ。
定期実行で Lambda を起こすのは、昔からよくやるテクニック。
しかし、同時に定期実行した数だけしかウォームスタートされない のでおすすめしない。
(5分1回なら、1個のコンテナしかウォームスタートしないそうです。知らなかった。)
バースト制限はデフォルト 1,000 。
理由があれば緩和申請できるけど、最初は 1,000 しか起動しない。
1分毎に 500 コンテナずつ起動されてく。
東京リージョンは、1,000 だけど 2,000 だったり 500 だったりリージョンごとに違う。
Provisioned Concurrency について
リージョンごとに設定。
リージョンのデフォルトの起動数上限 -100 まで申請可能。
バースト特性と同じ用に、1分毎に増えていくので注意。
つまり、東京リージョンであれば一度に1,000をコールドスタートして初期化した後、1分ごとに500ずつ設定された値までプロビジョニングされていく感じ
ウォームスタートになるため、コールドスタート分のレイテンシ増を防げるという1点だけが利点。
ゆえに、コールドスタートが遅い場合にも有効。
ただし、お金がもちろんかかります。
まとめ
コールドスタートをお金で解決する手段。
同期処理を見直したりして、コールドスタートを早くするチューニングが基本。
Q&A
気になる回答だけメモ。
https://app.sli.do/event/vanvzgkx/live/questions
Lambdaからパスワード情報等を取得するベストプラクティスはどれになりますでしょうか?私はSSM ParameterStoreから取得し、オンメモリにキャッシュしてますが、パスワード更新時にどうlambdaに伝えようとか、キャッシュしない方が良いのかとか悩んでます、、
キャッシュするのは良い。シークレットマネージャーとかはライブラリが AWS から提供されているので利用スべき。更新時はキャッシュされた値でエラーになるだろうから、リトライでキャッシュ更新すればいい。
RDS Proxyの登場でLambdaからRDSへWriteの接続はアンチパターンじゃなくなったかと思うのですが、Readについては既存のままだと思うので結局アンチパターンになりうるのかなと思いましたが、その辺りのご意見伺いたいです。
Read は Write よりスケールアウトしやすいので、アンチパターンになりにくく扱いやすい。
Lambdaもローンチから長いこと経っているのでハードウェアも何世代かあるのではないかと思っているのですが、同じメモリ設定でもどのハードウェアで立ち上がるかによって、CPUパワーやネットワーク速度などに違いが出たりするんでしょうか?あるいは当たり外れが無いように調整されているんでしょうか?
答えれないので自信の目で確かめてください。Lambda Function から CPU Info 覗いたりしたら見えるだろう。
Lambdaのコード開発やテスト手法のベストプラクティスについてお伺いしたいです。
いろいろあるので具体的に言って欲しいので、次回フォーカスして話す。
日本のSIerだと、要件定義書、基本設計書、詳細設計書、単体テスト仕様書とエビデンス貼り付け、結合テスト仕様書とエビデンス貼り付け、システムテスト設計書とエビデンス貼り付けというようなドキュメントを作ると思います。AWSのサービス(Lambda自体とか)を開発するときはどういうドキュメントが残されますか?
知ってる範囲ではない。 自社サービス企業では、いわゆるドキュメントを残すのは少ないと個人的には思う。 納品のための成果物というイメージ。 デザインに関するドキュメントなどはあるが設計書などはカジュアル。
社外にメールでファイル添付するときどうやってますか?よくパスワード付きzipで送って、別メールでパスワード送るという方法があり、それならパスワードなしでそのまま送っても同じではと思っています。
パスワード付き云々はやらない。
AWSに入社するには対面での会議に問題なく参加できるレベルの英語力は必須ですか?
ポジションによる。読み書きは必要。必要以上に恐れなくていい。
海外の情報はどうやってキャッチアップされていますか?以前勉強会(well-architected)で海外のツールを紹介されていたりしたので、そういうツールなどを探す時にどうされているのか知りたいです。
特別なことはしていない。 普通にググったりするだけ。 英語のソースをみるケースは多い。 社内の人がグローバルなので、日本以外の人に聞くことはある。
Amazon SNS を削除する時に入力する「これを削除」が気になってしょうがないんですがどうにかなりませんか?というか他サービスに関しても削除対象のリソース名を入れないとあまり意味がないと思うんですが、この辺り方針は決まっていないんですか?
サービスによって統一されてないのでフォードバックありがとうという感じです。
Cloudformationのスタックはどの粒度で切れば良いでしょうか?Lambda function単位でしょうか?
ライフサイクルが同じ範囲でまとめるのがいい。 デプロイ、アプリケーションの更新などが同じもの。
CodePipelineからS3にWebコンテンツをコピーするとき、SyncじゃなくてCopyっぽいのですが、いい感じの方法はないですか。(今はCodePipelineからLambdaを呼んでSyncしています)
社内に聞いてわかれば Twitter で回答。
Lambdaをローカルで動かす sam local start apiを使って実行したポートにSPAのアプリからリクエストを送って動かすと、authorization をはじくというかdockerで動くLambda側で取得できない、またCORSに対応していないです。どう対応されてますか? postman等使う?
E2E でテストするならデプロイするのはどう?
Lambda、色々なランタイムが使えるようになっていますが、オススメのランタイムはどれですかね。周りに聞くと、Pythonって声が多いんですが(自分は普段はNode.jsメインです。時々Python)。
特におすすめはない。 Python はバランスがよく、コールドスタートに対するケアや速度も含めていい。 Java の人にも読みやすい。Node.js はちょっと癖がある。
Provisioned ConcurrencyはSQSは対応されないのでしょうか、、、これは将来的にもそうなのでしょうか。
ロードマップは答えれない。
Cognito User Pools のLambda トリガーなど、実行時間が伸ばせない場合では、バーストなどがなくてもProvisioned Concurrencyを設定することは有効ですか?
いろんなユースケースがあるので一概には言えない。
Lambdaの同時実行数バーストは、Lambda@Edgeでも同様ですか?(リージョンごとに制限されている同時実行数と同じ考えという理解です。)
後ほど Twitter で回答。
provisioned concurrencyのトラブルシュート方法はありますか? AWSブログはありましたがもし他にもあれば https://aws.amazon.com/jp/blogs/compute/investigating-spikes-in-aws-lambda-function-concurrency/
基本ブログ見てください。
Chaliceだと、1Lambdaに複数処理を追加できてしまいますが、モノリシックガチになるとすると、あまり進められない形でしょうか?
見解は分かれる。 程度問題と思う。 少なくとも全てをファットなファンクションにするのはやめたほうがいい。
今日の話の通り、必ずしもそうではない。
以前Lambdaのランタイムのオススメ順が 1. Python 2. Go 3. Node.js というツイートをされていたと思いますが、その理由を伺いたいです。
1番目は Python だけど2番めは特に無い。 Node.js のメリットは Lambda ではあまり活かせないのでおすすめしない。
今日の内容とは関係ないですが、LambdaからDynamoDBDataMapper経由でDynamoDBの操作って可能ですか?ローカル環境では出来たのですが、実際にAWSにデプロイしたらInvalidSignatureExceptionで出来なかったので・・・ (edited)
サポートに問い合わせください。
あるけど、自分が望んで移動するケースがほとんど。
普段、設計書の作成にはどのようなツールを使われてますか?私の会社では実質エクセルやパワポしか使えないのですが、図はdraw.ioを利用してます。
社内 Wiki だったり、社内ノートを共有するツールを使うことが多い。 エクセルは設計書に使わない。
フロント+Netlify Functionのような構成をAWSでやる場合にLambdaを管理するには何がオススメですか?(CDK、Amplify、ServerlessFrameworkなど)
Amplify
同時実行数とバースト制限(Cold Start時)のほかに、スロットリングしてしまうLambdaの仕様はありますか。
無いと思う。
LambdaLayerを単独スタックにした場合、他のスタックから参照されているとLayerを更新できないと思いますがLayerを別スタックにするのはよくないですか?
今すぐの回答は無いので、考えたい。
AWSで働いていて、一番やりがいを感じる時はどんな時ですか?
色々あるので飲み会ででも。
SAとして働いていて、自分でプロダクトを作り切りたいという欲求に駆られることはありますか?
今はもうなくて、広い範囲でいろいろなことをしたい思いが強い。
s3からlambdaへputトリガーでinvokeする場合に、稀に非同期のためinvokeされないケースがあると思いますが、どのように救うのが良いでしょうか?
SQS 使ったり、処理したらバケットを移動させるなど、担当の SA に相談ください。
所感
お便りコーナー全部答えるのがすごい...
今回も話せる範囲で色々仕組みを聞けたので勉強になりました。