Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Aurora ServerlessのData APIについて

TomoyaIwata
November 29, 2019

Aurora ServerlessのData APIについて

HIGOBASHI.AWS 第12回の発表資料です

TomoyaIwata

November 29, 2019
Tweet

More Decks by TomoyaIwata

Other Decks in Technology

Transcript

  1. 1
    Aurora Serverlessの
    Data APIについて

    View full-size slide

  2. スライドは後で⼊⼿することが出来ますので
    発表中の内容をメモする必要はありません。
    写真撮影をする場合は
    フラッシュ・シャッター⾳が出ないようにご配慮ください
    Attention

    View full-size slide

  3. 3
    ⾃⼰紹介
    lサーバーレス開発部 改め CX事業本部
    l好きなAWSサービス: AWS Lambda
    l好きなRDB PostgreSQL
    lMySQLはド素⼈
    岩⽥ 智哉

    View full-size slide

  4. 4
    MySQLは良く分からないので
    Aurora PostgreSQL compatible
    を前提に話します

    View full-size slide

  5. 5
    今⽇話すこと
    無駄なコスト
    • Aurora/Aurora Serverlessの基礎知識
    • Data APIについてちょっとだけ深掘りした話
    • Data APIのユースケースに関する考察

    View full-size slide

  6. 6
    今⽇話さないこと
    無駄なコスト
    •LambdaやRDS等AWSの各サービスに関する基礎知識
    •アプリの実装寄りの話
    •DBの設計や運⽤の話

    View full-size slide

  7. 7
    アジェンダ
    無駄なコスト
    • Aurora/Aurora Serverlessとは︖ 3分
    • Data APIの裏側に関する考察
    • Data APIについて
    • Data APIのユースケースに関する考察
    5分
    9分
    9分
    • まとめ 2分

    View full-size slide

  8. 8
    アジェンダ
    無駄なコスト
    • Aurora/Aurora Serverlessとは︖ 3分
    • Data APIの裏側に関する考察
    • Data APIについて
    • Data APIのユースケースに関する考察
    5分
    9分
    9分
    • まとめ 2分

    View full-size slide

  9. 9
    Auroraとは
    • クラウド時代にAWSが再設計したRDMS
    • MySQL互換、PostgreSQL互換の2種類から選択可能
    • MySQLの最⼤5倍、PostgreSQLの最⼤3倍の性能

    View full-size slide

  10. 10
    Auroraのアーキテクチャ概要
    • ストレージレイヤーがDB
    インスタンスから独⽴
    • このアーキテクチャが
    様々なメリットを実現
    ※画像はhttps://aws.amazon.com/jp/blogs/news/new-parallel-query-for-amazon-aurora/ より引⽤

    View full-size slide

  11. 11
    Auroraとは
    https://dev.classmethod.jp/cloud/aws/developers-io-2019-in-osaka-aurora-or-rds
    このブログに⾊々詳しく書かれています

    View full-size slide

  12. 12
    Aurora Serverless
    ※画像はhttps://aws.amazon.com/jp/blogs/news/amazon-aurora-postgresql-serverless-now-generally-available/ より引⽤
    •⾼可⽤性/⾃動スケール
    •パッチ等の管理作業不要
    •アイドル時間に課⾦されない
    ※ストレージの課⾦はあり
    インスタンスレイヤが⾃動スケールする動作モード

    View full-size slide

  13. 13
    Serverless Architecture
    な特性を備えたRDB

    View full-size slide

  14. 14
    ※⼀般的にServerless Architectureと聞いて
    思い浮かべるLambdaからの利⽤を
    ⽬的として作られたサービスでは無い

    View full-size slide

  15. 15
    アジェンダ
    無駄なコスト
    • Aurora/Aurora Serverlessとは︖ 3分
    • Data APIの裏側に関する考察
    • Data APIについて
    • Data APIのユースケースに関する考察
    5分
    9分
    9分
    • まとめ 2分

    View full-size slide

  16. 16
    Data APIとは
    • HTTPSのエンドポイントからAurora Serverlessにア
    クセスする機能
    • DBドライバが無くてもAWS SDKだけでAurora
    Serverlessにアクセス可能
    • クエリの実⾏結果をJSON形式で受けとることが可能

    View full-size slide

  17. 17
    Data APIの実⾏例
    {
    "records": [
    [
    {
    "longValue": 1
    },
    {
    "stringValue": "TEST"
    },
    {
    "stringValue": "2019-06-01 04:15:10.0"
    }
    ]
    ],
    "numberOfRecordsUpdated": 0
    }

    View full-size slide

  18. 18
    Data APIでできること
    • ExecuteStatement
    • BatchExecuteStatement
    ※パラメータも利⽤可能 Extended Queryプロトコルでunnamedなprepared-statemenを実行
    SQL の実⾏
    • BeginTransaction
    • RollbackTransaction
    • CommitTransaction
    トランザクション制御

    View full-size slide

  19. 19
    Data APIの制限事項
    • SQLの呼び出しは45秒でタイムアウト
    • レスポンスは最⼤1,000⾏まで
    • レスポンスは最⼤1Mまで
    • 結果セットの1⾏あたり64Kまで
    • トランザクションは最⼤24時間まで
    • 3分間トランザクションIDの呼び出しがない場合はタイ
    ムアウト

    View full-size slide

  20. 20
    Data APIのメリット
    • インターネットに公開されたエンドポイントから
    Aurora Serverlessにアクセスできる
    • http(s)でAurora Serverlessにアクセスできる
    • 利⽤者側はDBとの接続を意識せずステートレスに利
    ⽤可能

    View full-size slide

  21. 21
    Data APIの位置付け
    リリース当時はVPC Lambdaの
    コールドスタートが遅く、Lambdaから
    RDBを利⽤する⽅法として期待された

    View full-size slide

  22. 22
    Data APIが不要に︖︖
    2019/9/27 VPC Lambdaアーキテクチャ改善が東京リージョンに適⽤完了
    https://aws.amazon.com/jp/blogs/compute/announcing-improved-vpc-networking-for-aws-lambda-functions/

    View full-size slide

  23. 23
    アジェンダ
    無駄なコスト
    • Aurora/Aurora Serverlessとは︖ 3分
    • Data APIの裏側に関する考察
    • Data APIについて
    • Data APIのユースケースに関する考察
    5分
    9分
    9分
    • まとめ 2分

    View full-size slide

  24. 24
    Data API発表後に良く⽿にした話...
    これでVPC Lambda無しでRDB使える︕︕
    しかもhttpsのエンドポイントだから
    同時接続数の問題が解決する︕︕

    View full-size slide

  25. なぜ︖︖

    View full-size slide

  26. 26
    疑問その1
    今までもインターネットアクセス可
    能なエンドポイントは⽤意できたけ
    ど何が違うの︖︖
    rds.force_sslで暗号化を強制できるけど...

    View full-size slide

  27. 27
    接続⽅式の違い
    • 認証⽅式の違い
    • 単純なユーザー名/パスワードによる認証とSIGV4の違い
    • 認証を⾏うコンポーネントの違い
    • Data APIのエンドポイントでまずSIGV4による認証とIAMによ
    る認可を⾏う
    • Data APIの認証/認可がOKの場合にDB側の認証/認可に進む
    通常のエンドポイントをPublic公開するのとどう違う︖︖

    View full-size slide

  28. 28
    Data APIの⽅が攻撃への耐性が強い
    Publicなエンドポイントで通常の認証⽅式を使うと、悪意ある接
    続要求の拒否にDBインスタンスのリソースを消費してしまう

    View full-size slide

  29. 29
    IAMデータベース認証との違い
    MySQL で IAM データベース認証を使⽤する場合、1 秒あたりの新しい接続数は 256 ま
    でに制限されます。db.t2.micro DB インスタンスクラスを使⽤している場合、この制限
    は 1 秒あたり 10 接続に制限されます。
    最近はIAMデータベース認証という選択肢も...
    MySQL エンジンを使⽤する場合には、以下のことをお勧めします。
    • データベースへの⼀時的な個⼈アクセス⽤メカニズムとして IAM データベース認証
    を使⽤します。
    • 簡単に再試⾏できるワークロードに対してのみ、IAM データベース認証を使⽤します。
    • アプリケーションで 1 秒あたり 256 を超える新しい接続が必要な場合は、IAM データ
    ベース認証を使⽤しないでください。
    https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html#UsingWithRDS.IAMDBAuth.Availability

    View full-size slide

  30. 30
    IAMデータベース認証との違い
    PostgreSQL で IAM データベース認証を使⽤する場合、以下の制限に
    注意してください。
    • データベースインスタンスの 1 秒あたりの最⼤接続数は、インス
    タンスタイプとワークロードに応じて制限される場合があります。
    https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html#UsingWithRDS.IAMDBAuth.Availability

    View full-size slide

  31. 31
    Aurora Serverlessへの接続⽅式の⽐較
    認証⽅式 同時接続への耐性 DDOS耐性
    通常の接続 ユーザー名/パスワード 弱 弱
    IAMデータベース認証 SIGV4 弱 強
    Data API SIGV4

    ※詳しくは後ほど

    View full-size slide

  32. 32
    疑問その2
    Data APIでLambdaの
    同時接続数問題が解決︖︖

    View full-size slide

  33. 33
    疑問その2
    # DBへの接続処理
    # コールドスタート時のみ接続し、接続を使い回すことでオー
    バーヘッドを低減する
    def handler(event, conext):
    # lambdaのメイン処理
    こういう実装だとアイドル中のLambda実⾏環境がDB接続を消費
    して無駄なのは分かるが...

    View full-size slide

  34. 34
    疑問その2
    def handler(event, conext):
    # lambdaのメイン処理1
    # DBへの接続処理
    # lambdaのメイン処理2(DBアクセスが必要な処理)
    # DB切断処理
    # lambdaのメイン処理3
    こうすれば良くない︖︖

    View full-size slide

  35. 35
    Data APIの同時接続耐性を調べてみる

    View full-size slide

  36. 36
    まずは簡単にData API利⽤時の
    Aurora Serverlessのログを確認

    View full-size slide

  37. 37
    aws rds-data execute-statement --database
    iwatadb --sql 'select pg_sleep(10)' --
    resource-arn ....

    View full-size slide

  38. 38
    LOG: connection received: host=10.1.13.68 port=24081
    LOG: connection authorized: user=cm-iwata database=iwatadb
    LOG: execute : SET extra_float_digits = 3
    LOG: execute : SET application_name = 'PostgreSQL JDBC Driver’
    LOG: execute : select pg_sleep(10)
    LOG: execute : DISCARD ALL
    LOG: execute : SELECT n.nspname = ...
    DETAIL: parameters: $1 = '2278'
    LOG: execute : SELECT typinput=...
    DETAIL: parameters: $1 = 'void'
    LOG: disconnection: session time: 0:05:31.980 user=cm-iwata
    database=iwatadb host=10.1.13.68 port=24081
    Data API⽤のコネクションは約5:30維持されていた
    AWS CLIで指定した
    SQL⽂

    View full-size slide

  39. 39
    Data APIの基盤はプロキシ型の
    コネクションプーリング機構を備えてる

    View full-size slide

  40. 40
    今度は並列に⼤量アクセスしてみる

    View full-size slide

  41. 41
    検証環境の構成
    • Aurora Serverlessのmax_connectionsは180
    • 負荷掛け⽤のPCからAPI GW経由でLambdaに200並列アクセス
    • LambdaはData API経由でSQLを発⾏
    AWS Cloud
    VPC
    Data API
    Endpoint

    View full-size slide

  42. 42
    検証⽤コード
    import json
    import boto3
    rdsData = boto3.client('rds-data')
    def lambda_handler(event, context):
    rdsData.execute_statement(
    resourceArn =
    secretArn = <シークレットのARN>
    database = 'dataapi_db',
    sql = 'select pg_sleep(5)')
    return {
    'statusCode': 200,
    'body': json.dumps('Hello from Lambda!')
    }
    • pg_sleep(5)を実⾏するだけの
    コード

    View full-size slide

  43. 43
    検証⽤コード
    hey -t 0 -n 200 -c 200 https://xxxxxxxxxx
    200並列で合計200回のリクエストを実⾏

    View full-size slide

  44. 44
    検証結果
    postgres=> select count(*) from pg_stat_activity where usename <>
    'rdsadmin' and usename <> 'postgres' ;
    count
    -------
    100
    (1 row)
    200並列でアクセスしたのに100接続しか消費していない

    View full-size slide

  45. 45
    検証結果
    Response time histogram:
    10.342 [1] |
    12.225 [99] |■■■■■■■■■■■...
    14.108 [0] |
    15.991 [0] |
    17.874 [0] |
    19.757 [0] |
    21.640 [96] |■■■■■■■■■■■■■■■■...
    23.523 [0] |
    25.406 [0] |
    27.289 [0] |
    29.172 [4] |■■
    10秒弱で完了したリクエストと20秒弱で完了したリクエストでほぼ半々

    View full-size slide

  46. 46
    検証結果から読み解くData APIの接続管理
    要求1
    要求2
    要求3
    要求4
    要求5
    要求6
    Data API
    Endpoint

    View full-size slide

  47. 47
    さらに並列度を上げてアクセスしてみる

    View full-size slide

  48. 48
    検証⽤コード
    hey -t 0 -n 400 -c 400 https://xxxxxxxxxx
    400並列で合計400回のリクエストを実⾏

    View full-size slide

  49. 49
    結果
    datname | usename | count
    ------------+--------------+-------
    | | 5
    postgres | postgres | 1
    dataapi_db | dataapi_user | 171
    | rdsadmin | 1
    rdsadmin | rdsadmin | 3
    (5 rows)
    max_connectionsの限界まで使い切れた

    View full-size slide

  50. 50
    ⾮Data APIから⼤量接続している状態だと
    どうなる︖︖

    View full-size slide

  51. 51
    検証環境の構成
    AWS Cloud
    VPC
    Data API
    Endpoint
    Data APIを使わず
    普通に接続
    • Aurora Serverlessと同⼀VPCのEC2から通常のDB接続を確⽴
    • この状態で同じ検証を流してみる

    View full-size slide

  52. 52
    結果
    datname | usename | count
    ----------------+------------------+-------
    | | 5
    non_dataapi_db | non_dataapi_user | 130
    dataapi_db | dataapi_user | 41
    postgres | postgres | 1
    | rdsadmin | 1
    rdsadmin | rdsadmin | 3
    (6 rows)
    通常のDB接続を130確⽴している状態だと、Data API⽤
    の接続は41に制限

    View full-size slide

  53. 53
    結果
    datname | usename | count
    ----------------+------------------+-------
    | | 5
    non_dataapi_db | non_dataapi_user | 170
    dataapi_db | dataapi_user | 1
    postgres | postgres | 1
    | rdsadmin | 1
    rdsadmin | rdsadmin | 3
    (6 rows)
    通常のDB接続を170確⽴している状態だと、Data APIの
    接続エラーが発⽣

    View full-size slide

  54. 54
    Data APIの基盤はプロキシ型のコネクショ
    ンプーリング機構を備えており、同時接
    続への耐性が⾼い

    View full-size slide

  55. 55
    アジェンダ
    無駄なコスト
    • Aurora/Aurora Serverlessとは︖ 2分
    • Data APIの裏側に関する考察
    • Data APIについて
    • Data APIのユースケースに関する考察
    5分
    9分
    9分
    • まとめ 2分

    View full-size slide

  56. 56
    Data APIはどのようなユースケースに
    マッチするのか︖︖

    View full-size slide

  57. 57
    Data APIのユースケースについて
    •IoT機器から利⽤
    •Lambdaから利⽤
    •AppSyncから利⽤(今回話しません)

    View full-size slide

  58. 58
    IoT機器からData APIを利⽤する構成
    AWS Cloud
    VPC
    Data API
    Endpoint
    • AWS SDKがあればDBドライバは不要
    • IoT機器の限られたリソースでも簡単にRDBへのアクセスが実現可能

    View full-size slide

  59. 59
    本当に⼤丈夫︖︕

    View full-size slide

  60. 60
    IoT機器からData APIを利⽤するリスク
    Data API経由で発⾏されるSQLをユーザー
    側でバリデーションすることは出来ない
    IoT機器が乗っ取られた場合に任意のSQL
    を発⾏されるリスクがある

    View full-size slide

  61. 61
    IoT機器からData APIを利⽤する際の留意点
    • IoT機器が乗っ取られた場合のリスクを理解し、しっ
    かりとリスクヘッジを⾏う
    • Data API⽤のDBユーザーの権限は必要最低限に絞る

    View full-size slide

  62. 62
    LambdaからData APIを利⽤する構成
    同時接続数に対する耐性が⾼いので、特定のユースケースでは引き
    続きVPC Lambda × 通常接続よりも優位
    AWS Cloud
    VPC
    Data API
    Endpoint

    View full-size slide

  63. 63
    LambdaからData APIを利⽤する際の留意点
    • VPC Lambdaと⽐較するとコールドスタートが遅くなり⾟い
    • Data APIからAurora ServerlessにアクセスするだけであればLambda実
    ⾏環境にバンドルされたライブラリだけで実現可能
    ※Python3.6,Node.js10で動作を確認
    • VPC Lambdaから通常の接続⽅式を利⽤する場合は追加でライブラリ
    の導⼊が必要 → コールドスタートに悪影響

    View full-size slide

  64. 64
    LambdaからData APIを利⽤する際の留意点
    https://github.com/chanzuckerberg/sqlalchemy-aurora-data-api
    • 既存のORMライブラリは
    基本使えないと思った⽅
    が良い
    • 複雑処理を実装するのは
    ⾟そう
    • Data APIに対応したライブ
    ラリも出てきてはいる

    View full-size slide

  65. 65
    発表資料作ってる間に出ました...
    https://aws.amazon.com/jp/about-aws/whats-new/2019/11/amazon-rds-data-api-client-library-supports-java-preview/

    View full-size slide

  66. 66
    通常接続 with VPC Lambda と Data APIの⽐較
    アプリの実装容易性 コールドスタート 同時接続耐性
    VPC Lambda ORMの恩恵を受けやすい 遅くなりがち 弱
    Data API ORMの恩恵を受け⾟い 遅くなりにくい 強
    複雑なクエリが不要で、⼤量の書き込みが発⽣するようなワーク
    ロードではData APIの⽅が優位になりそう

    View full-size slide

  67. 67
    アジェンダ
    無駄なコスト
    • Aurora/Aurora Serverlessとは︖ 2分
    • Data APIの裏側に関する考察
    • Data APIについて
    • Data APIのユースケースに関する考察
    5分
    9分
    9分
    • まとめ 2分

    View full-size slide

  68. 68
    まとめ
    • Aurora ServerlessのData APIを利⽤することで同時接続耐性の⾼いシ
    ステムを構築しやすくなる
    • Data APIを利⽤する際はセキュリティをしっかりと考慮する
    • Data APIはAurora Serverlessが前提となるため、⼀時停⽌〜復帰の遅
    延が発⽣し得ることを念頭に置いておく

    View full-size slide

  69. 69
    VPC Lambdaのアーキテクチャ改善で
    Data APIが役⽬を終えた訳ではない
    メリット/デメリットを理解して
    選択肢の1つとして抑えておきましょう

    View full-size slide

  70. 70
    ご清聴ありがとうございました

    View full-size slide