見出し画像

AWS Lambdaの使い方

AWS Lambda

AWS Lambda(ランダ)は、Amazon Web Services(アマゾンウェブサービス)のサービスの一つで、コンピュータープログラム(コード)を実行できるサービスです。サーバーを用意する必要がなく、コードをアップロードして実行するだけで機能します。これは、プログラムを実行するのに時間やお金をかけずに、すぐに作業を始められるので便利です。

なぜ Lambda が便利なのか

  1. サーバーレス: Lambda はサーバーレスと呼ばれる技術を使っています。サーバーレスは、サーバーを管理する必要がなく、コードを実行できる環境を提供するものです。これにより、開発者はサーバーの設定や管理を気にせず、コードの開発に集中できます。

  2. スケーラブル: Lambda は、アプリケーションの利用が増えたり減ったりしても、自動的に対応できる機能があります。これにより、常に適切なリソースが利用できるため、パフォーマンスが向上します。

  3. コスト効率: Lambda は、実際にコードが実行されるときだけ課金されるので、コストが抑えられます。これは、従来のサーバーに比べて、お金を節約できることを意味します。

Lambda の使い方

Lambda は、さまざまなシチュエーションで使われます。例えば:

  1. イベントドリブン: 他の AWS サービス(S3、DynamoDB など)からイベントを受け取り、それに応じてコードを実行できます。例えば、S3 にファイルがアップロードされると、自動的に画像をリサイズする Lambda 関数を実行することができます。

  2. API Gateway との組み合わせ: Lambda を API Gateway と組み合わせて、独自の API を作成できます。これにより、ウェブサイトやアプリケーションからデータを取得・送信することができます。

  3. スケジュールされたタスク: Lambda は、定期的に実行するタスク(バックアップやメール送信など)にも使われます。これにより、定期的なメンテナンス作業を自動化できます。

Lambda と他の AWS サービスとの関係

Lambda は、他の AWS サービスと連携して機能を拡張できます。以下に、Lambda がどのように他の AWS サービスと連携するかを説明します。

  1. Amazon S3: S3 は、ファイルを保存できるオンラインストレージサービスです。Lambda と S3 を組み合わせると、ファイルがアップロードされたときや削除されたときなど、特定のイベントが発生したときに Lambda 関数を自動的に実行できます。

  2. Amazon EC2: EC2 は、仮想サーバーを提供するサービスです。Lambda と EC2 を組み合わせることで、EC2 インスタンスの状態変更やアラーム発生時に Lambda 関数を実行し、自動的にスケーリングや通知などのアクションを行うことができます。

  3. Amazon DynamoDB: DynamoDB は、高速でスケーラブルな NoSQL データベースサービスです。Lambda を使って、DynamoDB のテーブルにデータが追加・更新・削除されたときに、自動的に関連する処理を実行できます。

  4. AWS Step Functions: Step Functions は、複数の Lambda 関数をつなげて、より複雑な処理を実現するためのサービスです。Lambda 関数をステップとして組み合わせ、順序付けや並列実行、エラー処理などを簡単に実装できます。


AWS Lambda 関数を

トリガーするPython のコード


import json
import boto3

def lambda_handler(event, context):
    # S3イベントからバケット名とオブジェクトキーを取得
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']

    # ログにファイル情報を出力
    print(f"File uploaded to S3: Bucket={bucket}, Key={key}")

    return {
        'statusCode': 200,
        'body': json.dumps('File processed successfully!')
    }

次に、この Lambda 関数をトリガーするように、S3 バケットのイベント通知設定を行います。以下の手順で設定できます。

  1. AWS マネジメントコンソールにログインし、S3 サービスに移動します。

  2. トリガーに使用するバケットを選択し、「プロパティ」タブをクリックします。

  3. 「イベント通知」をクリックし、「イベント通知を作成」ボタンをクリックします。

  4. イベント通知の名前を入力し、「イベント ソース」で「すべてのオブジェクト作成イベント」を選択します。

  5. 「Lambda 関数」を選択し、作成した Lambda 関数を指定します。

  6. 「イベント通知を保存」ボタンをクリックして設定を保存します。

これで、S3 バケットにファイルがアップロードされると、自動的に Lambda 関数がトリガーされ、ログにファイルの情報が出力されます。

この例では、ログに情報を出力するだけですが、実際には、ファイルの内容を分析したり、他の AWS サービスと連携したりする処理を Lambda 関数内で行うことができます。

Lambda 関数の event と context について


  • event: これは、Lambda 関数をトリガーするイベントの情報を含む Python の辞書です。この例では、S3 からのファイルアップロードイベントが Lambda 関数をトリガーしています。event 辞書には、アップロードされたファイルのバケット名やオブジェクトキー(ファイル名)などの情報が含まれています。この情報を使用して、Lambda 関数内でさまざまな処理を行うことができます。

  • context: これは、Lambda 関数の実行に関する情報と機能を提供するオブジェクトです。例えば、関数の実行時間や、AWS Lambda が関数を実行するリソースなどの情報が含まれています。このオブジェクトは、通常、関数内で直接使用することは少ないですが、タイムアウトの管理や他の AWS サービスとの連携などの処理で必要になることがあります。

上記のコード例では、event 辞書からバケット名 (bucket) とオブジェクトキー (key) を取得し、それらの情報をログに出力しています。最後に、Lambda 関数の実行が成功したことを示すステータスコード 200 とメッセージを返しています。

S3イベントからバケット名とオブジェクトキーを取得について

S3イベントからバケット名とオブジェクトキー(ファイル名)を取得しています。それぞれの変数について、説明します。

  1. event['Records'][0]event は、Lambda 関数をトリガーするイベントの情報が入った辞書です。Records というキーには、イベントのリストが含まれています。今回は、1つのイベントだけが想定されているため、[0] を使って最初のイベントを取得しています。

  2. ['s3']['bucket']['name']:これは、イベントからS3バケットの名前を取得するためのキーの階層です。イベント内の s3 キーには、S3に関する情報が含まれており、さらに bucket キーの中には、バケットに関する情報があります。最後に、name キーでバケット名を取得しています。

  3. ['s3']['object']['key']:これは、イベントからS3オブジェクトのキー(ファイル名)を取得するためのキーの階層です。イベント内の s3 キーには、S3に関する情報が含まれており、さらに object キーの中には、オブジェクト(アップロードされたファイル)に関する情報があります。最後に、key キーでオブジェクトキー(ファイル名)を取得しています。

以上の説明により、コードは以下のように理解できます。

  • 最初のイベントの情報を取得 (event['Records'][0])

  • そのイベントからバケット名を取得 (event['Records'][0]['s3']['bucket']['name'])

  • そのイベントからオブジェクトキー(ファイル名)を取得 (event['Records'][0]['s3']['object']['key'])

簡単に言えば、S3にファイルがアップロードされると、そのアップロードに関連するイベントが発生します。Lambda関数は、そのイベントを受け取り、そのイベントの情報を元に処理を行います。ここでの「最初のイベントの情報」とは、その最新のアップロードイベントの情報を指しています。中学生にもわかりやすく説明すると、S3にファイルがアップロードされたときに起こる最新の出来事(イベント)の情報を取得しているということです。

ログにファイル情報を出力について

ログにファイル情報を出力: この行は、print()関数を使って、アップロードされたファイルの情報をログに出力しています。f"File uploaded to S3: Bucket={bucket}, Key={key}"という文字列は、アップロードされたファイルが保存されているS3のバケット名とファイル名(オブジェクトキー)を含んでいます。この行を実行すると、ログには「File uploaded to S3: Bucket=バケット名, Key=ファイル名」という形式で情報が表示されます。これにより、開発者はどのファイルがアップロードされたかを確認できます。

  1. 処理結果を返す: この部分では、return文を使って、Lambda関数の実行結果を返しています。statusCode: 200は、処理が成功したことを示すHTTPステータスコードです。body: json.dumps('File processed successfully!')は、処理結果のメッセージをJSON形式に変換しています。このメッセージは、「File processed successfully!」という文字列です。これにより、Lambda関数が正常に完了したことを示す情報が返されます。

このコードは、アップロードされたファイルの情報を表示して、処理が成功したことを伝えるメッセージを返しています。最初に、アップロードされたファイルの場所(バケット名とファイル名)をログに表示し、次に、「処理が成功しました!」というメッセージを返しています。

まとめ



AWS Lambdaは、クラウド上でコードを実行するサービスです。このサービスを使うことで、サーバーの設定や管理をせずに、必要な時に自動的にコードが実行されます。Lambdaは、様々なイベント(例えば、S3バケットへのファイルアップロード)に反応して動作することができます。

記事では、S3とLambdaの連携について説明しました。ファイルがS3バケットにアップロードされると、Lambda関数が自動的に実行されます。Lambda関数内では、アップロードされたファイルのバケット名とファイル名(オブジェクトキー)を取得し、ログに出力します。最後に、処理が成功したことを示すメッセージを返します。

Lambdaは、開発者が手軽にコードを実行できるため、さまざまな用途に利用できます。例えば、ウェブアプリケーションのバックエンド処理や、データの解析・処理などに使われています。Lambdaを使うことで、開発者はより簡単に効率的なアプリケーションを構築することができます。

この記事が気に入ったらサポートをしてみませんか?