RDSのチュートリアル
RDSのベストプラクティス
RDS概要
RDSインスタンスタイプは主に3つあり、それぞれ用途が異なっている。
常時アクティビティが発生するケースはr/t クラス、増減の激しいアクティビティのケースはサーバーレスv2が適している。
-
サーバーレス v2
高速ケーリング可能対応のRDS
1 ACUで0.20 USD/時 (144 USD/月) - メモリ最適化クラス (r クラスを含む)
db.r6g.2xlargeインスタンスで914.69 USD/月 - バースト可能クラス (t クラスを含む)
db.t3.mediumで91.25 USD/月 - 最適化された読み取りクラス - 新規*
db.r6gd.xlargeインスタンスで0.51 USD/時
*PostgresSQLの読み取り専用DB
RDSとAuroraの違いは、データベース構造が異なっており、Auroraはコンピューティングインスタンスとストレージが分離しており、データを複数のアベイラビリティーゾーンに複製して、同時にアクセスしている。
RDSの作成
- Amazon RDSコンソール画面を開く
- データベース->データベースの作成を押す
- データベース作成方法は、標準作成を選択
- エンジンは、Aurora (MySQL comparable)を選択
- テンプレートは、開発/テストを選択
- DB クラスター識別子は、そのまま、database-1
- マスターユーザー名は、admin
- マスターパスワードは、適当な8文字以上
- もしくはSecret ManagerでKMSキーを管理・発行・ローテーションを行うよう設定する
- クラスターストレージ設定は、Aurora スタンダードを選択
- インスタンスの設定は、開発段階なら安いバースト可能なtクラスのインスタンスにする
- 可用性と耐久性は、別の AZ で Aurora レプリカ/リーダーノードを作成する (可用性のスケーリングに推奨)を選択
- 接続は、一旦EC2 コンピューティングリソースに接続しないでよい。後から、編集可能。
- データベース認証で、IAMデータベース認証を設定することもできる。
- *オプションで、その他の設定をする
- データベースの作成を押す
10~20分ほどで作成され、実行可能になる。
RDSの設定
- コンソール画面でデータベース->対象のデータベースを選択する
- アクションから必要な操作を行う
アクション | 意味 |
---|---|
一時的に停止 | 2 |
データベースアクティビティストリームを開始 | リアルタイムモニタリング |
削除 | |
EC2接続のセットアップ | VPC セキュリティグループを自動的に設定 |
Lambda接続のセットアップ | RDS プロキシ経由の接続を設定 |
AWSリージョンを追加 | |
リーダーの追加 | グローバルデータベース |
クロスリージョンのリードレプリカの作成 | クロスリージョンのリードレプリカ |
プルー/グリーンデプロイの作成-新規 | デプロイ方法 |
クローンの作成 | 複製 |
昇格 | レプリカの昇格 |
スナップショットの取得 | スナップショット作成 |
特定時点への復元 | 復元 |
バックトラック | 巻き戻し |
Amazon S3にエクスポート-新規 | |
レプリカのAuto Scalingの追加 | |
RDSプロキシの作成 | RDSプロキシ |
ElastiCacheクラスターの作成-新規 | ElastiCache |
ElastiCacheとRDS Proxyの追加設定をAWSは推奨しているようです。
クエリエディタでコンソール画面からSQL実行
Aurora Serverless v2でかつPostgresSQLのみ利用可能
しかも最近 2023/12/21
https://aws.amazon.com/jp/about-aws/whats-new/2023/12/amazon-aurora-postgresql-rds-data-api/
- RDSコンソール画面 -> クエリエディタを開く
- Aurora Serverless v2を立ち上げて、Data API を有効にしている場合は、下記入力画面が表示される。
データベース名:postgres
データベースパスワード:8桁
データベースの名前:インスタンスの名前
- 正常にログインできると、下記のようにSQLが打てる画面に遷移する
RDSの接続
- コンソール画面「接続とセキュリティ」タブからDB エンドポイントを確認する
データベース認証でSecrets Managerを使用する
- AWS Secrets Managerを開く
- 新しいシークレットを保存するを押す
- Amazon RDS データベースの認証情報を選択
- RDSで指定したユーザー名、パスワードを入力する
- 対象のRDインスタンス識別子を選択
- 次へを押す
- シークレットの名前を入力する
- 次へを押す
- 自動ローテーションを有効にする
- ローテーションスケジュール を設定する
- Lambda ローテーション関数の関数名を入力する
- 保存を押す
- 下記コマンドで認証情報を取得する
AWS CLIの場合
aws secretsmanager get-secret-value --secret-id シークレットの名前 --region ap-northeast-1
{
"ARN": "arn:aws:secretsmanager:ap-northeast-1:*************:secret:aaaaa-ASUwXN",
"Name": "aaaaa",
"VersionId": "******-ad9b-41ea-bf89-c40******",
"SecretString": "{\"username\":\"admin\",\"password\":\"aaaaaaaa\",\"engine\":\"mysql\",\"host\":\"database-1.cluster-cuuhfadkqugz.ap-northeast-1.rds.amazonaws.com\",\"port\":3306,\"dbClusterIdentifier\":\"database-1\"}",
"VersionStages": [
"AWSCURRENT"
],
"CreatedDate": "2024-02-08T10:18:59.858000+09:00"
}
Python SDKの場合
import boto3
from botocore.exceptions import ClientError
def get_secret():
secret_name = "aaaaa"
region_name = "ap-northeast-1"
# Create a Secrets Manager client
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:
raise e
secret = get_secret_value_response['SecretString']
Aurora Serverless v2 の特徴
起動・停止・再起動
RDS全般だが起動・停止・再起動で数十分くらいかかる。
再起動する場合は、ダウンタイムの発生に気を付ける。
容量のスケールダウンの仕様
Aurora Serverless v2の容量のスケールダウンは、以下の仕様がある。
- 下記の機能を使用していると、容量が最小容量までスケールダウンしない場合がある。
- かつ設定変更後は再起動しないと、設定が変更されないパラメータ(共有メモリパラメータ:max_connectionsやmax_locks_per_transaction 等)がある。
- Aurora Global Database
- CloudWatch Logs のエクスポート
- Aurora PostgreSQL 互換 DB クラスターでの pg_audit の有効化
- 拡張モニタリング
- Performance Insights
Aurora Auto Scalingはサポート外
自動で滑らかに垂直スケーリングするため、Auto Scalingによる水平スケーリングはあまり意味を持たないため、サポート外となっている。
モニタリング
-
デフォルトでコンソール画面からメトリクスを確認することができる。
重要なメトリクス- ServerlessDatabaseCapacity
DB インスタンスの容量で表される ACU 値 - ACUUtilization
ACU の使用率 - CPUUtilization
CPU の使用率 - FreeableMemory
未使用のメモリ量 - TempStorageIops
DB インスタンスにアタッチされたローカルストレージで実行された IOPS の数 - TempStorageThroughput
DB インスタンスに関連するローカルストレージとの間で転送されるデータの量
- ServerlessDatabaseCapacity
-
Performance Insights を使用したDB 負荷のモニタリング
より詳細にメトリクスをリアルタイムで監視・可視化することができるダッシュボード。
DB クラスターレベルで有効化可能。
CloudWatchログへ詳細なログを送る方法
- RDSコンソール画面を開く
- コンソール画面左メニューからパラメータグループを選択する
- パラメータグループの作成を押す
- 対象のデータベースと同じDB ファミリー(クラスターパラメータ)を選択し、適当にグループ名、説明を入力する
- 作成を押す
- 作成したパラメータグループを選択し、編集を押す
- general_logを検索し、値を1に変更する
- 変更を保存を押す
- 対象のデータベースの変更を押す
- 追加設定からDB クラスターのパラメータグループを選択する
- その下のログのエクスポートのセクションで、CloudWatch Logs に公開するログを選択する
監査ログ, 全般ログ, スロークエリログ, ログ出力
- 続行 -> クラスターの変更を押す
- DB インスタンスを再起動する
Aurora Serverless v2とAurora RDS Cluster間の変換
- Aurora RDS Clusterのライターまたはリーダーを Aurora Serverless v2 に変換する場合
DBインスタンスをAurora Serverless v2へ変換後、クラスター自体を以降するとダウンタイムなしで変換できる
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.upgrade.html#aurora-serverless-v2.switch-from-provisioned - Aurora Serverless v2 ライターまたはリーダーをAurora RDS Clusterに変換する場合
Aurora Serverless v2 で使用する Aurora バージョンが使用可能な DB インスタンスに変換可能
まとめ
今回は、RDSの作成・設定・接続・パスワードの管理について、紹介した。