AWS認定データベース(DBS)を取得しました
AWS認定データベース(DBS)を受験し無事合格しました。 資格取得までに参考にしたものを投稿します。
私のAWSの知識
以下の5資格を取得しています。
AWS認定クラウドプラクティショナー(CLF) AWSソリューションアーキテクトアソシエイト(SAA) AWSデベロッパーアソシエイト(DVA) AWS SysOpsアドミニストレータ(SOA) AWS認定セキュリティ(SCS)
業務では、EC2,RDS,Lambda,S3を軽く触っている程度になります。 最近はAppSyncを使ったサーバレスなAPI開発とかやってます。 ただ、メインはWeb開発なので、AWSガッツリ触ることは無いです。
勉強時間
2ヶ月(30時間)程度
試験範囲の確認
https://aws.amazon.com/jp/certification/certified-database-specialty/
参考にさせていただいた合格記
- https://blog.serverworks.co.jp/tech/2020/03/11/aws-certified-database-specialty-passed/
- https://wannabe-data-engineer.net/aws-database-specialty-pass/
- https://zatoima.github.io/aws-certified-database-specialty.html
公式の模擬試験を受ける
他の試験を合格していたので、無料で受けることができました。 自分の苦手分野や出題傾向の雰囲気を掴むことができると思います。
レーニング(無料)を受ける
模擬試験や章末問題は必ず理解した方が良いです。
-
AWS Database Offerings (Japanese) https://www.aws.training/Details/Curriculum?id=50951
-
Exam Readiness: AWS Certified Database - Specialty https://www.aws.training/Details/eLearning?id=47245
海外のまとめ記事を見る
- AWS Certified Database Specialty - exam guide
https://devopspages.io/aws-certified-database-specialty-exam-guide/
Black Beltを見る
以下のサービスのは見といたほうがよいと思います。(重要そうな順に並べました)
- RDS
- Aurora
- DMS
- SCT
- CloudFormation
- DynamoDB
- Neptune
試験を受けての感想
データベースのざっくりとしたサービスは理解していましたが、 試験では結構細かいことを問われるので、良い勉強になりました。
Auroraでできて、RDS(Aurora以外)で出来ないことなど
その他、勉強中に作成した問題
CloudFormationで作成したRDSDBスタックが誤って削除された。防止するには?
- 削除保護のために、DeletionProtectionを有効化(RDS系?)
- TerminationProtectionをtrueに
- スタックが削除された時に、リソースを保持orバックアップするために、 DeletionPolicyを有効化する。
AuroraはTLS接続を要求するオプションを有効にしている。接続するためには?
ルート証明書をダウンロードし、接続文字列で接続。
RDSのシャットダウンや削除のイベントを通知したい
RDSのイベントSNSで通知
Redisのキャッシュデータを保護し、不正アクセスから保護したい
- 静止暗号化を有効にする
- SGを必要なものだけに設定
- auth-tokenパラメーターを使用してクラスターが作成されていること、およびパラメーターが後続のすべてのコマンドで使用されていることを確認します。 TODO
RDS PostgreSQLに移行したい。最小限のダウンタイムにしたい
Auroraレプリカを使用してRDSクラスタに移行。 カットオーバー中にレプリカをプロモートする https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Migrating.html#AuroraPostgreSQL.Migrating.RDSPostgreSQL.Replica
PosgreSQLからインスタンスはどこに配置する?
ターゲットDBと同じリージョンとAZ https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_ReplicationInstance.VPC.html#CHAP_ReplicationInstance.VPC.Configurations.ScenarioVPCPeer https://docs.aws.amazon.com/ja_jp/dms/latest/sbs/CHAP_SQLServer2Aurora.Steps.CreateReplicationInstance.html
Auroraでデータを間違って削除してしまった。削除後して4時間経ってから気づいた。データの消失を最小限にするにはどうする?
削除前の時点にPTR(ポイントタイムリカバリ)し、削除されたデータを元のDBにコピーする もしくは、バックトラックを有効にする
CFテンプレで作成した3層アプリ。追加でEC2とLambdaをセットしたいけど、RDSには影響させたくない。どうする?
- 変更セットを作成し、確認してから実行
- RDSのスタックポリシーを作成し、リソースの更新を防ぐ https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html
Auroraクラスタを使用しており、フェイルオーバー中のダウンタイムを最小にするにはどうする?
- Auroraエンドポイントを使用して接続する
- パラメータグループでクラスタキャッシュ管理を有効にする
- タイムアウト変数を低い値に設定する https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.cluster-cache-mgmt.html フェイルオーバーした時にキャッシュを引き継いでくれる。
Redshiftクラスターのスナップショットを別リージョンに取りたい
- ソースリージョンでクロスリージョンスナップショットを有効にする
- ターゲットリージョンでKMSの許可を作成する
- 許可されたKMSを使って、実行する https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-snapshots.html#cross-region-snapshot-copy
RDS MySQLには、EC2からの接続のみ許可されている追加でセキュリティ強化するならどうする?
転送中のデータにSSLを使用するようにRDSを設定 https://aws.amazon.com/jp/blogs/database/applying-best-practices-for-securing-sensitive-data-in-amazon-rds/
RedShiftで大量のデータを保存かつ、着信クエリが読めない場合、どうする?
古いデータをS3に保存し、RedShiftの同時実行スケーリングを有効にする https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/concurrency-scaling.html
DynamoDBの構成を複数リージョンに展開したい時、どうする?
CFのスタックセットを使用してテンプレートを全リージョンに適用 https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html
RDSのパフォーマンス調査をしている。どうすればいい?
performance-insightsを使用する https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_PerfInsights.html
OracleDBのDRをテストしたい。AZが1つ潰れた想定のテストするにはどうする?
フェイルオーバーで再起動するオプションを使用する。 Auroraの場合のみ、RDSフォールトインジェクションクエリを使用可能 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_RebootInstance.html
RDSのログを90日保持したい。労力が少ない方法は?
CloudWatch Logsへ配信。保持ポリシーで90日後に削除する https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch
Auroraインスタンスが優先される?
大きいサイズのインスタンス 優先度はプロモーション階層という?
RDS MySQLからAuroraに移行したい。ダウンタイム少なくしたい
クラスタをプロモートする https://aws.amazon.com/jp/blogs/database/best-practices-for-migrating-rds-for-mysql-databases-to-amazon-aurora/
Auroraの監査ログを作成したい。リアルタイムのアラートとモニタリングが必要。クラスタに暗号化されたファイルも通知したい。
データベースアクティビティストリームを設定し、Kinesisからのデータストリームをコンシューマーアプリケーションに接続する https://aws.amazon.com/jp/about-aws/whats-new/2019/05/amazon-aurora-with-postgresql-compatibility-supports-database-activity-streams/
開発者はRDS スキーマ更新を間違えた時に1日に何度も復元している。時間がかかることと、正しい復元ポイントが分からない。
Aurora MySQLに移行して、バックトラックを使用する https://aws.amazon.com/jp/blogs/aws/amazon-aurora-backtrack-turn-back-time/
パブリックサブネットにあるDBを特定のネットからの接続だけにしたい
- SGを閉じる
- パブリック・アクセス可能な設定を閉じる
- プライベートIPとインスタンスに接続する
本番Auroraから試験Auroraを作成する時、迅速に用意できるのは
クローン作成を使用して、本番クラスターのクローンを作成します https://aws.amazon.com/jp/getting-started/hands-on/aurora-cloning-backtracking/
複数のリージョンに跨ったアプリがある。DBは特定のリージョンにある。速度改善するには?
それぞれのリージョンにリードレプリカを作成する。 https://aws.amazon.com/jp/rds/features/read-replicas/
オンプレのOracleをAuroraPostgreSQLに移行したい。ソースからターゲットに正確に移行できたか確認したい。
DMSデータ検証を有効にし、レコードの比較を行う https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Validating.html
RDSインスタンスを停止しようとしたが、リードレプリカがあるDBは停止できていなかった。どうする?
ソースインスタンスを停止する前にリードレプリカを削除する https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_StopInstance.html
柔軟なトランザクション、グローバルな顧客に適したサービス
DynamoDB グローバルテーブル
TODO documentDBとはなんだったけ
SQL Serverのパラメータグループの変更を予定。影響範囲を絞るため、特定のメンテナンスウィンドウで承認。どうやって変更する?
承認されたメンテ期間でDB再起動して手動で変更を加える 動的なパラメータの場合は、即時反映 静的なパラメータの場合は、再起動が必要 https://aws.amazon.com/jp/premiumsupport/knowledge-center/rds-modify-parameter-group-values/
フォールトトレラントなDB
DynamoDBとDynamoDBAccelerator(DAX) https://aws.amazon.com/jp/dynamodb/dax/
AuroraDBでフェイルオーバーが発生したとき、数分間パフォーマンスが低下する。避けるにはどうする?
- プライマリインスタンスと同等のリードレプリカを設置
- クラスタキャッシュ管理を使う
- 2つのインスタンスの優先度を0にする
- その他のインスタンスの優先度を1にする
最近CPU使用率が急上昇し、パフォーマンスが低下した。CloudWatchの標準メトリクスには情報が無い。原因特定するにはどうする?
- 拡張モニタリングメトリクス。インスタンスレベルでCPU使用率を確認
- Performance Insights。待機、ステートメントなどを参照 https://aws.amazon.com/jp/premiumsupport/knowledge-center/rds-instance-high-cpu/
Auroraでリードレプリカが2つ存在する状態で、読み取りアプリ専用が2つあり、それぞれ専用のエンドポイントが欲しい時どうする?
カスタムエンドポイントを使用する。
共通で問題無い場合は、リーダーエンドポイントを使用する。 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.Endpoints.html#Aurora.Endpoints.Reader
DynamoDBでゲームのスコアを記録したい。ゲームごとにgame_idとuser_idがある。推奨されるキーの方法は?
複合主キーを使用する user_id:パーティションキー game_id:ソートキー https://aws.amazon.com/jp/blogs/database/amazon-dynamodb-gaming-use-cases-and-design-patterns/
暗号化されてないDBインスタンスを暗号化したい。
- 暗号化前のスナップショットを取得
- ↑を使って、暗号化されたスナップショットのコピーを作成
- ↑を使って、暗号化されたDBインスタンスを作成 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Overview.Encryption.html#Overview.Encryption.Limitations
リードレプリカを作成しようとしたが、コンソールに項目が表示されない。原因は?
自動バックアップがソースDBで有効になっていない。 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_MySQL.Replication.ReadReplicas.html
Auroraに対して、cronジョブを仕掛けたいが、何が最適?
LambdaとCloudWatchイベント
6時間毎にバックアップが必要で、別リージョンに保存する必要がある。
- 6時間毎にスナップショットを作成するLambda
- スナップショットを別リージョンに移動するLambda
自動スナップショットは1日1回しか実行されない。
IOPSのEBSを使用している。IOPS,CPU,RAMは半分以下で、読み取りスループットにだけ、最大帯域を使用している。改善するには。
読み取りインスタンスに変更する https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-optimized.html
スナップショットを使用して作成したDBに接続できない原因は?
デフォルトのセキュリティグループを使用している可能性 https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_RestoreFromSnapshot.html
Redisのレプリケーショングループが2つの追加レプリカと共にデプロイされている。高い書き込みアクセス負荷に耐えられるようにしたい。
ElastiCacheクラスタノードのサイズを上げる。
クラスタモードを途中で切り替えることはできない。 作り直していいなら、クラスタモードで作成したほうが良い
Auroraで予想できない読み取りワークロードに対応するには?
オートスケーリングポリシーを使用し、CPUの使用率によってAuroraレプリカを作成する。
サーバレスオプションについては、途中で切り替えることはできない。
小売業のDBをAWSに移行したい。グローバル展開も考えている。予測可能な読み書きのパフォーマンスを提供したいと考えている。
DynamoDBグローバルテーブルを使用する。 OLTPをサポートしている。
大規模なデータウェアハウスをAWSに移行したい。100TBある。
- SCTを使って、Redshiftに適用する。
- snowballを使って、DMSのタスクを開始する。
- KMSを使って、S3にデータをコピー
- DMSでRedshiftにデータを適用 https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/agents.dw.html
オンプレのPostgreSQLに移行したい。OracleDBには、複数のテーブルに跨って100GBの大きなバイナリオブジェクト(LOB)が存在している。最大LOBは500MBで平均LOBは350MB。DMSを使って移行するとき、どうすればいい?
以下2つのタスクを作成する。 - LOBを使用しないタスク - 最大LOBサイズが500MBの制限付きLOBモードを使用するLOBテーブルを使用するタスク https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html#CHAP_BestPractices.LOBS
DynamoDBのDR戦略中。読み書きプロビジョニングモード、LSIを使用中。バックアップから新しいテーブルを作成したときに、何すればいい?
- テーブルにアクセスするために、IAMポリシーを設定する
- TTLの設定をする https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/backuprestore_HowItWorks.html
開発用のアカウントでDynamoDBやその他インフラを構築したい。標準化して展開したい
Systems Managerパラメータストアを使用する。 共通および環境固有のパラメータを階層的に整理し、AWSCloudFormationテンプレートからパラメータを動的に参照します。環境名をパラメーターとして使用して、CloudFormationスタックをデプロイします。 https://aws.amazon.com/jp/blogs/mt/integrating-aws-cloudformation-with-aws-systems-manager-parameter-store/
RDS PostgreSQLでログを退勤後に生成すると、容量を圧迫
log_retention_periodパラメーターを1440(24時間)
Auroraのフェイルオーバーを確実にするには?
TCPキープアライブパラメータを小さく https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.BestPractices.html#AuroraPostgreSQL.BestPractices.FastFailover.TCPKeepalives
failover-db-cluster フェイルオーバーを強制的に発生(Aurora限定) https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_FailoverDBCluster.html
オンプレのOracleをAuroraに移行したい。どうする?
SCTでスキーマ変換。DMSでフルロードおよび変更データキャプチャ(CDC) https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Task.CDC.html
DocumentDBでDDLの変更について、通知を受け取りたい。
audit_logsを有効にしたあと、何をする? CloudWatchを有効にする
オンプレIBMからAuroraにデータ移行したい。移行の互換性を調べるにはどうしたらいいか?
SCTを使用する。移行評価レポートを使用して評価する。
DynamoDBのGetItemの頻度が多い。改善するには?
DAXを使用して、読み取りをオフロードする
Auroraを1日8時間だけ使う開発がある。コスパよくするには?
Aurora Serverlessを使用する https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.how-it-works.html#aurora-serverless.how-it-works.pause-resume
Auroraでログイン/ログアウト、失敗したログイン、アクセス許可の変更、およびデータベーススキーマの変更をキャプチャしたい。監査構成で何を指定する必要がある?
- CONNECT:成功した接続と失敗した接続の両方
- QUERY_DCL:データ制御言語 (DCL) クエリ (GRANT、REVOKE など)
- QUERY_DDL) クエリ (CREATE、ALTER など)
補足 - クエリ:すべてのクエリ - テーブル:クエリによって影響を受けたテーブル - QUERY_DML) クエリ (INSERT、UPDATE など、および SELECT) https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Auditing.html
特定の期間に人気があるゲームで、コスパのよいDynamoDBの選択は?どれくらい負荷がかかるのかは予測不可。
RDS SQL Serverに既存のAD認証を使用したい。どうすればよい?
- インスタンスを変更します。適切な新しいログインを作成します。
- AWSマネージドMicrosoftADを作成します。企業ADとの信頼関係を構築します。
- セキュリティグループの設定 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_SQLServerWinAuth.html
小さいサイズのAuroraタセットをロードしてインデックスを作成すると書き込みエラーが発生した。解決するには?
一時テーブルの保存に使用されるローカルストレージがいっぱいです。インスタンスをスケールアップする必要があります。
永続データ用のストレージは自動的にスケーリングされる https://aws.amazon.com/jp/premiumsupport/knowledge-center/aurora-mysql-local-storage/
RDSへの接続にSSLを前提とするような設定をしたい。
- rds.force_ssl = 1に設定
- Amazon RDS証明書バンドルをダウンロードして使用
- sslmode = verify-fullを使用してPostgreSQL接続文字列を設定します。
RDSを毎月1回、バックアップを取得し5年間保持する必要がある。どうする?
Lambdaで手動バックアップを実行。その後S3に移動する必要がある。
自動バックアップは7日~35日で削除される。 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html
CFでDBの情報をシークレットで扱いたい。
SSMを使い、GenerateSecretStringプロパティを使用する
Auroraでテーブル毎にアクセス権限を管理したい。
GRANTおよびREVOKEコマンドを使用する https://aws.amazon.com/jp/blogs/database/managing-postgresql-users-and-roles/
Auroraで特定の時間に動作が重いが、原因調査するには?
Performance Insightsを使用する。 https://aws.amazon.com/jp/blogs/database/optimizing-and-tuning-queries-in-amazon-rds-postgresql-based-on-native-and-external-tools/
DynamoDBでProvisionedThroughputExceededExceptionが検出される。防ぐにはどうする?
- 容量をオンデマンドモードにする
- 書き込み容量を増やす
RDS MySQLで本番DBを間違えて削除した。IAM絡めて、再発防止したい。
- グループ、ユーザー、および役割に最小限の特権を付与する
- 機密性の高いリソースとAPI操作にアクセスするために、機密性の高い操作の多要素認証を有効にする
- ポリシー条件を使用して、選択したIPアドレスへのアクセスを制限します
CloudFormationにDBの接続情報をハードコーディングしたくない。自動ローテーションも有効にしたい。どうする?
Secrets Managerに接続情報を保存し、自動ローテーションをONにする https://aws.amazon.com/jp/blogs/security/how-to-use-aws-secrets-manager-rotate-credentials-amazon-rds-database-types-oracle/
大量のアクセスと書き込みをさばきたい。多肢選択問題が表示される。何を使えばよいか
- DynamoDB
- ElastcCache
- 問題をキャッシュするためのもの
Auroraを毎晩、別のテスト用コスパいい方法は?
マスターDBから12個クローンを作成するスクリプトを作成
スナップショットよりも、クローンの方が早い https://aws.amazon.com/jp/blogs/aws/amazon-aurora-fast-database-cloning/
DynamoDBを使うeコマースアプリで、セールを予定している。セールに耐えるようにするには、どうすればよいか
事前に分かっているので、DynamoDBのパーティション容量を事前にプロビジョニングする。 https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/bp-partition-key-design.html#bp-partition-key-throughput-bursting https://aws.amazon.com/jp/blogs/database/amazon-dynamodb-auto-scaling-performance-and-cost-optimization-at-any-scale/
オンプレDBをRDSに移行しようとしている。最小のダウンタイムで実現したい。どうする?
継続的な変更データキャプチャ(CDC)を使用してAWSDMSフルロードのソースとして機能するようにオンプレDBを設定します https://docs.aws.amazon.com/ja_jp/dms/latest/sbs/chap-oracle2postgresql.steps.configureoracle.html
既存のRDSのインスタンスサイズを落としたい。ダウンタイム最小にするには?
適正なサイズのRDSを用意し、DMSを使ってデータを移行する。 https://aws.amazon.com/jp/premiumsupport/knowledge-center/rds-db-storage-size/
RDSとの接続を暗号化する必要がある。同じチームの他のメンバーは接続できるが、自分のみ接続できない理由は?
接続がインスタンスが暗号化された接続をリッスンしているポートをアドレス指定していることを確認します
RDSを使ってて、パッチを充てるために、ダウンタイムが生じるが、最小限にしたい場合、どうする?
MySQLMulti-AZ構成用のAmazonRDSを有効にする https://aws.amazon.com/jp/premiumsupport/knowledge-center/rds-required-maintenance/
RDSのリードレプリカを作った。その直後、応答速度が遅い連絡を受けた。原因は何?
スナップショットから作成された新しいボリュームはバックグラウンドで遅延ロードされる
リードレプリカの作成手順 - スナップショットの取得 - リードレプリカに設定 - プライマリとレプリカでレプリケーションを確立 - レプリケーション後、プライマリのバックアップを作成(遅延発生) 遅延を避けるには、レプリケーション前にプライマリのバックアップを作成 https://aws.amazon.com/jp/premiumsupport/knowledge-center/rds-mysql-high-replica-lag/
CloudFormationでDynamoDBをデプロイしているが、ユーザ毎に異なるwcu,rcuを設定したい。どうする?
2つの数値パラメーターrcuCountとwcuCountの値をテンプレートに追加します。ハードコードされた値を、新しいパラメーターを参照するRef組み込み関数の呼び出しに置き換えます マッピングは、コードにベタ書きするものなので、違う https://dev.classmethod.jp/articles/cloudformation-firstcontact/
アメリカでは書き込み系、日本では複雑な分析系をストアできるDBは何か。レスポンスは1秒以内
Auroraグローバルデータベースを使用します。書き込みをus-east-1リージョンにデプロイし、レプリカをap-northeast-1リージョンにデプロイします。ダッシュボードアプリケーションをレプリカap-northeast-1リージョンから読み取らせます
RDS PostgreSQLの接続ログを180日間保持したい。どうすればよい?
log_connectionsパラメータを1にすると、ログが有効になることは確認済
- カスタムパラメータグループを作成し、log_connectionsパラメータを更新して、パラメータをDBインスタンスに関連付けます https://aws.amazon.com/jp/premiumsupport/knowledge-center/track-failed-login-rds-postgresql/
- データベースエンジンログのAmazonCloudWatch Logsへの公開を有効にし、イベントの有効期限を180日に設定します https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_LogAccess.Concepts.PostgreSQL.html#USER_LogAccess.Concepts.PostgreSQL.PublishtoCloudWatchLogs
デフォルトのパラメータグループは変更不可
NeptuneにS3からデータをアップする際にエンドポイントに接続できないエラーが発生。原因は?
- Neptuneに接続S3にアクセスする権限のIAMロールが存在しない
- S3のVPCエンドポイントが存在しない https://docs.aws.amazon.com/ja_jp/neptune/latest/userguide/bulk-load-tutorial-IAM.html
RDSのストレージを自動で更新したい時は?
RDSストレージの自動スケーリング https://aws.amazon.com/vi/about-aws/whats-new/2019/06/rds-storage-auto-scaling/
80TB格納されているオンプレDBをAWSに移行したい。ダウンタイムを少なくしたい。ネットワークの帯域は共有しているため、十分には使えない。どうすればいい?
- SnowBall Edgeを使って、現状のものをS3に移行
- DMSのデータ変更キャプチャ(CDC)でデータをS3にアップするタスク
- S3に上がったデータをターゲットDBに反映するDMSタスク https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.S3.html
リードレプリカにのみ、存在する新しいテーブルを作成したい。ソースDBとリードレプリカはデフォルトのパラメータグループが設定されている。どうすればよい?
- リードレプリカ用にパラメータグループ作成。
- read_onlyパラメーターをfalseに設定。
- パラメータグループをリードレプリカに紐付ける
オンプレMySQLに移行したい。4TB。手順は?
- RDSを作成。
- オンプレMySQLからdumpして、S3に格納
- EC2で起動しているMySQLにdumpを取り込む
- アプリのDB接続先ををEC2に変更
- RDSとEC2でレプリケーションを使用
- トランザクションを複製できたら、RDSに接続
DynamoDBテーブルのパーティションキーを変更したい。どうする?
- EMRを使用し、DynamoDBテーブルをS3にエクスポート
- EMRを使用し、S3から新しいパーティションキーを使用して復元
CloudFormationにRDSのパスワードが入力されていた。改善するには?
SSMリソースを使用し、ランダムパスワードを生成。それを参照。 https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/dynamic-references.html#dynamic-references-ssm-secure-strings
テーブルにレコードが挿入されると、メールを送信するシステムを作成したい。
AmazonAuroraを使用。 ストアド・プロシージャ経由でLambdaを呼び、SNSを使う https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Lambda.html#AuroraMySQL.Integrating.ProcLambda
RDSイベントサブスクはレコードの挿入には対応していない。 https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_Events.Messages.html
Auroraを使っているときにCPUの負荷が高い。Performance Insightsで、待機イベントがIO:XactSyncだらけなことが検出された。
アプリケーションを変更してトランザクションをバッチでコミットします https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Reference.html
100の事業所から200を超えるセンサーのデータをDynamoDBに格納する。受信失敗した情報も保存される。失敗したデータのみを素早く抽出できるようにしておきたい。
- パーティションキー:プラント識別子とセンサー識別子の複合
- ソートキー:測定時間
- GSI作成 - パーティションキー:プラント識別子 - ソートキー:障害属性
DynamoDBのデータをBatchGetltemnを使用している。最新のデータが取得できない不具合発見。
BatchGetltemのConsistentReadにtrueが設定されていることを確認する
trueが設定されていれば、強い整合性の読み取りを実施
オンプレDBをRDSにDMS使って移行したい。早くする方法は?
- DMSのサーバー容量アップ
- Direct Connectを使用
- 複数のDMSタスクを作成し、大きなテーブルを移行する。 https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html#CHAP_BestPractices.LargeTables
AuroraDBの大規模バッジで20TBのデータを挿入しようとしている。バッジ後、すぐに新しいDBを取得したい。どうしたらいい?
バッチプロセスの最後にDBクラスターのクローンを作成するジョブをスケジュールする
リージョンをまたいだ、DMSタスクを実行したい。DMSはどこに設置すればよいか。
ターゲットDBと同じリージョン https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.Redshift.html
モバイルアプリからGoogleアカウントを使って、DynamoDBにアクセス権限付与したい場合、どうする。
WebIDフェデレーションを使い、STSを経由してアクセスする。
DynamoDBで、日中と深夜でアクセス数に差がある。平均を取った、容量にしていたが、日中にスロットルが発生どうする。
Auto Scalingポリシーで、容量の調整を行う。 https://dev.classmethod.jp/articles/amazon-dynamodb-auto-scaling/
TODO オンデマンドと何が違う
RDSの容量を50GB追加した。その3時間後に20GB追加した。リクエストはどうなる?
6時間以上空けてないため、失敗する
Auroraを転送中と保管中に暗号化したい要件がある。どうする。
- TLSを使用し、転送中を保護
- スナップショットを作成し、KMSを使って暗号化。それを使って新しいDBクラスとを復元。エンドポイントも更新する。
RDSのスナップショットが作成されていない。原因は?
- 自動スナップショットのコピーが同じAWSリージョン内で進行中なため。
- RDSDBインスタンスはSTORAGE_FULL状態です。(AVAILABLE以外の時) https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html
RDSで変更が加えられた時、や正常稼働できない時に、通知の仕組みを作りたい。
RDSイベントサブスクリプションをサブスクライブし、AmazonSNSトピックを使用して通知を送信するように構成します。
RDSインスタンスのFreeStorageSpaceなど、さまざまなメトリクスでAmazonCloudWatchアラームを設定します。
CloudFormationで構築したDBがあり、テンプレートのDBリソースに変更が加えられた。更新中に既存DBのインスタンスを置き換える必要がある。
- DBインスタンスを使用しているアプリケーションを無効にする
- DBインスタンスのスナップショットを作成
- テンプレートを変更して、DBスナップショットのIDを持つDBSnapshotIdentifierプロパティを追加します。
- スタックを更新し、アプリケーションを再アクティブ化します。
RDSを他のAWSアカウントに移行したい場合、どうする。
- ソースアカウントにスナップショットを作成
- スナップショットを共有
- ターゲットアカウントでDBを復元 https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ShareSnapshot.html
Resource AccessManagerはAuroraのみ https://docs.aws.amazon.com/ja_jp/ram/latest/userguide/shareable.html
Auroraのローカルストレージ(FreeLocalStorage)
を増やすにはどうする。 インスタンスクラスを変更 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.Monitoring.Metrics.html
データベースストレージの場合は、自動で増える
RDSで予期せぬデータの変更が発生した。今後、変更を特定したい。
- CONNECTとQUERY_DMLイベントの監査を有効にする
- データベースログをAmazonCloudWatchLogsに公開する
コスパに優れたのは何?
- AmazonRDSでSQLServer StandardEditionを実行します。
- AmazonRDSでSQLServer EnterpriseEditionを実行します。
どちらか分からない・・。 https://docs.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2017?view=sql-server-ver15
既存のDynamoDBに属性を追加したクエリを発行したい。どうする。
追加の属性を設定したLSIを追加しながら、スナップショットを作成しテーブルの再作成を行う。
RDSの暗号化されたスナップショットを他のアカウントに共有する必要がある。どうすればよい
- カスタインスタンスを作成。
- キーポリシーを更新し、kms:CreateGrantアクションを許可する。 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_ShareSnapshot.html#USER_ShareSnapshot.Encrypted
DynamoDBテーブルを別のアカウントに移行したい。どうする。
- Data Pipelineを使用し、テーブルのデータをS3にエクスポート
- Data Pipelineを使用し、S3から復元 https://aws.amazon.com/jp/premiumsupport/knowledge-center/dynamodb-cross-account-migration/
DynamoDBへの特定のカラムへのアクセスを禁止したい場合
Efect:deny ForAnyValue{禁止したいカラム} もしくは Efect:allow ForAllValues:stringequals{許可したいカラム} https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html
DynamoDBのスキャンで、速度が遅い。読み込みのキャパシティユニットは15%しか消費していない。どうすればよい。
並列スキャンを実行する https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.ParallelScan
DynamoDBテーブルの作成とPutItemを行うスクリプトがあり、ResourceNotFoundExceptionで実行に失敗する。解決するには。
TableStatusがACTIVEになるまでDescribeTableを定期的に呼び出すようにアプリケーションを変更してから、PutItemを呼び出します。 https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/WorkingWithTables.Basics.html#WorkingWithTables.Basics.DescribeTable
AuroraDBで1年だけデータ保存して、それ以上はS3に保存したい。どうすればよいか。
SELECT INTO OUTFILES3Amazon CloudWatch Events)を使用して、Lambda関数を毎週実行するようにスケジュールします。 https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.SaveIntoS3.html
オンプレのDBからNeptuneに移行したい。データは25TBある。どうすればよいか。
インスタンスに一括で移動します。
Auroraのフェイルオーバー発生時、復旧時間を短くしたい。
RDSプロキシデータベースプロキシを作成し、プロキシエンドポイントを指すようにクライアント接続を更新します。 https://aws.amazon.com/rds/proxy/
DynamoDBのバックアップを毎日取得したい。方法は?
AWS Backupを使用してバックアッププランを作成する
シングルAZのRDSが、I/O容量が足りない。どうすればよいか。
- インスタンスに変更
- プロビジョニングIOPSに変更
CloudFormationで起動するDBのマスターパスワードを30日毎にローテーションする必要があるが、どうする?
シークレットをローテーションするAWSLambda関数を作成。CloudFormationテンプレートを変更して、AWS :: SecretsManager :: RotationScheduleリソースを追加します。RotationLambdaARN値を構成し、RotationRulesプロパティで、AutomaticalAfterDaysパラメーターを30に設定します。 https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-secretsmanager-rotationschedule.html
Discussion