![見出し画像](https://assets.st-note.com/production/uploads/images/103182869/rectangle_large_type_2_871bca89038d51f5a467ea84736a5ea1.jpeg?width=1200)
AWS Lambdaの使い方
AWS Lambda
AWS Lambda(ランダ)は、Amazon Web Services(アマゾンウェブサービス)のサービスの一つで、コンピュータープログラム(コード)を実行できるサービスです。サーバーを用意する必要がなく、コードをアップロードして実行するだけで機能します。これは、プログラムを実行するのに時間やお金をかけずに、すぐに作業を始められるので便利です。
なぜ Lambda が便利なのか
サーバーレス: Lambda はサーバーレスと呼ばれる技術を使っています。サーバーレスは、サーバーを管理する必要がなく、コードを実行できる環境を提供するものです。これにより、開発者はサーバーの設定や管理を気にせず、コードの開発に集中できます。
スケーラブル: Lambda は、アプリケーションの利用が増えたり減ったりしても、自動的に対応できる機能があります。これにより、常に適切なリソースが利用できるため、パフォーマンスが向上します。
コスト効率: Lambda は、実際にコードが実行されるときだけ課金されるので、コストが抑えられます。これは、従来のサーバーに比べて、お金を節約できることを意味します。
Lambda の使い方
Lambda は、さまざまなシチュエーションで使われます。例えば:
イベントドリブン: 他の AWS サービス(S3、DynamoDB など)からイベントを受け取り、それに応じてコードを実行できます。例えば、S3 にファイルがアップロードされると、自動的に画像をリサイズする Lambda 関数を実行することができます。
API Gateway との組み合わせ: Lambda を API Gateway と組み合わせて、独自の API を作成できます。これにより、ウェブサイトやアプリケーションからデータを取得・送信することができます。
スケジュールされたタスク: Lambda は、定期的に実行するタスク(バックアップやメール送信など)にも使われます。これにより、定期的なメンテナンス作業を自動化できます。
Lambda と他の AWS サービスとの関係
Lambda は、他の AWS サービスと連携して機能を拡張できます。以下に、Lambda がどのように他の AWS サービスと連携するかを説明します。
Amazon S3: S3 は、ファイルを保存できるオンラインストレージサービスです。Lambda と S3 を組み合わせると、ファイルがアップロードされたときや削除されたときなど、特定のイベントが発生したときに Lambda 関数を自動的に実行できます。
Amazon EC2: EC2 は、仮想サーバーを提供するサービスです。Lambda と EC2 を組み合わせることで、EC2 インスタンスの状態変更やアラーム発生時に Lambda 関数を実行し、自動的にスケーリングや通知などのアクションを行うことができます。
Amazon DynamoDB: DynamoDB は、高速でスケーラブルな NoSQL データベースサービスです。Lambda を使って、DynamoDB のテーブルにデータが追加・更新・削除されたときに、自動的に関連する処理を実行できます。
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 バケットのイベント通知設定を行います。以下の手順で設定できます。
AWS マネジメントコンソールにログインし、S3 サービスに移動します。
トリガーに使用するバケットを選択し、「プロパティ」タブをクリックします。
「イベント通知」をクリックし、「イベント通知を作成」ボタンをクリックします。
イベント通知の名前を入力し、「イベント ソース」で「すべてのオブジェクト作成イベント」を選択します。
「Lambda 関数」を選択し、作成した Lambda 関数を指定します。
「イベント通知を保存」ボタンをクリックして設定を保存します。
これで、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イベントからバケット名とオブジェクトキー(ファイル名)を取得しています。それぞれの変数について、説明します。
event['Records'][0]:event は、Lambda 関数をトリガーするイベントの情報が入った辞書です。Records というキーには、イベントのリストが含まれています。今回は、1つのイベントだけが想定されているため、[0] を使って最初のイベントを取得しています。
['s3']['bucket']['name']:これは、イベントからS3バケットの名前を取得するためのキーの階層です。イベント内の s3 キーには、S3に関する情報が含まれており、さらに bucket キーの中には、バケットに関する情報があります。最後に、name キーでバケット名を取得しています。
['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=ファイル名」という形式で情報が表示されます。これにより、開発者はどのファイルがアップロードされたかを確認できます。
処理結果を返す: この部分では、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を使うことで、開発者はより簡単に効率的なアプリケーションを構築することができます。