Используйте 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»