RDS インスタンスに接続するように Lambda 関数を設定するにはどうすればよいですか?
AWS Lambda 関数を Amazon Relational Database Service (Amazon RDS) インスタンスに接続したいと考えています。
簡単な説明
注: 次の情報とステップは、Amazon RDS インスタンスを参照しています。ただし、この解決策は、仮想プライベートクラウド (VPC) にあるすべてのエンドポイントまたはデータベースにも適用されます。
Lambda 関数を RDS インスタンスに接続するには、接続を許可するようにネットワーク設定を行います。
設定は次の接続タイプごとに異なります。
- 同じ VPC 内の Lambda 関数と RDS インスタンス
- 異なる VPC 内にある Lambda 関数と RDS インスタンス
セキュリティ上の理由から、RDS インスタンスを VPC 内に保持することがベストプラクティスです。パブリックデータベースの場合は、 Amazon DynamoDB などの NoSQL データベースサービスを使用します。
VPC の外部にある Lambda 関数は、VPC 内にある RDS インスタンスにアクセスできません。
Lambda 関数のネットワーク設定を行う方法については、「VPC 内のリソースにアクセスするために Lambda 関数を設定する」を参照してください。ネットワーク設定が正しくない場合、Lambda 関数はタイムアウトし、「タスクがタイムアウトしました」というエラーメッセージが表示されます。
Lambda 関数を Amazon Aurora DB クラスターに接続するには、Aurora サーバーレスのデータ API を使用します。
解決策
重要: 次の例に示されている各 [ポート範囲]、[送信元]、および**[宛先]** の設定を、実際のネットワーク設定に合わせて変更してください。Transmission Control Protocol (TCP) は、ネットワーク設定のタイプごとに必要なプロトコルです。
同じ VPC 内の Lambda 関数と RDS インスタンス
Lambda 関数を同じ VPC 内の RDS インスタンスに接続する場合は、次のネットワーク設定を使用します。
注: デフォルトでは、VPC 内のすべてのサブネットにローカルルートが含まれます。宛先は VPC の Classless Inter-Domain Routing (CIDR) で、ターゲットは local です。詳細については、「ルートテーブルの概念」を参照してください。
1. **[セキュリティグループ]**で、次のいずれかのネットワーク設定を使用します。
同じセキュリティグループにアタッチされているインスタンスの場合は、セキュリティグループをインバウンドルールのソースにします。セキュリティグループをアウトバウンドルールの宛先にします。
たとえば、Lambda 関数と RDS インスタンスの両方がセキュリティグループ sg-abcd1234 にある場合、各インスタンスには次のインバウンドルールとアウトバウンドルールがあります。
同じセキュリティグループにアタッチされたインスタンスのインバウンドルールの例
タイプ | プロトコル | ポートの範囲 | ソース |
カスタム TCP | TCP | 3306 | sg-abcd1234 |
同じセキュリティグループにアタッチされたインスタンスのアウトバウンドルールの例
タイプ | プロトコル | ポート範囲 | 宛先 |
カスタム TCP | TCP | 3306 | sg-abcd1234 |
または
異なるセキュリティグループにあるインスタンスについては、セキュリティグループが相互にアクセスできるようにしてください。
たとえば、Lambda 関数がセキュリティグループ sg-1234 にあり、RDS インスタンスが sg-abcd にある場合、各グループには次のルールが適用されます。
接続先の RDS インスタンスとは異なるセキュリティグループの Lambda 関数のアウトバウンドルールの例
タイプ | プロトコル | ポート範囲 | 宛先 |
カスタム TCP | TCP | 3306 | sg-abcd |
接続先の Lambda 関数とは異なるセキュリティグループの RDS インスタンスのインバウンドルールの例
タイプ | プロトコル | ポートの範囲 | ソース |
カスタム TCP | TCP | 3306 | sg-1234 |
重要: ルールがデータベースのポートを介した TCP 接続を許可していることを確認してください。
2. **ネットワークアクセスコントロールリスト (NACL) **については、インバウンドルールとアウトバウンドルールで Lambda 関数と RDS インスタンス間の通信が許可されていることを確認します。
注: デフォルトでは、NACL はすべてのインバウンドトラフィックとアウトバウンドトラフィックを許可します。ただし、これらのデフォルト設定は変更できます。
RDS インスタンスと Lambda 関数に関連付けられているサブネットごとに、他のインスタンスのサブネットの CIDR へのアウトバウンド TCP 接続を許可するように NACL を設定します。
注: 次の例では、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 関数をもう一方の VPC の RDS インスタンスに接続します。
重要: VPC ピアリング接続のためにドメインネームシステム (DNS) を必ずオンにしてください。
1. ルートテーブルで、VPC ピアリング接続が成功していることを確認します。
宛先で、ピアリング接続された VPC の CIDR を探します。
ターゲットで、ピアリング接続を探します。
注: 次の例には、2 つの VPC の例が含まれています。
ソース VPC の CIDR (Lambda 関数): 10.0.0.0/16
ピアリングされた VPC の CIDR (RDS インスタンス): 172.31.0.0/16
ピアリング接続: pcx-01234abcd
Lambda 関数に関連付けられているソース VPC のルートテーブルの例
宛先 | ターゲット |
172.31.0.0/16 | pcx-01234abcd |
10.0.0.0/16 | ローカル |
RDS インスタンスを持つピアリングされた VPC のルートテーブルの例
宛先 | ターゲット |
10.0.0.0/16 | pcx-01234abcd |
172.31.0.0/16 | ローカル |
詳細については、「VPC ピアリング接続のルートテーブルを更新する」を参照してください。
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 にあります。
注: VPC ピアリングの代わりに、AWS PrivateLink を使用して VPC をまたいで Amazon RDS にアクセスすることもできます。このソリューションは、同じ AWS リージョン内の AWS アカウントと VPC 間で機能します。
関連するコンテンツ
- 質問済み 2ヶ月前lg...
- 質問済み 2ヶ月前lg...
- 質問済み 4ヶ月前lg...
- AWS公式更新しました 2年前