[PYTHON] Terraform konfiguriert, um AWS Lambda von Amazon SQS aus zu starten

Einführung

Ich bin ein SRE-Ingenieur. @ Hayaosato. Dieses Mal möchte ich AWS Lambda (im Folgenden: Lambda) von Amazon SQS (im Folgenden: SQS) anrufen, das sich hervorragend zum Erstellen einer serverlosen Architektur eignet. Der Code lautet hier

die Architektur

Lambda Lambda-Ressourcen können wie folgt erstellt werden. Die Anwendung ist ein Skript für Slack-Benachrichtigungen.

// 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
    }
  }
}

Verwenden Sie beim Erstellen einer Lambda-Funktion mit Terraform die Archivressource "archive_file". Auf diese Weise können Sie einen Reißverschluss erstellen und auf die Lambda-Funktion anwenden, was sehr einfach ist. Mit anderen Worten, Sie können diese Konfiguration einfach in CI integrieren und Terraform Apply über das CI-Tool anwenden.

SQS SQS-Ressourcen können wie folgt erstellt werden.

resource "aws_sqs_queue" "default" {
  name                        = "${var.service_name}.fifo"
  fifo_queue                  = true
  content_based_deduplication = true
}

Zusammenarbeit zwischen SQS und Lambda

Terraform verfügt über eine Ressource namens lambda_event_source_mapping zum Festlegen von Lambda-Triggern. Dieses Mal werde ich dies verwenden.

resource "aws_lambda_event_source_mapping" "default" {
  event_source_arn = aws_sqs_queue.default.arn
  function_name    = aws_lambda_function.default.arn
}

Da diese Ressource derzeit nur SQS, DynamoDB und Kinesis unterstützt, kann sie nicht über SNS verknüpft werden (das Wrack der Ressource, die zum Verknüpfen des Codes mit SNS erstellt wurde ...). Wenn Sie die ARN einer Ressource einfügen, die nicht in "event_source_arn" angegeben werden kann, wird "..." unendlich erstellt. Das Ereignis von S3 kann jedoch normal ausgeführt werden.

Ergebnis

Stellen wir tatsächlich eine Warteschlange mit der erstellten Ressource aus und führen sie aus. スクリーンショット 2019-12-02 23.08.34.png Ich war in der Lage スクリーンショット 2019-12-02 23.08.55.png

Schließlich

Immerhin ist serverlos gut

Referenz

Recommended Posts

Terraform konfiguriert, um AWS Lambda von Amazon SQS aus zu starten
Senden Sie eine Anfrage von AWS Lambda an Amazon Elasticsearch Service
Tweet von AWS Lambda
Erstellen Sie Einstellungen in Terraform, um Nachrichten von AWS Lambda Python3.8 an Slack zu senden
Amazon SNS → AWS Lambda → Slack → Führen Sie AWS-Befehle in AWS Chatbot aus
So starten Sie AWS Batch über die Python-Client-App
Hinweise zum Zugriff auf SQS von AWS VPC Lambda über den Endpunkt
AWS Lambda Layers Eine kurze Erklärung von der Erstellung bis zur Verknüpfung
[Lambda] [Python] Von Lambda auf Twitter posten!
Vorsichtsmaßnahmen beim Ausführen von Python unter EC2 über AWS Lambda (Befehl ausführen)
So starten Sie den Explorer über die WSL
Ändern Sie die AWS EC2-Instanz von t2 in t3
Poste regelmäßig mit AWS Lambda auf Twitter!
Zugriff auf RDS von Lambda (Python)
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
[Amazon Linux] Wechsel von der Python 2-Serie zur Python 3-Serie
Zusammenfassung des Schreibens von AWS Lambda
[AWS; Einführung in Lambda] 2. Extrahieren Sie Sätze aus der JSON-Datei und speichern Sie S3 ♬
[Einführung in AWS] Das erste Lambda ist Transcribe ♪
[AWS / Lambda] Laden einer externen Python-Bibliothek
Zusammenfassung des Studiums von Python zur Verwendung von AWS Lambda
Amazon API Gateway und AWS Lambda Python-Version
[AWS] Migrieren Sie Daten von DynamoDB nach Aurora MySQL