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
J'étais capable de

Après tout, c'est bien sans serveur