【保存版】AWS Lambda使い方完全ガイド:初心者でもわかる0からの構築術

Lambda使い方ガイド AWS
スポンサーリンク

「AWS Lambdaってどうやって使うのだろう?難しそう…」

そんな不安を感じている方も多いのではないでしょうか。

実は、想像以上にシンプルに使い始めることができます。

従来のWebサービス開発では、サーバーの準備から始まり、様々な管理作業が必要でした。
しかし、AWS Lambdaを使えば、そういった煩わしい作業から解放されます。

必要なのは、実行したいコードを書いて、アップロードするだけです。
あとは、AWSが自動的にサーバーの管理をしてくれます。

本記事では、AWS Lambdaの基本的な使い方から、実践的な活用方法まで、順を追って解説していきます。
特に、以下のような方におすすめです:

  • Lambdaをこれから使ってみたいと思っている方
  • Lambdaがどういったサービスなのか知りたい方
  • なるべく簡単に使い方を知りたい方

さらに、AWS Lambdaには無料枠があるため、学習目的であれば費用をかけずに始められます。
それでは、解説していきたいと思います!

スポンサーリンク

初心者向けステップバイステップガイド

AWS Lambdaを使い始めるのに、難しい準備は必要ありません。
この章では、初めての方でも迷わないように、順を追って説明していきます。

準備:AWSアカウントを作ろう

まずは、AWSのアカウントを作成しましょう。
無料枠が用意されているため、学習目的であれば費用をかけずに使うことができます。

アカウント作成の手順

  1. AWS公式サイトにアクセスします。
  2. 右上の「アカウントを作成」をクリックします。
  3. メールアドレスと必要な情報を入力します。
  4. クレジットカード情報の入力を求められますが、これは無料利用枠を超えた場合のためです。
    無料枠の範囲内なら請求は発生しません。

無料枠でできること

AWS Lambdaの無料枠は、以下の範囲で利用することができます。

項目無料枠の上限目安となる使用例
リクエスト数月100万回まで1日あたり約3万回のリクエストが可能
実行時間月40万GB秒まで1GBメモリの関数なら、約11時間の実行が可能

詳細を知りたければ、以下の記事も参考になるのため、ぜひご覧ください。

Step 1:最初のLambda関数を作ろう

では、実際にLambda関数を作ってみましょう。

まずは、シンプルな「Hello World」プログラムから始めます。

Lambda関数の作成手順

  1. AWSマネジメントコンソールにログインします。
  2. 検索バーに「Lambda」と入力し、サービスを選択します。
  3. 「関数の作成」ボタンをクリックします。
  4. 以下の設定を選びます:
    ・「一から作成」を選択
    ・関数名:「HelkloWorld」と入力
    ・ランタイム「Python3.9」を選択
  5. 「関数の作成」をクリックします。

プログラムを書いてみよう

作成した関数に、以下のコードを入力します。

def lambda_handler(event, context):
    # メッセージを返す簡単な関数
    return {
        'statusCode': 200,  # 成功を示すステータスコード
        'body': 'Hello from Lambda!'  # 返すメッセージ
    }

このコードは、「Hello from Lambda!」というメッセージを返すだけの簡単なものです。

Step 2:関数をテストしてみよう

作成した関数が正しく動くか、確認してみましょう。

テストの手順

  1. 「テスト」タブをクリックします。
  2. テストイベントの設定で「新しいイベントの作成」を選びます。
  3. イベント名を「TestEvent」として保存します。
  4. 「テスト」ボタンをクリックします。

テスト結果の見方

テストが成功すると、以下のような結果が表示されます:

{
    "statusCode": 200,
    "body": "Hello from Lambda!"
}

「実行結果:成功」と表示されれば、おめでとうございます!
最初のLambda関数が動きました。

Step 3:ログを確認してみよう

Lambda関数の動きを詳しく知るために、ログを確認してみましょう。

ログは「CloudWatch」というサービスに記録されています。

ログの確認方法

  1. Lambda関数の画面で「モニタリング」タブを選びます。
  2. 「CloudWatchのログを表示」をクリックします。
  3. 最新のログストリームを選択すると、関数の実行ログが表示されます。

ログを見ることで、関数がいつ実行されて、どんな結果が返されたのかが分かります。
これは、後でトラブルが起きたときの調査にも役立ちます。

次のステップに向けて

基本的なLambda関数の作成と実行ができるようになりました。
ここまでの操作に慣れてきたら、次は実践的な使い方を学んでいきましょう。
次の章では、実務でよく使われるLambda関数の例を紹介します。

実務での活用例

AWS Lambdaは、実際の業務でどのように使われているのでしょうか?
この章では、特に初心者の方でも取り組みやすい実践的な例を紹介します。

画像処理の自動化

Webサイトやアプリで画像を扱う際、サイズの最適化は重要な課題です。
AWS Lambdaを使えば、この作業を自動化できます。

具体的な使用例:画像の自動リサイズ

たとえば、ECサイトで商品画像をアップロードする際の処理を考えてみましょう。

Lambda関数を使うと、以下のような自動化が実現できます:

  1. 商品画像をS3バケットにアップロード
  2. 自動的にLambda関数が起動
  3. 画像を複数サイズに変換(PC用、スマホ用、サムネイル用など)
  4. 変換した画像を保存

以下が、実際のPythonコードの例です:

import boto3
from PIL import Image
import io

def lambda_handler(event, context):
    # S3クライアントの準備
    s3 = boto3.client('s3')

    # アップロードされた画像の情報を取得
    source_bucket = event['Records'][0]['s3']['bucket']['name']
    source_key = event['Records'][0]['s3']['object']['key']

    # 画像をメモリに読み込み
    image_data = s3.get_object(Bucket=source_bucket, Key=source_key)['Body'].read()
    image = Image.open(io.BytesIO(image_data))

    # 異なるサイズに変換
    sizes = {
        'thumbnail': (150, 150),
        'mobile': (800, 800),
        'desktop': (1200, 1200)
    }

    # 各サイズの画像を保存
    for size_name, dimensions in sizes.items():
        resized = image.copy()
        resized.thumbnail(dimensions)

        # 変換した画像をS3に保存
        buffer = io.BytesIO()
        resized.save(buffer, format=image.format)
        s3.put_object(
            Bucket=f"{source_bucket}-resized",
            Key=f"{size_name}/{source_key}",
            Body=buffer.getvalue()
        )

    return {
        'statusCode': 200,
        'body': 'Images resized successfully'
    }

このコードを使えば、画像のアップロード後の処理を完全に自動化できます。

定期的なデータ処理の自動化

毎日、毎週、または毎月行う必要がある処理はありませんか?
Lambda関数を使えば、そういった定期的な作業も自動化できます。

具体例:日次レポートの自動生成

たとえば、以下のような処理を自動化できます:

  1. 毎朝9時にデータを収集
  2. CSVファイルに整形
  3. 関係者にメール送信
import boto3
import pandas as pd
from datetime import datetime

def lambda_handler(event, context):
    # データの収集と加工
    data = collect_daily_data()  # データ収集用の関数

    # CSVファイルの作成
    report_date = datetime.now().strftime('%Y-%m-%d')
    filename = f'daily_report_{report_date}.csv'

    # S3に保存
    s3 = boto3.client('s3')
    s3.put_object(
        Bucket='reports-bucket',
        Key=filename,
        Body=data.to_csv()
    )

    # メール送信
    send_notification(filename)  # メール送信用の関数

    return {
        'statusCode': 200,
        'body': 'Report generated and sent'
    }

APIの作成

Webサービスを作る際、APIは重要な要素です。
Lambda関数とAPI Gatewayを組み合わせることで、簡単にAPIを作成できます。

具体例:シンプルなWeb API

以下は、ユーザー情報を返すAPIの例です:

import json

def lambda_handler(event, context):
    # ユーザーIDをパスパラメータから取得
    user_id = event['pathParameters']['userId']

    # 実際のプロジェクトでは、ここでデータベースに接続してユーザー情報を取得
    user_info = {
        'id': user_id,
        'name': 'テストユーザー',
        'email': 'test@example.com'
    }

    return {
        'statusCode': 200,
        'headers': {
            'Content-Type': 'application/json'
        },
        'body': json.dumps(user_info, ensure_ascii=False)
    }

実践的なヒント

これらの例を試す際は、以下のポイントに注意しましょう:

開発のコツ

  1. まずは小さく始める
    ・シンプルな機能から作り始めて、徐々に機能を追加していきましょう。
  2. エラー処理を実装する
    ・実運用では、想定外のエラーが発生することもあります。
    ・例外処理等を使って、適切にエラーをハンドリングしましょう。
  3. ログを活用する
    print文やloggingモジュールを使って、動作確認用のログを残しましょう。
    ・CloudWatchで確認できます。

コスト管理

実務で使用する際は、コストにも注意が必要です。

項目コスト削減のポイント
メモリ設定必要最小限のメモリサイズを設定する
実行時間処理を効率化し、実行時間を短くする
リクエスト数不要なリクエストを減らす

コストの詳細はこちらの記事を参照。

よくあるトラブルと解決方法

AWS Lambdaを使っていると、誰でも一度はトラブルに遭遇します。

でも、心配いりません。

よくあるトラブルには、定番の解決方法があります。

この章では、初心者がよく経験するトラブルと、その具体的な解決手順を説明します。

関数が実行されないときの対処法

「Lambda関数を作ったのに、動いてくれない…」

これは、最もよくある悩みの一つです。

主な原因と解決方法

  1. 権限の問題
   # 権限が足りない場合のエラー例
   botocore.exceptions.ClientError: 
   An error occurred (AccessDenied) when calling the GetObject operation: 
   Access Denied

解決手順:

  1. IAMロールの設定を確認
  2. 必要な権限を追加
   {
       "Version": "2012-10-17",
       "Statement": [
           {
               "Effect": "Allow",
               "Action": ["s3:GetObject"],
               "Resource": "arn:aws:s3:::your-bucket/*"
           }
       ]
   }
  1. トリガーの設定ミス 確認ポイント:
  • トリガーが有効になっているか
  • イベントパターンが正しいか
  • 設定が保存されているか

タイムアウトの問題を解決する

Lambda関数が途中で切れてしまう…。

これは、タイムアウトが原因かもしれません。

タイムアウト対策の具体例

# 改善前:タイムアウトしやすいコード
def lambda_handler(event, context):
    for item in huge_data_list:  # 大量のデータを処理
        process_item(item)        # 時間のかかる処理

# 改善後:バッチ処理で効率化
def lambda_handler(event, context):
    # 残り時間を確認しながら処理
    timeout = context.get_remaining_time_in_millis()

    for batch in chunks(huge_data_list, 100):  # 100件ずつ処理
        if timeout < 10000:  # 残り10秒を切ったら中断
            break
        process_batch(batch)
        timeout = context.get_remaining_time_in_millis()

メモリ不足のトラブル

「メモリが足りません」というエラーが出たら、以下の手順で対応しましょう。

メモリ使用量の最適化

# メモリを効率的に使うコードの例
def lambda_handler(event, context):
    # 大きなファイルを扱う場合
    with open('/tmp/large_file.txt', 'w') as f:  # /tmpディレクトリを活用
        process_and_write(f)  # ストリーミング処理

    # メモリ消費の多いライブラリを使う場合
    del some_large_object  # 不要なオブジェクトは積極的に削除

エラーログの確認方法

トラブル解決の第一歩は、エラーログの確認です。

CloudWatchでログを見る手順

  1. AWSコンソールでCloudWatchを開く
  2. ロググループから該当の関数を選択
  3. 最新のログストリームを確認
# ログを効果的に残すコード例
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    try:
        logger.info(f"処理開始: {event}")  # 開始ログ

        result = process_data(event)

        logger.info(f"処理成功: {result}")  # 成功ログ
        return result

    except Exception as e:
        logger.error(f"エラー発生: {str(e)}")  # エラーログ
        raise  # エラーを再度発生させる

トラブル対応のチェックリスト

問題が発生したら、以下の順序で確認していきましょう:

確認項目チェックポイントよくある問題
ログ確認CloudWatchログエラーメッセージの特定
権限確認IAMロール設定必要な権限の不足
メモリ確認設定値と使用量メモリ不足によるエラー
タイムアウト実行時間の設定処理時間超過

トラブル予防のベストプラクティス

  1. テスト環境の活用
   # テスト用のイベントデータ
   test_event = {
       "test_key": "test_value",
       "numbers": [1, 2, 3]
   }

   # ローカルでテストする
   def test_lambda_function():
       response = lambda_handler(test_event, None)
       assert response['statusCode'] == 200
  1. エラーハンドリングの実装
   def lambda_handler(event, context):
       try:
           # メイン処理
           result = main_process(event)

           return {
               'statusCode': 200,
               'body': result
           }

       except ValueError as e:
           # 想定内のエラー処理
           return {
               'statusCode': 400,
               'body': str(e)
           }

       except Exception as e:
           # 想定外のエラー処理
           logger.error(f"予期せぬエラー: {str(e)}")
           return {
               'statusCode': 500,
               'body': 'Internal server error'
           }
  1. 予防的な対策を講じる
    ・テストを充実させる
    ・モニタリングを設定する

次の章では、AWS Lambdaのさらなる学習に向けて、次のステップをご紹介します。

次に学ぶべきこと

基本的な使い方を理解したところで、AWS Lambdaの可能性をさらに広げていきましょう。

この章では、スキルアップのための具体的なロードマップをご紹介します。

他のAWSサービスとの連携を学ぼう

Lambda単体でも便利ですが、他のAWSサービスと組み合わせることで、できることが大きく広がります。
いくつか例を紹介します。

DynamoDBとの連携

DynamoDBは、Lambdaと相性の良いデータベースサービスです。

# DynamoDBを使ったシンプルなTodoアプリの例
import boto3

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('TodoItems')

def lambda_handler(event, context):
    # Todo項目を追加する
    response = table.put_item(
        Item={
            'user_id': event['user_id'],
            'task': event['task'],
            'status': 'pending'
        }
    )
    return {
        'statusCode': 200,
        'body': 'Todo項目が追加されました'
    }

API Gatewayの活用

API GatewayとLambdaを組み合わせると、本格的なWebAPIが作れます。

# RESTful APIの例
def lambda_handler(event, context):
    # HTTPメソッドに応じて処理を分岐
    http_method = event['httpMethod']

    if http_method == 'GET':
        return get_items()
    elif http_method == 'POST':
        return create_item(event['body'])
    elif http_method == 'PUT':
        return update_item(event['body'])
    elif http_method == 'DELETE':
        return delete_item(event['pathParameters'])

AWS認定資格にチャレンジしよう

AWSの資格は、あなたのスキルを証明する強力な武器になります。

おすすめの学習ステップ

  1. AWS認定クラウドプラクティショナー
  • AWSの基礎知識を体系的に学べます
  • 合格しやすい入門レベルの資格です
  1. AWS認定デベロッパーアソシエイト
  • Lambda、DynamoDB、API Gatewayなどの開発スキルが評価されます
  • 実務で役立つ知識が身につきます
  1. AWS認定ソリューションアーキテクトアソシエイト
  • システム設計の知識が評価されます
  • キャリアの幅が大きく広がります

役立つ学習リソース

AWS Lambdaの理解を深めるために、以下のリソースがおすすめです。

公式ドキュメント

  • AWS Lambda開発者ガイド
  • AWSサーバーレスワークショップ

オンライン学習プラットフォーム

  • AWS Skill Builder(無料コンテンツあり)
  • Udemy、CourseraのAWS関連コース

コミュニティ

  • AWS User Group
  • Stack Overflow
  • GitHub

まとめ

AWS Lambdaは、現代のクラウド開発において重要な技術です。

この記事で学んだことは、あなたのキャリアにおける大きな一歩になるはずです。

ぜひ、実際に手を動かして、AWS Lambdaの可能性を探ってみてください。

そして、困ったときは、この記事に立ち返ってみてください。

きっと、あなたの開発ライフをより豊かにするヒントが見つかるはずです。

あなたのチャレンジを、心から応援しています!

プロフィール
この記事を書いた人
katsuya

SESからキャリアをスタートし、現在はフリーランスとして活動しています。フリーランスになってから6年で年収1,000万円を達成しました。「Study Infra」では、今までの経験やITインフラに関する情報を発信中です。

katsuyaをフォローする
AWSLambda
スポンサーリンク
シェアする
katsuyaをフォローする

コメント

タイトルとURLをコピーしました