Подключение к AWS RDS через чашу для разных маршрутов?
Типичное приложение чаши имеет несколько определенных маршрутов, но как мне правильно подключить это к RDS, чтобы я мог сохранять данные POST или получать данные из БД? Я уже создал базу данных через панель RDS; Я просто не знаю, как получить к нему доступ из чаши.
Просто ли каждый маршрут соединяется с данным хостом RDS с пользователем / проходом?
Например,
from chalice import Chalice
import psycopg2
app = Chalice(app_name='test')
db_user = 'test'
db_pass = 'password'
db_host = 'https://.....'
db_port = 5432
@app.route('/save_data')
def save_data():
with psycopg2.connect(user=db_user, password=db_pass, ...) as conn:
with conn.cursor() as cur:
cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (1,2))
@app.route('/get_data')
def get_data():
with psycopg2.connect(user=db_user, password=db_pass, ...) as conn:
with conn.cursor() as cur:
cur.execute("SELECT * FROM test")
@app.route('/something')
def something():
with psycopg2.connect(user=db_user, password=db_pass, ...) as conn:
with conn.cursor() as cur:
cur.execute(....) # some other query
Если так, есть ли более простой способ справиться с этим, вместо того, чтобы каждый раз указывать соединение с БД? Есть ли странные условия сессий / гонок, связанные с этим?
Или, если я полностью отключен, как правильно подключиться к RDS с маршрутов Чаши?
1 ответ
Я на самом деле настроил это в своем приложении Чаша. То, что я сделал, - это установил хранилище параметров и сохранил там мои разные соединения с базой данных и вызвал их в чашу.
Я сделал файл с именем Parameter s.py и поместил его в него:
import boto3
def getParameter(param_name):
# Create the SSM Client
ssm = boto3.client('ssm', region_name='us-east-1')
# Get the requested parameter
response = ssm.get_parameters(
Names=[
param_name,
],
WithDecryption=True
)
# Store the credentials in a variable
credentials = response['Parameters'][0]['Value']
return credentials
Тогда я могу назвать это так:
def dbInsert(query, stage):
stageParm = stage + "_database"
parm = Parameters.getParameter(stageParm)
pJson = json.loads(parm)
repli = pJson["replication"]
dbName = pJson["database"]
writeEndPoint = repli["write"]["host"]
writeUsername = repli["write"]["username"]
writePassword = repli["write"]["password"]
try:
conn = pymysql.connect(
writeEndPoint,
user=writeUsername,
passwd=writePassword,
db=dbName,
connect_timeout=5)
except Exception as ex:
return ex
cur = conn.cursor()
cur.execute(query)
results = cur.fetchall()
cur.close()
conn.close()
return results
results = cur.fetchall()
cur.close()
conn.close()
return results
Надеюсь, поможет.