Lambda 関数のデータベースアクセスの設定 - AWS Lambda

Lambda 関数のデータベースアクセスの設定

関数の Amazon RDS Proxy データベースプロキシを作成できます。データベースプロキシは、データベース接続のプールを管理し、関数からのクエリを中継します。これにより、関数はデータベース接続を使い果たすことなく、同時実行レベルを上げることができます。

データベースプロキシの作成 (コンソール)

Lambda コンソールを使用して、Amazon RDS Proxy データベースプロキシを作成できます。

データベースプロキシを作成するには

  1. Lambda コンソールで [Functions (関数)] ページを開きます。

  2. 関数を選択します。

  3. [設定]、[ データベースプロキシ ] の順にクリックします。

  4. [Add database proxy (データベースプロキシの追加)] を選択します。

  5. 次のオプションを設定します。

    • プロキシ識別子 – プロキシの名前。

    • RDS DB インスタンスサポートされている MySQL または PostgreSQL DB インスタンスまたはクラスター。

    • シークレット – データベースのユーザー名とパスワードを含む Secrets Manager シークレット。

      例 secret

      { "username": "admin", "password": "e2abcecxmpldc897" }
    • IAM ロール – シークレットを使用するためのアクセス許可、および Amazon RDS にロールの引き受けを許可する信頼ポリシーを備えた IAM ロール。

    • 認証 – 関数コードからプロキシに接続するための認証および認可方法。

  6. [Add] を選択します。

Pricing

Amazon RDS では、データベースのインスタンスサイズによって決定されるプロキシに対して時間単位の料金が発生します。詳細については、「RDS プロキシの料金」を参照してください。

プロキシの作成には数分かかります。プロキシが使用可能になったら、データベースエンドポイントではなくプロキシエンドポイントに接続するように関数を設定します。

スタンダードの Amazon RDS Proxy 料金が適用されます。詳細については、Amazon Aurora ユーザーガイドの「Amazon RDS Proxy による接続の管理」を参照してください。

認証のための関数のアクセス許可の使用

デフォルトでは、データベースへの接続に使用するのと同じユーザー名とパスワードでプロキシに接続できます。関数コードの唯一の違いは、データベースクライアントが接続するエンドポイントです。この方法の欠点は、安全な環境変数で設定するか、Secrets Manager から取得するいずれの場合も、パスワードを関数コードに公開する必要があることです。

パスワードの代わりに、関数の IAM 認証情報を使用して認証と認可を行うデータベースプロキシを作成できます。関数のアクセス許可を使用してプロキシに接続するには、[Authentication (認証)] を [Execution role (実行ロール)] に設定します。

Lambda コンソールは、必要なアクセス許可 (rds-db:connect) を実行ロールに追加します。その後、AWS SDK を使用して、プロキシへの接続を許可するトークンを生成できます。次の例は、Node.js の mysql2 ライブラリとのデータベース接続を設定する方法を示しています。

dbadmin/index-iam.js – AWS SDK Signer

const signer = new AWS.RDS.Signer({ region: region, hostname: host, port: sqlport, username: username }) exports.handler = async (event) => { let connectionConfig = { host : host, user : username, database : database, ssl: 'Amazon RDS', authPlugins: { mysql_clear_password: () => () => signer.getAuthToken() } } var connection = mysql.createConnection(connectionConfig) var query = event.query var result connection.connect() }

詳細については、Amazon RDS ユーザーガイド の IAM データベース認証を参照してください。

サンプルアプリケーション

このガイドの GitHub リポジトリには、Lambda と Amazon RDS データベースの使用方法を示すサンプルアプリケーションがあります。以下の 2 つのアプリケーションがあります。

  • RDS MySQL – AWS CloudFormation テンプレート template-vpcrds.yml は、プライベート VPC に MySQL 5.7 データベースを作成します。サンプルアプリケーションでは、Lambda 関数はクエリをデータベースにプロキシします。関数とデータベーステンプレートは両方とも、Secrets Manager を使用してデータベース認証情報にアクセスします。

    
              The dbadmin function relays queries to a database.

  • List Manager – プロセッサ関数は Kinesis ストリームからイベントを読み取ります。イベントのデータを使用して DynamoDB テーブルを更新し、イベントのコピーを MySQL データベースに保存します。

    
              The processor function processes Kinesis events and stores the events in a
                MySQL database.

サンプルアプリケーションを使用するには、GitHub リポジトリの RDS MySQLList Manager の手順に従います。