みなさんこんにちは(*^^*)新入社員の菊間です。
この記事では、AWSのサービスの中からAWS Lambdaに注目していきます。
まだAWS Lambdaのことを何もわからない方や、関数をどのように動かすの?という方向けに作られています。
ぜひ最後までご覧くださいね!
目次
0.そもそもなぜAWS Lambdaを選んだの?
1.はじめに
・AWS Lambdaってなに?
・サーバーレスとは
・Amazon EC2との違い
2.AWS Lambdaの特徴
・AWS Lambdaのメリット
・AWS Lambdaのデメリット
3.Lambda関数の使い方
①Lambda関数の作成
②Hello World関数のコード編集
③テストの実行
4.まとめ
同じコンピューティングサービスにEC2がありますが、Lambdaは利用していなかったのもあり、使い方やどのようなことができるのかを知りたいと思ったのが選んだ理由です。
Lambda自体のことも知らないため、詳しい概要から確認していきたいと思います。
AWSが提供するサーバーレスで使用できるコンピューティングサービスのことです。サーバーのプロビジョニング(*1)を必要とせずにコードを実行することができます。
従来では、アプリケーションを実行するためにサーバーリソースを準備する必要がありました。しかし、Lambdaではコードを実行するための基盤が自動的に用意されており、実行の時間に応じた従量課金制のため、利用していないときは料金は発生しません。
*1:プロビジョニング …ユーザーの需要に先立って準備・提供すること
サーバーレスとは、開発者がサーバーの構築や運用を意識せずにアプリを開発・運用できるクラウドの仕組みです。
実際にはサーバーは存在しますが、サーバー類やセットアップや保守、スケーリング、セキュリティ対策などはAWS側が担うため、 開発者はアプリケーション開発に注力することができます。
サーバーレスには以下のようなメリットがあります。
・サーバーの準備や管理が不要
・リクエスト数に応じて自動でスケールされる
・処理時間や回数に応じた従量課金
・高可用性と安全性を標準で備えており、冗長化やメンテナンスの心配が少ない
同じコンピューティングサービスの例としてAmazon EC2が挙げられますが、ここではAmazon EC2とAWS Lambdaにはどのような違いがあるのかを見ていきます。実際に比較して現れる違いは何か考えてみましょう。
比較項目
|
Amazon EC2
|
AWS Lambda
|
サービスの概要
|
仮想サーバー(インスタンス)を作成・管理できる。
自由にインストール可能。
|
イベント発生時に自動でコードを実行。
サーバー管理不要なサーバーレスサービス。 |
実行タイミング
|
サーバーは常時起動。
リクエストの度にアプリが処理を実行。
|
イベント発生時のみ実行。
(API呼び出し、ファイルアップロードなど)
|
実行時間制限
|
時間制限なし。24時間連続稼働も可能。
|
最大 15分(900秒) の処理時間に制限。
|
料金体系
|
起動時間に応じて課金。
未使用でも起動中なら料金が発生。
|
実行された時間と回数に応じて課金。
未使用時は料金不要。
|
処理の自由度
|
Webサーバー、DB、アプリなど自由に構築可能。
|
処理内容に制限あり。
短時間・単純な処理に最適、複雑構成には不向き。
|
今度は、AWS Lambdaの特徴について掘り下げていきたいと思います。
ここでは、使用時のメリットとデメリットを挙げます。
項目
|
内容
|
1.サーバー管理不要
|
インフラ構築・運用不要。コードを書くことに専念できる。
|
2.オートスケーリング
|
アクセス量に応じて自動でスケーリングされる。
|
3.従量課金制
|
実行時間と回数に応じて課金。未使用時はコスト0。
|
4.高速な開発・デプロイ
|
コードをアップロードするだけで即実行が可能になる。
|
5.他AWSサービスとの連携
|
S3, DynamoDB, API Gateway などと簡単に連携ができる。
|
項目
|
内容
|
1.実行時間の制限
|
最大15分まで。それ以上は処理できない。
|
2.実行環境の制限
|
利用可能なプログラミング言語やライブラリ(*2)に制限がある。
|
3.デバッグ(*3)の難しさ
|
ローカル環境での動作確認や不具合修正が難しく、工夫が必要。
|
4.ベンダーロックイン
|
AWS依存が強く、他クラウドやオンプレミスが難しくなる状態。
|
5.同時実行数制限
|
同時実行の数に初期制限があり、大規模対応には調整が必要。
|
*2:ライブラリ …よく使われる機能や処理をまとめて再利用できるようにしたプログラムのこと。
Ex)PHP例
・日付や時間をフォーマットで表示→"date()"
echo date("2025-06-01 13:11:22");
//出力例:2025-06-01 13:11:22
*echo…文字列や変数の内容を画面に表示するコマンド/関数
*テキスト文などファイルの読み書きが可能に
*3:デバッグ …システム内のバグを見つけて修正するプロセス。
コードを書いたが、なぜエラーが起きるのかわからない時などにプログラム内の確認ができる。
ここでは、Lambda関数の基本的な使い方について説明していきます。関数の作成から簡単にできる"Hello World関数"でテストまで実践をします。
この関数では、「Lambda関数が正しく実行されるかどうか」を確かめるための関数です。
内容として、単純に"Hello, World!"という文字列を返すだけの処理であり、使う理由として、以下の3つが挙げられます。
・正しくデプロイができているかどうか
・呼び出しが成功するか
・基本の構文が間違っていないか
Lambdaの環境構築の第一歩として用いられるものです。では、ここから実際に作成していきましょう!(* ̄0 ̄)/
まず初めに、Lambdaを選択したら「関数」→右上「関数の作成」をクリックします。
"関数の作成"画面で以下のように入力をします。今回は一からの作成で考えていきます。
・関数の作成方法:「一から作成」
・関数名 :好きな名前でOK(ここでは「hellofunciton」)
・ランタイム :「Python3.13」(他にもNode.jsやJavaもあるが、今回はPythonを使用)
・アーキテクチャ:「x86_64」(デフォルト)
・実行ロール :「基本的なLambdaアクセス権限で新しいロールを作成」(デフォルト)
入力後、「関数の作成」を選択します。
ランタイムでは、Lambda関数でどのプログラミング言語を使うかを選ぶことができます。
種類としてNode.js、Python、Java、Go、Ruby、NET、そしてカスタムランタイム(Linux上で独自言語)の選択ができ、幅広い言語に対応できます。
アーキテクチャとは、システムの骨組みや構造設計を表す言葉です。 ここではLambda関数が実行されるCPUの種類を選ぶもので、「x86_64」「arm64」の2種類から選択できます。
・x86_64…パソコンやサーバーでよく使われてきたIntelやAMDのCPUで、長年利用されてきた信頼性の高いアーキテクチャ
・arm64…AWSが自社開発したCPUで、軽量で省電力、高速起動の力を持っているアーキテクチャ
このarm64はx86_64と比べて処理速度は速く、コストも省くことに期待できます。
また新規アプリ開発やNode.jsやPythonなどの軽量な言語処理の場合では、基本的には「arm64」の選択を推奨しています。
ただ、特定のコードの入力でエラーが発生したり、古いソフトでarm64に対応していない場合もあります。その際は「x_86_64」も選択肢で考えます。
実行ロールでは、Lambda関数がAWS内の他のサービスにアクセスするための権限についてデフォルト選択されている「基本的なLambdaアクセス権限で新しいロールを作成」から変更をする際に選択をします。Lambdaを初めて使う方や関数の実行とログの確認をしたい方は変更の必要はありません。
・基本的なLambdaアクセス権限で新しいロールを作成…AWSが用意したテンプレートであり、CloudWatch Logs(ログ出力)にアクセスできる権限だけが含まれたロールを自動で作成。
・既存のロールを使用する…既に作成済みのIAMロールを選んで使うパターン。
・AWSポリシーテンプレートから新しいロールを作成…Lambda以外にアクセスする想定があるパターンで使用。AWSが用意したテンプレートから、S3やDynamoDBなどの特定のサービスと連携したいときに使用。
ここまででLambda関数の作成が完了!
関数が作成され下にスクロールすると、編集画面が表示されます。
「コード」→「コードソース」のセクションに以下のコードを入力します。
def lambda_handler(event, context):
return "Hello, World!"
コード
|
意味・役割
|
説明
|
def
|
関数の定義
|
Pythonで関数を定義するときに使うキーワードです。
|
lambda_handler
|
Lambdaの
エントリーポイント名
|
AWS Lambdaが自動的に呼び出す関数名。
デフォルトでは lambda_handler にするのが一般的です。
|
(event, context)
|
引数
|
Lambda実行時にAWSから渡される2つのオブジェクト:
event: イベントの入力データ
context: 実行環境に関する情報(例:タイムアウト、メモリ)
|
return "Hello, World!"
|
戻り値
|
このLambda関数を呼び出すと、「Hello, World!」という文字列を返します。
API Gatewayなどと連携しない単純な用途に適しています。
|
↑pythonでのコード説明
入力後左にある「Deploy」を忘れずにクリックし、更新をします。
「関数hellofunctionが正常に更新されました。」で更新を確認します。
Hello Worldの関数まで作成完了!
コード
|
意味・役割
|
説明
|
exports.handler
|
Lambda関数の
エクスポート
|
Lambdaはこの handler 関数を自動で呼び出します。
Node.jsでは exports を使って関数をモジュールとして公開します。
|
= async (event) => {
|
非同期関数の定義
|
async をつけることで await を使える非同期関数になります。
Lambda関数は Promise を返すことが推奨されており、非同期処理と相性が良いです。
event はLambdaを呼び出すときに渡されるデータです。
|
return "Hello, World!";
|
関数の戻り値
|
関数を呼び出すと "Hello, World!" という文字列がそのまま返されます。
API Gatewayと連携していない場合に使うシンプルな出力です。
|
↑Node.jsでのコード説明
関数が作成され下にスクロールすると、編集画面が表示されます。以下の通りに選択をします。
・イベントアクションをテスト:「新しいイベントの作成」
・イベント名 :「testhello」
・イベント共有の設定 :「プライベート」(デフォルト)
・イベントJSONはデフォルトのままでOK(2枚目)
"key" : "value" の形であればOK(複数あっても問題なし)
他の項目に関してはすべてデフォルトで問題ないです。確認したら「保存」をクリックします。
イベント共有の設定では、Lambda関数のコンソール画面上でテストイベントを作成・管理する際の「スコープ(範囲)」の設定に関するもの。
・プライベート…自分(現在ログインしているIAMユーザーorロール)だけがそのテストイベントを閲覧/利用が可能
・共有可能…他のユーザーやチームメンバー(同じ関数にアクセスが可能なIAMユーザーやロール)と共有が可能
個人での開発では、デフォルトで指定済みの「プライベート」を選択し、チーム開発や共同作業時では「共有可能」の選択で使い分けをします。
その後、「テスト」を実施します。成功すると「実行中の関数:成功」と表示されます。
詳細を確認すると、以下のレスポンスが表示されます。
Hello, World!
テストまで実行完了!!
Lambda関数は、AWSマネジメントコンソールを使えば数分で作成・実行できます。
「Hello World関数」は第一歩を象徴するものであるため、ここからは以下のような他のサービスと連携させて活用をしていきます。
・API Gatewayとの連携(APIエンドポイントとして使う)
・S3トリガー、DynamoDBトリガーなど
・EventBridgeとの連携(スケジュール実行)
今回は、AWS Lambdaについて簡単な概要についてや、関数の作成から実行までを動かしてみました。
Lambdaの特性を理解して使えば、システム全体のコスト削減と柔軟な拡張性が得られ、 ぜひ、まずは小さなLambda関数から試して、運用に活かしてみてください。
最後まで読んでくださりありがとうございました。