こんばんは、cloudpack@dz_ こと大平かづみです。

Prologue – はじめに

AWS Lambda の話をしていたら、プログラマの大先輩が「半年前に欲しかったわ~」と感想をこぼすほど、AWS Lambda はコード書く人はかなり興味のあるサービスなんです。

さぁ、前回「Check! AWS Lambda を理解しよう ~ 2つの動作モデル (pushモデル/pullモデル)」に引き続き、AWS Lambda ディベロッパーガイドの「Component: Lambda Function」を読み進めます。

Lambdaファンクション とは?

  • AWS Lambda にアップロードしたコード群 = Lambdaファンクション
  • コード群は、.zipファイルにまとめます(依存するライブラリも含む)
  • Lambdaサービスにプリインストールされているのは、AWS SDK for Node.js
  • AWS Lambdaコンソールエディタからアップロード、編集、実行が可能(他の依存ライブラリがない場合)
  • ほかのリソースやライブラリを利用する場合
    • その場合も、最初に Lambdaファンクションのデプロイメントパッケージの作成が必要
    • 作成後はコンソールや、AWS CLIを用いて更新
  • 利用するAWSリソースは準備しておき、パーミッションを付与することを忘れないように

Lambdaファンクション作成時のコンソール画面(preview)

AWS Lambdaのコンソール画面: Lambdaファンクションを作成

  1. Lambdaファンクションの名前と、ディスクリプション
  2. Lambdaファンクションのコード
    • インラインエディタ or .zipファイルのアップロードを選択
    • コードテンプレート (HelloWorld, S3オブジェクトの取得, なし)
    • ハンドラ名 (コードに、"exports. = function(.." としてハンドラを記述)
    • ロール名 (必要なIAMロールを設定)
  3. 高度な設定
    • メモリ(MB)
    • タイムアウト(秒)

ざっくりクイック和訳

After you upload your custom code to AWS Lambda, we refer to it as a Lambda function.

あなたがアップロードしたコードは、Lambdaファンクションと呼ばれます。

A Lambda function consists of code packaged in a .zip file, including any dependent libraries. Each Lambda function also has associated configuration information such as name, description, and run-time requirements like memory allocation.

Lambdaファンクションのコードは、.zipファイルでパッケージ化したものです。これには依存するライブラリも含みます。
それぞれのLambdaファンクションは、構成情報(名前、ディスクリプション、メモリアロケーションなどのランタイムの必要情報)と紐づけられています。

Depending on the resources your custom code uses, you have the following options when creating a Lambda function:

Lambdaファンクションの作成に際して、あなたのコードが使うリソースにより、以下の利用方法があります。

シンプルな使い方

If your custom code requires only the AWS SDK library, then you can use the inline editor in the AWS Lambda console. Using the console, you can upload, edit, and invoke your code.

もしコードでAWS SDKライブラリだけが利用する場合、AWS Lambdaコンソールインラインエディタを利用することができます。
このコンソールを使って、コードのアップロード、編集、実行ができます。

The console will zip up your code with the relevant configuration information into a deployment package that the Lambda service can run.

コンソールは、あなたのコードを、関連する構成情報とともに、Lambdaサービスが実行できるデプロイメントパッケージとしてzip にまとめてくれます。

Note that the Lambda service has preinstalled the AWS SDK for Node.js. For examples of Node.js, go to Examples Using Node.js in the AWS SDK for JavaScript.

Lambda サービスは、AWS SDK for Node.js がプリインストールされています。サンプルコードはAWS SDK for JavaScript のExamples Using Node.jsを参照してください。

さらに高度な使い方

If you are writing code that uses other resources, such as a graphics library for image processing, or you want to use the AWS CLI instead of the console, you need to first create the Lambda function deployment package, and then use the console or the CLI to upload the package.

画像処理用のライブラリなどの他のリソースを利用したい場合や、コンソールの代わりにAWS CLIを使いたい場合でも、あなたは最初にLambdaファンクションのデプロイメントパッケージを作成する必要があります。その後、パッケージをアップロードするときは、コンソールやCLIを利用してください。

その他に気を付けること

AWS resources your custom code needs—If your custom code uploads a new object to an Amazon S3 bucket make sure that the bucket exists.

あなたのコードが必要とするAWSリソースを事前に用意してください。
たとえば Amazon S3にあたらしいオブジェクトをアップロードするコードの場合、バケットは作成しておく必要があります。

Permission considerations—By default, all AWS resources are private. Only a resource owner (the AWS account that created the resource) can access the resource. So keep in mind that when your Lambda function executes, it will need permissions to access whatever AWS resources it needs. You grant these permissions to AWS Lambda via an IAM role (referred to it as “execution” role). For more information, see Component: Execution Role.

パーミッションをよく考慮してください。
デフォルトでは、すべてのAWSリソースはプライベートに設定されています。
リソースの所有者(リソースを作成したAWSアカウント)だけがリソースにアクセスできます。
ですので、Lambdaファンクションを実行するときは、どのAWSリソースでも適切なパーミッションが必要になることにご留意ください。それらのパーミッションはIAMロールを用いてAWS Lambdaに付与します。詳細は、後述の Component: Execution Role をご参照ください。

Epilogue – おわりに

今度は、Lmbdaファンクションのまとめで終わってしまいましたが…(汗)
そして、今やっと使える言語が Node.js であることを把握!jsは顔をしかめる人が多い中、私は結構好きです。
早くコードかくとこまでがんばりますー!

Check! AWS Lambda を理解しようシリーズ

Check! AWS Lambda を理解しよう ~ 2つの動作モデル (pushモデル/pullモデル)
Check! AWS Lambda を理解しよう(2) ~ Lambdaファンクションとコンソール」 (本記事)
続きもがんばります!