この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
どうも、DA事業本部の大澤です。
本エントリはAWS re:Invent 2019のビルダーズセッション「SVS333-R - [REPEAT] Build serverless APIs supported by Amazon Aurora Serverless & the Data API」のレポートです。
セッション概要
In this session, you build a simple yet functional API that leverages Amazon Aurora Serverless and the Data API.
意訳
このセッションでは、Amazon Aurora ServerlessとData APIを利用したシンプルだけども機能的なAPIを作成します。
スピーカー
- Marcilio Mendonca - Sr. Solutions Developer, Amazon Web Services
レポート
ビルダーズセッションなので、スピーカであるAWSのエンジニア1人+参加者6人という、スピーカとの距離が近いセッションでした。セッションの流れは次のような感じでした。
- 参加者のレベル確認
- サーバレス開発やLambdaの使用経験など
- Aurora Serverless DataAPIの説明
- やることの説明
- アクセスキーの共有
- 事前に用意された環境を利用するため、参加者へのアクセスキーの共有がありました
- RDSを利用したLambda関数のハンドラで動作を確認
- Data APIを利用したLambda関数のハンドラのTODOとなっている処理を実装
batch_execute_statement
を使うようにリファクタリング- 間に合わず
作成したスクリプト
クエリ実行部分とトランザクションを貼ってレコードを挿入する部分を実装しました。実装箇所だけ抜粋して紹介します。
def execute_statement(rds_client, sql, sql_parameters=[], transaction_id=None):
'''
Invokes the Data API to execute a SQL statement (e.g., select, insert, create table)
'''
params = dict(
database=db_name,
resourceArn=db_cluster_arn,
secretArn=db_credentials_secrets_store_arn,
sql=sql,
parameters=sql_parameters
)
if transaction_id:
params['transactionId'] = transaction_id
response = rds_client.execute_statement(**params)
return response
def add_new_employee(rds_client, emp_id, emp_name):
'''
Adds a new employee to the database
'''
transaction_id = rds_client.begin_transaction(
database=db_name,
resourceArn=db_cluster_arn,
secretArn=db_credentials_secrets_store_arn
)['transactionId']
try:
print(f'Inserting employee {emp_id}')
sql_parameters = [
{
'name': EMP_ID,
'value': {
'stringValue': emp_id
}
},
{
'name': EMP_NAME,
'value': {
'stringValue': emp_name
}
}
]
execute_statement(
rds_client,
INSERT_EMPLOYEE_STMT,
sql_parameters,
transaction_id
)
except Exception as e:
rds_client.rollback_transaction(
resourceArn=db_cluster_arn,
secretArn=db_credentials_secrets_store_arn,
transactionId=transaction_id
)
print(f'Oops, something went wrong adding a new employee. Transaction Rollbacked: {e}')
raise e
else:
rds_client.commit_transaction(
resourceArn=db_cluster_arn,
secretArn=db_credentials_secrets_store_arn,
transactionId=transaction_id
)
pass
資料
今回のセッションで使用したリポジトリです。
※ 試す際には事前にRDSとAurora Serverlessの環境が必要となります。
さいごに
Amazon Aurora ServerlessのData APIを実際に使ってみるビルダーズセッションに関するレポートでした。実際に触ってみることで理解が深まり、AWSのエンジニアの方と直接やりとりでき楽しかったです。