🐶

TerraformでAWS Lambda関数を作成する方法:シンプルな実装ガイド

2024/08/12に公開

はじめに

AWSのサーバーレスコンピューティングサービスであるLambdaは、アプリケーション開発において非常に強力なツールです。本記事では、Terraformを使用してAWS Lambda関数を簡単に作成する方法を、aws-terraform-sandboxプロジェクトのs04_simple_lambdaサンプルを参考に解説します。

プロジェクト構成

まず、プロジェクトの基本構成を確認しましょう。

s04_simple_lambda/
├── main.tf
├── variables.tf
├── terraform.tfvars
├── client.py
└── lambda/
    └── test/
        └── src/
            └── test_terraform.py

Terraform設定ファイル

3.1 main.tf

main.tfは、Terraformプロジェクトの中心となるファイルです。ここでは、Lambda関数とそれに関連するAWSリソースを定義します。

provider "aws" {
  region = var.aws_region
}

resource "aws_lambda_function" "test_terraform" {
  function_name    = "test_terraform"
  filename         = data.archive_file.test_terraform.output_path
  source_code_hash = data.archive_file.test_terraform.output_base64sha256
  runtime          = "python3.9"
  role             = aws_iam_role.lambda.arn
  handler          = "test_terraform.handler"

  environment {
    variables = {
      ENVIRONMENT = var.environment
    }
  }
}

# その他のリソース定義(VPC、サブネット、セキュリティグループなど)

3.2 variables.tf

variables.tfでは、プロジェクトで使用する変数を定義します。

variable "aws_region" {
  description = "The AWS region to deploy resources in"
  type        = string
}

variable "project_name" {
  description = "The name of the project"
  type        = string
}

# その他の変数定義

3.3 terraform.tfvars

terraform.tfvarsで、variables.tfで定義した変数に具体的な値を設定します。

aws_region           = "ap-northeast-1"
project_name         = "simple-lambda-demo"
vpc_cidr             = "10.0.0.0/16"
public_subnet_cidr   = "10.0.1.0/24"
private_subnet_cidr  = "10.0.2.0/24"
lambda_function_name = "simple-lambda-demo_test_lambda"
environment          = "dev"

Lambda関数の実装

Lambda関数の実装はlambda/test/src/test_terraform.pyで行います。

import json

def handler(event, context):
    print('test')
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

デプロイ手順

Lambda関数をデプロイするには、以下の手順を実行します:

  1. Terraformの初期化:
terraform init
  1. 実行プランの確認:
terraform plan
  1. リソースのデプロイ:
terraform apply

Lambda関数の呼び出し

デプロイしたLambda関数を呼び出すには、client.pyスクリプトを使用します:

import boto3
import json

def invoke_lambda():
    lambda_client = boto3.client('lambda', region_name='ap-northeast-1')
    response = lambda_client.invoke(
        FunctionName='test_terraform',
        InvocationType='RequestResponse',
        Payload=json.dumps({})
    )
    return json.loads(response['Payload'].read())

if __name__ == "__main__":
    result = invoke_lambda()
    print(result)

リソースの削除

プロジェクトが不要になった場合は、以下のコマンドでリソースを削除できます:

terraform destroy

まとめ

本記事では、Terraformを使用してAWS Lambda関数を簡単に作成する方法を解説しました。この方法を利用することで、インフラストラクチャをコードとして管理し、効率的にサーバーレスアプリケーションを開発することができます。

Terraformとの組み合わせにより、Lambda関数の作成、更新、削除が簡単になり、開発者の生産性が向上します。また、バージョン管理システムと組み合わせることで、インフラストラクチャの変更履歴も簡単に追跡できます。

このアプローチを活用して、より効率的なクラウドネイティブアプリケーションの開発に取り組んでみてください。

リポジトリ

https://github.com/Sunwood-ai-labs/aws-terraform-sandbox/tree/main/sandbox/s04_simple_lambda

<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Discussion