Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@gotchane

MySQL 互換 Aurora Serverless の Data API を AWS SDK for Ruby で実行してみる

はじめに

Amazon Aurora Serverless の Data API が MySQL 互換のバージョンで使えるようになっていますね。

どんな形で使えるのか、AWS SDK for Ruby で実行して試してみました。

前提

以下は準備できていることとします。

  • Amazon Aurora: MySQL 互換 のインスタンス
  • Aurora のキャパシティタイプ: Serverless
  • Web Service Data API: 有効化
  • AWS SDK for Ruby V3 が使えるようになっている

※ Amazon Aurora は無料では利用できないようですので、料金など確認の上検証してください。

tl;dr

以下のような形でできました。

sample.rb
require 'aws-sdk'

# 認証情報設定
Aws.config.update({
  credentials: Aws::Credentials.new('AWS_ACCESS_KEY', 'AWS_SECRET_ACCESS_KEY')
})

# Data API から SQL 実行
client = Aws::RDSDataService::Client.new(region: 'ap-northeast-1')
resp = client.execute_statement({
  secret_arn: "arn:aws:secretsmanager:ap-northeast-1:000000000000:secret:rds-db-credentials/xxxx", # Aurora クラスター作成時の暗号化キーの ARN(Secrets Manager で確認可能)
  resource_arn: "arn:aws:rds:ap-northeast-1:000000000000:cluster:xxx", # Aurora クラスターの ARN
  sql: "select TABLE_SCHEMA, TABLE_NAME from information_schema.tables LIMIT 3;", # 検証用 SQL
})

# レスポンスを表示
resp.records.each do |record|
  puts "#{record[0].string_value} #{record[1].string_value}"
end

上記を実行すると、以下のようなレスポンスが返却されます。

$ ruby sample.rb

information_schema CHARACTER_SETS
information_schema COLLATIONS
information_schema COLLATION_CHARACTER_SET_APPLICABILITY

レスポンスについて

レスポンスは Aws::RDSDataService::Types::ExecuteStatementResponse クラスのオブジェクトで返却されます。

そのオブジェクトの中の records メソッドで Array<Array<Types::Field>>という形の2次元配列が取得できます。

1つ1つのデータは、Aws::RDSDataService::Types::Field クラスのオブジェクトで表されています。今回は string_value メソッドから値を取得できました。

ハマったエラー

Aws::Errors::MissingCredentialsError: unable to sign request without credentials set

実行するときはアクセスキーを指定しましょう。
参考 issue: https://github.com/aws/aws-sdk-ruby/issues/1951

Aws.config.update({
  credentials: Aws::Credentials.new('ACCESS_KEY', 'SECRET_ACCESS_KEY')
})

Aws::RDSDataService::Errors::BadRequestException: This API is deprecated and not available. Use ExecuteStatement API instead

execute_sql メソッドは deprecated のようです。

おわりに

AWS SDK for Ruby で Aurora Serverless の Data API を実行することができました。
便利に使うにはここからデータの加工が必要かもしれませんが、最低限確認出来てよかったです。

参考

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What is going on with this article?