ハンズオン · AWS Lambda
Lambda で「ハロー」を返す関数を作る
AWS Lambda は、コードを置いておくと、呼ばれたときだけ動かしてくれるサービスです。サーバーを用意する必要はありません。関数を1つ作って、「ハロー」と返すところまでやってみます。
01作るもの
Lambda では、動かすコードとその設定のまとまりを「関数」と呼びます。関数は、何かに呼ばれたときだけ動きます。呼ぶときには「イベント」というデータ({"name": "villagebase"} のような JSON)を渡せて、動くたびに「ログ」が残ります。
実際には、S3 にファイルが置かれたときや、Web からアクセスがあったときに呼ばれます。今回は、Lambda の画面にある「Test」ボタンで呼びます。
Lambda は毎月 100万回まで無料で呼べます。この記事で呼ぶのは数回なので、料金はかかりません。
02手順
my-hello のように枠で囲んだ文字は、押すとコピーできます。画像は、押すと元の大きさで見られます。
手順1関数を作る
画像の黄色の番号は、下の操作の番号と対応しています。
- 右上のリージョンが「アジアパシフィック (東京)」になっているか見る
- 上の検索欄に と入れて、出てきた「Lambda」を開く
- 左のメニューの「Event Functions」を開く2026年10月から、これまでの Lambda の関数はこの名前になりました。下の「ウェブ関数」は別のものです。
- 右上のオレンジの「Create Event Function」を押す日本語の画面でも、このボタンは英語のままです。
- 確かめる「一から作成」が選ばれている
- 入力「関数名」に
- 確かめる「ランタイム」が「Node.js 24.x」になっている
- 確かめる「アクセス許可」に、実行ロールを作ると書いてあるログを書くための権限です。関数と一緒に自動でできるので、最後の片付けで消します。
- クリックほかはそのままで、右下の「Create Event Function」
my-hello の画面に切り替わり、上に「関数 "my-hello" が正常に作成されました。」と出ます。下のエディタには index.mjs が開いています。
「Getting started」という英語の案内が出てきたら、右下の「Dismiss」で閉じてかまいません。
手順2コードを書き換える
export const handler = async (event) => {
// 渡された名前を取り出す(なければ "Lambda")
const name = event.name ?? "Lambda";
// ログに1行書く
console.log(`name: ${name}`);
// 「ハロー、〇〇!」を返す
return { message: `ハロー、${name}!` };
};
最初と最後の行は Lambda の決まった書き方で、この関数がしているのは間の3行です。
- エディタの
index.mjsの中身を全部消して、上のコードを貼り付ける7行目の「!」に黄色い枠が付きますが、全角文字に付く目印なので気にしなくて大丈夫です。 - クリック左の「DEPLOY」の下にある青い「Deploy」
- 確かめる「DEPLOY」の横が「Current」に変わった
貼り付けただけでは、まだ反映されていません。「DEPLOY」の横が「Undeployed」のあいだは、前のコードのまま動きます。
手順3テストする
- 左の「TEST EVENTS」の下の「Create new test event」を押す右側に「Test event」の画面が開きます。ここも英語のままです。
- 入力「Event name」に
- 確かめる「Event sharing settings」が「Private」になっているほかの欄はそのままで大丈夫です。
- 入力下のほうの「Event JSON」の中身を全部消して、次の JSON を貼り付ける
{
"name": "villagebase"
}
- クリック上の「Save」「Test event is saved successfully.」と出れば保存できています。
- クリックその隣のオレンジの「Test」
下の「OUTPUT」に「Status: Succeeded」と出て、Response に「ハロー、villagebase!」が返ってきます。
Event JSON の villagebase を自分の名前に変えて、もう一度「Test」を押すと、返ってくる名前も変わります。渡した JSON が、そのままコードの event に入っているからです。
手順4ログを見る
「OUTPUT」の中を下へスクロールすると、「Function Logs」が出ています。
2026-10-22T11:10:32.981Z be8f5164-… INFO name: villagebase START RequestId: be8f5164-… Version: $LATEST END RequestId: be8f5164-… REPORT RequestId: be8f5164-… Duration: 21.48 ms Billed Duration: 22 ms Memory Size: 128 MB Max Memory Used: 80 MB
- 1行目の name: villagebase
console.logで書き出した行です。時刻は日本時間ではなく UTC で、日本時間より9時間前になっています。 - REPORT の Duration と Billed DurationDuration は関数が動いた時間、Billed Duration は料金の計算に使われる時間(1ミリ秒単位で切り上げ)です。しばらく呼んでいなかったあとなどは、最後に Init Duration(準備にかかった時間)が付き、その分も料金に入ります。
同じログは、CloudWatch の「ログ管理」にある /aws/lambda/my-hello にも残っています。
03片付け
関数を作ったとき、次の3つも自動でできています。関数を消してもこの3つは残るので、それぞれ消します。
| 自動でできたもの | 役割 |
|---|---|
| ロググループ /aws/lambda/my-hello | ログの置き場所 |
| 実行ロール my-hello-role-… | 関数にログを書く権限を渡すもの |
| ポリシー AWSLambdaBasicExecutionRole-… | その権限の中身(ロールに付いている) |
-
Lambda の「Event Functions」で my-hello を選び、「アクション」→「削除」。入力欄の上に書かれた語( など)を入れて消します。
-
CloudWatch の左のメニューの「ログ管理」で、/aws/lambda/my-hello にチェックを入れ、「アクション」→「ロググループの削除」。
-
IAM の「ロール」で を検索して開き、付いているポリシー(AWSLambdaBasicExecutionRole-…)の名前を控えておきます。ロールを消したあと、IAM の「ポリシー」でそのポリシーも消します。
アカウントによっては、関数ごとのロールではなく、共通の PowerUserRole が付いています(IAM のロールマネージャーが有効な場合)。ほかの関数でも使われるので、このときはロールもポリシーも残しておいてください。