AWS Lambda から RDS(PostgreSQL)にアクセスする

プログラミング
公開: 2023年03月31日

最小コード(※RDSがパブリック公開されている場合)

※参考 LambdaでPostgreSQLを使う(Python + psycopg2)

レイヤーの追加で arn:aws:lambda:ap-northeast-1:898466741470:layer:psycopg2-py38:1 を追加することで psycopg2 が使用可能になる。 ただし、Python3.8のみ(3.9では使用できない)

import os
import json
import psycopg2

from psycopg2 import Error, connect

def lambda_handler(event, context):
    print('before-conn')
    
    try:
        conn = psycopg2.connect(host = 'database-global.ckmh7nw5ehw1.ap-northeast-1.rds.amazonaws.com', port = '5432', dbname = 'postgres',user = 'hoge',password = 'fuga')
    except(Exception, Error) as error:
        print("PostgreSQLへの接続時のエラーが発生しました",error)    
        
    print('after-conn')

    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

実行結果

Response
{
  "statusCode": 200,
  "body": "\"Hello from Lambda!\""
}

Function Logs
START RequestId: c5d73734-f350-4910-8b7d-a2db930e05c2 Version: $LATEST
before-conn
after-conn
END RequestId: c5d73734-f350-4910-8b7d-a2db930e05c2
REPORT RequestId: c5d73734-f350-4910-8b7d-a2db930e05c2	Duration: 325.07 ms	Billed Duration: 326 ms	Memory Size: 128 MB	Max Memory Used: 50 MB	Init Duration: 182.84 ms

RDSがパブリック公開されていない場合

参考
VPC 内のリソースにアクセスするように Lambda 関数を設定する
チュートリアル: Amazon VPC の Amazon RDS にアクセスする Lambda 関数の使用

IAM > ロール > ロールを作成

  • 信頼されたエンティティタイプ: AWS のサービス

  • ユースケース: Lambda

  • 許可ポリシー AWSLambdaVPCAccessExecutionRole

  • ロール名 任意(例:lambda-vpc-role)

ロールの設定

Lambda > 関数 > 対象のLambda
設定 > アクセス権限 > 実行ロール > 編集
既存のロールを使用する > lambda-vpc-role > 保存

VPCの設定

Lambda > 関数 > 対象のLambda
設定 > VPC > 編集

  • VPC: RDS の VPC
  • サブネット: RDS のサブネット
  • セキュリティグループ: RDS のセキュリティグループ

保存