DAS対策

DAS-C01

教材

Udemy

BlackBelt

  • Athena : https://d1.awsstatic.com/webinars/jp/pdf/services/20200617_BlackBelt_Amazon_Athena.pdf

  • Redshift : https://d1.awsstatic.com/webinars/jp/pdf/services/20200318_AWS_BlackBelt_Redshift.pdf

  • Lakeformation : https://d1.awsstatic.com/webinars/jp/pdf/services/20191001_BlackBelt_LakeFormation_A.pdf

  • QuickSight : https://d1.awsstatic.com/webinars/jp/pdf/services/20200204_AWS_BlackBelt_QuickSight_Update.pdf

  • EMR : https://d0.awsstatic.com/webinars/jp/pdf/services/20161026_AWS-BlackBelt-EMR.pdf

  • Glue : https://d1.awsstatic.com/webinars/jp/pdf/services/20210330_AWSBlackBelt2021_AWSGlueStudio.pdf

  • Kinesis : https://d1.awsstatic.com/webinars/jp/pdf/services/20180110_AWS-BlackBelt-Kinesis.pdf

  • Kafka : https://d1.awsstatic.com/webinars/jp/pdf/services/20191120_AWS-BlackBelt_AmazonMSK.pdf

  • DMS : https://d1.awsstatic.com/webinars/jp/pdf/services/20210216_Blackbelt_DatabaseMigrationService.pdf

  • OpenSearch : https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_Amazon-OpenSearch-Service-Basic_0131_v1.pdf

体験記

  • https://classmethod.slack.com/archives/C015C8T2JT0/p1635410937002100

Amazon Athena

  • データソース

    • デフォルトはGlue Data Catalog

    • Hive Metastoreが既存である場合はそちらをLambdaで接続して取得することも可能

  • パーティショニング

    • スキャンされるデータの量を制限できるため、パフォーマンスが向上し、コストが削減

    • パーティショニングはパーティション数が限られており、カーディナリティが低い列に設定(例:日付)

    • CTASやINSERT INTOで作成できるPartition数は100という上限がある

    • 1テーブルあたりの最大パーティション数も10,000,000

    • カラム名あり(Hive形式)とカラム名なしがある

      • Hive形式はMSCK REPAIR TABLEが使用できる

  • バケッティング

    • バケッティングとは複数のノードで水平分散処理を行えるよう、データファイルをキーとファイル数を指定して分割するAmazon Athenaの機能

    • バケッティングはカーディナリティが高く均一に分散した列に設定(例:ユーザID)

    • バケッティングにより個々のファイルサイズを128-512MBなどのちょうどよいサイズに制限できる

    • パーティションと同時に使用する場合は、パーティション内のファイル数がバケッティングで指定した数になる

    • INSERT INTOには対応できない

  • Partition Projection

    • パーティション管理を自動化できる

    • 非常に多くのパーティションがあるテーブルに対するクエリ処理を高速化できる

      • Athena自身がPartitionの情報を持つためGlue Data Catalogに対するGetPartitionsの呼び出しをしなくて良くなるため

  • フォーマット

    • parquetの他、ORCもデータの高速取得用に最適化され、AWS 分析アプリケーションで使用される列形式のストレージ形式という扱い

    • ORCはHive向きの最適化、ParquetはSpark向けと言えるらしい

    • AVRO形式は行指向フォーマット

  • パフォーマンス向上

    • スキャン量の削減 : 列指向、圧縮、パーティショニング

    • スキャンするファイルを一定サイズ(ex. 128MB以上)にまとめる : バケッティング

    • ファイルを分割可能な形式とする

  • 使用量制限

    • Athena では、クエリごとの制限とワークグループごとの制限という 2 種類のコスト制御を設定可能

    • ワークグループ全体のデータ使用量制御制限では、指定期間中に実行されるクエリのスキャン量を制限できる

  • Federated Query

    • DynamoDB、Redshift、Audora、DocumentDB、ElasticCacheなどにSQLクエリを実行可能

    • AWS Lambdaで動作するコネクタを利用して実行する

Amazon Redshift

  • 「高いパフォーマンス」「複雑な分析クエリ」などと言われる場合はAthenaよりRedshiftが選択肢

  • データ分散

    • JOINする行が他のテーブルのJOINする行とすでにノード上に配置されているような方法で分散する必要がある

    • ALL 分散スタイルを使用すれば、結合したいテーブルと併置できない場合でもパフォーマンスを向上できる

    • ALL 分散を使用すると、ストレージ容量の要件が増大し、ロード時間とメンテナンス操作が増加することには注意が必要

  • Redshift Spectrum

    • S3 内の履歴データ全体をクエリ可能

    • 同時実行性も高く、任意の数のクラスターから S3 データにアクセス可能

  • クロスリージョンスナップショット

    • KMSキーはリージョンに固有であるため、宛先リージョンでKMSキーを作成する必要がある

  • 監査ログ

    • クラスターでのログ記録を有効にすると、Amazon S3 へのログ記録のみが有効となる

    • 現在、監査ログには Amazon S3 管理キー (SSE-S3) 暗号化 (AES-256) のみを使用可能

      • SSE-KMSは使用できない

    • 監査ログはデフォルトでは有効になっていない

  • VACCUM

    • テーブルの行を削除または更新するたびに空きスペースができるがRedshift は空きスペースを自動的に再利用しない

    • VACCUM操作をすると行が再ソートされ、指定されたテーブルまたは現在のデータベース内のすべてのテーブルのスペースが再利用できる

  • スライス

    • 各ノードはさらにスライスに分割され、スライスには1つ以上の専用コアがあり、均等な処理能力を持つ

    • そのため、Redshift にデータをロードするときは、各スライスが同じ量の作業を実行するようにする必要がある

    • データ ファイルを分割するときは、圧縮後のサイズがほぼ同じ (1 MB ~ 1 GB) になるようにし、ファイル数はクラスター内のスライス数の倍数である必要がある

  • 一時ステージング テーブル

    • Redshift の一括 ETL を実行する場合、変換用のデータを保持するために一時ステージング テーブルを使用することが推奨

    • これにより、これらの大量のデータセットを Amazon Redshift に効率的かつ高速に転送できるように

    • これらのテーブルは、ETL セッションの完了後に自動的に削除される

  • 列レベルのアクセス制御

    • GRANT文で行うのが推奨で、VIEWを作成することは非推奨とのこと

Amazon EMR

  • Apach Hiveをネイティブにサポートし、Apach Hiveクラスタを迅速かつ簡単に構成可能

  • Apache Hive は、データ ウェアハウスのようなクエリ機能を提供する、オープンソースの分散型フォールト トレラント システム

  • ユーザーは SQL のようなインターフェイスを使用してペタバイト規模のデータの読み取り、書き込み、管理が可能

  • マスター ノード、コア ノード、およびタスク ノード

  • クラスターには、最大 50 個のインスタンス グループを含めることができ、マスターインスタンスグループ、コアインスタンスグループ、48個のタスクインスタンスグループが構成できる

  • メモリに応じたスケーリング

    • オートスケーリングをする場合、例えば「YARNMemoryAvailablePercentage」をメトリクスとして使用すれば、メモリ使用量に応じたスケーリングが可能

    • 「CapacityRemainingGB」は残りのHDFSディスク容量を表し、クラスタの健全性を判断できるが、スケーリングには使用できない

  • S3DistCpについて

    • Amazon S3とAmazon EMRクラスタ間でデータをコピーする用途に使用

    • S3DistCpを使用すると、Amazon S3からHDFSに大量のデータを効率的にコピーすることができる

    • S3DistCpはAmazon S3バケット間、またはHDFSからAmazon S3にデータをコピーすることも可能

  • AZ冗長

    • EMR クラスターは単一のアベイラビリティーゾーンにのみ存在できる

  • EMRFSとHDFSの違い

    • EMRFSはクラスターが通常のファイルを Amazon EMR から Amazon S3 に直接読み書きするために使用する HDFS の実装

    • EMRFSはオブジェクトストレージであり、EMRFSはクラスターが終了した場合でもデータが保持される

    • 一方、HDFSは保持されない一時的な領域

AWS Glue

  • Glue Crawler

    • S3などのデータストアに接続し、データのスキーマを決定し、AWS Glue データカタログにメタデータテーブルを作成する昨日

    • データストアのリージョンはあまり関係ない

    • スケジュール実行による定期実行、またはS3 バケットのイベント通知によってトリガーされる Lambda を使い、Crawlerをオンデマンドで呼び出すことが可能

    • 異なるスキーマのデータが同一フォルダにある場合

      • 同一フォルダでもスキーマの一致度合が70%を下回る場合は、異なるスキーマと解釈されて別テーブルと見なされる

  • Job Bookmark

    • ジョブが実行されるたびに更新される、処理されたデータを追跡する機能

    • データソースがJDBC(RDB)とS3の2種類で挙動が少し異なる

    • JDBC(RDB)

      • 同じデータソースの後続のジョブは最後のcheckpoint以降に新しく追加されたデータのみを処理する

      • ブックマーク機能が正しく動作するためには、データベースのテーブルにプライマリキーが設定されていることが必要

    • S3

      • S3 オブジェクトの最終更新日時を確認し、前回のジョブ実行以降に変更されたオブジェクトを再処理する必要があるかどうかを判断

    • 重複をさせないためには

      • 最大同時実行数を1に設定する必要がある

      • job.commitが漏れていないかの確認

  • 大規模なJDBCテーブルの移行

    • ジョブが失敗する場合は、JDBCテーブルを並行して読み取る

    • データを分割するオプションを使用し、hash fieldに値が均等に分布している列を選択する

  • ワーカータイプ

    • メモリを大量に使用するジョブの場合、ワーカー タイプを標準からG.1X または G.2X に変更できる

  • DPU

    • 単一のデータ処理ユニット (DPU) は、4 つの vCPU と 16 GB のメモリを提供

  • データソースとAthenaからの見え方の違い

    • GlueはS3、RDSやDynamoDBなど様々なデータソースを指定できる

    • 一方AthenaはS3をデータソースとするGlueテーブルのみを表示でき、またXMLなどもGlue側からしか見れない

  • Glue Studio

    • ETL ジョブの作成、実行、監視を容易にする視覚的なインターフェース

  • Glue Custom Connectors

    • ネイティブにサポートされていないデータストアとの接続

    • SaaSや他クラウドのサービス(Snowflake、BigQuery)

  • Glue DataBrew

    • 分析および機械学習のためのビジュアライズツール

  • Glue Elastic Views

    • 複数のデータソースにまたがるマテリアライズドビューを作成

AWS Data Pipeline

  • RDSからS3のエクスポート、増分コピーなどに用いられるサービス

  • S3からRedshiftなどのロードも可能

AWS Data Migration Service (DMS)

  • AWS DMSは、データベースを AWS に移行するのに役立つサービス

  • SQL Server から Aurora へなど、異なるデータベース プラットフォーム間の移行もサポート

    • Source : RDB、NoSQL(MongoDB、Cassandra)、S3、Snowball、Teradata

    • Target : AUrora、DynamoDB、DocumentDB、OpenSearch Service、KDS、Kafka、KDS、Redshift

  • Amazon Redshift にレプリケートする移行タスクでも使用される

  • バッチ実行時の挙動

    • バッチ実行に失敗した場合でもAWS DMS はバッチを分割し、1 つずつモードに切り替えてトランザクションを適用

    • 失敗の原因となったトランザクションを検出すると、AWS DMS はそのトランザクションを Amazon Redshift ターゲットの awsdms_apply_Exceptions テーブルに記録

    • 最後に、AWS DMS は新しいバッチのバッチ適用モードに戻る

  • 移行前評価

    • データベース移行タスクの指定されたコンポーネントを評価して、移行タスクが期待どおりに実行できない可能性がある問題を特定する

  • DMS データ検証

    • データがソースからターゲットに正確に移行されたことを確認し、ソース レコードとターゲット レコードを比較し、不一致があればレポートする

    • さらに、CDC(Change Data Capture)が有効なタスクの場合、AWS DMS は増分変更を比較し、不一致があればレポートをすることも可能

AWS Lake Formation

  • セキュアなデータレイクを構築するサービス

  • ストレージとしてはS3が使用され、データ取り込み・構造化、セキュリティコントロール、データカタログ、監視・監査などが可能

  • データ取り込み・構造化

    • Lake Formation は Glue の拡張機能と言え、セキュリティ強化やブループリントによるデータ取り込みなどでより便利に Glue の機能を使えるようになっている

    • Lake Formationのデータカタログは、Hive メタストアで行うのと同じ方法で、AWS でメタデータを保存、注釈付けができる 釈付け、共有できる

  • セキュリティコントロール

    • これまでIAM、S3、Glue DataCatalogの組み合わせで実現していたものをLake Formationで管理可能に

    • S3に保存されRedshift Spectrumでアクセスする際、Lake Formationによりデータの列レベルのアクセス制御をサポートするなどが可能

    • この場合Redshiftの実行ロールは、S3のアクセス権限ではなく、Lake Formationへの権限が必要となる

    • 列レベルのアクセス制御ポリシーは、SQL Grant ステートメントによって作成および管理することも可能

Amazon Data Firehose (旧称 : Amazon Kinesis Data Firehose)

  • S3、Redshift、OpenSearch Service、その他サードパーティのHTTPエンドポイントにデータを配信できる

  • CloudWatch Logsのサブスクリプションフィルターに設定可能

    • Kinesis Data Streams、Lambda、Data Firehoseで使用でき、ログはbase64 でエンコードされgzip 形式で圧縮される

    • ログの収集などに使用可能(別アカウントのCloudWatch Logsをサブスクライブする)

  • DynamoDBに直接書き込むことはできない

  • Kinesis Agentからの書き込み

    • ソースにKDSが指定されている場合、PutRecordでFirehoseに書き込むことができず、KDS経由で書き込む必要がある

    • Kinesis Agent自体はKDSまたはFirehoseにデータを送信できるJavaベースのソフトウェア

Amazon Kinesis Data Streams

  • ストリーミングデータに最適化されたスケーラブルなデータ取り込みおよび変換サービス

  • 数十万のソースから毎秒ギガバイトのデータを継続的にキャプチャ可能

  • 収集されたデータはミリ秒単位で利用できるため、リアルタイム分析が可能

  • レコードの順序付けに加えて、複数の Amazon Kinesis アプリケーションに対して同じ順序でレコードの読み取りや再生を行う機能を提供

  • Lambdaとのネイティブ統合

    • ネイティブ統合を使用すると、ポーリング、チェックポイント、およびエラー処理の複雑さが抽象化

    • 処理されたデータをDynamoDBに保存するよう設定が可能

  • シャード

    • シャードは、全体で 1 MB/秒の書き込みと 2 MB/秒の読み取りを提供する容量の単位

    • シャードを増加させることでピーク時のデータ転送容量を増加させることができる

    • シャード分割はパーティションキーを使うことができる

  • レコードは、データプロデューサーが Amazon Kinesis データストリームに追加するデータ

  • PUT ペイロード ユニットは、レコードを構成する 25 KB のペイロード「チャンク」としてカウント

  • 配信先の制限

    • Lambda、EC2、KDA、EMRなどに配信できる

    • Streamsから直接Redshift等には配信できないため注意(Firehoseが必要)

  • Kinesis Agent

    • Amazon Kinesis サービスにデータを簡単に収集して取り込む OSS のスタンドアロンJava アプリケーション

    • Amazon Kinesis Streams と Amazon Kinesis Firehose、どちらへも送信可能

  • Kinesis Producer Library

    • Amazon Kinesis Streams にデータを送信する OSS の補助ライブラリ

  • Kinesis Client Library

    • AWS Kinesis Data Stream に流れるデータ(レコード)を受信して処理を行うコンシューマアプリケーションを実装するためのライブラリ

    • DynamoDB テーブルとの関係

  • メトリクス

    • GetRecords.IteratorAgeMilliseconds : GetRecords リクエストのストリーム内の最後のレコードの経過時間をミリ秒単位で測定

    • GetRecords.Latency : GetRecords 操作にかかった時間を測定

    • PutRecords.Latency : PutRecords 操作にかかった時間を測定

    • ReadProvisionedThroughputExceeded : KDSのサービスまたはシャードの制限を超えた GetRecords 呼び出しの数を測定

  • ストリームデータを標準的な SQLクエリでリアルタイムに分析

  • Kinesis Data Analytics (KDA) は、アプリケーションの次のストリーミング ソースのみをサポートすることに注意することが重要です。

    • Amazon Kinesis Data Streams

    • Amazon Data Firehose (KDF) 配信ストリーム

  • データストリームの異常を検出するには、このRANDOM_CUT_FOREST 関数を使用できる

  • RCFは、データセット内の異常なデータポイントを検出するための教師なしアルゴリズム

Amazon Managed Streaming for Apache Kafka

  • フルマネージドで可用性が高くセキュアなApache Kafka サービス

  • クラスターの構築が必要でマネージドなEC2で構成されたアーキテクチャ、KDSと異なりサーバーレスではない

  • Apache Kafkaをオンプレミスで使用されていた場合は移行が容易

  • OSS互換な点も特徴でKafkaのエコシステムを利用できる

    • Kafka MirrorMaker、Kafka Connect、Schema Registry

  • Amazon MSK の最大レコード サイズは 100 MB

    • KDSはbase64 エンコード前で1MBなのでメッセージサイズで絞り込む

Amazon QuickSight

  • SPICE

    • 超高速、並列、インメモリな計算エンジンで、大規模なデータセットに対してインタラクティブなクエリを実行し、迅速な応答を取得する

  • エディション

    • Standard エディションと Enterprise エディションが用意

    • Standardでは25 million rowsまたは25GBが上限、Enterpriseでは500 million rowsまたは500GBがデータセットの上限(非圧縮状態で)

    • Enterprise エディションでは、保存時の暗号化と Microsoft Active Directory の統合も提供

      • SAML 2.0 (およびデフォルトの暗号化設定) を使用して ID フェデレーションを実行するように構成する

      • AD Connectorが出てくる場合は間違い

  • セキュリティグループ

    • QuickSightがRedshiftに接続するためには、その AWS リージョンの Amazon QuickSight サーバーの適切な CIDR アドレスブロックからのアクセスを承認する受信ルールが、セキュリティグループに必要

  • VPC統合

    • VPCと統合できるのはEnterpriseエディションのみ

    • VPCエンドポイントを使用すれば同じリージョン内のRedshift等にアクセスできる

  • 対応データソース

    • Amazon RDS、Amazon Aurora、Amazon Redshift、Amazon Athena、Amazon S3 などの AWS データ ソースに接続

    • Salesforce などの SaaS アプリケーションにも対応

    • データソースをS3とする場合の注意

      • QuickSight は、Amazon S3 からデータを読み取る際にparquet形式をサポートしていない

  • チャートの種類

    • ツリーマップ : 四角形はでディメンション内の 1 つの項目を表現し、長方形のサイズは、ディメンションの全体と比較した、項目が表す選択したメジャーの値の割合を表せる

    • ウォーターフォール チャート : 値が加算または減算されるときの連続的な合計を視覚化

    • ファンネル チャート : ボトルネックなどの各段階の傾向や潜在的な問題領域を表示できる

    • ヒート マップ : 2 つの次元の交差のメジャーを表示し、値が範囲内のどこに該当するかを簡単に区別できるように色分け

  • 更新頻度

    • QuickSight には、日次、週次、または月次ベースでデータを更新するオプションがある

    • またEnterprise Edition の場合のみ、「時間ごと」を選択するオプションがある

    • それ以上短い感覚が必要な場合、OpenSearch(Kibana)が必要

Amazon OpenSearch

  • OpenSearch を簡単にデプロイ・管理、スケール可能なフルマネージドサービス

  • ドメイン

    • OpenSearch クラスター、およびクラスターと連携する AWS サービスの総称

    • ノードはデータノード、専用マスターノード、UltraWarm ノードの 3 種類

  • インデックスはシャードに分割され、シャードサイズを10~50GiBに保つのが最適

Amazon SageMaker

  • コストが主な最適化基準である場合、SageMaker インスタンスは Amazon EC2 インスタンスより 40% コストが高いと推定されているため、コスト最適では注意

Amazon ElastiCache for Redis

  • 超高速のインメモリデータストア

  • キャッシュ、チャット/メッセージング、ゲーム リーダーボード、地理空間、機械学習、メディア ストリーミング、キュー、リアルタイム分析、セッション ストアなどのリアルタイムのトランザクションおよび分析処理のユースケースに最適

Amazon DynamoDB

  • DAX

    • DAX は DynamoDB と互換性のあるキャッシュ サービスであり、要求の厳しいアプリケーションで高速なメモリ内パフォーマンスの恩恵を受けることが可能

  • DynamoDB Stream

    • テーブル内のデータ項目に対するすべての変更に関する情報を最大 24 時間キャプチャする

    • 最も一般的なアプローチは、AWS Lambda、または DynamoDB Streams Kinesis アダプターで Kinesis クライアント ライブラリ (KCL) を使用するスタンドアロン アプリケーションを使用

Amazon Simple Queue Service (SQS)

  • SQS は、標準キューと FIFO キューの 2 種類のメッセージ キューを提供

  • FIFO キューは 1 秒あたり最大 300 のトランザクションをサポート

  • SQS の場合、同じメッセージを複数のコンシューマーによって同時に消費させることはできない

Amazon S3

  • オブジェクトの一部を取得したい場合、S3 SlectのScanRangeパラメータまたはGet OjbectでRange HTTPヘッダを使用する。

  • S3オブジェクトは通常、アップロードしたAWSアカウントの所有となるため、別アカウントのS3バケットにUNLOADする際には、そのアカウント上のIAMロールを引き受けて処理をする必要がある

  • リクエストレート

    • 高いリクエストレートに自動的にスケール

    • バケット内のプレフィックスごとにリクエストレートがある

      • PUT/COPY/POST/DELETE: 1 秒あたり少なくとも 3,500 の リクエスト

      • GET/HEAD:5,500 の リクエストを達成

  • 整合性

    • すべての GET、PUT、および LIST オペレーションに対して強い一貫性を持っている

  • レプリケーション

    • 同一リージョンレプリケーション、クロスリージョンレプリケーションが可能

    • またレプリケーション先のストレージクラスをソースとは異なるものにすることも可能

  • S3 Standard IA

    • アクセス頻度は低いが、必要な場合には迅速なアクセスが必要なデータ用のクラス

    • 最小保存期間料金は 30 日

  • S3 One Zone-IA

    • Standard IAとほぼ同じだが、少なくとも 3 つのAZにデータを保存する他の S3 ストレージ クラスとは異なり、S3 One Zone-IA はデータを 1 つの AZ に保存

    • コストが S3 Standard-IA より 20% 低くなる

    • 最小保存期間料金は 30 日

  • S3 Glacier Instant Retrieval

    • 医療画像、ニュース メディア資産、ユーザーが作成したコンテンツ アーカイブなど、即時アクセスが必要なアーカイブ データに最適

    • 最小保存期間料金は 90 日

  • Amazon S3 Select

    • S3 Select は、オブジェクト全体を取得することなく、単純な SQL 式を使用してオブジェクトのコンテンツから特定のデータを簡単に取得できるようにする機能

    • S3 Glacier Select もあるが、非圧縮 CSV 形式のデータのみクエリ可能なため注意

    • Athenaより低コストであるため、そのような問題であればこちら

  • S3 Glacier

    • S3 Glacier に移動すると、Athenaからのクエリはできなくなる

    • コンプライアンス制御を実行する場合は、ボールトロックポリシーを使用する

AWS Snowball

  • Snowball Edge Storage Optimized

    • 数十テラバイトからペタバイトのデータを AWS に安全かつ迅速に転送する必要がある場合に最適な選択肢

    • 最大 80 TB の使用可能な HDD ストレージ、40 個の vCPU、1 TB の SATA SSD ストレージ、および最大 40 Gb のネットワーク接続を提供

    • Snowball Edge デバイスから AWS Glacier にデータを直接コピーすることはできない

  • Snowmobile

    • 非常に大量のデータを AWS に移動するために使用されるエクサバイト規模のデータ転送サービス

    • 1台につき100PBまで運ぶことができ、10PB以上のデータセットを1か所に移行するためにはこちらを推奨

Last updated