TerraformでAWS Lambda関数を作成する方法:シンプルな実装ガイド
はじめに
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関数をデプロイするには、以下の手順を実行します:
- 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関数の作成、更新、削除が簡単になり、開発者の生産性が向上します。また、バージョン管理システムと組み合わせることで、インフラストラクチャの変更履歴も簡単に追跡できます。
このアプローチを活用して、より効率的なクラウドネイティブアプリケーションの開発に取り組んでみてください。
リポジトリ
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
Discussion