AWSのre:Inventが始まり、AWS CEOのマット・ガーマン氏の基調講演から多数の新サービスや機能発表があります(基調講演の更新に関する私のx/blueskyスレッドもご覧ください)
本ブログでは、ほぼ無制限のスケール、高可用性、インフラ管理ゼロのサーバーレス分散SQLデータベースであるAmazon Aurora DSQLについて調査します。これらは単一リージョンで99.99%、複数リージョンで99.999%の利用可能性を誇っています。
このブログの目的は、アーキテクチャ、イノベーション、コアコンポーネントを理解してもらい、AWSのラムダ関数を使って動作するコード🔥付きでAuroraのDSQLを完全にサーバーレスに管理できるソリューションを提供することです
動機
*2024年12月4日午前4時(JST) 2024年2日目のre:Invent 2024にて、AWSはAmazon Aurora DSQL(プレビュー)を導入する刺激的なアップデートを発表しました!! *
このアップデートはあなたにとって何を意味するのでしょうか?
Amazon Aurora DSQLがゲームチェンジャーである主な理由は以下の通りです:
- 無制限のスケーラビリティ:読み取り、書き込み、計算、ストレージをシャーディングやインスタンスアップグレードなしであらゆるワークロードに難なくスケールできます。
- 高可用性:Aurora DSQLのアクティブ・アクティブサーバーレス設計は故障回復を自動化し、マルチAZおよびマルチリージョンでのシームレスな可用性を強固に保証し、フェイルオーバーやデータ損失の懸念を排除します。
- 最速パフォーマンス:最速の分散SQL読み書きを提供し、高性能アプリケーションに最適です。
- ゼロインフラストラクチャ管理:完全サーバーレス設計により、パッチ適用やアップグレード、メンテナンスのダウンタイムが不要となり、時間とリソースを節約できます。
- 強固なデータ一貫性:Aurora DSQLは、ACIDトランザクションとリレーショナルデータモデルの恩恵を受けるトランザクションワークロードに最適化されています。
- PostgreSQL互換性:親しみやすく広く使われているSQLインターフェースで開発を簡素化し、学習曲線を短縮します。
- 開発者に優しい:運用の複雑さを伴わずに迅速なアプリケーション開発を可能にする直感的な体験。
オーロラDSQLのコスト
- Aurora DSQLは現在、無料でプレビューで利用可能です。
Aurora DSQLのコアコンポーネント
分散アーキテクチャ
Aurora DSQLは分散型データベースとして設計されており、複数の場所(可用性ゾーン)で連携して動作し、高い可用性とフォールトトレランスを確保しています。主な4つのコンポーネントで構成されています。
- リレーと接続:システム内でのデータ移動を処理し、ユーザーをデータベースに接続します。
- **計算とデータベース:**クエリおよびデータベースロジックの実際の処理を管理します。
- トランザクションログと隔離:複数の同時操作の安全かつ一貫した処理(例:データ競合なし)を保証します。
- ユーザーストレージ:実際のデータを安全に保存します。
制御プレーンがこれらのコンポーネントを監督・調整し、何かが故障した際に自動的に自己修復・スケールするよう設計されています。
Aurora DSQL クラスター
- 単一地域クラスター:
- あなたのデータは単一のリージョン内の複数のデータセンター(AZ)間で同期されています。
- この構成はレプリケーション遅延やデータベースフェイルオーバーなどの問題を回避します。
- 強固な一貫性により、接続先に関係なくすべてのユーザーが同じデータを見られることを保証します。
- システムの一部が故障した場合、リクエストは自動的に健全なインフラに移行し、あなたの介入なしに移行します。
- ACIDトランザクションをサポートし(信頼性、一貫性、耐久性の確保)
- マルチリージョン連結クラスター:
- これらは上記の機能を複数の地域に拡張し、各地域に1つずつのエンドポイントを1つずつ提供し、単一のデータベースとして機能します。
- 両方のリージョンは読み書きを同時に処理でき、強固な一貫性を保つことができます。
- パフォーマンスとレジリエンスが重要なグローバルなアプリケーションに最適です。
PostgreSQL互換性
Aurora DSQLは、人気のあるオープンソースであるPostgreSQL 16を基に構築されています
データのレジリエンシーとバックアップのサポート方法
バックアップと復元
- 現在、プレビューフェーズではバックアップと復元はサポートされていません。
- Aurora DSQLはAWS Backupコンソールとの統合を計画しており、単一リージョンおよびマルチリージョンクラスターの完全なバックアップおよびリストア機能を実現します。
複製
- 取引ログ:
- Aurora DSQLはすべての書き込みを分散トランザクションログにコミットし、3つのAZ間で同期的にデータを複製します。
- マルチリージョン複製:
- 読み取りおよび書き込み両方のリージョンに対してクロスリージョンレプリケーションを提供します。
- 認証領域を用いて暗号化されたトランザクションログを保存し、手動設定やストレージオーバーヘッドを必要としません。
- データ管理:
- アクセスパターンとプライマリキー範囲に基づいてデータを自動で分割、統合、複製します。
- リード需要に応じてリードレプリカを動的にスケールします。
- 自己治癒:
- AZ障害時にアクセスをリダイレクトし、欠損データを非同期で修復します。
- 修理されたレプリカは自動的にストレージの定足数に戻されます。
高可用性
- アクティブ-アクティブ設計:
- シングルリージョンおよびマルチリージョンクラスターはアクティブアクティブで、完全自動リカバリーが可能です。
- 従来の一次・二次フェイルオーバープロセスの必要性を排除します。
- マルチAZレプリケーション:
- 3つのAZ間で同期レプリケーションを確保し、データ損失や遅延のリスクを回避します。
- 地域別終点:
- シングルリージョンクラスターは、3つのAZ間で一貫した読み書きを行うための冗長エンドポイントを提供します。
- マルチリージョンクラスターは、リージョン間でゼロラグかつ強力で一貫したアクセスを実現するための2つのリージョナルエンドポイントを提供します。
- 必要に応じて、管理されたグローバルエンドポイントにはAmazon Route 53を使用してください。
AWS LambdaとAurora DSQLの使用
もちろんre:Inventのことですが、読者にAuroraのDSQLデータベースに接続し、テーブルの作成やAWS Lambda関数を使ってデータ挿入などのデータベース操作を行う革新的な方法を説明したいと思います
プレビュー中は、us-east-1 – US East(北バージニア州)およびus-east-2 – US East(オハイオ州)のクラスターとやり取りできます。
オーロラのDSQLデータベースを作成する
- コンソールでAurora DSQLを検索

- このブログでは単一リージョンデータベースを作成し、他のコンフジラオはデフォルトとして保持しています。プレビューでは、クラスタ名は名前キーバリュータグで設定されています。
- クラスタを作成してから、データベースのエンドポイントURLをコピーしてください。

- それだけです。管理することはありません。プロビジョニング。Aurora DSQLの展開はワンクリックでできます!!
ラムダ関数を作成する
このラムダ関数はAurora DSQLデータベースに接続し、テーブルを作成し、データを挿入し、そのデータを読み返して検証します。はい、ラムダとAurora DSQLを使った真のサーバーレス操作です

- すべてのリソースにインラインポリシーの管理者役割を追加し、Lambda実行ロールをクラスタに接続する権限を承認してください。
- Lambda -> Configuration -> Permissions -> add inline policy(インラインポリシーを追加)
{
「バージョン」:「2012-10-17」
「声明」:[
{
「シド」:「ステートメント1」
「効果」:「許可」
「Action」: ["dsql:DbConnectAdmin"],
「リソース」: ["*"]
}
]
}

**注:**本番環境のアプリケーションで管理者データベースの役割を使うべきではありません。ブログのために行うべきです
- もしLambdaを使ったことがあるなら、zipパッケージをアップロードする必要があることはご存知でしょう。私はラムダコードをリポジトリに共有しています
- フォークしてリポジトリをローカルマシンに引き寄せた後、以下のコマンドを使う
NPMインストール。package-lock.jsonを生成する
CD ~/path-to-code
ジップ -R pkg.zip。
- パッケージをアップロードする

- ラムダ関数のテストタブで、クラスタのエンドポイントを指定するために以下のEvent JSONを修正してください。
{"endpoint": "replace_with_your_cluster_endpoint"}
環境変数も使えますが、その場合はコードを変更してエンドポイントを「process.env.ENDPOINT」と呼ぶ必要があります。
真サーバーレス操作(LAMBDA + Aurora DSQL)をテストしてください

- 実装は成功しましたが失敗しました
- Amazon Qを使って診断し、修正しましょう

- ラムダタイムアウトのデフォルト3秒から10秒に延長
- ほら、うまくいった。
**注:データの検証には、ラムダ関数内の以下のコードを使用しています
assert.strictEqual(result.rows[0].city, "Anytown");
assert.notStrictEqual(result.rows[0].id, null);
- では、間違った終点を出してラムダに失敗しようとします

Aurora DSQLの認証と認可の理解
- Aurora DSQLはクラスタ認証と認証のためにIAMロールとポリシーを使用します。データベース認証のために、IAMロールをPostgreSQLのデータベースロールと関連付けます。
- 接続時に認証情報の代わりに、1時間有効な一時認証トークンを使用します。
- 認証用:
- *管理者ロールを使っている場合:* IAM IDは「dsql:DbConnectAdmin」のポリシーアクションを持つはずです。
- *カスタムデータベースロールを使っている場合:* IAM アイデンティティには「dsql:DbConnect」というポリシーアクションがあるはずです。
PostgreSQLのデータベースロールやIAMロールを使ってデータベースとインタラクションしてください
- データベース承認について:
- データベースレベルの認可にはPostgreSQLのデータベースロールを使用します。
- Aurora DSQLは2種類の役割を提供します:
- 管理者ロール:Aurora DSQLによって事前作成され、変更不可、カスタムロール作成などの管理作業に使用されます。
- カスタムロール:あなたが作成し、必要に応じてPostgreSQLの権限を割り当てます。
- 役割関連:
- カスタムデータベースロールを****IAMロールとリンクさせ、IAMアイデンティティがデータベースに接続できるようにします。
- 認証および承認:
- 管理者ロールを使ってクラスタに接続し、カスタムロールを管理してください。
- AWS IAM GRANTコマンドを使って、データベースアクセス用のカスタムロールにIAM IDを関連付ける。
詳細な手順については、以下をご覧ください:
Aurora DSQL の探求:アクセス、開発、ベストプラクティス
Aurora DSQLのドキュメントにはとても満足しています。的確で、とてもよく書かれています。
オーロラを扱う際には、次のような興味深いトピックがあります:
- Aurora DSQLへのアクセス
- Amazon Aurora DSQLとの連携
- Aurora DSQLによるプログラミング
- Amazon Aurora DSQLのユーティリティ、チュートリアル、サンプルコード
- セキュリティとそのベストプラクティス:探偵のベストプラクティスと予防セキュリティの両方を理解することが重要です
- このブログ執筆時点では、Aurora DSQLにはサポートされていないPostgreSQLの機能があり、これらも考慮されるべきです
ソリューションアーキテクトの視点から
- このブログで、ワンクリックでAurora DSQLクラスターを作成できる方法を紹介しました。これは真のサーバーレスです。
- また、AWS Lambda関数を用いてAurora DSQLデータベースを管理する真のサーバーレスソリューションの例も見ました。Aurora DSQLはマイクロサービス、サーバーレス、イベント駆動アーキテクチャのアプリケーションパターンに理想的です
- Amazon Auroraは開発者にとってゲームチェンジャーであり、自動スケーリング、高可用性、レジリエンスを備えたサーバーレスアーキテクチャを提供します。手動のデータベース管理の必要を排除し、開発者はアプリケーション構築に専念できます。Auroraを使えば、開発者は信頼性と効率性を確保しつつ、より速くイノベーションを展開できます。
- Aurora DSQLはPostgreSQL互換なので、馴染みのあるドライバー、オブジェクトリレーショナルマッピング(ORM)、フレームワーク、SQL機能を利用できます。
*ブログで紹介されたLambdaソリューションを試しましたか?また、サーバーレスイベント駆動型やマイクロサービスアーキテクチャにとってゲームチェンジャーになると思いますか? *