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 のセキュリティグループ
保存