メむンコンテンツぞスキップ
芋出し画像

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を䜿うこずで、開発者はより簡単に効率的なアプリケヌションを構築するこずができたす。

     
     
    AI゚ンゞニア(元医療埓事者) 資栌E資栌、G怜定 蚘茉されおいる内容は、私個人の芋解に基づくものです。 これらの情報を掻甚する際は、自己の責任で行っおください。 たた、ご意芋やご指摘がある堎合は、コメント欄におお知らせいただければ幞いです。

    あなたぞのおすすめ