[レポート]SVS333-R – Amazon Aurora Serverless & the Data APIに対応するサーバレスAPIの作成 #reinvent
どうも、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のエンジニアの方と直接やりとりでき楽しかったです。