Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS サーバレス設計 Tips集

Atsushi Satou
May 15, 2024
78

AWS サーバレス設計 Tips集

Atsushi Satou

May 15, 2024
Tweet

Transcript

  1. 自己紹介 名前: 佐藤 淳 ( Atsushi Sato ) 会社: 某AWSが得意な会社

    Qiita: https://qiita.com/atw0_0w 職業: インフラエンジニア 最近興味あること: golangでCLIツールの作成
  2. [Tips 1] API Gateway + Lambda APIバージョン管理 API Gateway …

    ${stageVariables.変数名} を使用してステージ変 数で設定した値のLambdaエイリアスにリクエスト https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/aws-api-gateway-stage-variables-reference.html
  3. [Tips 1] API Gateway + Lambda APIバージョン管理 Lambda … API

    Gatewayのステージ変数と同じLambdaエイリアス 名を指定
  4. [Tips 1] API Gateway + Lambda APIバージョン管理 ユースケース: - バージョンごとにAPIを公開したい場合

    詳しくは以下のリンクを参照 元ネタ: https://qiita.com/atw0_0w/items/c8b27cd4895fc6be9e98
  5. [Tips 2] ローカルでLambdaのベースコンテナを試してみたい ユースケース - ローカル上での動作確認 - Lambdaコンテナでカスタムイメージを利用したい場合 - デプロイ後の「invalid

    ELF header」エラーの回避 > ローカル端末でのpythonとAWS Lambda 上でのpythonライブラリではOS自体が異なることでELF ヘッダー情報が異なることで 発生するエラー 詳しくは以下のリンクを参照 元ネタ: https://qiita.com/atw0_0w/items/2362dced7e8987210698
  6. [Tips 3] Lambda Layerを試す [補足] 外部パッケージを利用している場合の注意点 サーバーワークスさんの記事で興味深い記事を紹介。 > https://blog.serverworks.co.jp/lambda-function-stopped-working-suddenly 要約するとboto3

    や botocore などと依存関係を持つライブラリでバージョン互換性に よるエラーが発生する事象。 → Lambdaのランタイムはデフォルトでランタイムバージョンは常に更新され、それに伴い各ライブラリのバージョンも更新される。 → 全く更新がないパッケージの利用やLayerだけ塩漬け対応していると依存関係のエラー発生するかも。。 ランタイムを手動更新する設定をすれば少なくともエラーは回避。
  7. [Tips 4] Infrastructure as Code IaCで作る際、どの方式が良いか? Cloudformation(Terraform) or AWS Serverless

    Application Model ? > ポイント: LambdaアプリケーションはCI/CDで問題ないが、リソースなどの設定は抽象度が低い方がいいか or 高い方がいいか
  8. [Tips 4] Infrastructure as Code AWS Serverless Application Modelを利用する場合 抽象度の高い

    AWS Serverless Application Model(以下SAM) で作成した方がコード の記述量は少なくシンプルに作成することは可能。しかし、以下の場合のような[Tips1] のようなケースであるなら控えた方が良いかも。。。 - Lambdaバージョンの明示的指定 - 複数ステージ・複数エイリアスの管理 → SAMでは複数のエイリアス, バージョン管理は難しい 元ネタ: https://qiita.com/atw0_0w/items/7d5cc6abd59f0f62a6bd https://qiita.com/atw0_0w/items/1fd41907e54db0f1aef7
  9. [Tips 4] Infrastructure as Code Cloudformation(Terraform) を利用する場合 抽象度が低いため AWS SAM

    での課題は解消できる。 - Lambdaバージョンの明示的指定 - 複数ステージ・複数エイリアスの管理 しかし、パラメータの記載量が多くなり、管理が大変。 そもそもSAMもCloudformation(Cfn)も前のLambdaバージョンにロールバックできな い。。 → Lambrollを使って更新すればロールバックもできるし、簡単にデプロイできる(個人 的おすすめ⭐) https://github.com/fujiwara/lambroll
  10. - API Gateway にて複数のステージを使用する場合、「${stageVariables.変数名}」 でAPI GatewayステージとLambdaエイリアスを関連づける。 - ローカルでのLambda関数の検証なら「https://gallery.ecr.aws/lambda 」を 参照。

    - 複数の関数で利用するのなら、Lambda Layerを使用する。 但しパッケージの依存関係には要注意。 - 要件を洗い出して適切なIaCツールを選択する。 まとめ