RDS インスタンスに接続するように Lambda 関数を設定するにはどうすればよいですか?

所要時間4分
0

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) で、ターゲットはローカルです。詳細については、「ルートテーブルの概念」を参照してください。

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

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

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

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

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

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

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

または

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

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

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

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

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

タイププロトコルポート範囲ソース
カスタム TCPTCP3306sg-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 に対するアウトバウンドルールの例

タイププロトコルポート範囲宛先許可/拒否
カスタム TCPTCP3306172.31.10.0/24許可
カスタム TCPTCP3306172.31.64.0/20許可

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

各サブネットの NACL に、他のインスタンスのサブネットの CIDR 範囲にわたる一時ポートに対するインバウンドルールがあることを確認します。

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

タイププロトコルポート範囲ソース許可/拒否
カスタム TCPTCP1024-65535172.31.10.0/24許可
カスタム TCPTCP1024-65535172.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/16pcx-01234abcd
10.0.0.0/16ローカル

RDS インスタンスを持つピアリングされた VPC のルートテーブルの例

宛先ターゲット
10.0.0.0/16pcx-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 関数のアウトバウンドルールの例

タイププロトコルポート範囲宛先
カスタム TCPTCP3306172.31.0.0/16

RDS インスタンスのセキュリティグループでは、Lambda 関数のセキュリティグループの CIDR へのトラフィックの出入りを許可します。

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

タイププロトコルポート範囲ソース
カスタム TCPTCP330610.0.0.0/16

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

注: VPC ピアリングの代わりに、AWS PrivateLink を使用して VPC をまたいで Amazon RDS にアクセスすることもできます。このソリューションは、同じ AWS リージョン内の AWS アカウントと VPC 間で機能します。


AWS公式
AWS公式更新しました 1年前
コメントはありません