Aurora Serverless에 AWS Lambda의 Python에서 Data API로 여러 가지를 시도해 보았습니다.
이 is 뭐
도쿄 리전의 Aurora Serverless에서 Data API(HTTP 엔드포인트)를 사용할 수 있게 된 것의 일본어 정보가 적어서 고생했기 때문에 메모.
저자가 Python 약한 문제
AWS Lambda를 위해 필요하게 달려 쓰기 시작했을 뿐이므로 코드적으로 이케하지 않는 곳이 많다고 생각합니다.
이런 것이 좋다면 꼭 가르쳐 주셨으면합니다
Lambda의 Boto3 오래된 문제
Layers로 해결
$ mkdir python
$ pip install -t ./python boto3
$ zip -r boto3-x.y.z.zip python
가능한 ZIP을 Layers에 등록, Lambda에서 Layer를 선택하면 import boto3
Layer의 boto3을 사용합니다.
Lambda가 사용하는 IAM에 추가로 부여해야 하는 권한
AWS Lambda를 위해 필요하게 달려 쓰기 시작했을 뿐이므로 코드적으로 이케하지 않는 곳이 많다고 생각합니다.
이런 것이 좋다면 꼭 가르쳐 주셨으면합니다
Lambda의 Boto3 오래된 문제
Layers로 해결
$ mkdir python
$ pip install -t ./python boto3
$ zip -r boto3-x.y.z.zip python
가능한 ZIP을 Layers에 등록, Lambda에서 Layer를 선택하면 import boto3
Layer의 boto3을 사용합니다.
Lambda가 사용하는 IAM에 추가로 부여해야 하는 권한
$ mkdir python
$ pip install -t ./python boto3
$ zip -r boto3-x.y.z.zip python
※ 거래를 사용하지 않는 경우에는 불필요
테이블
CREATE TABLE `test` (
`id` bigint NOT NULL AUTO_INCREMENT PRIMARY KEY,
`str` varchar(255) NOT NULL,
`date` timestamp NOT NULL,
`val` int)
파이썬 코드
※ 실제 코드에서 유용한 부분을 발췌했기 때문에 이대로 움직이는 것이 아니므로주의하십시오.
import boto3
def lambda_handler(event, context):
cluster_arn = 'arn:aws:rds:ap-northeast-1:xxxxxxxxxxxx:cluster:yyyyyyyyyyyy'
secret_arn = 'arn:aws:secretsmanager:ap-northeast-1:xxxxxxxxxxxx:secret:zzzzzzzzzzzz'
rds_data_client = boto3.client('rds-data')
try:
transaction = rds_data_client.begin_transaction(
resourceArn = cluster_arn,
secretArn = secret_arn,
database = 'dbname'
)
# ここらへんでdictに色々詰めてる感じ
# dict['date']にはUNIX時間(秒)が入ってると思ってください
rds_data_client.execute_statement(
resourceArn = cluster_arn,
secretArn = secret_arn,
database = 'dbname',
transactionId = transaction['transactionId'],
sql = 'insert into test(str, date, val) values (:str, from_unixtime(:date), :val);',
parameters = [
{'name': 'str', 'value': {'stringValue': dict['str']}},
{'name': 'date', 'value': {'longValue': dict['date']}},
{'name': 'val', 'value': {'longValue': dict['value']} if dict['val'] else {'isNull': True}},
]
)
rds_data_client.commit_transaction(
resourceArn = cluster_arn,
secretArn = secret_arn,
transactionId = transaction['transactionId']
)
except Exception:
rds_data_client.rollback_transaction(
resourceArn = cluster_arn,
secretArn = secret_arn,
transactionId = transaction['transactionId']
)
Reference
이 문제에 관하여(Aurora Serverless에 AWS Lambda의 Python에서 Data API로 여러 가지를 시도해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/edg_aim/items/3989aca53d98e3cafc0f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
CREATE TABLE `test` (
`id` bigint NOT NULL AUTO_INCREMENT PRIMARY KEY,
`str` varchar(255) NOT NULL,
`date` timestamp NOT NULL,
`val` int)
※ 실제 코드에서 유용한 부분을 발췌했기 때문에 이대로 움직이는 것이 아니므로주의하십시오.
import boto3
def lambda_handler(event, context):
cluster_arn = 'arn:aws:rds:ap-northeast-1:xxxxxxxxxxxx:cluster:yyyyyyyyyyyy'
secret_arn = 'arn:aws:secretsmanager:ap-northeast-1:xxxxxxxxxxxx:secret:zzzzzzzzzzzz'
rds_data_client = boto3.client('rds-data')
try:
transaction = rds_data_client.begin_transaction(
resourceArn = cluster_arn,
secretArn = secret_arn,
database = 'dbname'
)
# ここらへんでdictに色々詰めてる感じ
# dict['date']にはUNIX時間(秒)が入ってると思ってください
rds_data_client.execute_statement(
resourceArn = cluster_arn,
secretArn = secret_arn,
database = 'dbname',
transactionId = transaction['transactionId'],
sql = 'insert into test(str, date, val) values (:str, from_unixtime(:date), :val);',
parameters = [
{'name': 'str', 'value': {'stringValue': dict['str']}},
{'name': 'date', 'value': {'longValue': dict['date']}},
{'name': 'val', 'value': {'longValue': dict['value']} if dict['val'] else {'isNull': True}},
]
)
rds_data_client.commit_transaction(
resourceArn = cluster_arn,
secretArn = secret_arn,
transactionId = transaction['transactionId']
)
except Exception:
rds_data_client.rollback_transaction(
resourceArn = cluster_arn,
secretArn = secret_arn,
transactionId = transaction['transactionId']
)
Reference
이 문제에 관하여(Aurora Serverless에 AWS Lambda의 Python에서 Data API로 여러 가지를 시도해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/edg_aim/items/3989aca53d98e3cafc0f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)