4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Lambdaでお手軽サーバーレス入門(とりあえず作ってみる編)

Last updated at Posted at 2018-09-29

初Qiitaです。
いろいろ不慣れな点はありますが、お手柔らかにお願いします。

前提

めっちゃ深く掘り下げるものではないです。
「Lambdaってこんなものなんやなー」っていうのが理解できるレベルを目指します。

私、社会人7年目ですが、AWSも2012年から使ってきたものの、実はこれまでEC2メインで使ってきました。
(C#/ASP.NETのWebアプリ開発)

ところがベトナムに海外転職して、ちょうど新規プロダクトの開発を始めることになったので、AWSラブな私としてはLambdaを使おう、となりました。

AWS Lambdaって?

いろいろ詳しいことは他記事に譲りますが、一言で言うと(言えるかな?)

難しいサーバー構築などなしに簡単にアプリのコードが動く!

といったところでしょうか。
たとえコードを書いても、何かしらそれを実行するための環境も必要です。
Webアプリの例だと、(物理的な、もしくはクラウドの)サーバーマシン、OS、Webサーバー(NginxやApache)、ランタイム(PythonやNode)…

そして、OSを用意するということは、自分でメンテナンスをする必要性もあります。
これがまた面倒…

なので、コードを動かすだけのプラットフォームがあれば…あっ、Lambdaがある!

簡単に作ってみる

実際に書いてみましょう。

AWSコンソールにログイン

AWSアカウントはご用意ください。
無料で作れます。
また画面はEnglishになっていますが、お好みで。

リージョンは東京を選んでみました。
(会社では本番にSingapore、ステージングにSydneyを使っているので、誰も使っていないという理由だけです。)
lambda01.png

Lambda management console

All servicesの下のComputeの下に、Lambdaがあるので、クリックします。
lambda02.png

Create functionをクリックすると、どのように作るかが表示されますが、最初から書いてみようと思うので、Author from scratchを選び、画面の項目を埋めていきます。

  • Runtime
    お好きな言語で。今回は私が慣れてきたPython3で書いてみます。

  • Role
    いろいろ選択肢があります。

    • Choose an existing role
      既にあるRoleを使いたい場合は、これを選択して、下のExisting roleで選びます。
    • Create a new role from one or more templates
      新しいロールを、テンプレートから選べます。今回はこれを使ってみます。
    • Create a custom role
      AWSのロールを自分で作れます。詳しい方はこちらを使ったほうが早そうですね。

2つめのオプションを選ぶと、ロール名と、テンプレートを選べます。

  • Policy templates
    選択肢がかなりありますが、今回は「Simple microservice permissions」にしてみます。
    足りなくなったらあとでRoleを編集しちゃおう。

lambda03.png

すべての項目が埋まったので、右下の「Create function」をクリック。

ファンクション画面

関数ができました。
Scratchといいつつ、少しだけコードを書いてくれています。
lambda04.png

ちょっとだけ解説

エディタの上の方に、3つほど設定するところがあります。

  • Code entry type
    Lambdaのコードをどのように格納するかを選べます。
    • Edit code inline
      エディタでコードを編集できます。
      インラインエディタでは、3MBまでの関数しか扱えません。これ以上の場合は、下2つのオプションしか使えません。
    • Upload a .zip file
      Zipファイルをアップロードして、Lambdaに格納できます。
    • Upload a file from Amazon S3
      ストレージサービスS3に保存したZipファイルをLambda関数として格納できます。
  • Runtime
    この関数を動かすランタイムを選べます。
    昔はNode, Pythonしかなかった記憶がありますが、いつのまにかどんどん増えてます。
  • Handler
    Lambda関数が動くときに、どのファイルのどの関数を実行するか、を指定します。
    初期値では lambda_function.lambda_handler となっていますが、これは「lambda_function.py」というファイルの「lambda_handler」という関数を指定していることになります。

Handlerとソースコードの関係についてちょっとだけ

Handlerで指定する関数には、必ず以下の2つの引数を設定しなければなりません。
足りなければエラーになります。

  • 1つ目(慣例的にevent
    実行時に渡すイベントが入ってます。
    Nodeであれば{}(ディクショナリ)、Pythonであればdictの形で入ります。
  • 2つ目(慣例的にcontext
    ランタイム情報が入っています。
    Pythonでの例
    申し訳ないんですが、私は使ったことがないです。

では、ひとまず動かしてみましょう。

Test

右上のTestをクリックすると、イベントの設定画面になります。
ここで指定したdict型のオブジェクトが、Handlerで指定した関数の1つ目の引数にそのまま入ります。
ここでは初期値のままにしてみます。
Event nameに好きな名前を指定して、Createをクリック。
lambda05.png

すると元の画面に戻りますが、右上のTestボタンの左には、先程作ったテストのイベント名が表示されます。

このまま、Testをもう一度クリックします。

lambda06.png

成功しました。
赤枠の部分に、出力が表示されます。
今回、関数の戻り値は次のような内容だったため、そのまま表示されました。

    return {
        "statusCode": 200,
        "body": json.dumps('Hello from Lambda!')
    }

では、eventを表示してみましょう。

    return {
        "statusCode": 200,
        "body": json.dumps(event)
    }

インラインエディタでも、多少はコード補完をしてくれます。
これを右上のSaveで保存してから、Testをクリックして実行すると…
lambda07.png
戻り値の内容が変わりました!

テストイベントを以下のように変えてみます。

{
  "name": "Ken'ichi Ogawa",
  "age": 29,
  "company": "AnyMind Group"
}

すると実行結果も…

lambda08.png

ちゃんと変わりました。

次回予告

せっかく書いたファンクションも、毎回Consoleから呼び出しているだけでは活用しきれていません。
いろんな呼び出し方について、記事を書いていきます!
次回:Lambdaでお手軽サーバーレス入門(呼び出し元のまとめ編)

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?