この記事では、AWSのSimple Queue Service(SQS)とLambdaをTerraformを使用して統合する方法について説明します。具体的には、SQSキューからLambda関数をトリガーする設定と、Lambda関数からSQSキューにメッセージを送信する設定に焦点を当てます。
SQSキューからLambdaをトリガーする
必要なリソース
- SQSキュー
- Lambda関数
- IAMロール
- VPC設定(VPC内でLambdaを実行する場合)
ステップバイステップ
1.SQSキューの作成
resource "aws_sqs_queue" "example_queue" {
name = "example-queue"
}
2.Lambda関数の作成
resource "aws_lambda_function" "example_lambda" {
function_name = "example_lambda_function"
// VPC設定
vpc_config {
subnet_ids = [aws_subnet.example_subnet.id]
security_group_ids = [aws_security_group.lambda_sg.id]
}
}
3.IAMロールの作成
resource "aws_iam_role" "lambda_exec_role" {
name = "lambda_exec_role"
assume_role_policy = jsonencode({
Version = "2012-10-17",
Statement = [
{
Action = "sts:AssumeRole",
Effect = "Allow",
Principal = {
Service = "lambda.amazonaws.com"
},
},
],
})
}
4.イベントソースマッピングの設定
resource "aws_lambda_event_source_mapping" "example_mapping" {
event_source_arn = aws_sqs_queue.example_queue.arn
function_name = aws_lambda_function.example_lambda.arn
batch_size = 10
}
LambdaからSQSへのメッセージ送信
Lambda関数の設定
Lambda関数がSQSキューにメッセージを送信するためのIAMロールとポリシーを設定し、Lambda関数を定義します。
resource "aws_iam_role" "lambda_exec_role" {
// IAMロールの設定...
}
resource "aws_iam_role_policy" "lambda_sqs_policy" {
// IAMポリシーの設定...
}
resource "aws_lambda_function" "producer_lambda" {
// Lambda関数の設定...
}
モジュールの使用と出力
モジュールの定義
モジュール内でリソースを定義し、必要な出力を設定します。
# モジュール内のoutputs.tf
output "lambda_function_arn" {
value = aws_lambda_function.example_lambda.arn
description = "ARN of the Lambda function"
}
モジュールの使用
モジュールを使用して出力を取り出します。
module "example_module" {
source = "./path/to/module"
}
output "module_lambda_function_arn" {
value = module.example_module.lambda_function_arn
description = "ARN of the Lambda function from the module"
}
まとめ
この記事では、Terraformを使用してAWSのSQSとLambdaを統合する方法を紹介しました。SQSキューからLambda関数をトリガーする設定と、Lambda関数からSQSキューにメッセージを送信する設定の両方をカバーしました。