← ハンズオン一覧に戻る

AWS Hands-on / Serverless

サーバーを持たずに、はじめてのプログラムを動かす

サーバーの用意や管理をいっさいせずに、書いたプログラムをそのまま動かせるサービス「Lambda」を使います。コンソールの中で Python のかんたんなプログラムを作り、ボタンひとつで実行して、結果が返ってくるところまでを体験します。プログラミングがはじめての人でも進められるように、コードは 1 行ずつ言葉で説明します。

● Lv.1 AWS を触りはじめた人 ⏱ 所要 20〜40 分 すべてコンソールで完結
01 — Prerequisites

はじめる前に

  • 必須AWS アカウントを持っていること
  • 必須マネジメントコンソールにサインインできること
  • あると良い「プログラム」とは、コンピュータへの指示を順番に書いたもの、というイメージ

※ このハンズオンは すべてコンソールだけで完結します。プログラムもブラウザの中で書いて実行するので、自分のパソコンに何かをインストールする必要はありません。

🌱 プログラミングがはじめての人へ

コードはこのページにすべて用意してあります。コピーして貼り付けるだけで動きます。さらに、書いてある内容は 1 行ずつ日本語で説明します。いまは意味が完全に分からなくても大丈夫。「こう書くと、こう動く」を体験することが目的です。

02 — References

参照する公式ドキュメント

手順に迷ったときや、用語の意味を確かめたいときに開きましょう。

※ リンク切れの場合は、ページタイトルで検索してください。

03 — Background

背景・シナリオ

「ちょっとした処理を実行したい」だけなのに、これまではそのためにサーバーを 1 台用意し、OS を入れ、必要なソフトを入れて、動かし続ける必要がありました。使っていない時間も電源(料金)はかかり、管理の手間も残ります。短い処理をたまに動かすだけなら、これは大げさです。

AWS の Lambda を使うと、サーバーをいっさい用意・管理せずに、書いたプログラム(これを「関数」と呼びます)をそのまま動かせます。呼び出されたときだけ実行され、終わればすぐ止まります。こうした仕組みを サーバーレス と呼びます。今回は、Python でかんたんな関数を作り、ボタンで実行して結果を受け取ってみます。

「関数」って何?

ここでの関数とは、「何かを受け取って、処理をして、結果を返す、ひとまとまりの処理」のことです。たとえば「名前を受け取って、あいさつ文を作って返す」のような小さな仕事です。Lambda は、この関数を保管しておき、呼ばれたときに動かしてくれます。

本当にサーバーは要らないの?

正確には、サーバーは AWS 側にありますが、あなたが用意・管理する必要がありません。動いた時間のぶんだけ料金がかかり、動いていない間は料金もかかりません。「使うときだけ立ち上がる」イメージです。

Goal

Lambda で Python の関数を作り、テスト実行のボタンを押すと、用意したプログラムが動いて結果(あいさつ文)が返ってくることを、コンソール上で確認する。

04 — Architecture

つくる構成

関数には「入力」を渡し、関数が「処理」をして、「出力(結果)」が返ってきます。今回は、名前を渡すと、あいさつ文を作って返す関数を作ります。

入力(event)
名前:太郎
Lambda 関数
あいさつ文を作る
出力(結果)
こんにちは、太郎さん!
関数は「入力を受け取って → 処理して → 結果を返す」という流れで動きます。これはプログラムの最も基本のかたちです。
05 — Requirements

要件

以下の要件を満たす Lambda 関数を作り、実行してください。

No要件
1リージョンは「東京(ap-northeast-1)」を使用する。
2Lambda 関数を 1 つ作成する。ランタイム(実行する言語)は Python(最新版でよい)。関数名は hello-function(例)。
3関数のコードを、本文のサンプル(名前を受け取ってあいさつ文を返す)に置き換えて保存(デプロイ)する。
4テストイベントに名前(例:{"name": "太郎"})を設定し、テスト実行する。
5実行結果として、あいさつ文(例:「こんにちは、太郎さん!」)が返ることを確認する。
06 — Steps

構築の進め方

「関数を作る → コードを貼る → 入力を決める → 実行する」の順に進みます。コードは貼り付けるだけで大丈夫。意味は 1 行ずつ説明します。

  1. マネジメントコンソールにサインインし、リージョンを合わせる

    ブラウザで AWS マネジメントコンソールにサインインし、画面右上のリージョンが「アジアパシフィック(東京)ap-northeast-1」になっていることを確認します。

  2. Lambda 関数を新しく作る

    画面上部の検索バーに Lambda と入力してコンソールを開き、「関数の作成」を押します。「一から作成」を選び、関数名hello-functionランタイムPython(最新版)を選んで、そのまま「関数の作成」を押します。

    関数の作成 — オプションの選択(イメージ)

    関数の作成方法

    一から作成
    シンプルな関数をゼロから作る
    Blueprint を使用
    用途別のサンプルコードから始める
    コンテナイメージ
    コンテナイメージから関数を作る

    今回はシンプルな関数なので「一から作成」を選びます

    ランタイムとは

    「ランタイム」は、プログラムを動かすための言語の種類とバージョンのことです。今回は Python を選びます。難しい設定は不要で、初期状態のまま作成して構いません。

  3. コードを貼り付けて保存する

    作成すると、画面の下のほうに「コードソース」というエディタが現れ、最初から少しコードが入っています。その中身をすべて消して、次のコードを貼り付けてください。貼り付けたら、エディタの上にある「Deploy(デプロイ)」を押して保存します。

    📝 ざっくり言うと:名前を受け取って、あいさつ文を作って返すプログラムです。(細かい意味は、コードの下で 1 行ずつ説明します)

    lambda_function.py(このまま貼り付け)
    def lambda_handler(event, context):
        name = event["name"]
        message = "こんにちは、" + name + "さん!"
        return message
    • def lambda_handler(event, context):この関数の「入口」を宣言しています。AWS は、関数が呼ばれるとこの lambda_handler を実行します。かっこの中の event に、呼び出すときに渡された情報が入ってきます。
    • name = event["name"]渡された情報(event)の中から name という項目を取り出して、name という入れ物(変数)に入れています。= は「右のものを左に入れる」記号です。
    • message = "こんにちは、" + name + "さん!"あいさつ文を組み立てています。+ は文字をつなげる記号です。name が「太郎」なら、message は「こんにちは、太郎さん!」になります。
    • return message組み立てた message を「結果」として返します。return は「これを答えとして返す」という意味です。
    字下げ(インデント)に注意

    2〜4 行目の先頭には空白(半角スペース)が入っています。Python では、この字下げが「この行は関数の中身です」という意味を持つ大切なルールです。貼り付けた字下げは消さないようにしましょう。

  4. テストイベント(入力)を用意する

    エディタの上にある「テスト」を押します。はじめてのときは、テストイベントの作成画面が出ます。イベント名test1 など適当な名前を付け、入力欄の内容を次に置き換えて保存します。

    テストイベント(入力する内容)
    {
      "name": "太郎"
    }
    これが「入力」

    この { "name": "太郎" } が、関数に渡される event の中身になります。コードの event["name"] は、ここから「太郎」を取り出していた、というわけです。名前は好きなものに変えて構いません。

  5. テスト実行して、結果を確認する

    もう一度「テスト」を押すと、関数が実行されます。画面に「実行結果: 成功」と表示され、結果の欄に 「こんにちは、太郎さん!」が返っていれば成功です。テストイベントの名前を変えて実行すると、あいさつ文も変わることを確かめてみましょう。

    うまくいくと…

    サーバーを 1 台も立てていないのに、書いたプログラムがちゃんと動いて結果を返しました。これが Lambda(サーバーレス)の手軽さです。

07 — Pitfalls

つまずきポイント

初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直せばよいか」の手がかりとして使ってください。

Pitfall 01 — 実行すると「KeyError: 'name'」と出る

「エラーになって、結果が返らない」

これは、コードが取り出そうとした name が、入力(テストイベント)の中に見つからなかったときに出ます。①テストイベントの内容が { "name": "太郎" } になっているかname のつづりが、コードと入力で一致しているか(大文字小文字も区別されます)を見直しましょう。

Pitfall 02 — 「IndentationError」と出る/コードが保存できない

「字下げに関するエラーが出る」

Python は行の先頭の字下げ(空白)を文法として扱います。2〜4 行目の先頭に空白が必要で、空白の量がそろっていないとエラーになります。サンプルを貼り付け直し、字下げを崩していないか確認しましょう。また、コードを変えたら「Deploy」で保存してから実行することも忘れずに。

08 — Checklist

完了チェック

要件の再確認ではなく、画面のどこを見れば達成を確認できるかをまとめました。Lambda コンソールを開いて、次を順に確かめましょう。

  • 「関数」一覧に hello-function があり、ランタイムが Python になっている。
  • 「コードソース」に、貼り付けたサンプルコードが入っていて、「Deploy」済み(変更が保存されている)。
  • テストイベントに { "name": "..." } が設定されている。
  • テスト実行すると 「実行結果: 成功」と表示される。
  • 結果の欄に、あいさつ文(例:「こんにちは、太郎さん!」)が返っている。
09 — Think

考えてみよう

手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。

  1. 関数は「入力を受け取って → 処理して → 結果を返す」という流れで動きました。テストイベントの name を別の名前に変えると、結果はどうなったでしょうか。入力と出力の関係を、自分の言葉で説明してみましょう。
    ヒント
    同じプログラムでも、入力(渡す名前)が変わると、出力(あいさつ文)も変わりました。プログラムは「決まった手順」で、入力に応じて結果を作る、という関係をイメージしてみましょう。
  2. 今回はサーバーを 1 台も立てませんでした。「サーバーを 1 台立てて、そこでこのプログラムを動かし続ける」場合と比べて、Lambda にはどんな良さ(とくに料金や手間の面)があるでしょうか。
    ヒント
    サーバーを立てると、使っていない時間も動かし続けるぶん料金や管理の手間がかかります。Lambda は呼ばれたときだけ動き、止まっている間は料金がかかりません。「たまにしか動かさない小さな処理」にどちらが向くか、という観点で考えてみましょう。
  3. このあいさつを返す関数は、今は「テスト」ボタンでしか動かせません。実際のサービスでは、何かをきっかけに自動で動いてほしいはずです。Lambda は、どんなきっかけ(出来事)で動かせると便利でしょうか。身近な例を想像してみましょう。
    ヒント
    「ボタンを押したら」「ファイルが置かれたら」「決まった時刻になったら」「Web からアクセスがあったら」——いろいろなきっかけが考えられます。Lambda は、こうした出来事をきっかけに自動で動かすことができます。どんな自動化があると便利か、想像してみましょう。
10 — Clean up

後片づけ

学習で作った関数は、残しておいても料金はほとんどかかりませんが、整理のために片づけておくと安心です。

  1. 関数を削除する:Lambda コンソールの「関数」一覧で hello-function を選び、「アクション」→「削除」を選びます。確認の入力を求められたら、入力して削除します。
  2. 残しておく場合:練習として手元に残しておいても構いません。呼び出さなければ、基本的に料金は発生しません。
Caution — 削除すると元に戻せない

消す前に、残したいコードはメモしておく

関数を削除すると、その中のコードも一緒に消えます。あとで使いたいコードがあれば、削除する前にどこかにコピーして残しておきましょう。

コストに関する注意: Lambda は、関数が呼び出されて動いた回数と時間に応じて課金されます。動いていない間は料金がかかりません。さらに、毎月かなりの回数・実行時間までの無料利用枠(一般的に月 100 万回の呼び出しと一定の実行時間)があり、今回のような学習での数回〜数十回の実行は、ほぼ確実に無料の範囲に収まります。関数を作って置いておくだけ(呼び出さない状態)では、基本的に料金はかかりません。気になる場合は、上の「後片づけ」で関数を削除しておきましょう。最新の料金は AWS の公式料金ページで確認してください。