AWS Lambdaでの開発について

ryichk
·
公開:2023/12/20

Lambda開発に必要な操作

  1. IAMロールの設定

  2. Lambdaランタイムの設定

  3. Lambda関数のコーディング

  4. イベントソースとなるリソースの作成およびトリガーとして設定

CloudFormationを使った場合の操作

  1. Lambda関数のソースコードをZIPアーカイブしてアップロード

  2. CloudFormationのテンプレートを記述

  3. awsコマンドでCloudFormationに適用

  4. スタックが作成され、AWSリソース一式が作成される

CloudFormationを使う場合の注意点として、AWSリソースはすべてスタックで管理されるため、リソースを手動で変更してはいけない。

Serverless Application Modelを利用した開発手法

SAMはCloudFormationをベースにしたサーバーレスアプリケーションの開発手法である。

SAMの実態は「AWS SAM CLI」というコマンドラインツールである。

開発者は「AWS SAM テンプレート仕様」で定められて書式に則ったテンプレートファイル(SAMテンプレート)に各種設定を記述する。

samコマンドを使ってビルド・デプロイすると設定がCloudFormationへ渡され必要なAWSリソースが作られる。

Lambda関数をビルドする際は実行予定のランタイムと同等の環境が必要。

SAMは、Lambda関数をビルドする際にランタイムをDockerコンテナとして実行する機能がある。Dockerを使わずにローカル環境でビルドすることも可能。

SAMは、ローカル環境でLambda関数をテストする機能も提供している。

イベントと同じ構造のJSONデータを渡すことでLambdaランタイムでの実行をエミュレートする。

SAMを使った開発の流れ

  1. sam initでプロジェクトディレクトリを初期化する

  2. Lambda関数のコーディング

  3. SAMテンプレートの記述

  4. sam build

  5. sam deploy

    初回は`--guided`オプションを指定し対話モードでどこにデプロイするか設定できる。2回目以降のデプロイは`--guided`を省力しても初回で設定した内容でデプロイできる。

    また`--capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND`オプションをつけないとデプロイの際にIAM変更が必要な場面で失敗することがある。

Serverless Application Repository

サーバーレスアプリケーションを管理するリポジトリ。

SAMで構築したアプリを登録できる。

AWSをはじめとしたサードパーティ製のサーバーレスアプリが多数登録されている。

Boto3でAWSリソースを操作する

AWSリソースにアクセスするためのAPIが公開されており、そのライブラリが各プログラミング言語で用意されている。

Pythonの場合はBoto3というライブラリを使ってAWSリソースにアクセスできる。

LambdaランタイムにはBoto3が既定でインストールされている。

外部ライブラリを含める方法

  1. 生成物に含める方法

    sam buildする際に外部ライブラリを含めるようにする。

    プロジェクトを含むディレクトリの下にサブディレクトリを作り、その中にライブラリ一式をコピーしておく。

    または、requirements.txtに使いたいライブラリを記述しておく。(普通はこっち)

  2. レイヤーを使う方法

    Lambdaのレイヤーという機能を使う。

    レイヤーはライブラリなどをZIPにまとめて事前にアップロードしておく仕組み。

    Lambda関数には最大5つのレイヤーを指定でき、Lambdaランタイムが作られる際にレイヤーが順番に展開されて配置される。

    たくさんのLambda関数がある場合は、共通で使うライブラリやデータなどをあらかじめ登録しておけるので便利。

レイヤーの実態

レイヤーは単純にZIP形式のファイルを`/opt`ディレクトリ以下に自動で展開する機能である。

Lambdaランタイムは`/opt`ディレクトリ以下の言語ごとに異なるディレクトリにライブラリパスが設定されている。

SAMを使ったレイヤーの構成

  1. プロジェクト配下に、レイヤーに含めたいファイルを配置する作業ディレクトリを作る。

  2. 使いたいライブラリをrequirements.txtに記述する

  3. template.yamlを変更する

参考

AWS Lambda実践ガイド 第2版

@ryichk
wanna be a good hacker.