📝

AWS Data Engineer Associate

に公開

S3

Amazon S3 VPCゲートウェイエンドポイント

VPCのエンドポイントにインバウンドとアウトバウンドのルートが必要

S3 Glacierのストレージクラス

ストレージクラス 保存コスト データ取得コスト データ取得速度 最小保存期間 ユースケース例
S3 Glacier Instant Retrieval 高め 安価 ミリ秒 90日 医療記録、メディアアセット
S3 Glacier Flexible Retrieval 中程度 高め 数分〜数時間 90日 バックアップ、監査データ
S3 Glacier Deep Archive 最安価 最安価 12〜48時間 180日 規制遵守アーカイブ、古いログファイル

S3 Select

S3オブジェクト内のデータに対してSQLクエリを実行し、必要なデータだけを抽出する機能

Access Analyzer for S3

S3バケットのアクセス権を可視化して、不適切な公開や意図しないアクセスを検出し、修正を支援するセキュリティツール。

暗号化

特定の従業員だけがアクセスできる暗号化キーを使用したい場合は、SSE-KMSを選択

S3 Intelligent-Tiering

ストレージコストを最適化するためのストレージクラスです。
データのアクセスパターンに基づいて自動的に適切なストレージ階層にデータを移動し、コスト効率を最大化します。

S3 Storage Lens

S3ストレージの使用状況を可視化して、コスト削減、セキュリティ強化、パフォーマンス向上を支援するツールです。分析結果を基にストレージ運用を最適化できます。

AWS Lake Formation

  • データインジェストとカタログ化:
    S3やRDSなどのデータソースからデータを簡単にインポートし、Glue Data Catalogに登録。
  • アクセス制御:
    きめ細かなデータアクセス制御を提供(列・セルレベルの制御が可能)。
  • 統合管理:
    データレイクのセキュリティ、ガバナンス、監査を一元管理。
  • AWSサービスと統合:
    Athena、Redshift、EMR、QuickSightなどでデータを簡単に利用可能。

AWS Data Exchange

  • AWS上でデータを安全に購入できるサービス
  • APIでデータにアクセス可能

AWS Glue

主な機能

機能 説明
Glue Crawler データソースをスキャンし、構造(スキーマ)を自動的に検出。Glue Data Catalogにテーブルを作成して登録。
Glue ETLジョブ Apache Sparkベースの分散処理で大量のデータを変換・統合。Python(PySpark)またはScalaでジョブを記述可能。
Glue Data Catalog データソースのメタデータ(テーブルやスキーマ情報)を一元管理。Amazon Athena、Redshift、EMRなどで利用可能。
Glue Studio ノーコードまたはローコードでETLジョブを視覚的に作成・編集できるインターフェース。
Glue Pythonシェルジョブ 軽量なデータ処理や外部API呼び出しに適したPythonスクリプトを実行。
Glue Machine Learning(FindMatches) データ内の重複や類似データを識別するための機械学習ベースの機能。
                      |

AWS Glueワークフロー

複数のETLジョブやタスクを順序付けて自動的に実行するためのオーケストレーションツール。
Glue内でデータ処理のパイプラインを構築し、依存関係を設定して効率的に管理できる。

AWS Glueトリガー

GlueのETLジョブやワークフローを自動的に実行するための仕組み。
スケジュールやイベントに基づいてGlueジョブの実行を制御する。

実行クラス

  • Standard(標準)
  • G.1X/G.2X(最適化されたクラス)
  • Flex(コスト最適化)

ワーカータイプ

  • Standard: 小規模なデータ処理。
  • G.1X: Apache Sparkを使用する中規模処理。
  • G.2X: 大規模なデータ処理。
  • Z.2X: メモリ集約型処理。

AWS Glue Crawler

データソースをスキャンしてデータ構造(スキーマ)を自動で特定し、Glue Data Catalogに登録するツール。
これにより、データ処理やクエリの準備が大幅に簡素化されます。

AWSGlueServiceRole

  • S3へのアクセス:
    Glue CrawlerやジョブがS3バケットからデータを読み取るための権限。
  • Glueデータカタログの操作:
    Crawlerがスキーマを検出し、Glue Data Catalogを更新するための権限。
  • Glueのログ記録:
    CloudWatch LogsにGlueジョブやCrawlerの実行ログを保存する権限。

Redshiftへの接続

GlueはJDBC接続を介して直接Redshiftにアクセスし、S3を一時領域としてデータをロードする仕組みを提供

AWS Glue Studio の Detect PII Transform

  • AWS Glue Studio内で提供されるトランスフォーム(Transform)機能。
  • GUIベースでPIIを検出し、マスキングや削除などの操作を簡単に実装可能

DynamicFrame

データ処理に特化した構造化データ形式で、ETL(抽出、変換、ロード)ジョブでのデータ操作を簡素化するために提供されるAWS Glue独自のデータ構造

FindMatches機械学習変換

機械学習を利用して曖昧一致や重複レコードを特定するための便利なツールです。データクレンジングや統合に役立ち、手作業の負担を軽減する
API経由でクエリ実行できる

create_partition API

AWS Glueのデータカタログに新しいパーティションを追加するためのAPI。
既存のGlueテーブルに対して手動でパーティション情報を登録できる。

AWS Glue DataBrew

ノーコードでデータの前処理(データクレンジングや変換)を行うためのツールです。
視覚的なインターフェースを提供し、プログラミング不要でデータのクレンジング、変換、標準化などを効率的に行えるのが特徴です。
S3のExcelデータのカウントを取得することなどもできる。(COUNT_DISTINCT関数)

  • NEST_TO_MAP ネストされたデータ構造(例えば、JSON形式のオブジェクト)を**キーと値のペア形式(マップ型)**に変換するための機能

AWS Glue Pythonシェルジョブ:

軽量なETLタスクやスクリプトを実行するためのAWS Glueジョブタイプで、Apache Sparkを使わずにPythonスクリプトを単一インスタンスで実行します。

  • 軽量なタスクや補助的な処理が必要な場合。
  • 外部APIとの統合や特定のスクリプトをGlueで管理したい場合。
  • ライブラリの自由度が重要な場合。
  • Pandasは、Glue Pythonシェルジョブでの軽量なデータ処理に最適。

パーティションフィルタリング

データを処理する際に、特定のパーティション(データの部分集合)のみを効率的に選択・処理する機能

AWS Glue Schema Registry

リアルタイムデータやイベントデータを扱うアプリケーションにとって、データ品質と互換性を保つためのツール。スキーマ管理を自動化することで、開発と運用の効率が向上する。

Amazon RedShift

Amazon RedShift Data API

HTTPベースでRedshiftのデータに簡単にアクセスできるAPIで、サーバーレス環境やアプリケーションとシームレスに統合可能です。
特に、データベースドライバーなしでクエリを実行したい場合に便利です。

WLM(Workload Management)

WLMは、Redshiftクラスタ内で実行されるクエリを管理する機能
キュー(クエリの実行グループ)レベルで同時実行スケジューリングをオンにすることで、Redshiftがキュー内のクエリの特性に応じてスロット(CPU、メモリを割り当てる単位)の割り当てを動的に調整する。
Redshiftのリソースが効率的に活用される。

  • リソースの割り当て:
    クエリが使用できるメモリやスロットを制御します。
  • 優先順位の管理:
    クエリの実行順序やスロットへの割り当てを調整。
  • 同時実行制限:
    同時に実行可能なクエリの数を制限してリソース競合を防止。

Redshiftデータ共有

複数のRedshiftクラスタ間でデータをリアルタイムで共有

  1. プロデューサークラスタ(Producer Cluster)

    • データを提供する元のRedshiftクラスタ。
    • 特定のデータベースやテーブルを共有対象として公開します。
  2. コンシューマクラスタ(Consumer Cluster)

    • プロデューサークラスタが共有するデータにアクセスするRedshiftクラスタ。
    • 共有データに対してクエリを実行できますが、データを編集することはできません(読み取り専用)。

Redshift Spectrum

S3に保存されたデータに直接クエリを実行できる機能。
Redshiftクラスタにロードせず、データウェアハウスとデータレイクを統合して分析を行える。

よく使うRedshiftのシステムテーブル

カテゴリ テーブル名 説明 使用例
クエリ履歴 STL_QUERY 過去のクエリ実行履歴を表示。クエリの状態や実行時間を確認。 実行済みクエリのリストや失敗したクエリを特定。
STL_ALERT_EVENT_LOG クエリ実行時の警告イベントを記録。 クエリのパフォーマンス問題をトラブルシュート。
クラスタ状態 STV_BLOCKLIST テーブルのデータブロック分布を表示。 テーブルがどのスライス(ノード)に保存されているかを確認。
STV_RECENTS 現在実行中のクエリ情報を表示。 実行中のクエリのモニタリングやステータス確認。
パフォーマンス監視 STL_EXECUTION_PLAN クエリの実行プランを表示。 クエリの最適化のために実行プランを分析。
STL_TR_CONFLICT トランザクションロック競合を表示。 ロック競合のトラブルシュート。
スキーマ情報 PG_TABLE_DEF テーブルのスキーマ情報を表示(列名やデータ型など)。 テーブルの列情報を取得。

クエリの高速化

列ストレージのファイル形式
一般的なクエリ述語に基づいてデータを分割する

システムテーブル

クラスタのパフォーマンスや状態を監視するためのメタデータを提供する。
STL_は履歴情報、STV_は現在の状態、PG_はスキーマメタデータに対応する。

クエリエディタ v2

WSコンソールからAmazon Redshiftのデータを直接操作できるブラウザベースのクエリエディタ
マテリアライズド・ビューの自動更新できる

ディストリビューションキー(DISTKEY)

データをクラスター内のノード間で分散する方法

VACCUMコマンド

  • VACCUM REINDEX Amazon RedshiftでテーブルのデータをSORTKEYに基づいて並び替え、クエリパフォーマンスを向上させるためのコマンド。特にソート順序が崩れた場合に有効。

ALLディストリビューションスタイル

テーブル全体をクラスター内のすべてのノードに複製する分散方式です。
この方式は、特に小規模な参照テーブルやルックアップテーブルに適しており、ジョインやクエリ性能を向上させます。
小規模なルックアップテーブル(国コードや製品カテゴリのような数十行から数百行程度の参照データ)、頻繁にジョインされるテーブルで利用。

Amazon Redshift Serverless

データウェアハウスをサーバーレスで提供するオプションで、インフラ管理不要で柔軟なスケーリングと従量課金を特徴としています。
これにより、手軽にデータ分析を開始し、コスト効率を最大化できます。

ストリーミング取り込み機能

リアルタイムデータをRedshiftに直接取り込むための機能です。
Amazon Kinesis Data StreamsやAmazon MSK(Managed Streaming for Apache Kafka)などからのデータを低レイテンシでRedshiftに取り込み、即座に分析に活用できます。

Amazon Athena

ワークグループ(Workgroup)

Athenaでのクエリ実行を管理および制御するための機能。
アクセス制御やクエリのモニタリング(クエリ実行環境分離、チームやプロジェクト毎に独立した設定が可能)
クエリの実行設定、コスト管理、アクセス制御を簡単に行うことができる。
Apache Sparkを使用するには、ワークグループを作成する必要がある。

クエリのパフォーマンス最適化

  • データフォーマットをApache parquetにする(列切り落とし、述語押し込み)
  • Snappy圧縮する保存(スペースを効率化、読み込み短縮)

クエリを定期実行

  • EventBridgeでスケジュールを設定し、Lambda関数でAthenaクエリを実行
  • Step Functionsを使用してAthenaクエリ実行を含む複数のタスクを管理(複数ステップのワークフローを構築可能。
    クエリ完了後の処理やエラー処理を追加。)

Athena Federated Query

Athenaから複数のデータソース(オンプレミスや他のAWSサービスなど)に直接クエリを実行できる機能。
従来のS3に保存されたデータに加えて、RDS、Redshift、DynamoDB、HBase、Elasticsearchなどのデータにアクセス可能。

S3データに対してクエリ、Glue Data Catalogをメタデータテーブルとして利用

  • AWS Glueパーティションインデックスを作成、パーティションフィルタリングを有効
  • S3パケットの接頭辞(Prefix)に基づいてAthenaパーティションプロジェクションを使用する

リージョン

リージョンごとに動作し、S3のデータも同じリージョン内でクエリする必要がある。
異なるリージョンのデータを処理する場合、追加のコストや設定が必要。

クエリ結果再利用機能

同じクエリが繰り返し実行された際に以前の結果を再利用。パフォーマンス効率化とコスト削減。

Partition Projection

Amazon S3に保存されたデータを効率的にクエリするための機能。特に、大量のパーティションが存在する場合でも、事前に定義されたルールに基づいてパーティションを動的に生成し、クエリパフォーマンスを向上さる。

Amazon Managed Service for Apache Flink(旧Amazon Kinesis Data Analytics for Apache Flink)

  • リアルタイムデータ処理:
    Apache Flinkを使用して、ストリームデータをリアルタイムで分析・変換。
  • フルマネージド:
    クラスターのセットアップ、スケーリング、管理を自動化。
  • 統合性:
    Amazon KinesisやAmazon MSK(Managed Streaming for Apache Kafka)などのデータストリームサービスと簡単に統合。
  • スケーラブル:
    自動スケーリングにより、変動するデータ量にも対応。

Amazon Timestream

  • 時系列データに最適化:
    IoTセンサー、アプリケーションメトリクス、運用モニタリングデータなどの時系列データの保存・クエリに特化。
  • スケーラブルで高速:
    数十億件のデータポイントを高速にクエリ可能。
  • 階層型ストレージ:
    メモリストレージで最新データを高速処理し、ディスクストレージに古いデータを自動的に移動してコストを最適化。
  • SQLサポート:
    時系列データ向けのSQLクエリ構文を提供。
  • サーバーレス:
    サーバー管理不要で、オンデマンドでリソースをスケール。
  • AWSサービスとの統合:
    IoT Core、CloudWatch、Lambdaなどと簡単に連携可能。

Grafana

  • 多様なデータソース対応:
    Amazon Timestream、Prometheus、Graphite、Elasticsearch、AWS CloudWatch、MySQLなど、幅広いデータソースをサポート。
  • 高度な可視化:
    時系列データのグラフやリアルタイム監視ダッシュボードを作成可能

AWS DataSync

  • データ移動の自動化:
    オンプレミス(NFS/SMBファイルシステム)やAWSストレージ(S3、EFS、FSxなど)間でデータを自動で転送。
  • 高速データ転送:
    従来の方法よりも最大10倍のスピードでデータを移動。
  • 増分転送:
    更新されたデータのみを転送することで効率的。
  • セキュリティ:
    転送中のデータはTLSで暗号化。
  • スケジュール可能:
    データ転送ジョブをスケジュールして定期的に同期。

Amazon EMR

Redshiftとの違い

項目 Amazon EMR Amazon Redshift
目的 大規模データの処理(柔軟なカスタム処理) データウェアハウスとしての分析に最適
データ形式 構造化、非構造化、半構造化データ 主に構造化データ
クエリ言語 HiveQL、Spark SQL、カスタムコード SQL
パフォーマンス最適化 フレームワーク依存 カラムナストレージ、並列処理
スケーリング 自動スケーリングあり(クラスターベース) コンピュートとストレージの分離可能(RA3)
使用の簡便さ フレームワークや設定が必要 簡単にセットアップ可能
主な用途 ビッグデータ処理、ログ解析、機械学習 データウェアハウス、BIツール連携

永続的なデータストア

S3を推奨

コアノードとタスクノードの違いまとめ

特徴 コアノード(Core Node) タスクノード(Task Node)
データ保存 HDFSにデータを保存 データは保存しない
データ処理 データ処理を実行 データ処理を実行
最低要件 少なくとも1つ必要 任意(スケールアウト用に追加可能)
主な用途 データの保存と処理を両立 負荷分散や一時的な処理能力の向上

Gravitionインスタンス

AWSが提供するArmベースのプロセッサを活用したインスタンスタイプで、高性能かつ低コストでスケーラブルなデータ処理を可能。ETLやデータ分析などの分散処理に最適。

Hiveメタストア

Apache Hiveがデータクエリや管理に利用するメタデータ(スキーマ情報)を管理するデータベース。HiveをAmazon EMR上で使用する際に、Hiveメタストアが必要。

Kinesis Data Streams

主な違いの比較表

特徴 Kinesis Data Streams Kinesis Data Firehose
目的 リアルタイムデータストリーミング処理 データの収集・変換・ターゲットへの配信
データ処理の柔軟性 ユーザーがカスタムコードでデータ処理を実装 シンプルなデータ収集・配信に最適
リアルタイム性 高度なリアルタイム処理が可能 近リアルタイム(1分以上のバッチ処理)
配信先 ユーザーが独自に処理して任意の配信先を設定 S3、Redshift、Elasticsearch、OpenSearchなどの統合先
データ保持期間 最大7日間(デフォルト24時間) データは即時処理され、保持されない
スケーラビリティ シャード単位でスケールアウト可能 自動スケーリング(管理不要)
コストモデル シャード数とデータ量に基づく従量課金 データ転送量と処理に基づく従量課金
ユースケース 高頻度データのリアルタイム分析 シンプルなデータ収集とストレージ連携

使い分けの表

シナリオ 推奨サービス
高頻度でリアルタイムにデータを処理したい Kinesis Data Streams
データをストレージや分析ツールに簡単に送信したい Kinesis Data Firehose
過去のデータを再処理したい Kinesis Data Streams
バッチ処理で十分な近リアルタイム分析をしたい Kinesis Data Firehose

デスティネーションデータストリーム

データストリーム間でデータを転送し、リアルタイム処理の分岐や複数の用途に対応するための仕組み
データ処理パイプラインを簡潔に構築するのに役立つ

Amazon Redshiftとの連携

Amazon Redshiftで外部スキーマを作成し、Kinesis Data StreamsからRedshiftオブジェクトにマッピングする

Step Functions

Step Functionsのステートの種類

ステートの種類 説明
Task 特定のタスク(例: Lambda関数、Batchジョブなど)を実行する。
Choice 条件に基づいて次のステートを選択する。
Parallel 複数のタスクを並列で実行する。
Map 配列データに対して並列処理を実行する。
Wait 指定した期間または日時まで処理を待機する。
Succeed ワークフローを成功状態で終了する。
Fail ワークフローを失敗状態で終了する。
Pass データをそのまま渡し、処理を行わず次のステートに進む。

CloudWatch Logs

サブスクリプションフィルター

ログデータをリアルタイムで別のサービスにストリーミングするための仕組み。
サブスクリプションフィルターを設定することで、特定のログデータをフィルタリングし、AWS Lambda、Amazon Kinesis Data Streams、Amazon Kinesis Data Firehoseなどのターゲットに送信できます。

Amazon EBS

##インプレースアップグレード
中断なく変更可能

Amazon AppFlow

  • ノーコードでデータフロー構築:
    プログラミング不要でデータの転送フローを設定可能。
    GUIベースで直感的に利用。
  • データの双方向同期:
    SaaSアプリ(例: Salesforce、SAP、Google Analyticsなど)とAWSサービス(例: S3、Redshift)間でデータを移動。
  • リアルタイムおよびスケジュール転送:
    データフローをオンデマンド、スケジュール、またはイベント駆動で実行可能。
  • データ変換とフィルタリング:
    データ転送中に簡単な変換(マッピングやフィルタリング)を実行。
  • セキュリティとコンプライアンス:
    データはTLSで暗号化され、AWS Key Management Service (KMS) を利用可能。

Amazon RDS

Performance Insights

既存の Amazon RDS モニタリング機能を拡張して、データベースのパフォーマンスを明確にし、分析しやすくする。

QuickSight

適切なアクセス権限設定、データ複合化権限(KMS)が必要

Amazon SageMaker Studio

AWSが提供する統合開発環境(IDE)で、機械学習(ML)のライフサイクル全体を簡素化および効率化するためのツールです。
データの準備、モデルのトレーニング、チューニング、デプロイ、モニタリングといった一連のプロセスを、一つの統一されたインターフェースで管理できます。

Apache関連

Apache Hive

大規模データをSQLライクなクエリ言語(HiveQL)で処理・分析するためのデータウェアハウスフレームワークです。
主にHadoop分散ファイルシステム(HDFS)上のデータを対象とし、バッチ処理に適したデータ分析を効率的に実行できます。

Apache Spark

高速で汎用的な分散データ処理フレームワークです。
大規模データのバッチ処理、リアルタイムストリーミング処理、機械学習、グラフ計算などを効率的に実行できます。
HadoopのMapReduceに比べて、メモリ内処理を活用して数倍の速度を実現します。

Apache Parque

大規模なデータ処理に最適化されたカラム指向のデータストレージ形式です。
データ分析や分散処理を効率的に行うためのフォーマットで、Hadoopエコシステム(Spark、Hive、Prestoなど)やAWSサービス(Athena、Redshift Spectrum、Glueなど)で広く使用されています。

Apache Ranger

ビッグデータ環境におけるセキュリティとアクセス制御を一元管理するフレームワークです。Hadoopエコシステム(Hive、HBase、Kafka、YARNなど)のデータリソースに対して、きめ細かいアクセス制御ポリシーを設定し、監査を実施するためのツールです。

その他

PartiQL(パーティーキューエル)

AWSが開発したクエリ言語で、SQLを拡張したものです。
特に、構造化データ(リレーショナルデータ)と非構造化データ(JSONやNoSQLデータなど)を一貫した方法で操作することを目的としています。
SQLと互換性があり、学習コストが低いのが特徴です。

Discussion