Рубрики
Uncategorized

Соедините Postgres База данных с использованием функции лямбда

Используйте Slackbot для отправки сообщения SQS, которые вызывают функцию Lambda для выполнения команды SQL в базе данных … Помечено с AWS, DevOps, Postgres, Lambda.

Используйте Slackbot для отправки сообщения SQS, которые вызывают функцию Lambda для выполнения команды SQL в базе данных

Этот пост ориентирован на создание очереди SQS и функции лямбда (не как создать Slackbot)

1. Создать очередь SQS с помощью CDK (Toolkit Cloud Development)

Источник: https://github.com/vumdao/create-db-user/tree/master/sqs_stack.

└── sqs_stack
    ├── app.py
    ├── cdk.json
    ├── README.md
    ├── requirements.txt
    ├── setup.py
    ├── source.bat
    └── sqs_stack
        ├── __init__.py
        └── sqs_stack_stack.py

Примечания:

  • Имя квс: Create-DB-аккаунт
  • Timeout видимости SQS по умолчанию должен быть равным или выше, чем время ожидания функции лямбда, которая подписана на
  • Развертывать SQS.
cdk deploy

2. Создание функции лямбда, которая запускается очередью SQS с использованием CAWS Chalice

Источник: https://github.com/vumdao/create-db-user/tree/master/lambda.

├── lambda
│   ├── app.py
│   ├── policy
│   ├── region.env
│   └── requirements.txt

Функция лямбда принимает сообщение SQS для выполнения SQL создания нового пользователя на RDS

chalice new-project create-db-user

Установите VPC для функции лямбда в то же время с RDS, базами Chalice AWS в текущем регионе и идентификатору подсети для обнаружения VPC, безопасность является обязательным для использования подсети ID

      "subnet_ids": [
         "subnet-0f6ea4292ab9a63db",
         "subnet-00d29b42b2e17b5b5"
      ],
      "security_group_ids": ["sg-00668399e4bdd462e"]

Отключить роль Mange IAM от CAWS Chalice для контроля политики роли

      "manage_iam_role": false,
      "iam_role_arn": "arn:aws:iam::111111111111:role/create-db-user-dev",

Политика

    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:*:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "sqs:ReceiveMessage",
                "sqs:DeleteMessage",
                "sqs:GetQueueAttributes"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeNetworkInterfaces",
                "ec2:CreateNetworkInterface",
                "ec2:DeleteNetworkInterface",
                "ec2:DescribeInstances",
                "ec2:AttachNetworkInterface"
            ],
            "Resource": "*"
        }
    ]
}           

Лямбда не разрешает имя хоста напрямую, поэтому имя хоста RDS разрешено с помощью функции сокета

host=socket.gethostbyname(DB_HOST)

Разверните лямбда

chalice deploy

Тестовое задание

Примечания:

  • Функция Lambda удалит сообщение SQS, если нет проблем.
  • Сообщение SQS уйдет туда, пока не настолько время на видимости по умолчанию, поэтому следует обрабатывать любое исключение, чтобы удалить сообщение

Оригинал: «https://dev.to/vumdao/connect-postgres-database-using-lambda-function-1mca»