Создание облачной формы пользователя БД RDS - PullRequest
1 голос
/ 12 июля 2020

Поскольку CloudFormation изначально не поддерживает создание пользователя БД для базы данных RDS, я ищу способы сделать это через CustomResource. Однако даже если я напишу CustomResource, поддерживаемый функцией Lambda, я не вижу конечной точки RDS API, которая позволила бы мне добавить пользователя в экземпляр базы данных.

Может ли кто-нибудь предложить потенциальные способы создания БД Пользователь кластера Aurora, поддерживаемого ядром базы данных Postgres 10?

1 Ответ

0 голосов
/ 13 июля 2020

Я не вижу конечной точки RDS API, которая позволила бы мне добавить пользователя к экземпляру базы данных.

Обычно вы устанавливаете свой настраиваемый ресурс для запуска после создания RDS. Таким образом, вы можете передать URL-адрес конечной точки RDS в лямбда, используя, например, функцию переменные среды .

Практически атрибут DependsOn на вашем настраиваемом ресурсе может использоваться для убедитесь, что настраиваемый ресурс срабатывает после успешного создания RDS. На самом деле не требуется, если вы передаете URL-адрес RDS через переменные среды.

Обновите код, используя пример лямбда-выражения, который использует pymysql:

     
  MyLambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Handler: index.lambda_handler
      Role: !Ref ExecRoleArn
      Runtime: python3.7
      Environment:
        Variables: 
          DB_HOSTNAME: !Ref DbHostname
          DB_USER: !Ref DbMasterUsername
          DB_PASSWORD: !Ref DbMasterPassword
          DB_NAME: !Ref DbName
      VpcConfig:
        SecurityGroupIds: [!Ref SecurityGroupId]
        SubnetIds: !Ref SubnetIds
      Code:
        ZipFile: |
            import base64
            import json
            import os
            import logging
            import random
            import sys


            import pymysql
            import boto3

            rds_host  = os.environ['DB_HOSTNAME']
            rds_user = os.environ['DB_USER']
            rds_password = os.environ['DB_PASSWORD']
            rds_dbname = os.environ['DB_NAME']

            logger = logging.getLogger()
            logger.setLevel(logging.INFO)

            try:
                
                conn = pymysql.connect(rds_host, 
                                       user=rds_user,
                                       passwd=rds_password, 
                                       db=rds_dbname, 
                                       connect_timeout=5)
            except:
                logger.error("ERROR: Unexpected error: Could not connect to MySql instance.")
                sys.exit()          

            def lambda_handler(event, context):

                print(json.dumps(event))

                with conn.cursor() as cur:

                    cur.execute("create table if not exists Employee (EmpID  int NOT NULL auto_increment, Name varchar(255) NOT NULL, PRIMARY KEY (EmpID))")

                    conn.commit()

    
                return {
                    'statusCode': 200,
                    'body': ""
                }     


      Timeout: 60 # 
      MemorySize: 128
      Layers: 
        - arn:aws:lambda:us-east-1:113088814899:layer:Klayers-python37-PyMySQL:1


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