Terraform, Инфраструктура создана, но не связана должным образом, SQS, Lambda, CloudWatch - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь создать инфраструктуру AWS, используя Terraform.SQS, Lambda и CloudWatch.Я могу успешно создать инфраструктуру, но не могу связать ее должным образом.

т.е. CloudWatch будет запускать событие для лямбда-функции при добавлении / отправке сообщений SQS?

Я что-то здесь упускаю?

-----------------------------------------------------------

provider "aws" {
  region = "${var.REGION}"
}

# SQS
resource "aws_sqs_queue" "sqs-test" {
  name                      = "sqs-test"
  delay_seconds             = 0
  max_message_size          = 262144
  message_retention_seconds = 345600
  receive_wait_time_seconds = 10
}



#creating IAM roles to access Lamda.
resource "aws_iam_role" "iam_for_lambda" {
  name = "iam_for_lambda"
  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF
}

# Creating a Lambda function
resource "aws_lambda_function" "lambda-test" {
  filename         = "test.zip"
  function_name    = "lambda-test"
  role             = "${aws_iam_role.iam_for_lambda.arn}"
  handler          = "main"
  runtime          = "go1.x"
  environment {
    variables = {
      SQS_KEY = "${var.SQS_KEY}"
      SQS_SECRET = "${var.SQS_SECRET}"
      TESTING_QUEUE = "${aws_sqs_queue.sqs-test.id}"
    }
  }
}


# Creating a CloudWatch Events Rules where any changes in SQS will trigger Lamda function.
resource "aws_cloudwatch_event_rule" "console-cl-test" {
  name        = "capture-cl-sqs-test"
  description = "Captures SQS events"
  event_pattern = <<PATTERN
{
  "detail-type": [
    "Simple Queue Service"
  ]
}
PATTERN
}

# Assigning that event to trigger a Lamda function
resource "aws_cloudwatch_event_target" "lambda-tr-test" {
  rule      = "${aws_cloudwatch_event_rule.console-cl-test.name}"
  target_id = "lambda-test"
  arn       = "${aws_lambda_function.lambda-test.arn}"
}

-----------------------------------------------------------

1 Ответ

0 голосов
/ 18 мая 2018

Я бы предложил изменить архитектуру, чтобы использовать сообщения SQS по расписанию. Просто измените правило события cloudwatch, чтобы оно выполнялось по расписанию с меньшими интервалами, например, минутой или около того, и во время каждого выполнения принимайте как можно больше сообщений с помощью API SQS

Обновление

Источник событий SQS был добавлен в качестве триггера для лямбды AWS в июне 2018 года.

Ссылка: https://aws.amazon.com/blogs/aws/aws-lambda-adds-amazon-simple-queue-service-to-supported-event-sources/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...