AWSを触ってみる【Lambda】
はじめに
AWSが提供する学習プラットフォームAWS Skill Builderの学習プランが11/2まで無料で急ぎでやってみたので学んだことをまとめます。
実際にAWSコンソールを開きながら進められるのでおすすめです。
※自分はAWSを業務で若干しか触ったことないレベルなのでほぼ初心者です。
Lambdaとは
Lambda は、サーバーの管理なしでコードを実行できるサービスです。
クラウド上に関数を置き、サーバー不要で関数を実行できるイメージです。
類似サービス (サーバーレス / Function as a Service)
- Google Cloud Functions(GCP)
- Azure Functions(Microsoft)
- Cloudflare Workers(Cloudflare)
Lambdaの特徴
サーバーレス
サーバーの準備や管理が不要で、コードの実行に集中できます。
イベント駆動
特定のイベント(例: S3へのファイルアップロード)をトリガーにして、関数が自動的に実行されます。
オートスケーリング
アクセスが急増しても、自動的にリソースをスケールアップし、安定した性能を維持します。
従量課金制
実行時間やリクエスト数に基づいて課金されます。
Lambdaの用途
Lambda は単体で使うより、他の AWS サービスと組み合わせて動かすことが多いです。
以下は一例で、「トリガーとなるイベントが発生した時に実行する」のでなんでもできます。
- バックエンド処理
例:API Gatewayと組み合わせてAPIとして動作 - 画像処理・データ加工
例:S3 にアップロードされた画像を自動リサイズさせる - バッチ処理
例:CloudWatch Events で cron 実行(1日1回など) - Webhook / 外部サービスとの連携
例:Stripe の支払い完了イベントを受け取り、メール送信やDB保存を実行 - 通知処理
例:特定のイベント発生時に Slack に通知する - 認証・ユーザー管理処理
例:Cognito ユーザー登録時に Lambda を実行し、初期データを作成する
ランタイム
Lambda では どの言語で実行するか を「ランタイム」として選択します。以下代表的なもの
- Node.js
- Python
- Go
- Java / Kotlin
- .NET (C#)
- Ruby
Lambda へのコードアップロード方法
ZIP をアップロードする
関数コードと依存関係をまとめたZIPファイルをアップロードする方法です。
小規模 / 試すだけの場合に最適。コード + 依存ライブラリを ZIP にしてアップロードするだけ
コンテナイメージ(Docker)としてデプロイ
関数コードをコンテナイメージとして作成し、AWS ECR(Elastic Container Registry)などのコンテナレジストリからデプロイする方法です。
IaC(Infrastructure as Code)で管理する
インフラ構成をコードで管理し、自動デプロイできます。本番運用やチーム開発向け。
- Terraform
- AWS CDK
- AWS SAM
- Serverless Framework
画像をリサイズする Lambda関数を作成する
Amazon S3 から画像を読み取り、画像のサイズを変更して Amazon S3 に新しい画像を保存する AWS Lambda 関数を作成します。
動作の流れ(全体像)
- ユーザーが images-580268205986 に画像をアップロードする
- その S3イベント(ObjectCreated) が トリガー になって Lambda を起動
- Lambda がアップロード元 S3 から画像を /tmp にダウンロード
- Pillow でリサイズ
- リサイズ済み画像を images-580268205986-resized に アップロード
- 結果、*-resized 側に縮小画像が自動生成される
事前作業
あらかじめバケット「images-580268205986」、「images-580268205986-resized」を作成しておきます。
images-580268205986に画像をアップロードします。
Lambda関数を作成する
-
マネジメントコンソールでLambdaを検索>関数を作成

-
一から作成>関数名入力
-
ランタイム「Python 3.12」を選択

-
実行ロール「既存のロールを使用する」>「lambda-execution-role」を選択]

- 「関数を作成」>Dismiss
トリガーを追加する
-
トリガーを追加

-
トリガーの設定「S3」を選択

-
バケット「images-580268205986」を選択>追加


- コード>アップロード元>今回は元々用意されていたため「Amazon S3の場所」を選択>リンクを貼り付け>保存

- コードタブ>ランタイムの設定「編集」>ハンドラ名を「CreateThumbnail.handler」に変更>保存

- 「設定」タブ>「編集」>説明-オプションに追加>保存

以上でLambda関数が設定されました。
関数をテストする
- 「テスト」タブ>テストイベント「新しいイベントを作成」を選択
- イベント名入力
- テンプレート-オプション「S3 Put」選択

5. イベントJSONを編集
イベントJSON
{
"Records": [
{
"eventVersion": "2.0",
"eventSource": "aws:s3",
"awsRegion": "us-east-1",
"eventTime": "1970-01-01T00:00:00.000Z",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"requestParameters": {
"sourceIPAddress": "127.0.0.1"
},
"responseElements": {
"x-amz-request-id": "EXAMPLE123456789",
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH"
},
"s3": {
"s3SchemaVersion": "1.0",
"configurationId": "testConfigRule",
"bucket": {
"name": "<バケット名>",
"ownerIdentity": {
"principalId": "EXAMPLE"
},
"arn": "arn:aws:s3:::<バケット名>"
},
"object": {
"key": "<キー名=画像の名前>",
"size": 1024,
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901"
}
}
}
]
}
以下に置き換えます。
- バケット名
例:images-580268205986 - キー名
例:HappyFace.jpg
-
「テスト」
実行成功

-
S3の「images-580268205986-resized」バケットの中に、オリジナルより小さいサイズの画像が存在していることを確認
モニタリングとログ記録
Lambda関数をモニタリングする方法です。
-
Lambda>該当の関数を選択
-
「モニタリング」タブ
呼び出された回数などが確認できる

-
「CloudWatchログを表示」>「ログストリーム」
ログを確認できる。

まとめ
まだまだ理解が浅いので追記していこうと思います。
Discussion