Help us understand the problem. What is going on with this article?

AWS Lambdaビギナーがテストイベントを作成して関数を実行するまで。

More than 3 years have passed since last update.

Lambdaとは

  • アップロードした関数を実行してくれる
  • 実行環境はJavaScript, Java, C#, Python
  • アップロードされた関数は都度実行され、終わると破棄されるステートレスな構成
  • 最大稼働時間は5分
  • 課金単位が「実行時間」なので、実行されていない時は費用がかからない
  • API Gatewayと組み合わせると、Lambda関数をREST形式のWeb APIとして呼び出すことができる

Lambda関数

  • Lambda関数はS3(Simple Storage Service)やSES(Simple Email Services)などで発生するイベントをトリガーとして呼び出される

Lambdaを使うまで

以下、Lambdaを使うまでの手順を紹介します。

IAMを設定する

まずはIAMを設定します。
IAMはIdentity and Access Managementの略で、IAMで作成したユーザーに対して、AWSリソースに対するユーザー認証やアクセス制限を行うことができます。
http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id.html

マネジメントコンソールで「IAM」と検索します。
IAM Management Console 2017-12-29 14-29-36.png

ユーザーを追加します。
IAM Management Console 2017-12-29 15-44-06.png

ユーザー名などを記載したら、Next:Permissionsをクリックします。
IAM Management Console 2017-12-29 15-45-54.png

次のアクセス権限を設定する画面では、既存のポリシーを直接アタッチ(Attach existing policies directory)をクリックします。

そして、AWSLambdaFullAccessにチェックを入れます。

IAM Management Console 2017-12-29 15-49-06.png

次の画面で「ユーザーの作成」をクリックします。

すると、次の画面でAccess key IDやSecret access key, Passwordが表示されるので、情報を保存してください。

IAM作成が完了した際に表示される画面にはhttps://XXXXXXXXXXX.signin.aws.amazon.com/consoleのようなURLが表示されていると思います。

そのURLをクリックすると、作成したIAMユーザーでログインすることができます。
場合に応じて、AmazonAPIGatewayAdministratorAmazonSESFullAccessAmazonSQSFullAccessなど、Lambdaから操作したいサービスへのアクセス権限を追加してください。

Lambda関数を作成してみる

AWSのServiceからLambdaを選択します。
Lambda Management Console 2017-12-29 16-00-03.png

なんかカッコいい画面が出てくるので、「Create a function」をクリックしましょう。

Lambda Management Console 2017-12-29 16-06-29.png

次に関数を作っていきます。

Lambda Management Console 2017-12-29 16-09-00.png
Lambda Management Console 2017-12-29 16-09-48.png

上記のイメージ通り作成しようとしていたら、「You are not authorized to perform:iam:CreateRole」というエラーが出ました。

Lambda Management Console 2017-12-29 16-11-50.png

以下のStackoverflowの記事によると、iam:attachRolePolicyiam:createPolicyが足りないようですが...。
https://stackoverflow.com/questions/34946609/giving-access-to-aws-lambda-service-with-limited-policy

以下に手順が書いてあったので、試してみます。

「IAM ユーザーにアクセス権限を委任するロールの作成」
http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_create_for-user.html

一度サインアウトして、ルートアカウントでログインし直します。
その後、IAMのサービスを開きます。

IAM ユーザーにアクセス権限を委任するロールの作成

ロール > ロールの作成
をクリックします(日本語にしました)
IAM Management Console 2017-12-29 16-39-22.png

「信頼されたエンティティの種類を選択」で「AWSサービス」を選択します。

IAM Management Console 2017-12-29 16-42-38.png

「AWSLambdaBasicExecutionRole」のポリシーをあたっちします。
次の画面でロールに名前をつけます。
ここで画像を貼りたいのですが、Qiitaのサーバから「画像を載せすぎだ!」と怒られため、アップロードできませんでした。

しかし、このようにロールを作成すると、Lambdaの関数作成画面でロール「既存のロールを選択」で、先ほど作ったロールを選択できるようになります。

IAMで作ったユーザーにはロールを作成する管理者権限がないため、新規に作成しようとすると怒られていたのでした。

いよいよ関数を実行する

「Lambda > 関数 > 関数名」

の画面の下の方にコードを書く場所があります。
ここに実行したい関数を書きましょう。

def lambda_handler(event, context):
    key1 = event['key1']
    key2 = event['key2']
    key3 = event['key3']
    result = "key1=" + key1 + " key2=" + key2 + " key3="+key3
    return result

ソースコードを書いたら右上の「保存」をクリックします。

次に、画面の右上に「テストイベントの選択」とあるので、そこのプルダウンから「テストイベントの設定」を選びます。

次の画面で以下のイベントを作成して、テストを実行してみます。

イベントテンプレート「Hello World」
イベント名「testEvent」

{
  "key3": "value3",
  "key2": "value2",
  "key1": "value1"
}

で、右上の「テスト」をクリックすると、「実行結果:成功」と表示されます。
ログはCloudWatch内に保存されます。

実行結果の詳細を見ると、「"key1=value1 key2=value2key3=value3"」と返ってきたことがわかります。

sho7
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away