AWS認定試験の合格に必要な知識を確認します。
本稿では下記の略語を使用します。
略称 | 原語 |
---|---|
AZ | Availability zones |
I/O | Input/Output |
ACL | Access control list |
GW | Gateway |
IGW | Internet Gateway |
FW | Firewall |
IPS | Intrusion prevention system |
RI | Reserved instances |
SSO | Single sign-on |
SG | Security group |
SF | Step Functions |
AD | Active Directory |
GSI | Global Secondary Index |
LSI | Local Secondary Index |
前提
本稿では,専門知識レベルのデータ分析スペシャリティ(DAS:AWS Certified Data Analytics Specialty)に関する直前対策を行います。DASは現在C01とよばれる形式の試験が実施されています。
収集
Relational変換とは何か。
Glueの概念で,ネストされたデータを平坦化する変換のことを指す。
セッション内のユーザアクティビティを解析するために最適なパーティションキーは何か。
セッションID。1個のプロセッサで,1つのユーザセッション内のすべてのアクティビティを処理できる。
「非常に低いレイテンシー」と言われた場合に思い浮かべるサービスは何か。
Amazon Managed Streaming for Apache Kafka (Amazon MSK)
ストレージとデータ管理
「1MBを超えるデータ量のリアルタイム処理」と言われた場合に思い浮かべるサービスは何か。
Amazon Managed Streaming for Apache Kafka (Amazon MSK)。Kinesis Data Streamでは1シャードあたり1MBのデータサイズしかサポートしていないため,データを分割する必要がある。
Redshiftの分散スタイルとは何か。
テーブルを各ノードに割り当てる方式のこと。
- EVEN:行を各ノードに均等に分散する
- ALL:テーブル全体のコピーを全ノードに分散する
- KEY:行を分散キーに指定されたカラムに含まれている値に基づいて各ノードに分散する
- AUTO:テーブルのデータ量に基づいてALLとEVENを使い分ける
インタリーブソートキーはどのようなものか。
複数のカラムを指定したソートキーで,GROUP BYやORDER BYでのパフォーマンス向上を可能にする。複合ソートキーとの違いとしては,それぞれのカラムを単独で指定したとしてもパフォーマンス向上を可能にする点が挙げられる。一方で,インタリーブソートキーではVACCUME REINDEX(再インデックスみたいなもの)を定期的に実行する必要があるため,例えば主キーのIDを含むインタリーブソートキーは推奨されていない。
Parquet以外の列志向フォーマットを述べよ。
ORC。ParquetはHadoopとの相性がよく,ORCはHiveとの相性がよい。
S3ファイルの圧縮形式とそのメリットを簡単に説明せよ。
- gzip:ストレージコストを節約するが,データの一部にクエリできないためパフォーマンスは向上しない
- lzo:高速な圧縮・解凍が可能で,クエリパフォーマンス向上に寄与する
なお,lzoはLempel Zip Oberhumerの略称で,3名の開発者(貢献者)の名前が由来となっている。
異なるS3バケットからRedshiftにデータをロードする方法を述べよ。
データの格納場所を指定するマニフェストファイルを作成し,COPYコマンドを利用する。
OpenSearchで低頻度アクセスのデータをアーカイブする方法を述べよ。
- Index State Management(ISM)を利用する
- OpenSearch Service UltraWarmストレージにインデックスを移行する
処理
KCLとは何か。
Kinesis Client Libraryの略称で,Kinesis Data Streamからデータを処理するコンシューマアプリケーションをカスタム開発する場合に利用されるライブラリのこと。
セッション内のユーザアクティビティ解析でKCLを使うと何が嬉しいか。
シャード数に合わせてプロセッサ数を自動調整できる。
EMRのカスタムJARステップとは何か。
ユーザーが独自の処理ロジックを記述したJARファイルを実行できる機能。
Apache Sparkの処理スピードを理由と共に説明せよ。
不変データフレームに変換するため,速い。Spark DataFrameにS3からデータをあらかじめロードしておけば,わざわざHDFS(Hadoop Distributed File System)にロードする必要はない。
Apache Avroとは何か。
ファイルフォーマットを規定するApacheのプロジェクト。データ構造をリッチに表現でき,スキーマハンドリングが得意。ParquetやORCとは異なり,行志向のフォーマット。
Glueスキーマレジストリとは何か。
Glueのサーバレス機能で,登録済みのApache Avroスキーマを利用してストリーミングデータの進化(どのようにスキーマが更新されているか等)を検証できる。
KPLとKCLを統合できるのはどのサービスか。
Glueスキーマレジストリ。KPLはKinesisプロデューサライブラリ,KCLはKinesisクライアントライブラリの略称。
Kinesis Data Streamの拡張ファンアウトとは何か。
コンシューマが利用するシャードごとに,2MBのスループットを確保する機能。別名スループット占有と呼ばれることもある。デフォルトだと,複数のコンシューマがアクセスしたとしても,シャードごとにそれらをひっくるめてスループットが決まっていた。拡張ファンアウト機能を利用すると,HTTP/2接続経由でデータを送受信するようになる。
Glueのジョブブックマークとは何か。
最後のジョブ実行時以降の変更差分を処理できる機能。「差分」という言葉からはDataSyncを思い浮かべてしまうが,DataSyncはオンプレとS3間のデータ移行がユースケースである。
30秒以内にストリーミングデータを解析するアプリケーション構成を述べよ。
- Kinesis Data Streams+Kinesis Data Analytics for Apache Flinkなど
なお,Kinesis Data Analytics for SQL Applicationsというサービスも存在するが,公式ドキュメントではKinesis Data Analytics Studioが推奨されているため注意する。
RedshiftへのCOPY処理の高速化はどのように行うか。
Redshiftではクラスタ単位で並列処理が行われるため,クラスタの倍数となるように送信データを分割する。
RedshiftへのCOPY処理のコスト最適化はどのように行うか。
- マニフェストファイルを使ってCOPYコマンドを実行し,Redshiftにデータをロードする
- データロード時に一時的なステージングテーブルを利用する
S3に小さなファイルが大量に存在する場合に有効なGlueの設定は何か。
ETLジョブのgroupFilesにinPartitionを指定する。小さなファイルをグループ化することで,メタデータや転送のセットアップに要する時間やメモリ容量を節約することができる。
GlueジョブでHiveスクリプトは実行できるか。
実行できない。GlueジョブはPythonとScalaのスクリプトをサポートしている。HiveスクリプトはEMRを利用する必要がある。
Kinesis Data StreamsのIteratorAgeMillisecondsを一言で説明せよ。
ストリーム内のレコードが最後にGetされた時刻と現在時刻の差を表すメトリクス。
Glueジョブで重複を排除する方法を説明せよ。
ステージングテーブルにデータをコピーした後に,マージクエリを実行する。
複数のデータソースをSQL処理できるソリューションを述べよ。
EMR上でApache Prestoを動作させる
分析と可視化
SPICEとは何か。
QuickSightのインメモリエンジン。
S3をソースとしたQuickSightとSPICEの関係を説明せよ。
自動でSPICEにロードされる。
QuickSightは更新をスケジュールできるか。
S3をソースとしたエンタープライズエディションのQuickSightであればできる。QuickSight単体では定期更新はできないため,OpenSearch Serviceを利用する。
Kinesis Data Analyticsのウィンドウタイプをまとめよ。
- タンブリングウィンドウ
- クエリが各ウィンドウに重複しない。ストリーム内の各レコードはある一つのウィンドウに属する。
- Stagger Windows
- 各windowは動的に重複する。不規則な間隔で配信されるデータに適している。
- スライディングウィンドウ
- クエリは各ウィンドウに一定の時間間隔で重複する。ある特定の時刻からwindow幅分の解析が可能。
Kinesis Data Analyticsで不定期間隔で届くデータを処理するクエリタイプは何か。
Stagger window query(ずらしウィンドウクエリ)
リアルタイムなログ解析に利用されるサービスは何か。
OpenSearch。QuickSightはログ解析には適していない。
セキュリティ
EMRでルートボリュームとストレージボリュームの両方を暗号化する方法は何か。
ルートボリュームとストレージボリュームの実態はEBSであることに注意する。下記の二通りの方法がある。
- EC2インスタンスでEBSボリューム暗号化を有効化する
- EMRのセキュリティ設定でローカルディスク暗号化を有効化する
2.は1.よりも優先される。
Glueにはリソースベースポリシーをアタッチできるか。
できる。
EMR暗号化を使用してS3へ転送中のデータを暗号化する方法を簡単に説明せよ。
証明書を含むzipファイルを作成し,S3に送信する。もしくは,Javaでカスタム証明書プロバイダーを実装する。
QuickSightのアクセス制限はどのように行うと便利か。
行レベルのアクセス制限(RLS:Row Level Securirty)をデータルールセットで定義する。アイデンティティベースのポリシーやバケットポリシーを使う必要はない。なお,RLSはQuickSightのエンタープライズエディションを導入しなければ使うことはできない。
大規模なデータレイクのアクセス制御には何のサービスを利用するか。
Lake Formation自体にアクセス制御の機能が備わっている。具体的には,テーブルに対するSELECTアクセス権限などをIAMロールと紐づけて指定することができる。
HSMでRedshiftの 暗号化設定を行う場合に必要な下準備を説明せよ。
クライアントの証明書とサーバの証明書を利用してHSMとの信頼された接続を設定する。
HSMとRedshiftを利用する場合,キーローテーションはどちらのサービスで行われるか。
Redshift
MSKにはACLは存在するか。
存在する。クライアントのTLS証明書を識別子として,特定のKafkaトピックにのみアクセス権限を与えることが可能。
Redshiftでカラムレベルのアクセス許可を設定する方法を説明せよ。
GRANTコマンドを利用する。例えば,SELECT権限を与えたい場合はGRANT SELECTコマンドを利用する。新しくテーブルを作成したリ,ビューを作成したりする必要はない。
Redshiftのクエリ監視ルールに含まれる要素を述べよ。
- 一意なルール名
- 1つのアクションと最大3つの条件
EMRとS3のアクセス制御でサービスロールという概念は登場するか。
登場する。EMRのEC2用サービスロールを,各チームが使うIAMロールでAssumeするという使い方をする。
QuickSightをRedshiftにアクセス可能にするためにはどのような操作が必要か。
RedshiftのSGでQuickSightのIPアドレス範囲を許可する。クロスリージョンでも同様の制御方法。
ひっかけポイント
DataSyncはS3 Transfer Accelerationに対応しているか。
対応していない。
Glueワークフローではジョブの同時実行は可能か。
可能。lambdaで並列実行したくなるが,Glueで完結できるというオチ。
アクセス頻度の高いレポートに対して,RedshiftとAthenaはどちらの方が費用対効果が高いか。
Redshift
HDFSとEMRFSの違いは何か。
HDFSはHadoopのエコシステムの一部,EMRFSはS3との仲介役を担う。
EMRのコスト観点でコアノードとタスクノードでよくある構成は何か。
- コアノード:オンデマンドインスタンスで実行してHDFSにデータを保持することで,データの損失を防ぐ
- タスクノード:スポットインスタンスを使う。
Apache ZooKeeperとApache KafkaをAWSに移行するとどのサービスを組み合わせることになるか。
Amazon Managed Streaming for Apache Kafka(MSK)。ZooKeeperで行っていた管理等もMSKで行うことができる。
Kinesis Data StreamsデフォルトのKMSキーではローテーションはできるか。
できない。
S3からLake Formationへの移行でブループリントは利用できるか。
できない。ブループリントはあくまでもデータソースからLake Formationへの移行時に利用される。S3からの移行ではGlueクローラを利用する。
OpenSearch Serviceのメモリ負荷を下げるためには何をすればよいか。
不要なインデックスを削除する。シャードの数を減らす。スケールアップのイメージでシャードを増やすと,スループットが増加してしまうために,インスタンスのメモリ負荷はさらに高まるため注意する。
AthenaはSSE-Cをサポートしているか。
サポートしていない。SSE-KMSのCMKを利用する。
S3イベント通知はリアルタイム処理を行うことができるか。
ほとんどできるが,できないケースも存在する。具体的には,通常数秒でイベントを配信するが,1分以上の遅延が生じるケースもある。したがって,Firehoseで60秒のバッファ間隔を設定するソリューションと比べると,S3のイベント通知を使ったソリューションの方がリアルタイム性に優れている。一方,Firehoseでもデータサイズをトリガーとすれば,バッファ間隔60秒よりも遅延が少なくデータを連携することが可能であるため,ソリューションの記述に注意する必要がある。
S3DistCpとは何か。
S3から大量のデータをHDFSにコピーするツール。
RedshiftのUNLOADコマンドとは何か。
RedshiftのデータをS3にエクスポートするコマンド。
Kafka-Kinesis-Connectorの主な制限を述べよ。
オンプレミスのサーバもしくはEC2が必要。
拡張ファンアウトでレイテンシーは低減するか。
低減しない。Kinesis Data Streamsでレイテンシーを低減させるためには,KCLのポーリングに関するデフォルト設定を上書きするとよい。
S3キーのプレフィックスにランダムな文字列を追加すると,Athenaのパフォーマンスは向上するか。
向上しない。あくまでも,プレフィックスの付与はS3のReadに対するパフォーマンスを向上させる。
Firehoseから直接Redshiftにデータを送ることはできるか。
できない。S3を経由する。
EMRにYARNという概念は存在するか。
存在する。Hadoopのクラスタリソースマネージャのこと。パッケージマネージャのYarnと混同しないように。
EMRのオートスケーリングではインスタンスフリートとインスタンスグループのどちらを利用するか。
インスタンスグループ。EC2のプレイスメントグループのイメージで捉えるとミスるので注意。
QuickSightに異常検知機能はあるか。
ある。RCFが組み込みで利用可能。
EMRにconsistent viewを設定すると,メタデータはどこに格納されるか。
DynamoDB
EMRクラスターは複数AZで作成できるか。
できない。
EMRの単一クラスターでは複数マスタノードを作成できるか。
できる。
Kinesis Data Firehoseがデータロードまで60秒みているというのは本当か。
半分本当。Firehoseがターゲットにデータを流すトリガーとしては,
- バッファ容量:1MB〜128MB
- バッファ間隔:60秒〜900秒
の二つを設定でき,いずれかが満たされた場合にトリガーされる。そのため,必ずしもデータロードが60秒間隔という訳ではない。
Kinesis Data FirehoseとOpenSearchの組み合わせで5秒ごとの更新は実現できるか。
できる。
Kinesis Data Streamsの拡張ファンアウト機能を利用する場合,lambdaはターゲット数だけ必要か。
必要ない。1つのlambdaで自動スケールする。
レスポンスのペイロードサイズに関するHIVE_METASTORE_ERRORを説明しなさい。
lambdaを利用してクロスアカウントでAthenaを利用するときに,lambdaが処理するペイロードが6MBを超えた場合に発生するエラー。lambdaのペイロード容量は変えることができないため,解決策としてはS3オブジェクトの署名付きURLを代わりに返すという方法が挙げられる。
Redshift SpectrumそのものをQuickSightのソースに指定できるか。
指定できない。あくまでもRedshiftをデータソースに指定する。Redshift Spectrumのによって作成した外部スキーマとテーブルをソースとして参照したい場合でも,結局Redshift上にスキーマとテーブルは作成されるため,Redshiftをデータソースに指定する。
S3のHTTP 503エラーで「Slow Down」と表示される場合,どのような原因が考えられるか。
S3へのリクエストが急増し,S3の内部でクエリの最適化が行われている状態。バケットにプレフィックスを追加して同時実行数を調整し,かつクライアント側の再試行回数を増やすことで解決が見込める。クライアントとしては,EMRクラスタ上のApache Sparkなどが挙げられる。
Kinesis Data StreamとFirehoseの最大レコードサイズはいくらか。
1000KiB。例えば,データレコードが10MBに及ぶという要件に対しては,Kinesis Data StreamやFirehoseではなく,MSKを利用する。
RedshiftのCOPYコマンドの並列性について説明せよ。
一つのCOPYコマンドだけで並列処理をサポートしているため,複数のCOPYコマンドを実行する必要はない。
AthenaはJDBCドライバをサポートしているか。
サポートしている。JDBCドライバを使うことで,サードパーティツールを用いてSQLを実行することが可能になる。
RedshiftのWLMはコスト最適化に寄与するか。
寄与しない。あくまでもパフォーマンス向上に寄与する。
Kinesis Data Streamからlambdaは呼び出せるか。
呼び出せるが,データ変換の文脈ではFirehoseを使った方が圧縮を行うことができるため便利。
Kinesis Data Analytics for SQL Applicationsでマッピングファイルはどのように連携するか。
S3に保存して,Kinesis Data Analyticsアプリケーションの参照先として設定できる。
Athenaでパーティションを行う際のS3のパス形式を述べよ。
キーと値のペア。例えばs3://year=2023/month=07など。
MSCK REPAIR TABLEコマンドを説明せよ。
メタデータを更新するために利用される。例えば,S3に格納されたデータにパーティションが追加された場合にAthenaでMSCK REPAIR TABLEコマンドを利用すると,パーティションをAthenaのテーブルに取り込むことができる。
Athenaのワークグループではクエリの読み取り容量の閾値を設定できるか。
できる。
S3のデータは直接QuickSightで可視化するか。
しない。Athenaを経由する。つまり,QuickSightのデータソースにAthenaを指定することになる。
QuickSightのカスタムフィールドで線形回帰は利用できるか。
できない。QuickSightのカスタムフィールドはあくまでもデータ変換のフィールド。
DataSyncのデータソースにデータベースは指定できるか。
指定できない。ストレージ系サービスをサポートしている。
Kinesis系はDynamoDBをターゲットに指定できるか。
指定できない。lambdaを利用する。
コメント