Photoruction工事中!

Photoructionの開発ブログです!

LambdaからRDSにアクセスができない理由

初めまして!CREとしてエンジニアをやってますkazuです🦌

社内システム自動化プロジェクトのインフラ構成を考えていた際、本番環境のRDSにLambdaからアクセスする必要があり、「とりあえずRDSにLambdaからアクセスさせればいいんだな〜」と思っていたところ、実は簡単にアクセスできるものではないことを知ったので、その時調べたLambdaとRDSの関係についてまとめた記事になります。

※こちらの図は、業務で作成したインフラ構成図とは異なるものです。

そもそも、LambdaからRDSに接続することになったワケ

本プロジェクトは、要件定義から開発まで一貫して担当しているプロジェクトであり、これまで社内で手動でやっていたのものを自動化する事が目的です。最終的にはLambdaからRDSにアクセスをし、本番DBの値を更新する事でその結果をSlackに通知する事を目指しています。

正直なところAWSに関する知識は乏しく、「Lambdaを呼び出して実行すれば、本番DBを更新できるだろう」と考えていました。

しかし、インフラ構成図をもとにフィードバックを受ける中で、LambdaからRDSへのアクセスが簡単ではないことを知り、その理由について疑問が湧いてきたので調べることにしました。

なぜ、LambdaからRDSへ接続ができないのか

  • RDSの作成場所がVPC内であること
  • VPCに接続するには、同じVPCのプライベートサブネット空間にLambdaを配置する必要がある

RDSの作成場所がVPC内であること

Auroraなどの RDSは、基本的にVPC内のプライベートサブネットに配置されます。これは、セキュリティ面を考慮して、外部から直接アクセスできないようにするためです。パブリックネットワークに露出させないことで、外部からの不正アクセスリスクを低減し、安全性を確保しています。これにより、データベースを社内や関連システムからのみアクセス可能な状態に保つ事ができます。

プライベートサブネットにあるRDSに接続するには

VPC内のプライベートサブネットにある RDSに接続するためには、Lambdaも同じVPCのプライベートサブネット内に配置する必要があります。Lambdaの配置場所は、パブリックサブネットとプライベートサブネットのどちらかを選択する事が可能ですが、RDSとの接続を前提とする場合は、プライベートサブネット内にLambdaを置きます。

Lambdaがインターネットと接続できない

ここで、一つ問題があります。Lambdaをプライベートサブネット内に配置することで、RDSへのアクセスは可能になりましたが、インターネットとの接続ができません。

プライベートサブネット内にあるLambdaが外部のAPIやインターネットリソースにアクセスする必要がある場合、以下のような方法を使ってインターネット接続を実現する事ができます。

NATゲートウェイを使う

NAT(Network Address Translation)ゲートウェイは、プライベートサブネット内のリソースがインターネットに接続できるようにするAWSのサービスです。 NATゲートウェイをパブリックサブネットに配置し、プライベートサブネット内のLambdaからインターネットにリクエストを送ると、そのリクエストはNATゲートウェイを通じてインターネットに出ていきます。これにより、プライベートサブネット内にあるLambdaが安全に外部通信を行えるようになります。

NATゲートウェイは一方向の通信を許可する仕組みであり、インターネットからの直接アクセスはできないため、セキュリティを保ちつつインターネット接続する事が可能です。

まとめ

今回は、LambdaがRDSにアクセスできない理由について解説しました。まだまだAWSについては勉強が必要そうです。

株式会社フォトラクションでは一緒に働く仲間を募集しています

www.wantedly.com