1. ホーム
  2. 記事一覧
  3. サーバーレス初心者必見!AWS Lambda関数URLの設定と実践方法

2024.06.19

サーバーレス初心者必見!AWS Lambda関数URLの設定と実践方法

はじめに

APIを公開したり、バックエンド処理を迅速に構築したいのに、サーバーの管理や設定で困ったことはありませんか?それを解決するのがAWS Lambda関数URLです。この記事では、AWS初心者向けにLambda関数URLの設定と利用方法について解説します。Lambda関数URLを使用することで、HTTPリクエストをトリガーとしてサーバーレスアーキテクチャを簡単に構築できます。実際の現場では、APIの公開を迅速に行いたい場合や、バックエンド処理を効率的に行いたい場合に非常に有用です。Lambda関数URLの基本から、実際の設定手順まで丁寧に説明していきますので、ぜひ最後までお読みください。

用語解説と利用シーン

AWS Lambda関数URLを使用すると、HTTPリクエストをトリガーとしてサーバーレスアーキテクチャを簡単に構築できます。Terraformを使って必要なAWSリソースを自動的にプロビジョニングし、IAMロールでLambda関数の権限管理を行います。以下に、これらの技術と用語の簡単な説明を行います。

用語解説

  • AWS Lambda

    AWS Lambdaは、サーバーレスコンピューティングサービスで、イベント駆動型のコード実行を行います。サーバー管理を必要とせず、スケーラビリティが高いです。ここでは、HTTPリクエストを受け取ると「Hello, World!」と返す簡単なLambda関数を作成します。 Lambdaについては次の記事で詳しく解説しています。

    https://envader.plus/article/60

  • IAMロール

    IAMロールは、AWSリソースにアクセス権を与えるための認証情報を持つロールです。Lambda関数が実行される際に必要な権限を提供します。この記事の中では、Lambda関数が正しく実行されるために必要な権限を持つIAMロールを作成します。

  • Terraform

    Terraformは、インフラストラクチャーをコードとして管理・構築するツールです。宣言的な設定ファイルを使用して、クラウドリソースを自動的にプロビジョニングします。この記事で使用する手順に従って、Terraformを用いてLambda関数とその関連リソースを作成します。 Terraformの導入はこちらの記事をご参照ください。

    https://envader.plus/article/162

  • IAMユーザー

    IAMユーザーは、AWSリソースへのアクセスを持つユーザーアカウントです。Lambda関数URLにアクセスするために使用されます。この手順では、Lambda関数URLを呼び出すためのIAMユーザーを作成します。

実際の開発現場での利用シーン

Lambda関数URLは、以下のような状況で役立ちます。

  • 簡易なAPIの作成

    API Gatewayを使用せずに、簡単にHTTPエンドポイントを公開できます。開発期間の短縮とプロトタイプの迅速な作成が可能です。

  • バックエンド処理

    ユーザーからのリクエストを受け取り、それに応じた処理をLambda関数で行う場合に便利です。サーバーレスアーキテクチャにより、自動でスケーリングが行われます。

  • バッチ処理のトリガー

    特定の条件下でバッチ処理をトリガーするエンドポイントとして利用できます。たとえば、特定の時間帯にデータ処理を行うためのトリガーとして活用できます。

AWS Lambda関数URLを使用することで、柔軟かつ迅速にHTTPベースのサービスを構築・運用することが可能になります。AWS初心者でも、この手順に従うことで、簡単にLambda関数を作成し、URLを公開することができます。

Lambda関数URLの実装

それでは実際に、Lambda関数URLを設定し利用する手順を見ていきましょう。ここでは、Terraformを使って必要なAWSリソースを構築し、シンプルなLambda関数を作成します。

ディレクトリ構成

まずはプロジェクトのディレクトリを作成し、その配下のディレクトリ構成を以下のように設定します。

.
├── main.tf
└── lambda_code
    └── lambda_function.py

Lambda関数コード (lambda_code/lambda_function.py)

以下は、シンプルなPythonコードで書かれたLambda関数です。この関数は、リクエストを受け取ると「Hello, World!」というレスポンスを返します。

def handler(event, context):
    return {
        'statusCode': 200,
        'body': 'Hello, World!'
    }

Terraform設定ファイル (main.tf)

次に、Terraformを使ってAWSリソースを構築します。以下のコードをmain.tfファイルに記述します。リージョンは日本(ap-northeast-1)に設定し、各リソースの働きを示すコメントを追加しています。

provider "aws" {
  region = "ap-northeast-1"  # 使用するAWSリージョンを指定
}

# IAMロールの作成
resource "aws_iam_role" "lambda_execution_role" {
  name = "lambda_execution_role"

  assume_role_policy = jsonencode({
    Version = "2012-10-17",
    Statement = [
      {
        Effect = "Allow",
        Principal = {
          Service = "lambda.amazonaws.com"
        },
        Action = "sts:AssumeRole"
      }
    ]
  })
}

# IAMロールに基本実行ポリシーをアタッチ
resource "aws_iam_role_policy_attachment" "lambda_basic_execution" {
  role       = aws_iam_role.lambda_execution_role.name
  policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}

# Lambda関数のコードをZIPファイルにアーカイブ
data "archive_file" "lambda_zip" {
  type        = "zip"
  source_dir  = "${path.module}/lambda_code"
  output_path = "${path.module}/lambda_function.zip"
}

# Lambda関数の作成
resource "aws_lambda_function" "hello_world" {
  filename         = data.archive_file.lambda_zip.output_path  # Lambda関数のコードが格納されたZIPファイル
  function_name    = "hello_world"
  role             = aws_iam_role.lambda_execution_role.arn
  handler          = "lambda_function.handler"
  runtime          = "python3.12"
  source_code_hash = data.archive_file.lambda_zip.output_base64sha256
}

# Lambda関数URLの作成
resource "aws_lambda_function_url" "hello_world_url" {
  function_name = aws_lambda_function.hello_world.function_name
  authorization_type = "AWS_IAM"  # IAM認証を使用

  cors {
    allow_origins = ["*"]
    allow_methods = ["*"]
  }
}

# Lambda関数URLにアクセスするためのIAMユーザーの作成
resource "aws_iam_user" "lambda_invoker" {
  name = "lambda_invoker"
}

# IAMユーザーにLambda関数URL呼び出し権限を付与するポリシーの作成
resource "aws_iam_user_policy" "lambda_invoker_policy" {
  name   = "lambda_invoker_policy"
  user   = aws_iam_user.lambda_invoker.name

  policy = jsonencode({
    Version = "2012-10-17",
    Statement = [
      {
        Effect   = "Allow",
        Action   = "lambda:InvokeFunctionUrl",
        Resource = aws_lambda_function_url.hello_world_url.function_url
      }
    ]
  })
}

# Lambda関数URLの出力
output "lambda_function_url" {
  value = aws_lambda_function_url.hello_world_url.function_url
}

Terraformコマンドの実行

次に、以下のコマンドを使用してTerraformの設定を適用します。

  1. ディレクトリに移動し、terraform initを実行してTerraformを初期化します。

    terraform init
  2. terraform applyを実行してリソースを作成します。

    terraform apply
  3. terraform applyを実行すると、出力にLambda関数URLが表示されます。このURLを使って、IAMユーザーの認証情報を使用して関数を呼び出すことができます。

デプロイの確認

Terraformでリソースを作成した後、Lambda関数URLが正しく動作するか確認してみましょう。作成したURLを使用してLambda関数が期待通りに動作するかをテストします。

Lambda関数URLのテスト

  1. Terraformの出力から取得したLambda関数URLをコピーします。

  2. IAMユーザーの認証情報を設定します。AWS CLIを使用して認証情報を設定する例を示します。

    aws configure
  3. cURLコマンドを使用してLambda関数URLにリクエストを送信します。

    curl -X GET "<取得したLambda関数URL>"
  4. 正常に動作していれば、「Hello, World!」というレスポンスが返ってきます。

この手順で、デプロイしたLambda関数が正しく動作することを確認できます。

まとめ

この記事では、AWS Lambda関数URLの設定と利用方法について解説しました。Lambda関数URLを使うことで、HTTPリクエストをトリガーとしてサーバーレスアーキテクチャを簡単に構築できることを学びました。また、Terraformを用いてリソースを自動的にプロビジョニングし、IAMロールやIAMユーザーを設定する方法も紹介しました。実際の開発現場で、迅速にAPIやバックエンド処理を構築する際に、この手法が役立つことでしょう。

AWS初心者の方も、これらの手順に従って簡単にLambda関数を作成し、URLを公開することができます。こういった技術を一つ一つ積み上げることで、一流のクラウドエンジニア、DevOpsに近づくことができます。

参考資料

【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

「フリーランスエンジニア」

近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

「成功する人とそうでない人の違いは何か?」

私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

note記事3000いいね超えの殿堂記事 今すぐ読む

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事