[レポート]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人という、スピーカとの距離が近いセッションでした。セッションの流れは次のような感じでした。

作成したスクリプト

クエリ実行部分とトランザクションを貼ってレコードを挿入する部分を実装しました。実装箇所だけ抜粋して紹介します。



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のエンジニアの方と直接やりとりでき楽しかったです。