RDS インスタンスに接続するように Lambda 関数を設定する方法を教えてください。

最終更新日: 2021 年 1 月 5 日

AWS Lambda 関数を Relational Database Service (RDS) インスタンスに接続したいと考えています。そうするためにネットワーク設定を行うにはどうしたらよいですか?

簡単な説明

Lambda 関数を RDS インスタンスに接続するには、接続を許可するようにそれぞれのネットワーク設定を行う必要があります。

設定は次の接続の種類ごとに異なります。

  • 同じ Virtual Private Cloud (VPC) 内の Lambda 関数と RDS インスタンス
  • 異なる VPC 内の Lambda 関数と RDS インスタンス
  • Lambda 関数とパブリック RDS インスタンス

Lambda 関数のネットワーク設定を行う方法については、「Lambda コンソールでの VPC アクセスの設定」を参照してください。Lambda 関数を Aurora DB クラスターに接続するには、Aurora Serverless の Data API を使用します。

注: ネットワーク設定が正しくない場合、Lambda 関数はタイムアウトし、Task timed out エラーメッセージが表示されます。

解決方法

重要: 次の例に示されている各ポート範囲ソース、および宛先の設定を、独自のネットワーク設定に合わせて変更してください。Transmission Control Protocol (TCP) は、ネットワーク設定の種類ごとに必要なプロトコルです。

同じ VPC 内の Lambda 関数と RDS インスタンス

同じ VPC 内の RDS インスタンスに Lambda 関数を接続する場合は、次のネットワーク設定を使用します。

注: VPC 内のすべてのサブネットには、デフォルトでローカルルートが含まれています。宛先は VPC のクラスレスドメイン間ルーティング (CIDR) で、ターゲットはローカルです。詳細については、「ルートテーブル」を参照してください。

1.    セキュリティグループでは、次のいずれかのネットワーク設定を使用します。

同じセキュリティグループに接続されているインスタンスについては、セキュリティグループをインバウンドルールのソースにし、アウトバウンドルールの宛先にします。

例えば、Lambda 関数と RDS インスタンスが両方ともセキュリティグループ sg-abcd1234 にある場合、各インスタンスには次のインバウンドルールとアウトバウンドルールが含まれます。

同じセキュリティグループにアタッチされたインスタンスのインバウンドルールの例

タイプ プロトコル ポート範囲 ソース
カスタム TCP TCP 3306 sg-abcd1234

同じセキュリティグループにアタッチされたインスタンスのアウトバウンドルールの例

タイプ プロトコル ポート範囲 宛先
カスタム TCP TCP 3306 sg-abcd1234

- または -

異なるセキュリティグループにあるインスタンスについては、両方のセキュリティグループが相互にアクセスできるようにしてください。

例えば、Lambda 関数がセキュリティグループ sg-1234 にあり、RDS インスタンスが sg-abcda にある場合、各グループには次のルールが適用されます。

接続先の RDS インスタンスとは異なるセキュリティグループにある Lambda 関数のアウトバウンドルールの例

タイプ プロトコル ポート範囲 宛先
カスタム TCP TCP 3306 sg-abcd

接続先の Lambda 関数とは異なるセキュリティグループにある RDS インスタンスのインバウンドルールの例

タイプ プロトコル ポート範囲 ソース
カスタム TCP TCP 3306 sg-1234
重要: ルールがデータベースのポートを介した TCP 接続を許可していることを確認してください。

2.    ネットワークアクセスコントロールリスト (NACL) については、インバウンドルールおよびアウトバウンドルールで Lambda 関数と RDS インスタンス間の通信が許可されていることを確認します。    

注: デフォルトでは、NACL はすべてのインバウンドおよびアウトバウンドトラフィックを許可します。ただし、これらのデフォルト設定は変更できます。

NACL を設定する場合は、次の手順を実行します。

RDS インスタンスおよび Lambda 関数に関連付けられた各サブネットの NACL で、他のインスタンスのサブネットの CIDR へのアウトバウンド TCP 接続を許可していることを確認します。

注: 次の例では、CIDR によってラベル付けされた 4 つのサブネットの例を使用しています。
Lambda 関数のサブネットの場合、172.31.1.0/24 および 172.31.0.0/28。
RDS インスタンスのサブネットの場合、172.31.10.0/24 および 172.31.64.0/20

Lambda 関数のサブネットの NACL に対するアウトバウンドルールの例

タイプ プロトコル ポート範囲 宛先 許可/拒否
カスタム TCP TCP 3306 172.31.10.0/24 許可
カスタム TCP TCP 3306 172.31.64.0/20 許可

重要: RDS インスタンスのサブネットの NACL にも同じアウトバウンドルールを適用する必要がありますが、宛先を Lambda のサブネットの CIDR として設定する必要があります。

各サブネットの NACL には、他のインスタンスのサブネットの CIDR 範囲にわたる一時ポートに対するインバウンドルールも設定されていることを確認します。

Lambda 関数のサブネットの NACL に対するインバウンドルールの例

タイプ プロトコル ポート範囲 送信元 許可/拒否
カスタム TCP TCP 1024-65535 172.31.10.0/24 許可
カスタム TCP TCP 1024-65535 172.31.64.0/20 許可

重要: 同じインバウンドルールを RDS インスタンスのサブネットの NACL に適用する必要がありますが、ソースは Lambda のサブネットの CIDR として設定されます。

異なる VPC 内の Lambda 関数と RDS インスタンス

まず、VPC ピアリングを使用して 2 つの VPC を接続します。次に、以下のネットワーク設定を使用して、一方の VPC の Lambda 関数を他方の RDS インスタンスに接続します。

重要: VPC ピアリングで、ドメインネームサーバー (DNS) の解決が有効になっていることを確認してください。

1.    [ルートテーブル] で、次の項目を検索して、VPC ピア接続が成功したことを確認します。
[宛先] で、ピア接続された VPC の CIDR を探します。
[ターゲット] で、ピア接続を探します。

注: 以下の例には、CIDR によってラベル付けされた 2 つのサブネットの例が含まれています。

ピア接続された VPC の場合は、172.31.0.0/16。ピア接続の場合は、pcx-01234abcd。

異なる VPC 内の Lambda 関数と RDS インスタンスのルートテーブルの例

宛先 ターゲット
172.31.0.0/16 pcx-01234abcD
10.0.0.0/16 ローカル

2.    セキュリティグループでは、次のネットワーク設定を使用します。

Lambda 関数のセキュリティグループでは、RDS インスタンスの VPC の CIDR へのトラフィックの出入りが許可されていることを確認します。

注: 以下の例には、CIDR によってラベル付けされた 2 つのサブネットの例が含まれています。
RDS インスタンスの場合、172.31.0.0/16
Lambda 関数の場合、10.0.0.0/16

RDS インスタンスとは異なる VPC にある Lambda 関数のアウトバウンドルールの例

タイプ プロトコル ポート範囲 宛先
カスタム TCP TCP 3306 172.31.0.0/16
RDS インスタンスのセキュリティグループでは、トラフィックが Lambda 関数のセキュリティグループの CIDR に出入りすることが許可されていることを確認します。

Lambda 関数とは異なる VPC 内の RDS インスタンスのインバウンドルールの例

タイプ プロトコル ポート範囲 ソース
カスタム TCP TCP 3306 10.0.0.0/16

3.    NACL については、上記の同じ VPC セクションにある Lambda 関数と RDS インスタンスのステップ 3 の手順に従います。Lambda 関数のサブネット CIDR のオリジンは、別の VPC にあります。

Lambda 関数とパブリック RDS インスタンス

1.    VPC で DNS ルーティングが有効になっていることを確認します。

2.    次のいずれかのネットワーク設定を使用します。

パブリック RDS インスタンスと同じ VPC 内の Lambda 関数については、上記の 同じ VPC 内の Lambda 関数と RDS インスタンスセクションを参照してください。

注: Lambda 関数はインターネットアクセスを必要としません。プライベート IP アドレスを使用して RDS を解決します。

- または -

異なる VPC 内の Lambda 関数とパブリック RDS インスタンスについては、上記の異なる VPC 内の Lambda 関数と RDS インスタンスセクションを参照してください。

注: VPC に含まれない Lambda 関数は自動的にインターネットにアクセスでき、パブリック RDS インスタンスの IP アドレスを解決できます。

3.    パブリック RDS 設定に次の条件が当てはまることを確認します。RDS インスタンスにアタッチされたサブネットはパブリック (IGW へのデフォルトルート) である。すべての NACL は、すべてのインバウンドおよびアウトバウンドアクセスを許可している。セキュリティグループでは、すべてのインバウンド接続を許可している。

注: NACL アクセスを制限する場合は、NACL が Lambda の VPC CIDR または EC2 CIDR の範囲との接続を許可していることを確認してください。アウトバウンド接続がデータベースのポートに設定され、インバウンド接続が一時ポート (1024-65535) に設定されていることを確認します。セキュリティグループのインバウンドアクセスを制限する必要がある場合は、そのグループが Lambda の VPC CIDR または EC2 CIDR 範囲からのインバウンドアクセスを許可していることを確認してください。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?