由于 CloudFormation 本身不支持为 RDS 数据库创建数据库用户,因此我正在寻找通过 CustomResource 执行此操作的方法。但是,即使我编写了由 Lambda 函数支持的 CustomResource,我也看不到允许我将用户添加到数据库实例的 RDS API 端点。
谁能建议为 Postgres 10 数据库引擎支持的 Aurora 集群创建数据库用户的潜在方法?
由于 CloudFormation 本身不支持为 RDS 数据库创建数据库用户,因此我正在寻找通过 CustomResource 执行此操作的方法。但是,即使我编写了由 Lambda 函数支持的 CustomResource,我也看不到允许我将用户添加到数据库实例的 RDS API 端点。
谁能建议为 Postgres 10 数据库引擎支持的 Aurora 集群创建数据库用户的潜在方法?
我没有看到允许我将用户添加到数据库实例的 RDS API 端点。
通常,您会将自定义资源设置为在创建 RDS 后触发。因此,您可以使用例如函数环境变量将 RDS 端点 url 传递给 lambda 。
实际上,自定义资源上的DependsOn属性可用于确保在成功创建 RDS 后触发自定义资源。如果您通过环境变量传递 RDS url,则不需要。
使用示例 lambda 更新代码,该示例使用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