RDS ProxyをAurora MySQLで
2021/09/27
Lambda関数をたくさん同時実行してMySQLにアクセスしても大丈夫なようにRDS Proxyを試してみました。
AuroraはMySQLでクラスターを起動しておきました。
目次
RDS Proxyの作成
RDSコンソールからプロキシーの作成をしました。
エンジンはMySQL、データベースは作成済のAuroraクラスターを指定して、接続プールの最大数は100%にしました。
Secrets Managerが必須なので作成しました。
ユーザー名、パスワードはAuroraクラスターのマスターユーザー名とパスワードを指定しました。
IAMロールは新規作成しました。
サブネットはAuroraクラスターのサブネットグループと同じ。
セキュリティグループはAuroraクラスターと同じですが、自分自信をソースとして3306を許可しておきました。
データベースの準備
|
1 2 3 4 |
create table demo.user (user_id int, user_name varchar(20)); insert into demo.user(user_id, user_name) values(1, ‘yamashita’); insert into demo.user(user_id, user_name) values(2, ‘mitsuhiro’); |
デモデータを用意しておきました。
テスト用のLambda
Lambdaを実行するLambda関数
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import json import boto3 def lambda_handler(event, context): for i in range(100): boto3.client('lambda').invoke( FunctionName='LambdaRDS', InvocationType='Event', ) print(i) |
データベースに接続するLambda関数を100回実行するLambda関数です。
データベースに接続するLambda関数
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
import boto3 import base64 import json import pymysql import time from botocore.exceptions import ClientError def get_secret(): secret_name = "proxydemo" region_name = "us-east-1" session = boto3.session.Session() client = session.client( service_name='secretsmanager', region_name=region_name ) try: get_secret_value_response = client.get_secret_value( SecretId=secret_name ) except ClientError as e: print(e.response['Error']['Code']) if e.response['Error']['Code'] == 'DecryptionFailureException': raise e elif e.response['Error']['Code'] == 'InternalServiceErrorException': raise e elif e.response['Error']['Code'] == 'InvalidParameterException': raise e elif e.response['Error']['Code'] == 'InvalidRequestException': raise e elif e.response['Error']['Code'] == 'ResourceNotFoundException': raise e else: if 'SecretString' in get_secret_value_response: secret = get_secret_value_response['SecretString'] else: secret = base64.b64decode(get_secret_value_response['SecretBinary']) return secret def lambda_handler(event, context): secret_dict = json.loads(get_secret()) connection = pymysql.connect( host=secret_dict['host'], user=secret_dict['username'], password=secret_dict['password'], db='demo', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) try: with connection.cursor() as cursor: sql = "SELECT * FROM user" cursor.execute(sql) dbdata = cursor.fetchall() for rows in dbdata: print(rows) time.sleep(60) finally: connection.close() |
pymysqlはLambdaレイヤーでアップロードしています。
接続してSELECTを実行するだけです。
Auroraクラスタに直接接続
まずは、Auroraクラスタに直接接続してみました。
リクエストの数だけDB接続が作成され、途中から次のエラーになりました。
[ERROR] OperationalError: (1040, ‘Too many connections’)
RDS Proxyを使って接続
プロキシエンドポイントが作成されていたので、host=の行を差し替えました。
今回は’Too many connections’エラーが発生することなくすべて処理ができました。
RDS Proxyがうまくやってくれたのですね。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「AWS認定資格試験テキスト AWS認定AIプラクティショナー」という本を書きました。
「AWS教科書 AWS認定デベロッパーアソシエイト テキスト&問題集 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
関連記事
-
-
VPC環境でLambdaを100同時実行してプライベートIPアドレスを確認した
2019年9月発表のLambda 関数が VPC 環境で改善されます以降に、VP …
-
-
ENAが有効なEC2インスタンスの帯域幅をiperf3で確認してみた
同じ Amazon VPC 内で Amazon EC2 Linux インスタンス …
-
-
Route 53 の加重ラウンドロビンルーティングでロードバランサー
Route 53の加重ラウンドロビンで両方1に設定してみました。 上図はイメージ …
-
-
TwilioからのリクエストをAPI Gateway+LambdaでTwimlを返して処理する
Twilioで着信した時のリクエスト先としてTwimlをWebサーバやS3で用意 …
-
-
IAMセッションポリシーの利用(GetFederationToken)
GetFederationTokenでのセッションポリシーは、呼び出し元のIAM …
-
-
Amazon LinuxにRedmine をインストールする(手順整理版)
Amazon LinuxにRedmineをインストールしました手順を記載します。 …
-
-
ハンズオン: サーバーレスアーキテクチャ ~AWS認定デベロッパーアソシエイト(DVA-C02)~
このブログは2026年6月29日翔泳社さんより発売される「AWS教科書 AWS認 …
-
-
2017年、このブログ(WordPress(Amazon EC2 + RDS))で対応してきたこと
Amazon Web Services Advent Calendar 2017 …
-
-
AWSアカウント(Organizations)新規作成2026年5月版
2026年5月に新規組織を作成しましたので、その際の手順の記録です。 アカウント …
-
-
Active Directory認証でAWSマネジメントコンソールにSSO
こちらの2つのサイトを参考にすすめました。 Active Directory資産 …




