Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from botocore.vendored import requests
- import json
- import pymysql
- SUCCESS = "SUCCESS"
- FAILED = "FAILED"
- def create_db(dbname, dbuser, dbpassword, rdsendpoint, rdsuser, rdspassword):
- conn = pymysql.connect(host=rdsendpoint,
- user=rdsuser,
- password=rdspassword)
- create_db_query = f"CREATE DATABASE {dbname};"
- create_user_query = f"CREATE USER {dbuser}@'%' IDENTIFIED BY '{dbpassword}';"
- grant_query = f"GRANT ALL PRIVILEGES ON {dbname}.* TO {dbuser}@'%'; FLUSH PRIVILEGES;"
- try:
- cursor = conn.cursor()
- cursor.execute(create_db_query)
- cursor.execute(create_user_query)
- cursor.execute(grant_query)
- cursor.close()
- conn.commit()
- conn.close()
- except Exception as err:
- return err
- return None
- def handler(event, context):
- db_name = ""
- db_user = ""
- db_password = ""
- rds_endpoint = ""
- rds_user = ""
- rds_password = ""
- physicalResourceId = ""
- input_props = event['ResourceProperties']
- required_props = ["DBName", "RDSEndpoint", "RDSUser", "RDSPassword"]
- missing_props = []
- for prop in required_props:
- if not prop in input_props:
- missing_props.append(prop)
- if missing_props:
- print(f"Required properties are missing: {missing_props}")
- send(event, context, FAILED, physicalResourceId="", responseData="")
- db_name = input_props['DBName']
- rds_endpoint = input_props['RDSEndpoint']
- rds_user = input_props['RDSUser']
- rds_password = input_props['RDSPassword']
- if not "DBUser" in input_props or len(input_props['DBUser']) == 0:
- db_user = db_name
- db_user = input_props['DBUser']
- if not "DBPassword" in input_props or len(input_props['DBPassword']) == 0:
- db_password = db_name
- db_name = input_props['DBPassword']
- err = create_db(db_name, db_user, db_password, rds_endpoint, rds_user, rds_password)
- if err:
- send(event, context, FAILED, physicalResourceId="", responseData="")
- send(event, context, SUCCESS, physicalResourceId=physicalResourceId, responseData="")
- def send(event, context, responseStatus, responseData, physicalResourceId=None, noEcho=False):
- responseUrl = event['ResponseURL']
- print(responseUrl)
- responseBody = {}
- responseBody['Status'] = responseStatus
- responseBody['Reason'] = 'See the details in CloudWatch Log Stream: ' + context.log_stream_name
- responseBody['PhysicalResourceId'] = physicalResourceId or context.log_stream_name
- responseBody['StackId'] = event['StackId']
- responseBody['RequestId'] = event['RequestId']
- responseBody['LogicalResourceId'] = event['LogicalResourceId']
- responseBody['NoEcho'] = noEcho
- responseBody['Data'] = responseData
- json_responseBody = json.dumps(responseBody)
- print("Response body:\n" + json_responseBody)
- headers = {
- 'content-type': '',
- 'content-length': str(len(json_responseBody))
- }
- try:
- response = requests.put(responseUrl,
- data=json_responseBody,
- headers=headers)
- print("Status code: " + response.reason)
- except Exception as e:
- print("send(..) failed executing requests.put(..): " + str(e))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement