Je suis ingénieur SRE. @hayaosato. Cette fois, j'aimerais appeler AWS Lambda (ci-après, Lambda), qui est très pratique pour créer une architecture sans serveur, à partir d'Amazon SQS (ci-après, SQS). Le code est ici
Lambda Les ressources Lambda peuvent être créées comme suit. L'application est un script pour les notifications slack.
// IAM Role for Lambda Function
resource "aws_iam_role" "default" {
name = var.service_name
description = "IAM Rolw for ${var.service_name}"
assume_role_policy = file("${var.service_name}_role.json")
}
resource "aws_iam_policy" "default" {
name = var.service_name
description = "IAM Policy for ${var.service_name}"
policy = file("${var.service_name}_policy.json")
}
resource "aws_iam_role_policy_attachment" "default" {
role = aws_iam_role.default.name
policy_arn = aws_iam_policy.default.arn
}
// Lambda Function Resources
resource "aws_cloudwatch_log_group" "default" {
name = "/aws/lambda/${var.service_name}"
retention_in_days = 7
}
data archive_file "default" {
type = "zip"
source_dir = "src"
output_path = var.output_path
}
resource "aws_lambda_function" "default" {
filename = var.output_path
function_name = var.service_name
role = aws_iam_role.default.arn
handler = "lambda_function.lambda_handler"
source_code_hash = data.archive_file.default.output_base64sha256
runtime = "python3.6"
environment {
variables = {
SLACK_API_KEY = var.SLACK_API_KEY
}
}
}
Lors de la création d'une fonction Lambda avec Terraform, veuillez utiliser la ressource d'archive ʻarchive_file. En utilisant cela, vous pouvez générer un zip et l'appliquer à la fonction Lambda tel quel, ce qui est très simple. En d'autres termes, vous pouvez simplement incorporer cette configuration dans CI et
terraform apply` à partir de l'outil CI.
SQS Les ressources SQS peuvent être créées comme suit.
resource "aws_sqs_queue" "default" {
name = "${var.service_name}.fifo"
fifo_queue = true
content_based_deduplication = true
}
Terraform dispose d'une ressource appelée lambda_event_source_mapping pour définir les déclencheurs Lambda. Cette fois, je vais l'utiliser.
resource "aws_lambda_event_source_mapping" "default" {
event_source_arn = aws_sqs_queue.default.arn
function_name = aws_lambda_function.default.arn
}
De plus, comme cette ressource ne prend actuellement en charge que SQS, DynamoDB et Kinesis, elle ne peut pas être liée à partir de SNS (l'épave de la ressource créée pour lier le code avec SNS ...). Si vous mettez l'ARN d'une ressource qui ne peut pas être spécifiée dans ʻevent_source_arn`, elle créera ... ʻinfiniment. Cependant, l'événement de S3 peut être exécuté normalement.
Lançons en fait une file d'attente avec la ressource créée et exécutons-la. J'étais capable de
Après tout, c'est bien sans serveur