はじめに
AWSのサーバーレスコンピューティングサービスであるLambdaは、アプリケーション開発において非常に強力なツールです。本記事では、Terraformを使用してAWS Lambda関数を簡単に作成する方法を、aws-terraform-sandboxプロジェクトのs04_simple_lambdaサンプルを参考に解説します。
「Terraform構成可視化要件定義書」を使って
AWS Lambdaにデビュー!!
まだ始めてだからシンプルな構成だけどこれからアップデートしてきたい!! https://t.co/t1vLENruw3 pic.twitter.com/xmxRcxvR3M— Maki@Sunwood AI Labs. (@hAru_mAki_ch) August 11, 2024
プロジェクト構成
まず、プロジェクトの基本構成を確認しましょう。
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関数をデプロイするには、以下の手順を実行します:
- Terraformの初期化:
 
terraform init
- 実行プランの確認:
 
terraform plan
- リソースのデプロイ:
 
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関数の作成、更新、削除が簡単になり、開発者の生産性が向上します。また、バージョン管理システムと組み合わせることで、インフラストラクチャの変更履歴も簡単に追跡できます。
このアプローチを活用して、より効率的なクラウドネイティブアプリケーションの開発に取り組んでみてください。
  
  
  
  

コメント