Aurora Serverless Data APIを有効にしてLambdaからクエリを実行
2021/09/28
目次
Aurora Serverless作成
MySQLを作成しました。
作成時にData APIを有効にしました。
LambdaのIAMロール
1 2 3 4 5 6 7 8 9 10 |
{ "Sid": "RDSDataServiceAccess", "Effect": "Allow", "Action": [ "rds-data:ExecuteStatement", "rds-data:ExecuteSql" ], "Resource": "arn:aws:rds:us-east-1:123456789012:cluster:cluster-id" } |
IAMロールに設定するIAMポリシーです。
rds-dataは、RDSDataServiceのAPIアクションを許可する必要があるのですね。
今回の検証ではExecuteStatementのみでOKです。
ExecuteSqlというのを足してますが、これはboto3のexecute_sqlを実行してみたかったのですが、結果から言うとexecute_sqlは非推奨でした。
他にはSecrets Managerへの権限が必要です。
Secrets Manager
Aurora Serverlessで作成したMySQLに対してシークレットを作成しようと思ったらできてました。
Data APIに必須だからですかね。
便利ですね。
Lambda関数
コードを短くするためと再利用の必要がなかったので直接書いてますが、必要に応じて変数化しますよね。
デモ用のコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import json import boto3 def lambda_handler(event, context): rds_data_client = boto3.client('rds-data') response = rds_data_client.execute_sql( dbClusterOrInstanceArn='arn:aws:rds:us-east-1:123456789012:cluster:cluster-id', awsSecretStoreArn='arn:aws:secretsmanager:us-east-1:123456789012:secret:secret-name', database='demo', sqlStatements='select * from user' ) print (response['records']) |
An error occurred (BadRequestException) when calling the ExecuteSql operation: This API is deprecated and not available. Use ExecuteStatement API instead
ExecuteSqlは非推奨なのでExecuteStatementを使用しましょうというエラーでした。
ということでExecuteStatement版です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import json import boto3 def lambda_handler(event, context): rds_data_client = boto3.client('rds-data') response = rds_data_client.execute_statement( resourceArn='arn:aws:rds:us-east-1:123456789012:cluster:cluster-id', secretArn='arn:aws:secretsmanager:us-east-1:123456789012:secret:secret-name', database='demo', sql='select * from user' ) print (response['records']) |
成功しました。
1 2 |
[[{'longValue': 1}, {'stringValue': 'yamashita'}], [{'longValue': 2}, {'stringValue': 'mitsuhiro'}]] |
こんなレスポンスでした。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
Rocket.ChatからOut Going Webhookを設定してみる
API GatewayとLambda とりあえず、どんなデータが飛んでくるのか見 …
-
AWS ControlTowerで既存アカウントをまとめて追加
AWS Organizationsに新たに招待したアカウントをAWS Contr …
-
CloudFormationで起動テンプレートのバージョン更新をした際にAuto ScalingのEC2インスタンスを置き換える
やりたいこと タイトルのとおり、起動テンプレートのバージョン変更(AMIの置換) …
-
DS18B20センサー+Raspberry Piで取得した温度をAmazon Kinesis FirehoseからS3へ格納してAthenaでクエリーしたのをQuickSightで可視化する
JAWS DAYS 2017でやりますハンズオンの「[IoTハンズオン] Ras …
-
AWS Organizationsで組織全体のAWS CloudTrailを有効にしました
Organizationsのサービスメニューから、CloudTrailを選択して …
-
Amazon Glacierでボールトロックポリシーの作成開始をしてみました
Glacierを単体で使用することもそうそうないので、確認しました。 まずボール …
-
AWS認定試験の自宅受験で壁のポスターを注意されちゃいました
AWS認定オンライン受験をしてみましたに書きましたとおり、自宅受験デビューしまし …
-
別アカウントのVPCからAWS PrivateLinkを使う
VPC エンドポイントサービス (AWS PrivateLink)を参考にしまし …
-
特定AWSアカウント特定リージョンのCloudFormationスタックを削除するLambda(Python)
やりたいこと 特定アカウント内特定リージョン内のCloudFormationスタ …
-
iPad ProのWorking CopyでAWS CodeCommitのリポジトリを使う
iPad Proを導入しましたので、原稿執筆や校正でフル活用しようと思いまして。 …