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

AWS サーバレス設計 Tips集

Avatar for Atsushi Satou Atsushi Satou
May 15, 2024
110

AWS サーバレス設計 Tips集

Avatar for Atsushi Satou

Atsushi Satou

May 15, 2024
Tweet

More Decks by Atsushi Satou

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ツールを選択する。 まとめ