DASが終了するのでお蔵入りしてた記事を公開する

ハンズオンテキスト, AWS公式の無料トレーニング, Udemy, Tech Stockなどをやって、でてきた用語や設定などを網羅的に調べたり操作してキャプチャや説明をまとめてました。DAS勉強してる人向けに奇麗にまとめてqiitaにアップしようと思っていましたが、書き方とか網羅性が気に入らず結局お蔵入りになってました。DASが終了するとのことでせっかくなのでアップします。当初のタイトル案は「眺めるだけでDASの得点が上がる記事」です。当時、資格勉強してる人が求めてるのは得点アップにつながる記事だと思ったんですよね(合格記はあふれてるので実践的なやつがいいんじゃないかと)。資格試験の合格が目標になると座学に寄りがちですが、実際に操作してるキャプチャ集の記事があると、普段出てくる用語はここで出てくるのかとかこう設定するのかと理解の一助になると思ってました。こう見るとGlueとか全然書いてないなあ

# redshift

## ノードの種類

DC2/RSAが主流
RSAはコンピュート/ストレージを分離してキャッシュの仕組みなど新しいアーキテクチャを採用してる高パフォーマンスタイプ

DC2 (Dense Compute/高密度コンピュート),

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/2c0d1805-49e4-8b47-e89b-75f37e4ca372.png)

RA3 (何の意味か不明/次世代コンピュート・インスタンス)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/8b2f9cdf-65b4-9f69-595b-aad76498a88e.png)

DS2 (Dense Storage/高密度ストレージ)はレガシーとなってる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/fe201cf7-1ccf-400b-6eff-646ceced1335.png)

## エラスティックリサイズ

ノードタイプを変更したりノード数を変えたりできる

以下方式がある
エラスティックリサイズ(伸縮自在なサイズ変更) .. 15分程度で可
クラシックリサイズ(従来のサイズ変更) .. 時間がかかる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/4be7c1f8-4bf3-f446-7237-bb4ecc0a7b84.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/48e5cb1a-cd05-e7f6-a971-2cbfec985a90.png)

[リファレンス](https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/managing-cluster-operations.html)に仕様や制限色々書いてある

## マルチAZ

2023/1/31時点ではプレビュー機能となっていて、クラスタ一覧で表示項目はあるが設定はできない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/2979c584-5ce1-7c2a-76b8-dd64f2caf797.png)

preview clusterの作成ウィザードで、preview_2022を選択すると、マルチAZを指定可能になる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/efc4f7be-0205-411a-e8a1-595a218916ae.png)

## 制限設定

同時実行スケーリングの使用制限

毎日N時間まで、それに到達したときに「システムログにログ出力」「SNSにアラートを飛ばす」などを設定できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/643b37dd-ada5-9810-b599-8210cd52fc05.png)

他、以下がある
Redshift Spectrum の使用制限
クロスリージョンデータ共有の使用制限

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/5a18d20d-718d-830f-7919-b382f17f8432.png)

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

> 自動および手動スナップショットを別の AWS リージョンに自動的にコピーするように Amazon Redshift を設定します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/b2f73c2b-ff92-4556-8b4f-e5b36b7c10ea.png)

## パフォーマンスモニタリング系

クラスタメトリクス.. クラスタのサーバとか全体に関すること (CPU使用率とかディスク使用率とか状態とかクエリの合計とか)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/6174e242-5b7f-76ac-7dc9-3adffbe6cf56.png)

クエリのモニタリング.. クエリのパフォーマンスとか、ワークロードごとのパフォーマンスとか色々なメトリクスがある
一例
優先度別の平均キュー待機時間、のキャプチャ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/9c4840e1-322f-0870-15f1-b91e7b5519b5.png)

同時実行スケーリングアクティビティ、のキャプチャ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/d465033d-9078-b2aa-3937-e93a2995a889.png)

## テーブルの復元

スナップショットから特定のテーブルを復元できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/4e2abb6b-82d7-84b4-2d75-9c1ce393e5f2.png)

## 監査ログの暗号化方式

Q: 監査ログの暗号化方式は?
A: SSE-S3(AES-256)のみ

クラスタ作成 -> 作成したクラスタをクリック -> プロパティタブをクリック -> 編集をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/a847caeb-c54f-eee2-24a4-423849238904.png)

監査ログ記録をオンにする
S3/CloudWatchを選べる
どちらも暗号化の選択肢なし(S3バケットに、SSE-S3(AES-256)で格納される)

S3バケットに格納するときはバケット名を入力する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/ac429376-d5fb-fad3-d1d2-1882bb53c0f2.png)

CloudWatchに格納するときは、ログの指定ができる(ユーザーログ/接続ログ/ユーザーアクティビティログ)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/346af51d-7b59-ecff-fa98-f46059ffaab1.png)

### 監査ログの内容

[リファレンス](https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/db-auditing.html#db-auditing-logs)

> 接続ログ – 認証試行、接続、切断をログに記録します。
> ユーザーログ – データベースのユーザー定義の変更に関する情報をログに記録します。
> ユーザーアクティビティログ – 各クエリをデータベースで実行される前にログに記録します。

## 暗号化

クラスタを作成するときに暗号化を設定できる
KMS/HMS
KMSの場合はAWSマネージドキー/CMK/別アカウントのCMKを指定できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/bfd48408-0149-d70d-20e7-853cafa85e5e.png)

## パラメータ

パラメータとワークロード管理は、パラメータグループで管理されてる
デフォルトのものはさわれない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/64d42616-a01d-9ee0-3041-6c863d3c0764.png)

新規に作成すると、パラメータとワークロード管理を設定できる
パラメータは以下がある

通信セキュリティを高めるときに、require_sslをtrueに設定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/5a967ef5-e79d-9287-70d5-d95c69e2e091.png)

## ワークロード管理

WLMモードに自動/手動がある

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/1c91c110-fcfc-9594-93df-930ac5d84905.png)

キューを追加する

メモリ量、並列数(メインでの同時実行)、同時実行スケーリングモード(OFF/自動)、タイムアウトを入力する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/7f5a6431-2120-0ea6-f295-551ede17b496.png)

クエリモニタリングルールを追加する
テンプレートからルールを追加、で以下を選択できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/552843ab-ca98-81ec-a95e-236ca85fe9d1.png)

## diststyle(分散スタイル)

> テーブルを作成する場合は、AUTO、EVEN、KEY、または ALL という 4 つの分散スタイルのいずれかを指定します。
> 分散スタイルを指定しない場合、Amazon Redshift は AUTO 分散を使用します。

> AUTO 分散
> AUTO 分散では、Amazon Redshift はテーブルデータのサイズに基づいて最適な分散スタイルを割り当てます。

> EVEN 分散
> リーダーノードは、特定の列の値に含まれている値にかかわらず、ラウンドロビン方式によって複数のスライス間で行を分散させます。
> テーブルが結合に参加しない場合は、EVEN ディストリビューションが適切です。
> KEY ディストリビューションと ALL ディストリビューションのどちらかを明確に選択できない場合にも適しています。

> キー分散
> 行の分散は、特定の列に含まれている値に従って行われます。

> ALL 分散
> テーブル全体のコピーがすべてのノードに分散されます。
> ALL 分散では、クラスタ内のノードの数だけ必要なストレージが増える
> 小さいディメンションテーブルを DISTSTYLE ALL として定義しても大きな利点はありません。

## ベストプラクティス 超要約

https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/best-practices.html

## Amazon Redshift の概念実証の実施 

> データのロード時間 – COPY コマンドの使用は、データをロードするためにかかる時間をテストするための一般的な方法です。

> データセキュリティ — Amazon Redshift では、保管時のデータと転送中のデータを簡単に暗号化できます。また、キーを管理するための数多くのオプションがあります。

> バックアップとスナップショット – バックアップおよびスナップショットが自動的に作成されます。ポイントインタイムのスナップショットは、いつでも作成することも、スケジュールに基づいて作成することもできます。

> サイズ変更 — Amazon Redshift ノードの数またはタイプの増加を含める必要があります。サイズ変更の前後のワークロードスループットが、ワークロードボリュームのばらつきに

> 同時実行スケーリング – この特徴を使用すれば、データウェアハウス内のトラフィック量の変動を処理できます。同時実行スケーリングを使用すると、一貫した高速のクエリパフォーマンスで、事実上無制限の同時ユーザーと同時クエリをサポートできます。

> 自動ワークロード管理 (WLM) – 自動 WLM を使用して、ビジネスクリティカルなクエリを他のクエリよりも優先します。ワークロードに基づいてキューを設定してみてください

> テーブル設計 – Amazon Redshift は、ほとんどのワークロードですぐに使用できる優れたパフォーマンスを提供します。テーブルを作成する場合、デフォルトのソートキーとディストリビューションキーは AUTO です。

> レイクハウスの統合 – 組み込みの統合機能を使用して、すぐに使用できる Amazon Redshift Spectrum 機能をお試しください。Redshift Spectrum を使用すれば、データウェアハウスをデータレイクに拡張し、既存のクラスターを使用して Amazon S3 のペタバイト規模のデータに対してクエリを実行できます。

### Amazon Redshift テーブル設計のベストプラクティス

#### 最良のソートキーの選択

> ソートキーに応じたソート順でデータをディスクに保存します。
> 最適なクエリプランを決定する際にソート順を使用します。

> 適切なソート順を選択するには、ソートキーとして AUTO と入力します。
> 
> 最新のデータが最も頻繁にクエリ処理される場合は、タイムスタンプ列をソートキーの主要な列として指定します。
>
> 1 つの列に対して範囲フィルタリングまたは等価性フィルタリングを頻繁に実行する場合は、その列をソートキーとして指定します。
>
> テーブルを頻繁に結合する場合は、結合列をソートキーとディストリビューションキーの両方として指定します。

### 最適な分散スタイルの選択

> クエリを実行すると、必要に応じて結合と集計を実行するために、クエリオプティマイザによって行がコンピューティングノードに再分散されます。
> テーブル分散スタイルの選択は、クエリを実行する前にデータを必要な場所に配置しておくことによって、再分散ステップの影響を最小限に抑えるために行われます。

> ファクトテーブルと 1 つのディメンションテーブルをそれらの共通の列に基づいて分散させます。
> ファクトテーブルに指定できる分散キーは 1 つだけです。
> ディメンションテーブルのプライマリキーとそれに対応するファクトテーブルの外部キーをいずれも DISTKEY として指定します。
> 
> フィルタリングされたデータセットのサイズに基づいて最大ディメンションを選択します。
> テーブルのサイズではなく、フィルタリング後のデータセットのサイズを考慮します。
>
> フィルタリングされた結果セットで高い濃度の行を選択します。
> 日付列の販売テーブルを配信する場合、例えば、ほとんどの販売が季節的でなければ、おそらくほぼ均等なデータ分散を取得します。
> 範囲が制限された述語を使用して狭い日付期間をフィルタリングする場合は、フィルタリングされた行のほとんどはスライス限られたセットになり、クエリのワークロードもスキューされます。
>
> ALL 分散を使用するように一部のディメンションテーブルを変更します。
> ファクトテーブルやその他の重要な結合テーブルとディメンションテーブルをコロケーションできない場合は、テーブル全体を全ノードに分散させることによってパフォーマンスを大幅に向上させることができます。
> ALL 分散を使用すると、ストレージ領域要件の増大、ロード時間の長期化、メンテナンス操作の増加を招くため、ALL 分散を選択する前にすべての要因を比較検討しておく必要があります。

> Amazon Redshift が適切なディストリビューションスタイルを選択できるようにするには、ディストリビューションスタイルに AUTO を指定します。

#### COPY による圧縮エンコードの選択

> テーブルを作成するときに圧縮エンコードを指定できますが、ほとんどの場合、自動圧縮が最も適切な結果を生み出します。

COPYは自動的に圧縮かける

> COPY コマンドは、データを分析し、ロード操作の一部として自動的に空のテーブルに圧縮エンコードを適用します。

#### プライマリキーおよび外部キーの制約の定義

> プライマリキーおよび外部キーの制約を定義します。
> より効率的なクエリプランを生成します。

#### 最小列サイズの使用

> 列の最大サイズを使用しないようにしてください。
> VARCHAR 列に格納する可能性が高い最大値を考慮し、それに応じて列のサイズを決定します。

varcharは可変長の文字列を格納

#### 日付列での日時データ型の使用

> DATE および TIMESTAMP データを CHAR または VARCHAR よりも効率的に保存するので、クエリパフォーマンスが向上します。

### データをロードするための Amazon Redshift のベストプラクティス

要するに、1つの大きいファイルは圧縮して、スライスの倍数になるように1MB～1GBに分割し、単一のCOPYコマンドを実行すると良い (自動的に並列でロードされる)

#### COPY コマンドを使用したデータのロード

> COPY コマンドは、Amazon S3、Amazon EMR、Amazon DynamoDB、またはリモートホスト上の複数のデータソースから同時にデータをロードします。
> COPY コマンドは INSERT ステートメントを使う場合よりもはるかに効率的に大量のデータをロードし、データを保存します。

#### 単一の COPY コマンドを使用した複数のファイルからのロード

> 複数の圧縮データファイルからの並列的なデータロードを、自動的に実行します。

> ただし、複数の COPY コマンドを同時に使用して複数のファイルから 1 つのテーブルにデータをロードする場合には、Amazon Redshift はそれらの読み込みを直列的に実行します。
> この種類のロードはかなり低速で、
> テーブルにソート列が定義されている場合は、最後に VACUUM プロセスが必要になります。

#### ロードデータの分割

> 複数のファイルから COPY コマンドを使用して圧縮データをロードすると、それらの読み込みは並列的に実行されます。これにより、クラスター内のノード間でワークロードが分割されます。
> 大容量で圧縮された単一のファイルから全データをロードする場合、Amazon Redshift は読み込みを直列的に実行します。つまり、この処理はかなり低速になります。

> 大きな圧縮ファイルからデータをロードしようとする際には、圧縮が完了したデータを、ほぼ等しいサイズ (1 MB から 1 GB 程度) の小さいファイルに分割することをお勧めします。
> 並列処理にとって最適なファイルサイズは、圧縮後で 1～125 MB 程度です。
> ファイルの数はクラスター内のスライス数の倍数である必要があります。

#### データファイルを圧縮する

> 大きなロードファイルを圧縮するときは、gzip、lzop、bzip2、または Zstandard を使用してそれらを圧縮し、データを複数の小さなファイルに分割することをお勧めします。

##### ロードの前後におけるデータファイルの検証

> 必要なファイルがバケットにあることを確認する
> S3 バケットにファイルをアップロードした後に、バケットの内容を一覧表示し、必要なすべてのファイルが揃っており、不必要なファイルがないことを確認します。

> データが正しくロードされたことを確認する
> ロード操作が完了したら、STL_LOAD_COMMITS システムテーブルにクエリし、ファイルが予定どおりロードされたことを確認します。

#### 複数行の挿入の使用

> COPY コマンドを選択できないときに SQL 挿入が必要な場合、可能であれば、複数行の挿入を使用します。

#### 一括挿入の使用

> テーブル間でデータまたはデータのサブセットを移動する必要があるとき、INSERT および CREATE TABLE AS コマンドを使用します。
> 例えば、次の INSERT ステートメントでは、CATEGORY テーブルからすべての行が選択され、CATEGORY_STAGE テーブルに挿入されます。
> insert into category_stage (select * from category);

#### ソートキー順序でのデータのロード

> ソートキー順序でデータをロードし、バキュームの必要性をなくします。
> 新しいデータの各バッチがテーブルの既存の行に続く場合、データはソート順序で適切に保存され、バキュームを実行する必要がありません。COPY により入ってくるデータの各バッチがロード時にソートされるため、各ロードの行を事前にソートする必要はありません。

#### 順次ブロックでのデータのロード

> ソート順序に基づいて順次ブロックでデータをロードすればバキュームの必要性がなくなります。
> 1 月、2 月などと、行をロードします。ロードが完了したとき、テーブルは完全にソートされています。バキュームを実行する必要はありません。

#### 時系列テーブルの使用

(引用なし)

#### ステージングテーブルを使用したマージ（アップサート）の実行

> データを最初にステージングテーブルにロードすることで、効率的に新しいデータを更新し、挿入できます。

> merge ステートメント (update または insert、または upsert とも呼ばれる) をサポートしません。
> ただし、実質的にマージ操作を実行できます。そのためには、データをステージングテーブルにロードし、UPDATE ステートメントおよび INSERT ステートメントのターゲットテーブルにステージングテーブルを結合します。

#### 保守管理の時間枠を回避したスケジュール計画

> 大規模なデータロードや VACUUM 操作などの長時間実行される操作のスケジュールは、保守管理の時間枠を避けて設定します。

### Amazon Redshift クエリの設計のベストプラクティス

(引用なし)

### Amazon Redshift Advisor からのレコメンデーションの使用

> Redshift Advisor は、Amazon Redshift クラスターを最適化してパフォーマンスを高め、運用コストを低減するための方法に関するレコメンデーションを提供します。

## その他リファレンス

### ショートクエリアクセラレーションを使用する

> ショートクエリアクセラレーション (SQA) は、実行時間が短い一部のクエリを、実行時間が長いクエリよりも優先します。
> 実行時間が長いクエリをキューで待機するよう強制されません。

# quick sight

e-statから年代別総人口をダウンロード
https://dashboard.e-stat.go.jp/timeSeriesResult?indicatorCode=0201010000000010000

QuickSight -> データセット -> ファイルアップロード で総人口のCSVをアップロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/836a51e8-1734-a5df-8c45-5ce73914b7ae.png)

視覚化する、をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/d2976fcf-9550-b7b3-10bc-a144b5441035.png)

## 利用開始

### サインアップ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/a964e1c7-ffe7-3c4a-9b1f-192aa5546f0f.png)

### エディション選択

自分のQuick Sightは一度Enterprizeを選択した影響でサインアップし直すときにStandardが表示されなくなったので(EnterprizeからStandardにするにはサブスクリプションの解除なるものが必要)、一覧については[リファレンス](https://aws.amazon.com/jp/quicksight/pricing/)参照

この辺使うにはEnterprizeが必要

> 閲覧者
> 行レベルのセキュリティ
> SPICE データの 1 時間ごとのリフレッシュ
> 保管中のデータの安全な暗号化
> Active Directory への接続
> 機械学習インサイト

### アカウントの作成

認証方法
IAMとQuickSight管理ユーザを利用、IAMのみ、ActiveDirectoryから選択

QuickSightからアクセスするAWSサービスを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/fb05150e-fb3f-6e54-557d-6c92874cf114.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/c08787b5-500a-6ec0-4bb4-ea99d22f7f96.png)

作成完了

## データセットの作成

### データセットを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/ffc247a4-c6b6-9121-b55c-94f1a9f42e96.png)

「ファイルをアップロード」からCSVをアップロードする
SPICEにインポートする際の推定テーブルサイズ、SPICEの空き容量が表示される

「データの編集/プレビュー」をクリック
インポートする列の選択、列名の編集、データ型の変更などができる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/a737657f-95b8-18c3-76eb-9cf5c58ca24a.png)

### 視覚化を実行

SPICEへのインポートの成功が表示される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/0c4e9393-4c71-5331-5c45-8975080229ce.png)

### ビジュアルタイプを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/ffda3b34-1a77-4bc1-96ef-822198c003ff.png)

### 送信先

OpenSearch, Redshift, S3, サードパーティアプリと連携できる
連携できないもの: Lambda, EMR, Kinesis Data Analyticsなど

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/722637eb-40a5-539a-6da2-143a031c5198.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/cc3c989b-18e2-e679-76ca-1fc5f9c95770.png)

ここからQuick Sightの各機能を見てく

## データセット

連携元が豊富で、AWS内外のサービスと連携できる
salesforce, s3, athena, rds, redshift, auroraなどの各DB, open search(erastic search)
emrは連携できない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/8a5ee526-acfd-8375-c582-f44bc7e0253a.png)

## QuickSightの管理

メニューの以下を確認してく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/9bce077a-0e09-7fe7-fdf8-f5f10ad02f3a.png)

## ユーザーを管理

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/fffbc248-fca3-9b23-a0f4-32099344ec3a.png)

### アクセス許可の管理

後述の「IAM ポリシーの割り当て」でQuickSightのユーザにIAMポリシーを割り当てることができるが、ここでQuickSightのざっくりとした権限を直接定義して割り当てることもできる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/8028934a-b2f4-7d04-262f-17706f8639f9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/d99765c9-5826-a1d5-5ac6-abff3e915da9.png)

## セキュリティとアクセス権限

QuickSight の AWS のサービスへのアクセス
デフォルトのリソースアクセス
個々のユーザーとグループのリソースへのアクセス
IP 制限
ダッシュボードへのパブリックアクセス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/3b16bee6-fae5-6a58-03ae-10218779e03a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/6d2822f6-42fd-2cff-9b97-0b53ad1c61af.png)

### QuickSight の AWS のサービスへのアクセス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/47ecb45a-9988-65cf-c22f-f27c87f8d543.png)

### デフォルトのリソースアクセス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/44dd7abc-9bb9-f447-99bb-6602e4c2d47b.png)

### IAM ポリシーの割り当て

QuickSightのユーザにIAMポリシーを割り当てることができる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/a90f0ba8-aa89-66ae-50e4-b3506377391d.png)

### IP 制限

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/01dbc2b9-c2ef-d060-cb62-ba815c39b859.png)

### ダッシュボードへのパブリックアクセス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/d3d4e771-9160-70ad-e6d9-7a568b8295d9.png)

## VPC 接続の管理

QuickSightにセキュリティグループを設定できる
(VPCに立てたRedShiftと連携するときに利用する)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/26665614-098a-3caa-f697-21f40b7616a2.png)

## KMSキー

デフォルトでAWS マネージドKMSキーで暗号化されているが、カスタマーマネージドKMSキーで暗号化もできる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/3d1d2552-2a34-da2f-2159-4eaac3b86c2e.png)

## マニフェストを利用してS3上のオブジェクトからデータセットを作成する、特定のS3バケットにアクセスするための権限を設定する

データセットの作成 -> S3を選択 -> S3に置いたマニフェストファイルのS3 URIを指定(直接アップロードも可) -> 権限エラーになる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/fd606ad7-8aba-c685-dafa-188c1b82a081.png)

QuickSightの管理 -> セキュリティとアクセス権限 -> 管理をクリックする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/178d17e1-19e6-9988-37a8-c7beb94bfecc.png)

S3にチェックがついていないので

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/88bc4d81-2132-bd3c-3015-4fd29310e23a.png)

チェックをつけて、表示されるダイアログでS3バケットを指定する。「Athena Workgroup の書き込みアクセス許可」も有効にする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/82dd398e-0583-6cba-a4aa-042f2a40321a.png)


セキュリティとアクセス権限設定画面に戻ると、S3が表示されるようになった

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/5ca24aa2-bb86-c150-845b-1093f87424a7.png)

データセットでS3を選択し、S3上に格納したマニフェストを読み込み、マニフェストに記載したS3上のcsvを読み込んでSPICEに追加できた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/65524311-6a59-c4b7-a1bd-bebcfe10affe.png)


### 定期更新する

データセット(マニフェストファイルを利用してS3のオブジェクトを参照してるもの)を開く -> 新しいスケジュールの追加

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/c3eb2fc1-c178-56ef-4daa-ee83252ab852.png)

スケジュールを入力し保存する
頻度は毎時/毎日/毎週/毎月から選択できる。細かい時刻の指定はできない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/aa201266-269a-8d14-85a3-cafe2cd075c3.png)

保存後、設定したスケジュールが更新される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/4e80004d-32cf-564a-1c3f-4db62dec098c.png)

### IP制限

QuickSightの管理 -> セキュリティとアクセス権限

IP制限できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/608c2eda-493f-eb5a-60d7-573be177c9ad.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/a805b355-79b6-d9da-e5e5-0b156f00a550.png)

## セキュリティグループ

ユースケース: プライベートVPC上のEC2/RDS/Redshiftと連携する
[Amazon QuickSight から Amazon Redshift クラスターまたはプライベートサブネットにある Amazon RDS DB インスタンスへのプライベート接続を作成する方法を教えてください。](https://aws.amazon.com/jp/premiumsupport/knowledge-center/quicksight-redshift-private-connection/)
ソリューション: VPC接続を作成すれば (VPC/サブネット/セキュリティグループを設定)、プライベートVPC上のリソースと通信できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/ac0b1878-55ef-1f8c-5084-6a816b111c09.png)

操作手順は[こちら](https://cloud5.jp/aws-handson-analytics-003/)の記事が分かりやすい

> 4-2. Redshift用セキュリティグループの作成
4-3. Redshiftへのセキュリティグループ紐づけ
4-4. QuickSight用セキュリティグループの作成
4-5. Redshift接続用のVPC接続設定


## 暗号化

デフォルトで暗号化されている

> デフォルトのデータ暗号化の詳細については、[こちら](https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/data-encryption-at-rest.html) を参照してください。

リンク先のリファレンス 

> Amazon QuickSight は Amazon QuickSight メタデータを安全に保存します。

> Amazon QuickSight は Amazon QuickSight データをセキュアな方法で保存します。
> SPICE 内で保管されているデータは、AWS マネージドキーによるハードウェアブロックレベルの暗号化を使用して暗号化されます。
> SPICE 以外で保管されているデータは、Amazon マネージド KMS キーを使用して暗号化されます。SPICE 以外で保管されているデータは、Amazon マネージド KMS キーを使用して暗号化されます。これには以下が含まれます。
> メールレポート、フィルターのサンプル値、クエリ結果キャッシュ。

カスタマーマネージドKMSキーを使うこともできる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/bb8ca4c3-8c15-1760-3235-ef3997ce0fc9.png)

## Redshift Spectrum連携

ユースケース: Redshift SpectrumをQuickSightのデータソースとして利用する
ソリューション: [AWS公式のデータレイクハンズオン](https://github.com/aws-samples/amazon-s3-datalake-handson/blob/master/JP/lab5/README.md)

> ストリームデータを Kinesis Data Firehose に送信後、 Amazon S3（以下、S3）に保存することで長期保存します。その後、 Amazon Redshift Spectrum（以降、Redshift Spectrum）を用いて、クエリを実行し、 QuickSight で可視化します。

## 行レベルのセキュリティ(RLS)

データセットを選択して、行レベルのセキュリティの設定をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/cca04783-7405-4f6d-18e3-46c643ffb348.png)

ユーザーベースとタグベースの設定がある

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/bad4012c-a835-9b25-f074-0538d4cf847c.png)

ユーザーベースのルールでは、あらかじめ見せたくないデータをcsvで定義しておいて、それをデータセットのルールとして適用する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/7878a1e3-ab91-a428-1aaf-4fbc8c51aa3c.png)

タグベースのルールは、タグを設定して見せる行を制御する
タグベースのルールは、リーダーセッションキャパシティで使う
リーダーセッションキャパシティは、QuickSightアカウントがないユーザにQuickSightのグラフを公開する機能(匿名アクセス)



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/64926111-df5d-19af-c039-9f3792f49182.png)

手順は以下が参考になる
[Amazon QuickSightでデータセットへのアクセスを制限する](https://dev.classmethod.jp/articles/amazon-quicksight-row-level-security/)
[Amazon QuickSight で RLS を有効化したデータセットから子データセットが作成出来るようになりました](https://dev.classmethod.jp/articles/amazon-quicksight-rls-dataset-child/)
[QuickSightのRLS(Row-Level Security) が匿名ユーザーのダッシュボードで使えるようになりました](https://dev.classmethod.jp/articles/quicksight-anonymous-rls/)
[QuickSight でリーダーセッションキャパシティで使えるタグベースの RLS を使ってみた](https://dev.classmethod.jp/articles/quicksight-anonymous-rls-sessiontag/)

[Amazon QuickSight のビジュアルタイプ](https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/working-with-visual-types.html)

問題集ででてきたものは以下
(リファレンスに画像があれば転記、なければ基本Google検索のリンクを書きます)

#### 棒グラフ

> 単一測定棒グラフ
> リージョンごとの収益目標です。

> 複数測定棒グラフ
> 収益目標とリージョンあたりのコストなどです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/6b07e817-67d2-28aa-1617-b6aefade6903.png)

#### 折れ線グラフ

> 一定期間の測定値の変化を比較します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/9e1ae362-7516-eb0d-f551-941b0ac8aced.png)

#### 円グラフ
パイチャート
ドーナツチャート, ドーナツグラフ

> 合計の割合を示す場合に最適です。

パイチャート、ドーナツチャートの違い([Google検索](https://www.google.com/search?q=%E3%83%91%E3%82%A4%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88+%E3%83%89%E3%83%BC%E3%83%8A%E3%83%84%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88))

#### ファネルチャート (ファンネルチャート, ファネルグラフ)

> ファネルグラフは、ボトルネックなど、各ステージの傾向や潜在的な問題領域を示すことができるため、ビジネスの環境で役立ちます。

[Google検索](https://www.google.com/search?q=%E3%83%95%E3%82%A1%E3%83%8D%E3%83%AB%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88)

#### ヒートマップ

> 傾向と異常値を識別する場合はヒートマップを使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/a089aaaf-1389-d201-65cb-3dd415e90d83.png)

#### KPI (主要業績評価メトリクス)

> キー値とその目標値の比較を視覚化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/b5d93356-e385-b641-a52f-33ce3dd0b3eb.png)

#### ピボットテーブル

> 傾向と異常値を識別する場合はヒートマップを使用します。色を使用することでこれらの特定が容易になるためです。ビジュアル上でデータを分析するには、ピボットテーブルを使用します。

[docs.krew.grapecity.com](https://docs.krew.grapecity.com/krewdashboard/krewdashboard_graph.html)
が分かりやすかったです(他のグラフについても分かりやすいです。「じょうご」と記載されてるグラフはファネルチャートかと思います)


#### レーダーチャート

> 複数の観測値を 1 つのレーダーチャートにプロットして複数の多角形を表示できます。これにより、複数の観測値の範囲外の値をすばやく簡単に見つけることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/55f049a2-6296-e05f-0ca7-1a56b57f220d.png)

#### ツリーマップ

> 長方形のサイズ
> 暗い色は高い値を示し、明るい色は低い値を示しています。

[Google検索](https://www.google.com/search?q=%E3%83%84%E3%83%AA%E3%83%BC%E3%83%9E%E3%83%83%E3%83%97)

ワードクラウド

> 単語またはフレーズの頻度を表示することです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/d48efeb3-47fd-946f-4722-f6ce8a91230a.png)

# Kinesis関連

## Kinesis Data Streams

### ストリームの作成

名前と容量モード(オンデマンド/プロビジョンド)を指定する

オンデマンド
プロデューサーからの書き込みは200MB & 20万レコード/s、
コンシューマーからの読み込みは400MB/s、デフォルトコンシューマーは2。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/78fa6cf1-72be-cb15-504d-d1d5f2664ae7.png)

プロビジョンド
1シャードあたり、
プロデューサーからの書き込みは1MB & 1000レコード/s、
コンシューマーからの読み込みは2MB/s。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/3ce58afe-7232-f87e-9c5b-f0338118f9c3.png)

データ保持期間、サーバー側の暗号化、拡張メトリックのモニタリング中のデフォルトが表示される。
ストリーム作成後に編集できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/5754999b-e19b-4d4f-d1ab-f949a4fa947a.png)

### ストリームの詳細画面

作成されたストリームの設定を確認する

アプリケーションタブ
プロデューサー、コンシューマーのコードサンプルのリンクなどが表示される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/ff60a865-26c3-4843-3d06-86c887b4f1a2.png)

モニタリングタブ
GetRecordsのレイテンシーが大きいときは、シャードの追加などを検討する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/995734b8-a935-aa6e-5381-9d95e66c8dc6.png)

設定
容量、暗号化、データ保持期間、拡張(シャードレベル)メトリクス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/3117e57b-20be-0465-440b-be94884ac81f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/abd2b22a-dbe3-7a5b-9b36-4a9118e426a2.png)

### 追加の設定

> データ保持期間、サーバー側の暗号化、拡張メトリックのモニタリング中のデフォルトが表示される。
> ストリーム作成後に編集できる
を設定してみる

暗号化は、AWS管理のCMKか、カスタマー管理のCMKを選ぶ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/f3a09307-0e34-c478-a812-2e1a3c54e65a.png)

データ保持期間はデフォルト1日で、最大1年

> Amazon Kinesis Data Streams では、デフォルトでは 1 日 (24 時間) のデータが保存されます。1 日を超えて最大 365 日までのデータを保存することもできます。データが保存されている最初の 7 日間は、データ保持の延長料金が課金されます。その後、7 日を超える期間保存され、指定した保持期間までのデータに対して、GB/月の料金が課金されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/9f29e3ee-8aa4-804a-70d5-545e46d44a41.png)

拡張(シャードレベル)メトリクスは、CloudWatchメトリクスにシャードのメトリクスを追加できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/bcd39b0d-59d6-46d6-b9f9-c3343a111f1b.png)

データビューワー
プロデューサーからデータ送信すると、ここでデータ見れる

CLIでデータ入れてみる

この辺のサイトを使って適当なjsonを作成
https://www.site24x7.com/ja/tools/json-generator.html
https://www.atatus.com/tools/json-generator

```
{
        "id": "63e6cee1263ca78f0d8bd5ad",
        "currentJob": {
                "title": "Developer",
                "salary": "mask;"
        },
        "jobs": [
                {
                        "title": "medic",
                        "salary": "R$ 4.839,90"
                },
                {
                        "title": "teacher",
                        "salary": "R$ 4.849,86"
                }
        ]
}
```

パーティションキーに1を指定
実行すると、シャードのIDと、シーケンスナンバーが返される

```
aws kinesis put-record --stream-name mystream --partition-key 1 --data file:///home/user/temporary-directory/test.json --cli-binary-format raw-in-base64-out
{
    "ShardId": "shardId-000000000000",
    "SequenceNumber": "49637910931783308630219956507133084672720790699213062146"
}
```

データビューワタブで
上記シャードIDを選んで
開始位置に水平トリム(レコードの先頭から見る)を選んでレコードを取得

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/88618d72-5e1e-bda1-c057-4d5257923499.png)

パーティションキー、データ、おおよその到着タイムスタンプ、シーケンスナンバーが表示される。

CLIの場合はレコード取得の前にまずイテレーターを取得する

```
aws kinesis get-shard-iterator --shard-id shardId-000000000000 --shard-iterator-type TRIM_HORIZON --stream-name mystream
{
    "ShardIterator": "AAAAAAAAAAHDRFTnmIZK1OSWfUIP1gGXx3rHs/zbjw+LwUo8TLZWo7JH8l/UedHhWdHtfjxQUjZnOXH5Il3yuDW10+XoyLmuf2qH+RHNL9nIjnzhx/Pp4j6ZFMild9quHVwIRHfxrmIeJ3UIpF0W+7PQxHAAvpGjHH5p3PrSz832dp9QXQZQ3BBLhmN80IBGwcM6hg3WHS3ClT8lsCb58tc4vCgYEjg7wggP6Q40FNIiJSuROFtJHw=="
```

取得したイテレータを指定してレコードを取得する

```
aws kinesis get-records --shard-iterator "AAAAAAAAAAHDRFTnmIZK1OSWfUIP1gGXx3rHs/zbjw+LwUo8TLZWo7JH8l/UedHhWdHtfjxQUjZnOXH5Il3yuDW10+XoyLmuf2qH+RHNL9nIjnzhx/Pp4j6ZFMild9q
uHVwIRHfxrmIeJ3UIpF0W+7PQxHAAvpGjHH5p3PrSz832dp9QXQZQ3BBLhmN80IBGwcM6hg3WHS3ClT8lsCb58tc4vCgYEjg7wggP6Q40FNIiJSuROFtJHw=="
{
    "Records": [
        {
            "SequenceNumber": "49637910931783308630219956507133084672720790699213062146",
            "ApproximateArrivalTimestamp": "2023-02-11T17:14:50.970000+09:00",
            "Data": "ewoJImlkIjogIjYzZTZjZWUxMjYzY2E3OGYwZDhiZDVhZCIsCgkiY3VycmVudEpvYiI6IHsKCQkidGl0bGUiOiAiRGV2ZWxvcGVyIiwKCQkic2FsYXJ5IjogIm1hc2s7IgoJfSwKCSJqb2JzIjogWwoJCXsKCQkJInRpdGxlIjogIm1lZGljIiwKCQkJInNhbGFyeSI6ICJSJCA0LjgzOSw5MCIKCQl9LAoJCXsKCQkJInRpdGxlIjogInRlYWNoZXIiLAoJCQkic2FsYXJ5IjogIlIkIDQuODQ5LDg2IgoJCX0KCV0KfQo=",
            "PartitionKey": "1"
        }
    ],
    "NextShardIterator": "AAAAAAAAAAFwMTdN8qWVLXaz4Owaa52T9ENuBa/2RUIV0fNQ/N6vgGYEpWCwhmFBGpHbOqClOX48DVuyUdf4DsKkLTZG1LJEpXXKNbGo/Nnbrnv76cfgBkYmPJzYz2Vf/aBbeAAjaPaFTaQr6+E+9e/VBD3zMyQTjpPxGAYnZWMeRwALTrLYlaVJg+F+aMct3BiXiMYp9a3ElOFpEQ8XHl34W/ICiTt2367TQnRAJRST/IEzYLyCMQ==",
    "MillisBehindLatest": 0
}
```

"Data"にbase64エンコードされてデータが格納されてるので、デコードして表示する

```
echo "ewoJImlkIjogIjYzZTZjZWUxMjYzY2E3OGYwZDhiZDVhZCIsCgkiY3VycmVudEpvYiI6IHsKCQkidGl0bGUiOiAiRGV2ZWxvcGVyIiwKCQkic2FsYXJ5IjogIm1hc2s7IgoJfSwKCSJqb2JzIjogWwoJCXsKCQkJInR
pdGxlIjogIm1lZGljIiwKCQkJInNhbGFyeSI6ICJSJCA0LjgzOSw5MCIKCQl9LAoJCXsKCQkJInRpdGxlIjogInRlYWNoZXIiLAoJCQkic2FsYXJ5IjogIlIkIDQuODQ5LDg2IgoJCX0KCV0KfQo=", | base64 -d
{
        "id": "63e6cee1263ca78f0d8bd5ad",
        "currentJob": {
                "title": "Developer",
                "salary": "mask;"
        },
        "jobs": [
                {
                        "title": "medic",
                        "salary": "R$ 4.839,90"
                },
                {
                        "title": "teacher",
                        "salary": "R$ 4.849,86"
                }
        ]
}
```

### プロデューサー

Kinesisエージェント/SDK/Kinesis Producer Library(KCL)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/6c92c967-6953-1da1-511a-a6541b6354db.png)

### コンシューマー

Kinesis Data Analytics/Kinesis Data Firefose/Kinesis Client Library(KCL)
※S3に直接送信はできない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/19c3bdd3-4c7a-54e5-7640-142f16016d0e.png)

## 性能/クォータ

[リファレンス](https://docs.aws.amazon.com/ja_jp/streams/latest/dev/service-sizes-and-limits.html)より[DevelopersIO](https://dev.classmethod.jp/articles/kinesis-streams-service-sizes-and-limits/)が分かりやすい

> シャードあたりの書き込み制限は以下がありあます。
> 1000 records/second
> 1 MB/second
> この制限に引っかかると、スロットルされ、ProvisionedThroughputExceededException エラーが発生します。
>
> レコードについては以下の制限があります。
> 
> 1 MB/record(base64エンコード前)
> 5 MB/transaction(PutRecords の場合)
> 500 records/transaction(PutRecords の場合)
> レコードをシリアライズしたり、複数レコードをPutRecords API でまとめて送ることによって、より効率的に書き込めます。

> 読み込み制限
> シャードあたりの読み込み制限は以下があります。
> 
> 2 MB/second
> この制限に引っかかると、スロットルされ、ProvisionedThroughputExceededException エラーが発生します。
> 
> レコードについては以下の制限があります。
> 
> 1 MB/record
> 10000 records/transaction
> 10 MB/transaction

[AWS資料](https://pages.awscloud.com/rs/112-TZM-766/images/ETL_serverless.pdf)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/c99a6b37-a67e-4ed0-d1a4-9bd41432a46a.png)

## Kinesis Data Firehose

### 配信ストリームの作成

#### ソースと送信先を選択

ソースと送信先を選択する

ソース
Kinesis Data Stream
Direct Put (APIや、Kinesis Data Firehoseへの送信をサポートしてる機能を利用して送信する)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/2f00a064-0af1-93d3-0c7d-9c15b36b6547.png)

送信先
S3, Redshift, OpenSearch

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/a60b93bd-3cf5-8520-197c-d032c95bb5da.png)

送信先にS3を選択すると、「レコードを変換および転換 - オプション」が表示される

#### レコードを変換および転換 - オプション

Lambda でソースレコードを変換
レコード形式を転換

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/1b283ec5-f8e3-f143-4dd4-0e0f0500070b.png)

##### Lambda でソースレコードを変換

利点として、Kinesis Data Firehoseにデータが届いたら、リアルタイムにデータの変換、圧縮、暗号化を行える。
(別途、変換用のLambdaを呼び出すような仕組みを作らなくて良い)

以下を設定する

Lambda関数
バッファサイズ (最大3MB)
バッファ間隔 (最小60秒)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/61c34451-ba60-919d-adb1-b2276d5e06ce.png)

「関数を作成」から、Lambda ブループリント(=テンプレート)を利用してレコード変換のLambda関数を作れる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/a5c15494-8f0e-5f4d-835f-ba1df7925c42.png)

例えば「一般的な Kinesis Data Firehose の処理」のブループリントを選択するとワンクリックで以下Lambda関数が作成できる

```
console.log('Loading function');

exports.handler = async (event, context) => {
    /* Process the list of records and transform them */
    const output = event.records.map((record) => ({
        /* This transformation is the "identity" transformation, the data is left intact */
        recordId: record.recordId,
        result: 'Ok',
        data: record.data,
    }));
    console.log(`Processing completed.  Successful records ${output.length}.`);
    return { records: output };
};
```

##### レコード形式を転換

Parquet/ORCとして出力できる

> Apache Parquet または Apache ORC 形式のデータは、通常、JSON よりも効率的にクエリを実行できます。
> Kinesis Data Firehose は、AWS Glue  で定義されているテーブルのスキーマを使用して、JSON 形式のソースレコードを転換できます。
> JSON 形式ではないレコードについては、上記の「AWS Lambda でソースレコードを変換」セクションで、JSON に転換する Lambda 関数を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/14baf903-cc17-8c74-d406-7aaf668d5efa.png)

#### 送信先の設定

送信先にS3を選択している場合、S3バケット/プレフィクスの他に、動的パーティショニングを有効にするか選択する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/db740d60-5fd9-477c-5ebe-9922e43f8fe3.png)

動的パーティショニングを有効にした場合の設定

> パーティショニングキーに基づいてストリーミング S3 データをパーティショニングすることにより、ターゲットデータセットを作成できます。インライン解析や指定された AWS Lambda 関数を使用して、ソースデータをパーティショニングできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/c856825b-4af2-91a8-aac9-b3f87bcfed67.png)

##### S3 バッファのヒント

> Kinesis Data Firehose は、受信レコードを S3 バケットに配信する前にバッファリングします。
> レコード配信は、指定されたバッファリングヒントのいずれかの値に達するとトリガーされます。

バッファサイズ、バッファ間隔(最小60秒)を指定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/d4b556b7-89b7-8c74-4930-18126e1dac7e.png)

##### S3圧縮と暗号化

> Kinesis Data Firehose は、S3 バケットに配信する前にレコードを圧縮できます。圧縮されたレコードは、AWS Key Management Service (KMS) マスターキーを使用して S3 バケットで暗号化することもできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/c352f838-1074-9360-08ae-a16e8885b05a.png)

### クォータ

https://docs.aws.amazon.com/ja_jp/firehose/latest/dev/limits.html

> base64-encoding の前に Kinesis Data Firehose に送信されるレコードの最大サイズは、1,000 KiB です。

> バッファの間隔のヒントの範囲は、60～900 秒です。

> 

> JSON 形式ではないレコードについては、上記の「AWS Lambda でソースレコードを変換」セクションで、JSON に転換する Lambda 関数を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/22af52f8-a6a9-184f-9c84-3cdfe38d0449.png)

## data analitics

センサーの異常検知に、Kinesis Data AnalyticsでRandom Cut Forestを利用する
https://dev.classmethod.jp/articles/kinesis-data-analytics-sql-rcf-trial/

### PutRecordsはPutRecordの125倍速い

https://dev.classmethod.jp/articles/kinesis-put-records-cli/

## ウィンドウ

[AWS資料](https://pages.awscloud.com/rs/112-TZM-766/images/ETL_serverless.pdf)


> ストリーミングデータのように常時更新されている入力から結果セットを得るために、時間と行の条件で定義される「ウィンドウ」を使用してクエリをバインドする場合が多くあります。これをウィンドウクエリと呼びます。
> 
> Kinesis Data Analytics では以下、3 パターンのウィンドウタイプをサポートしています。
> 
> タンブリングウィンドウ
> Stagger Windows（ずらしウィンドウ）
> スライディングウィンドウ

タンブリングウィンドウ



> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/f0b684c5-e4fc-f077-5461-dc8dd8a11c44.png)

スタッガーウィンドウ(ずらしウィンドウ)

> 一貫性のない時間に届くデータの分析に適している
> 例えば VPC フローログのようにキャプチャしてから届くまでに時間差のあるデータ
> 固定の時間間隔ではウィンドウは開かない
> ウィンドウはイベントが届いた時点から経過時間を測定
> ウィンドウで指定した時間ごとに結果を 1 回出力する
> WINDOWED BY 句を使う

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/7fed9e5e-7e13-5a56-9223-e7f0220a1035.png)

スライディングウィンドウ

> ウィンドウが時間とともにスライドする
> ウィンドウが重複する
> ストリーム内の各レコードは複数のウィンドウの一部になる
> アプリケーション内ストリームにイベントが追加される都度、結果が出力される
> WIDOW 句を使う

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/aa705efc-48fb-a8ab-5b54-13cd44414e12.png)

[DevelopersIO](https://dev.classmethod.jp/articles/kinesis-data-analytics-timestamp-and-window-query-pattern/)がわかりやすい(でもやっぱり難しい)

# EMR

- EMRコンソール/クラスタ作成画面など、新しいUI(コンソールエクスペリエンス)が提供されてますが、旧UIを載せています(試験対策記事のため)
- 一部新しいUIを載せてますが、新しいUIのライト/ダークモードは、マネジメントコンソールの設定に依存します(旧UIではダークモードが効かないのですが、新しいUIでは効くようになったようです。なので、新しいUIのキャプチャがダークモードになってますが、これは自分のマネジメントコンソールの設定によるものです)。

## クラスタ作成画面(クイックオプション)

デフォルトはクイックオプションで、一画面の設定でクラスタを作成できる

一般設定
クラスタ名、ログ記録、起動モード

ソフトウェア設定
emrのバージョン、利用するアプリケーション、テーブルメタデータにGlue Data Catalogを使用する

ハードウェア構成
インスタンスタイプ、インスタンス数、Cluster scaling、自動終了

セキュリティとアクセス
EC2キーペア、EMRロール、EC2インスタンスプロファイル

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/b33cd7aa-6c38-8eea-c114-67f04e0cf526.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/1cd4d9bb-1bab-b59d-1996-fb5c195438f5.png)

## クラスタ作成画面(詳細オプション)

次に詳細オプションに切り替えて設定項目見ていく

### ステップ1: ソフトウェアおよびステップ

EMRバージョン、利用するアプリケーション
複数のマスターノード
Glue Data Catalogの設定
ソフトウェア設定 
ステップの追加

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/414b14e6-677e-24ef-18ee-9ee041707423.png)

### ステップ2: ハードウェア

インスタンスグループ/インスタンスフリート
VPC/サブネット
ノードタイプごとのインスタンスタイプ、インスタンス数、オンデマンド/スポット
Cluster scaling
自動終了
EBSサイズ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/d0043930-f2be-eb66-bf72-86d4ef5c7178.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/7bfd4334-7c6a-bdc5-cf27-a6fb7cf07f71.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/5f63213c-c7ef-a0f8-6637-e9477317e6de.png)

### ステップ3: クラスター全般設定

クラスター名、ログ記録、ログ暗号化、削除保護
タグ
EMRFSの整合性のあるビュー
AMI
ブートストラップアクション

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/e36641be-1204-aa46-72d3-abe35cbcbc03.png)

### ステップ4: セキュリティ

EC2キーペア
EMRロール、EC2インスタンスプロファイル、Auto Scalingロール
セキュリティ設定
セキュリティグループ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/32c2bd0e-be7d-1411-890b-c3bdccc79df2.png)

## クラスター作成画面の各設定

詳細オプションの各設定項目を見ていく

### ソフトウェア設定

EMRバージョン、利用するアプリケーションを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/a2bb7179-cc7d-89cb-f92c-b6892704560a.png)

新しいUIの方が見やすい

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/4b469ff9-a822-4bf0-043e-9136e4698c3c.png)

### 複数のマスターノード

> マスターノードを個別の基盤となるハードウェアに分散して関連する障害を減らすことにより、クラスターの可用性を向上させることができます。この機能を使用するには、このクラスターの起動に使用する EMR サービスロールに AWS 管理ポリシー AmazonElasticMapReducePlacementGroupPolicyをアタッチします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/d7d4f683-95ad-1903-7bb9-861b2b2119c1.png)

### AWS Glue Data Catalogの設定

> AWS Glue Data Catalog を使用して、アプリケーション用の外部メタストアを提供します。

[リファレンス](https://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-metastore-external-hive.html)

> Hive のメタストア情報の記録先は、デフォルトでは、マスターノードのファイルシステムにある MySQL データベースです。
> メタストアには、テーブルとテーブル構築の基となるデータ (パーティション名やデータタイプなど) が含まれています。
> クラスターが終了すると、マスターノードも含めて、すべてのクラスターノードがシャットダウンされます。
> この場合、ノードファイルシステムではエフェメラルストレージが使用されているため、ローカルデータが失われます。
> メタストアを永続的に保存する場合は、クラスター外に外部メタストアを作成する必要があります。
>
> 外部メタストアとして 2 つのオプションがあります。
> AWS Glue Data Catalog (Amazon EMR バージョン 5.8.0 以降のみ)。
> Amazon RDS または Amazon Aurora。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/6b093ab4-3dc6-1437-a2f8-28579ec85935.png)

### ステップの追加

> ステップは、EMR クラスターで実行されるアプリケーションに送信される作業のユニットです。EMR は、追加されたステップの実行に必要なアプリケーションをプログラムでインストールします

ステップタイプを以下から選択する

ストリーミングプログラム
Hiveプログラム
Pigプログラム
Sparkアプリケーション
カスタムJAR

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/4b5b5417-5f4b-a45d-e5ec-641894a00c2f.png)

新しいUIだと選択肢が異なっている

カスタムJAR
Sparkアプリケーション
シェルスクリプト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/b38bb90a-46e9-9de2-2c51-e21d4c464fcb.png)

カスタムJAR/シェルスクリプトの場合は、格納先のS3オブジェクトのパスと、ステップが失敗したときのアクションを指定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/4d895253-ed06-56a1-752d-35d11f821fc1.png)

Sparkアプリケーションの場合は、デプロイモードも指定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/4de83216-6cb7-7955-8294-9db4073c1cb0.png)

### Cluster Composition

インスタンスグループ、インスタンスフリートから選ぶ
以下記事が分かりやすい

https://dev.classmethod.jp/articles/amazon-emr-now-supports-managed-scaling/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/e24b286a-d041-6e04-2e5b-d3ab9a926106.png)

旧UIだとUniformインスタンスグループとなってるけど、新UIでは単にインスタンスグループとなってる
テキストでもUniformという単語はついてない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/236f0662-a96d-beff-bd41-4ba96b38bc7f.png)

### Cluster Nodes and Instances

マスター/コア/タスクそれぞれで、インスタンスタイプ/インスタンス数/購入オプション(オンデマンド/スポット)を選択する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/26a7cba4-23e8-371f-66ba-5872eeeb1ef4.png)

#### ユースケース

コアノードにプロビジョニングのタイムアウトを備えたインスタンスフリートを利用し、タスクノードにスポットインスタンスを利用する

クラスタを作成するとき、インスタンスフリートを選択する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/f04f5741-16ca-f3e4-96be-0e7cde5ed6ed.png)

インスタンスフリートを選択するとプロビジョニングのタイムアウトを指定するオプションが表示される
プロビジョニングのタイムアウト(分指定)、タイムアウト時の動作(クラスターを終了/オンデマンドインスタンスに切り替え)を指定する
タスクノードのスポットユニット数を指定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/730a08ed-1c99-6e31-d9e8-47cbcef59398.png)

なおインスタンスグループを選択したときは以下のようにプロビジョニングのタイムアウトの項目はない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/04b19b9d-3911-5676-6dd0-c22f1f1b794b.png)

### Cluster scaling

https://dev.classmethod.jp/articles/amazon-emr-now-supports-managed-scaling/

「Enable Cluster Scaling」を選択し、「Use EMR-managed scaling」を選択する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/d7188fc3-bea3-74e4-f715-509221cb0b75.png)

### 自動終了

> クラスターがアイドル状態になった後にクラスターを終了する時間を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/01859cb0-a250-94de-68db-92e550fcb32f.png)

### 起動モード

ユースケースとして、1日1回数時間動かすような場合に料金を節約する。
テキストでは「クラスタタイプで過渡的(一時的)を指定」などの表記

クイックオプションの場合、起動モードでステップ実行を指定する

> ステップ実行では、EMR はクラスターを作成し、追加されたステップを実行し、完了時に終了します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/4635e23e-ddea-f249-8715-26139b00d12e.png)

詳細オプションの場合、ステップの追加で、「After last step completes:」に「最後のステップが完了したらクラスターを自動的に終了します。」を選択する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/83aa36b1-c317-ab4d-7aaf-b86ed952a555.png)

### クラスタ作成時のログの暗号化

全般オプションで「ログを暗号化」を有効化してKMSキーを入力する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/9e009eca-c641-fb45-d244-24040e463dbe.png)

### ログ記録

クラスタを作成するとき、クイックオプションでは、ログ記録にチェックが入っている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/0500b189-d7cd-1b90-34e4-98c52e6fdd66.png)

詳細オプションでも、ログ記録にチェックがついてる。ログを暗号化、のチェックはついてない(チェックをつけると、KMSキーのARNの入力欄が表示される)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/c676f9a2-3305-a6ba-51d8-ba034092d18e.png)

CLIで作成してみる(必須の引数のみ指定して作成)

```
aws emr create-cluster --release-label emr-5.36.0 --instance-type m5.xlarge --use-default-roles
{
    "ClusterId": "j-2GWCEO1D1M4YU",
    "ClusterArn": "arn:aws:elasticmapreduce:ap-northeast-1:123456789012:cluster/j-2GWCEO1D1M4YU"
```

作成したクラスタの詳細 -> 構成の詳細 -> ログのURLが「-」となっている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/38ecf3c1-6ccf-6338-fb82-93f6bcf27ebb.png)

コンソールから作成したときは、以下のようにログのURLにS3のURIが表示されるので、CLIで作成するとたしかに無効になっている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/e1450337-71ea-9336-fdc5-a7895c77d87d.png)

上記の通りCLIでクラスタ作成するとログ記録はデフォルト無効となっている。
(ログ記録を有効化する場合は「--log-uri」を指定すれば良いと思われる)

```
           create-cluster
          --release-label <value>   | --ami-version <value>
          --instance-fleets <value> | --instance-groups <value> | --instance-type <value> --instance-count <value>
          [--os-release-label <value>]
          [--auto-terminate | --no-auto-terminate]
          [--use-default-roles]
          [--service-role <value>]
          [--configurations <value>]
          [--name <value>]
          [--log-uri <value>] ★<-- これ
          [--log-encryption-kms-key-id <value>]
```

### EMR 5.30.0以降のバージョンでは、S3のログをKMSキーで暗号化できる

クラスタを作成するとき、EMR 5.29を選択すると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/331fef88-caf3-67e0-0923-3b564673f483.png)

ログ記録のとなりに暗号化の設定がない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/60c004c1-85bc-7331-0830-f716ab5477dd.png)

クラスタを作成するとき、EMR 5.30.0を選択すると (なお検証時5系の最新は5.36.0。6系もあり、6系の最新は6.9.0)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/48dc6969-b41c-570d-5fa8-78cab2b937ac.png)

ログの暗号化、の設定が表示される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/7f569192-a37a-10c8-6c8b-f30bc2a31bba.png)

### カスタムAMIを指定する

クラスタを作成するときに、オペレーティングシステムのオプションで指定できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/8df5a1ed-1487-1534-4a60-a99f5b1669fd.png)

なおクラスタからAMIを作成することはできないので、必要なソフトウェアをインストールしたAMIを利用したい場合は、EC2でそれを実施してAMIを作成し、EMRでカスタムAMIとして指定する

## セキュリティグループ

マスターと、コアおよびタスク、の分類で、セキュリティグループを設定できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/0cee344d-9ece-a4a6-5c40-4f46f797f473.png)

### EMRFS の整合性のあるビュー

> S3 のファイルにおけるリストと書き込み後の読み取り（新しい PUT が対象）の整合性を監視します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/255a4da3-cc87-21c3-e85c-555b936fe5c6.png)

各設定の説明は以下。

メタデータストア

> DynamoDB で使用または作成するメタデータストアを指定します。

再試行回数

> S3 の不整合が検出された後、EMRFS が S3 を呼び出す再試行回数。

再試行間隔

最初の再試行を行うまでの時間。それ以降の再試行では、エクスポネンシャルパックオフが使用されます。


### ブートストラップアクション

起動時にカスタムブートストラップアクションで、S3上のbashスクリプトを実行する

設定と追加をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/40a94175-fb58-b944-2765-4e78705389ea.png)

スクリプトの場所と引数(オプション)を指定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/9049e13a-4134-db9b-5794-ae6018d1b982.png)

### ローカルディスク暗号化

プロバイダータイプ (KMS, カスタムキープロバイダー(S3上のJARをARNで指定する))と、
EBS暗号化/LUKS暗号化を選択する

> Amazon EC2 インスタンスストアボリュームと、接続された Amazon Elastic Block Store (EBS) ストレージボリュームを Linux Unified Key Setup (LUKS) で暗号化します。または、AWS KMS をキープロバイダーとして使用する場合は、EBS 暗号化をオンにして EBS ルートデバイスとストレージボリュームを暗号化することを選択できます。 AWS KMS カスタマーマスターキー (CMK) には、EBS 暗号化用の追加のアクセス許可が必要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/69828bea-240f-1297-3976-a6d4b6ebb60a.png)

送信中のデータ暗号化
証明書を保存したS3のパスを指定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/bb23a037-c6db-59a3-4e01-d6a659734497.png)

EMRFSのIAMロール
IAMロールを指定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/bd235262-d40c-873f-6982-ceccd43c72a5.png)

### 承認
AWS Lake Formation/Apache Ranger
どちらと統合するか選択、ロールなどを入力する

Lake Formation

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/c9f8f4fa-3841-2221-d8c6-e78bf97c6daa.png)

Apache Ranger

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/bd460bc8-5fc3-e579-0efe-ac6d0cad3fe0.png)

Apache Rangerとは: [公式のFAQ](http://ranger.incubator.apache.org/faq.html#What_does_Apache_Ranger_offer_for_Hadoop)より

> Apache Rangerは、Hadoopおよび関連コンポーネント(Apache Hive、HBaseなど)に対するきめ細かなアクセス制御を管理するための集中型セキュリティフレームワークを提供します。Apache Ranger管理コンソールを使用すると、ユーザーは特定のユーザーやグループのリソース(ファイル、フォルダー、データベース、テーブル、列など)へのアクセスに関するポリシーを簡単に管理し、Hadoop内でポリシーを適用できます。

こちらがコンソール画面などがのっていて分かりやすい

https://recruit.gmo.jp/engineer/jisedai/blog/install_apache_ranger/

## セキュリティ設定

クラスタ作成より前に作成しておき、クラスタ作成のセキュリティ設定で作成したものを選択する
セキュリティ設定は主に暗号化とアクセス権限に関するもの。ネットワークアクセス制限ではない(ネットワークアクセス制限は、ブロックパブリックアクセスの設定画面で行う、ブロックパブリックアクセスとポートの許可設定)

暗号化
認証
EMRFS の IAM ロール
承認
EC2 インスタンスメタデータサービス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/aaf4a8f4-8510-7f38-1b54-a596e5080188.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/015218d9-b5c6-8166-620a-ced9528cf892.png)

## セキュリティ設定の各設定

### 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/dacecd00-b5f5-d626-3959-c925de171a20.png)

### S3暗号化

EMRFSデータ保存時の暗号化
perバケットの暗号化オーバーライド

どちらも以下暗号化モードを選択できる

SSE-S3
SSE-KMS
CSE-KMS
CSE-Custom

#### perバケットの暗号化オーバーライド

> 特定のバケットに対してオプションの暗号化オーバーライドを選択します。各バケットに異なる暗号化モードと暗号化マテリアルを指定できます

「S3でEMRFSデータ保存時の暗号化」を有効にし、さらにperバケット(バケットごと)の暗号化オーバーライドを設定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/47407fb6-853e-535c-884a-0b8d62431216.png)



## 他

### isIdleメトリクス

クラスタ詳細のモニタリングタブ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/a3504dae-52d5-8f2b-02e8-93fde2e9b1bc.png)

CloudWatchで表示もできる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/7b88b23d-4bfb-fecd-2eef-2aa96b8a19ea.png)

### Zeppelin

Zeppelinとは: jupiterが分かればそれと同じと考えると分かりやすい。pythonでデータ分析できるノートブック。Webアプリ上でインタラクティブ(対話形式)にpythonで分析や可視化(グラフ作成)を実行できる。

画面や使った感じがのっていてこちらが分かりやすい

https://dev.classmethod.jp/articles/python_data_visuaization_in_apache-zeppelin-container/

## パブリックアクセスのブロック

[リファレンス](https://aws.amazon.com/jp/about-aws/whats-new/2019/08/amazon-emr-introduces-block-public-access-configuration-to-secure-emr-clusters-from-unintentional-network-exposure/)

> Amazon EMR でブロックパブリックアクセス設定が導入され、EMR クラスターが誤ってネットワークに公開されることを防止できるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/f95ef733-90a3-7338-ef81-f4a9a01f334e.png)

## その他

クラスタ作成後、クラスタを選択したときのアクション

詳細を表示
クローン
削除

ここにはログのON/OFFや暗号化に関する設定変更ボタンはない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/e920ffcd-3a96-5e4e-9b40-41f997fdfeb1.png)

詳細を表示すると、
まとめ、アプリケーションの履歴、モニタリングなどの設定をタブごとに表示できる
しかしここにもログのON/OFFや暗号化に関する設定変更ボタンはない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/c017361c-9fa9-8796-44fc-7a16503186eb.png)

各タブを見ても設定変更ボタンはでてこない
唯一ハードウェアタブでCluster Scaling Policyと自動終了は変更できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/a41506bf-e7fc-8894-d8a8-d358e5ebdc22.png)

なので、たとえばEMRでログを有効化したり暗号化する、ルートボリュームなどを暗号化したい場合は、クラスタ作成後にはできないので、クラスタ作成時に行うか、すでに運用中であれば、クラスタを削除して再作成する必要がある。

## hiveとprestoの違い

hiveはHiveQL
prestoは標準SQL互換、様々なデータソースからクエリを実行できる

## pig

Javaとかに組み込んで使えるライブラリ。
pigコマンドや、Pig LatinというSQLに似た構文でHadoop上でデータを操作する。

https://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-pig.html

> Hadoop 上で稼動し、大規模なデータセットを複雑なコードを記述することなく Java などの低レベルコンピュータ言語で変換するのに使用できるスクリプト言語を提供します。このライブラリは、Pig Latin という言語で記述された SQL に似たコマンドを受け取り、

> Pig は多様な形式の構造化データと非構造化データで機能します。

> Pig コマンドは、インタラクティブに実行するか、バッチモードで実行できます。Pig をインタラクティブに使用するには、マスターノードへの SSH 接続を作成し、Grunt シェルを使用してコマンドを送信します。Pig をバッチモードで使用するには、Pig スクリプトを記述し、Amazon S3 にアップロードして、クラスターステップとして送信します。

> Pig を使用して Amazon S3 の HCatalog テーブルに出力を書き込む場合は、mapred.output.direct.NativeS3FileSystem プロパティと mapred.output.direct.EmrFileSystem プロパティを false に設定して、Amazon EMR の直接書き込み機能を無効にしてください。

## ganglia

いわゆる監視ツール。

[リファレンス](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-ganglia.html)

> ブラウザで Ganglia ウェブ UI を表示すると、クラスターの概要が表示されます。 パフォーマンス、負荷、メモリ使用量、CPU使用率、およびネットワークの詳細を示すグラフ クラスターのトラフィック。クラスター統計の下には、個々のサーバーのグラフがあります クラスター内。

https://dev.classmethod.jp/articles/install-ganglia-on-amazonlinux/

## HBaseとリードレプリカ

HBaseでリードレプリカが使える

(条件)
EMRバージョン5.7.0以上
ストレージにS3を利用

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/1785dc47-adb2-7884-5ed9-6f4694cedf7d.png)

HBaseは[ThinkIT](https://thinkit.co.jp/article/11882)が分かりやかったです

> HBaseはこのHDFS上に構築するデータベースです。HBaseとHadoop（HDFS）の関係を図4に示します。なお、HBaseの構築にYARNとMapReduceは必須ではありませんが、MapReduceを使用するとHBaseのデータ格納/参照を高速に行えるため、YARNとMapReduceも同時にインストールすることを推奨します。
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/a4ea4426-cfdb-1cbb-1da5-bb5550b76c4f.png)


# Glue

色々あるが、マネジメントコンソール上の分類のくくりはこう
データカタログの中に、データベース、テーブル、スキーマ、クローラ、カタログ設定(英語表示状態だと設定)がある。
ETL(英語表示状態だとData Intergration and ETL)の中に、Glue Studio、ジョブ、ノートブック、トリガー、ワークフロー (ワークフローの中にBlueprints) 、セキュリティ設定がある
(機能によって日本語で表示されるページと英語で表示されるページがあり、どちらかに遷移するとメニューの言語も切り替わるが、言語ごとに表記揺れがある)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/3190e293-5808-139e-f9b3-db149d6ff52e.png)

## データカタログ

### クローラ

データソースに、S3/JDBC/DynamoDB/DocumentDB/MongoDB/DeltaLakeを選択できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/ea502388-152e-80d2-5cc6-6f81e1c28157.png)

S3選択時。別のアカウントのS3を指定できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/82c0a048-0672-ccee-5a6d-8c465bed97d1.png)

### カタログ設定

メタデータ暗号化、接続パスワード暗号化ができる
(AWSマネージドKMSキーしか使えなそう?)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/0f0843a2-85e0-467d-d682-a362bee8865d.png)

## データ統合とETL

### ワークフロー

実行プロパティ、最大同時実行数を指定できる

> このワークフローで許可される同時実行の最大数を設定します。このしきい値に達すると、エラーが返されます。デフォルトは無制限です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/180d6c22-dfb3-8785-8581-2eaa79ddb50c.png)
> ETL ジョブ、トリガー、およびクローラのオーケストレーションを実行するには、ワークフローを追加してください



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/56b19752-d1b7-179a-e9ca-10b501d68fc1.png)


ワークフロー作成後、トリガーを作成する
トリガーの起動タイミングとして、スケジュール/イベント/オンデマンド/EventBridge eventを選択できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/1e5f83f3-0c27-c2c4-2180-f96cb182f768.png)

## Blueprints

ワークフローのBlueprints

> 設計図は、組織の一般的な ETL ユースケースの AWS Glue ワークフローを生成するために使用します。

設計図はS3で作成する

> Amazon S3 は、設計図と同じリージョンに存在する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/7548e506-db01-bd52-a545-d48cee9ec469.png)


### セキュリティ設定

「データ統合とETL」の中のセキュリティ設定だが、説明書きは「データカタログの暗号化と権限オプションを選びます」って書いてある..

S3暗号化(SSE-S3/SSE-KMS選べる)、CloudWatch logs暗号化、ジョブのブックマーク暗号化ができる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/d93b3357-e94e-0144-c351-3f22f7d64aae.png)


# MSK

## クイック作成

クラスタ名
クラスタータイプ
クラスターのスループット
クラスターストレージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/5b99dc91-0c54-46b6-a278-87883ef29ff7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/2f24eca0-444f-9185-6759-3ecc83f76456.png)

## カスタム作成

### ステップ1 クラスターの作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/b6aa5813-77ef-a56f-b061-3d6ca0a7e57d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/cc7f3bf4-eb3c-d1b0-c9fc-22a101becfbb.png)

## ステップ2 ネットワーク

VPC
サブネット
セキュリティグループ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/c2ee6ff4-ea11-80ca-6a85-a191a27c4bcb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/c984175c-b067-6900-a707-8745c4ea8aad.png)

## ステップ3 セキュリティ

アクセスコントロール方法
IAM ロールベースの認証

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/7a5fbb24-c2db-f408-4354-d96ed37abf14.png)

## ステップ4 メトリクスとタグ

メトリクス
クラスタータグ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/94c2e5ab-1595-c6dd-eef4-ddce622feb5f.png)

## ステップ5 確認と作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/9ecfc11d-fc83-3104-100a-0ded72b6c5aa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/1e6aab35-5d6a-f04c-27ae-3be35116483b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620712/dbfd38dd-0a02-de66-cdce-526a5beb7387.png)

## ベストプラクティス超要約

https://docs.aws.amazon.com/ja_jp/msk/latest/developerguide/bestpractices.html

### クラスターを適切なサイズにする:ブローカーのパーティション数

ブローカー = kafka上のインスタンスタイプ

kafka.t3.small = ブローカーあたりの最大パーティション数300
kafka.m5.large ~ xlarge = 1000
kafka.m5.2xlarge = 2000
kafka.m5.4xlarge以上 = 4000

t3.smallは300で、
m5はxlargeが1000でサイズが上がると倍、4xlarge以上は4000
largeはxlargeと同じ
と覚えると意外と簡単かも

> ブローカごとのパーティション数が前の表で指定された最大値を超えると、クラスタ上で次の操作を実行することはできません。
> 
> クラスター設定を更新する
> クラスターの Apache Kafka バージョンを更新します。
> クラスターをより小さなブローカータイプに更新
> AWS Secrets ManagerSASL/SCRAM認証を使用するクラスターにシークレットを関連付ける

パーティション数大事

### クラスターを適切なサイズにする:クラスターあたりのブローカーの数

> MSK クラスターに適切なブローカーの数を決定

### 最新のKafka AdminClientを使用すると、トピックIDの不一致問題を回避できる

> Kafkaバージョン2.8.0以上を使用しているクラスタに対して、Kafka AdminClientバージョン2.8.0未満を使用して--zookeeperフラグでトピックパーティションを増加または再割り当てすると、トピックのIDが失われます（エラー：パーティションのためのトピックIDと一致しない）。
> 
> トピックIDの不一致を防ぐには、Kafkaクライアントバージョン2.8.0以降を使用してKafka管理操作を行う必要があります。また、2.5 以上のクライアントでは、--zookeeper フラグの代わりに --bootstrap-servers フラグを使用することができます。

### 高可用性クラスターの構築

> 3 つの AZ クラスターをセットアップします。
> 
> 複製係数 (RF) が 3 以上であることを確認します。
> 
> 最小同期レプリカ (minISR) を最大で RF - 1 に設定します。
> 
> クライアント接続文字列には、各アベイラビリティーゾーンのブローカーが少なくとも 1 つ含まれていることを確認します。

### CPU 使用率をモニタリングする

> 60%以下に維持することを強く推奨しています。

> オプション 1 (推奨): ブローカータイプを次に大きいタイプに更新します。例えば、現在のタイプが kafka.m5.large の場合、kafka.m5.xlarge 

> オプション 2: ラウンドロビン書き込みを使用するプロデューサーから取り込まれたすべてのメッセージを含むトピックがある場合 (つまり、メッセージはキー設定されておらず、順序付けはコンシューマーにとって重要ではありません)、ブローカーを追加してクラスターを拡張します。

> オプション 3: ブローカーを追加してクラスターを拡張し、kafka-reassign-partitions.sh という名前のパーティション再割り当てツールを使用して既存のパーティションを再割り当てします。

### ディスク容量のモニタリング

> KafkaDataLogsDiskUsed

### データ保持パラメータの調整

> メッセージを消費しても、ログからは削除されません。定期的にディスク容量を解放するには、保持期間（メッセージをログに保持する期間）を明示的に指定できます。保存ログのサイズを指定することもできます。

### アパッチカフカメモリーの監視

> HeapMemoryAfterGC

### MSK 以外のブローカーを追加しない

タイトルのとおり

### 転送中の暗号化を有効にする

タイトルのとおり

### パーティションの再割り当て

> kafka-reassign-partitions.sh