

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 分析
<a name="analytics-pattern-list"></a>

**Topics**
+ [Microsoft SQL Server Analysis Services の Amazon Redshift データを分析](analyze-amazon-redshift-data-in-microsoft-sql-server-analysis-services.md)
+ [Amazon Athena と Amazon Quick Sight を使用してネストされた JSON データを分析および視覚化する](analyze-and-visualize-nested-json-data-with-amazon-athena-and-amazon-quicksight.md)
+ [から Amazon S3 AWS Data Exchange へのデータ取り込みを自動化する](automate-data-ingestion-from-aws-data-exchange-into-amazon-s3.md)
+ [AWS CloudFormation のテンプレートを使用して、AWS Glue での暗号化の適用を自動化](automate-encryption-enforcement-in-aws-glue-using-an-aws-cloudformation-template.md)
+ [AWS DataOps Development Kit を使用して Google Analytics データを取り込み、変換、分析するためのデータパイプラインを構築する](build-a-data-pipeline-to-ingest-transform-and-analyze-google-analytics-data-using-the-aws-dataops-development-kit.md)
+ [Amazon Kinesis Video Streamsと AWS Fargate を使用してビデオ処理パイプラインを構築する](build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate.md)
+ [AWS Glue を使用して Amazon S3 から Amazon Redshift にデータを段階的にロードする ETL サービスパイプラインを構築](build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue.md)
+ [Amazon DataZone を使用してエンタープライズデータメッシュを構築する AWS CDK AWS CloudFormation](build-enterprise-data-mesh-amazon-data-zone.md)
+ [AWS のサービスを使用してバリューアットリスク (VaR) を計算](calculate-value-at-risk-var-by-using-aws-services.md)
+ [Amazon Athena を使用して共有 AWS Glue データカタログへのクロスアカウントアクセスを構成する](configure-cross-account-access-to-a-shared-aws-glue-data-catalog-using-amazon-athena.md)
+ [Teradata NORMALIZE 時間的特徴量を Amazon Redshift SQL に変換](convert-the-teradata-normalize-temporal-feature-to-amazon-redshift-sql.md)
+ [Teradata RESET WHEN 特徴量を Amazon Redshift SQL に変換](convert-the-teradata-reset-when-feature-to-amazon-redshift-sql.md)
+ [インフラストラクチャをコードとして使用して、AWS クラウドにサーバーレスデータレイクをデプロイして管理する](deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code.md)
+ [起動時に Amazon EMR クラスターのタグ付けを強制する](enforce-tagging-of-amazon-emr-clusters-at-launch.md)
+ [Amazon S3 へのAmazon EMR ロギングが有効になっていることを確認する](ensure-amazon-emr-logging-to-amazon-s3-is-enabled-at-launch.md)
+ [AWS Glue ジョブと Python を使用してテストデータを生成します](generate-test-data-using-an-aws-glue-job-and-python.md)
+ [AWS IoT Greengrass を使用して IoT データをコスト効率よく直接 Amazon S3 に取り込む](cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass.md)
+ [Lambda 関数を使用して一時的な EMR クラスターで Spark ジョブを起動する](launch-a-spark-job-in-a-transient-emr-cluster-using-a-lambda-function.md)
+ [AWS Glue を使用して Apache Cassandra ワークロードを Amazon Keyspaces に移行する](migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.md)
+ [Oracle ビジネスインテリジェンス 12c をオンプレミスサーバーから AWS クラウドに移行](migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers.md)
+ [ELK スタックを AWS 上のElasticクラウドに移行する](migrate-an-elk-stack-to-elastic-cloud-on-aws.md)
+ [Starburst AWS クラウド を使用してデータを に移行する](migrate-data-to-the-aws-cloud-by-using-starburst.md)
+ [AWS での入力ファイルサイズの ETL 取り込みを最適化する](optimize-the-etl-ingestion-of-input-file-size-on-aws.md)
+ [を使用して、検証、変換、パーティショニングで ETL パイプラインをオーケストレーションする AWS Step Functions](orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.md)
+ [Amazon Redshift ML機械学習を使用して高度な分析を実行する](perform-advanced-analytics-using-amazon-redshift-ml.md)
+ [Amazon Athena を使用して SQL で Amazon DynamoDB テーブルをクエリする](query-amazon-dynamodb-tables-sql-amazon-athena.md)
+ [Athena による Amazon DynamoDB テーブルへのアクセス、クエリ、結合](access-query-and-join-amazon-dynamodb-tables-using-athena.md)
+ [スカラー Python UDF を使用した Amazon Redshift クエリー結果の言語固有のソートの設定](set-up-language-specific-sorting-for-amazon-redshift-query-results-using-a-scalar-python-udf.md)
+ [さまざまな AWS リージョンの S3 バケットからのイベント通知に Lambda 関数をサブスクライブする](subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions.md)
+ [データを Apache Parquet に変換するための 3 つの AWS Glue ETL ジョブタイプ](three-aws-glue-etl-job-types-for-converting-data-to-apache-parquet.md)
+ [Amazon Athena および Amazon QuickSight を使用して Amazon Redshift 監査ログを視覚化](visualize-amazon-redshift-audit-logs-using-amazon-athena-and-amazon-quicksight.md)
+ [Amazon Quick Sight を使用してすべての AWS アカウントの IAM 認証情報レポートを視覚化する](visualize-iam-credential-reports-for-all-aws-accounts-using-amazon-quicksight.md)
+ [その他のパターン](analytics-more-patterns-pattern-list.md)

# Microsoft SQL Server Analysis Services の Amazon Redshift データを分析
<a name="analyze-amazon-redshift-data-in-microsoft-sql-server-analysis-services"></a>

*Amazon Web Services、Sunil Vora*

## 概要
<a name="analyze-amazon-redshift-data-in-microsoft-sql-server-analysis-services-summary"></a>

このパターンは、データベースアクセスには Intellisoft OLE DB プロバイダーまたは CData ADO.NET プロバイダーにより、Microsoft SQL Server Analysis Servicesの Amazon Redshift データに接続して分析する方法を説明しています。

Amazon Redshift は、 クラウド内でのフルマネージド型、ペタバイト規模のデータウェアハウスサービスです。SQL Server Analysis Services は、データマートや Amazon Redshift などのデータウェアハウスからのデータを分析するために使用できるオンライン分析処理 (OLAP) ツールです。SQL Server Analysis Services を使用してデータから OLAP キューブを作成し、迅速で高度なデータ分析を行うことができます。 

## 前提条件と制限事項
<a name="analyze-amazon-redshift-data-in-microsoft-sql-server-analysis-services-prereqs"></a>

引き受け
+ このパターンは Amazon Redshift の SQL Server Analysis Services と Intellisoft OLE DB Provider または CData ADO.NET Provider を Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに設定する方法を説明しています。または、企業データセンターのホストに両方をインストールすることもできます。

**前提条件**
+ アクティブな AWS アカウント
+ Amazon Redshift クラスターと認証情報

## アーキテクチャ
<a name="analyze-amazon-redshift-data-in-microsoft-sql-server-analysis-services-architecture"></a>

**ソーステクノロジースタック**
+ Amazon Redshift クラスター

**ターゲットテクノロジースタック**
+ Microsoft SQL Server Analysis Services

**ソースアーキテクチャとターゲットアーキテクチャ**

![\[Microsoft SQL Server Analysis Services の Amazon Redshift データを分析\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/e444fec0-e00f-4cc6-acc6-4ffc61b654a0/images/6f29dab5-1ea7-452f-9b07-d1d23ae469a2.png)


## ツール
<a name="analyze-amazon-redshift-data-in-microsoft-sql-server-analysis-services-tools"></a>
+ 「[Microsoft Visual Studio 2019 (コミュニティエディション)](https://visualstudio.microsoft.com/vs/)」
+ 「[Amazon Redshift 用インテリソフト OLE DB プロバイダー (試用版)](https://www.pgoledb.com/index.php?option=com_filecabinet&view=files&id=1&Itemid=68)」 または「[Amazon Redshift 用 CData ADO.NETプロバイダー (試用版)](https://www.cdata.com/kb/tech/redshift-ado-ssas.rst)」

## エピック
<a name="analyze-amazon-redshift-data-in-microsoft-sql-server-analysis-services-epics"></a>

### テーブルを分析
<a name="analyze-tables"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| インポートするテーブルとデータを分析します。 | インポートする Amazon Redshift テーブルとそのサイズを指定します。 | DBA | 

### EC2 インスタンスを設定してツールをインストール
<a name="set-up-ec2-instance-and-install-tools"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| EC2 インスタンスをセットアップします。 | AWS アカウントで、プライベートサブネットまたはパブリックサブネットに EC2 インスタンスを作成します。 | システム管理者 | 
| データベースアクセス用のツールをインストールします。 | 「[Amazon Redshift 用インテリソフト OLE DB プロバイダー (試用版)](https://www.pgoledb.com/index.php?option=com_filecabinet&view=files&id=1&Itemid=68)」(または「[Amazon Redshift 用 CData ADO.NETプロバイダー](https://www.cdata.com/kb/tech/redshift-ado-ssas.rst)」)をダウンロードして、インストールします。  | システム管理者 | 
| Visual Studio をインストールします。 | 「[Visual Studio 2019 (コミュニティエディション)](https://visualstudio.microsoft.com/vs/)」をダウンロードしてインストールします。  | システム管理者 | 
| 拡張機能をインストールします。 | **Microsoft Analysis Services Projects** の拡張機能を Visual Studio にインストールします。 | システム管理者 | 
| プロジェクトを作成します。 | Amazon Redshift データを保存するための新しい表形式モデルプロジェクトを Visual Studio で作成します。Visual Studio では、プロジェクトを作成するときに **Analysis Services Tabular Project** オプションを選択します。 | DBA | 

### データソースの作成とテーブルのインポート
<a name="create-data-source-and-import-tables"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Amazon Redshift データソースを作成します。 | Amazon Redshift 用の Intellisoft OLE DB プロバイダー (または Amazon Redshift 用の CData ADO.NET プロバイダー) と Amazon Redshift 認証情報により、 Amazon Redshift データソースを作成します。 | Amazon Redshift、DBA | 
| テーブルをインポートします。 | Amazon Redshift からテーブルとビューを選択し、SQL Server Analysis Services プロジェクトにインポートします。 | Amazon Redshift、DBA | 

### 移行後のクリーンアップ
<a name="clean-up-after-migration"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| EC2 インスタンスを削除します。 | 以前に起動した EC2 インスタンスを削除します。 | システム管理者 | 

## 関連リソース
<a name="analyze-amazon-redshift-data-in-microsoft-sql-server-analysis-services-resources"></a>
+ 「[Amazon Redshift](https://docs.aws.amazon.com/redshift/)」(AWS のドキュメント)
+ 「[SQL Server Analysis Servicesのインストール](https://docs.microsoft.com/en-us/analysis-services/instances/install-windows/install-analysis-services?view=asallproducts-allversions)」(Microsoft のドキュメント)
+ 「[Tabular Model Designer](https://docs.microsoft.com/en-us/analysis-services/tabular-models/tabular-model-designer-ssas?view=asallproducts-allversions)」(Microsoft のドキュメント)
+ 「[高度な分析用の OLAP キューブの概要](https://docs.microsoft.com/en-us/system-center/scsm/olap-cubes-overview?view=sc-sm-2019)」(Microsoft のドキュメント)
+ 「[Microsoft Visual Studio 2019 (コミュニティエディション)](https://visualstudio.microsoft.com/vs/)」
+ 「[Amazon Redshift 用インテリソフト OLE DB プロバイダー (試用版)](https://www.pgoledb.com/index.php?option=com_filecabinet&view=files&id=1&Itemid=68)」 
+ 「[Amazon Redshift 用 CData ADO.NET プロバイダー (試用版)](https://www.cdata.com/kb/tech/redshift-ado-ssas.rst)」

# Amazon Athena と Amazon Quick Sight を使用してネストされた JSON データを分析および視覚化する
<a name="analyze-and-visualize-nested-json-data-with-amazon-athena-and-amazon-quicksight"></a>

*Amazon Web Services、Anoop Singh*

## 概要
<a name="analyze-and-visualize-nested-json-data-with-amazon-athena-and-amazon-quicksight-summary"></a>

このパターンでは、Amazon Athena を使用してネストされた JSON 形式のデータ構造を表形式ビューに変換し、Amazon Quick Sight でデータを視覚化する方法について説明します。

オペレーションシステムから得られた、API を活用したデータフィードに JSON 形式のデータを使用することで、データプロダクトを作成できます。また、このデータは顧客が製品をどのように使用しているのかを深く理解することにも役立ち、ユーザーエクスペリエンスを調整したり結果を予測したりできます。

## 前提条件と制限
<a name="analyze-and-visualize-nested-json-data-with-amazon-athena-and-amazon-quicksight-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ ネストされたデータ構造を表す JSON ファイル (このパターンではサンプルファイルを使用)

**機能制限:**
+ JSON 機能は、Athena の既存の SQL 指向関数と十分に統合されています。ただし、これらは ANSI SQL 互換ではなく、JSON ファイルは各レコードを個別の行に格納することが想定されています。Athena の `ignore.malformed.json` プロパティを使用して、不正な形式の JSON レコードを null 文字に変換するか、エラーを生成するかを示す必要がある場合があります。詳細については、Athena ドキュメントの「[Best practices for reading JSON data](https://docs.aws.amazon.com/athena/latest/ug/parsing-JSON.html)」を参照してください。
+ 本パターンでは、JSON 形式の単純かつ少量のデータのみを取り上げます。これらの概念を大規模に使用する場合は、データのパーティショニングを適用し、データをより大きなファイルに統合することを検討します。

## アーキテクチャ
<a name="analyze-and-visualize-nested-json-data-with-amazon-athena-and-amazon-quicksight-architecture"></a>

次の図は、本パターンのアーキテクチャとワークフローを示したものです。ネストされたデータ構造は、Amazon Simple Storage Service (Amazon S3) に JSON 形式で保存されます。Athena では、JSON データは Athena データ構造にマッピングされます。次に、データを分析するためのビューを作成し、Quick Sight でデータ構造を視覚化します。

![\[AWS でのネストされた JSON データの分析と視覚化。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/e9ad39a1-e0a4-4429-bdc0-594b68707761/images/474e8747-626f-468c-9c27-c007af79bf2d.png)


## ツール
<a name="analyze-and-visualize-nested-json-data-with-amazon-athena-and-amazon-quicksight-tools"></a>

**AWS サービス**
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、量にかかわらず、データを保存、保護、取得するのに役立つクラウドベースのオブジェクトストレージサービスです。本パターンでは、Amazon S3 を使用して JSON ファイルを保存します。
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) は、標準 SQL を使用して Amazon S3 でデータを直接分析するのに役立つ対話型のクエリサービスです。本パターンでは、JSON データのクエリと変換に Athena を使用します。でいくつかのアクションを使用すると AWS マネジメントコンソール、Amazon S3 のデータに Athena をポイントし、標準 SQL を使用して 1 回限りのクエリを実行できます。Athena はサーバーレスであるため、インフラストラクチャの設定や管理は不要です。また、実行したクエリにのみ課金されます。Athena は、自動的にスケールしてクエリを並列実行するため、大規模なデータベースや複合型のクエリでも結果がすぐに返されます。    
+ [Amazon Quick Sight](https://docs.aws.amazon.com/quicksuite/latest/userguide/quick-bi.html) は、単一のダッシュボードでデータを視覚化、分析、レポートするのに役立つクラウドスケールのビジネスインテリジェンス (BI) サービスです。Quick Sight を使用すると、機械学習 (ML) インサイトを含むインタラクティブなダッシュボードを簡単に作成して公開できます。どのデバイスからでもダッシュボードにアクセスし、アプリケーション、ポータル、ウェブサイトに埋め込むことができます。

**コードの例**

次の JSON ファイルは、本パターンで使用できるネストされたデータ構造を提供します。

```
{
  "symbol": "AAPL",
  "financials": [
    {
      "reportDate": "2017-03-31",
      "grossProfit": 20591000000,
      "costOfRevenue": 32305000000,
      "operatingRevenue": 52896000000,
      "totalRevenue": 52896000000,
      "operatingIncome": 14097000000,
      "netIncome": 11029000000,
      "researchAndDevelopment": 2776000000,
      "operatingExpense": 6494000000,
      "currentAssets": 101990000000,
      "totalAssets": 334532000000,
      "totalLiabilities": 200450000000,
      "currentCash": 15157000000,
      "currentDebt": 13991000000,
      "totalCash": 67101000000,
      "totalDebt": 98522000000,
      "shareholderEquity": 134082000000,
      "cashChange": -1214000000,
      "cashFlow": 12523000000,
      "operatingGainsLosses": null
    }
  ]
}
```

## エピック
<a name="analyze-and-visualize-nested-json-data-with-amazon-athena-and-amazon-quicksight-epics"></a>

### S3 バケットをセットアップする
<a name="set-up-an-s3-bucket"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| S3 バケットを作成する。 | JSON ファイルを保存するバケットを作成するには、 にサインインし AWS マネジメントコンソール、[Amazon S3 コンソール](https://console.aws.amazon.com/s3/)を開き、**バケットの作成**を選択します。詳細については、Amazon S3 ドキュメントの「[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)」を参照してください。  | システム管理者 | 
| ネストされた JSON データを追加します。 | JSON ファイルを S3 バケットにアップロードします。JSON ファイルのサンプルについては、前のセクションを参照してください。手順については、Amazon S3 ドキュメントの「[オブジェクトのアップロード](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)」を参照してください。 | システム管理者 | 

### Athena でデータを分析する
<a name="analyze-data-in-ate"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| テーブルを作成して JSON データをマッピングします。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/analyze-and-visualize-nested-json-data-with-amazon-athena-and-amazon-quicksight.html)テーブルの作成の詳細については、[Athena ドキュメント](https://docs.aws.amazon.com/athena/latest/ug/creating-tables.html)を参照してください。 | 開発者 | 
| データ分析用のビューを作成します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/analyze-and-visualize-nested-json-data-with-amazon-athena-and-amazon-quicksight.html)ビューの作成の詳細については、[Athena ドキュメント](https://docs.aws.amazon.com/athena/latest/ug/create-view.html)を参照してください。 | 開発者 | 
| データを分析して検証します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/analyze-and-visualize-nested-json-data-with-amazon-athena-and-amazon-quicksight.html) | 開発者 | 

### Quick Sight でデータを視覚化する
<a name="visualize-data-in-qsight"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Quick Sight で Athena をデータソースとして設定します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/analyze-and-visualize-nested-json-data-with-amazon-athena-and-amazon-quicksight.html) | システム管理者 | 
| Quick Sight でデータを視覚化します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/analyze-and-visualize-nested-json-data-with-amazon-athena-and-amazon-quicksight.html) | データアナリスト | 

## 関連リソース
<a name="analyze-and-visualize-nested-json-data-with-amazon-athena-and-amazon-quicksight-resources"></a>
+ [Amazon Athena ドキュメント](https://docs.aws.amazon.com/athena/latest/ug/getting-started.html)
+ [Amazon Quick Sight チュートリアル](https://docs.aws.amazon.com/quicksuite/latest/userguide/example-analysis.html)
+ [Working with nested JSON ](https://aws.amazon.com/blogs/big-data/create-tables-in-amazon-athena-from-nested-json-and-mappings-using-jsonserde/)(ブログ記事)

# から Amazon S3 AWS Data Exchange へのデータ取り込みを自動化する
<a name="automate-data-ingestion-from-aws-data-exchange-into-amazon-s3"></a>

*Adnan Alvee、Manikanta Gona (Amazon Web Services)*

## 概要
<a name="automate-data-ingestion-from-aws-data-exchange-into-amazon-s3-summary"></a>

このパターンは、Amazon Simple Storage Service (Amazon S3) のデータレイク AWS Data Exchange に からデータを自動的に取り込むことができる CloudFormation テンプレートを提供します。 

AWS Data Exchange は、AWS Cloud 内のファイルベースのデータセットを安全に交換できるようにするサービスです。 AWS Data Exchange データセットはサブスクリプションベースです。サブスクライバーは、プロバイダーが新しいデータをパブリッシュしたときに、データセットの改訂版にアクセスすることもできます。 

 CloudFormation テンプレートは、Amazon CloudWatch Events と AWS Lambda 関数にイベントを作成します。このイベントは、お客様がサブスクライブしているデータセットの更新を監視します。更新がある場合、CloudWatch は Lambda 関数を開始し、指定した S3 バケットにデータをコピーします。データが正常にコピーされると、Lambda から Amazon Simple Notiﬁcation Service (Amazon SNS) 通知が送信されます。

## 前提条件と制限事項
<a name="automate-data-ingestion-from-aws-data-exchange-into-amazon-s3-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ のデータセットへのサブスクリプション AWS Data Exchange

**制限事項**
+  CloudFormation テンプレートは、サブスクライブしているデータセットごとに個別にデプロイする必要があります AWS Data Exchange。

## アーキテクチャ
<a name="automate-data-ingestion-from-aws-data-exchange-into-amazon-s3-architecture"></a>

**ターゲットテクノロジースタック**
+ AWS Lambda
+ Amazon S3
+ AWS Data Exchange
+ Amazon CloudWatch
+ Amazon SNS

**ターゲット アーキテクチャ**

![\[CloudWatch は、Lambda 関数を開始してデータを S3 バケットにコピーし、Amazon SNS 通知を送信します。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/059816dc-5a71-4942-9c7f-ac977072eebc/images/ec021620-47c1-4fb5-95a9-3b8985accc56.png)


**自動化とスケール**

 CloudFormation テンプレートは、データレイクに取り込むデータセットに複数回使用できます。

## ツール
<a name="automate-data-ingestion-from-aws-data-exchange-into-amazon-s3-tools"></a>
+ [AWS Data Exchange](https://docs.aws.amazon.com/data-exchange/latest/userguide/what-is.html) を使用すると、 AWS お客様は でファイルベースのデータセットを安全に交換できます AWS クラウド。サブスクライバーは、認定されたデータプロバイダーからの何千もの製品を検索してサブスクライブすることができます。その後、データセットをすばやくダウンロードするか、Amazon S3 にコピーして、さまざまな AWS 分析および機械学習サービスで使用できます。を持つユーザーは誰でもサブ AWS Data Exchange スクライバーになる AWS アカウント ことができます。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) を使用すると、サーバーをプロビジョニングまたは管理しなくてもコードを実行できます。Lambda は必要に応じてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケールします。使用したコンピューティング時間に対してのみお支払いいただきます。コードが実行中でなければ料金はかかりません。Lambda を使用すれば、実質どのようなタイプのアプリケーションやバックエンドサービスでも管理を必要とせずに実行できます。Lambda は、高可用性コンピューティングインフラストラクチャ上でコードを実行し、サーバーとオペレーティングシステムのメンテナンス、容量のプロビジョニングと自動スケーリング、コードのモニタリング、ロギングを含むすべてのコンピューティングリソースを管理します。
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html) はインターネット用のストレージす。Simple Storage Service (Amazon S3) を使用すると、いつでもウェブ上の任意の場所から任意の量のデータを保存および取得できます。
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) は、 AWS リソースの変更を記述するシステムイベントのほぼリアルタイムのストリームを提供します。すぐに設定できる簡単なルールを使用して、ルールに一致したイベントを 1 つ以上のターゲット関数またはストリームに振り分けることができます。CloudWatch Events が発生すると、運用上の変更が認識されます。オペレーションの変更に応答し、必要に応じて、応答メッセージを環境に送り、機能をアクティブ化し、変更を行い、状態情報を収集することによって、修正アクションを実行します。CloudWatch Events を使用して、**cron式** や **rate式**により特定の時間に自己トリガーする自動アクションをスケジュールすることもできます。
+ [Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) を使用すると、アプリケーション、エンドユーザー、デバイスはクラウドから瞬時に通知を送受信できまです。Amazon SNS は、高スループットのプッシュベースの多対多メッセージング用のトピック (通信チャネル) を提供します。Amazon SNS トピックを使用すると、パブリッシャーはメッセージを多数のサブスクライバーに配信して、Amazon Simple Queue Service (Amazon SQS) キュー、Lambda 関数、HTTP/S ウェブフックなどの並行処理を行うことができます。Amazon SNS を使用して、モバイルプッシュ、SMS、E メールを使用してエンドユーザーに通知を送信することもできます。

## エピック
<a name="automate-data-ingestion-from-aws-data-exchange-into-amazon-s3-epics"></a>

### データセットをサブスクライブする
<a name="subscribe-to-a-data-set"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| データセットをサブスクライブする |  AWS Data Exchange コンソールで、データセットをサブスクライブします。手順については、 AWS ドキュメントの[「 でのデータ製品のサブスクライブ AWS Data Exchange](https://docs.aws.amazon.com/data-exchange/latest/userguide/subscribe-to-data-sets.html)」を参照してください。 | AWS 全般 | 
| データセットの属性に注意してください。 | データセットの AWS リージョン、ID、およびリビジョン ID を書き留めます。これは、次のステップで CloudFormation テンプレートに必要になります。 | AWS 全般 | 

### CloudFormation テンプレートをデプロイする
<a name="deploy-the-cfn-template"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| S3 バケットとフォルダを作成する。 | Amazon S3 に既にデータレイクがある場合は、取り込むデータを保存するフォルダを作成します AWS Data Exchange。テスト目的でテンプレートをデプロイする場合は、新しい S3 バケットを作成し、次のステップのためにバケット名とフォルダプレフィックスを書き留めておきます。 | AWS 全般 | 
|  CloudFormation テンプレートをデプロイします。 | このパターンの添付ファイルとして提供される CloudFormation テンプレートをデプロイします。手順については、[CloudFormation ドキュメント](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)を参照してください。 AWS アカウント、データセット、および S3 バケット設定に対応するように次のパラメータを設定します。**データセット AWS リージョン**、**データセット ID**、**リビジョン ID**、**S3 バケット名** (例: `DOC-EXAMPLE-BUCKET`)、**フォルダプレフィックス** (例: `myfolder/`)、**SNS 通知の E **メール。**データセット名**パラメータは任意の名前に設定できます。テンプレートをデプロイすると、Lambda 関数が実行され、データセットで使用可能な最初のデータセットが自動的に取り込まれます。その後、データセットに新しいデータが到着すると、自動的に取り込まれます。 | AWS 全般 | 

## 関連リソース
<a name="automate-data-ingestion-from-aws-data-exchange-into-amazon-s3-resources"></a>
+ [でのデータ製品のサブスクライブ AWS Data Exchange](https://docs.aws.amazon.com/data-exchange/latest/userguide/subscribe-to-data-sets.html) (AWS Data Exchange ドキュメント)

## アタッチメント
<a name="attachments-059816dc-5a71-4942-9c7f-ac977072eebc"></a>

このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「[attachment.zip](samples/p-attach/059816dc-5a71-4942-9c7f-ac977072eebc/attachments/attachment.zip)」

# AWS CloudFormation のテンプレートを使用して、AWS Glue での暗号化の適用を自動化
<a name="automate-encryption-enforcement-in-aws-glue-using-an-aws-cloudformation-template"></a>

*Diogo Guedes (Amazon Web Services)*

## 概要
<a name="automate-encryption-enforcement-in-aws-glue-using-an-aws-cloudformation-template-summary"></a>

このパターンは、AWS CloudFormation テンプレートを使用して AWS Glue で暗号化の適用をセットアップして自動化する方法を示しています。このテンプレートは、暗号化を実施するために必要なすべての設定とリソースを作成します。これらのリソースには、初期設定、Amazon EventBridge ルールによって作成された予防コントロール、および AWS Lambda 関数が含まれます。

## 前提条件と制限事項
<a name="automate-encryption-enforcement-in-aws-glue-using-an-aws-cloudformation-template-prereqs"></a>

**前提条件**
+ アクティブなAWS アカウント
+ CloudFormation テンプレートとそのリソースをデプロイするための権限

**制限事項**

このセキュリティコントロールは地域ごとに行われます。AWS Glue で暗号化の適用を設定する各 AWS リージョンに、セキュリティコントロールをデプロイする必要があります。

## アーキテクチャ
<a name="automate-encryption-enforcement-in-aws-glue-using-an-aws-cloudformation-template-architecture"></a>

**ターゲットテクノロジースタック**
+ Amazon CloudWatch Logs (AWS Lambda から)
+ Amazon EventBridge ルール
+ AWS CloudFormation スタック
+ AWS CloudTrail
+ AWS Identity and Access Management (IAM) 管理ロールとポリシー
+ AWS Key Management Service (AWS KMS)
+ AWS KMS alias
+ AWS Lambda 関数
+ Systems Manager Parameter Store

**ターゲットアーキテクチャ**

次の図は、AWS Glue で暗号化の適用を自動化する方法を示しています。

![\[図は、CloudFormation テンプレートを使用して AWS Glue で暗号化の適用を自動化する方法を示しています。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/d50d0659-5592-44d0-8fcb-7a2983712640/images/272a7fb2-ecbc-41f7-a556-d555e4e39a59.png)


この図表は、次のワークフローを示しています:

1. 「[CloudFormation テンプレート](https://github.com/aws-samples/aws-custom-guardrail-event-driven/blob/main/CloudFormation/aws-custom-guardrail-event-driven.yaml)」は、AWS Glue での暗号化実施のための初期設定や検出制御を含むすべてのリソースを作成します。

1. EventBridge ルールは、暗号化設定の状態変化を検出します。

1. Lambda 関数が呼び出され、CloudWatch ログを通じて評価とロギングが行われます。非準拠の検出では、パラメータストアは AWS KMS キーの Amazon リソースネーム (ARN) で復元されます。サービスは暗号化が有効になった状態で準拠状態に修正されます。

**自動化とスケール**

「[AWS Organizations](https://aws.amazon.com/organizations/)」を使用している場合は、「[AWS CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html)」を使用して、AWS Glue で暗号化の強制を有効にしたい複数のアカウントにこのテンプレートをデプロイできます。

## ツール
<a name="automate-encryption-enforcement-in-aws-glue-using-an-aws-cloudformation-template-tools"></a>
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) は、AWS のリソースや、AWS で実行されるアプリケーションをリアルタイムにモニタリングします。
+ 「[Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)」は、アプリケーションをさまざまなソースのリアルタイムデータに接続できるようにするサーバーレスイベントバスサービスです。たとえば、Lambda 関数、API 宛先を使用する HTTP 呼び出しエンドポイント、または他の AWS アカウントのイベントバスなどです。
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) を使用すると、AWS リソースをセットアップし、迅速かつ一貫したプロビジョニングを行い、AWS アカウントとリージョン全体でライフサイクル全体にわたってリソースを管理できます。
+ 「[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)」は、AWS アカウントの運用とリスクの監査、ガバナンスとコンプライアンスを支援します。
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) は、フルマネージド型の抽出、変換、ロード (ETL) サービスです。これにより、データストアとデータストリーム間でのデータの分類、整理、強化、移動を確実に行うことができます。
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) は、データの保護に役立つ暗号キーを作成および管理する上で役立ちます。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ 「[AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)」は、AWS クラウドで実行されるアプリケーションとインフラストラクチャの管理に役立ちます。アプリケーションとリソースの管理が簡略化され、オペレーション上の問題の検出と解決時間が短縮され、AWS リソースを大規模かつセキュアに管理できるようになります。

**コード**

このパターンのコードは、GitHub 内の「[aws-custom-guardrail-event-driven](https://github.com/aws-samples/aws-custom-guardrail-event-driven/blob/main/CloudFormation/aws-custom-guardrail-event-driven.yaml)」リポジトリで利用できます。

## ベストプラクティス
<a name="automate-encryption-enforcement-in-aws-glue-using-an-aws-cloudformation-template-best-practices"></a>

AWS Glue は、「[AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/author-job-glue.html)」でジョブを作成したり、「[開発エンドポイントを使用してスクリプトを開発したりするための保存データ暗号化](https://docs.aws.amazon.com/glue/latest/dg/dev-endpoint.html)」をサポートしています。

以下のベストプラクティスを考慮します。
+ AWS KMS キーを使用して暗号化されたデータを残りの部分に書き込むように、ETL ジョブと開発エンドポイントを設定します。
+ AWS KMS で管理するキーを使用して、「[AWS Glue データカタログ](https://docs.aws.amazon.com/glue/latest/dg/components-overview.html#data-catalog-intro)」に保存されているメタデータを暗号化します。
+ AWS KMS キーを使用して、ジョブのブックマークや、「[クローラー](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html)」および ETL ジョブで生成されたログを暗号化します。

## エピック
<a name="automate-encryption-enforcement-in-aws-glue-using-an-aws-cloudformation-template-epics"></a>

### CloudFormation のテンプレートを起動
<a name="launch-the-cloudformation-template"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| CloudFormation のテンプレートをデプロイします。 | GitHub `aws-custom-guardrail-event-driven.yaml` 「[リポジトリ](https://github.com/aws-samples/aws-custom-guardrail-event-driven/blob/main/CloudFormation/aws-custom-guardrail-event-driven.yaml)」からテンプレートをダウンロードし、テンプレートを「[デプロイ](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/deploy/index.html)」します。`CREATE_COMPLETE` ステータスはテンプレートが正常にデプロイされたことを示します。テンプレートには入力パラメータは必要ありません。 | クラウドアーキテクト | 

### AWS Glue の暗号化設定を確認します。
<a name="verify-the-encryption-settings-in-aws-glue"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS KMS キー設定を確認します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-encryption-enforcement-in-aws-glue-using-an-aws-cloudformation-template.html) | クラウドアーキテクト | 

### 暗号化の適用をテスト
<a name="test-the-encryption-enforcement"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| クラウドフォーメーションの暗号化設定を確認します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-encryption-enforcement-in-aws-glue-using-an-aws-cloudformation-template.html) | クラウドアーキテクト | 
| プロビジョニングされたインフラストラクチャーを非準拠状態に切り替えます。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-encryption-enforcement-in-aws-glue-using-an-aws-cloudformation-template.html)チェックボックスをオフにすると、ガードレールは AWS Glue の非準拠状態を検出し、暗号化の設定ミスを自動的に修正することでコンプライアンスを強制します。そのため、ページを更新した後は、暗号化のチェックボックスが再びオンになっているはずです。 | クラウドアーキテクト | 

## 関連リソース
<a name="automate-encryption-enforcement-in-aws-glue-using-an-aws-cloudformation-template-resources"></a>
+ 「[AWS CloudFormation コンソールでのスタックの作成](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)」 (AWS CloudFormation ドキュメント)
+ 「[AWS CloudTrail を使用して AWS API コールでトリガーする CloudWatch Events ルールの作成](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-CloudTrail-Rule.html) (Amazon CloudWatch ドキュメント)
+ 「[AWS Glue での暗号化のセットアップ](https://docs.aws.amazon.com/glue/latest/dg/set-up-encryption.html)」 (AWS Glue ドキュメント)

# AWS DataOps Development Kit を使用して Google Analytics データを取り込み、変換、分析するためのデータパイプラインを構築する
<a name="build-a-data-pipeline-to-ingest-transform-and-analyze-google-analytics-data-using-the-aws-dataops-development-kit"></a>

*Anton Kukushkin、Rudy Puig (Amazon Web Services)*

## 概要
<a name="build-a-data-pipeline-to-ingest-transform-and-analyze-google-analytics-data-using-the-aws-dataops-development-kit-summary"></a>

このパターンでは、 AWS DataOps Development Kit (AWS DDK) などを使用して Google Analytics データを取り込み、変換、分析するためのデータパイプラインを構築する方法について説明します AWS のサービス。 AWS DDK は、データワークフローと最新のデータアーキテクチャの構築に役立つオープンソースの開発フレームワークです AWS。 AWS DDK の主な目的の 1 つは、パイプラインのオーケストレーション、インフラストラクチャの構築、そのインフラストラクチャの背後にある DevOps の作成など、通常、労働集約的なデータパイプラインタスクに費やす時間と労力を節約することです。これらの手間のかかるタスクを DDK AWS にオフロードして、コードやその他の価値の高いアクティビティの作成に集中できます。

## 前提条件と制限
<a name="build-a-data-pipeline-to-ingest-transform-and-analyze-google-analytics-data-using-the-aws-dataops-development-kit-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ [設定済み](https://docs.aws.amazon.com/appflow/latest/userguide/google-analytics.html)の Google アナリティクス用の Amazon AppFlow コネクタ
+ [Python](https://www.python.org/downloads/) と [pip](https://pip.pypa.io/en/stable/cli/pip_download/) (Python のパッケージマネージャ)
+ インストールおよび[設定](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup)済みの Git
+ AWS Command Line Interface (AWS CLI)、[インストール](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)および[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)済み
+ [インストール済みの](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install)AWS Cloud Development Kit (AWS CDK)

**製品バージョン**
+ Python 3.7 以降
+ pip 9.0.3 以降

## アーキテクチャ
<a name="build-a-data-pipeline-to-ingest-transform-and-analyze-google-analytics-data-using-the-aws-dataops-development-kit-architecture"></a>

**テクノロジースタック**
+ Amazon AppFlow
+ Amazon Athena
+ Amazon CloudWatch
+ Amazon EventBridge
+ Amazon Simple Storage Service (Amazon S3)
+ Amazon Simple Queue Service (Amazon SQS)
+ AWS DataOps 開発キット (AWS DDK)
+ AWS Lambda

**ターゲットアーキテクチャ**

次の図は、Google アナリティクスのデータを取り込み、変換、分析するイベント駆動型のプロセスを示しています。

![\[AWS サービスを使用した Google アナリティクスデータの取り込み、変換、分析。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/edf40222-2867-4d4a-9153-ab29785b6662/images/8c38b472-153b-4497-982c-8efb97d2f7a5.png)


この図表は、次のワークフローを示しています:

1. Amazon CloudWatch のスケジュールされたイベントルールは Amazon AppFlow を呼び出します。

1. Amazon AppFlow は Google アナリティクスのデータを S3 バケットに取り込みます。

1. データが S3 バケットに取り込まれると、EventBridge のイベント通知が生成され、CloudWatch イベントルールによってキャプチャされ、Amazon SQS キューに入れられます。

1. Lambda 関数は、Amazon SQS キューからのイベントを消費し、それぞれの S3 オブジェクトを読み取り、オブジェクトを Apache Parquet 形式に変換し、変換されたオブジェクトを S3 バケットに書き込み、 AWS Glue Data Catalog テーブル定義を作成または更新します。

1. Athena クエリがテーブルに対して実行されます。

## ツール
<a name="build-a-data-pipeline-to-ingest-transform-and-analyze-google-analytics-data-using-the-aws-dataops-development-kit-tools"></a>

**AWS ツール**
+ [Amazon AppFlow](https://docs.aws.amazon.com/appflow/latest/userguide/what-is-appflow.html) は、Software as a Service (SaaS) アプリケーション間でデータを安全に交換できるようにするフルマネージド型の統合サービスです。
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) は、標準 SQL を使用して Amazon S3 でデータを直接分析するのに役立つ対話型のクエリサービスです。
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) は、 AWS リソースと で実行しているアプリケーションのメトリクスを AWS リアルタイムでモニタリングするのに役立ちます。
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) は、アプリケーションをさまざまなソースのリアルタイムデータに接続できるようにするサーバーレスイベントバスサービスです。例えば、 AWS Lambda 関数、API 送信先を使用する HTTP 呼び出しエンドポイント、その他のイベントバスなどです AWS アカウント。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。
+ [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) は、分散ソフトウェアシステムとコンポーネントの統合と分離に役立つ、安全で耐久性があり、利用可能なホスト型キューを提供します。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) は、コードでクラウドインフラストラクチャを定義し、それをプロビジョニングするためのフレームワークです CloudFormation。
+ [AWS DataOps Development Kit (AWS DDK)](https://github.com/awslabs/aws-ddk) は、データワークフローと最新のデータアーキテクチャの構築に役立つオープンソースの開発フレームワークです AWS。

**Code**

このパターンのコードは、GitHub [AWS DataOps Development Kit (AWS DDK)](https://github.com/awslabs/aws-ddk) および [Analyzing Google Analytics data with Amazon AppFlow、Amazon Athena、 AWS DataOps Development Kit](https://github.com/aws-samples/aws-ddk-examples/tree/main/google-analytics-data-using-appflow/python) リポジトリで入手できます。

## エピック
<a name="build-a-data-pipeline-to-ingest-transform-and-analyze-google-analytics-data-using-the-aws-dataops-development-kit-epics"></a>

### 環境の準備
<a name="prepare-the-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ソースコードを複製します。 | ソースコードのクローンを作成するには、次のコマンドを実行します。<pre>git clone https://github.com/aws-samples/aws-ddk-examples.git</pre> | DevOps エンジニア | 
| 仮想環境を作成します。 | ソースコードディレクトリに移動し、以下のコマンドを実行して仮想環境を作成します。<pre>cd google-analytics-data-using-appflow/python && python3 -m venv .venv</pre> | DevOps エンジニア | 
| 依存関係をインストールします。 | 次のコマンドを実行して、仮想環境を有効にし、依存関係をインストールします。<pre>source .venv/bin/activate && pip install -r requirements.txt</pre> | DevOps エンジニア | 

### データパイプラインを使用するアプリケーションをデプロイ
<a name="deploy-the-application-that-uses-your-data-pipeline"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
|  環境を開始する。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/build-a-data-pipeline-to-ingest-transform-and-analyze-google-analytics-data-using-the-aws-dataops-development-kit.html) | DevOps エンジニア | 
| データをデプロイします。 | データパイプラインをデプロイするには、`cdk deploy --profile [AWS_PROFILE]` コマンドを実行します。 | DevOps エンジニア | 

### デプロイをテストする
<a name="test-the-deployment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| スタックのステータスを検証します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/build-a-data-pipeline-to-ingest-transform-and-analyze-google-analytics-data-using-the-aws-dataops-development-kit.html) | DevOps エンジニア | 

## トラブルシューティング
<a name="build-a-data-pipeline-to-ingest-transform-and-analyze-google-analytics-data-using-the-aws-dataops-development-kit-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| `AWS::AppFlow::Flow` リソースの作成中にデプロイが失敗し、次のエラーが表示されます。`Connector Profile with name ga-connection does not exist` | Google アナリティクス用の Amazon AppFlow コネクタを作成して `ga-connection` 名前を付けたことを確認します。手順については、Amazon AppFlow ドキュメントの「[Google アナリティクス](https://docs.aws.amazon.com/appflow/latest/userguide/google-analytics.html)」を参照してください。 | 

## 関連リソース
<a name="build-a-data-pipeline-to-ingest-transform-and-analyze-google-analytics-data-using-the-aws-dataops-development-kit-resources"></a>
+ [AWS DataOps 開発キット (AWS DDK)](https://github.com/awslabs/aws-ddk) (GitHub)
+ [AWS DDK の例](https://github.com/aws-samples/aws-ddk-examples) (GitHub)

## 追加情報
<a name="build-a-data-pipeline-to-ingest-transform-and-analyze-google-analytics-data-using-the-aws-dataops-development-kit-additional"></a>

AWS DDK データパイプラインは、1 つ以上のステージで構成されます。次のコード例では、`AppFlowIngestionStage` を使用して Google アナリティクスからデータを取り込み、`SqsToLambdaStage` を使用してデータ変換を処理し、`AthenaSQLStage` を使用して Athena クエリを実行します。

まず、次のコード例に示すように、データ変換ステージと取り込みステージを作成します。

```
        appflow_stage = AppFlowIngestionStage(
            self,
            id="appflow-stage",
            flow_name=flow.flow_name,
        )
        sqs_lambda_stage = SqsToLambdaStage(
            self,
            id="lambda-stage",
            lambda_function_props={
                "code": Code.from_asset("./ddk_app/lambda_handlers"),
                "handler": "handler.lambda_handler",
                "layers": [
                    LayerVersion.from_layer_version_arn(
                        self,
                        id="layer",
                        layer_version_arn=f"arn:aws:lambda:{self.region}:336392948345:layer:AWSDataWrangler-Python39:1",
                    )
                ],
                "runtime": Runtime.PYTHON_3_9,
            },
        )
        # Grant lambda function S3 read & write permissions
        bucket.grant_read_write(sqs_lambda_stage.function)
        # Grant Glue database & table permissions
        sqs_lambda_stage.function.add_to_role_policy(
            self._get_glue_db_iam_policy(database_name=database.database_name)
        )
        athena_stage = AthenaSQLStage(
            self,
            id="athena-sql",
            query_string=[
                (
                    "SELECT year, month, day, device, count(user_count) as cnt "
                    f"FROM {database.database_name}.ga_sample "
                    "GROUP BY year, month, day, device "
                    "ORDER BY cnt DESC "
                    "LIMIT 10; "
                )
            ],
            output_location=Location(
                bucket_name=bucket.bucket_name, object_key="query-results/"
            ),
            additional_role_policy_statements=[
                self._get_glue_db_iam_policy(database_name=database.database_name)
            ],
        )
```

次に、次のコード例に示すように、`DataPipeline` コンストラクトを使用して、EventBridge ルールを使用してステージを「接続」します。

```
        (
            DataPipeline(self, id="ingestion-pipeline")
            .add_stage(
                stage=appflow_stage,
                override_rule=Rule(
                    self,
                    "schedule-rule",
                    schedule=Schedule.rate(Duration.hours(1)),
                    targets=appflow_stage.targets,
                ),
            )
            .add_stage(
                stage=sqs_lambda_stage,
                # By default, AppFlowIngestionStage stage emits an event after the flow run finishes successfully
                # Override rule below changes that behavior to call the the stage when data lands in the bucket instead
                override_rule=Rule(
                    self,
                    "s3-object-created-rule",
                    event_pattern=EventPattern(
                        source=["aws.s3"],
                        detail={
                            "bucket": {"name": [bucket.bucket_name]},
                            "object": {"key": [{"prefix": "ga-data"}]},
                        },
                        detail_type=["Object Created"],
                    ),
                    targets=sqs_lambda_stage.targets,
                ),
            )
            .add_stage(stage=athena_stage)
        )
```

その他のコード例については、GitHub [Analyzing Google Analytics data with Amazon AppFlow、Amazon Athena、 AWS DataOps Development Kit](https://github.com/aws-samples/aws-ddk-examples/tree/main/google-analytics-data-using-appflow/python) リポジトリを参照してください。

# Amazon Kinesis Video Streamsと AWS Fargate を使用してビデオ処理パイプラインを構築する
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate"></a>

*Piotr Chotkowski、Pushparaju Thangavel (Amazon Web Services)*

## 概要
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-summary"></a>

[Amazon Kinesis Video Streams](https://aws.amazon.com/kinesis/video-streams/) と [AWS Fargate](https://aws.amazon.com/fargate) を使用してビデオストリームからフレームを抽出し、さらに処理できるように [Amazon Simple Storage Service (Amazon S3](https://aws.amazon.com/s3/)) にイメージファイルとして保存します。 

このパターンは Java Maven プロジェクト形式でサンプルアプリケーションを提供します。このアプリケーションは、[AWS Cloud Development Kit](https://aws.amazon.com/cdk/) (AWS CDK) を使用して AWS インフラストラクチャを定義します。フレーム処理ロジックとインフラストラクチャ定義は Java プログラミング言語で記述されています。このサンプルアプリケーションを、独自のリアルタイムビデオ処理パイプラインを開発したり、機械学習パイプラインのビデオ前処理ステップを構築するための基礎として使用できます。 

## 前提条件と制限事項
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ Java SE Development Kit (JDK) 11 をインストール済み
+ [Apache Maven](https://maven.apache.org/) をインストール済み
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) をインストール済み
+ [AWS コマンドラインインターフェイス (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) バージョン 2
+ [Docker](https://docs.docker.com/get-docker/) (AWS Fargate タスク定義で使用する Docker イメージを構築するために必要) をインストール済み

**制限事項**

このパターンは、概念実証として、または今後の開発の基礎となることを目的としています。本稼働環境では、現行の形式を使用しないでください。

**製品バージョン**
+ このパターンは AWS CDK バージョン 1.77.0 でテストされました ([AWS CDK バージョン](https://docs.aws.amazon.com/cdk/api/latest/versions.html)を参照)
+ JDK 11
+ AWS CLI バージョン 2

## アーキテクチャ
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-architecture"></a>

**ターゲットテクノロジースタック**
+ Amazon Kinesis Video Streams
+ AWS Fargate タスク
+ Amazon Simple Queue Service (Amazon SQS) キュー
+ Amazon S3 バケット

**ターゲットアーキテクチャ**

![\[Kinesis Video Streams と Fargate を使用してビデオ処理パイプラインを構築するためのアーキテクチャ。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/9d1442c2-f3ee-47fd-8cce-90d9206ce4d4/images/a60e585f-27be-4dd6-897b-c38adf1d283f.png)


ユーザーは Kinesis ビデオストリームを作成し、動画をアップロードして、入力 Kinesis ビデオストリームと出力 S3 バケットの詳細を含む JSON メッセージを SQS キューに送信します。コンテナ内でメインアプリケーションを実行している AWS Fargate は、SQS キューからメッセージを取得し、フレームの抽出を開始します。各フレームはイメージファイルに保存され、ターゲット S3 バケットに格納されます。

**自動化とスケール**

サンプルアプリケーションは、単一の AWS リージョン内で水平方向と垂直方向の両方にスケーリングできます。水平スケーリングは、SQS キューから読み取る、デプロイされた AWS Fargate タスクの数を増やすことで実現できます。垂直スケーリングは、アプリケーションのフレーム分割スレッドと画像公開スレッドの数を増やすことで実現できます。これらの設定は、AWS CDK の [QueueProcessingFarGateService](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-ecs-patterns.QueueProcessingFargateService.html) リソースの定義で環境変数としてアプリケーションに渡されます。AWS CDK スタックのデプロイの性質上、このアプリケーションは追加作業なしで複数の AWS リージョンとアカウントにデプロイできます。

## ツール
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-tools"></a>

**ツール**
+ [AWS CDK](https://aws.amazon.com/cdk/) は、TypeScript、JavaScript、Python、Java、C\$1/.Net などのプログラミング言語を使用してクラウドインフラストラクチャとリソースを定義するためのソフトウェア開発フレームワークです。
+ [Amazon Kinesis Video Streams](https://aws.amazon.com/kinesis/video-streams/) は、デバイスから AWS クラウドへの動画のライブストリーミングに使用したり、あるいはリアルタイムの動画処理やバッチ指向の動画分析のためのアプリケーションを構築できる完全管理の AWS のサービスです。
+ [AWS Fargate](https://aws.amazon.com/fargate) は、コンテナ用のサーバーレスコンピューティングエンジンです。Fargate を使用すると、サーバーのプロビジョニングと管理が不必要になるため、アプリケーションの開発への集中が容易になります。
+ [Amazon S3](https://aws.amazon.com/s3/) は、スケーラビリティ、データ可用性、セキュリティ、パフォーマンスを提供するオブジェクトストレージサービスです。
+ [Amazon SQS](https://aws.amazon.com/sqs/) は、完全マネージド型のメッセージキューイングサービスであり、マイクロサービス、分散システム、およびサーバーレスアプリケーションのデカップリングとスケーリングを容易にします。

**コード**
+ サンプルアプリケーションプロジェクト (`frame-splitter-code.zip`) の.zip ファイルが添付されます。　

## エピック
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-epics"></a>

### インフラストラクチャをデプロイする
<a name="deploy-the-infrastructure"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Docker デーモンを開始します。 | ローカルシステムで Docker デーモンを開始します。AWS CDK は Docker を使用して AWS Fargate タスクの使用イメージを構築します。次の手順に進む前に Docker を実行する必要があります。 | 開発者、DevOps エンジニア | 
| プロジェクトをビルドします。 | `frame-splitter-code` サンプルアプリケーション (添付) をダウンロードし、ローカルマシンのフォルダに抽出します。インフラストラクチャをデプロイする前に、[Java Maven](https://maven.apache.org/) プロジェクトをビルドする必要があります。コマンドプロンプトで、プロジェクトのルートディレクトリに移動し、次のコマンドを実行してプロジェクトをビルドします。 <pre>mvn clean install</pre> | 開発者、DevOps エンジニア | 
| AWS CDK をブートストラップします。 | (AWS CDK を初めて使用するユーザーのみ) AWS CDK を初めて使用する場合は、AWS CLI コマンドを実行して環境をブートストラップする必要があります。<pre>cdk bootstrap --profile "$AWS_PROFILE_NAME" </pre>`$AWS_PROFILE_NAME` は、AWS 認証情報から AWS プロファイルの名前を保持します。または、このパラメータを削除してデフォルトのプロファイルを使用します。詳細については、「[AWS CDK ドキュメント](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)」を参照してください。 | 開発者、DevOps エンジニア | 
| AWS CDK スタックをデプロイします。 | このステップでは、必要なインフラストラクチャリソース (SQS キュー、S3 バケット、AWS Fargate タスク定義) を AWS アカウントで作成し、AWS Fargate タスクに必要な Docker イメージを構築して、アプリケーションをデプロイします。　 コマンドプロンプトで、プロジェクトのルートディレクトリに移動し、次のコマンドを実行します。<pre>cdk deploy --profile "$AWS_PROFILE_NAME" --all </pre>`$AWS_PROFILE_NAME` は、AWS 認証情報から AWS プロファイルの名前を保持します。または、このパラメータを削除してデフォルトのプロファイルを使用します。デプロイを確認します。CDK デプロイ出力の **QueueUrl** と **バケット** の値を書き留めておきます。これらは後のステップで必要になります。AWS CDK はアセットを作成し、AWS アカウントにアップロードして、すべてのインフラストラクチャリソースを作成します。リソースの作成プロセスは、[AWS CloudFormation コンソールで確認できます](https://console.aws.amazon.com/cloudformation/)。詳細については、[AWS CloudFormation のドキュメント](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)と [AWS CDK のドキュメント](https://docs.aws.amazon.com/cdk/latest/guide/hello_world.html#hello_world_tutorial_deploy) を参照してください。 | 開発者、DevOps エンジニア | 
| ビデオストリームを作成します。 | このステップでは、ビデオ処理の入力ストリームとして機能する Kinesis ビデオストリームを作成します。AWS CLI がインストールされ、設定されていることを確認します。AWS CLI で、以下の手順を実行します。<pre>aws kinesisvideo --profile "$AWS_PROFILE_NAME" create-stream --stream-name "$STREAM_NAME" --data-retention-in-hours "24" </pre>`$AWS_PROFILE_NAME` は AWS 認証情報の AWS 構成ファイルの名前を保存します(または、デフォルトの構成ファイルを使用するには、このパラメータを削除します)。`$STREAM_NAME` は任意の有効なストリーム名です。 代わりに、Kinesis コンソールを使用して「[Kinesis ビデオストリームのドキュメント](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/gs-createstream.html#gs-createstream-console)」に記載されている手順に従ってKinesis Video Streams を作成することもできます。作成したストリームの AWS リソースネーム (ARN) を書き留めてください。後で必要になります。 | 開発者、DevOps エンジニア | 

### 例の実行
<a name="run-an-example"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 動画をストリームにアップロードします。 | サンプル `frame-splitter-code` アプリケーションのプロジェクトフォルダで、`src/test/java/amazon/awscdk/examples/splitter` フォルダにある `ProcessingTaskTest.java` ファイルを開きます。`profileName`** **および `streamName`** **変数を、前のステップで使用した値に置き換えます。前のステップで作成した Kinesis ビデオストリームにサンプルビデオをアップロードするには、以下の手順を実行します。 <pre>amazon.awscdk.examples.splitter.ProcessingTaskTest#testExample test</pre>代わりに、「[Kinesis ビデオストリームのドキュメント](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-sdk.html)」に記載されている方法のいずれかを使用して動画をアップロードすることもできます。 | 開発者、DevOps エンジニア | 
| ビデオ処理を開始します。 | これで、Kinesis ビデオストリームへのビデオのアップロードが完了したので、処理を開始できます。処理ロジックを開始するには、AWS CDK がデプロイ中に作成した SQS キューに詳細を含むメッセージを送信する必要があります。　 AWS CLI を使用してメッセージを送信するには、以下の手順を実行してください。<pre>aws sqs --profile "$AWS_PROFILE_NAME" send-message --queue-url QUEUE_URL --message-body MESSAGE </pre>ここで、`$AWS_PROFILE_NAME` は AWS 認証情報から AWS 構成ファイルの名前を保存します (デフォルトのプロファイルを使用するには、このパラメータを削除します)。`QUEUE_URL` は AWS CDK 出力の **QueueUrl** 値、`MESSAGE` は次の形式の JSON 文字列です： <pre>{ "streamARN": "STREAM_ARN", "bucket": "BUCKET_NAME", "s3Directory": "test-output" }</pre>ここで、`STREAM_ARN` は前の手順で作成したビデオストリームの ARN、`BUCKET_NAME` は AWS CDK 出力の**バケット**値です。 このメッセージを送信すると、動画処理が開始されます。または、「[Amazon SQS ドキュメント](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-using-send-messages.html)」で説明されているように、Amazon SQS コンソールを使用してメッセージを送信することもできます。 | 開発者、DevOps エンジニア | 
| ビデオフレームの画像を表示します。 | 結果の画像は S3 出力バケット `s3://BUCKET_NAME/test-output` で確認できます。ここで、`BUCKET_NAME` は AWS CDK 出力からの**バケット**値です。 | 開発者、DevOps エンジニア | 

## 関連リソース
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-resources"></a>
+ [AWS SDK ドキュメント](https://docs.aws.amazon.com/cdk/latest/guide/home.html)
+ [「AWS CDK API リファレンス」](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-construct-library.html)
+ [「AWS CDK 入門ワークショップ」](https://cdkworkshop.com/)
+ [「Amazon Kinesis Video Streams のドキュメント」](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/what-is-kinesis-video.html)
+ [例: SageMaker を使用してビデオストリーム内のオブジェクトを識別する](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-sagemaker.html)
+ [例: Kinesis Video Streams フラグメントの解析およびレンダリング](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-renderer.html)
+ 「[Amazon Kinesis Video Streams と Amazon SageMaker を使用してライブビデオをスケーリングし、リアルタイムで分析する](https://aws.amazon.com/blogs/machine-learning/analyze-live-video-at-scale-in-real-time-using-amazon-kinesis-video-streams-and-amazon-sagemaker/)」 (AWS 機械学習 ブログ記事)
+ 「[AWS Fargate のご利用開始にあたって](https://aws.amazon.com/fargate/getting-started/)」

## 追加情報
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-additional"></a>

**IDE の選択**

お気に入りの Java IDE を使用してこのプロジェクトを構築し、探索することをお勧めします。 

**クリーンアップ**

この例を実行した後、追加の AWS インフラストラクチャにコストが発生しないように、デプロイしたリソースをすべて削除してください。 

インフラストラクチャとビデオストリームを削除するには、AWS CLI で次の 2 つのコマンドを使用します。

```
cdk destroy --profile "$AWS_PROFILE_NAME" --all
```

```
aws kinesisvideo --profile "$AWS_PROFILE_NAME" delete-stream --stream-arn "$STREAM_ARN"
```

代わりに、AWS CloudFormation コンソールを使用して AWS CloudFormation スタックを削除し、Kinesis コンソールを使用して Kinesis ビデオストリームを削除することで、リソースを手動で削除することもできます。ただし、`cdk destroy` は出力 S3 バケットや Amazon Elastic Container Registry (Amazon ECR) リポジトリ内のイメージを削除しないことに注意してください (`aws-cdk/assets`)。これらは手動で削除してください。

## アタッチメント
<a name="attachments-9d1442c2-f3ee-47fd-8cce-90d9206ce4d4"></a>

このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「[attachment.zip](samples/p-attach/9d1442c2-f3ee-47fd-8cce-90d9206ce4d4/attachments/attachment.zip)」

# AWS Glue を使用して Amazon S3 から Amazon Redshift にデータを段階的にロードする ETL サービスパイプラインを構築
<a name="build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue"></a>

*Rohan Jamadagni、Arunabha Datta (Amazon Web Services)*

## 概要
<a name="build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue-summary"></a>

このパターンは、Amazon Simple Storage Service (Amazon S3) を設定してデータレイクのパフォーマンスを最適化し、AWS Glue を使用して差分データ変更を Amazon S3 から Amazon Redshift に読み込み、抽出、変換、ロード (ETL) オペレーションを実行する方法に関するガイダンスを提供します。 

Amazon S3 のソースファイルには、カンマ区切り値 (CSV)、XML、JSON ファイルなど、さまざまな形式を使用できます。このパターンは、AWS Glue を使用してソースファイルを Apache Parquet のようなコストとパフォーマンスが最適化された形式に変換する方法を示しています。Amazon Athena と Amazon Redshift Spectrum からパーケットファイルを直接クエリできます。Parquet ファイルを Amazon Redshift にロードしたり、集約したり、集約されたデータをコンシューマーと共有したり、Amazon Quick Sight を使用してデータを視覚化したりすることもできます。

## 前提条件と制限
<a name="build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント。
+ 適切な権限を持ち、CSV、XML、または JSON ファイルを含む S3 ソースバケット。

前提
+ CSV、XML、または JSON ソースファイルはすでに Amazon S3 に読み込まれており、AWS Glue と Amazon Redshift が設定されているアカウントからアクセスできます。
+ 「[Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-S3.html)」のドキュメントで説明されているように、ファイルのロード、ファイルの分割、圧縮、マニフェストの使用に関するベストプラクティスに従います。
+ ソースファイル構造は変更されません。
+ ソースシステムは、Amazon S3 で定義されたフォルダ構造に従って Amazon S3 にデータを取り込むことができます。
+ Amazon Redshift クラスターは 1 つのアベイラビリティーゾーンにまたがっています。(AWS Lambda、AWS Glue、Amazon Athena はサーバーレスであるため、このアーキテクチャは適切です)。高可用性を実現するため、クラスターのスナップショットは定期的に作成されます。

**制限事項**
+ ファイル形式は、「[現在 AWS Glue でサポートされている形式に限定されています](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format.html)」。
+ リアルタイムのダウンストリームレポートはサポートされていません。

## アーキテクチャ
<a name="build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue-architecture"></a>

**ソーステクノロジースタック**
+ CSV、XML、または JSON ファイルを含む S3 バケット

**ターゲットテクノロジースタック**
+ S3 データレイク (パーティション分割された Parquet ファイルストレージを使用)
+ Amazon Redshift

**ターゲットアーキテクチャ**

![\[AWS Glue を使用して Amazon S3 から Amazon Redshift に増分変更をロードするためのアーキテクチャ。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/105b58ec-56c1-464a-8e69-f625360caa14/images/626aa365-e6e6-4874-a873-1c71adbe5306.png)


 

データフロー

![\[AWS Glue を使用して Amazon S3 から Amazon Redshift に増分変更をロードするためのデータフロー。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/105b58ec-56c1-464a-8e69-f625360caa14/images/29569e48-9f2d-4f48-bc59-1f33949d01ca.png)


## ツール
<a name="build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue-tools"></a>
+ 「[Amazon S3](https://aws.amazon.com/s3/)」 – Amazon Simple Storage Service (Amazon S3) では、拡張性の高いオブジェクトストレージサービスです。Amazon S3 は、ウェブサイト、モバイルアプリケーション、バックアップ、データレイクなど、幅広いストレージソリューションに使用できます。
+ 「[AWS Lambda](https://aws.amazon.com/lambda/)」 – AWS Lambda を使用して、サーバーをプロビジョニングまたは管理しなくてもコードを実行できます。AWS Lambda はイベント駆動型サービスです。他の AWS サービスから自動的に開始するようにコードを設定できます。
+ 「[Amazon Redshift](https://aws.amazon.com/redshift/)」 – Amazon Redshift はフルマネージド型で、ペタバイト規模のデータウェアハウスサービスです。Amazon Redshift では、標準 SQL を使用して、データウェアハウスとデータレイク全体でペタバイトの構造化データおよび半構造化データをクエリできます。
+ 「[AWS Glue](https://aws.amazon.com/glue/)」 — AWS Glue は、分析のためにデータを簡単に準備してロードできるフルマネージドのETLサービスです。AWS Glue がデータを検出し、関連するメタデータ (テーブル定義やスキーマなど) を AWS Glue データカタログに保存します。カタログ化されたデータは、すぐに検索およびクエリが可能になり、ETL で使用できるようになります。
+ 「[AWS Secrets Manager](https://aws.amazon.com/secrets-manager/)」 — AWS Secrets Manager は、アプリケーションやサービスへのアクセスに必要なシークレットの保護と一元管理を容易にします。このサービスでは、データベース認証情報、API キー、その他のシークレットが保存され、機密情報をプレーンテキスト形式でハードコーディングする必要がなくなります。Secrets Manager は、セキュリティとコンプライアンスのニーズを満たすためのキーローテーションも提供しています。Amazon Redshift、Amazon Relational Database Service (Amazon RDS)、および Amazon DocumentDB の統合が組み込まれています。Secrets Manager コンソール、コマンドラインインターフェイス (CLI)、または Secrets Manager API と SDK を使用して、シークレットを保存して一元管理できます。
+ 「[Amazon Athena](https://aws.amazon.com/athena/)」 – Amazon Athena は、Amazon S3 に保存されたデータを簡単に分析できるインタラクティブなクエリサービスです。Athena はサーバーレスで AWS Glue と統合されているため、AWS Glue を使用してカタログ化されたデータを直接クエリできます。Athena は、インタラクティブなクエリパフォーマンスを実現するように伸縮自在にスケールされています。

## エピック
<a name="build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue-epics"></a>

### S3 バケットとフォルダ構造を作成します。
<a name="create-the-s3-buckets-and-folder-structure"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ソースシステムのデータ構造と属性を分析する。 | Amazon S3 データレイクに寄与する各データソースに対してこのタスクを実行します。 | データエンジニア | 
| パーティションとアクセス戦略を定義します。 | この戦略は、データキャプチャの頻度、差分処理、消費ニーズに基づいて策定する必要があります。S3 バケットが一般に公開されていないこと、アクセスが特定のサービスロールベースのポリシーのみによって制御されていることを確認してください。詳細については、[Amazon S3 ドキュメント](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/using-folders.html)を参照してください。 | データエンジニア | 
| データソースタイプごとに個別の S3 バケットを作成し、処理された (Parquet) データ用にソースごとに個別の S3 バケットを作成します。 | ソースごとに個別のバケットを作成し、ソースシステムのデータインジェスト頻度に基づいたフォルダ構造を作成します (例:`s3://source-system-name/date/hour`)。処理された (Parquet 形式に変換された) ファイルについては、同様の構造 (例:`s3://source-processed-bucket/date/hour`) を作成します。S3 バケットの作成について詳しくは、「[Amazon S3 ドキュメント](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)」 を参照してください。 | データエンジニア | 

### Amazon Redshift でデータウェアハウスを作成
<a name="create-a-data-warehouse-in-amazon-redshift"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 適切なパラメータグループとメンテナンスおよびバックアップ戦略を使用して Amazon Redshift クラスターを起動します。 | Amazon Redshift クラスターを作成するときに、Secrets Manager のデータベースシークレットを管理者ユーザーの認証情報に使用します。Amazon Redshift クラスターの作成とサイジングについては、「[Amazon Redshift ドキュメント](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/event-publishing-redshift-cluster.html)」とクラウドデータウェアハウスの「[サイジング](https://d1.awsstatic.com/whitepapers/Size-Cloud-Data-Warehouse-on-AWS.pdf)」ホワイトペーパーを参照してください。 | データエンジニア | 
| IAM サービスロールを作成して Amazon Redshift クラスターにアタッチします。 | AWS Identity and Access Management (IAM) サービスロールは、Secrets Manager とソース S3 バケットへのアクセスを保証します。詳細については、「[承認](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html)」と「[ロールの追加](https://docs.aws.amazon.com/redshift/latest/dg/c-getting-started-using-spectrum-add-role.html)」に関するAWS ドキュメントを参照してください。 | データエンジニア | 
| データベーススキーマを作成します。 | テーブル設計の Amazon Redshift ベストプラクティス ユースケースに基づいて、適切なソートキーと分散キー、および可能な限り最適な圧縮エンコーディングを選択します。ベストプラクティスについては、「[AWS のドキュメンテーション](https://docs.aws.amazon.com/redshift/latest/dg/c_designing-tables-best-practices.html)」を参照ください。 | データエンジニア | 
| ワークロード管理の設定 | 要件に応じて、ワークロード管理 (WLM) キュー、ショートクエリアクセラレーション (SQA)、または同時実行スケーリングを設定します。詳細については、Amazon Redshift ドキュメントの「[ワークロード管理の実装](https://docs.aws.amazon.com/redshift/latest/dg/cm-c-implementing-workload-management.html)」を参照してください。 | データエンジニア | 

### Secrets Manager でのシークレットの作成
<a name="create-a-secret-in-secrets-manager"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Amazon Redshift サインイン認証情報をSecrets Manager に保存するための新しいシークレットを作成します。 | このシークレットには、管理者ユーザーだけでなく、個々のデータベースサービスユーザーの認証情報も保存されます。手順については、「[Secrets Manager のドキュメント](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html)」を参照してください。シークレットタイプとして **[Amazon Redshift クラスター]** を選択します。さらに、**シークレットローテーション**ページでローテーションを有効にします。これにより、Amazon Redshift クラスターに適切なユーザーが作成され、定義された間隔でキーシークレットがローテーションされます。 | データエンジニア | 
| Secrets Manager へのアクセスを制限する IAM ポリシーを作成します。 | Secrets Manager へのアクセスを Amazon Redshift 管理者と AWS Glue のみに制限します。 | データエンジニア | 

### AWS Glue の設定
<a name="configure-aws-glue"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS Glue データカタログで、Amazon Redshift への接続を追加します。 | 手順については、「[AWS Glue のドキュメント](https://docs.aws.amazon.com/glue/latest/dg/console-connections.html)」を参照してください。 | データエンジニア | 
| Secrets Manager、Amazon Redshift、S3 バケットにアクセスするための AWS Glue の IAM サービスロールを作成してアタッチします。 | 詳細については、「[AWS Glue のドキュメント](https://docs.aws.amazon.com/glue/latest/dg/create-service-policy.html)」を参照してください。 | データエンジニア | 
| ソースの AWS Glue データカタログを定義します。 | このステップでは、AWS Glue データカタログにデータベースと必要なテーブルを作成します。クローラーを使用して AWS Glue データベースのテーブルをカタログ化することも、Amazon Athena 外部テーブルとして定義することもできます。AWS Glue データカタログから Athena で定義されている外部テーブルにアクセスすることもできます。Athena での「[データカタログの定義](https://docs.aws.amazon.com/glue/latest/dg/populate-data-catalog.html)」と「[外部テーブルの作成の詳細](https://docs.aws.amazon.com/athena/latest/ug/creating-tables.html)」については、AWS ドキュメントを参照してください。 | データエンジニア | 
| ソースデータを処理する AWS Glue ジョブを作成します。 | AWS Glue ジョブは Python シェルでも PySpark でもかまいません。これにより、ソースデータファイルを標準化、重複排除、およびクレンジングできます。パフォーマンスを最適化し、S3 ソースバケット全体をクエリする必要がないようにするには、AWS Glue ジョブのプッシュダウン述語として S3 バケットを日付別にパーティション化し、年、月、日、時間ごとに分割します。詳細については、「[AWS Glue のドキュメント](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html)」を参照してください。処理され変換されたデータを、処理済みの S3 バケットパーティションに Parquet 形式でロードします。Athena からパーケットファイルをクエリできます。 | データエンジニア | 
| Amazon Redshift にデータをロードする AWS Glue ジョブを作成します。 | AWS Glue ジョブは Python シェルでも、データを更新して完全に更新することでデータをロードする PySpark でもかまいません。詳細については、[AWS Glue のドキュメント](https://docs.aws.amazon.com/glue/latest/dg/author-job.html)と「*追加情報*」セクションを参照してください。 | データエンジニア | 
| (オプション) 必要に応じてトリガーを使用して AWS Glue ジョブをスケジュールします。 | 増分データロードは主に、AWS Lambda 関数が AWS Glue ジョブを呼び出す Amazon S3 イベントによって駆動されます。イベントベースのスケジューリングではなく、時間ベースを必要とするデータロードには、AWS Glue のトリガーベースのスケジューリングを使用してください。 | データエンジニア | 

### Lambda 関数を作成する
<a name="create-a-lambda-function"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| S3 バケットと AWS Glue ジョブにアクセスするための AWS Lambda 用の IAM サービスにリンクされたロールを作成してアタッチします。 | Amazon S3 オブジェクトとバケットを読み取るポリシーと、AWS Glue API にアクセスして AWS Glue ジョブを開始するポリシーを含む AWS Lambda 用の IAM サービスにリンクされたロールを作成します。詳細については、「[ナレッジセンター](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-execution-role-s3-bucket/)」 を参照してください。 | データエンジニア | 
| 定義された Amazon S3 イベントに基づいて AWS Glue ジョブを実行する Lambda 関数を作成します。 | Lambda 関数は Amazon S3 マニフェストファイルの作成によって開始する必要があります。Lambda 関数は Amazon S3 フォルダの場所 (例えば、ソース\$1バケット/年/月/日付/時間) をパラメータとして AWS Glue ジョブに渡す必要があります。AWS Glue ジョブは、このパラメータをプッシュダウン述語として使用して、ファイルアクセスとジョブ処理パフォーマンスを最適化します。詳細については、「[AWS Glue のドキュメント](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-calling.html)」を参照してください。 | データエンジニア | 
| Amazon S3 PUT オブジェクトイベントを作成してオブジェクトの作成を検出し、それぞれの Lambda 関数を呼び出します。 | Amazon S3 PUT オブジェクトイベントは、マニフェストファイルの作成によってのみ開始する必要があります。マニフェストファイルは Lambda 関数と AWS Glue ジョブの同時実行を制御し、S3 ソースバケットの特定のパーティションに到着する個々のファイルを処理する代わりに、ロードをバッチとして処理します。詳細については、「[Lambda ドキュメント](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html)」を参照してください。 | データエンジニア | 

## 関連リソース
<a name="build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue-resources"></a>
+ 「[Amazon S3 ドキュメント](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html)」
+ 「[AWS Glue ドキュメンテーション](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)」
+ [Amazon Redshift ドキュメント](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html)
+ [AWS Lambda](https://aws.amazon.com/lambda/)
+ [Amazon Athena](https://aws.amazon.com/athena/)
+ [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/)

## 追加情報
<a name="build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue-additional"></a>

アップサートと完全更新の詳細なアプローチ

**アップサート**: ビジネスユースケースによっては、履歴の集計が必要なデータセットを対象としています。ビジネスニーズに基づいて、「[新しいデータの更新と挿入](https://docs.aws.amazon.com/redshift/latest/dg/t_updating-inserting-using-staging-tables-.html)」(Amazon Redshift ドキュメント)で説明されているアプローチのいずれかに従ってください。

**完全更新**: これは、履歴集計を必要としない小規模なデータセットを対象としています。以下のいずれかの方法に従ってください。

1. Amazon Redshift テーブルを切り捨てます。

1. ステージングエリアから現在のパーティションをロードします。

または

1. 現在のパーティションデータを含む一時テーブルを作成します。

1. ターゲットのAmazon Redshift テーブルをドロップします。

1. テンポラリテーブルの名前をターゲットテーブルに変更します。

# Amazon DataZone を使用してエンタープライズデータメッシュを構築する AWS CDK AWS CloudFormation
<a name="build-enterprise-data-mesh-amazon-data-zone"></a>

*Dhrubajyoti Mukherjee、Ravi Kumar、Weizhou Sun、Adjoa Taylor (Amazon Web Services)*

## 概要
<a name="build-enterprise-data-mesh-amazon-data-zone-summary"></a>

Amazon Web Services (AWS) のお客様は、イノベーションを加速し、企業のビジネス価値を推進するための鍵がデータであることを理解しています。この膨大なデータを管理するには、データメッシュなどの分散アーキテクチャを採用します。データメッシュアーキテクチャはプロダクト思考を促進します。これは、お客様、目標、市場を考慮に入れる考え方です。データメッシュは、データへの高速で安全なアクセスを提供するフェデレーテッドガバナンスモデルを確立するのにも役立ちます。

「[Strategies for building a data mesh-based enterprise solution on AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-data-mesh/introduction.html)」では、Data Mesh Strategy Framework を使用して、組織のデータメッシュ戦略を策定および実装する方法について説明します。Data Mesh Strategy Framework を使用すると、チーム編成とそのやり取りを最適化して、データメッシュジャーニーを加速できます。

このドキュメントでは、[Amazon DataZone](https://docs.aws.amazon.com/datazone/latest/userguide/what-is-datazone.html) でエンタープライズデータメッシュを構築する方法に関するガイダンスを提供します。Amazon DataZone は、、オンプレミス、およびサードパーティーのソースに保存されたデータをカタログ化、検出 AWS、共有、管理するためのデータ管理サービスです。このパターンには、 AWS Cloud Development Kit (AWS CDK) と を使用してデータメッシュベースのデータソリューションインフラストラクチャをデプロイするのに役立つコードアーティファクトが含まれています AWS CloudFormation。このパターンは、クラウドアーキテクトと DevOps エンジニアを対象としています。

このパターンの目的とソリューションの範囲については、「[追加情報](#build-enterprise-data-mesh-amazon-data-zone-additional)」セクションを参照してください。

## 前提条件と制限
<a name="build-enterprise-data-mesh-amazon-data-zone-prereqs"></a>

**前提条件**
+ 少なくとも 2 つのアクティブな AWS アカウント: 1 つは中央ガバナンスアカウント用、もう 1 つはメンバーアカウント用
+ AWS 開発環境の中央ガバナンスアカウントの管理者認証情報
+ AWS Command Line Interface コマンドライン AWS のサービス から を管理するために[インストール](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)された (AWS CLI)
+  AWS CDK アプリケーションを管理するために[インストール](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)された Node.js と Node Package Manager (npm)
+ AWS CDK npm を使用して開発環境にグローバルに[インストール](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install)され、 AWS CDK アプリケーションを合成してデプロイするツールキット

  ```
  npm install -g aws-cdk
  ```
+ 開発環境にインストールされた Python バージョン 3.12
+ 開発環境にインストールされるか、または npm コンパイラを使用してグローバルにインストールされた TypeScript

  ```
  npm install -g typescript
  ```
+ 開発環境にインストールされた Docker
+ ソリューションのソースコードを維持するための、Git などのバージョン管理システム (推奨)
+ Python と TypeScript をサポートする統合開発環境 (IDE) またはテキストエディタ (強く推奨)

**制限事項**
+ このソリューションは、Linux または macOS を実行しているマシンでのみテストされています。
+ 現在のバージョンでは、ソリューションは AWS IAM アイデンティティセンター デフォルトで Amazon DataZone と の統合をサポートしていません。ただし、この統合をサポートするように設定できます。

**製品バージョン**
+ Python バージョン 3.12

## アーキテクチャ
<a name="build-enterprise-data-mesh-amazon-data-zone-architecture"></a>

次の図は、データメッシュリファレンスアーキテクチャを示しています。このアーキテクチャは Amazon DataZone に基づいており、Amazon Simple Storage Service (Amazon S3) と をデータソース AWS Glue Data Catalog として使用します。データメッシュの実装で Amazon DataZone AWS のサービス で使用する は、組織の要件によって異なる場合があります。

![\[メンバーアカウントと中央ガバナンスアカウントの 5 ステップワークフロー。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/79056dd9-e669-4302-afb8-21e3e0e8a136/images/eacbffca-4f25-405a-a7c8-f89d0fee5682.png)


1. プロデューサーアカウントでは、raw データは現在の形式での消費に適しているか、 を使用して消費のために変換されます AWS Glue。データの技術メタデータは Amazon S3 に保存され、 AWS Glue データクローラーを使用して評価されます。データ品質は、[AWS Glue Data Quality](https://docs.aws.amazon.com/glue/latest/dg/glue-data-quality.html) を使用して測定されます。データカタログのソースデータベースは、Amazon DataZone カタログにアセットとして登録されます。Amazon DataZone カタログは、Amazon DataZone データソースジョブを使用して中央ガバナンスアカウントでホストされます。

1. 中央ガバナンスアカウントは、Amazon DataZone ドメインと Amazon DataZone データポータルをホストします。データプロデューサーとコンシューマー AWS アカウント の は、Amazon DataZone ドメインに関連付けられています。データプロデューサーとコンシューマーの Amazon DataZone プロジェクトは、対応する Amazon DataZone ドメインユニットで編成されます。

1. データアセットのエンドユーザーは、 AWS Identity and Access Management (IAM) 認証情報またはシングルサインオン (IAM Identity Center を介した統合) を使用して Amazon DataZone データポータルにログインします。エンドユーザーは、Amazon DataZone データカタログ内のアセット情報 (データ品質情報、ビジネスメタデータ、技術メタデータなど) を検索、フィルタリング、表示します。

1. 目的のデータアセットを見つけたエンドユーザーは、Amazon DataZone サブスクリプション機能を使用してアクセスをリクエストします。プロデューサーチームのデータ所有者は通知を受け取り、Amazon DataZone データポータルでサブスクリプションリクエストを評価します。データ所有者は、その有効性に基づいてサブスクリプションリクエストを承認または拒否します。

1. サブスクリプションリクエストが付与および受理されると、以下のアクティビティのために、コンシューマーアカウントでアセットがアクセスされます。
   + Amazon SageMaker AI を使用した AI/ML モデル開発
   + Amazon Athena と Amazon Quick を使用した分析とレポート

## ツール
<a name="build-enterprise-data-mesh-amazon-data-zone-tools"></a>

**AWS のサービス**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)は、標準 SQL を使用して Amazon Simple Storage Service (Amazon S3) 内のデータを直接分析できるようにするインタラクティブなクエリサービスです。
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) は、コードで AWS クラウド インフラストラクチャを定義およびプロビジョニングするのに役立つソフトウェア開発フレームワークです。
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント および 全体のライフサイクルを通じてリソースを管理するのに役立ちます AWS リージョン。
+ [Amazon DataZone](https://docs.aws.amazon.com/datazone/latest/userguide/what-is-datazone.html) は、、オンプレミス、およびサードパーティーソースに保存されたデータのカタログ化、検出 AWS、共有、管理を支援するデータ管理サービスです。
+ [Amazon Quick](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) は、単一のダッシュボードでデータを視覚化、分析、レポートするのに役立つクラウドスケールのビジネスインテリジェンス (BI) サービスです。
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/?id=docs_gateway) はマネージド型の機械学習 (ML) サービスで、ML モデルの構築とトレーニングを行い、それらを本番稼働環境に対応したホスティング環境にデプロイします。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。
+ 「[Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)」は、安全で耐久性があり、配信ソフトウェアシステムとコンポーネントを統合および分離できる利用可能なホスト型キューを提供します。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

**コードリポジトリ**

このソリューションは、GitHub の [data-mesh-datazone-cdk-cloudformation](https://github.com/aws-samples/data-mesh-datazone-cdk-cloudformation) リポジトリで入手できます。

## エピック
<a name="build-enterprise-data-mesh-amazon-data-zone-epics"></a>

### 環境をセットアップする
<a name="set-up-the-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| リポジトリのクローン作成 | リポジトリのクローンを作成するには、ローカル開発環境 (Linux または macOS) で次のコマンドを実行します。<pre>git clone https://github.com/aws-samples/data-mesh-datazone-cdk-cloudformation</pre> | クラウドアーキテクト、DevOps エンジニア | 
| 環境の作成 | Python 仮想環境を作成するには、次のコマンドを実行します。<pre> python3 -m venv .venv<br /> source .venv/bin/activate<br /> pip install -r requirements.txt</pre> | クラウドアーキテクト、DevOps エンジニア | 
| アカウントをブートストラップする | を使用して中央ガバナンスアカウントをブートストラップするには AWS CDK、次のコマンドを実行します。<pre>cdk bootstrap aws://<GOVERNANCE_ACCOUNT_ID>/<AWS_REGION></pre>にサインインし AWS マネジメントコンソール、中央ガバナンスアカウントコンソールを開き、 AWS CDK 実行ロールの Amazon リソースネーム (ARN) を取得します。 | クラウドアーキテクト、DevOps エンジニア | 
| `DzDataMeshMemberStackSet.yaml` ファイルのコンストラクト | `DzDataMeshMemberStackSet.yaml` ファイルをコンストラクトするには、リポジトリのルートディレクトリから次の bash スクリプトを開始します。<pre>./lib/scripts/create_dz_data_mesh_member_stack_set.sh</pre> | クラウドアーキテクト、DevOps エンジニア | 
| テンプレートの作成を確認 |  CloudFormation テンプレートファイルが の`lib/cfn-templates/DzDataMeshMemberStackSet.yaml`場所に作成されていることを確認します。 | クラウドアーキテクト、DevOps エンジニア | 

### 中央ガバナンスアカウントにリソースをデプロイする
<a name="deploy-resources-in-the-central-governance-account"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 設定ファイルの変更 | `config/Config.ts` ファイルで、次のパラメータを変更します。<pre>DZ_APPLICATION_NAME - Name of the application.<br />DZ_STAGE_NAME - Name of the stage. <br />DZ_DOMAIN_NAME - Name of the Amazon DataZone domain<br />DZ_DOMAIN_DESCRIPTION - Description of the Amazon DataZone domain<br />DZ_DOMAIN_TAG - Tag of the Amazon DataZone domain<br />DZ_ADMIN_PROJECT_NAME - Name of the Amazon DataZone project for administrators<br />DZ_ADMIN_PROJECT_DESCRIPTION - Description of the Amazon DataZone project for administrators<br />CDK_EXEC_ROLE_ARN - ARN of the cdk execution role<br />DZ_ADMIN_ROLE_ARN - ARN of the administrator role</pre>残りのパラメータは空のままにします。 | クラウドアーキテクト、DevOps エンジニア | 
| Amazon DataZone 用語集の設定を更新 | `lib/utils/glossary_config.json` ファイルで Amazon DataZone 用語集の設定を更新するには、次の設定例を使用します。<pre>{<br />    "GlossaryName": "PII Data",<br />    "GlossaryDescription": "If data source contains PII attributes",<br />    "GlossaryTerms": [{<br />            "Name": "Yes",<br />            "ShortDescription": "Yes",<br />            "LongDescription": "Yes Glossary Term"<br />        },<br />        {<br />            "Name": "No",<br />            "ShortDescription": "No",<br />            "LongDescription": "No Glossary Term"<br />        }<br />    ]<br />}</pre> | クラウドアーキテクト、DevOps エンジニア | 
| Amazon DataZone メタデータフォームの設定を更新 | `lib/utils/metadata_form_config.json file` で Amazon DataZone メタデータフォームの設定を更新するには、次の設定例を使用します。<pre>{<br />    "FormName": "ScheduleDataRefresh",<br />    "FormDescription": "Form for data refresh schedule",<br />    "FormSmithyModel": "@amazon.datazone#displayname(defaultName: \"Data Refresh Schedule\")\nstructure ScheduleDataRefresh {\n    @documentation(\"Schedule of Data Refresh\")\n    @required\n    @amazon.datazone#searchable\n    @amazon.datazone#displayname(defaultName: \"Data Refresh Schedule\")\n    data_refresh_schedule: String\n}"<br />}</pre> | クラウドアーキテクト、DevOps エンジニア | 
|  AWS 認証情報をエクスポートします。 | 管理者権限を持つ IAM ロールの開発環境に AWS 認証情報をエクスポートするには、次の形式を使用します。<pre>export AWS_ACCESS_KEY_ID=<br />export AWS_SECRET_ACCESS_KEY=<br />export AWS_SESSION_TOKEN=</pre> | クラウドアーキテクト、DevOps エンジニア | 
| テンプレートの合成 |  CloudFormation テンプレートを合成するには、次のコマンドを実行します。<pre>npx cdk synth</pre> | クラウドアーキテクト、DevOps エンジニア | 
| ソリューションのデプロイ | ソリューションをデプロイするには、次のコマンドを実行します。<pre>npx cdk deploy --all</pre> | クラウドアーキテクト、DevOps エンジニア | 

### 新しいメンバーアカウントを設定する
<a name="configure-new-member-accounts"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| テンプレートのデプロイ | 次の入力パラメータを使用して、メンバーアカウントの `lib/cfn-templates/DzDataMeshCfnStackSetExecutionRole.yaml` にある CloudFormation テンプレートをデプロイします。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/build-enterprise-data-mesh-amazon-data-zone.html) | クラウドアーキテクト、DevOps エンジニア | 
| ARN の更新 | メンバーアカウントの CloudFormation StackSet 実行ロール ARNs のリストを更新するには、次のコードを使用します。<pre>DZ_MEMBER_STACK_SET_EXEC_ROLE_LIST  - List of Stack set execution role arns for the member accounts.</pre> | クラウドアーキテクト、DevOps エンジニア | 
| 合成とデプロイ |  CloudFormation テンプレートを合成してソリューションをデプロイするには、次のコマンドを実行します。<pre>npx cdk synth<br />npx cdk deploy --all</pre> | クラウドアーキテクト、DevOps エンジニア | 
| メンバーアカウントの関連付け | メンバーアカウントを中央ガバナンスアカウントに関連付けるには、次の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/build-enterprise-data-mesh-amazon-data-zone.html) | クラウドアーキテクト、DevOps エンジニア | 
| パラメータの更新 | `config/Config.ts` の設定ファイルでメンバーアカウント固有のパラメータを更新するには、次の形式を使用します。<pre>export const DZ_MEMBER_ACCOUNT_CONFIG: memberAccountConfig = {<br />  '123456789012' : {<br />    PROJECT_NAME: 'TEST-PROJECT-123456789012',<br />    PROJECT_DESCRIPTION: 'TEST-PROJECT-123456789012',<br />    PROJECT_EMAIL: 'user@xyz.com'<br />  }<br />}</pre> | クラウドアーキテクト、DevOps エンジニア | 
| テンプレートを合成してデプロイ |  CloudFormation テンプレートを合成してソリューションをデプロイするには、次のコマンドを実行します。<pre>npx cdk synth<br />npx cdk deploy --all</pre> | クラウドアーキテクト、DevOps エンジニア | 
| メンバーアカウントの追加 | データソリューションで追加のメンバーアカウントを作成して設定するには、これまでの手順をメンバーアカウントごとに繰り返します。このソリューションでは、データプロデューサーとコンシューマーは区別されません。 | クラウドアーキテクト、DevOps エンジニア | 

### クリーンアップ
<a name="clean-up"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| メンバーアカウントの関連付けを解除 | アカウントの関連付けを解除するには、次の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/build-enterprise-data-mesh-amazon-data-zone.html) | クラウドアーキテクト、DevOps エンジニア | 
| スタックインスタンスの削除 |  CloudFormation スタックインスタンスを削除するには、次の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/build-enterprise-data-mesh-amazon-data-zone.html) | クラウドアーキテクト、DevOps エンジニア | 
| すべてのリソースを破棄 | リソースを破棄するには、ローカル開発環境 (Linux または macOS) で次の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/build-enterprise-data-mesh-amazon-data-zone.html) | クラウドアーキテクト、DevOps エンジニア | 

## 関連リソース
<a name="build-enterprise-data-mesh-amazon-data-zone-resources"></a>
+ [AWS Glue データを使用した Amazon DataZone クイックスタート](https://docs.aws.amazon.com/datazone/latest/userguide/quickstart-glue.html)
+ [チュートリアル: 最初の AWS CDK アプリを作成する](https://docs.aws.amazon.com/cdk/v2/guide/hello_world.html)
+ [の開始方法 CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.html)
+ [でデータメッシュベースのエンタープライズソリューションを構築するための戦略 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-data-mesh/introduction.html)

## 追加情報
<a name="build-enterprise-data-mesh-amazon-data-zone-additional"></a>

**目的**

このパターンを実装すると、次のことが可能になります。
+ **データの分散所有権** – 中央チームのデータ所有権を、組織のソースシステム、ビジネスユニット、ユースケースを表す各チームに移行します。
+ **プロダクト思考** – 組織内のデータアセットを検討する際に、顧客、市場、その他の要因を考慮するプロダクトベースの考え方を導入します。
+ **フェデレーテッドガバナンス** – 組織のデータ製品全体のセキュリティガードレール、コントロール、コンプライアンスを改善します。
+ **マルチアカウントおよびマルチプロジェクトのサポート** – 組織のビジネスユニットまたはプロジェクト全体で、効率的で安全なデータ共有とコラボレーションをサポートします。
+ **一元的なモニタリングと通知** – Amazon CloudWatch を使用してデータメッシュのクラウドリソースをモニタリングし、新しいメンバーアカウントが関連付けられた場合は各ユーザーに通知します。
+ **スケーラビリティと拡張性** – 組織の進化に合わせて、データメッシュに新しいユースケースを追加します。

**ソリューションの範囲**

このソリューションを使用すると、小規模から開始して、データメッシュジャーニーの進行に合わせてスケールできます。多くの場合、メンバーアカウントがデータソリューションを採用すると、組織、プロジェクト、またはビジネスユニットに固有のアカウント設定が含まれます。このソリューションは、以下の機能をサポートすることで、これらの多様な AWS アカウント 設定に対応します。
+ Amazon DataZone のデータソースとしての AWS Glue データカタログ
+ Amazon DataZone データドメインと関連するデータポータルの管理
+ データメッシュベースのデータソリューションへのメンバーアカウント追加を管理
+ Amazon DataZone プロジェクトと環境の管理
+ Amazon DataZone 用語集とメタデータフォームの管理
+ データメッシュベースのデータソリューションユーザーに対応する IAM ロールの管理
+ データメッシュベースのデータソリューションユーザーへの通知
+ プロビジョニングされたクラウドインフラストラクチャのモニタリング

  このソリューションでは、 AWS CDK と CloudFormation を使用してクラウドインフラストラクチャをデプロイします。を使用して以下 CloudFormation を実行します。
  + クラウドリソースをより低い抽象化レベルで定義してデプロイ。
  + からクラウドリソースをデプロイします AWS マネジメントコンソール。このアプローチを使用すると、開発環境なしでインフラストラクチャをデプロイできます。

  データメッシュソリューションは、 AWS CDK を使用して、より高い抽象化レベルでリソースを定義します。その結果、このソリューションでは、該当するクラウドリソースのデプロイに関連するツールを選択することにより、分離されたモジュール式によるスケーラブルなアプローチを実現できます。

**次のステップ**

Amazon DataZone でデータメッシュを構築するためのガイダンスについては、 AWS[ エキスパート](https://aws.amazon.com/professional-services)にお問い合わせください。

このソリューションにはモジュール性があるため、データファブリックやデータレイクなど、さまざまなアーキテクチャでデータ管理ソリューションを構築できます。さらに、組織の要件に応じて、このソリューションを他の Amazon DataZone データソースにも拡張できます。

# AWS のサービスを使用してバリューアットリスク (VaR) を計算
<a name="calculate-value-at-risk-var-by-using-aws-services"></a>

*Sumon Samanta (Amazon Web Services)*

## 概要
<a name="calculate-value-at-risk-var-by-using-aws-services-summary"></a>

このパターンは、AWS のサービスを使用してバリューアットリスク (VaR) 計算システムを実装する方法を示します。オンプレミス環境では、ほとんどの VaR システムが大規模な専用インフラストラクチャ、および社内または商用のグリッドスケジューリングソフトウェアを使用してバッチ処理を実行します。このパターンは、AWS クラウドで VaR 処理を行うための、シンプルで信頼性が高く、スケーラブルなアーキテクチャを提示します。ストリーミングサービスとして Amazon Kinesis Data Streams、マネージドキューサービスとして Amazon Simple Queue Service (Amazon SQS)、マネージドキューサービスとして Amazon ElastiCache、注文の処理とリスク計算に AWS Lambda を使用するサーバーレスアーキテクチャを構築しています。

VaR は統計的尺度であり、トレーダーやリスクマネージャーが、一定の信頼水準を超えるとポートフォリオの潜在的な損失を推定するために使用します。ほとんどの VaR システムでは、数学計算や統計計算を多数実行し、その結果を保存しています。これらの計算には大量の計算リソースが必要となるため、VaR バッチ処理はより小さな計算タスクに分割する必要があります。大きなバッチを小さなタスクに分割することは可能です。これらのタスクはほとんど独立している (つまり、あるタスクの計算が他のタスクには依存しない) ためです。 

VaR アーキテクチャのもう1つの重要な要件は、計算のスケーラビリティです。このパターンでは、計算負荷に基づいて自動的にスケールインまたはスケールアウトするサーバーレスアーキテクチャを使用しています。バッチ処理やオンライン計算の需要を予測することは難しいため、サービスレベルアグリーメント (SLA) で定められたスケジュール内でプロセスを完了するには動的なスケーリングが必要です。また、コストが最適化されたアーキテクチャでは各コンピュートリソース上のタスクが完了したら、すぐにそのリソースをスケールダウンできるはずです。 

AWS のサービスは、スケーラブルな計算能力とストレージ容量、コストを最適化した方法で処理できる分析サービス、リスク管理ワークフローを実行するさまざまなタイプのスケジューラーを備えているため、VaR 計算に最適です。また、AWS で使用したコンピューティングとストレージリソースに対してのみ料金を支払います。

## 前提条件と制限事項
<a name="calculate-value-at-risk-var-by-using-aws-services-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント。
+ 入力ファイルは、ビジネス要件によって異なります。一般的な使用例には以下の入力ファイルが含まれます：
  + マーケットデータファイル (VaR 計算エンジンへの入力)
  + 取引データファイル (取引データがストリーム経由で送られる場合を除く)。
  + 構成データファイル (モデルとその他の静的構成データ)
  + 計算エンジンモデルファイル (定量ライブラリー)
  + 時系列データファイル (過去 5 年間の株価などの履歴データ用)
+ マーケットデータやその他の入力がストリームを通じて受信される場合、Amazon Kinesis Data Streams がセットアップし、ストリームに書き込むように Amazon 識別とアクセス管理 (IAM) の権限が設定されます。 

このパターンでは、取引データを取引システムから Kinesis データストリームに書き込むアーキテクチャを構築します。ストリーミングサービスを使用する代わりに、取引データをスモールバッチファイルに保存できます。それらは Amazon Simple Storage Service (Amazon S3) バケットに保管し、そしてイベントを呼び出してデータの処理を開始します。

**制限事項**
+ Kinesis データストリームの順序付けは各シャードで保証されています。そのため複数のシャードに書き込まれた取引注文が、書き込み操作と同じ順序で配信されることは保証されません。
+ AWS Lambda ランタイムの制限は、現在は 15 分です。詳細については、「[Lambda FAQ](https://aws.amazon.com/lambda/faqs/)」を参照してください。

## アーキテクチャ
<a name="calculate-value-at-risk-var-by-using-aws-services-architecture"></a>

**ターゲットアーキテクチャ**

次のアーキテクチャ図は、リスク評価システムの AWS サービスとワークフローを示しています。

![\[AWS サービスによる VaR 計算システム\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/eb615fc5-3cc3-445a-af2c-8446ee7b5276/images/c60aec03-ff6c-410c-8ee8-f1f6efa22cf7.png)


この図表は、以下を示すものです：

1. 取引は注文管理システムからストリームインされます。

1. *チケットポジションネッティング* Lambda 関数は、注文を処理し、各ティッカーの統合メッセージを Amazon SQS のリスクキューに書き込みます。

1. *リスク計算エンジン* の Lambda 関数は、Amazon SQS からのメッセージを処理し、リスク計算を実行し、Amazon ElastiCache のリスクキャッシュにある VaR 損益 (PnL) 情報を更新します。

1. *ElastiCache データの読み取り*のLambda 関数は、ElastiCache からリスク結果を取得し、データベースと S3 バケットに保管します。

これらの手順の詳細については、「*エピック*」セクションを参照してください。

**自動化とスケール**

AWS Cloud Development Kit (AWS CDK) または AWS CloudFormation テンプレートを使用して、アーキテクチャ全体をデプロイできます。このアーキテクチャは、バッチ処理と日中 (リアルタイム) 処理の両方のサポートができます。

このアーキテクチャにはスケーリングがビルドインされています。Kinesis データストリームに書き込まれて処理を待つ取引が増えたら、追加の Lambda 関数を呼び出してそれらの取引を処理し、処理が完了したらスケールダウンができます。複数の Amazon SQS リスク計算キューによる処理もオプションです。キュー全体で厳密な順序付けや統合が必要な場合、処理を並列化することはできません。ただし、一日の終わりのバッチや日中のミニバッチの場合、Lambda 関数が並行で処理され、最終結果を ElastiCache に保存できます。 

## ツール
<a name="calculate-value-at-risk-var-by-using-aws-services-tools"></a>

**AWS サービス**
+ 「[Amazon Aurora PostgreSQL 互換エディション](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.html)」は、PostgreSQL デプロイのセットアップ、運用、スケーリングに役立つ、フルマネージド型のACID準拠のリレーショナルデータベースエンジンです。このパターンでは、例として MySQL を使用していますが、いずれかの RDBMS システムを使用してデータを保存できます。
+ 「[Amazon ElastiCache](https://docs.aws.amazon.com/elasticache/)」 は、AWS クラウド上でのインメモリ分散キャッシュ環境のセットアップ、管理、スケーリングに役立ちます。
+ 「[Amazon Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/introduction.html)」は、データレコードの大量のストリームをリアルタイムで収集し、処理するのに役立ちます。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ 「[Amazon Simple Queue Service (Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)) 」は、安全で耐久性があり、配信ソフトウェアシステムとコンポーネントを統合および分離できる利用可能なホスト型キューを提供します。
+ 「[Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 」は、どのようなデータの量であっても、保存、保護、取得することを支援するクラウドベースのオブジェクトストレージサービスです。

**コード**

このパターンは、AWS クラウドの VaR システムのアーキテクチャの例を示し、Lambda 関数を VaR 計算に使用する方法を示しています。Lambda 関数を作成するには、「[Lambdaドキュメント](https://docs.aws.amazon.com/lambda/latest/dg/service_code_examples.html)」 のコード例を参照してください。サポートが必要な場合、「[AWS プロフェッショナルサービス](https://pages.awscloud.com/AWS-Professional-Services.html)」 にお問い合わせください。

## ベストプラクティス
<a name="calculate-value-at-risk-var-by-using-aws-services-best-practices"></a>
+ 各 VaR 計算タスクはできるだけ小さく、軽量にして保持します。各コンピュートタスクでさまざまなトレード数を試して、どれが計算時間とコストについて最適化されているかを確認します。
+ 再利用可能なオブジェクトを Amazon ElastiCache に保存します。Apache Arrow などのフレームワークを使用して、シリアル化と逆シリアル化を減らすことができます。
+ Lambda の時間制限を考慮します。計算タスクが 15 分を超える可能性があると思われる場合、Lambda タイムアウトを回避するためにタスクをより小さなタスクに分割してみてください。これが不可能な場合、AWS Fargate、Amazon Elastic Container Service (Amazon ECS)、および Amazon Elastic Kubernetes Service (Amazon EKS) を使用したコンテナオーケストレーションソリューションを検討します。

## エピック
<a name="calculate-value-at-risk-var-by-using-aws-services-epics"></a>

### リスクシステムへのトレードフロー
<a name="trade-flow-to-risk-system"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| トレードの書き込みを開始します。 | 新規取引、決済取引、または一部決済取引は、注文管理システムからリスクストリームに書き込まれます。このパターンでは、マネージドストリーミングサービスとして Amazon Kinesis を使用します。取引注文ティッカーのハッシュは、複数のシャードに取引注文を出すために使用されます。 | Amazon Kinesis | 

### 注文処理のためのLambda 関数を実行
<a name="run-lambda-functions-for-order-processing"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Lambda でリスク処理を開始します。 | 新しい注文に対して AWS Lambda 関数を実行します。保留中の取引注文の数に基づいて、Lambda は自動的にスケーリングします。各 Lambda インスタンスには 1 つ以上の注文があり、Amazon ElastiCache から各ティッカーの最新の位置を取得します。（ElasticCache からデータを保存および取得するためのキーとして、CUSIP ID、カーブ名、または他の金融デリバティブ商品のインデックス名が使用できます）。ElastiCache では、合計ポジション (数量) とキーと値のペア <*ティッカー*、*ネットポジション* > ここで*ネットポジション*がスケーリングファクターですが、ティッカーごとに 1 回更新されます。  | Amazon Kinesis、AWS Lambda、Amazon ElastiCache | 

### 各ティッカーのメッセージをキューに書き込む
<a name="write-messages-for-each-ticker-into-queue"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 統合メッセージをリスクキューに書き込みます。 | キューへメッセージを送信します。このパターンでは、Amazon SQS をマネージドキューサービスとして使用します。1 つの Lambda インスタンスでいつでも取引注文のミニバッチを取得できますが、Amazon SQS にはティッカーごとに 1 つのメッセージしか書き込まれません。スケーリングファクターは (*古いネットポジション* \$1 *現在のポジション*) / *古いネットポジション* で計算されます。 | Amazon SQS, AWS Lambda | 

### リスクエンジンを呼び出す
<a name="invoke-risk-engine"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| リスク計算を開始します。 | リスクエンジンラムダの Lambda 関数が呼び出されます。各ポジションは 1 つの Lambda 関数によって処理されます。ただし、最適化のため、各 Lambda 関数は Amazon SQS からの複数のメッセージを処理できます。 | Amazon SQS, AWS Lambda | 

### リスク結果をキャッシュから取得
<a name="retrieve-risk-results-from-cache"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| リスクキャッシュを取得して更新します。 | Lambda は、各ティッカーの現在のネットポジションを ElastiCache から取得します。また、各ティッカーの Var 利益と損失 (PnL) 配列を ElastiCache から取得します。 PnL 配列がすでに存在する場合、Lambda 関数は配列と Var をスケールで更新します。スケールは、ネッティング Lambda 関数によって書き込まれた Amazon SQS メッセージから取得されます。PnL 配列が ElasticCache にない場合、シミュレートされたティッカー価格シリーズデータを使用して新しい PnL と Var が計算されます。 | Amazon SQS, AWS Lambda、Amazon ElastiCache | 

### Elastic Cache のデータを更新してデータベースに保存
<a name="update-data-in-elastic-cache-and-store-in-database"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| リスク結果を保存します。 | ElastiCache で Var と PnL の数値が更新されると、5 分ごとに新しい Lambda 関数が呼び出されます。この関数は、保存されているすべてのデータを ElastiCache から読み取り、Aurora MySQL 互換データベースと S3 バケットに保存します。 | AWS Lambda、Amazon ElastiCache | 

## 関連リソース
<a name="calculate-value-at-risk-var-by-using-aws-services-resources"></a>
+ 「[バーゼル Var フレームワーク](https://www.bis.org/basel_framework/chapter/DIS/50.htm)」 

# Amazon Athena を使用して共有 AWS Glue データカタログへのクロスアカウントアクセスを構成する
<a name="configure-cross-account-access-to-a-shared-aws-glue-data-catalog-using-amazon-athena"></a>

*Amazon Web Services、Denis Avdonin*

## 概要
<a name="configure-cross-account-access-to-a-shared-aws-glue-data-catalog-using-amazon-athena-summary"></a>

このパターンでは、AWS Identity and Access Management (IAM) ポリシーサンプルを含め、AWS Glue データカタログを使用して Amazon Simple Storage Service (Amazon S3) バケットに保管されたデータセットをクロスアカウントで共有できるように構成する手順を順を追って説明しています。データセットは S3 バケットに保存できます。メタデータは AWS Glue クローラーによって収集され、AWS Glue データカタログに格納されます。S3 バケットと AWS Glue データカタログは、*データアカウント*と呼ばれる AWS アカウントにあります。IAM プリンシパルには、*コンシューマーアカウント*と呼ばれる別の AWS アカウントでアクセスを提供できます。ユーザーは Amazon Athena サーバーレスクエリエンジンを使用して、コンシューマーアカウントのデータをクエリできます。

## 前提条件と制限
<a name="configure-cross-account-access-to-a-shared-aws-glue-data-catalog-using-amazon-athena-prereqs"></a>

**前提条件**
+ 2 つのアクティブな [ アカウント](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-creating.html)。
+ AWS アカウントのいずれかにある [S3 バケット](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)
+ [Athena エンジンバージョン 2](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference.html#engine-versions-reference-0002)
+ あらかじめ[インストール](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)および[構成](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)されている AWS コマンドラインインターフェイス (AWS CLI) (AWS CLI コマンドを実行する場合は [AWS CloudShell](https://aws.amazon.com/cloudshell/))

**製品バージョン**

このパターンは [Athena エンジンバージョン 2](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference-0002.html) と [Athena エンジンバージョン 3](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference-0003.html) でのみ機能します。Athena エンジンバージョン 3 にアップグレードすることをお勧めします。Athena エンジンバージョン 1 から Athena エンジンバージョン 3 にアップグレードできない場合は、AWS ビッグデータブログの「[Amazon Athena による AWS Glue データカタログへのクロスアカウントアクセス](https://aws.amazon.com/blogs/big-data/cross-account-aws-glue-data-catalog-access-with-amazon-athena/)」のアプローチに従ってください。

## アーキテクチャ
<a name="configure-cross-account-access-to-a-shared-aws-glue-data-catalog-using-amazon-athena-architecture"></a>

**ターゲットテクノロジースタック**
+ Amazon Athena
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Glue
+ AWS Identity and Access Management (IAM)
+ AWS Key Management Service (AWS KMS)

次の図は、IAM 権限を使用して、ある AWS アカウント (データアカウント) の S3 バケットのデータを、AWS Glue データカタログを介して別の AWS アカウント (コンシューマーアカウント) と共有するアーキテクチャを示しています。

![\[AWS Glue データカタログを使用して、S3 バケット内のデータセットをデータアカウントとコンシューマーアカウント間で共有します。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/4ee1d6f5-f8e1-4acb-8a9c-7601c832a87d/images/e73a2b47-c0b1-49f1-be66-9c563c11c9f9.png)


この図表は、次のワークフローを示しています。

1. データアカウントの S3 バケットポリシーは、コンシューマーアカウントの IAM ロールとデータアカウントの AWS Glue クローラーサービスロールにアクセス権限を付与します。

1. データアカウントの AWS KMS キーポリシーは、コンシューマーアカウントの IAM ロールとデータアカウントの AWS Glue クローラーサービスロールにアクセス権限を付与します。

1. データアカウントの AWS Glue クローラーは、S3 バケットに保存されているデータのスキーマを検出します。

1. データアカウントの AWS Glue データカタログのリソースポリシーは、コンシューマーアカウントの IAM ロールへのアクセスを許可します。

1. ユーザーは AWS CLI コマンドを使用して、コンシューマーアカウントに名前付きカタログレファレンスを作成します。

1. IAM ポリシーは、コンシューマーアカウントの IAM ロールに、データアカウント内のリソースへのアクセスを許可します。IAM ロールの信頼ポリシーにより、コンシューマーアカウントのユーザーは IAM ロールを引き受けることができます。

1. コンシューマーアカウントのユーザーは IAM ロールを引き受け、SQL クエリを使用してデータカタログ内のオブジェクトにアクセスします。

1.  Athena サーバーレスエンジンは SQL クエリを実行します。

**注記**  
[IAM ベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)では、IAM ロールにアクセス許可を付与し、[ID フェデレーション](https://aws.amazon.com/identity/federation/)を使用することをお勧めします。

## ツール
<a name="configure-cross-account-access-to-a-shared-aws-glue-data-catalog-using-amazon-athena-tools"></a>
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) はインタラクティブなクエリサービスで、Amazon S3 内のデータをスタンダード SQL を使用して直接分析できます。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) は、フルマネージド型の抽出、変換、ロード (ETL) サービスです。これにより、データストアとデータストリーム間でのデータの分類、整理、強化、移動を確実に行うことができます。
+ 「[AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) は、ユーザーのデータを保護するために使用される、暗号化キーの作成と制御を容易にするマネージドサービスです。

## エピック
<a name="configure-cross-account-access-to-a-shared-aws-glue-data-catalog-using-amazon-athena-epics"></a>

### データアカウントに権限を設定する
<a name="set-up-permissions-in-the-data-account"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| S3 バケットへのアクセス許可の付与 | 次のテンプレートに基づいて [S3 バケットポリシーを作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html)し、データが保存されているバケットにそのポリシーを割り当てます。<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Principal": {<br />                "AWS": [<br />                     "arn:aws:iam::<consumer account id>:role/<role name>",<br />                     "arn:aws:iam::<data account id>:role/service-role/AWSGlueServiceRole-data-bucket-crawler"<br />                ]<br />            },<br />            "Action": "s3:GetObject",<br />            "Resource": "arn:aws:s3:::data-bucket/*"<br />        },<br />        {<br />            "Effect": "Allow",<br />            "Principal": {<br />                "AWS": [<br />                      "arn:aws:iam::<consumer account id>:role/<role name>",<br />                      "arn:aws:iam::<data account id>:role/service-role/AWSGlueServiceRole-data-bucket-crawler"<br />                ]<br />            },<br />            "Action": "s3:ListBucket",<br />            "Resource": "arn:aws:s3:::data-bucket"<br />        }<br />    ]<br />}</pre>バケットポリシーは、コンシューマーアカウントの IAM ロールとデータアカウントの AWS Glue クローラーサービスロールにアクセス権限を付与します。 | クラウド管理者 | 
| (必要な場合) データ暗号化キーへのアクセスを付与します。 | S3 バケットが AWS KMS キーで暗号化されている場合は、コンシューマーアカウントの IAM ロールとデータアカウントの AWS Glue クローラーサービスロールにキーの `kms:Decrypt` 許可を与えます。[キーポリシー](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)を次のステートメントで更新します。<pre>{<br />    "Effect": "Allow",<br />    "Principal": {<br />        "AWS": [<br />            "arn:aws:iam::<consumer account id>:role/<role name>",<br />            "arn:aws:iam::<data account id>:role/service-role/AWSGlueServiceRole-data-bucket-crawler"<br />        ]<br />    },<br />    "Action": "kms:Decrypt",<br />    "Resource": "arn:aws:kms:<region>:<data account id>:key/<key id>"<br />}</pre> | クラウド管理者 | 
| クローラーにデータへのアクセスを許可します。 | 以下の IAM ポリシーをクローラーのサービスロールにアタッチします。<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": "s3:GetObject",<br />            "Resource": "arn:aws:s3:::data-bucket/*"<br />        },<br />        {<br />            "Effect": "Allow",<br />            "Action": "s3:ListBucket",<br />            "Resource": "arn:aws:s3:::data-bucket"<br />        }<br />    ]<br />} </pre> | クラウド管理者 | 
| (必要な場合) クローラーにデータ暗号化キーへのアクセス権限を付与します。 | S3 バケットが AWS KMS キーで暗号化されている場合は、次のポリシーをアタッチして、キーに対する `kms:Decrypt` 許可をクローラーのサービスロールに与えます。<pre>{<br />    "Effect": "Allow",<br />    "Action": "kms:Decrypt",<br />    "Resource": "arn:aws:kms:<region>:<data account id>:key/<key id>"<br />}</pre> | クラウド管理者 | 
| コンシューマーアカウントの IAM ロールとクローラーにデータカタログへのアクセス権限を付与します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-a-shared-aws-glue-data-catalog-using-amazon-athena.html)<pre>{<br />    "Version" : "2012-10-17",<br />    "Statement" : [ <br />        {<br />            "Effect" : "Allow",<br />            "Principal" : {<br />                "AWS" : [<br />                     "arn:aws:iam::<consumer account id>:role/<role name>",<br />                    "arn:aws:iam::<data account id>:role/service-role/AWSGlueServiceRole-data-bucket-crawler"<br />                ]<br />            },<br />            "Action" : "glue:*",<br />            "Resource" : [ <br />                 "arn:aws:glue:<region>:<data account id>:catalog", <br />                 "arn:aws:glue:<region>:<data account id>:database/*", <br />                 "arn:aws:glue:<region>:<data account id>:table/*" <br />            ]<br />        } <br />    ]<br />}</pre>このポリシーは、データアカウントのすべてのデータベースとテーブルに対するすべての AWS Glue アクションを許可します。ポリシーをカスタマイズして、必要なアクセス権限のみをコンシューマープリンシパルに付与することができます。たとえば、データベース内の特定のテーブルまたはビューへの読み取り専用アクセスなどです。 | クラウド管理者 | 

### コンシューマーアカウントからデータにアクセスする
<a name="access-data-from-the-consumer-account"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| データカタログの名前付きレファレンスを作成する。 | 名前付きデータカタログリファレンスを作成するには、[CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/getting-started.html) またはローカルにインストールされた AWS CLI を使用して次のコマンドを実行します。<pre>aws athena create-data-catalog --name <shared catalog name> --type GLUE --parameters catalog-id=<data account id></pre> | クラウド管理者 | 
| コンシューマーアカウントの IAM ロールにデータへのアクセスを許可する。 | 次のポリシーをコンシューマーアカウントの IAM ロールにアタッチして、そのロールにデータへのクロスアカウントアクセスを許可します。<pre>{<br />     "Version": "2012-10-17",		 	 	 <br />     "Statement": [<br />        {<br />             "Effect": "Allow",<br />             "Action": "s3:GetObject",<br />             "Resource": "arn:aws:s3:::data-bucket/*"<br />        },<br />        {<br />             "Effect": "Allow",<br />             "Action": "s3:ListBucket",<br />             "Resource": "arn:aws:s3:::data-bucket"<br />        },<br />        {<br />            "Effect": "Allow",<br />            "Action": "glue:*",<br />            "Resource": [<br />                 "arn:aws:glue:<region>:<data account id>:catalog",<br />                 "arn:aws:glue:<region>:<data account id>:database/*",<br />                 "arn:aws:glue:<region>:<data account id>:table/*"<br />            ]<br />        }<br />    ]<br />}</pre>次に、以下のテンプレートを使用して、どのユーザーが IAM ロールを受け入れることができるかを信頼ポリシーで指定します。<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />       {<br />            "Effect": "Allow",<br />            "Principal": {<br />                "AWS": "arn:aws:iam::<consumer account id>:user/<IAM user>"<br />            },<br />            "Action": "sts:AssumeRole"<br />        }<br />    ]<br />}</pre>最後に、同じポリシーをユーザーが属するユーザーグループにアタッチして、IAM ロールを引き受ける権限をユーザーに付与します。 | クラウド管理者 | 
| (必要な場合) コンシューマーアカウントの IAM ロールにデータ暗号化キーへのアクセス権限を付与します。 | S3 バケットが AWS KMS キーで暗号化されている場合は、次のポリシーをアタッチして、キーに対する `kms:Decrypt` 許可をコンシューマーアカウントの IAM ロールに与えます。<pre>{<br />     "Effect": "Allow",<br />     "Action": "kms:Decrypt",<br />     "Resource": "arn:aws:kms:<region>:<data account id>:key/<key id>"<br />}</pre> | クラウド管理者 | 
| コンシューマーアカウントの IAM ロールに切り替えてデータにアクセスします。 | データコンシューマーは [IAM ロールに切り替えて](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)データアカウントのデータにアクセスします。 | データコンシューマー | 
| データにアクセスします。 | Athena を使用したクエリデータ。たとえば、Athena クエリエディタを開き、次のクエリを実行します。<pre>SELECT *<br />  FROM <shared catalog name>.<database name>.<table name></pre>名前付きのカタログレファレンスを使用する代わりに、Amazon リソースネーム (ARN) でカタログを参照することもできます。クエリまたはビューで動的カタログレファレンスを使用している場合は、レファレンスをエスケープした二重引用符 (\$1") で囲みます。例えば、次のようになります。<pre>SELECT * <br />  FROM \"glue:arn:aws:glue:<region>:<data account id>:catalog\".<database name>.<table name></pre>詳細については、Amazon Athena ユーザーガイドの「[AWS Glue データカタログへのクロスアカウントアクセス](https://docs.aws.amazon.com/athena/latest/ug/security-iam-cross-account-glue-catalog-access.html)’を参照してください。 | データコンシューマー | 

## 関連リソース
<a name="configure-cross-account-access-to-a-shared-aws-glue-data-catalog-using-amazon-athena-resources"></a>
+ [AWS Glue データカタログへのクロスアカウントアクセス](https://docs.aws.amazon.com/athena/latest/ug/security-iam-cross-account-glue-catalog-access.html) (Athena ドキュメント)
+ [( CLI) create-data-catalog](https://docs.aws.amazon.com/cli/latest/reference/athena/create-data-catalog.html) (AWS CLI コマンドリファレンス)
+ [Amazon Athena を使ったAWS Glue データカタログへのクロスアカウントアクセス](https://aws.amazon.com/blogs/big-data/cross-account-aws-glue-data-catalog-access-with-amazon-athena/) (AWS ビッグデータブログ)
+ [IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) (IAM ドキュメント)

## 追加情報
<a name="configure-cross-account-access-to-a-shared-aws-glue-data-catalog-using-amazon-athena-additional"></a>

**クロスアカウント共有の代替手段として Lake Formation を使用する**

AWS Lake Formation を使用して、AWS Glue カタログオブジェクトへのアクセスをアカウント間で共有することもできます。Lake Formation は、列レベルと行レベルでのきめ細かいアクセス制御、タグベースのアクセス制御、ACID トランザクションの管理テーブル、その他の機能を提供します。Lake Formation は Athena と十分統合されていますが、このパターンの IAM のみのアプローチと比較すると、追加の構成が必要になります。Lake Formation を使用するか、IAM のみのアクセス制御を使用するかの決定は、ソリューションアーキテクチャ全体という広い視点で検討することをお勧めします。考慮すべき点には、他にどのようなサービスが関与しているか、またそれらを両方のアプローチとどのように統合するかなどがあります。

# Teradata NORMALIZE 時間的特徴量を Amazon Redshift SQL に変換
<a name="convert-the-teradata-normalize-temporal-feature-to-amazon-redshift-sql"></a>

*Po Hong (Amazon Web Services)*

## 概要
<a name="convert-the-teradata-normalize-temporal-feature-to-amazon-redshift-sql-summary"></a>

**NORMALIZE** は ANSI SQL 標準に対するTeradata 拡張です。SQL テーブルに **PERIOD** データ型の列が含まれている場合、**NORMALIZE** はその列と一致するか重複する値を組み合わせて、複数の個別の期間値を統合する 1 つの期間を形成します。**NORMARISE**を使用するには、SQL の**選択**リストに少なくとも１つの列がテラデータの一時的な**期間**データ型である必要があります。**NORMALIZE**の詳細については、「[Teradata のドキュメント](https://docs.teradata.com/reader/2_MC9vCtAJRlKle2Rpb0mA/MIGI5UMEwgERC3Un7tEZ6g)」を参照してください。 

Amazon Redshift に**NORMALIZE**は適用されませんが、ネイティブ SQL 構文と Amazon Redshift の** LAG **ウィンドウ関数を使用することでこの機能を実装できます。このパターンは、最も一般的な形式である **ON MEETS OR OVERLAPS** 条件で、Teradata **NORMALIZE**の拡張機能を使用することにフォーカスします。この特徴量が Teradata でどのように機能するかについて、また Amazon Redshift ネイティブ SQL 構文に変換する方法についても説明しています。

## 前提条件と制限
<a name="convert-the-teradata-normalize-temporal-feature-to-amazon-redshift-sql-prereqs"></a>

**前提条件 ** 
+ Teradata SQL の基本的な知識と経験
+ Amazon Redshift の知識と経験

## アーキテクチャ
<a name="convert-the-teradata-normalize-temporal-feature-to-amazon-redshift-sql-architecture"></a>

**ソーステクノロジースタック**
+ Teradataデータウェアハウス

**ターゲットテクノロジースタック**
+ Amazon Redshift

**ターゲットアーキテクチャ**

Teradata データベースを Amazon Redshift に移行するための高レベルのアーキテクチャについては、「[AWS SCT データ抽出エージェントを使用して、Teradataのデータベースを Amazon Redshift に移行する](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-a-teradata-database-to-amazon-redshift-using-aws-sct-data-extraction-agents.html)」 というパターンを参照してください。移行しても、Teradataの**NORMALIZE**フレーズが Amazon Redshift SQL に自動的に変換されるわけではありません。このTeradata 拡張は、このパターンのガイドラインに従って変換できます。

## ツール
<a name="convert-the-teradata-normalize-temporal-feature-to-amazon-redshift-sql-tools"></a>

**Code**

**NORMALIZE**の概念と機能を説明するために、Teradata で以下のテーブル定義を考慮します:

```
CREATE TABLE systest.project
     (    emp_id        INTEGER,
          project_name  VARCHAR(20),
          dept_id       INTEGER,
          duration      PERIOD(DATE)
     );
```

次の SQL コードを実行して、サンプルデータをテーブルに挿入します：

```
BEGIN TRANSACTION;

INSERT INTO systest.project VALUES (10, 'First Phase', 1000,  PERIOD(DATE '2010-01-10', DATE '2010-03-20') );
INSERT INTO systest.project VALUES (10, 'First Phase', 2000,  PERIOD(DATE '2010-03-20', DATE '2010-07-15') );

INSERT INTO systest.project VALUES (10, 'Second Phase', 2000,  PERIOD(DATE '2010-06-15', DATE '2010-08-18') );
INSERT INTO systest.project VALUES (20, 'First Phase', 2000,  PERIOD(DATE '2010-03-10', DATE '2010-07-20') );

INSERT INTO systest.project VALUES (20, 'Second Phase', 1000,  PERIOD(DATE '2020-05-10', DATE '2020-09-20') );

END TRANSACTION;
```

結果:

```
select * from systest.project order by 1,2,3;
 
 *** Query completed. 4 rows found. 4 columns returned.
 *** Total elapsed time was 1 second.
 
     emp_id  project_name              dept_id  duration
-----------  --------------------  -----------  ------------------------
         10  First Phase                  1000  ('10/01/10', '10/03/20')        
         10  First Phase                  2000  ('10/03/20', '10/07/15')
         10  Second Phase                 2000  ('10/06/15', '10/08/18')
         20  First Phase                  2000  ('10/03/10', '10/07/20')
         20  Second Phase                 1000  ('20/05/10', '20/09/20')
```

*Teradata NORMALIZEのユースケース*

ここで、Teradata **NORMALIZE** SQL 句を **SELECT** ステートメントに追加します:

```
SELECT NORMALIZE ON MEETS OR OVERLAPS emp_id, duration 
FROM systest.project 
ORDER BY 1,2;
```

この **NORMALIZE** オペレーションは 1 つの列 () で実行されます`emp_id`。の場合`emp_id=10`、継続期間の 3 つの重複する期間値は、次のように 1 つの期間値にまとめられます。 

```
     emp_id  duration
-----------  ------------------------
         10  ('10/01/10', '10/08/18')
         20  ('10/03/10', '10/07/20')
         20  ('20/05/10', '20/09/20')
```

次の **SELECT** ステートメントは、 `project_name`および に対して **NORMALIZE** オペレーションを実行します`dept_id`。**SELECT** リストには、**PERIOD** 列 が 1 つだけ含まれることに注意してください`duration`。

```
SELECT NORMALIZE project_name, dept_id, duration 
FROM systest.project;
```

出力:

```
project_name              dept_id  duration
--------------------  -----------  ------------------------
First Phase                  1000  ('10/01/10', '10/03/20')
Second Phase                 1000  ('20/05/10', '20/09/20')
First Phase                  2000  ('10/03/10', '10/07/20')
Second Phase                 2000  ('10/06/15', '10/08/18')
```

*Amazon Redshift と同等の SQL*

Amazon Redshift には現在、テーブルの**期間**データタイプが適用されません。代わりに、`start_date, end_date`Teradata **PERIOD** データフィールドを次のように の 2 つの部分に分割する必要があります。 

```
CREATE TABLE systest.project
     (    emp_id        INTEGER,
          project_name  VARCHAR(20),
          dept_id       INTEGER,
          start_date  DATE,
          end_date    DATE
     );
```

テーブルにデータ行を挿入します:

```
BEGIN TRANSACTION;
 
INSERT INTO systest.project VALUES (10, 'First Phase', 1000,  DATE '2010-01-10', DATE '2010-03-20' );
INSERT INTO systest.project VALUES (10, 'First Phase', 2000,  DATE '2010-03-20', DATE '2010-07-15');
 
INSERT INTO systest.project VALUES (10, 'Second Phase', 2000,  DATE '2010-06-15', DATE '2010-08-18' );
INSERT INTO systest.project VALUES (20, 'First Phase', 2000,  DATE '2010-03-10', DATE '2010-07-20' );
 
INSERT INTO systest.project VALUES (20, 'Second Phase', 1000,  DATE '2020-05-10', DATE '2020-09-20' );
 
END TRANSACTION;
```

出力:

```
 emp_id | project_name | dept_id | start_date |  end_date
--------+--------------+---------+------------+------------
     10 | First Phase  |    1000 | 2010-01-10 | 2010-03-20
     10 | First Phase  |    2000 | 2010-03-20 | 2010-07-15
     10 | Second Phase |    2000 | 2010-06-15 | 2010-08-18
     20 | First Phase  |    2000 | 2010-03-10 | 2010-07-20
     20 | Second Phase |    1000 | 2020-05-10 | 2020-09-20
(5 rows)
```

Teradataの**NORMALIZE** 句を書き直すには、Amazon Redshift の 「[LAG ウィンドウ関数](https://docs.aws.amazon.com/redshift/latest/dg/r_WF_LAG.html)」 を使用できます。この機能では、パーティションの現在の行より上 (以前) の指定されたオフセットの行の値を返します。

**LAG** 関数を使用して、ある期間が前の期間と一致するか重複しているかどうか (「はい」の場合は 0、「いいえ」の場合は 1) により、新しい期間を開始する各行を識別できます。このフラグを累積的に合計して、Amazon Redshift で望ましい結果を得るために、外部の **グループ分け** 句で使用できるグループ ID を提供します。 

**LAG ()** を使用する Amazon Redshift SQL ステートメントのサンプルは次のとおりです:

```
SELECT emp_id, start_date, end_date, 
            (CASE WHEN start_date <= LAG(end_date) OVER (PARTITION BY emp_id ORDER BY start_date, end_date) THEN 0 ELSE 1 END) AS GroupStartFlag
FROM systest.project 
ORDER BY 1,2;
```

出力:

```
 emp_id | start_date |  end_date  | groupstartflag
--------+------------+------------+----------------
     10 | 2010-01-10 | 2010-03-20 |              1
     10 | 2010-03-20 | 2010-07-15 |              0
     10 | 2010-06-15 | 2010-08-18 |              0
     20 | 2010-03-10 | 2010-07-20 |              1
     20 | 2020-05-10 | 2020-09-20 |              1
(5 rows)
```

次の Amazon Redshift SQL ステートメントは、 `emp_id`列でのみ正規化されます。

```
SELECT T2.emp_id, MIN(T2.start_date) as new_start_date, MAX(T2.end_date) as new_end_date
FROM 
( SELECT T1.*, SUM(GroupStartFlag) OVER (PARTITION BY emp_id ORDER BY start_date ROWS UNBOUNDED PRECEDING) As GroupID
FROM ( SELECT emp_id, start_date, end_date, 
            (CASE WHEN start_date <= LAG(end_date) OVER (PARTITION BY emp_id ORDER BY start_date, end_date) THEN 0 ELSE 1 END) AS GroupStartFlag
FROM systest.project ) T1
) T2
GROUP BY T2.emp_id, T2.GroupID
ORDER BY 1,2;
```

出力:  

```
 emp_id | new_start_date | new_end_date
--------+----------------+------------------------------------
     10 | 2010-01-10     | 2010-08-18
     20 | 2010-03-10     | 2010-07-20
     20 | 2020-05-10     | 2020-09-20
(3 rows)
```

** **

次の Amazon Redshift SQL ステートメントは、 列`project_name`と `dept_id`列の両方で正規化されます。

```
SELECT T2.project_name, T2.dept_id, MIN(T2.start_date) as new_start_date, MAX(T2.end_date) as new_end_date
FROM 
( SELECT T1.*, SUM(GroupStartFlag) OVER (PARTITION BY project_name, dept_id ORDER BY start_date ROWS UNBOUNDED PRECEDING) As GroupID
FROM ( SELECT project_name, dept_id, start_date, end_date, 
            (CASE WHEN start_date <= LAG(end_date) OVER (PARTITION BY project_name, dept_id ORDER BY start_date, end_date) THEN 0 ELSE 1 END) AS GroupStartFlag
FROM systest.project ) T1
) T2
GROUP BY T2.project_name, T2.dept_id, T2.GroupID
ORDER BY 1,2,3;
```

出力:

```
 project_name | dept_id | new_start_date | new_end_date
--------------+---------+----------------+--------------
 First Phase  |    1000 | 2010-01-10     | 2010-03-20
 First Phase  |    2000 | 2010-03-10     | 2010-07-20
 Second Phase |    1000 | 2020-05-10     | 2020-09-20
 Second Phase |    2000 | 2010-06-15     | 2010-08-18
(4 rows)
```

## エピック
<a name="convert-the-teradata-normalize-temporal-feature-to-amazon-redshift-sql-epics"></a>

### NORMALIZE を Amazon Redshift SQL に変換
<a name="convert-normalize-to-amazon-redshift-sql"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Teradata SQL コードを作成します。 | 必要に応じて NORMALIZE フレーズを使用してください。 | SQL Developer | 
| コードを Amazon Redshift SQL に変換します。 | コードを変換するには、このパターンの「ツール」セクションのガイドラインに従います。 | SQL Developer | 
| Amazon Redshift でコードを実行します。 | テーブルを作成し、テーブルにデータをロードして、Amazon Redshift でコードを実行します。 | SQL Developer | 

## 関連リソース
<a name="convert-the-teradata-normalize-temporal-feature-to-amazon-redshift-sql-resources"></a>

**リファレンス**
+ 「[Teradata NORMALIZE 時間的特徴量](https://docs.teradata.com/reader/2_MC9vCtAJRlKle2Rpb0mA/MIGI5UMEwgERC3Un7tEZ6g)」 (テラデータのドキュメント)
+ 「[LAG ウィンドウ関数](https://docs.aws.amazon.com/redshift/latest/dg/r_WF_LAG.html)」 (Amazon Redshift ドキュメント)
+ 「[Amazon Redshiftに移行](https://aws.amazon.com/redshift/data-warehouse-migration/)」(AWS ウェブサイト) 
+ 「[AWS SCT データ抽出エージェントを使用してTeradata　データベースを Amazon Redshift に移行する](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-a-teradata-database-to-amazon-redshift-using-aws-sct-data-extraction-agents.html)」(AWS 規範ガイダンス)
+ 「[Teradata RESET WHEN 特徴量を Amazon Redshift SQL」 (AWS 規範ガイダンス) に変換](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/convert-the-teradata-reset-when-feature-to-amazon-redshift-sql.html)

ツール
+ 「[AWS Schema Conversion Tool (AWS SCT)](https://aws.amazon.com/dms/schema-conversion-tool/)」

**パートナー**
+ 「[AWS 移行コンピテンシーパートナー](https://aws.amazon.com/migration/partner-solutions/#delivery)」

# Teradata RESET WHEN 特徴量を Amazon Redshift SQL に変換
<a name="convert-the-teradata-reset-when-feature-to-amazon-redshift-sql"></a>

*Po Hong (Amazon Web Services)*

## 概要
<a name="convert-the-teradata-reset-when-feature-to-amazon-redshift-sql-summary"></a>

**RESET WHEN** は、SQL 分析ウィンドウ関数で使用されるテラデータの特徴量です。それは ANSI SQL 標準の拡張です。**RESET WHEN** は、特定の条件に基づいてSQL ウィンドウ関数が動作するパーティションを決定します。条件が **TRUE**と評価されると、既存のウィンドウパーティションの中に新しい動的サブパーティションが作成されます。**RESET WHEN**の詳細については、[「テラデータのドキュメント」](https://docs.teradata.com/reader/1DcoER_KpnGTfgPinRAFUw/b7wL86OoMTPno6hrSPNdDg)を参照してください。

Amazon Redshift は SQL ウィンドウ関数で **RESET WHEN** をサポートしていません。この機能を実装するには、 **RESET WHEN** を Amazon Redshift でネイティブ SQL 構文に変換し、複数の入れ子関数を使用する必要があります。このパターンは、Teradata **RESET WHEN** 特徴量を使用する方法と、 Amazon Redshift SQL 構文に変換する方法を示しています。 

## 前提条件と制限
<a name="convert-the-teradata-reset-when-feature-to-amazon-redshift-sql-prereqs"></a>

**前提条件**
+ Teradata のデータウェアハウスとその SQL 構文の基本的な知識
+ Amazon Redshift とその SQL 構文の十分な理解

## アーキテクチャ
<a name="convert-the-teradata-reset-when-feature-to-amazon-redshift-sql-architecture"></a>

**ソーステクノロジースタック**
+ Teradataデータウェアハウス

**ターゲットテクノロジースタック**
+ Amazon Redshift

**アーキテクチャ**

Teradataデータベースを Amazon Redshift に移行するための高レベルのアーキテクチャについては、「[AWS SCT データ抽出エージェントを使用して、 Teradataのデータベースを Amazon Redshift に移行する](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-a-teradata-database-to-amazon-redshift-using-aws-sct-data-extraction-agents.html)」というパターンを参照してください。移行しても、Teradata **RESET WHEN** フレーズは Amazon Redshift SQL に自動的に変換されません。このTeradata拡張は、次のセクションのガイドラインに従って変換できます。

## ツール
<a name="convert-the-teradata-reset-when-feature-to-amazon-redshift-sql-tools"></a>

**Code**

**RESET WHEN** の概念を説明するには、テラデータにおける以下のテーブル定義を考慮します:

```
create table systest.f_account_balance                                
( account_id integer NOT NULL,
  month_id integer,
  balance integer )
unique primary index (account_id, month_id);
```

次の SQL コードを実行して、サンプルデータをテーブルに挿入します：

```
BEGIN TRANSACTION;
Insert Into systest.f_account_balance values (1,1,60);
Insert Into systest.f_account_balance values (1,2,99);
Insert Into systest.f_account_balance values (1,3,94);
Insert Into systest.f_account_balance values (1,4,90);
Insert Into systest.f_account_balance values (1,5,80);
Insert Into systest.f_account_balance values (1,6,88);
Insert Into systest.f_account_balance values (1,7,90);
Insert Into systest.f_account_balance values (1,8,92);
Insert Into systest.f_account_balance values (1,9,10);
Insert Into systest.f_account_balance values (1,10,60);
Insert Into systest.f_account_balance values (1,11,80);
Insert Into systest.f_account_balance values (1,12,10);
END TRANSACTION;
```

このサンプルテーブルには、次のデータがあります：


| 
| 
| account\$1id | month\$1id | balance | 
| --- |--- |--- |
| 1 | 1 | 60 | 
| 1 | 2 | 99 | 
| 1 | 3 | 94 | 
| 1 | 4 | 90 | 
| 1 | 5 | 80 | 
| 1 | 6 | 88 | 
| 1 | 7 | 90 | 
| 1 | 8 | 92 | 
| 1 | 9 | 10 | 
| 1 | 10 | 60 | 
| 1 | 11 | 80 | 
| 1 | 12 | 10 | 

アカウントごとに、連続的な月次残高の増加のシーケンスを分析したいものとします。ある月の残高が前月の残高以下の場合、必要なことはカウンターをゼロにリセットして再起動します。

*Teradata RESET WHENのユースケース*

このデータを分析するためにTeradata SQL は、ネストされた集計ウィンドウ関数と **RESET WHEN** フレーズを次のように使用します:

```
SELECT account_id, month_id, balance,
 ( ROW_NUMBER() OVER (PARTITION BY account_id ORDER BY month_id
RESET WHEN balance <= SUM(balance) over (PARTITION BY account_id ORDER BY month_id ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) ) -1 ) as balance_increase
FROM systest.f_account_balance
ORDER BY 1,2;
```

出力:


| 
| 
|  account\$1id | month\$1id | balance | balance\$1increase | 
| --- |--- |--- |--- |
| 1 | 1 | 60 | 0 | 
| 1 | 2 | 99 | 1 | 
| 1 | 3 | 94 | 0 | 
| 1 | 4 | 90 | 0 | 
| 1 | 5 | 80 | 0 | 
| 1 | 6 | 88 | 1 | 
| 1 | 7 | 90 | 2 | 
| 1 | 8 | 92 | 3 | 
| 1 | 9 | 10 | 0 | 
| 1 | 10 | 60 | 1 | 
| 1 | 11 | 80 | 2 | 
| 1 | 12 | 10 | 0 | 

Teradataにクエリが次のように処理されます:

1. **SUM (残高)**集計関数は、特定の口座の特定の月のすべての残高の合計を計算します。

1. 特定の月の（特定の口座の）残高が前月残高を超えているかどうかを確認します。

1. 残高が増加した場合、累積のカウント値を追跡します。**RESET WHEN** の条件が**false** と評価された場合、つまり、残高が連続する月について増加した場合、引き続きカウントを増加します。

1. **ROW\$1NUMBER ()**で順序付けされた分析関数がカウントの値を計算します。残高が前月の残高以下になると、**RESET WHEN** 条件で **true** と評価します。その場合、新しいパーティションを開始し、**ROW\$1NUMBER ()**でカウントを 1 から再開します。**ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING**を使用して、前の行の値にアクセスします。

1. 1 を差し引くことで、カウント値が 必ず0 から始まるようにします。

*Amazon Redshift と同等の SQL*

SQL 分析ウィンドウ関数の **RESET WHEN** フレーズに Amazon Redshift が適用されません。 同じ結果を生むために、 Amazon Redshift ネイティブ SQL 構文とネストされたサブクエリを使用して、テラデータの SQL を次のように書き直す必要があります: 

```
SELECT account_id, month_id, balance,
   (ROW_NUMBER() OVER(PARTITION BY account_id, new_dynamic_part ORDER BY month_id) -1) as balance_increase
FROM
( SELECT account_id, month_id, balance, prev_balance,
SUM(dynamic_part) OVER (PARTITION BY account_id ORDER BY month_id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) As new_dynamic_part
FROM ( SELECT account_id, month_id, balance,
SUM(balance) over (PARTITION BY account_id ORDER BY month_id ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) as prev_balance,
(CASE When balance <= prev_balance Then 1 Else 0 END) as dynamic_part
FROM systest.f_account_balance ) A
) B
ORDER BY 1,2;
```

単一の SQL ステートメントの**SELECT** 句にネストされたウィンドウ関数に、Amazon Redshift が適用されないため、2つのネストされたサブクエリを使用する必要があります。
+ 内部サブクエリ (エイリアス A ) では、動的パーティションインジケータ (**dynamic\$1part**) が作成され、入力されます。ある月の残高が前月残高の以下の場合、 **dynamic\$1part** が 1 に設定され、それ以外の場合は 0 に設定されます。 
+ 次のレイヤー (エイリアス B ) では、**new\$1dynamic\$1part** 属性が、**SUM **ウィンドウ関数の結果として、生成されます。 
+ 最後に、新しいパーティション属性 (**動的パーティション**) として、**new\$1dynamic\$1part** を既存のパーティション属性 (**account\$1id**) に追加します。さらに、同じ **ROW\$1NUMBER()** ウィンドウ関数を Teradata に適用します (1 を差し引く)。 

このように変更すると、Amazon Redshift SQL が Teradata と同じ出力を生成します。

## エピック
<a name="convert-the-teradata-reset-when-feature-to-amazon-redshift-sql-epics"></a>

### RESET WHEN を Amazon Redshift SQL に変換
<a name="convert-reset-when-to-amazon-redshift-sql"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Teradataのウィンドウ関数を作成します。 | 必要に応じて、ネストされた集計と RESET WHEN フレーズを使用します。 | SQL Developer | 
| コードを Amazon Redshift SQL に変換します。 | コードを変換するには、このパターンの「ツール」セクションのガイドラインに従います。 | SQL Developer | 
| Amazon Redshift でコードを実行します。 | テーブルを作成し、テーブルにデータをロードして、Amazon Redshift でコードを実行します。 | SQL Developer | 

## 関連リソース
<a name="convert-the-teradata-reset-when-feature-to-amazon-redshift-sql-resources"></a>

**リファレンス**
+ 「[RESET WHEN フレーズ](https://docs.teradata.com/reader/1DcoER_KpnGTfgPinRAFUw/b7wL86OoMTPno6hrSPNdDg)」（Teradataのドキュメント）
+ 「[RESET WHEN の説明](https://stackoverflow.com/questions/53344536/teradata-reset-when-partition-by-order-by)」（スタックオーバーフロー）
+ 「[Amazon Redshiftに移行](https://aws.amazon.com/redshift/data-warehouse-migration/)」（AWS ウェブサイト）
+ 「[AWS SCT データ抽出エージェントを使用して、Teradataデータベースを Amazon Redshift に移行する](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-a-teradata-database-to-amazon-redshift-using-aws-sct-data-extraction-agents.html)」(AWS 規範ガイダンス)
+ 「[Teradata NORMALIZE 時間的特徴量を Amazon Redshift SQL に変換](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/convert-the-teradata-normalize-temporal-feature-to-amazon-redshift-sql.html)」(AWS 規範ガイダンス)

**ツール**
+ 「[AWS Schema Conversion Tool (AWS SCT)](https://aws.amazon.com/dms/schema-conversion-tool/)」

**パートナー**
+ 「[AWS 移行コンピテンシーパートナー](https://aws.amazon.com/migration/partner-solutions/#delivery)」

# インフラストラクチャをコードとして使用して、AWS クラウドにサーバーレスデータレイクをデプロイして管理する
<a name="deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code"></a>

*Amazon Web Services、Kirankumar Chandrashekar、Abdel Jaidi*

## 概要
<a name="deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code-summary"></a>

このパターンでは、[サーバーレスコンピューティング](https://aws.amazon.com/serverless/)と [Infrastructure as Code](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html) (IaC) を使用して、Amazon Web Services (AWS) クラウドにデータレイクを実装および管理する方法を説明します。このパターンは、AWS が開発した[サーバーレスデータレイクフレームワーク (SDLF)](https://sdlf.workshop.aws/) ワークショップに基づいています。

SDLF は、AWS クラウドでのエンタープライズデータレイクの配信を加速し、本番環境への迅速なデプロイに役立つ再利用可能なリソースの集まりです。ベストプラクティスに従ってデータレイクの基本構造を実装するために使用されます。

SDLF は、AWS CodePipeline、AWS CodeBuild、AWS CodeCommit などの AWS サービスを使用して、コードとインフラストラクチャのデプロイ全体にわたって継続的インテグレーション/継続的デプロイ (CI/CD) プロセスを実装します。

このパターンでは、複数の AWS サーバーレスサービスを使用してデータレイク管理を簡素化します。これらには、ストレージ用に Amazon Simple Storage Service (Amazon S3) と Amazon DynamoDB、コンピューティング用に AWS Lambda と AWS Glue、オーケストレーション用に Amazon CloudWatch Events、Amazon Simple Queue Service (Amazon SQS)、AWS Step Functions などがあります。

AWS CloudFormation と AWS コードサービスは IaC レイヤーとして機能し、運用と管理が容易で再現性のある迅速なデプロイを実現します。

## 前提条件と制限事項
<a name="deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code-prereqs"></a>

**前提条件**
+ アクティブなAWS アカウント
+ インストールおよび設定済みの [AWS コマンドラインインターフェイス (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html))。 
+ インストールおよび設定済みの Git クライアント。
+ [SDLF ワークショップ](https://sdlf.workshop.aws/)はウェブブラウザウィンドウで開き、すぐに使用できます。 

## アーキテクチャ
<a name="deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code-architecture"></a>

![\[AWS クラウド上のデータレイクの実装と管理。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/f4fc3ad2-1c4f-45ea-bc86-2db13105a173/images/e0cfff30-f0f8-4fc1-8e84-a152ef615c58.png)


 このアーキテクチャ図は、イベント駆動型プロセスを以下のステップで示しています。 

1. ローデータの S3 バケットにファイルを追加すると、Amazon S3 イベント通知が SQS キューに配置されます。各通知は、S3 バケット名、オブジェクトキー、タイムスタンプなどのメタデータを含む JSON ファイルとして配信されます。

1. この通知は、メタデータに基づいてイベントを正しい抽出、変換、ロード (ETL) プロセスにルーティングする Lambda 関数によって使用されます。Lambda 関数は Amazon DynamoDB テーブルに保存されているコンテキスト設定を使用することもできます。このステップにより、データレイク内の複数のアプリケーションを切り離してスケーリングできるようになります。

1. イベントは、ETL プロセスの最初の Lambda 関数にルーティングされます。この関数はデータを未加工データ領域からデータレイクのステージング領域に変換して移動します。最初のステップでは、総合カタログを更新します。これは、データレイクのすべてのファイルメタデータを含む DynamoDB テーブルです。このテーブルの各行には、Amazon S3 に保存されている 1 つのオブジェクトに関する運用メタデータが格納されています。S3 オブジェクトに対して軽い変換を行う Lambda 関数に対して同期呼び出しが行われます。この変換は、計算コストのかからない操作 (ファイルをある形式から別の形式に変換するなど) です。ステージング S3 バケットに新しいオブジェクトが追加されたため、包括的なカタログが更新され、ETL の次のフェーズを待つメッセージが SQS キューに送信されます。

1. CloudWatch イベントルールは 5 分ごとに Lambda 関数をトリガーします。この関数は、メッセージが前の ETL フェーズから SQS キューに配信されたかどうかを確認します。メッセージが配信されると、Lambda 関数は ETL プロセスの [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/sample-start-workflow.html) から 2 番目の関数を開始します。

1. その後、大量の変換がファイルのバッチに適用されます。この大規模な変換は、AWS Glue ジョブ、AWS Fargate タスク、Amazon EMR ステップ、または Amazon SageMaker ノートブックへの同期呼び出しなど、計算負荷の高い操作です。テーブルメタデータは、AWS Glue カタログを更新する AWS Glue クローラーを使用して出力ファイルから抽出されます。ファイルメタデータは DynamoDB の包括的なカタログテーブルにも追加されます。最後に、[Deequ](https://github.com/awslabs/deequ) を活用したデータ品質ステップも実行されます。

**テクノロジースタック**
+ Amazon CloudWatch Events
+ AWS CloudFormation
+ AWS CodePipeline
+ AWS CodeBuild
+ AWS CodeCommit
+ Amazon DynamoDB
+ AWS Glue
+ AWS Lambda
+ Amazon S3
+ Amazon SQS
+ AWS Step Functions

## ツール
<a name="deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code-tools"></a>
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) – CloudWatch Events は、AWS リソースの変更を説明するシステムイベントのストリームをほぼリアルタイムで配信します。
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) – CloudFormation は、AWS インフラストラクチャのデプロイメントを予測どおりに繰り返し作成およびプロビジョニングするのに役立ちます。
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) – CodeBuild は、ソースコードをコンパイルし、ユニットテストを実行し、すぐにデプロイできるアーティファクトを生成するフルマネージドビルドサービスです。
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) – CodeCommit は、AWS がホストするバージョン管理サービスで、資産 (ソースコードやバイナリファイルなど) をプライベートに保存および管理するために使用できます。
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) – CodePipeline は、ソフトウェアの変更を継続的にリリースするために必要なステップをモデル化し、視覚化し、自動化するために使用できる継続的配信サービスです。
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) – DynamoDB は、高速で予測可能なパフォーマンスとスケーラビリティを提供するフルマネージド NoSQL データベースサービスです。 
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) – AWS Glue は、分析のためにデータを簡単に準備してロードできるフルマネージドの ETL サービスです。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) – Lambda は、サーバーのプロビジョニングや管理を行わずにコードの実行をサポートします。Lambda は必要に応じてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケールします。 
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html) – Amazon Simple Storage Service (Amazon S3) は、拡張性の高いオブジェクトストレージサービスです。Amazon S3 は、ウェブサイト、モバイルアプリケーション、バックアップ、データレイクなど、幅広いストレージソリューションに使用できます。
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) – AWS Step Functions はサーバーレスの関数オーケストレーターで、AWS Lambda 関数と複数の AWS サービスをビジネスクリティカルなアプリケーションに簡単にシーケンスできます。
+ [Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) – Amazon Simple Queue Service (Amazon SQS) は、マイクロサービス、分散システム、サーバーレスアプリケーションの分離と拡張に役立つフルマネージドのメッセージキューイングサービスです。
+ [Deequ](https://github.com/awslabs/deequ) – Deequ は、大規模なデータセットのデータ品質メトリクスの計算、データ品質制約の定義と検証、データ分布の変化に関する最新情報の把握に役立つツールです。

**コードリポジトリ**

SDLF のソースコードとリソースは、[AWS ラボの GitHub リポジトリ](https://github.com/awslabs/aws-serverless-data-lake-framework/)にあります。

## エピック
<a name="deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code-epics"></a>

### IaC をプロビジョニングするため CI/CD パイプラインを設定する
<a name="set-up-the-ci-cd-pipeline-to-provision-iac"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| データレイクの IaC を管理するための CI/CD パイプラインを設定します。 | AWS マネジメントコンソールにサインインし、SDLF ワークショップの「[Initial setup](https://sdlf.workshop.aws/en/10-deployment/100-setup.html)」セクションの手順に従います。これにより、データレイク用の IaC をプロビジョニングおよび管理する CodeCommit リポジトリ、CodeBuild 環境、CodePipeline パイプラインなどの初期の CI/CD リソースが作成されます。 | DevOps エンジニア | 

### IaC のバージョン管理
<a name="version-control-the-iac"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ローカルマシンに CodeCommit リポジトリをクローンします。 | SDLF ワークショップの「[Deploying the Foundations](https://sdlf.workshop.aws/en/10-deployment/200-foundations.html)」セクションの手順に従ってください。これにより、IaC をホストする Git リポジトリをローカル環境に複製できます。 詳細については、CodeCommit ドキュメントの「[Connect to an AWS CodeCommit repository](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html)」を参照してください。 | DevOps エンジニア | 
| CloudFormation テンプレートを変更します。 | ローカルワークステーションとコードエディタを使用して、ユースケースや要件に応じて CloudFormation テンプレートを変更します。それらをローカルにクローンされた Git リポジトリにコミットします。 詳細については、AWS CloudFormation ユーザーガイドの「[AWS CloudFormation テンプレートの使用](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html)」を参照してください。 | DevOps エンジニア | 
| 変更を CodeCommit リポジトリにプッシュします。 | インフラストラクチャコードはバージョン管理下に置かれ、コードベースへの変更が追跡されるようになりました。CodeCommit リポジトリに変更をプッシュすると、CodePipeline はその変更をインフラストラクチャに自動的に適用し、CodeBuild に配信します。 CodeBuild で AWS SAM CLI を使用する場合は、`sam package` コマンドおよび `sam deploy` コマンドを実行します。AWS CLI を使用する場合は、`aws cloudformation package` コマンドおよび `aws cloudformation deploy` コマンドを実行します。 | DevOps エンジニア | 

## 関連リソース
<a name="deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code-resources"></a>

**IaC をプロビジョニングするため CI/CD パイプラインを設定する**
+ [SDLF workshop – Initial setup](https://sdlf.workshop.aws/en/10-deployment/100-setup.html)

**IaC のバージョン管理**
+ [SDLF workshop – Deploying the foundations](https://sdlf.workshop.aws/en/10-deployment/200-foundations.html)
+ [AWS CodeCommit リポジトリに接続する](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html)
+ [AWS CloudFormation テンプレートの使用](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html)

**その他のリソース**
+ [AWS serverless data analytics pipeline reference architecture](https://aws.amazon.com/blogs/big-data/aws-serverless-data-analytics-pipeline-reference-architecture/)
+ [SDLF documentation](https://sdlf.readthedocs.io/en/latest/)

# 起動時に Amazon EMR クラスターのタグ付けを強制する
<a name="enforce-tagging-of-amazon-emr-clusters-at-launch"></a>

*Amazon Web Services、Priyanka Chaudhary*

## 概要
<a name="enforce-tagging-of-amazon-emr-clusters-at-launch-summary"></a>

このパターンは、Amazon EMR クラスターによる作成時のタグ付けを保証するセキュリティコントロールを提供します。 

Amazon EMR は、膨大な量のデータを処理して分析するためのAmazon Web Services (AWS) サービスです。Amazon EMR は、社内でクラスターコンピューティングを実行する代わりに、拡張可能な低構成のサービスを提供します。タグ付けを使用し、目的、所有者、環境などのさまざまな方法で AWS リソースを分類できます。たとえば、各クラスターにカスタムメタデータを割り当てることで、Amazon EMR クラスターにタグを付けることができます。タグは、定義するキーと値で構成されます。組織の要件に適合する一貫したタグのセットを作成することをお勧めします。Amazon EMR クラスターにタグを追加するとき、タグはクラスターに関連するアクティブな Amazon Elastic Compute Cloud (Amazon EC2) インスタンスにもそれぞれ伝達されます。同様に、Amazon EMR クラスターからタグを削除すると、そのタグは関連するアクティブな EC2 インスタンスそれぞれから削除されます。

検出コントロールは、API コールをモニタリングし、[RunJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html)、[AddTags](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddTags.html)、[RemoveTags](https://docs.aws.amazon.com/emr/latest/APIReference/API_RemoveTags.html)、および [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html) の API の Amazon CloudWatch Events イベントを起動します。このイベントは、Python スクリプトを実行する AWS Lambda 関数を呼び出します。Python 関数は、イベントの JSON 入力から Amazon EMR クラスター ID を取得し、以下のチェックを実行します。
+ Amazon EMR クラスターが、指定したタグ名で設定されていることを確認します。
+ そうでない場合は、Amazon EMR クラスター名、違反の詳細、AWS リージョン、AWS アカウント、およびこの通知の送信元である Lambda の Amazon リソースネーム (ARN) などの関連情報 を含む Amazon Simple Notiﬁcation Service (Amazon SNS) 通知をユーザーに送信します。

## 前提条件と制限事項
<a name="enforce-tagging-of-amazon-emr-clusters-at-launch-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ 指定の Lambda コードをアップロードする Amazon Simple Storage Service (Amazon S3) バケット。または、「*エピック*」セクションで説明されているように、この目的で S3 バケットを作成することもできます。
+ 違反の通知を受信するアクティブなメールアドレス
+ 確認したい必須タグのリスト。

**制限事項**
+ このセキュリティコントロールは地域ごとに行われます。モニタリングする AWS リージョンごとにデプロイする必要があります。

**製品バージョン**
+ Amazon EMR リリース 4.8.0 以降

## アーキテクチャ
<a name="enforce-tagging-of-amazon-emr-clusters-at-launch-architecture"></a>

**ワークフローアーキテクチャ**

![\[クラスターの起動、API を使用したモニタリング、イベント生成、Lambda 関数呼び出し、送信された通知。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/1a4fc0f8-b0c9-4391-9c79-9eb3898d6ecb/images/0d95c414-69d1-4f29-a9e7-09f202e27014.png)


**自動化とスケール**
+ [AWS Organizations](https://aws.amazon.com/organizations/) を使用している場合は、[AWS Cloudformation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) を使用して、モニタリングする複数のアカウントにこのテンプレートをデプロイできます。

## ツール
<a name="enforce-tagging-of-amazon-emr-clusters-at-launch-tools"></a>

**AWS サービス**
+ 「[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)」 を使用することで、AWS リソースをセットアップし、迅速かつ一貫したプロビジョニングを行い、AWS アカウントとリージョン全体でライフサイクルの最初から最後までリソースを管理できます。リソースを個別に管理する代わりに、テンプレートを使用してリソースとその依存関係を記述し、それらをスタックとしてまとめて起動して設定できます。複数の AWS アカウントと AWS リージョンにまたがるスタックを管理し、プロビジョニングすることが可能です。
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) – Amazon CloudWatch Events は、AWS リソースの変更を説明するシステムイベントのほぼリアルタイムのストリームを配信します。
+ [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) - Amazon EMR は、ビッグデータフレームワークの実行と膨大な量のデータの効率的な処理を簡素化するウェブサービスです。
+ 「[AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)」 – AWS Lambda はサーバーのプロビジョニングや管理を行わずにコードの実行を支援できるコンピューティングサービスです。Lambda は必要に応じてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケールします。 
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) — Amazon Simple Storage Service (Amazon S3) は、オブジェクトストレージサービスです。Simple Storage Service (Amazon S3) を使用すると、いつでもウェブ上の任意の場所から任意の量のデータを保存および取得できます。
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) — Amazon Simple Notiﬁcation Service (Amazon SNS) は、ウェブサーバーやメールアドレスなど、パブリッシャーとクライアント間のメッセージ配信または送信を調整して管理します。サブスクライバーは、サブスクライブしているトピックに対して発行されたすべてのメッセージを受信します。また、同じトピックのサブスクライバーはすべて同じメッセージを受信します。

**コード**

このパターンには、以下の添付ファイルが含まれます。
+ `EMRTagValidation.zip` — セキュリティコントロール用の Lambda コード。
+ `EMRTagValidation.yml` — イベントとLambda 関数をセットアップする CloudFormation テンプレート。

## エピック
<a name="enforce-tagging-of-amazon-emr-clusters-at-launch-epics"></a>

### S3 バケットのセットアップ
<a name="set-up-the-s3-bucket"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| S3 バケットを定義します。 | [Amazon S3 コンソールで](https://console.aws.amazon.com/s3/)、Lambda コードの.zip ファイルをホストする S3 バケットを選択または作成します。この S3 バケットが、モニタリングする Amazon EMR クラスターと同じ AWS リージョンに存在する必要があります。Amazon S3 バケット名はグローバルに一意であり、名前空間はすべての AWS アカウントによって共有されています。S3 バケット名には、先頭にスラッシュを含めることはできません。 | クラウドアーキテクト | 
| Lambda コードをアップロードします。 | 「*添付ファイル*」セクションにある Lambda コードの .zip ファイルを S3 バケットにアップロードします。                                              | クラウドアーキテクト | 

### AWS CloudFormation テンプレートをデプロイする
<a name="deploy-the-aws-cloudformation-template"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS CloudFormation のテンプレートを起動します。 | 同じAWS リージョンで S3 バケットとして [AWS CloudFormation コンソール](https://console.aws.amazon.com/cloudformation/.) を開き、テンプレートをデプロイします。AWS CloudFormation テンプレートのデプロイに関する詳細については、CloudFormation ドキュメントの「[AWS CloudFormation コンソールでのスタックの作成](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)」を参照してください。 | クラウドアーキテクト | 
| テンプレートのパラメータを入力します。 | テンプレートを起動すると、次の情報の入力を求められます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/enforce-tagging-of-amazon-emr-clusters-at-launch.html) | クラウドアーキテクト | 

### サブスクリプションを確認
<a name="confirm-the-subscription"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| サブスクリプションを確認します。 | CloudFormation テンプレートが正常にデプロイされると、指定したメールアドレスにサブスクリプションメールが送信されます。違反通知の受信を開始するには、このメールサブスクリプションを確認する必要があります。 | クラウドアーキテクト | 

## 関連リソース
<a name="enforce-tagging-of-amazon-emr-clusters-at-launch-resources"></a>
+ [AWS Lambda 開発者ガイド](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
+ 「[Amazon EMR クラスターでのタグ付け](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-tags.html)」

## アタッチメント
<a name="attachments-1a4fc0f8-b0c9-4391-9c79-9eb3898d6ecb"></a>

このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「[attachment.zip](samples/p-attach/1a4fc0f8-b0c9-4391-9c79-9eb3898d6ecb/attachments/attachment.zip)」

# Amazon S3 へのAmazon EMR ロギングが有効になっていることを確認する
<a name="ensure-amazon-emr-logging-to-amazon-s3-is-enabled-at-launch"></a>

*Amazon Web Services、Priyanka Chaudhary*

## 概要
<a name="ensure-amazon-emr-logging-to-amazon-s3-is-enabled-at-launch-summary"></a>

このパターンは、Amazon Web Services (AWS) で実行されている Amazon EMR クラスターのロギング設定を監視するセキュリティコントロールを提供します。

Amazon EMR は、ビッグデータの処理と分析のための AWS ツールです。Amazon EMR は、社内でクラスターコンピューティングを実行する代わりに、拡張可能な低構成のサービスを提供します。Amazon EMR には 2 種類の EMR クラスターが用意されています。
+ **一時的な Amazon EMR クラスター**: 一時的な Amazon EMR クラスターは、処理が終了すると自動的にシャットダウンされ、コストが発生しなくなります。
+ **永続的な Amazon EMR クラスター**: 永続的な Amazon EMR クラスターは、データ処理ジョブが完了した後も引き続き実行されます。

Amazon EMR と Hadoop はいずれも、クラスターの状態を報告するログファイルを生成します。デフォルトで、ログファイルは **/mnt/var/log/** ディレクトリのプライマリノードに出力されます。クラスターの起動時の設定方法によっては、Amazon Simple Storage Service (Amazon S3) にログを保存できます。Amazon S3 ロギングは、クラスターの起動時にのみ指定できることに注意してください。この設定では、ログは 5 分ごとにプライマリノードから Amazon S3 の場所に送信されます。一時的なクラスターでは、処理が完了するとクラスターが消え、これらのログファイルを使用して失敗したジョブをデバッグできるため、Amazon S3 ロギングは重要です。

このパターンでは、AWS CloudFormation テンプレートを使用して API 呼び出しをモニタリングし、「RunJobFlow」で Amazon CloudWatch Events を開始するセキュリティコントロールをデプロイします。トリガーは、Python スクリプトを実行する AWS Lambda を呼び出します。Lambda 関数はイベント JSON 入力から EMR クラスター ID を取得し、Amazon S3 ログ URI もチェックします。Amazon S3 URI が見つからない場合、Lambda 関数は、EMR クラスター名、違反の詳細、AWS リージョン、AWS アカウント、および通知の送信元である Lambda Amazon リソースネーム (ARN) を詳述した Amazon Simple Notiﬁcation Service (Amazon SNS) 通知を送信します。

## 前提条件と制限
<a name="ensure-amazon-emr-logging-to-amazon-s3-is-enabled-at-launch-prereqs"></a>

**前提条件**
+ アクティブなAWS アカウント
+ Lambda コードの .zip ファイル用の S3 バケット
+ 違反の通知を受信する E メールアドレス

**制限事項**
+ この検出統制はリージョンごとに適用されるため、監視対象の AWS リージョンに導入する必要があります。

**製品バージョン**
+ Amazon EMR 5.16.0 以降

## アーキテクチャ
<a name="ensure-amazon-emr-logging-to-amazon-s3-is-enabled-at-launch-architecture"></a>

**ターゲットテクノロジースタック**
+ Amazon CloudWatch Events イベント
+ Amazon EMR
+ Lambda function
+ S3 バケット
+ Amazon SNS

**ターゲットアーキテクチャ **

![\[Amazon S3 への Amazon EMR ロギングが起動時に有効になっていることを確認するためのワークフロー\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/079af32e-0418-4bb2-bc20-c67ea5ac3b6e/images/3ba125cb-018a-4ace-838f-8c20992ecc20.png)


**自動化とスケール**
+ AWS Organizations を使用している場合は、[AWS Cloudformation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) を使用して、監視したい複数のアカウントにこのテンプレートをデプロイできます。

## ツール
<a name="ensure-amazon-emr-logging-to-amazon-s3-is-enabled-at-launch-tools"></a>

**ツール**
+ 「[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)」— AWS CloudFormation は、インフラストラクチャをコードとして使用して AWS リソースをモデル化およびセットアップするのに役立ちます。
+ 「[AWS Cloudwatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html)」– AWS CloudWatch Events は、AWS リソースでの変更を説明するシステムイベントのほぼリアルタイムのストリームを提供します。
+ 「[Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html)」— Amazon EMR は、ビッグデータフレームワークの実行を簡素化するマネージド型クラスタープラットフォームです。
+ 「[AWS Lambda](https://aws.amazon.com/lambda/)」— AWS Lambda は、サーバーをプロビジョニングまたは管理しなくてもコードを実行できます。Lambda は必要に応じてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケールします。
+ 「[Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html)」– Amazon S3 はウェブサービスインターフェイスで、ウェブのどこからでも容量に関係なくデータを格納および取得できます。
+ 「[Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)」— Amazon SNS は、ウェブサーバーや E メールアドレスを含む、パブリッシャーとクライアント間のメッセージの配信または送信を、調整および管理するウェブサービスです。

**Code**
+ プロジェクトの.zip ファイルは添付ファイルとして入手できます。

## エピック
<a name="ensure-amazon-emr-logging-to-amazon-s3-is-enabled-at-launch-epics"></a>

### S3 バケットを定義
<a name="define-the-s3-bucket"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| S3 バケットを定義します。 | Lambda コードの .zip ファイルをホストするには、先頭にスラッシュを含まない一意の名前で S3 バケットを選択または作成します。S3 バケット名はグローバルに一意であり、名前空間はすべての AWS アカウントによって共有されています。S3 バケットは、評価されている Amazon EMR クラスターと同じ AWS リージョンに存在する必要があります。 | クラウドアーキテクト | 

### S3 バケットに Lambda コードをアップロードします
<a name="upload-the-lambda-code-to-the-s3-bucket"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| S3 バケットに Lambda コードをアップロードします。 | 「添付ファイル」セクションで提供されている Lambda コードの.zip ファイルを S3 バケットにアップロードします。S3 バケットは、評価されている Amazon EMR クラスターと同じリージョンに存在する必要があります。 | クラウドアーキテクト | 

### AWS CloudFormation テンプレートをデプロイする
<a name="deploy-the-aws-cloudformation-template"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS CloudFormation のテンプレートをデプロイします。 | AWS CloudFormation コンソールで、S3 バケットと同じリージョンに、このパターンへのアタッチメントとして提供されている AWS CloudFormation テンプレートをデプロイします。次のエピックでは、パラメータの値を指定します。AWS CloudFormation テンプレートのデプロイの詳細については、「関連リソース」セクションを参照してください。 | クラウドアーキテクト | 

### AWS CloudFormation テンプレートのパラメータを入力します
<a name="complete-the-parameters-in-the-aws-cloudformation-template"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| S3 バケットに名前を付けます。 | 最初のエピックで作成した S3 バケットの名前を入力します。 | クラウドアーキテクト | 
| Amazon S3 キーを指定します。 | S3 バケット内の Lambda コードの .zip ファイルの場所を、先頭にスラッシュを付けずに指定します (例、<directory>/<file-name>.zip)。 | クラウドアーキテクト | 
| Eメールアドレスを入力します。 | Amazon SNS 通知を受信するための有効な Eメールアドレスを指定します。 | クラウドアーキテクト | 
| ロギングのレベルを定義します。 | Lambda 関数のロギングレベルと頻度を定義します。「Info」はアプリケーションの進行状況に関する詳細な情報メッセージを表します。「Error」は、それでもアプリケーションの実行を継続できるエラーイベントを示します。「Warning」は潜在的に有害な状況を示します。 | クラウドアーキテクト | 

### サブスクリプションを確認
<a name="confirm-the-subscription"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| サブスクリプションを確認します。 | テンプレートが正常にデプロイされると、指定したメールアドレスに購読メールメッセージが送信されます。違反通知を受信するには、このメールサブスクリプションを確認する必要があります。 | クラウドアーキテクト | 

## 関連リソース
<a name="ensure-amazon-emr-logging-to-amazon-s3-is-enabled-at-launch-resources"></a>
+ [AWS Lambda](https://aws.amazon.com/lambda/)
+ 「[Amazon EMR ロギング](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-debugging.html)」
+ 「[AWS CloudFormation テンプレートをデプロイ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)」 

## アタッチメント
<a name="attachments-079af32e-0418-4bb2-bc20-c67ea5ac3b6e"></a>

このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「[attachment.zip](samples/p-attach/079af32e-0418-4bb2-bc20-c67ea5ac3b6e/attachments/attachment.zip)」

# AWS Glue ジョブと Python を使用してテストデータを生成します
<a name="generate-test-data-using-an-aws-glue-job-and-python"></a>

*Moinul Al-Mamun、Amazon Web Services*

## 概要
<a name="generate-test-data-using-an-aws-glue-job-and-python-summary"></a>

このパターンは、Python で記述された AWS Glue ジョブを作成することで、何百万ものサンプルファイルをすばやく簡単に同時に生成する方法を示しています。サンプルファイルは Amazon Simple Storage Service (Amazon S3) のバケットに保存されています。大量のサンプルファイルをすばやく生成できることは、AWS クラウド内のサービスをテストまたは評価する上で重要です。たとえば、Amazon S3 プレフィックス内の何百万もの小さなファイルに対してデータ分析を実行することで、AWS Glue Studio または AWS Glue DataBrew ジョブのパフォーマンスをテストできます。

他の AWS のサービスを使用してサンプルデータセットを生成できますが、AWS Glue を使用することをお勧めします。AWS Glue はサーバーレスのデータ処理サービスであるため、インフラストラクチャを管理する必要はありません。コードを持ち込んで AWS Glue クラスターで実行するだけで済みます。さらに、AWS Glue はジョブの実行に必要なリソースをプロビジョニング、設定、スケーリングします。ジョブの実行中に使用したリソースに対してのみ料金を支払います。

## 前提条件と制限
<a name="generate-test-data-using-an-aws-glue-job-and-python-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント。
+ AWS コマンドラインインターフェイス(AWS CLI)、AWS アカウントと連携するように「[インストール](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」および「[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)」されている

**製品バージョン**
+ Python 3.9
+ AWS CLI バージョン 2

機能制限

トリガーあたりの AWS Glue ジョブの最大数は 50 です。詳細については、「[AWS Glue のエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/glue.html)」を参照してください。

## アーキテクチャ
<a name="generate-test-data-using-an-aws-glue-job-and-python-architecture"></a>

次の図は、出力 (つまりサンプルファイル) を S3 バケットに書き込む AWS Glue ジョブを中心としたアーキテクチャの例を示しています。

![\[ワークフローは、AWS CLI により、S3 バケットに出力を書き込む AWS Glue ジョブが開始されることを示しています。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/f35943e8-3b2b-410e-a3f0-05e1ebd357d0/images/452ccbda-71f2-42b8-976d-bcc968bb1dab.png)


この図には、次のワークフローが含まれている。

1. AWS CLI、AWS マネジメントコンソール、または API を使用して、AWS Glue ジョブの開始を行います。AWS CLI または API を使用すると、呼び出されたジョブの並列化を自動化し、サンプルファイルを生成するためのランタイムを短縮できます。

1. AWS Glue ジョブは、ファイルコンテンツをランダムに生成し、そのコンテンツを CSV 形式に変換して、共通のプレフィックスの下で Amazon S3 オブジェクトとして保存します。各ファイルは 1 KB 未満です。AWS Glue ジョブは、`START_RANGE` と `END_RANGE` の 2 つのユーザー定義ジョブパラメータを受け入れます。これらのパラメータを使用して、ジョブを実行するたびに Amazon S3 で生成されるファイル名とファイル数を設定できます。このジョブの複数のインスタンス (たとえば、100 インスタンス) を並行実行できます。

## ツール
<a name="generate-test-data-using-an-aws-glue-job-and-python-tools"></a>
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。
+ 「[AWS コマンドラインインターフェイス (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)」は、オープンソースのツールであり、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りすることができます。
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) は、フルマネージド型の抽出、変換、ロード (ETL) サービスです。これにより、データストアとデータストリーム間でのデータの分類、整理、強化、移動を確実に行うことができます。
+ 「[AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。

## ベストプラクティス
<a name="generate-test-data-using-an-aws-glue-job-and-python-best-practices"></a>

このパターンを実装する際には、次の AWS Glue のベストプラクティスを検討してください。
+ 適切な AWS Glue ワーカータイプを使用してコストを削減します。ワーカータイプのさまざまなプロパティを理解し、CPU とメモリの要件に基づいてワークロードに適したワーカータイプを選択することをお勧めします。このパターンでは、DPU を最小限に抑えてコストを削減するために、Python シェルジョブをジョブタイプとして使用することをお勧めします。詳細については、AWS Glue 開発者ガイドの「[AWS Glue でのジョブの追加](https://docs.aws.amazon.com/glue/latest/dg/add-job.html)」を参照してください。
+ 同時実行数の上限を適切に設定してジョブをスケールしてください。AWS Glue ジョブの最大同時実行数は、時間要件と必要なファイル数に基づいて設定することをお勧めします。
+ 最初は、少数のファイルの生成から始めてください。AWS Glue ジョブを構築する際のコスト削減と時間の節約のため、最初は少数のファイル (1,000 など) から始めてください。これにより、トラブルシューティングが容易になります。少数のファイルの生成に成功すれば、より多くのファイル数に拡張できます。
+ 最初にローカルで実行します。AWS Glue ジョブを構築する際のコストを削減し、時間を節約するには、ローカルで開発を開始し、コードをテストしてください。シェルと統合開発環境 (IDE) の両方で AWS Glue の抽出、変換、ロード (ETL) ジョブを作成するのに役立つ Docker コンテナの設定方法については、AWS ビッグデータブログの「[コンテナを使用して AWS Glue ETL ジョブをローカルで開発する](https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/)」を参照してください。

AWS Glue のその他のベストプラクティスについては、AWS Glue ドキュメントの「[ベストプラクティス](https://docs.aws.amazon.com/prescriptive-guidance/latest/serverless-etl-aws-glue/best-practices.html)」を参照してください。

## エピック
<a name="generate-test-data-using-an-aws-glue-job-and-python-epics"></a>

### 送信先 S3 バケットと IAM ロールの作成
<a name="create-a-destination-s3-bucket-and-iam-role"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ファイルを保存する S3 バケットを作成します。 | 「[S3 バケット](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)」とその中に「[プレフィックス](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-prefixes.html)」を作成します。このパターンでは、`s3://{your-s3-bucket-name}/small-files/` ロケーションをデモンストレーションに使用しています。 | アプリ開発者 | 
| IAM ロールを作成して設定します。 | AWS Glue ジョブが S3 バケットへの書き込みに使用できる IAM ロールを作成する必要があります。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/generate-test-data-using-an-aws-glue-job-and-python.html) | アプリ開発者 | 

### 同時実行を処理するように AWS Glue ジョブを作成して設定する
<a name="create-and-configure-an-aws-glue-job-to-handle-concurrent-runs"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS Glue ジョブの作成 | コンテンツを生成して S3 バケットに保存する AWS Glue ジョブを作成する必要があります。「[AWS Glue ジョブを作成](https://docs.aws.amazon.com/glue/latest/dg/console-jobs.html)」し、次のステップを完了してジョブを設定します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/generate-test-data-using-an-aws-glue-job-and-python.html) | アプリ開発者 | 
| ジョブのコードを更新する。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/generate-test-data-using-an-aws-glue-job-and-python.html) | アプリ開発者 | 

### コマンドラインまたはコンソールから AWS Glue ジョブを実行する
<a name="run-the-aws-glue-job-from-the-command-line-or-console"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| コマンドラインから AWS Glue ジョブの実行を行います。 | AWS Glue ジョブの実行を AWS CLI から実行するには、指定した値を使用して次のコマンドを実行します。<pre>cmd:~$ aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"0","--END_RANGE":"1000000"}'<br />cmd:~$ aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1000000","--END_RANGE":"2000000"}'</pre>AWS マネジメントコンソールから AWS Glue ジョブを実行する手順については、このパターンの「*AWS マネジメントコンソールで AWS Glue ジョブを実行します*」ストーリーを参照してください。上記の例のように、異なるパラメータで一度に複数の実行を実行する場合は、AWS CLI を使用して AWS Glue ジョブを実行することをお勧めします。特定の並列化係数を使用して定義済みの数のファイルを生成するために必要なすべての AWS CLI コマンドを生成するには、次の bash コードを (指定した値を使用して) 実行します。<pre># define parameters<br />NUMBER_OF_FILES=10000000;<br />PARALLELIZATION=50; <br /> <br /># initialize<br />_SB=0;<br />      <br /># generate commands<br />for i in $(seq 1 $PARALLELIZATION); <br />do <br />      echo aws glue start-job-run --job-name create_small_files --arguments "'"'{"--START_RANGE":"'$(((NUMBER_OF_FILES/PARALLELIZATION) * (i-1) + _SB))'","--END_RANGE":"'$(((NUMBER_OF_FILES/PARALLELIZATION) * (i)))'"}'"'";<br />      _SB=1; <br />done</pre>上記のスクリプトを使用する場合は、次の点を考慮してください。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/generate-test-data-using-an-aws-glue-job-and-python.html) 上記のスクリプトの出力例については、このパターンの「*追加情報*」セクションにある「*シェルスクリプト出力*」を参照してください。 | アプリ開発者 | 
| AWS マネジメントコンソールで AWS Glue ジョブを実行します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/generate-test-data-using-an-aws-glue-job-and-python.html) | アプリ開発者 | 
| AWS Glue ジョブのステータスを確認します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/generate-test-data-using-an-aws-glue-job-and-python.html) | アプリ開発者 | 

## 関連リソース
<a name="generate-test-data-using-an-aws-glue-job-and-python-resources"></a>

**リファレンス**
+ 「[Registry of Open Data on AWS](https://registry.opendata.aws/)」
+ 「[分析用データセット](https://aws.amazon.com/marketplace/solutions/data-analytics/data-sets)」
+ 「[AWS のオープンデータ](https://aws.amazon.com/opendata/)」
+ 「[AWS Glue でのジョブ追加](https://docs.aws.amazon.com/glue/latest/dg/add-job.html)」
+ 「[AWS Glue の使用開始](https://aws.amazon.com/glue/getting-started/)」

**ガイドとパターン**
+ 「[AWS Glue のベストプラクティス](https://docs.aws.amazon.com/prescriptive-guidance/latest/serverless-etl-aws-glue/best-practices.html)」
+ 「[アプリケーションの負荷テスト](https://docs.aws.amazon.com/prescriptive-guidance/latest/load-testing/welcome.html)」

## 追加情報
<a name="generate-test-data-using-an-aws-glue-job-and-python-additional"></a>

ベンチマークテスト

このパターンを使用して、ベンチマークテストの一環として、さまざまな並列化パラメーターを使用して 1,000 万個のファイルを生成しました。次のテーブルは、テストの出力を示しています。


| 
| 
| 並列化 | 1 回のジョブ実行で生成されるファイルの数 | ジョブ所要時間 | [Speed] (スピード) | 
| --- |--- |--- |--- |
| 10 | 1,000,000 | 6 時間、40 分 | とても遅い | 
| 50 | 200,000 件の | 80 分 | 中 | 
| 100 | 100,000 | 40 分 | 高速 | 

処理を速くしたい場合は、ジョブ設定で同時実行数を増やすことができます。要件に基づいてジョブ設定を簡単に調整できますが、AWS Glue サービスのクォータ制限があることに注意してください。詳細については、「[AWS Glue のエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/glue.html)」を参照してください。

シェルスクリプト出力

次の例は、このパターンの「*コマンドラインから AWS Glue ジョブの実行を行います*」ストーリーのシェルスクリプトの出力を示しています。

```
user@MUC-1234567890 MINGW64 ~
  $ # define parameters
  NUMBER_OF_FILES=10000000;
  PARALLELIZATION=50;
  # initialize
  _SB=0;
   
  # generate commands
  for i in $(seq 1 $PARALLELIZATION);
   do
         echo aws glue start-job-run --job-name create_small_files --arguments "'"'{"--START_RANGE":"'$(((NUMBER_OF_FILES/PARALLELIZATION)  (i-1) + SB))'","--ENDRANGE":"'$(((NUMBER_OF_FILES/PARALLELIZATION)  (i)))'"}'"'";
         _SB=1;
   done
   
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"0","--END_RANGE":"200000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"200001","--END_RANGE":"400000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"400001","--END_RANGE":"600000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"600001","--END_RANGE":"800000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"800001","--END_RANGE":"1000000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1000001","--END_RANGE":"1200000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1200001","--END_RANGE":"1400000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1400001","--END_RANGE":"1600000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1600001","--END_RANGE":"1800000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1800001","--END_RANGE":"2000000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2000001","--END_RANGE":"2200000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2200001","--END_RANGE":"2400000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2400001","--END_RANGE":"2600000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2600001","--END_RANGE":"2800000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2800001","--END_RANGE":"3000000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3000001","--END_RANGE":"3200000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3200001","--END_RANGE":"3400000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3400001","--END_RANGE":"3600000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3600001","--END_RANGE":"3800000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3800001","--END_RANGE":"4000000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4000001","--END_RANGE":"4200000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4200001","--END_RANGE":"4400000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4400001","--END_RANGE":"4600000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4600001","--END_RANGE":"4800000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4800001","--END_RANGE":"5000000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5000001","--END_RANGE":"5200000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5200001","--END_RANGE":"5400000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5400001","--END_RANGE":"5600000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5600001","--END_RANGE":"5800000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5800001","--END_RANGE":"6000000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6000001","--END_RANGE":"6200000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6200001","--END_RANGE":"6400000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6400001","--END_RANGE":"6600000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6600001","--END_RANGE":"6800000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6800001","--END_RANGE":"7000000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7000001","--END_RANGE":"7200000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7200001","--END_RANGE":"7400000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7400001","--END_RANGE":"7600000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7600001","--END_RANGE":"7800000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7800001","--END_RANGE":"8000000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8000001","--END_RANGE":"8200000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8200001","--END_RANGE":"8400000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8400001","--END_RANGE":"8600000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8600001","--END_RANGE":"8800000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8800001","--END_RANGE":"9000000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9000001","--END_RANGE":"9200000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9200001","--END_RANGE":"9400000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9400001","--END_RANGE":"9600000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9600001","--END_RANGE":"9800000"}'
  aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9800001","--END_RANGE":"10000000"}'
  
  user@MUC-1234567890 MINGW64 ~
```

**よくある質問**

同時実行または並列ジョブはいくつ使用すべきですか?

同時実行数と並行ジョブ数は、所要時間と必要なテストファイル数によって異なります。作成するファイルのサイズを確認することをお勧めします。まず、AWS Glue ジョブが希望する数のファイルを生成するのにかかる時間を確認します。次に、目標に合わせて適切な数の同時実行を行います。たとえば、100,000 ファイルの実行が完了するまでに 40 分かかるが、目標時間が 30 分であると仮定した場合、AWS Glue ジョブの同時実行設定を増やす必要があります。

このパターンではどのようなコンテンツを作成できますか?

区切り文字が異なるテキストファイル (PIPE、JSON、CSV など) など、あらゆる種類のコンテンツを作成できます。このパターンでは、Boto3 を使用してファイルに書き込み、そのファイルを S3 バケットに保存します。

S3 バケットにはどのレベルの IAM 権限が必要ですか?

S3 バケット内のオブジェクトへの `Write` アクセスを許可する ID ベースのポリシーが必要です。詳細については、Amazon S3 ドキュメントの「[Amazon S3: S3 バケットのオブジェクトへの読み取りおよび書き込みのアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_s3_rw-bucket.html)」を参照してください。

# AWS IoT Greengrass を使用して IoT データをコスト効率よく直接 Amazon S3 に取り込む
<a name="cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass"></a>

*Sebastian Viviani、Rizwan Syed (Amazon Web Services)*

## 概要
<a name="cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass-summary"></a>

このパターンは、AWS IoT Greengrass バージョン 2 デバイスを使用して、コスト効率よくモノのインターネット (IoT) データを Amazon Simple Storage Service (Amazon S3) バケットに直接取り込む方法を示しています。デバイスは、IoT データを読み取り、データを永続ストレージ (つまり、ローカルディスクまたはボリューム) に保存するカスタムコンポーネントを実行します。次に、デバイスは IoT データを Apache Parquet ファイルに圧縮し、そのデータを定期的に S3 バケットにアップロードします。

取り込むIoTデータの量と速度は、エッジハードウェアの機能とネットワーク帯域幅によってのみ制限されます。Amazon Athena を使用すれば、取り込んだデータをコスト効率よく分析することができます。Athena は、圧縮された Apache Parquet ファイルと「[Amazon Managed Grafana](https://docs.aws.amazon.com/grafana/latest/userguide/what-is-Amazon-Managed-Service-Grafana.html)」によるデータの視覚化をサポートしています。

## 前提条件と制限
<a name="cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント。
+ 「[AWS IoT Greengrass Version 2](https://docs.aws.amazon.com/greengrass/v2/developerguide/greengrass-v2-whats-new.html)」上で動作し、センサーからデータを収集する「[エッジゲートウェイ](https://docs.aws.amazon.com/greengrass/v1/developerguide/quick-start.html)」 (データソースとデータ収集プロセスはこのパターンの範囲外ですが、ほぼすべての種類のセンサーデータを使用できます。 このパターンでは、センサーを備えたローカル「[MQTT](https://mqtt.org/)」ブローカー、またはデータをローカルに公開するゲートウェイを使用します。)
+ AWS IoT Greengrass 「[コンポーネント](https://docs.aws.amazon.com/greengrass/v2/developerguide/develop-greengrass-components.html)」、「[ロール](https://docs.aws.amazon.com/greengrass/v1/developerguide/service-role.html)」、「[SDK の依存関係](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#installation)」
+ S3 バケットにデータをアップロードする「[ストリームマネージャーコンポーネント](https://docs.aws.amazon.com/greengrass/v2/developerguide/stream-manager-component.html)」
+ API を実行するには「[AWS SDK for Java](https://aws.amazon.com/sdk-for-java/)」の AWS SDK、「[JavaScript 用の AWS SDK](https://aws.amazon.com/sdk-for-javascript/)」、または 「[AWS SDK for Python (Boto3)](https://docs.aws.amazon.com/pythonsdk/)」

**制限事項**
+ このパターンのデータは S3 バケットにリアルタイムでアップロードされません。遅延期間があり、遅延期間を設定できます。データは一時的にエッジデバイスにバッファされ、期間が終了するとアップロードされます。
+ SDK は、Java、Node.js、Python で使用できます。

## アーキテクチャ
<a name="cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass-architecture"></a>

**ターゲットテクノロジースタック**
+ Amazon S3
+ AWS IoT Greengrass
+ MQTT ブローカー
+ ストリームマネージャーコンポーネント

**ターゲットアーキテクチャ**

次の図は、IoT センサーデータを取り込み、そのデータを S3 バケットに保存するように設計されたアーキテクチャを示しています。

![\[アーキテクチャ図\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/b9032ae2-fffb-4750-b161-09810e19d878/images/8c28e639-5dcf-4950-b4a6-8015ec1a2894.png)


この図表は、次のワークフローを示しています:

1. 複数のセンサー (温度やバルブなど) の更新がローカルの MQTT ブローカーに公開されます。

1. これらのセンサーにサブスクライブされている Parquet ファイルコンプレッサーは、トピックを更新し、更新を受信します。

1. Parquet ファイルコンプレッサーは更新をローカルに保存します。

1. 期間が経過すると、保存されたファイルは Parquet ファイルに圧縮され、ストリームマネージャーに渡され、指定された S3 バケットにアップロードされます。

1. ストリームマネージャーは Parquet ファイルを S3 バケットにアップロードします。

**注記**  
ストリームマネージャー (`StreamManager`) は管理対象コンポーネントです。Amazon S3 にデータをエクスポートする方法の例については、AWS IoT Greengrass ドキュメントの「[ストリームマネージャー](https://docs.aws.amazon.com/greengrass/v2/developerguide/stream-manager-component.html)」を参照してください。ローカルの MQTT ブローカーをコンポーネントとして使用することも、「[Eclipse Mosquitto](https://mosquitto.org/)」のような別のブローカーを使用することもできます。

## ツール
<a name="cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass-tools"></a>

**AWS ツール**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) はインタラクティブなクエリサービスで、Amazon S3 内のデータをスタンダード SQL を使用して直接、簡単に分析します。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。
+ [AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html) は、デバイス上で IoT アプリケーションを構築、デプロイ、管理するのに役立つオープンソースの IoT エッジランタイムおよびクラウドサービスです。

**その他のツール**
+ 「[Apache Parquet](https://parquet.apache.org/)」は、ストレージとデータの取得を目的として設計されたオープンソースの列指向データファイル形式です。
+ [MQTT](https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html) (メッセージキューテレメトリートランスポート) は、制約のあるデバイス向けに設計された軽量のメッセージングプロトコルです。

## ベストプラクティス
<a name="cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass-best-practices"></a>

**アップロードされたデータには適切なパーティション形式を使用してください。**

S3 バケットのルートプレフィックス名 (たとえば、`"myAwesomeDataSet/"`や`"dataFromSource"`) には特定の要件はありませんが、データセットの目的がわかりやすいように、わかりやすいパーティションとプレフィックスを使用することをお勧めします。

また、クエリがデータセットで最適に実行されるように、Amazon S3 では適切なパーティション分割を使用することをお勧めします。次の例では、各 Athena クエリでスキャンされるデータ量が最適化されるように、データを HIVE 形式で分割しています。これにより、パフォーマンスを向上させ、コストを削減できます。

`s3://<ingestionBucket>/<rootPrefix>/year=YY/month=MM/day=DD/HHMM_<suffix>.parquet`

## エピック
<a name="cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass-epics"></a>

### 環境をセットアップします。
<a name="set-up-your-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| S3 バケットを作成する。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass.html) | アプリ開発者 | 
| IAM を追加して、S3 バケットへの許可を提供します。 | 以前に作成した S3 バケットとプレフィックスへの書き込みアクセスをユーザーに許可するには、次の IAM ポリシーを AWS IoT Greengrass ロールに追加します。<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Sid": "S3DataUpload",<br />            "Effect": "Allow",<br />            "Action": [<br />                "s3:List*",<br />                "s3:Put*"<br />            ],<br />            "Resource": [<br />                "arn:aws:s3:::<ingestionBucket>",<br />                "arn:aws:s3:::<ingestionBucket>/<prefix>/*"<br />            ]<br />        }<br />    ]<br />}</pre>詳細については、Aurora ドキュメントの「[Amazon S3 リソースにアクセスするための IAM ポリシーの作成](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.S3CreatePolicy.html)」を参照してください。次に、S3 バケットのリソースポリシー (必要な場合) を更新して、正しい AWS 「[プリンシパル](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-bucket-user-policy-specifying-principal-intro.html)」による書き込みアクセスを許可します。 | アプリ開発者 | 

### AWS IoT Greengrass コンポーネントを開発して構築します。
<a name="build-and-deploy-the-aws-iot-greengrass-component"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| コンポーネントのレシピを更新します。 | 「[デプロイを作成](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-deployments.html)」するときは、次の例に基づいて「[コンポーネント設定を更新](https://docs.aws.amazon.com/greengrass/v2/developerguide/update-component-configurations.html)」します。<pre>{<br />  "region": "<region>",<br />  "parquet_period": <period>,<br />  "s3_bucket": "<s3Bucket>",<br />  "s3_key_prefix": "<s3prefix>"<br />}</pre>`<region>`をAWSリージョン、`<period>`を周期間隔、`<s3Bucket>`をS3バケット、`<s3prefix>`をプレフィックスに置き換えます。 | アプリ開発者 | 
| コンポーネントを作成します。 | 次のいずれかを行います。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass.html) | アプリ開発者 | 
| MQTT クライアントを更新してください。 | このサンプルコードでは、コンポーネントはブローカーにローカルに接続するため、認証を使用していません。シナリオが異なる場合は、必要に応じて MQTT クライアントセクションを更新してください。さらに、以下の作業を行います。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass.html) | アプリ開発者 | 

### AWS IoT Greengrass バージョン 2 コアデバイスにコンポーネントを追加します。
<a name="add-the-component-to-the-aws-iot-greengrass-version-2-core-device"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| コアデバイスのデプロイを更新します。 | AWS IoT Greengrass バージョン 2 コアデバイスのデプロイがすでに存在する場合は、「[デプロイを修正](https://docs.aws.amazon.com/greengrass/v2/developerguide/revise-deployments.html)」します。デプロイが存在しない場合は、「[新しいデプロイを作成](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-deployments.html)」します。コンポーネントに正しい名前を付けるには、以下に基づいて新しいコンポーネントの「[ログマネージャー設定を更新](https://docs.aws.amazon.com/greengrass/v2/developerguide/log-manager-component.html)」します (必要に応じて) 。<pre>{<br />  "logsUploaderConfiguration": {<br />    "systemLogsConfiguration": {<br />    ...<br />    },<br />    "componentLogsConfigurationMap": {<br />      "<com.iot.ingest.parquet>": {<br />        "minimumLogLevel": "INFO",<br />        "diskSpaceLimit": "20",<br />        "diskSpaceLimitUnit": "MB",<br />        "deleteLogFileAfterCloudUpload": "false"<br />      }<br />      ...<br />    }<br />  },<br />  "periodicUploadIntervalSec": "300"<br />}</pre>最後に、お使いの AWS IoT Greengrass コアデバイスのデプロイのリビジョンを完了します。 | アプリ開発者 | 

### S3 バケットへのデータの取り込みを確認します。
<a name="verify-data-ingestion-into-the-s3-bucket"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS IoT Greengrass ボリュームのログを確認してください。 | 以下を確認します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass.html) | アプリ開発者 | 
| S3 バケットを確認します。 | S3 バケットにデータがアップロードされているかどうかを確認します。各期間にアップロードされているファイルを確認できます。次のセクションでデータをクエリすることで、データが S3 バケットにアップロードされたかどうかを確認することもできます。 | アプリ開発者 | 

### Athena からのクエリを設定する
<a name="set-up-querying-from-athena"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| データベースとテーブルを作成します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass.html) | アプリ開発者 | 
| Athena にデータへのアクセスを許可します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass.html) | アプリデベロッパー | 

## トラブルシューティング
<a name="cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| MQTT クライアントは接続に失敗します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass.html) | 
| MQTT クライアントがサブスクライブに失敗する | MQTT ブローカーの権限を検証してください。AWS の MQTT ブローカーをお持ちの場合は、「[MQTT 3.1.1 ブローカー (モケット)](https://docs.aws.amazon.com/greengrass/v2/developerguide/mqtt-broker-moquette-component.html)」と「[MQTT 5 ブローカー (EMQX](https://docs.aws.amazon.com/greengrass/v2/developerguide/mqtt-broker-emqx-component.html))」を参照してください。 | 
| パーケットファイルは作成されません。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass.html) | 
| オブジェクトは S3 バケットにアップロードされません。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass.html) | 

## 関連リソース
<a name="cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass-resources"></a>
+ [DataFrame](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html) (Pandas ドキュメンテーション)
+ [Apache パーケットドキュメンテーション](https://parquet.apache.org/docs/) (パーケットドキュメント)
+ [AWS IoT Greengrass コンポーネントの開発](https://docs.aws.amazon.com/greengrass/v2/developerguide/develop-greengrass-components.html) (AWS IoT Greengrass 開発者ガイド、バージョン 2)
+ [AWS IoT Greengrass コンポーネントをデバイスにデプロイ](https://docs.aws.amazon.com/greengrass/v2/developerguide/manage-deployments.html) (AWS IoT Greengrass 開発者ガイド、バージョン 2)
+ [ローカルの IoT デバイスとのやり取り](https://docs.aws.amazon.com/greengrass/v2/developerguide/interact-with-local-iot-devices.html) (AWS IoT Greengrass 開発者ガイド、バージョン 2)
+ [MQTT 3.1.1 ブローカー (Moquette)](https://docs.aws.amazon.com/greengrass/v2/developerguide/mqtt-broker-moquette-component.html) (AWS IoT Greengrass 開発者ガイド、バージョン 2)
+ [MQTT 5 ブローカー (EMQX)](https://docs.aws.amazon.com/greengrass/v2/developerguide/mqtt-broker-emqx-component.html) (AWS IoT Greengrass 開発者ガイド、バージョン 2)

## 追加情報
<a name="cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass-additional"></a>

**コスト分析**

次のコスト分析シナリオは、このパターンで取り上げられているデータ取り込みアプローチが AWS クラウドのデータ取り込みコストにどのように影響するかを示しています。このシナリオの料金例は、公開時の価格に基づいています。価格は変更されることがあります。さらに、費用は AWS リージョン、AWS Service Quotas、およびクラウド環境に関連するその他の要因によって異なる場合があります。

*入力信号セット*

この分析では、IoT の取り込みコストを他の利用可能な代替手段と比較するための基礎として、以下の入力信号セットを使用します。


| 
| 
| シグナル数。 | 頻度 | 1 信号あたりのデータ | 
| --- |--- |--- |
| 125 | 25 ヘルツ | 8 バイト | 

このシナリオでは、システムは 125 個の信号を受信します。各信号は 8 バイトで、40 ミリ秒 (25 Hz) ごとに発生します。これらの信号は、個別に受信することも、共通のペイロードにまとめて送信することもできます。これらの信号は、必要に応じて分割してパックすることができます。レイテンシーも決定できます。レイテンシーは、データの受信、蓄積、および取り込みにかかる時間で構成されます。

比較のため、このシナリオの取り込み操作は `us-east-1` AWS リージョンをベースにしています。コスト比較は AWS サービスにのみ適用されます。ハードウェアや接続などの他のコストは、分析には考慮されません。

*コスト比較*

次の表は、各取り込み方法の月額費用を米ドル (USD) で示しています。


| 
| 
| Method | 月額コスト | 
| --- |--- |
| AWS IoT SiteWise\$1 | 331.77 米ドル | 
| データ処理パック付きの AWS IoT SiteWise Edge (すべてのデータをエッジに保持) | 200 米ドル | 
| 未加工データにアクセスするための AWS IoT Core と Amazon S3 のルール | 84.54 米ドル | 
| エッジでの Parquet ファイルの圧縮と Amazon S3 へのアップロード | 0.5米ドル | 

\$1サービスクォータを満たすには、データをダウンサンプリングする必要があります。つまり、この方法ではデータの一部が失われるということです。

*代替方法*

このセクションでは、以下の代替方法の等価コストを示します。
+ **AWS IoT SiteWise** — 各シグナルは個別のメッセージでアップロードする必要があります。したがって、1 か月あたりのメッセージの総数は 125×25×3600×24×30、つまり 1 か月あたり 81 億メッセージになります。ただし、AWS IoT SiteWise は、プロパティごとに 1 秒あたり 10 データポイントしか処理できません。データが 10 Hz にダウンサンプリングされると仮定すると、1 か月あたりのメッセージ数は 125×10×3600×24×30、つまり 32.4 億に減少します。測定値を 10 件グループ (100 万メッセージあたり 1 USD) にまとめるパブリッシャーコンポーネントを使用すると、1 か月あたり 324 USD の月額料金が発生します。各メッセージが 8 バイト (1 Kb/125) であると仮定すると、25.92 GB のデータストレージになります。これにより、1 か月あたり 7.77 USD の月額コストが加算されます。初月の総費用は 331.77 米ドルで、毎月 7.77 米ドルずつ増加します。
+ **エッジで完全に処理されたすべてのモデルと信号を含む、データ処理パック付きのAWS IoT SiteWise Edge (つまり、クラウドインジェストなし)** — コストを削減し、エッジで計算されるすべてのモデルを設定するための代替手段としてデータ処理パックを使用できます。これは、実際の計算を行わなくても、保存と視覚化のためだけに機能します。この場合、エッジゲートウェイには強力なハードウェアを使用する必要があります。1 か月あたり 200 米ドルの固定費がかかります。
+ **MQTT と Amazon S3 に生データを保存するための IoT ルールによる AWS IoT Core への直接取り込み** — すべてのシグナルが共通のペイロードでパブリッシュされると仮定すると、AWS IoT Core にパブリッシュされるメッセージの総数は 25×3600×24×30、つまり 1 か月あたり 6,480 万件になります。100 万メッセージあたり 1 米ドルとすると、1 か月あたり 64.8 米ドルの月額料金になります。100 万回のルール有効化あたり 0.15 USD で、メッセージごとに 1 つのルールを設定すると、1 か月あたり 19.44 USD の月額料金が加算されます。Amazon S3 のストレージ 1 GB あたり 0.023 USD のコストで、1 か月あたり 1.5 USD が追加されます (新しいデータを反映して毎月増加しています)。最初の 1 か月の総コストは 84.54 米ドルで、毎月 1.5 米ドルずつ増加します。
+ **Parquetファイルの端でデータを圧縮してAmazon S3 にアップロードする（提案方法）**— 圧縮率はデータの種類によって異なります。同じ産業用データを MQTT でテストした場合、1 か月分の出力データの合計は 1.2 Gb になります。これには 1 か月あたり 0.03 米ドルかかります。他のベンチマークで説明されている圧縮率 (ランダムデータを使用) は、約 66% (最悪のシナリオに近い) です。データの合計は 21 Gb で、1 か月あたり 0.5 米ドルかかります。

**Parquetファイルジェネレーター**

次のコード例は、Python で記述された Parquet ファイルジェネレーターの構造を示しています。このコード例は説明のみを目的としており、ご使用の環境に貼り付けても動作しません。

```
import queue
import paho.mqtt.client as mqtt
import pandas as pd

#queue for decoupling the MQTT thread
messageQueue = queue.Queue()
client = mqtt.Client()
streammanager = StreamManagerClient()

def feederListener(topic, message):
    payload = {
        "topic" : topic,
        "payload" : message,
    }
    messageQueue.put_nowait(payload)

def on_connect(client_instance, userdata, flags, rc):
    client.subscribe("#",qos=0)

def on_message(client, userdata, message):
    feederListener(topic=str(message.topic), message=str(message.payload.decode("utf-8")))


filename = "tempfile.parquet"
streamname = "mystream"
destination_bucket= "amzn-s3-demo-bucket"
keyname="mykey"
period= 60

client.on_connect = on_connect
client.on_message = on_message
streammanager.create_message_stream(
            MessageStreamDefinition(name=streamname, strategy_on_full=StrategyOnFull.OverwriteOldestData)
        )


while True:
   try:
       message = messageQueue.get(timeout=myArgs.mqtt_timeout)
   except (queue.Empty):
       logger.warning("MQTT message reception timed out")

   currentTimestamp = getCurrentTime()
   if currentTimestamp >= nextUploadTimestamp:
       df = pd.DataFrame.from_dict(accumulator)
       df.to_parquet(filename)
       s3_export_task_definition = S3ExportTaskDefinition(input_url=filename, bucket=destination_bucket, key=key_name)
       streammanager.append_message(streamname, Util.validate_and_serialize_to_json_bytes(s3_export_task_definition))
       accumulator = {}
       nextUploadTimestamp += period
   else:
        accumulator.append(message)
```

# Lambda 関数を使用して一時的な EMR クラスターで Spark ジョブを起動する
<a name="launch-a-spark-job-in-a-transient-emr-cluster-using-a-lambda-function"></a>

*Amazon Web Services、Dhrubajyoti Mukherjee*

## 概要
<a name="launch-a-spark-job-in-a-transient-emr-cluster-using-a-lambda-function-summary"></a>

このパターンでは、Amazon EMR RunJobFlow API アクションを使用して一時的なクラスターを起動し、Lambda 関数から Spark ジョブを実行します。一時的な EMR クラスターは、ジョブが完了したり、エラーが発生したりするとすぐに終了するように設計されています。一時的なクラスターは計算時間中にのみ実行されるため、コストを節約でき、クラウド環境でのスケーラビリティと柔軟性も高まります。

一時的な EMR クラスターは、Boto3 API と Lambda 関数内の Python プログラミング言語を使用して起動されます。Python で記述された Lambda 関数を使用すると、必要なときにクラスターを柔軟に開始できます。

バッチ計算と出力の例を示すために、このパターンでは、Lambda 関数から EMR クラスター内の Spark ジョブを起動し、架空の会社のサンプル売上データに対してバッチ計算を実行します。Spark ジョブの出力は、Amazon Simple Storage Service (Amazon S3) のカンマ区切り値 (CSV) ファイルになります。入力データファイル、Spark.jarファイル、コードスニペット、仮想プライベートクラウド（VPC）用の AWS CloudFormation テンプレート、計算を実行するための AWS Identity and Access Management（IAM）ロールが添付ファイルとして提供されます。

## 前提条件と制限事項
<a name="launch-a-spark-job-in-a-transient-emr-cluster-using-a-lambda-function-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント

**制限事項**
+ 一度にコードから開始できる Spark ジョブは 1 つだけです。 

**製品バージョン**
+ Amazon EMR 6.0.0 でテスト済み

## アーキテクチャ
<a name="launch-a-spark-job-in-a-transient-emr-cluster-using-a-lambda-function-architecture"></a>

**ターゲットテクノロジースタック**
+ Amazon EMR 
+ AWS Lambda
+ Amazon S3
+ Apache Spark

**ターゲットアーキテクチャ**

![\[Lambda から Amazon EMR へ、Spark から Amazon S3 へ\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/6c999fa7-9550-4929-a5c1-60394142175d/images/eb4fbb3f-2114-44d2-b9da-3fdcb9ca456e.png)


**自動化とスケール**

Spark-EMR のバッチ計算を自動化するには、次のいずれかのオプションを使用できます。
+ cron スケジュールで Lambda 関数を開始できる Amazon EventBridge ルールを実装する。詳細については、「[チュートリアル: EventBridge を使用して AWS Lambda 関数をスケジュールする](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-run-lambda-schedule.html)」を参照してください。
+ ファイルの到着時に Lambda 関数を開始するように [Amazon S3 イベント通知](https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html)を構成する。
+ Event bodyと Lambda 関数を使用して、入力パラメータを AWS Lambda 関数に渡します。

## ツール
<a name="launch-a-spark-job-in-a-transient-emr-cluster-using-a-lambda-function-tools"></a>

** サービス**
+ [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) は、 でビッグデータフレームワーク の実行を簡素化して、大量のデータを処理および分析するマネージドクラスタープラットフォームです。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、任意の量のデータを保存、保護、取得する上で役立つクラウドベースのオブジェクトストレージサービスです。

**その他のツール**
+ [Apache Spark](https://spark.apache.org/docs/latest/) は、大規模データ処理のための複数言語分析エンジンです。

## エピック
<a name="launch-a-spark-job-in-a-transient-emr-cluster-using-a-lambda-function-epics"></a>

### Amazon EMR とLambdaの IAM ロール、および VPC を作成する
<a name="create-the-amazon-emr-and-lambda-iam-roles-and-the-vpc"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| IAM ロールと VPC を作成します。 | AWS Lambda と Amazon EMR の IAM ロールと VPC が既にある場合は、このステップはスキップできます。コードを実行するには、EMR クラスターと Lambda 関数の両方に IAM ロールが必要です。EMR クラスターには、パブリックサブネットを使用する VPC または NAT ゲートウェイを使用するプライベートサブネットも必要です。すべての IAM ロールと VPC を自動的に作成するには、添付された AWS CloudFormation テンプレートをそのままデプロイするか、[*追加情報*] セクションの指定に従ってロールと VPC を手動で作成できます。 | クラウドアーキテクト | 
| AWS CloudFormation テンプレートの出力キーを書き留めます。 | CloudFormation テンプレートが正常にデプロイされたら、AWS CloudFormation コンソールの [**出力**] タブに移動します。5 つの出力キーを書き留めます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/launch-a-spark-job-in-a-transient-emr-cluster-using-a-lambda-function.html)Lambda 関数の作成時に、これらのキーの値を使用します。 | クラウドアーキテクト | 

### Spark .jar ファイルのアップロード
<a name="upload-the-spark-jar-file"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Spark .jar ファイルをアップロードします。 | AWS CloudFormation スタックが作成した S3 バケットに Spark .jar ファイルをアップロードします。バケットの名前は出力キー `S3Bucket` と同じです。 | AWS 全般 | 

### EMR クラスターを起動する Lambda 関数の作成
<a name="create-the-lambda-function-to-launch-the-emr-cluster"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Lambda 関数を作成する。 | Lambda コンソールで、実行ロールを含む Python 3.9 以降の Lambda 関数を作成します。実行ロールポリシーでは、Lambda が EMR クラスターを起動できるようにする必要があります。(添付の AWS CloudFormation テンプレートを参照してください。) | データエンジニア、クラウドエンジニア | 
| コードをコピーして貼り付けます。 | `lambda_function.py` ファイル内のコードを、このパターンの [*追加情報*] セクションのコードに置き換える。 | データエンジニア、クラウドエンジニア | 
| コード内のパラメータの変更。 | コード内のコメントに従って、AWS アカウントに合わせてパラメータ値を変更します。 | データエンジニア、クラウドエンジニア | 
| 関数を起動してクラスターを開始します。 | 関数を起動し、指定された Spark .jar ファイルを使用して一時的な EMR クラスターの作成を開始します。Spark ジョブが実行され、ジョブが完了すると自動的に終了します。 | データエンジニア、クラウドエンジニア | 
| EMR クラスターのステータスを確認します。 | EMR クラスターが開始されると、Amazon EMR コンソールの [**クラスター**] タブに表示されます。クラスターの起動中またはジョブの実行中に発生したエラーは、それに応じて確認できます。 | データエンジニア、クラウドエンジニア | 

### サンプルデモをセットアップして実行する
<a name="set-up-and-run-the-sample-demo"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Spark .jar ファイルをアップロードします。 | [*添付ファイル*] セクションから Spark .jar ファイルをダウンロードし、S3 バケットにアップロードします。 | データエンジニア、クラウドエンジニア | 
| 入力データをアップロードします。 | 添付された `fake_sales_data.csv` ファイルを S3 バケットにアップロードします。 | データエンジニア、クラウドエンジニア | 
| Lambda コードを貼り付けて、パラメータを変更する。 | [**ツール**] セクションからコードをコピーし、そのコードを Lambda 関数に貼り付け、コード `lambda_function.py` ファイルを置き換えます。アカウントに合わせてパラメータ値を変更します。 | データエンジニア、クラウドエンジニア | 
| 関数を起動し、出力を確認する。 | Lambda 関数は、指定された Spark ジョブでクラスターを開始すると、S3 バケットに .csv ファイルが生成されます。 | データエンジニア、クラウドエンジニア | 

## 関連リソース
<a name="launch-a-spark-job-in-a-transient-emr-cluster-using-a-lambda-function-resources"></a>
+ [Spark の構築](https://spark.apache.org/docs/latest/building-spark.html)
+ [Apache Spark と Amazon EMR](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark.html)
+ [Boto3 Docs run\$1job\$1flow ドキュメント](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/emr.html#EMR.Client.run_job_flow)
+ [Apache Spark の情報とドキュメント](https://spark.apache.org/)

## 追加情報
<a name="launch-a-spark-job-in-a-transient-emr-cluster-using-a-lambda-function-additional"></a>

**Code**

```
"""
Copy paste the following code in your Lambda function. Make sure to change the following key parameters for the API as per your account

-Name (Name of Spark cluster)
-LogUri (S3 bucket to store EMR logs)
-Ec2SubnetId (The subnet to launch the cluster into)
-JobFlowRole (Service role for EC2)
-ServiceRole (Service role for Amazon EMR)

The following parameters are additional parameters for the Spark job itself. Change the bucket name and prefix for the Spark job (located at the bottom).

-s3://your-bucket-name/prefix/lambda-emr/SparkProfitCalc.jar (Spark jar file)
-s3://your-bucket-name/prefix/fake_sales_data.csv (Input data file in S3)
-s3://your-bucket-name/prefix/outputs/report_1/ (Output location in S3)
"""
import boto3

client = boto3.client('emr')


def lambda_handler(event, context):
    response = client.run_job_flow(
        Name='spark_job_cluster',
        LogUri='s3://your-bucket-name/prefix/logs',
        ReleaseLabel='emr-6.0.0',
        Instances={
            'MasterInstanceType': 'm5.xlarge',
            'SlaveInstanceType': 'm5.large',
            'InstanceCount': 1,
            'KeepJobFlowAliveWhenNoSteps': False,
            'TerminationProtected': False,
            'Ec2SubnetId': 'subnet-XXXXXXXXXXXXXX'
        },
        Applications=[{'Name': 'Spark'}],
        Configurations=[
            {'Classification': 'spark-hive-site',
             'Properties': {
                 'hive.metastore.client.factory.class': 'com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory'}
             }
        ],
        VisibleToAllUsers=True,
        JobFlowRole='EMRLambda-EMREC2InstanceProfile-XXXXXXXXX',
        ServiceRole='EMRLambda-EMRRole-XXXXXXXXX',
        Steps=[
            {
                'Name': 'flow-log-analysis',
                'ActionOnFailure': 'TERMINATE_CLUSTER',
                'HadoopJarStep': {
                    'Jar': 'command-runner.jar',
                    'Args': [
                        'spark-submit',
                        '--deploy-mode', 'cluster',
                        '--executor-memory', '6G',
                        '--num-executors', '1',
                        '--executor-cores', '2',
                        '--class', 'com.aws.emr.ProfitCalc',
                        's3://your-bucket-name/prefix/lambda-emr/SparkProfitCalc.jar',
                        's3://your-bucket-name/prefix/fake_sales_data.csv',
                        's3://your-bucket-name/prefix/outputs/report_1/'
                    ]
                }
            }
        ]
    )
```

**IAM ロールと VPC の作成**

Lambda 関数で EMR クラスターを起動するには、VPC と IAM ロールが必要です。VPC と IAM ロールは、このパターンの添付ファイルセクションにある AWS CloudFormation テンプレートを使用してセットアップできます。または、以下のリンクを使用して手動で作成することもできます。 

Lambda と Amazon EMR を実行するには、次の IAM ロールが必要です。 

Lambda 実行ロール

AWS Lambda 関数の[実行ロール](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)では、AWS サービスおよびリソースにアクセスするためのアクセス許可を付与します。

Amazon EMR のサービスロール

[Amazon EMR ロール](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)は、Amazon EMR がリソースをプロビジョニングし、クラスター内で実行されている Amazon Elastic Compute Cloud (Amazon EC2) のコンテキストでは実行されないサービスレベルのタスクを実行するときに Amazon EMR に対して許可されるアクションを定義します。例えば、このサービスロールを使用してクラスターの起動時に EC2 インスタンスをプロビジョニングします。

*EC2 インスタンスの サービスロール*

[クラスター EC2 インスタンスのサービスロール](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role-for-ec2.html) (Amazon EMR の EC2 インスタンスプロファイルとも呼ばれます) は、インスタンスの起動時に Amazon EMR クラスター内のすべての EC2 インスタンスに割り当てられる特殊なサービスロールです。Apache Hadoop 上で実行されるアプリケーションプロセスは、このロールを引き受けることで、AWS の他のサービスとやり取りするアクセス許可を取得します。

*VPC とサブネットの作成*

VPC コンソールを使用して [VPC を作成](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#create-vpc-and-other-resources)できます。 

## アタッチメント
<a name="attachments-6c999fa7-9550-4929-a5c1-60394142175d"></a>

このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「[attachment.zip](samples/p-attach/6c999fa7-9550-4929-a5c1-60394142175d/attachments/attachment.zip)」

# AWS Glue を使用して Apache Cassandra ワークロードを Amazon Keyspaces に移行する
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue"></a>

*Amazon Web Services、Nikolai Kolesnikov、Karthiga Priya Chandran、および Samir Patel*

## 概要
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-summary"></a>

このパターンは、AWS Glue で CQLReplicator を使用して Amazon Keyspaces (Apache Cassandra 向け) に既存の Apache Cassandra ワークロードを移行する方法を示しています。AWS Glue で CQLReplicator を使用して、ワークロードの移行に伴うレプリケーションラグを数分に短縮できます。Amazon Simple Storage Service (Amazon S3) バケットを使用して、[Apache Parquet](https://parquet.apache.org/) ファイル、設定ファイル、スクリプトなどの移行に必要なデータを保存する方法についても学びます。このパターンでは、Cassandra ワークロードが仮想プライベートクラウド (VPC) 内の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでホストされていることを前提としています。

## 前提条件と制限
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-prereqs"></a>

**前提条件**
+ ソーステーブルを含む Cassandra クラスター
+ ワークロードをレプリケートするための Amazon Keyspaces ターゲットテーブル
+ データの増分変更を含む中間 Parquet ファイルを保存する S3 バケット
+ ジョブ設定ファイルとスクリプトを保存する S3 バケット

**制限**
+ AWS Glue で CQLReplicator が Cassandra ワークロードにデータ処理ユニット (DPU) をプロビジョニングするには、ある程度の時間が必要です。Cassandra クラスターと Amazon キースペース内のターゲットキースペースおよびテーブル間のレプリケーションラグは、ほんの数分しか続かない可能性があります。

## アーキテクチャ
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-architecture"></a>

**ソーステクノロジースタック**
+ Apache Cassandra
+ DataStax Server
+ ScyllaDB

**ターゲットテクノロジースタック**
+ Amazon Keyspaces

**移行アーキテクチャ**

次の図は、Cassandra クラスターが EC2 インスタンスでホストされ、3 つのアベイラビリティーゾーンに分散しているアーキテクチャの例を示しています。Cassandra ノードは、プライベートサブネットでホストされます。

![\[ノードの VPC に接続する AWS Glue に関するカスタムサービスロール、Amazon Keyspaces、Amazon S3。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/e08048da-8996-4f2c-b8ed-da49fe9e693b/images/76256ab3-a1e6-4c9e-9c40-dc78f51edf0f.png)


この図表は、次のワークフローを示しています:

1. カスタムサービスロールは、Amazon Keyspaces と S3 バケットへのアクセスを提供します。

1. AWS Glue ジョブは S3 バケット内のジョブ設定とスクリプトを読み取ります。

1. AWS Glue ジョブはポート 9042 を介して接続し、Cassandra クラスターからデータを読み取ります。

1. AWS Glue ジョブはポート 9142 を介して接続し、Amazon Keyspaces にデータを書き込みます。

## ツール
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-tools"></a>

**AWS サービスとツール**
+ 「[AWS コマンドラインインターフェイス (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)」は、オープンソースのツールであり、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りすることができます。
+ 「[AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)」はブラウザベースのシェルで、AWS コマンドラインインターフェイス (AWS CLI) とプリインストールされたさまざまな開発ツールを使用して、AWS のサービスを管理できます。
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) は完全マネージド型の ETL サービスで、データストアとデータストリーム間でデータを確実に分類、クリーニング、強化、移動できます。
+ [Amazon Keyspaces (Apache Cassandra に向け)](https://docs.aws.amazon.com/keyspaces/latest/devguide/what-is-keyspaces.html) は、AWS クラウドの Cassandra ワークロードの移行、実行、スケーリングを支援するマネージド型データベースサービスです。

**Code**

このパターンのコードは GitHub 内の [CQLReplicator](https://github.com/aws-samples/cql-replicator/tree/main/glue) リポジトリで入手可能です。

## ベストプラクティス
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-best-practices"></a>
+ 移行に必要な AWS Glue リソースを特定するには、ソース Cassandra テーブルの行数を推定します。例えば、84 GB のディスクで 0.25 DPU (2 基の vCPU、4 GB のメモリ) あたり 250 K 行になります。
+ CQLReplicator を実行する前に、Amazon Keyspaces テーブルを事前ウォーミングします。例えば、8 つの CQLReplicator タイル (AWS Glue ジョブ) は 1 秒あたり最大 22 K WCU を書き込むことができるため、ターゲットは 1 秒あたり最大 25～30 K WCU まで事前ウォームアップする必要があります。
+ AWS Glue コンポーネント間の通信を有効にするには、セキュリティグループ内のすべての TCP ポートに対して自己参照のインバウンドルールを使用します。
+ 増分トラフィック戦略を使用して、移行ワークロードを時間の経過とともに分散します。

## エピック
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-epics"></a>

### CQLReplicator をデプロイする
<a name="deploy-cqlreplicator"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ターゲットのキースペースとテーブルを作成します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | アプリ所有者、AWS 管理者、DBA、アプリ開発者 | 
| カサンドラに接続するようにカサンドラドライバーを設定します。 | 次の設定スクリプトを使用します。<pre>Datastax-java-driver {<br />  basic.request.consistency = "LOCAL_QUORUM"<br />  basic.contact-points = ["127.0.0.1:9042"]<br />   advanced.reconnect-on-init = true<br />   basic.load-balancing-policy {<br />        local-datacenter = "datacenter1"<br />}<br />advanced.auth-provider = {<br />       class = PlainTextAuthProvider<br />       username = "user-at-sample"<br />       password = "S@MPLE=PASSWORD="<br />}<br />}</pre>前述のスクリプトは Spark Cassandra Connector を使用しています。詳細については、[Cassandra](https://docs.datastax.com/en/developer/java-driver/4.17/manual/core/configuration/reference/) の参照設定を参照してください。 | DBA | 
| Amazon Keyspaces に接続するように Cassandra ドライバーを設定します。 | 次の設定スクリプトを使用します。<pre>datastax-java-driver {<br />basic {<br />  load-balancing-policy {<br />    local-datacenter = us-west-2<br />        }<br />  contact-points = [<br />            "cassandra.us-west-2.amazonaws.com:9142"<br />        ]<br />  request {<br />  page-size = 2500<br />  timeout = 360 seconds<br />  consistency = LOCAL_QUORUM<br />        }<br />    }<br />advanced {<br /> control-connection {<br />  timeout = 360 seconds<br />        }<br /> session-leak.threshold = 6<br /> connection {<br /> connect-timeout = 360 seconds<br /> init-query-timeout = 360 seconds<br /> warn-on-init-error = false<br />        }<br /> auth-provider = {<br />  class = software.aws.mcs.auth.SigV4AuthProvider<br />  aws-region = us-west-2<br /> }<br /><br /> ssl-engine-factory {<br />  class = DefaultSslEngineFactory<br />        }<br />    }<br />}</pre>前述のスクリプトは Spark Cassandra Connector を使用しています。詳細については、[Cassandra](https://docs.datastax.com/en/developer/java-driver/4.17/manual/core/configuration/reference/) の参照設定を参照してください。 | DBA | 
| AWS Glue ジョブ用に IAM ロールを作成します。 | 信頼できるエンティティとして AWS Glue 用の `glue-cassandra-migration` という名前の新しい AWS サービスロールを作成します。`glue-cassandra-migration` は、S3 バケットと Amazon Keyspaces への読み取りおよび書き込みアクセスを提供する必要があります。S3 バケットには、.jar ファイル、Amazon Keyspaces と Cassandra の設定ファイル、および中間 Parquet ファイルが含まれています。例えば、`AWSGlueServiceRole`、`AmazonS3FullAccess`、`AmazonKeyspacesFullAccess` マネージドポリシーが含まれます。 | AWS DevOps | 
| AWS CloudShell で CQLReplicator をダウンロードします。 | 次のコマンドを実行して、プロジェクトをホームフォルダにダウンロードします。<pre>git clone https://github.com/aws-samples/cql-replicator.git<br />cd cql-replicator/glue<br /># Only for AWS CloudShell, the bc package includes bc and dc. Bc is an arbitrary precision numeric processing arithmetic language<br />sudo yum install bc -y</pre> |  | 
| 参照設定ファイルを変更します。 | プロジェクトフォルダの `../glue/conf` ディレクトリに `CassandraConnector.conf` と `KeyspacesConnector.conf` をコピーします。 | AWS DevOps | 
| 移行プロセスを開始します。 | 次のコマンドは、CQLReplicator 環境を初期化します。初期化には、.jar アーティファクトのコピーと、AWS Glue コネクタ、S3 バケット、AWS Glue ジョブ、`migration` キースペース、`ledger` テーブルの作成が含まれます。<pre>cd cql-replicator/glue/bin<br />./cqlreplicator --state init --sg '"sg-1","sg-2"' \ <br />                --subnet "subnet-XXXXXXXXXXXX" \ <br />                --az us-west-2a --region us-west-2 \ <br />                --glue-iam-role glue-cassandra-migration \ <br />                --landing-zone s3://cql-replicator-1234567890-us-west-2<br /></pre>このスクリプトには次のパラメータが含まれます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | AWS DevOps | 
| デプロイを検証する。 | 上記のコマンドを実行した後、AWS アカウントには以下が含まれている必要があります。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | AWS DevOps | 

### CQLReplicator を実行する
<a name="run-cqlreplicator"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 移行プロセスを開始します。 | AWS Glue で CQLReplicator を操作するには、`--state run` コマンドに続けて一連のパラメータを使用する必要があります。これらのパラメータの正確な設定は、主に、固有の移行要件によって決まります。例えば、有効期限 (TTL) の値と更新をレプリケートすることを選択した場合や、1 MB を超えるオブジェクトを Amazon S3 にオフロードする場合、これらの設定は異なる場合があります。Cassandra クラスターから Amazon Keyspaces にワークロードをレプリケートするには、次のコマンドを実行します。<pre>./cqlreplicator --state run --tiles 8  \<br />                --landing-zone s3://cql-replicator-1234567890-us-west-2 \ <br />                --region us-west-2 \                              <br />                --src-keyspace source_keyspace \ <br />                --src-table source_table \  <br />                --trg-keyspace taget_keyspace \<br />                --writetime-column column_name \<br />                --trg-table target_table --inc-traffic</pre>ソースキースペースとテーブルは、Cassandra クラスターの `source_keyspace.source_table` です。ターゲットキースペースとテーブルは、Amazon Keyspaces の `target_keyspace.target_table` です。パラメータ `--inc-traffic` は、多数のリクエストによる増分トラフィックで Cassandra クラスターと Amazon Keyspaces が過負荷になるのを防ぐのに役立ちます。更新をレプリケートするには、コマンドラインに `--writetime-column regular_column_name` を追加します。通常の列は、書き込みタイムスタンプのソースとして使用されます。 | AWS DevOps | 

### 移行プロセスをモニタリングする
<a name="monitor-the-migration-process"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 過去の移行フェーズ中に移行された Cassandra 行を検証します。 | バックフィルフェーズ中にレプリケートされた行数を取得するには、次のコマンドを実行します。<pre>./cqlreplicator --state stats \<br />                --landing-zone s3://cql-replicator-1234567890-us-west-2 \  <br />                --src-keyspace source_keyspace --src-table source_table --region us-west-2</pre> | AWS DevOps | 

### 移行プロセスを停止する
<a name="stop-the-migration-process"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| `cqlreplicator` コマンドまたは AWS Glue コンソールを使用します。 | 移行プロセスを適切に停止するには、次のコマンドを実行します。<pre>./cqlreplicator --state request-stop --tiles 8 \                         <br />                --landing-zone s3://cql-replicator-1234567890-us-west-2 \     <br />                --region us-west-2 \                     <br />                --src-keyspace source_keyspace --src-table source_table</pre>移行プロセスをすぐに停止するには、AWS Glue コンソールを使用します。 | AWS DevOps | 

### クリーンアップ
<a name="clean-up"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| デプロイされたリソースを削除します。 | 次のコマンドは、AWS Glue ジョブ、コネクタ、S3 バケット、および Keyspaces テーブル `ledger` を削除します。<pre>./cqlreplicator --state cleanup --landing-zone s3://cql-replicator-1234567890-us-west-2</pre> | AWS DevOps | 

## トラブルシューティング
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| AWS Glue ジョブが失敗し、メモリ不足 (OOM) エラーが返されました。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | 

## 関連リソース
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-resources"></a>
+ [CQLReplicator with AWS Glue README.MD](https://github.com/aws-samples/cql-replicator/blob/main/glue/README.MD)
+ [AWS Glue ドキュメント](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)
+ [Amazon Keyspaces ドキュメント](https://docs.aws.amazon.com/keyspaces/latest/devguide/what-is-keyspaces.html)
+ [Apache Cassandra](https://cassandra.apache.org/_/index.html)

## 追加情報
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-additional"></a>

**移行に関する考慮事項**

AWS Glue を使用して Cassandra ワークロードを Amazon Keyspaces に移行できます。移行プロセス中も Cassandra ソースデータベースは完全に機能したままです。レプリケーションが完了したら、Cassandra クラスターと Amazon Keyspaces 間のレプリケーション遅延を最小限 (数分未満) に抑えて、アプリケーションを Amazon Keyspaces に切り替えることができます。データ整合性を維持するために、同様のパイプラインを使用して Amazon Keyspaces から Cassandra クラスターにデータを複製して戻すこともできます。

**単位計算の書き込み**

例として、1 時間の間に行サイズ 1 KiB で 500,000,000 を書き込むつもりだとします。必要な Amazon Keyspaces 書き込みユニット (WCU) の総数は、次の計算に基づいています。

`(number of rows/60 mins 60s) 1 WCU per row = (500,000,000/(60*60s) * 1 WCU) = 69,444 WCUs required`

1 秒あたり 69,444 WCU は 1 時間のレートですが、オーバーヘッドをいくらか抑えることもできます。 例えば、`69,444 * 1.10 = 76,388 WCUs` は10% のオーバーヘッドがあります。

**CQL を使ったキースペースの作成**

CQL を使用してキースペースを作成するには、次のコマンドを実行します。

```
CREATE KEYSPACE target_keyspace WITH replication = {'class': 'SingleRegionStrategy'}
CREATE TABLE target_keyspace.target_table ( userid uuid, level text, gameid int, description text, nickname text, zip text, email text, updatetime text, PRIMARY KEY (userid, level, gameid) ) WITH default_time_to_live = 0 AND CUSTOM_PROPERTIES = {'capacity_mode':{ 'throughput_mode':'PROVISIONED', 'write_capacity_units':76388, 'read_capacity_units':3612 }} AND CLUSTERING ORDER BY (level ASC, gameid ASC)
```

# Oracle ビジネスインテリジェンス 12c をオンプレミスサーバーから AWS クラウドに移行
<a name="migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers"></a>

*Amazon Web Services、Lanre (Lan-Ray) showunmi、Patrick Huang*

## 概要
<a name="migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers-summary"></a>

このパターンは、AWS CloudFormation を使用して「[Oracle ビジネスインテリジェンスエンタープライズエディション 12c](https://www.oracle.com/business-analytics/business-intelligence/technologies/bi-enterprise-edition.html)」をオンプレミスサーバーから AWS クラウドに移行する方法を示しています。また、他の AWS サービスを使用して、高可用性、セキュリティ、柔軟性、および動的なスケーリング機能を提供する Oracle BI 12c コンポーネントを実装する方法についても説明します。

Oracle BI 12c の AWS クラウドへの移行に関連するベストプラクティスのリストについては、このパターンの「**追加情報**」セクションを参照してください。

**注記**  
既存の Oracle BI 12c データをクラウドに転送する前に、複数のテスト移行を実行するのがベストプラクティスです。これらのテストは、移行アプローチを微調整し、潜在的な問題を特定して修正し、ダウンタイム要件をより正確に見積もるのに役立ちます。

## 前提条件と制限事項
<a name="migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント。
+ 「[AWS Virtual Private Network (AWS VPN)](https://aws.amazon.com/vpn/)」サービスまたは「[AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)」のいずれかを介した、オンプレミスサーバーと AWS の間の安全なネットワーク接続
+ お使いの Oracle オペレーティングシステム、Oracle BI 12c、Oracle データベース、Oracle WebLogic Server、および Oracle HTTP Server 用のソフトウェアライセンス

**制限事項**

ストレージサイズの制限については、「[Amazon Relational Database Service (Amazon RDS) for Oracle](https://aws.amazon.com/rds/oracle/features/)」のドキュメントを参照してください。

**製品バージョン**
+ Oracle ビジネスインテリジェンスエンタープライズエディション 12c
+ Oracle WebLogic サーバー 12c
+ Oracle HTTP サーバー 12c
+ Oracle Database 12c (またはそれ以降)
+ Oracle Java SE 8

## アーキテクチャ
<a name="migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers-architecture"></a>

次の図は、AWS クラウドで Oracle BI 12c コンポーネントを実行するためのアーキテクチャの例を示しています。

![\[AWS クラウドで Oracle BI 12c コンポーネントを実行するためのアーキテクチャ例。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/8bb72df1-7546-4208-bc70-5789767e3600/images/aae8f8f3-8125-4868-a8e5-eac1cc42812f.png)


 

この図は次のようなアーキテクチャを示しています。

1. Amazon Route 53 はドメインネームサービス (DNS) 設定を提供します。

1. Elastic Load Balancing (ELB) は、ネットワークトラフィックを分散して、複数のアベイラビリティーゾーンにわたる Oracle BI 12c コンポーネントのスケーラビリティと可用性を向上させます。

1. Amazon Elastic Compute Cloud (Amazon EC2) Auto Scaling グループは、複数のアベイラビリティーゾーンにわたって Oracle HTTP サーバー、Weblogic Admin Server、マネージド BI サーバーをホストします。

1. Oracle データベースの Amazon Relational Database Service (Amazon RDS) は、複数のアベイラビリティーゾーンの BI サーバーメタデータを格納します。

1. Amazon Elastic File System (Amazon EFS) は、共有ファイルストレージ用のすべての Oracle BI 12c コンポーネントにマウントされています。

テクノロジースタック
+ Amazon Elastic Block Store (Amazon EBS)
+ Amazon Elastic Compute Cloud (Amazon EC2)
+ Amazon Elastic File System (Amazon EFS)
+ Amazon RDS for Oracle
+ AWS Certificate Manager (ACM)
+ Elastic Load Balancing (ELB)
+ Oracle BI 12c
+ Oracle WebLogic サーバー 12c
+ Oracle HTTP サーバー (OHS)

## ツール
<a name="migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers-tools"></a>
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) を使用すると、AWS リソースをセットアップし、迅速かつ一貫したプロビジョニングを行い、AWS アカウントとリージョン全体でライフサイクル全体にわたってリソースを管理できます。
+ 「[AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html)」は、AWS ウェブサイトとアプリケーションを保護するパブリックおよびプライベート SSL/TLS X.509 証明書とキーの作成、保存、更新に役立ちます。
+ 「[AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)」 を使用して、データストアを AWS クラウドへ、またはクラウドセットアップとオンプレミスセットアップの組み合わせの間に移行します。
+ 「[Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/?id=docs_gateway)」は、AWS クラウドでスケーラブルなコンピューティング容量を提供します。仮想サーバーを必要な数だけ起動して、迅速にスケールアップまたはスケールダウンができます。
+ 「[Amazon EC2 Auto Scaling](https://aws.amazon.com/ec2/autoscaling/)」は、アプリケーションの可用性を維持するのに役立ち、定義した条件に従って、Amazon EC2 インスタンスのインスタンスを自動的に追加または削除できます。 
+ 「[Amazon Elastic File System (Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)」は、 AWS クラウドでの共有ファイルシステムの作成と設定に役立ちます。
+ 受信したアプリケーションまたはネットワークトラフィックを複数のターゲットに分散するためには、「[Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)」を使用します。例えば、Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、コンテナ、および 1 つまたは複数のアベイラビリティーゾーンの IP アドレスにトラフィックを分散できます。
+ [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) を使用して、AWS クラウドでリレーショナルデータベース (DB) をセットアップ、運用、スケーリングできます。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) を使用すると、定義した仮想ネットワーク内で AWS リソースを起動できます。この仮想ネットワークは、お客様自身のデータセンターで運用されていた従来のネットワークに似ていますが、AWS のスケーラブルなインフラストラクチャを使用できるというメリットがあります。
+ 「[Oracle Data Pump](https://docs.oracle.com/cd/B19306_01/server.102/b14215/dp_overview.htm)」を使用すると、データやメタデータをあるデータベースから別のデータベースに高速で移動できます。
+ 「[Oracle Fusion Middleware](https://www.oracle.com/middleware/technologies/business-intelligence-v12214-downloads.html)」は、ID管理、コラボレーション、ビジネスインテリジェンスレポート作成のためのアプリケーション開発ツールと統合ソリューションのスイートです。
+ 「[Oracle GoldenGate](https://www.oracle.com/integration/goldengate/#:~:text=OCI%20GoldenGate%20is%20a%20real,in%20the%20Oracle%20Cloud%20Infrastructure.)」は、Oracle Cloud Infrastructure におけるデータレプリケーションおよびストリームデータ処理ソリューションの設計、実行、調整、監視を支援します。
+ 「[Oracle WebLogicスクリプトツール（WLST）](https://docs.oracle.com/middleware/12213/cross/wlsttasks.htm)」には、WebLogic クラスタを水平方向にスケールアウトするのに役立つコマンドライン・インタフェースが用意されています。

## エピック
<a name="migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers-epics"></a>

### ソース環境を評価してください。
<a name="assess-the-source-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ソフトウェアインベントリ情報を収集する。 | 以下を含む、ソーステクノロジースタックの各ソフトウェアコンポーネントのバージョンとパッチレベルを特定します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers.html) | マイグレーションアーキテクト、ソリューションアーキテクト、アプリ所有者、Oracle BI 管理者 | 
| コンピューティングとストレージのインベントリ情報を収集します。 | ソース環境で、以下について現在および過去の使用状況メトリクスを確認します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers.html)これまでに使用量が増えた事例も考慮に入れてください。 | 移行アーキテクト、ソリューションアーキテクト、アプリ所有者、Oracle BI 管理者、システム管理者 | 
| ソース環境のアーキテクチャと要件に関する情報を収集します。 | 以下の知識を含め、ソース環境のアーキテクチャとその要件を十分に理解してください。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers.html) | マイグレーションアーキテクト、ソリューションアーキテクト、アプリ所有者、Oracle BI 管理者 | 
| Java データベース接続 (JDBC) データソースを特定します。 | ソース環境が使用するデータベースエンジンごとに、ソース環境の JDBC データソースとドライバーに関する情報を収集します。 | 移行アーキテクト、アプリ所有者、Oracle BI 管理者、データベースエンジニア、または管理者 | 
| 環境固有の設定に関する情報を収集します。 | 以下を含む、ソース環境に固有の設定や構成に関する情報を収集します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers.html) | マイグレーションアーキテクト、ソリューションアーキテクト、アプリ所有者、Oracle BI 管理者 | 
| 他のアプリケーションとの依存関係を特定します。 | 他のアプリケーションとの依存関係を引き起こすソース環境の統合に関する情報を収集します。ライトウェイトディレクトリアクセスプロトコル (LDAP) の統合やその他のネットワーク要件を必ず確認してください。 | マイグレーションアーキテクト、ソリューションアーキテクト、アプリ所有者、Oracle BI 管理者 | 

### ターゲット環境の設計
<a name="design-your-target-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 高レベルの設計ドキュメントを作成します。 | ターゲットアーキテクチャ設計文書を作成する。ソース環境を評価する際に収集した情報を設計文書の作成に使用するようにしてください。 | ソリューションアーキテクト、アプリケーションアーキテクト、データベースエンジニア、マイグレーションアーキテクト | 
| 設計文書の承認を得る。 | 利害関係者と設計文書を検討し、必要な承認を得る。 | アプリケーションまたはサービスオーナー、ソリューションアーキテクト、アプリケーションアーキテクト | 

### インフラストラクチャをデプロイする
<a name="deploy-the-infrastructure"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| CloudFormation でインフラストラクチャコードを準備します。 | CloudFormation テンプレートを作成して、Oracle BI 12c インフラストラクチャを AWS クラウドにプロビジョニングします。詳細については、*AWS CloudFormation ユーザーガイド*の「[AWS CloudFormation テンプレートの使用](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html)」を参照してください。ベストプラクティスは、すべてのリソースを 1 つの大きなテンプレートにするのではなく、Oracle BI 12c 階層ごとにモジュール式の CloudFormation テンプレートを作成することです。CloudFormation のベストプラクティスの詳細については、AWS ブログの「[AWS CloudFormation を使用してデプロイを自動化する際の 8 つのベストプラクティス](https://aws.amazon.com/blogs/infrastructure-and-automation/best-practices-automating-deployments-with-aws-cloudformation/)」を参照してください。 | クラウドインフラストラクチャアーキテクト、ソリューションアーキテクト、アプリケーションアーキテクト | 
| 必要なソフトウェアをダウンロードします。 | 「[Oracle ウェブサイト](https://www.oracle.com/)」から、次のソフトウェアと必要なバージョンとパッチをダウンロードします。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers.html) | マイグレーションアーキテクト、データベースエンジニア、アプリケーションアーキテクト | 
| インストールスクリプトを準備します。 | サイレントインストールを実行するソフトウェアインストールスクリプトを作成します。これらのスクリプトは導入の自動化を簡素化します。詳細については、Oracle Support サイトにある「[OBIEE 12c:サイレント・インストールを実行する方法?](https://support.oracle.com/knowledge/Enterprise%20Performance%20Management%20and%20Business%20Intelligence/2267490_1.html)」を参照してください。ドキュメントを閲覧するには、Oracle Supportアカウントが必要です。 | マイグレーションアーキテクト、データベースエンジニア、アプリケーションアーキテクト | 
| ウェブ層とアプリケーション層の Amazon EBS-backed Linux AMI を作成してください。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers.html) | マイグレーションアーキテクト、データベースエンジニア、アプリケーションアーキテクト | 
| CloudFormation を使用して AWS インフラストラクチャを起動します。 | 作成したCloudFormationテンプレートを使用して、Oracle BI 12cのウェブ層とアプリケーション層をモジュールにデプロイします。手順については、「*AWS CloudFormation ユーザーガイド*」の「[AWS CloudFormation の使用開始](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.html)」を参照してください。 | クラウドインフラストラクチャアーキテクト、ソリューションアーキテクト、アプリケーションアーキテクト | 

### 新規インストールを使用して Oracle BI 12c を AWS に移行してください
<a name="migrate-oracle-bi-12c-to-aws-by-using-a-fresh-installation"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 必要なソフトウェアをを準備します。 | Amazon EC2 インスタンスにアクセスできる場所に、必要なソフトウェアをステージングします。例えば、ウェブサーバーやアプリケーションサーバーにアクセスできるAmazon S3 または別の Amazon EC2 インスタンスにソフトウェアをステージングできます。 | 移行アーキテクト、Oracle BI アーキテクト、クラウドインフラストラクチャアーキテクト、ソリューションアーキテクト、アプリケーションアーキテクト | 
| Oracle BI 12c をインストールするためのリポジトリデータベースを準備します。 | 新しい「[Amazon RDS for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)」データベースインスタンスに対して「[Oracle リポジトリ作成ユーティリティ (RCU)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Resources.RCU.html#Oracle.Resources.RCU.Installing)」を実行して Oracle BI 12c スキーマを作成します。 | クラウドインフラストラクチャアーキテクト、ソリューションアーキテクト、アプリケーションアーキテクト、移行アーキテクト、Oracle BI アーキテクト | 
| Oracle Fusion Middleware 12c と Oracle BI 12c をインストールします。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers.html) | マイグレーション・アーキテクト、Oracle BI アーキテクト | 
| Oracle BI 12c 用に Oracle WebLogic Server ドメインを設定してください。 | Oracle BI 12c ドメインを非クラスタ・デプロイメントとして構成してください。詳しくは「*Oracle Fusion Middleware Enterprise Deployment Guide for Oracle Business Intelligence*」の「[Configuring the BI Domain](https://docs.oracle.com/middleware/bi12214/lcm/BIEDG/GUID-FD80C4C4-A2E9-4190-8B6A-7AD659D8FBE2.htm#BIEDG-GUID-D4FC2F0A-88B0-453C-BF14-17D365018252)」をご確認ください。 | マイグレーション・アーキテクト、Oracle BI アーキテクト | 
| Oracle BI 12c の水平スケールアウトを実行します。 | 単一ノードを目的のノード数まで水平方向にスケールアウトします。詳細は、「[Oracle Fusion ミドルウェアエンタープライズデプロイメントガイド](https://docs.oracle.com/middleware/bi12214/lcm/BIEDG/GUID-B7BEA45C-A8C0-4591-B748-FC35C587DAE0.htm#BIEDG-GUID-B7BEA45C-A8C0-4591-B748-FC35C587DAE0)」の「*Oracleビジネスインテリジェンスのスケールアウト*」を参照してください。 | マイグレーション・アーキテクト、Oracle BI アーキテクト | 
| Oracle HTTP Server 12c をインストールします。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers.html) | マイグレーション・アーキテクト、Oracle BI アーキテクト | 
| SSL ターミネーション用のロードバランサーを設定します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers.html) | クラウド・インフラストラクチャ・アーキテクト、移行アーキテクト | 
| ビジネスインテリジェンスのメタデータアーティファクトを AWS に移行します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers.html) | マイグレーション・アーキテクト、Oracle BI アーキテクト | 
| 移行後のタスクを実行する。 | BAR ファイルをインポートしたら、次の操作を行います。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers.html) | マイグレーション・アーキテクト、Oracle BI アーキテクト | 

### 新しい環境のテスト
<a name="test-the-new-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 新しい Oracle BI 12c 環境をテストしてください。 | 新しい Oracle BI 12c 環境でエンドツーエンドのテストを実施します。可能な限り自動化を利用します。テストアクティビティの例には、以下のようなものがあります。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers.html)必要に応じて、追加のテストと検証を実施してください。 | マイグレーションアーキテクト、ソリューションアーキテクト、アプリ所有者、Oracle BI 管理者 | 

### 新しい環境に切り替える
<a name="cut-over-to-the-new-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| オンプレミスの Oracle BI 12c 環境へのトラフィックを切断します。 | 指定されたカットオーバー期間に、オンプレミスの Oracle BI 12c 環境へのトラフィックをすべて停止します。 | マイグレーションアーキテクト、ソリューションアーキテクト、アプリ所有者、Oracle BI 管理者 | 
| 新しい Oracle BI 12c リポジトリデータベースをソースデータベースと再同期します。 | Amazon RDS Oracle Oracle BI 12c リポジトリデータベースをオンプレミスデータベースと再同期します。データベースを同期するには、「[Oracle データポンプの更新](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Procedural.Importing.DataPump.html)」または「[AWS DMS 変更データキャプチャ (CDC)](https://aws.amazon.com/blogs/database/migrating-oracle-databases-with-near-zero-downtime-using-aws-dms/)」を使用できます。 | Oracle BI 管理者、データベースエンジニア/管理者 | 
| Oracle BI 12c の URL を新しい AWS 環境を指すように切り替えてください。 | 内部 DNS サーバーの Oracle BI 12c URL を更新して、新しい AWS インストールを指すようにします。 | マイグレーションアーキテクト、ソリューションアーキテクト、アプリ所有者、Oracle BI 管理者 | 
| 新しい環境をモニタリングします。 | 以下のツールのいずれかを使用して、新しい Oracle BI 12c 環境を監視します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers.html) | Oracle BI 管理者、データベースエンジニア/管理者、アプリケーション管理者 | 
| プロジェクトの承認を得てください。 | テスト結果を利害関係者と確認し、移行を完了するために必要な承認を得てください。 | アプリ所有者、サービスオーナー、クラウドインフラストラクチャアーキテクト、マイグレーションアーキテクト、Oracle BI アーキテクト | 

## 関連リソース
<a name="migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers-resources"></a>
+ 「[Amazon RDS for Oracle での Oracle リポジトリ作成ユーティリティの使用](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Resources.RCU.html) (*Amazon RDS ユーザーガイド*)」
+ 「[Amazon RDS for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) (*Amazon RDS ユーザーガイド*)」
+ 「[AWS 上のOracle WebLogic Server 12c](https://d1.awsstatic.com/whitepapers/Oracle-WebLogic-12c-on-AWS.pdf)」(AWS ホワイトペーパー)
+ 「[高可用性のための Oracle ビジネスインテリジェンスのデポロイ](https://docs.oracle.com/middleware/1221/biee/BIESG/highavail.htm#BIESG1584)」(Oracle ヘルプセンター)
+ 「[Oracle ビジネスインテリジェンスアプリケーションアーカイブ (BAR) ファイル](https://docs.oracle.com/middleware/bi12214/biee/BIESG/GUID-7FCD90A3-E005-49BF-902F-30FBF9B41B07.htm#BIESG2889)」(Oracle ヘルプセンター)
+ 「[OBI 12c を環境間で移行する方法](https://support.oracle.com/knowledge/Enterprise%20Performance%20Management%20and%20Business%20Intelligence/2203360_1.html)」(Oracle Support) 

## 追加情報
<a name="migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers-additional"></a>

以下は、Oracle BI 12c を AWS クラウドに移行することに関連するベストプラクティスのリストです。

リポジトリデータベース

Oracle BI 12c データベーススキーマを Amazon RDS for Oracle インスタンスでホストするのがベストプラクティスです。このインスタンスタイプは、ハードウェアのプロビジョニング、データベースのセットアップ、パッチ適用、バックアップなどの管理タスクを自動化しながら、コスト効率が高くサイズ変更可能な容量を提供します。

詳しくは「*Amazon RDS ユーザーガイド*」の「[Amazon RDS for Oracle での Oracle リポジトリ作成ユーティリティの使用](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Resources.RCU.html)」をご確認ください。

ウェブ層とアプリケーション層

多くの場合、「[メモリ最適化された Amazon EC2 インスタンス](https://aws.amazon.com/ec2/instance-types/)」は Oracle BI 12c サーバーに適しています。どのインスタンスタイプを選択する場合でも、プロビジョニングするインスタンスがシステムのメモリ使用要件を満たしていることを確認してください。また、Amazon EC2 インスタンスの使用可能なメモリに基づいて「[十分な WebLogic Java 仮想マシン (JVM) ヒープサイズ](https://docs.oracle.com/cd/E49933_01/server.770/es_install/src/tins_postinstall_jvm_heap.html#:~:text=The%20default%20JVM%20heap%20size%20for%20WebLogic%20is%203GB.,file%20for%20Linux%20or%20setDomainEnv.)」を設定してください。

ローカルストレージ

I/O は Oracle BI 12c アプリケーションの全体的なパフォーマンスにおいて重要な役割を果たします。Amazon Elastic Block Store (Amazon EBS) は、さまざまなワークロードパターンに最適化されたさまざまなストレージクラスを提供しています。必ずユースケースに合った Amazon EBS ボリュームタイプを選択してください。

詳細については、EBS ドキュメントの「[Amazon EBS 機能](https://aws.amazon.com/ebs/features/)」を参照してください。

共有ストレージ

クラスタ化された Oracle BI 12c ドメインには、以下のリソース用の共有ストレージが必要です。
+ 設定ファイル
+ Oracle BI 12c シングルトンデータディレクトリ (SDD)
+ Oracle グローバルキャッシュ
+ Oracle BI スケジューラスクリプト
+ Oracle WebLogic サーバーバイナリ

この共有ストレージ要件は、スケーラブルでフルマネージド型の伸縮自在なネットワークファイルシステム (NFS) ファイルシステムを提供する「[Amazon EFS](https://aws.amazon.com/efs/)」を使用することで満たすことができます。

共有ストレージのパフォーマンスを微調整する

Amazon EFS には、**[プロビジョニング型]** と **[バースト型]** の 2 つの[スループットモード](https://docs.aws.amazon.com/efs/latest/ug/performance.html#throughput-modes)があります。このサービスには、**[汎用]** モードと **[最大 I/O]** モードの 2 つの[パフォーマンスモード](https://docs.aws.amazon.com/efs/latest/ug/performance.html#performancemodes)もあります。

パフォーマンスを微調整するには、まず **[汎用]** パフォーマンスモードと **[プロビジョニング型]** スループットモードでワークロードをテストします。これらのテストを行うと、これらのベースラインモードが希望するサービスレベルを満たすのに十分かどうかを判断するのに役立ちます。

詳細については、*Amazon EFS ユーザーガイド*の「[Amazon EFS performance](https://docs.aws.amazon.com/efs/latest/ug/performance.html)」を参照してください。

可用性とディザスタリカバリ

アベイラビリティーゾーンに障害が発生した場合にそれらのリソースを保護するために、Oracle BI 12c コンポーネントを複数のアベイラビリティーゾーンにデプロイするのがベストプラクティスです。以下は、AWS クラウドでホストされている特定の Oracle BI 12c リソースの可用性とディザスタリカバリのベストプラクティスのリストです。
+ **Oracle BI 12c リポジトリデータベース**: マルチ AZ Amazon RDS データベースインスタンスを Oracle BI 12c リポジトリデータベースにデプロイします。マルチ AZ 配置では、Amazon RDS は自動的に別の AZ に同期スタンバイレプリカをプロビジョニングし、維持します。Oracle BI 12c リポジトリデータベースインスタンスをアベイラビリティゾーン間で実行すると、計画的なシ ステム保守時の可用性が向上し、インスタンスとアベイラビリティゾーンの障害からデータベースを保護できます。
+ **Oracle BI 12c マネージドサーバー**: 耐障害性を実現するには、複数のアベイラビリティーゾーンにまたがるように設定された Amazon EC2 Auto Scaling グループのマネージドサーバーに、Oracle BI 12c システムコンポーネントをデプロイするのがベストプラクティスです。Auto Scaling は、「[Amazon EC2 ヘルスチェック](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-health-checks.html)」に基づいて障害のあるインスタンスを置き換えます。アベイラビリティーゾーンに障害が発生した場合、Oracle HTTP Servers は引き続き機能しているアベイラビリティーゾーン内のマネージドサーバーにトラフィックを転送します。次に、自動スケーリングはホスト数の要件に合わせてインスタンスを起動します。機能しているマネージドサーバーに既存のセッションをスムーズにフェイルオーバーできるように、HTTP セッション状態の複製を有効化することをお勧めします。
+ **Oracle BI 12c 管理サーバー**: 管理サーバーの可用性を高めるには、複数のアベイラビリティーゾーンにまたがるように設定された Amazon EC2 Auto Scaling グループで管理サーバーをホストします。次に、グループセットの最小サイズおよび最大サイズを 1 に設定します。アベイラビリティーゾーンに障害が発生した場合、Amazon EC2 Auto Scaling は代替アベイラビリティーゾーンで代替管理サーバーを起動します。同じアベイラビリティーゾーン内の障害が発生した基盤となるホストを復旧するには、「[Amazon EC2 Auto Recovery](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html)」を有効化できます。
+ **Oracle Web Tier サーバー**: Oracle HTTP サーバーを Oracle WebLogic Server ドメインに関連付けるのがベストプラクティスです。高可用性のためには、複数のアベイラビリティーゾーンを処理するように設定された Amazon EC2 Auto Scaling グループに Oracle HTTP サーバーをデプロイします。次に、サーバーを ELB エラスティックロードバランサーの背後に配置します。ホスト障害に対する保護を強化するために、Amazon EC2 Auto Recovery を有効化できます。

スケーラビリティ

AWS クラウドの伸縮性により、ワークロードの要件に応じてアプリケーションを水平または垂直にスケーリングできます。

垂直スケーリング

アプリケーションを垂直方向にスケーリングするには、Oracle BI 12c コンポーネントを実行している Amazon EC2 インスタンスのサイズとタイプを変更できます。デプロイの開始時にインスタンスを過剰にプロビジョニングする必要はなく、不要なコストも発生しません。 

水平スケーリング

Amazon EC2 Auto Scaling は、ワークロード要件に基づいてマネージドサーバーを自動的に追加または削除することで、アプリケーションを水平方向にスケーリングするのに役立ちます。

**注記**  
Amazon EC2 Auto Scaling による水平スケーリングを実装するには、スクリプト作成のスキルと徹底的なテストが必要です。

バックアップとリカバリ

以下は、AWS クラウドでホストされている特定の Oracle BI 12c リソースのバックアップとリカバリのベストプラクティスのリストです。
+ **Oracle ビジネスインテリジェンスのメタデータリポジトリ**: Amazon RDS はデータベースインスタンスのバックアップを自動的に作成して保存します。これらのバックアップは、指定した期間保持されます。Amazon RDS のバックアップ期間と保持設定は、必ずデータ保護要件に基づいて設定してください。詳細については「[Amazon RDS のバックアップと復元](https://aws.amazon.com/rds/features/backup/)」を参照してください。
+ **マネージドサーバー、管理サーバー、ウェブ階層サーバー**: データ保護と保持の要件に基づいて「[Amazon EBS スナップショット](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html)」を設定してください。
+ **共有ストレージ**: Amazon EFS に保存されているファイルのバックアップと復元は、「[AWS Backup](https://docs.aws.amazon.com/efs/latest/ug/awsbackup.html)」を使用して管理できます。AWS Backup サービスをデプロイして、Amazon EC2、Amazon EBS、Amazon RDS などの他のサービスのバックアップとリカバリを一元管理することもできます。詳細については、「[AWS Backup とは?](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html)」を参照してください。「*AWS Backup 開発者ガイド*」からご確認いただけます。

セキュリティとコンプライアンス

以下は、AWS クラウド内の Oracle BI 12c アプリケーションを保護するのに役立つセキュリティのベストプラクティスと AWS サービスのリストです。
+ **保存時の暗号化**: Amazon RDS、Amazon EFS、Amazon EBS はすべて、業界標準の暗号化アルゴリズムをサポートしています。「[AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)」を使用して、暗号化キーを作成および管理し、AWS サービス全体およびアプリケーション内でのそれらの使用を管理できます。Oracle BI 12c リポジトリデータベースをホストしている Amazon RDS for Oracle データベースインスタンスで「[Oracle 透過的データ暗号化 (TDE)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.Options.AdvSecurity.html)」を設定することもできます。
+ **転送中の暗号化**: Oracle BI 12c インストールのさまざまなレイヤー間で転送中のデータを保護するために、SSL プロトコルまたは TLS プロトコルのいずれかをアクティブ化することがベストプラクティスです。「[AWS Certificate Manager (ACM)](https://aws.amazon.com/certificate-manager/)」を使用して、Oracle BI 12c リソース用のパブリック SSL 証明書とプライベート SSL 証明書、および TLS 証明書のプロビジョニング、管理、およびデポロイを行うことができます。
+ **ネットワークセキュリティ**: Oracle BI 12c リソースは、ユースケースに適したアクセス制御が設定された Amazon VPC にデプロイするようにしてください。インストールを実行している Amazon EC2 インスタンスからのインバウンドトラフィックとアウトバウンドトラフィックをフィルタリングするようにセキュリティグループを設定します。また、定義されたルールに基づいてトラフィックを許可または拒否する「[ネットワークアクセスコントロールリスト (NACL)](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)」を必ず設定してください。
+ **モニタリングとロギング**:「[AWS CloudTrail](https://aws.amazon.com/cloudtrail/)」を使用して、Oracle BI 12c リソースを含む AWS インフラストラクチャへの API 呼び出しを追跡できます。この機能は、インフラストラクチャの変更を追跡したり、セキュリティ分析を行う場合に役立ちます。「[Amazon CloudWatch](https://aws.amazon.com/cloudwatch/)」を使用して運用データを表示することもできます。これにより、Oracle BI 12c アプリケーションのパフォーマンスと状態に関する実用的な洞察を得ることができます。アラームを設定し、そのアラームに基づいて自動アクションを実行することもできます。Amazon RDS には、「[拡張モニタリング](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.html)」や「[Performance Insights](https://aws.amazon.com/rds/performance-insights/)」など、追加のモニタリングツールが用意されています。

# ELK スタックを AWS 上のElasticクラウドに移行する
<a name="migrate-an-elk-stack-to-elastic-cloud-on-aws"></a>

*Amazon Web Services、Battulga Purevragchaa、Antony Prasad Thevaraj*

*uday reddy、なし*

## 概要
<a name="migrate-an-elk-stack-to-elastic-cloud-on-aws-summary"></a>

[Elastic](https://www.elastic.co/) は長年にわたりサービスを提供してきました。通常、ユーザーや顧客は自社でオンプレミスで Elastic を管理しています。マネージド型の [Elasticsearchサービス](https://www.elastic.co/elasticsearch/service) である [Elastic Cloud](https://www.elastic.co/cloud) は、Elastic Stack (ELK Stack) を利用する方法と、[エンタープライズサーチ](https://www.elastic.co/enterprise-search)、[オブザーバビリティ](https://www.elastic.co/observability)、[セキュリティ](https://www.elastic.co/security) のためのソリューションを提供します。Elasticのソリューションには、ログ、メトリクス、APM(アプリケーションパフォーマンスモニタリング)、SIEM(セキュリティ情報とイベント管理)などのアプリからアクセスできます。機械学習、インデックスライフサイクル管理、Kibana Lens (ドラッグアンドドロップによる視覚化用) などの統合機能を使用できます。

セルフマネージド型のElasticsearchからElastic Cloudに移行すると、Elasticsearchサービスによって以下の処理が行われます。
+ 基盤となるインフラストラクチャーのプロビジョニングと管理
+ Elasticsearch クラスターの作成と管理
+ クラスターのスケールアップとスケールダウン
+ アップグレード、パッチ、スナップショットの作成

これにより、他の課題の解決に集中できる時間が増えます。

このパターンは、オンプレミスのElasticsearch 7.13をAmazon Web Services(AWS)のElasticCloud上のElasticsearchに移行する方法を定義します。他のバージョンでは、このパターンで説明されているプロセスを若干変更する必要がある場合があります。詳細については、Elastic 担当者にお問い合わせください。

## 前提条件と制限
<a name="migrate-an-elk-stack-to-elastic-cloud-on-aws-prereqs"></a>

**前提条件**
+ スナップショット用の [Amazon Simple Storage Service (Amazon S3)](https://aws.amazon.com/s3/) へのアクセス権を持つアクティブな [AWS アカウント](https://aws.amazon.com/account/)
+ スナップショットデータファイルを Amazon S3 にコピーするための、安全で十分な広帯域幅の[プライベートリンク](https://docs.aws.amazon.com/vpc/latest/userguide/vpn-connections.html)
+ [Amazon S3 Transfer Acceleration](https://aws.amazon.com/s3/transfer-acceleration/)
+ データインジェストが、十分な大きさのローカルデータストアまたはリモートストレージ (Amazon S3) に定期的にアーカイブされるようにする [Elastic Snapshotポリシー](https://www.elastic.co/guide/en/elasticsearch/reference/7.10/getting-started-snapshot-lifecycle-management.html)

移行を開始する前に、スナップショットとそれに付随するインデックスの [ライフサイクルポリシー](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-lifecycle-management.html) のサイズを把握しておく必要があります。詳細については、[Elasticにお問い合わせください](https://www.elastic.co/contact)。

**役割とスキル**

移行プロセスには、次の表に示す役割と専門知識も必要です。


| 
| 
| ロール  | 専門知識 | 責任 | 
| --- |--- |--- |
| App Runter サポート | ElasticクラウドとElasticオンプレミスに精通していること | Elasticに関連するすべてのタスク | 
| システム管理者またはデータベース管理者 | オンプレミスのElastic環境とその設定に関する深い知識 | ストレージのプロビジョニング、AWS コマンドラインインターフェイス (AWS CLI) のインストールと使用、Elasticにオンプレミスでフィードされるすべてのデータソースの特定を行う機能 | 
| ネットワーク管理者 | オンプレミスと AWS のネットワーク接続、セキュリティ、パフォーマンスに関する知識 | 接続帯域幅を理解した上で、オンプレミスから Amazon S3 へのネットワークリンクを確立する | 

**制限事項**
+ Elasticクラウド上のElasticサーチは、[サポートされている AWS リージョン (2021 年 9 月)](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html#ec-aws_regions) でのみご利用いただけます。

**Product versions**
+ Elasticsearch 7.10

## アーキテクチャ
<a name="migrate-an-elk-stack-to-elastic-cloud-on-aws-architecture"></a>

**ソーステクノロジースタック**

オンプレミスのElasticサーチ 7.13 以降：
+ クラスタースナップショット
+ インデックススナップショット
+ [Beats](https://www.elastic.co/beats/) 設定

**ソーステクノロジーアーキテクチャ**

次の図は、さまざまな取り込み方法、ノードタイプ、Kibana を使用した一般的なオンプレミスアーキテクチャを示しています。さまざまなノードタイプには、Elasticsearch クラスター、認証、可視化の役割が反映されています。

![\[Beats、Logstash、Elasticsearch、Kibana を含む 8 ステップのプロセス。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/23d1b437-22ff-420e-80ac-834f1116d234/images/937c4d22-429f-4673-86df-ae491d68389c.png)


1. Beats から Logstash へのインジェスト

1. Beats から Apache Kafka メッセージキューへのインジェスト

1. ファイルビートから Logstash への取り込み

1. Beats から Apache Kafka メッセージキューへのインジェスト

1. Logstash から Elasticsearch クラスターへのインジェスト

1. ターゲット Elasticsearch クラスター

1. 認証および通知ノード

1. Kibana ノードとブロブノード

**ターゲットテクノロジースタック**

Elastic Cloudは、クラスター間のレプリケーションにより、複数のAWS リージョンの software as service (SaaS) アカウントにデプロイされます。
+ クラスタースナップショット
+ インデックススナップショット
+ ビートの設定
+ Elasticクラウド
+ Network Load Balancer
+ Amazon Route 53
+ Amazon S3

**ターゲット アーキテクチャ**

![\[Route 53 エンドポイントは、2 つの異なるリージョンのマルチ AZ 環境にトラフィックをルーティングします。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/23d1b437-22ff-420e-80ac-834f1116d234/images/16cbac49-0adb-4469-b546-ae4b1ca35357.png)


 

マネージド型のElasticクラウドインフラストラクチャは以下のとおりです。
+ 可用性が高く、複数の [アベイラビリティーゾーン](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/) と複数の AWS リージョンに存在します。
+ データ (インデックスとスナップショット) は Elastic Cloud の[クロスクラスターレプリケーション (CCR) ](https://www.elastic.co/guide/en/elasticsearch/reference/7.14/xpack-ccr.html) を使用してレプリケートされるため、リージョンに障害が発生しにくい
+ アーカイブ (スナップショットは[Amazon S3](https://aws.amazon.com/s3/?p=pm&c=s3&z=4) にアーカイブされるため)
+ [Network Load Balancer](https://aws.amazon.com/elasticloadbalancing/network-load-balancer/) と[Route 53](https://aws.amazon.com/route53/) の組み合わせによるネットワーク分断耐性
+ [Elastic APM](https://www.elastic.co/apm/)、[Beats](https://www.elastic.co/beats/)、[Logstash](https://www.elastic.co/guide/en/logstash/current/index.html)からのデータインジェスト (ただしこれらに限定されない)

高レベル移行ステップ

Elasticは、オンプレミスのElasticクラスターをElasticクラウドに移行するための規範的な方法を独自に開発しました。Elasticの手法は、[Well-Architected FrameworkやAWS](https://aws.amazon.com/architecture/well-architected/?wa-lens-whitepapers.sort-by=item.additionalFields.sortDate&wa-lens-whitepapers.sort-order=desc) [Migration Acceleration Program(MAP)など、AWS 移行ガイダンスやベストプラクティスと直接連携し](https://aws.amazon.com/migration-acceleration-program/)、補完するものです。通常、AWS 移行の 3 つのフェーズは次のとおりです。
+ 評価
+ 準備
+ 移行とモダナイズ

Elasticは同様の移行段階を経ていますが、用語は補完的です。
+ ジョブの開始\$1
+ プラン
+  を実装する
+ 配信
+ 閉じる

Elasticは、Elastic インプリメンテーション メソドロジーを用いて、プロジェクト成果の実現を促進します。これは、Elastic、コンサルティングチーム、顧客チームが明確に連携して、意図した成果を共同で達成できるようにするために設計上インクルーシブになっています。

Elasticの手法は、従来のウォーターフォールフェーズと実装フェーズのスクラムを組み合わせたものです。技術要件の設定は、リスクを最小限に抑えながら、協調的な方法で繰り返し提供されます。

![\[Elastic インプリメンテーション メソドロジーの5つの段階を示す図。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/23d1b437-22ff-420e-80ac-834f1116d234/images/b041c61d-980e-49a0-a721-791c20edde64.png)


 

## ツール
<a name="migrate-an-elk-stack-to-elastic-cloud-on-aws-tools"></a>

**AWS サービス**
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) は、可用性と拡張性に優れたドメインネームシステム (DNS) のウェブサービスです。Route 53 を使用すると、ドメイン登録、DNS ルーティング、ヘルスチェックの 3 つの主要な機能を任意の組み合わせで実行できます。
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) — Amazon Simple Storage Service (Amazon S3) は、オブジェクトストレージサービスです。Simple Storage Service (Amazon S3) を使用すると、いつでもウェブ上の任意の場所から任意の量のデータを保存および取得できます。このパターンでは、S3 バケットと [Amazon S3 Transfer Acceleration](https://docs.aws.amazon.com/AmazonS3/latest/userguide/transfer-acceleration-examples.html) を使用します。
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) – Elastic Load Balancing は、受信したトラフィックを複数のアベイラビリティーゾーンの複数のターゲット (EC2 インスタンス、コンテナ、IP アドレスなど) に自動的に分散させます。

**その他のツール**
+ [Beats](https://www.elastic.co/beats/) – Beats は Logstash または Elasticsearch からデータを送信します。
+ [Elastic Cloud](https://www.elastic.co/cloud/) – Elasticクラウドは、Elasticsearchをホスティングするためのマネージドサービスです。
+ [Elasticsearch](https://www.elastic.co/elasticsearch/) — Elasticsearch は、Elastic Stack を使用してデータを一元的に保存する検索および分析エンジンで、拡張性の高い検索と分析を可能にします。このパターンでは、スナップショットの作成とクラスター間のレプリケーションも使用されます。
+ [Logstash](https://www.elastic.co/logstash/) — Logstashは、複数のソースからデータを取り込んで変換し、データストレージに送信するサーバー側のデータ処理パイプラインです。

## エピック
<a name="migrate-an-elk-stack-to-elastic-cloud-on-aws-epics"></a>

### 移行の準備をする
<a name="prepare-the-migration"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| オンプレミスのElasticソリューションを実行しているサーバーを特定する。 | Elastic への移行がサポートされていることを確認してください。 | アプリ所有者 | 
| オンプレミスサーバーの構成を理解します。 | オンプレミスでワークロードを正常に処理するために必要なサーバー構成を理解するには、現在使用されているサーバーのハードウェアフットプリント、ネットワーク構成、およびストレージ特性を調べてください。 | App Runter サポート | 
| ユーザーとアプリのアカウント情報を収集します。 | オンプレミスのElastic環境で使用されるユーザー名とアプリ名を特定します。 | システム管理者、アプリケーションサポート | 
| Beats とデータシッパーの設定を文書化します。 | 設定を文書化するには、既存のデータソースとシンクを見てください。詳細については、[Elastic Load Balancing ドキュメント](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html)を参照してください。 | App Runter サポート | 
| データの速度と量を決定します。 | クラスターが処理するデータ量のベースラインを設定します。 | システム管理者、アプリケーションサポート | 
| RPO と RTO のシナリオを文書化します。 | 障害およびサービスレベルアグリーメント (SLA) の観点から、目標復旧時点 (RPO) と目標復旧時間 (RTO) のシナリオを文書化します。 | システム管理者、アプリケーションサポート | 
| 最適なスナップショットライフサイクル設定を決定します。 | *移行中および移行後*に Elastic スナップショットを使用してデータを保護する必要がある頻度を定義します。 | システム管理者、アプリケーションサポート | 
| 移行後のパフォーマンスの期待値を定義します。 | 現在および予想される画面更新、クエリのランタイム、ユーザーインターフェイスの動作に関するメトリクスを生成します。 | システム管理者、アプリケーションサポート | 
| インターネットアクセスの転送、帯域幅、可用性の要件を文書化します。 | Amazon S3 にスナップショットをコピーするためのインターネット接続の速度、レイテンシー、耐障害性を確認します。 | ネットワーク管理者 | 
| Elastic のオンプレミスランタイムの現在のコストを文書化してください。 | AWS の対象となる環境のサイジングが、パフォーマンスと費用対効果の両方を考慮して設計されていることを確認してください。 | DBA、システム管理者、アプリケーションサポート | 
| 認証と認可のニーズを特定します。 | Elastic Stackのセキュリティ機能には、ライトウェイトディレクトリアクセスプロトコル(LDAP)、セキュリティアサーションマークアップ言語(SAML)、OpenID Connect(OIDC)などのビルトインレルムが用意されています。 | DBA、システム管理者、アプリケーションサポート | 
| 地理的位置に基づく具体的な規制要件を理解してください。 | データは必ず、お客様の要件および関連する国の要件に従ってエクスポートおよび暗号化してください。 | システム管理者、アプリケーションサポート | 

### 移行を実装する
<a name="implement-the-migration"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Amazon S3 でステージングエリアを準備します。 | Amazon S3 でスナップショットを受け取るには、[S3 バケット](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) と、新しく作成したバケットへのフルアクセス権を持つ一時的な AWS Identity and Access Management (IAM) ロールを作成します。詳細については、[のIAM ユーザーにアクセス許可を委任するロールの作成を参照してください](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。または、AWS Security Token Service を使用して[一時的なセキュリティ認証情報を生成し、リクエスト](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)に署名することもできます。アクセスキー ID、シークレットアクセスキー、セッショントークンを安全な場所に保管してください。バケットで [Amazon S3 Transfer Acceleration](https://docs.aws.amazon.com/AmazonS3/latest/userguide/transfer-acceleration-examples.html) を有効にする | AWS 管理者 | 
| AWS CLI と Amazon S3 プラグインをオンプレミスにインストールします。 | Elasticsearch の各ノードで、次のコマンドを実行します。<pre>sudo bin/elasticsearch-plugin install repository-s3</pre>その後、キットが再起動します。 | AWS 管理者 | 
| Amazon S3 クライアントアクセスを設定します。 | 以下のコマンドを実行して、以前に作成したキーを追加します。<pre>elasticsearch-keystore add s3.client.default.access_key</pre><pre>elasticsearch-keystore add s3.client.default.secret_key</pre><pre>elasticsearch-keystore add s3.client.default.session_token</pre> | AWS 管理者 | 
| Elastic データのスナップショットリポジトリを登録します。 | [Kibana Dev Tools](https://www.elastic.co/guide/en/kibana/current/console-kibana.html) を使用して、どのリモート S3 バケットに書き込むかをオンプレミスのローカルクラスターに指示します。 | AWS 管理者 | 
| スナップショットポリシーを設定します。 | スナップショットのライフサイクル管理を設定するには、Kibana **ポリシー** タブで **SLM ポリシー**を選択し、含める時間、データストリーム、インデックス、使用する名前を定義します。スナップショットを頻繁に作成するポリシーを設定します。スナップショットは段階的に作成され、ストレージを効率的に使用します。適性評価の決定に合わせてください。ポリシーでは、[保存ポリシー](https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-retention.html) を指定して、不要になったスナップショットを自動的に削除することもできます。 | App Runter サポート | 
| スナップショットが機能することを確認します。 | Kibana Dev Tools で、次のコマンドを実行します。<pre>GET _snapshot/<your_repo_name>/_all</pre> | システム管理者、アプリケーションサポート  | 
| 新しいクラスターをElasticクラウドにデプロイします。 | [Elastic にログイン](https://cloud.elastic.co/login?redirectTo=%2Fhome)し、レディネスアセスメントで得たビジネス上の検出結果から導き出された「オブザーバビリティ、サーチ、セキュリティ」の対象となるクラスターを選択します。 | システム管理者、アプリケーションサポート | 
| クラスターキーストアへのアクセスを設定します。 | 新しいクラスターは、スナップショットを保存する S3 バケットにアクセスする必要があります。Elasticsearch サービスコンソールで**セキュリティ**を選択し、先ほど作成したアクセスキーとシークレット IAM キーを入力します。 | AWS 管理者 | 
| Amazon S3 にアクセスするようにElastic Cloudホストクラスターを設定します。 | Amazon S3 に以前に作成したスナップショットリポジトリへの新しいクラスターアクセスを設定します。Kibana を使用して、次の操作を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-an-elk-stack-to-elastic-cloud-on-aws.html) | システム管理者、アプリケーションサポート | 
| 新しい Amazon S3 リポジトリを確認します。 | Elastic Cloud クラスターでホストされている新しいリポジトリにアクセスできることを確認します。 | AWS 管理者 | 
| Elasticsearch サービスクラスターを初期化します。 | Elasticsearch サービスコンソールで、S3 スナップショットから Elasticsearch サービスクラスターを初期化します。以下のいずれかのコマンドを実行します。<pre>*/_close?expand_wildcards=all</pre><pre>/_snapshot/<your-repo-name>/  <your-snapshot-name>/_restore</pre><pre>*/_open?expand_wildcards=all</pre> | App Runter サポート | 

### 移行を完了してください。
<a name="complete-the-migration"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| スナップショットの復元が成功したことを確認します。 | Kibana Dev Tools で、次のコマンドを実行します。<pre>GET _cat/indices</pre> | App Runter サポート | 
| 取り込みサービスを再デプロイ。 | BeatsとLogstashのエンドポイントを新しいElasticsearchサービスのエンドポイントConnect。 | App Runter サポート | 

### クラスター環境のテストとクリーンアップ
<a name="test-the-cluster-environment-and-clean-up"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| クラスター環境を検証します。 | オンプレミスの Elastic クラスター環境を AWS に移行したら、その環境に接続し、独自のユーザー承認テスト (UAT) ツールを使用して新しい環境を検証できます。 | App Runter サポート | 
| リソースをクリーンアップします。 | クラスターが正常に移行されたことを確認したら、S3 バケットと、移行に使用した IAM ロールを削除します。 | AWS 管理者 | 

## 関連リソース
<a name="migrate-an-elk-stack-to-elastic-cloud-on-aws-resources"></a>

**Elastic Inference**
+ [Elasticクラウド](https://www.elastic.co/cloud/)
+ [AWS でのマネージド型Elasticサーチとキバナ](https://www.elastic.co/elasticsearch/service)
+ [Elastic エンタープライズサーチ](https://www.elastic.co/enterprise-search)
+ [Elastic インテグレーション](https://www.elastic.co/integrations?search=amazon)
+ [弾性オブザーバビリティ](https://www.elastic.co/observability)
+ [Elastic セキュリティ](https://www.elastic.co/security)
+ [ビート](https://www.elastic.co/beats/)
+ [ElasticAPM](https://www.elastic.co/apm/)
+ [インデックスライフサイクル管理への移行](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-migrate-index-management.html)
+ [Elasticサブスクリプション](https://www.elastic.co/subscriptions)
+ [Elasticにお問い合わせください](https://www.elastic.co/contact)

*Elasticのブログ投稿*
+ [セルフマネージド型のElasticsearchからAWS 上のElasticCloudに移行する方法](https://www.elastic.co/blog/how-to-migrate-from-self-managed-elasticsearch-to-elastic-cloud-on-aws) (ブログ記事)
+ [Elasticクラウドへの移行](https://www.elastic.co/blog/migrating-to-elastic-cloud) (ブログ記事)

*Elasticドキュメント*
+ [チュートリアル：SLM によるバックアップの自動化](https://www.elastic.co/guide/en/elasticsearch/reference/7.10/getting-started-snapshot-lifecycle-management.html)
+ [ILM： インデックスのライフサイクルの管理](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-lifecycle-management.html)
+ [Logstash](https://www.elastic.co/guide/en/logstash/current/index.html)
+ [クラスター間レプリケーション(CCR)](https://www.elastic.co/guide/en/elasticsearch/reference/7.14/xpack-ccr.html)
+ [インジェストパイプライン](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html)
+ [Elasticサーチ API リクエストの実行](https://www.elastic.co/guide/en/kibana/current/console-kibana.html)
+ [スナップショット保持期限](https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-retention.html)

*Elasticビデオとウェビナー*
+ [伸縮自在なクラウド移行](https://www.youtube.com/watch?v=WbPJi-APZ_Q)
+ [Elastic Cloud： 顧客が移行する理由](https://www.elastic.co/webinars/elastic-cloud-why-customers-are-migrating-now) (オンラインセミナー)

**AWS リファレンス**
+ [AWS Marketplace でのElasticクラウド](https://aws.amazon.com/marketplace/seller-profile?id=d8f59038-c24c-4a9d-a66d-6711d35d7305)
+ [AWS コマンドラインインターフェイス](https://docs.aws.amazon.com/AmazonS3/latest/userguide/setup-aws-cli.html)
+ [AWS Direct Connect](https://aws.amazon.com/directconnect/)
+ [ Migration Acceleration Program (MAP)](https://aws.amazon.com/migration-acceleration-program/)
+ [Network Load Balancers](https://aws.amazon.com/elasticloadbalancing/network-load-balancer/)
+ [リージョンとアベイラビリティーゾーン](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)
+ [Amazon Route 53](https://aws.amazon.com/route53/)
+ [Amazon Simple Storage Service](https://aws.amazon.com/s3/)
+ [Amazon S3 Transfer Acceleration](https://aws.amazon.com/s3/transfer-acceleration/)
+ [VPN 接続](https://docs.aws.amazon.com/vpc/latest/userguide/vpn-connections.html)
+ [Well-Architected フレームワーク](https://aws.amazon.com/architecture/well-architected/?wa-lens-whitepapers.sort-by=item.additionalFields.sortDate&wa-lens-whitepapers.sort-order=desc)

## 追加情報
<a name="migrate-an-elk-stack-to-elastic-cloud-on-aws-additional"></a>

複雑なワークロードの移行を計画している場合は、[Elasticコンサルティングサービスをご利用ください](https://www.elastic.co/consulting/engage)。設定やサービスに関する基本的な質問がある場合は、[ElasticSupport](mailto:support@elastic.co) チームにお問い合わせください。

# Starburst AWS クラウド を使用してデータを に移行する
<a name="migrate-data-to-the-aws-cloud-by-using-starburst"></a>

*Amazon Web Services、Antony Prasad Thevaraj、Suresh Veeragoni*

*Shaun Van Staden*

## 概要
<a name="migrate-data-to-the-aws-cloud-by-using-starburst-summary"></a>

Starburst は、既存のデータソースを単一のアクセスポイントにまとめるエンタープライズクエリエンジンを提供することで、Amazon Web Services (AWS) へのデータ移行を加速します。移行計画を最終決定する前に、複数のデータ ソースにわたって分析を実行して、貴重なインサイトを得ることができます。通常どおりの分析を中断することなく、Starburst エンジンまたは専用の抽出、変換、ロード (ETL) アプリケーションを使用してデータを移行できます。

## 前提条件と制限事項
<a name="migrate-data-to-the-aws-cloud-by-using-starburst-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ 仮想プライベートクラウド (VPC)
+ Amazon Elastic Kubernetes Service (Amazon EKS) クラスター
+ Amazon Elastic Compute Cloud (Amazon EC2) Auto Scaling グループ
+ 移行する必要のある現行システムワークロードのリスト
+ からオンプレミス環境 AWS へのネットワーク接続

## アーキテクチャ
<a name="migrate-data-to-the-aws-cloud-by-using-starburst-architecture"></a>

**リファレンスアーキテクチャ**

以下の大まかなアーキテクチャ図は、 AWS クラウドでの Starburst Enterprise の一般的なデプロイを示しています。

1. Starburst Enterprise クラスターは AWS アカウント内で実行されます。

1. ユーザーは Lightweight Directory Access Protocol (LDAP) または Open Authorization (OAuth) を使用して認証し、Starburst クラスターと直接やり取りします。

1. Starburst は、Amazon Simple Storage Service (Amazon S3)、Amazon Relational Database Service (Amazon RDS) AWS Glue、Amazon Redshift など、複数の AWS データソースに接続できます。Starburst は、、オンプレミス AWS クラウド、またはその他のクラウド環境のデータソース間でフェデレーティッドクエリ機能を提供します。

1. Starburst Enterprise は、Helm チャートを使用して Amazon EKS クラスターで起動します。

1. Starburst Enterprise は、Amazon EC2 Auto Scaling グループと Amazon EC2 スポットインスタンスを使用してインフラストラクチャを最適化します。

1. Starburst Enterprise は既存のオンプレミスデータソースに直接接続し、データをリアルタイムで読み取ります。さらに、この環境に既存の Starburst Enterprise デプロイがある場合は、 の新しい Starburst クラスター AWS クラウド をこの既存のクラスターに直接接続できます。

![\[以下の大まかなアーキテクチャ図は、Starburst Enterprise の AWS クラウドへのデプロイを説明しています。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/12ae0463-9029-4a32-9d7b-70cdb5406fb0/images/e9975d3a-f75b-41a2-8c08-5b82539adf8c.png)


以下の点に注意してください。
+ Starburst は、データ仮想化プラットフォームではありません。分析用のデータメッシュ戦略の基盤となる SQL ベースの超並列処理 (MPP) クエリエンジンです。
+ Starburst を移行の一環としてデプロイすると、既存のオンプレミスインフラストラクチャに直接接続できます。
+ Starburst には、さまざまなレガシーシステムへの接続を容易にするエンタープライズコネクタやオープンソースコネクタがいくつか組み込まれています。コネクターとその機能の一覧については、*Starburst Enterprise ユーザーガイド*の「[コネクター](https://docs.starburst.io/latest/connector.html)」を参照してください。
+ Starburst は、オンプレミスのデータソースからデータをリアルタイムでクエリできます。これにより、データの移行中に通常の業務が中断することを防止できます。
+ 既存のオンプレミス Starburst Enterprise デプロイから移行する場合は、特殊なコネクタ*である Starburst Stargate* を使用して、 の Starburst Enterprise クラスターをオンプレミスクラスター AWS に直接接続できます。これにより、ビジネスユーザーとデータアナリストがクエリを からオンプレミス環境にフェデレーションする場合 AWS クラウド に、さらにパフォーマンス上の利点が得られます。

**大まかなプロセスの概要**

Starburst では、移行前にすべてのデータに関するインサイトを得ることができるため、データ移行プロジェクトを加速できます。次の図は、Starburst を使用してデータを移行する一般的なプロセスを示しています。

![\[Starburst を使用して AWS クラウドにデータを移行するためのプロセスフロー\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/12ae0463-9029-4a32-9d7b-70cdb5406fb0/images/e79b0084-7275-4824-8854-646236ec23dc.png)


**ロール**

通常、Starburst を使用して移行を完了するには、以下のロールが必要です。　
+ **クラウド管理者** — Starburst Enterprise アプリケーションを実行するためにクラウドリソースを利用できるようにする責任があります。
+ **Starburst 管理者** — Starburst アプリケーションのインストール、設定、管理、サポートを担当します。
+ **データエンジニア** — 以下の責任を負います。
  + クラウドにレガシーデータを移行する
  + 分析をサポートするセマンティックビューの構築
+ **ソリューションオーナーまたはシステムオーナー** — ソリューション全体の実装を担当

## ツール
<a name="migrate-data-to-the-aws-cloud-by-using-starburst-tools"></a>

**AWS のサービス**
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) は、 AWS クラウドでスケーラブルなコンピューティング容量を提供します。仮想サーバーを必要な数だけ起動して、迅速にスケールアップまたはスケールダウンができます。
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) を使用すると、独自の Kubernetes コントロールプレーンやノードをインストールまたは維持 AWS することなく、 で Kubernetes を実行できます。

**その他のツール**
+ [Helm](https://helm.sh/docs/) – Helm は、Kubernetes クラスター上でアプリケーションをインストールおよび管理するのに役立つ Kubernetes のパッケージマネージャです。
+ [Starburst Enterprise](https://docs.starburst.io/latest/index.html) – 分析用のデータメッシュ戦略の基盤となる SQL ベースの超 parallel 処理 (MPP) クエリエンジンです。
+ [Starburst Stargate](https://docs.starburst.io/latest/connector/starburst-stargate.html) – Starburst Stargate は、オンプレミスデータセンターのクラスターなど、ある Starburst Enterprise 環境のカタログとデータソースを、 AWS クラウドのクラスターなどの別の Starburst Enterprise 環境のカタログとデータソースにリンクします。

## エピック
<a name="migrate-data-to-the-aws-cloud-by-using-starburst-epics"></a>

### データを評価する
<a name="assess-the-data"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| データを特定して優先順位を付けます。 | 移動するデータを特定します。大規模なオンプレミスのレガシーシステムには、移行したくないデータやコンプライアンス上の理由で移動できないデータに加え、移行したいコアデータが含まれる場合があります。データインベントリで、どのデータを最初にターゲットにするか決めるのに役立ちます。詳細については、「[自動ポートフォリオ検出の開始方法](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/get-started-with-automated-portfolio-discovery.html)」 を参照してください。 | データエンジニア、DBA | 
| データの探索、インベントリ、バックアップを行います。 | ユースケースに応じたデータの質、量、関連性を検証します。必要に応じて、データのバックアップまたはスナップショットを作成し、データのターゲット環境を確定します。 | データエンジニア、DBA | 

### Starburst Enterprise 環境を設定する
<a name="set-up-the-starburst-enterprise-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
|  AWS クラウドで Starburst Enterprise を設定します。 | データをカタログ化している間に、マネージド型の Amazon EKS クラスターに Starburst Enterprise を設定します。詳細については、*Starburst Enterprise リファレンスドキュメント*の「[Kubernetes を使用したデプロイ](https://docs.starburst.io/latest/k8s.html)」を参照してください。これにより、データ移行中も通常どおりの分析が可能になります。 | AWS 管理者、アプリ開発者 | 
| Starburst をデータソースに接続します。 | データを特定し、Starburst Enterprise を設定した後、Starburst をデータソースに接続します。Starburst は SQL クエリとしてデータソースから直接データを読み取ります。詳細については、[Starburst Enterprise リファレンスドキュメント](https://docs.starburst.io/latest/overview.html)を参照してください。 | AWS 管理者、アプリ開発者 | 

### データを移行する
<a name="migrate-the-data"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ETL パイプラインを構築して実行します。 | データ移行プロセスを開始します。このアクティビティは、通常どおりの分析と同時に実施できます。移行には、サードパーティ製の製品または Starburst を使用できます。Starburst には、さまざまなソースのデータを読み書きする機能があります。詳細については、[Starburst Enterprise リファレンスドキュメント](https://docs.starburst.io/latest/overview.html)を参照してください。 | データエンジニア | 
| データを検証します。 | データを移行したら、データを検証して、必要なデータがすべて移動され、変更がないことを確認します。 | データエンジニア、DevOps エンジニア | 

### カットオーバー
<a name="cut-over"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| データをカットオーバーします。 | データの移行と検証が完了した後、データをカットオーバーできます。これには、Starburst のデータ接続リンクの変更が含まれます。オンプレミスのソースを指定する代わりに、新しいクラウドソースを指定してセマンティックビューを更新します。詳細については、*Starburst Enterprise リファレンスドキュメント*の「[コネクタ](https://docs.starburst.io/latest/connector.html)」を参照してください。 | データエンジニア、カットオーバーのリーダー | 
| ユーザーにロールアウトします。 | データコンシューマーは、移行したデータソースから作業を開始します。このプロセスは、分析のエンドユーザーには表示されません。 | カットオーバーのリーダー、データエンジニア | 

## 関連リソース
<a name="migrate-data-to-the-aws-cloud-by-using-starburst-resources"></a>

**AWS Marketplace**
+ [Starburst Galaxy](https://aws.amazon.com/marketplace/pp/prodview-yugyv4gbgn5ss?ref_=srh_res_product_title)
+ [Starburst Enterprise](https://aws.amazon.com/marketplace/pp/prodview-pwnl3c6p2jycg?ref_=srh_res_product_title)
+ [Starburst Data JumpStart](https://aws.amazon.com/marketplace/pp/prodview-ou6drb23gch2u?ref_=srh_res_product_title)
+ [Starburst Enterprise with Graviton](https://aws.amazon.com/marketplace/pp/prodview-2bpppdqlesn6w?ref_=srh_res_product_title)

**Starburst ドキュメント**
+ [Starburst Enterprise ユーザーガイド](https://docs.starburst.io/index.html)
+ [Starburst Enterprise リファレンスドキュメント](https://docs.starburst.io/latest/index.html)

**その他の AWS ドキュメント**
+ [自動ポートフォリオ検出の使用を開始する](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/get-started-with-automated-portfolio-discovery.html) (AWS 規範ガイダンス)
+ [Starburst を使用したクラウドインフラストラクチャのコストとパフォーマンスの最適化 AWS](https://aws.amazon.com/blogs/architecture/optimizing-cloud-infrastructure-cost-and-performance-with-starburst-on-aws/) (AWS ブログ記事)

# AWS での入力ファイルサイズの ETL 取り込みを最適化する
<a name="optimize-the-etl-ingestion-of-input-file-size-on-aws"></a>

*Amazon Web Services、Apoorva Patrikar*

## 概要
<a name="optimize-the-etl-ingestion-of-input-file-size-on-aws-summary"></a>

このパターンは、データを処理する前にファイルサイズを最適化することで、AWS Glue 上のビッグデータと Apache Spark ワークロードの抽出、変換、ロード (ETL) プロセスの取り込みステップを最適化する方法を示しています。このパターンを使用して、*小さなファイル*の問題を防止または解決してください。つまり、サイズの小さいファイルが多数あると、ファイルの合計サイズが原因でデータ処理が遅くなる場合です。たとえば、それぞれがわずか数百キロバイトのファイルが数百個あると、AWS Glue ジョブのデータ処理速度が大幅に低下する可能性があります。これは、AWS Glue が Amazon Simple Storage Service (Amazon S3) で内部リスト機能を実行する必要があり、YARN (さらに別のリソースネゴシエーター) は大量のメタデータを保存する必要があるためです。データ処理速度を向上させるには、グループ化を使用すると、ETL タスクでは入力ファイルのグループを単一のインメモリパーティションに読み取ることができます。このパーティションは、小さいファイルを自動的にグループ化します。または、カスタムコードを使用して既存のファイルにバッチロジックを追加することもできます。

## 前提条件と制限
<a name="optimize-the-etl-ingestion-of-input-file-size-on-aws-prereqs"></a>

**前提条件**
+ アクティブなAWS アカウント
+ 1 つ以上の AWS Glue [ジョブ](https://docs.aws.amazon.com/glue/latest/dg/author-job.html)
+ 1 つ以上のビッグデータまたは [Apache Spark](https://spark.apache.org/) ワークロード
+ [S3 バケット](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html)

## アーキテクチャ
<a name="optimize-the-etl-ingestion-of-input-file-size-on-aws-architecture"></a>

次のパターンは、さまざまな形式のデータを AWS Glue ジョブで処理し、S3 バケットに保存してパフォーマンスを可視化する方法を示しています。

![\[さまざまな形式のデータが AWS Glue ジョブによって処理され、S3 バケットに保存されます。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/88ee332f-2f12-4d88-b491-e78bbb173850/images/9a97b54a-3f67-4a48-94d2-5807373ace25.png)


この図表は、次のワークフローを示しています:

1. 
**注記**  
AWS Glue ジョブは、CSV、JSON、Parquet 形式の小さなファイルを動的フレームに変換します。: 入力ファイルのサイズは、AWS Glue ジョブのパフォーマンスに最も大きな影響を与えます。

1. AWS Glue ジョブは S3 バケットの内部リスト機能を実行します。

## ツール
<a name="optimize-the-etl-ingestion-of-input-file-size-on-aws-tools"></a>
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) はフルマネージド型の ETL サービスです。これにより、データストアとデータストリーム間でのデータの分類、整理、強化、移動を確実に行うことができます。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

## エピック
<a name="optimize-the-etl-ingestion-of-input-file-size-on-aws-epics"></a>

### グルーピングを使用して読み取り中の ETL 取り込みを最適化する
<a name="use-grouping-to-optimize-etl-ingestion-during-reading"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| グループサイズを指定します。 | 50,000 個を超えるファイルがある場合、デフォルトでグループ化されます。ただし、`connectionOptions` パラメーターでグループサイズを指定することで、50,000 ファイル未満のファイルでもグループ化できます。`connectionOptions` パラメーターは `create_dynamic_frame.from_options` メソッド内にあります。 | データエンジニア | 
| グループ化コードを記述します。 | `create_dynamic_frame` メソッドを使用して動的フレームを作成します。例えば、次のようになります。<pre>S3bucket_node1 = glueContext.create_dynamic_frame.from_options(<br />    format_options={"multiline": False},<br />    connection_type="s3",<br />    format="json",<br />    connection_options={<br />        "paths": ["s3://bucket/prefix/file.json"],<br />        "recurse": True,<br />        "groupFiles": 'inPartition', <br />        "groupSize": 1048576<br />    },<br />    transformation_ctx="S3bucket_node1",<br />)</pre>`groupFiles` を使用して Amazon S3 パーティショングループ内のファイルをグループ化します。`groupSize` を使用して、メモリに読み込まれるグループのターゲットサイズを設定します。`groupSize` バイト単位で指定します (1048576 = 1 MB)。 | データエンジニア | 
| コードをワークフローに追加します。 | AWS Glue のジョブ[ワークフロー](https://docs.aws.amazon.com/glue/latest/dg/workflows_overview.html) にグループコードを追加します。 | データエンジニア | 

### カスタムロジックを使用して ETL の取り込みを最適化します。
<a name="use-custom-logic-to-optimize-etl-ingestion"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 言語と処理プラットフォームを選択してください。 | ユースケースに合わせたスクリプト言語と処理プラットフォームを選択してください。 | クラウドアーキテクト | 
| コードを書き込む | ファイルをまとめてバッチ処理するカスタムロジックを記述します。 | クラウドアーキテクト | 
| コードをワークフローに追加します。 | AWS Glue のジョブ [ワークフロー](https://docs.aws.amazon.com/glue/latest/dg/workflows_overview.html) にコードを追加します。これにより、ジョブを実行するたびにカスタムロジックを適用できます。 | データエンジニア | 

### 変換後にデータを書き込む際の再パーティション
<a name="repartition-when-writing-data-after-transformation"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 消費パターンを分析します。 | ダウンストリームアプリケーションが書き込みデータをどのように使用するのかを調べます。例えば、ダウンストリームでは毎日データをクエリするが、処理側ではリージョンごとにしかデータをパーティション分割していない場合、あるいは出力ファイルがファイルあたり 2.5 KB など非常に小さい場合、これは消費に最適ではありません。 | DBA | 
| 書き込み前にデータを再パーティショニングします。 | 処理中 (処理ロジックに基づく) および処理後 (消費に基づく) の結合またはクエリに基づいて再パーティショニングします。例えば、`.repartition(100000)` などのバイトサイズに基づいて再パーティショニングをしたり、`.repartition("column_name")` などの列に基づいて再パーティショニングをしたりします。 | データエンジニア | 

## 関連リソース
<a name="optimize-the-etl-ingestion-of-input-file-size-on-aws-resources"></a>
+ [大きなグループの入力ファイルの読み取り](https://docs.aws.amazon.com/glue/latest/dg/grouping-input-files.html)
+ [AWS Glue のモニタリング](https://docs.aws.amazon.com/glue/latest/dg/monitor-glue.html)
+ [Amazon CloudWatch メトリクスを使用した AWS Glue のモニタリング](https://docs.aws.amazon.com/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)
+ [ジョブのモニタリングとデバッグ](https://docs.aws.amazon.com/glue/latest/dg/monitor-profile-glue-job-cloudwatch-metrics.html)
+ [AWS Glue でのサーバーレス ETL の使用を開始する](https://docs.aws.amazon.com/prescriptive-guidance/latest/serverless-etl-aws-glue/welcome.html)

## 追加情報
<a name="optimize-the-etl-ingestion-of-input-file-size-on-aws-additional"></a>

**ファイルサイズの決定**

ファイルサイズが大きすぎるか小さすぎるかを判断する簡単な方法はありません。ファイルサイズが処理パフォーマンスに与える影響は、クラスターの構成によって異なります。コア Hadoop では、ブロックサイズを最大限に活用するために 128 MB または 256 MB のファイルを使用することをお勧めします。

AWS Glue のほとんどのテキストファイルワークロードでは、5 ～ 10 DPU クラスターのファイルサイズを 100 MB から 1 GB の範囲にすることを推奨しています。入力ファイルの最適なサイズを判断するには、AWS Glue ジョブの前処理セクションを監視し、ジョブの CPU 使用率とメモリ使用率を確認します。

**追加の考慮事項**

ETL の初期段階でのパフォーマンスがボトルネックである場合は、処理前にデータファイルをグループ化またはマージすることを検討してください。ファイル生成プロセスを完全に制御できれば、未加工データを AWS に送信する前に、ソースシステム自体にデータポイントを集約する方がさらに効率的です。

# を使用して、検証、変換、パーティショニングで ETL パイプラインをオーケストレーションする AWS Step Functions
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions"></a>

*Amazon Web Services、Sandip Gangapadhyay*

## 概要
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-summary"></a>

このパターンは、パフォーマンスとコストを最適化するために大規模な CSV データセットを検証、変換、圧縮、およびパーティション化するサーバーレスの抽出、変換、ロード (ETL) パイプラインを構築する方法を示しています。パイプラインは によって調整 AWS Step Functions され、エラー処理、自動再試行、ユーザー通知機能が含まれています。

CSV ファイルが Amazon Simple Storage Service (Amazon S3) バケットの出典フォルダにアップロードされると、ETL パイプラインが実行を開始します。パイプラインは、ソース CSV ファイルの内容とスキーマを検証し、CSV ファイルを圧縮された Apache Parquet 形式に変換し、データセットを年、月、日ごとにパーティション化し、分析ツールが処理できるように別のフォルダに保存します。

このパターンを自動化するコードは、GitHub の [ETL Pipeline with AWS Step Functions](https://github.com/aws-samples/aws-step-functions-etl-pipeline-pattern) リポジトリから取得できます。

## 前提条件と制限
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-prereqs"></a>

**前提条件**
+ アクティブ AWS アカウント。
+ AWS Command Line Interface (AWS CLI) を にインストールして設定し AWS アカウント、 AWS CloudFormation スタックをデプロイして AWS リソースを作成できるようにします。 AWS CLI バージョン 2 を使用することをお勧めします。手順については、 AWS CLI ドキュメントの[「 の最新バージョンのインストールまたは更新 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)」を参照してください。設定手順については、 AWS CLI ドキュメントの[「設定と認証情報ファイルの設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)」を参照してください。
+ Amazon S3 バケット。
+ 正しいスキーマの CSV データセット。(このパターンに含まれる [コードリポジトリ](https://github.com/aws-samples/aws-step-functions-etl-pipeline-pattern/) には、使用できる正しいスキーマとデータ型が記載されたサンプル CSV ファイルが用意されています)。
+ をサポートするウェブブラウザ AWS マネジメントコンソール。[ でサポートされるブラウザのリストについては、](https://aws.amazon.com/premiumsupport/knowledge-center/browsers-management-console/)を参照してください。
+ AWS Glue コンソールアクセス。
+ AWS Step Functions コンソールアクセス。

**制限事項**
+ では AWS Step Functions、履歴ログを保持するための最大制限は 90 日です。詳細については、 AWS Step Functions ドキュメントの[「Step Functions サービスクォータ](https://docs.aws.amazon.com/step-functions/latest/dg/service-quotas.html)」を参照してください。

**製品バージョン**
+ 用の Python 3.13 AWS Lambda
+ AWS Glue バージョン 4.0

## アーキテクチャ
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-architecture"></a>

![\[Step Functions、AWS Glue、Amazon SNS を介した S3 ソースバケットからの ETL プロセスを 10 ステップで実行します。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/8eb792b0-d35b-4a63-ba2d-71eb8d2c1203/images/054c8e9d-76a2-4334-b21a-cbe76af45923.png)


 

この図に示されているワークフローは、以下の大まかなステップで構成されています。

1. ユーザーは CSV ファイルを Amazon S3 のソースフォルダにアップロードします。

1. Amazon S3 通知イベントは、 AWS Step Functions ステートマシンを起動する AWS Lambda 関数を開始します。

1. Lambda 関数は、未加工の CSV ファイルのスキーマとデータ型を検証します。

1. 検証結果に応じて：

   1. ソースファイルの検証が成功すると、ファイルはステージフォルダーに移動してさらに処理されます。

   1. 検証に失敗すると、ファイルはエラーフォルダに移動し、Amazon Simple Notiﬁcation Service (Amazon SNS) を通じてエラー通知が送信されます。

1.  AWS Glue クローラは、Amazon S3 のステージフォルダから raw ファイルのスキーマを作成します。

1.  AWS Glue ジョブは、raw ファイルを Parquet 形式に変換、圧縮、パーティション化します。

1.  AWS Glue ジョブは、Amazon S3 の変換フォルダにもファイルを移動します。

1.  AWS Glue クローラは、変換されたファイルからスキーマを作成します。生成されたスキーマは、どの分析ジョブでも使用できます。 を使用して、Amazon Athena でクエリを実行することができます。

1. パイプラインがエラーなしで完了すると、スキーマファイルはアーカイブフォルダーに移動されます。エラーが発生した場合、ファイルは代わりにエラーフォルダーに移動されます。

1. Amazon SNS は、パイプラインの完了ステータスに基づいて成功または失敗を示す通知を送信します。

このパターンで使用されるすべての AWS リソースはサーバーレスです。管理するサーバーはありません。

## ツール
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-tools"></a>

**AWS のサービス**
+ [AWS Glue](https://aws.amazon.com/glue/) – AWS Glue は、お客様が分析のためにデータを簡単に準備してロードできるようにするフルマネージド ETL サービスです。
+ [AWS Step Functions](https://aws.amazon.com/step-functions/) – AWS Step Functions は、 AWS Lambda 関数と他の を組み合わせてビジネスクリティカルなアプリケーション AWS のサービス を構築できるサーバーレスオーケストレーションサービスです。 AWS Step Functions グラフィカルコンソールでは、アプリケーションのワークフローを一連のイベント駆動型ステップとして確認できます。
+ [Amazon S3](https://aws.amazon.com/s3/) – Amazon Simple Storage Service (Amazon S3) は、業界をリードするスケーラビリティ、データ可用性、セキュリティ、およびパフォーマンスを提供するオブジェクトストレージサービスです。
+ [Amazon SNS](https://aws.amazon.com/sns/) — Amazon Simple Notiﬁcation Service (Amazon SNS) は、マイクロサービス、分散システム、サーバーレスアプリケーションを分離できる、可用性が高く、耐久性があり、安全な、完全マネージド型のパブ/サブメッセージングサービスです。
+ [AWS Lambda](https://aws.amazon.com/lambda/) – AWS Lambda は、サーバーのプロビジョニングや管理を行わずにコードを実行できるコンピューティングサービスです。 は、必要な場合にのみコード AWS Lambda を実行し、1 日あたり数リクエストから 1 秒あたり数千リクエストまで自動的にスケーリングします。

**コード**

このパターンのコードは、GitHub 内、[ETL Pipeline with AWS Step Functions](https://github.com/aws-samples/aws-step-functions-etl-pipeline-pattern) リポジトリから取得できます。コードリポジトリには以下のファイルとフォルダが含まれています。
+ `template.yml` – を使用して ETL パイプラインを作成するための AWS CloudFormation テンプレート AWS Step Functions。
+ `parameter.json` — すべてのパラメータとパラメータ値が含まれます。「*エピック*」セクションで説明されているように、このファイルを更新してパラメータ値を変更します。
+ `myLayer/python` フォルダ – このプロジェクトに必要な AWS Lambda レイヤーの作成に必要な Python パッケージが含まれています。
+ `lambda` フォルダー — 次の Lambda 関数が含まれます。
  + `move_file.py` — ソースデータセットをアーカイブフォルダー、トランスフォームフォルダー、またはエラーフォルダーに移動します。
  + `check_crawler.py` – AWS Glue クローラのステータスは、障害メッセージを送信する前に、`RETRYLIMIT `環境変数で設定された回数だけチェックします。
  + `start_crawler.py` – AWS Glue クローラを開始します。
  + `start_step_function.py` – 開始します AWS Step Functions。
  + `start_codebuild.py` – AWS CodeBuild プロジェクトを開始します。
  + `validation.py` — 入力された未加工データセットを検証します。
  + `s3object.py` – Amazon S3 バケット内に必要なディレクトリ構造を作成します。
  + `notification.py` — パイプラインの最後に成功通知またはエラー通知を送信します。

これらのファイルを使用するには、エピックセクションの指示に従ってください。

## エピック
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-epics"></a>

### 出典ファイルの準備
<a name="prepare-the-source-files"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS SAM コードリポジトリを複製します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | 開発者 | 
| パラメータ値を更新します。 | リポジトリのローカルコピーで、`parameter.json` ファイルを編集し、以下のようにデフォルトのパラメータ値を更新します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | 開発者 | 
| Amazon S3 バケットにソースコードをアップロードする。 | ETL パイプラインを自動化する AWS CloudFormation テンプレートをデプロイする前に、テンプレートのソースファイルをパッケージ化し、Amazon S3 バケットにアップロードする必要があります。これを行うには、事前設定されたプロファイルで次の AWS CLI コマンドを実行します。<pre>aws cloudformation package --template-file template.yml --s3-bucket <bucket_name> --output-template-file packaged.template --profile <profile_name></pre>各パラメータの意味は次のとおりです。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | 開発者 | 

### スタックを作成します。
<a name="create-the-stack"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| CloudFormation のテンプレートをデプロイします。 |  AWS CloudFormation テンプレートをデプロイするには、次の AWS CLI コマンドを実行します。<pre>aws cloudformation deploy --stack-name <stack_name> --template-file packaged.template --parameter-overrides file://parameter.json --capabilities CAPABILITY_IAM --profile <profile_name></pre>各パラメータの意味は次のとおりです。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | 開発者 | 
| 進捗確認。 | [AWS CloudFormation コンソール](https://console.aws.amazon.com/cloudformation/)で、スタック開発の進捗状況を確認します。ステータスが `CREATE_COMPLETE` の場合、スタックは正常にデプロイされています。 | 開発者 | 
|  AWS Glue データベース名を書き留めます。 | スタックの**出力**タブには、 AWS Glue データベースの名前が表示されます。キー名は、`GlueDBOutput` です。 | 開発者 | 

### パイプラインを削除します。
<a name="test-the-pipeline"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ETL パイプラインを開始します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | 開発者 | 
| パーティション化されたデータセットを確認します。 | ETL パイプラインが完了したら、パーティション化されたデータセットが Amazon S3 トランスフォームフォルダ (`transform` または `parameter.json` ファイルに設定したフォルダ名) にあることを確認します。 | 開発者 | 
| パーティション化された AWS Glue データベースを確認します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | 開発者 | 
| クエリを実行する。 | (オプション) Amazon Athena を使用して、パーティション分割され変換されたデータベースでアドホッククエリを実行します。手順については、 AWS ドキュメントの[Amazon Athena で SQL クエリを実行する](https://docs.aws.amazon.com/athena/latest/ug/querying-athena-tables.html)」を参照してください。 | データベースアナリスト | 

## トラブルシューティング
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| AWS Identity and Access Management AWS Glue ジョブとクローラの (IAM) アクセス許可 |  AWS Glue ジョブまたはクローラをさらにカスタマイズする場合は、 AWS Glue ジョブで使用される IAM ロールで適切な IAM アクセス許可を付与するか、データアクセス許可を付与してください AWS Lake Formation。詳細については、[AWS のドキュメント](https://docs.aws.amazon.com/lake-formation/latest/dg/upgrade-glue-lake-formation.html)を参照してください。 | 

## 関連リソース
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-resources"></a>

**AWS のサービス ドキュメント**
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/)
+ [AWS Glue](https://docs.aws.amazon.com/glue/)
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/)
+ [Amazon S3](https://docs.aws.amazon.com/s3/)
+ [Amazon SNS](https://docs.aws.amazon.com/sns/)

## 追加情報
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-additional"></a>

次の図は、 AWS Step Functions **Inspector** パネルから成功した ETL パイプラインの AWS Step Functions ワークフローを示しています。** **

![\[入力 .csv の検証、データのクローリング、AWS Glue ジョブの実行のための Step Functions ワークフロー。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/8eb792b0-d35b-4a63-ba2d-71eb8d2c1203/images/bd77de7b-4d04-44bb-95d2-3ec4599b3770.png)


次の図は、Step Functions **Inspector** パネルからの入力検証エラーが原因で失敗する ETL パイプラインの AWS Step Functions ワークフローを示しています。

![\[失敗によりファイルがエラーフォルダに移動する Step Functions ワークフロー。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/8eb792b0-d35b-4a63-ba2d-71eb8d2c1203/images/5fd7dd79-ba4c-4c20-b1f0-ad4b5f22bdfc.png)


 

# Amazon Redshift ML機械学習を使用して高度な分析を実行する
<a name="perform-advanced-analytics-using-amazon-redshift-ml"></a>

*Amazon Web Services、Po Hong、Chyanna Antonio*

## 概要
<a name="perform-advanced-analytics-using-amazon-redshift-ml-summary"></a>

Amazon Web Services (AWS) クラウドでは、Amazon Redshift 機械学習 (Amazon Redshift ML) を使用して、Amazon Redshift クラスターまたは Amazon Simple Storage Service (Amazon S3) に保存されているデータに対して ML 分析を実行できます。Amazon Redshift ML は、高度な分析によく使用される教師あり学習をサポートしています。Amazon Redshift ML のユースケースには、収益予測、クレジットカード詐欺検知、顧客生涯価値 (CLV) または顧客解約予測などがあります。

Amazon Redshift ML を使用すると、データベース ユーザーは、使い慣れた 標準SQLコマンドを使用して、ML モデルを簡単に作成、トレーニング、デプロイできます。Amazon Redshift ML は Amazon SageMaker Autopilot を使用して、制御と可視性を保持しながら、データに基づいてリグレッションまたは回帰に最適な機械学習モデルを自動的にトレーニングおよび調整します。

Amazon Redshift、Amazon S3、Amazon SageMaker 間のやり取りはすべて抽象化され、自動化されています。ML モデルをトレーニングしてデプロイすると、Amazon Redshift で [ユーザー定義関数](https://docs.aws.amazon.com/redshift/latest/dg/user-defined-functions.html) (UDF) として使用できるようになり、SQL クエリで使用できるようになります。 

このパターンは、[AWS ブログのAmazon Redshift ML で SQL を使用して Amazon Redshift で ML モデルを作成、トレーニング、デプロイする](https://aws.amazon.com/blogs/big-data/create-train-and-deploy-machine-learning-models-in-amazon-redshift-using-sql-with-amazon-redshift-ml/)、および[入門リソースセンター](https://aws.amazon.com/getting-started/) の [Amazon SageMaker による ML モデルの構築、トレーニング、デプロイ](https://aws.amazon.com/getting-started/hands-on/build-train-deploy-machine-learning-model-sagemaker/) チュートリアルを補完するものです。

## 前提条件と制限事項
<a name="perform-advanced-analytics-using-amazon-redshift-ml-prereqs"></a>

**前提条件**
+ アクティブなAWS アカウント
+ Amazon Redshift テーブル内の既存のデータ

**スキル**
+ *機械学習*、*トレーニング* や *予測*など、Amazon Redshift ML で使用される用語や概念に精通している 詳細については、Amazon Machine Learning (Amazon ML) ドキュメントの [tトレーニングML モデル](https://docs.aws.amazon.com/machine-learning/latest/dg/training-ml-models.html) を参照してください。
+ Amazon Redshift のユーザーセットアップ、アクセス管理、および標準 SQL 構文に関する経験。こちらに関する詳細については、Amazon Redshift のドキュメントの[ Getting started with Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html)　を参照下さい。
+ Amazon S3 および AWS Identity and Access Management (IAM) に関する知識と経験 
+ AWS コマンドラインインターフェイス (AWS CLI) でコマンドを実行した経験も役立ちますが、必須ではありません。

**制限事項**
+ Amazon Redshift クラスターおよび Amazon S3 バケットが、同じ AWS リージョンに存在する必要があります。
+ このパターンのアプローチは、リグレッション、二項分類、多クラス分類などの教師あり学習モデルのみをサポートします。 

## アーキテクチャ
<a name="perform-advanced-analytics-using-amazon-redshift-ml-architecture"></a>

![\[Amazon Redshift ML が SageMaker と連携して ML モデルを構築、トレーニング、デプロイする手法示すワークフロー。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/3b6a5f49-c647-45f4-940e-b623f989326a/images/36cc39fe-c1f3-4d68-b89e-e636156001a6.png)


以下のステップでは、Amazon Redshift ML が SageMaker と連携して ML モデルを構築、トレーニング、デプロイする方法について説明します。 

1. Amazon Redshift はトレーニングデータを S3 バケットにエクスポートします。

1. SageMaker Autopilot は、トレーニングデータを自動的に前処理します。

1. `CREATE MODEL` ステートメントが呼び出されると、Amazon Redshift ML はトレーニングに SageMaker を使用します。

1. SageMaker Autopilot は、評価メトリクスを最適化する ML アルゴリズムと最適なハイパーパラメータを検索して推奨します。

1. Amazon Redshift は、予測関数を SQL 関数として Amazon Redshift クラスターに登録します。

1. ML モデルの関数は、SQL ステートメントで使用できます。 

**テクノロジースタック**
+ Amazon Redshift
+ SageMaker
+ Amazon S3

## ツール
<a name="perform-advanced-analytics-using-amazon-redshift-ml-tools"></a>
+ [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/welcome.html) – Amazon Redshift は、エンタープライズレベル、ペタバイト規模、フルマネージド型のデータウェアハウスサービスです。
+ [Amazon Redshift ML](https://docs.aws.amazon.com/redshift/latest/dg/machine_learning.html) – Amazon Redshift 機械学習 (Amazon Redshift ML) は、どの技術レベルのアナリストやデータサイエンティストでも、機械学習のテクノロジーを簡単に使用できる堅牢なクラウドベースのサービスです。
+ 「[Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)」— Amazon Simple Storage Service (Amazon S3)は、インターネット用のストレージです。 
+ [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) – Amazon SageMaker は、フルマネージド型の機械学習サービスです。 
+ [Amazon SageMaker Autopilot](https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-automate-model-development.html) – Amazon SageMaker Autopilot は、自動機械学習 (AutoML) プロセスの主要タスクを自動化する機能セットです。

 

**コード**

Amazon Redshift では、以下のコードを使用してスーパーバイズド ML モデルを作成できます。

```
"CREATE MODEL customer_churn_auto_model
FROM (SELECT state,
             account_length,
             area_code,
             total_charge/account_length AS average_daily_spend, 
             cust_serv_calls/account_length AS average_daily_cases,
             churn 
      FROM customer_activity
      WHERE  record_date < '2020-01-01' 
     )
TARGET churn
FUNCTION ml_fn_customer_churn_auto
IAM_ROLE 'arn:aws:iam::XXXXXXXXXXXX:role/Redshift-ML'
SETTINGS (
  S3_BUCKET 'your-bucket'
);")
```

**注記**  
`SELECT` ステートは Amazon Redshift の通常のテーブル、Amazon Redshift Spectrum の外部テーブル、またはその両方を指す場合があります。

## エピック
<a name="perform-advanced-analytics-using-amazon-redshift-ml-epics"></a>

### トレーニングデータセットとテストデータセットの準備
<a name="prepare-a-training-and-test-dataset"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| トレーニングデータセットとテストデータセットの準備 | AWS マネジメントコンソール にサインインして、Amazon SageMaker コンソールを開きます。[機械学習モデルの構築、トレーニング、デプロイ](https://aws.amazon.com/getting-started/hands-on/build-train-deploy-machine-learning-model-sagemaker/) チュートリアルの指示に従って、ラベル列 (*教師ありトレーニング*) があり、ヘッダーがない.csv ファイルまたは Apache Parquet ファイルを作成します。 未加工のデータセットをシャッフルして、モデルのトレーニング用のトレーニングセット (70%) とモデルのパフォーマンス評価用のテストセット (30%) に分割することをお勧めします。 | データサイエンティスト | 

### テクノロジースタックの準備と設定を行います。
<a name="prepare-and-configure-the-technology-stack"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Amazon Redshift クラスターを作成します。 | Amazon Redshift コンソールで、要件に従ってクラスターを作成します。詳細については、Amazon Redshift ドキュメントの[クラスターの作成](https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-data-launch-cluster.html)を参照してください。 Amazon Redshift クラスターは、`SQL_PREVIEW` メンテナンストラックを使用して作成してください。トラックプレビューの詳細については、[クラスターメンテナンストラックの選択](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-mgmt-maintenance-tracks)Amazon Redshiftドキュメント内のを参照してください。 | DBA、クラウドアーキテクト | 
| トレーニングデータとモデルアーティファクトを保存する S3 バケットを作成する。 | Amazon S3 コンソールで、トレーニングデータとテストデータ用の S3 バケットを作成します。S3 バケットを作成する方法の詳細については、AWS Quick Startsから[S3 バケットを作成する](https://docs.aws.amazon.com/quickstarts/latest/s3backup/step-1-create-bucket.html)を参照してください。 Amazon S3 バケットと Amazon Redshift クラスターが同じリージョンにあることを確認してください。  | DBA、クラウドアーキテクト | 
| IAM サービスロールを作成して Amazon Redshift クラスターにアタッチします。 | Amazon Redshift クラスターが SageMaker および Amazon S3 にアクセスできるようにする IAM ポリシーを作成します。手順と手順については、Amazon Redshift ドキュメントの [Amazon Redshift ML を使用するためのクラスターセットアップ](https://docs.aws.amazon.com/redshift/latest/dg/cluster-setup.html) を参照してください。 | DBA、クラウドアーキテクト | 
| Amazon Redshift ユーザーとグループがスキーマとテーブルにアクセスできるようにします。 | Amazon Redshift のユーザーとグループが内部および外部のスキーマとテーブルにアクセスできるようにするアクセス権限を付与します。手順と手順については、Amazon Redshift ドキュメントの [アクセス権限と所有権の管理](https://docs.aws.amazon.com/redshift/latest/dg/permissions-ownership.html) を参照してください。 | DBA | 

### Amazon Redshift で ML モデルを作成してトレーニングする
<a name="create-and-train-the-ml-model-in-amazon-redshift"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Amazon Redshift で ML モデルを作成してトレーニングする | Amazon Redshift で ML モデルを作成してトレーニングする 詳細については、Amazon Redshift `CREATE MODEL` のドキュメントのステートメントを参照してください。 | アプリ開発者、データサイエンティスト | 

### Amazon Redshift でバッチ推論と予測を実行する
<a name="perform-batch-inference-and-prediction-in-amazon-redshift"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 生成された ML モデル関数を使用して推論を行います。 | 生成された ML モデル関数を使用して推論を実行する方法の詳細については、Amazon Redshift ドキュメントの [予測](https://docs.aws.amazon.com/redshift/latest/dg/prediction.html) を参照してください。 | データサイエンティスト、ビジネスインテリジェンスユーザー | 

## 関連リソース
<a name="perform-advanced-analytics-using-amazon-redshift-ml-resources"></a>

**トレーニングデータセットとテストデータセットの準備**
+ [Amazon SageMaker による機械学習モデルの構築、トレーニング、デプロイ](https://aws.amazon.com/getting-started/hands-on/build-train-deploy-machine-learning-model-sagemaker/)

 

**テクノロジースタックの準備と設定を行います**
+ [Amazon Redshift クラスターを作成します](https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-data-launch-cluster.html)
+ [Amazon Redshift クラスターメンテナンストラックの選択](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-mgmt-maintenance-tracks)
+ 「[S3 バケットの作成](https://docs.aws.amazon.com/quickstarts/latest/s3backup/step-1-create-bucket.html)」
+ [Amazon Redshift ML 用に Amazon Redshift クラスターをセットアップする必要があります](https://docs.aws.amazon.com/redshift/latest/dg/cluster-setup.html)
+ [Amazon Redshift でのアクセス権限と所有権の管理](https://docs.aws.amazon.com/redshift/latest/dg/permissions-ownership.html)

 

**Amazon Redshift で ML モデルを作成してトレーニングする**
+ [Amazon Redshift でのモデルステートメントの作成](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html#r_simple_create_model) 

 

**Amazon Redshift でバッチ推論と予測を実行する**
+ [Amazon Redshift での予測](https://docs.aws.amazon.com/redshift/latest/dg/prediction.html) 

 

**その他のリソース**
+ [Amazon Redshift 機械学習の開始方法](https://docs.aws.amazon.com/redshift/latest/dg/geting-started-machine-learning.html)
+ [SQL と Amazon Redshift ML を使用して Amazon Redshift で ML モデルを作成、トレーニング、デプロイする](https://aws.amazon.com/blogs/big-data/create-train-and-deploy-machine-learning-models-in-amazon-redshift-using-sql-with-amazon-redshift-ml/)
+ [Amazon Redshift パートナー](https://aws.amazon.com/redshift/partners/?partner-solutions-cards.sort-by=item.additionalFields.partnerNameLower&partner-solutions-cards.sort-order=aschttps://aws.amazon.com/redshift/partners/?partner-solutions-cards.sort-by=item.additionalFields.partnerNameLower&partner-solutions-cards.sort-order=asc)
+ [AWS 機械学習コンピテンシーパートナー](https://aws.amazon.com/machine-learning/partner-solutions/?partner-solutions-cards.sort-by=item.additionalFields.partnerNameLower&partner-solutions-cards.sort-order=asc)

# Amazon Athena を使用して SQL で Amazon DynamoDB テーブルをクエリする
<a name="query-amazon-dynamodb-tables-sql-amazon-athena"></a>

*Gavin Perrie、Ajit Ambike、Brad Yates、Amazon Web Services*

## 概要
<a name="query-amazon-dynamodb-tables-sql-amazon-athena-summary"></a>

データに Amazon Simple Storage Service (Amazon S3) 以外のソースが含まれている場合は、フェデレーティッドクエリを使用して、それらのリレーショナルデータソース、非リレーショナルデータソース、オブジェクトデータソース、またはカスタムデータソースにアクセスできます。このパターンは、SQL データソースコネクタを使用して Amazon Athena から Amazon DynamoDB へのフェデレーティッドクエリアクセスを設定する方法を示しています。

このパターン使用して、次のことを行うことができます。
+ SQL を使用して DynamoDB テーブルをクエリします。
+ Athena でフェデレーティッド SQL クエリを実行し、DynamoDB テーブルをサポートされている他のデータソースに結合します。

## 前提条件と制限
<a name="query-amazon-dynamodb-tables-sql-amazon-athena-prereqs"></a>

**前提条件**
+ DynamoDB テーブル。
+ Athena エンジンバージョン 2 を使用するように設定された Athena ワークグループ。手順については、[Athena ドキュメント](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-changing.html)を参照してください。
+ `AthenaDynamoDBConnector` AWS Lambda 関数がデータをスピルできる S3 バケット。S3 バケットと Lambda 関数は、同じ AWS リージョンに存在する必要があります。

Athena に初めてアクセスする場合は、クエリ結果の場所として使用する追加の S3 バケットが必要です。手順については、[Athena ドキュメント](https://docs.aws.amazon.com/athena/latest/ug/querying.html#query-results-specify-location-console)を参照してください。

**制限事項**
+ [INSERT INTO](https://docs.aws.amazon.com/athena/latest/ug/insert-into.html) などの書き込みオペレーションはサポートされていません。** **

**製品バージョン**
+ [GitHub での Athena クエリフェデレーションのリリース](https://github.com/awslabs/aws-athena-query-federation/releases)

## アーキテクチャ
<a name="query-amazon-dynamodb-tables-sql-amazon-athena-architecture"></a>

**ターゲットアーキテクチャ**

次の図は、パターンが確立された後の接続フローを示しています。ユーザーは Amazon Athena に接続してクエリを提供します。Athena はクエリとターゲットを DynamoDB データソースコネクタ Lambda 関数に渡します。Lambda 関数はデータを取得して Athena に返します。大量のデータが返された場合、Athena は一時的な結果をスピルバケットに保存してから、データセット全体をパッケージ化して返します。

![\[ユーザーから Athena、Athena から Lambda へのワークフロー。S3 バケットと DynamoDB テーブルに接続します。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/9d1ee529-36f3-4c7e-a2e7-05b76e09a3d8/images/e50a00cf-a55a-4def-81d5-4d2755dc9a97.png)


## ツール
<a name="query-amazon-dynamodb-tables-sql-amazon-athena-tools"></a>

**AWS のサービス**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)は、標準 SQL を使用して Amazon Simple Storage Service (Amazon S3) 内のデータを直接分析できるようにするインタラクティブなクエリサービスです。このパターンでは、[Amazon Athena クエリフェデレーション SDK を使用して構築され、 を介してアプリケーションとしてインストールされたツールである Amazon Athena DynamoDB Connector](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb) を使用します AWS Serverless Application Repository。 Amazon Athena AWS Lambda 
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) は、フルマネージド NoSQL データベースサービスです。高速かつ予測可能でスケーラブルなパフォーマンスを提供します。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

**コードリポジトリ**

このパターンのコードは GitHub 内の「[Athena クエリフェデレーション](https://github.com/awslabs/aws-athena-query-federation/releases)」リポジトリで利用できます。

## エピック
<a name="query-amazon-dynamodb-tables-sql-amazon-athena-epics"></a>

### DynamoDB データソースコネクタのセットアップとテスト
<a name="set-up-and-test-the-ddb-data-source-connector"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AthenaDynamoDBConnector アプリケーションをデプロイします。 | AthenaDynamoDBConnecter をデプロイするには、以下を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/query-amazon-dynamodb-tables-sql-amazon-athena.html) | AWS DevOps | 
| Athena 用のデータソースを作成します。 | データソースを作成するには、以下を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/query-amazon-dynamodb-tables-sql-amazon-athena.html) | AWS DevOps | 
| Athena を使用して DynamoDB テーブルをクエリします。 | DynamoDB テーブルをクエリするには、以下を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/query-amazon-dynamodb-tables-sql-amazon-athena.html) | アプリデベロッパー | 

## トラブルシューティング
<a name="query-amazon-dynamodb-tables-sql-amazon-athena-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| クエリは `GENERIC_INTERNAL_ERROR: The bucket is in this region: <region>` で失敗します*。* | Athena スピルバケットと Lambda 関数が同じ AWS リージョンに作成されていることを確認します。 | 
| 新しく作成されたデータソースは Athena コンソールに表示されません。 | Athena データカタログはリージョン別です。`AthenaDynamoDBConnector` が Athena を使用しようとしているリージョンにデプロイされていることを確認します。 | 
| 新しく作成されたデータソースに対してクエリを実行できません。 | **クエリ結果の場所**が設定されていることを確認します。 | 

## 関連リソース
<a name="query-amazon-dynamodb-tables-sql-amazon-athena-resources"></a>
+ [Amazon Athena DynamoDB コネクタ](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb)
+ [Amazon Athena フェデレーティッドクエリ](https://docs.aws.amazon.com/athena/latest/ug/connect-to-a-data-source.html)

# Athena による Amazon DynamoDB テーブルへのアクセス、クエリ、結合
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena"></a>

*Moinul Al-Mamun、Amazon Web Services*

## 概要
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-summary"></a>

このパターンは、Amazon Athena DynamoDB コネクタを使用して Amazon Athena と Amazon DynamoDB 間の接続をセットアップする方法を示しています。コネクタは AWS Lambda 関数を使用して DynamoDB 内のデータをクエリします。接続を設定するコードはありません。接続が確立されたら、「[Athena フェデレーテッドクエリ](https://docs.aws.amazon.com/athena/latest/ug/connect-to-a-data-source.html)」を使用して Athena から SQL コマンドを実行することで、DynamoDB テーブルにすばやくアクセスして分析できます。また、1 つ以上の DynamoDB テーブルを相互に結合したり、Amazon Redshift や Amazon Aurora などの他のデータソースに結合したりすることもできます。

## 前提条件と制限事項
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-prereqs"></a>

**前提条件**
+ DynamoDB テーブル、Athena データソース、Lambda、AWS Identity and Access Management (IAM) ロールを管理するアクセス許可があるアクティブな AWS アカウント
+ Athena がクエリ結果を保存できる Amazon Simple Storage Service (Amazon S3) バケット
+ Athena DynamoDB コネクタがデータを短期的に保存できる S3 バケット
+ 「[Athena エンジンバージョン 2](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference-0002.html)」をサポートする AWS リージョン
+ Athena と必要な S3 バケットにアクセスするための IAM 権限
+ 「[Amazon Athena DynamoDB コネクタ](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb)」、インストール済み

**制限事項**

DynamoDB テーブルのクエリにはコストがかかります。テーブルサイズが数ギガバイト (GB) を超えると、高いコストが発生する可能性があります。テーブル全体の SCAN 操作を実行する前に、コストを考慮することをお勧めします。詳細については、「[Amazon DynamoDB 料金](https://aws.amazon.com/dynamodb/pricing/)」を参照してください。コストを削減して高いパフォーマンスを実現するには、クエリでは常に LIMIT を使用することをお勧めします (例: `SELECT * FROM table1 LIMIT 10`)。また、運用環境で JOIN または GROUP BY クエリを実行する前に、テーブルのサイズを検討してください。テーブルが大きすぎる場合は、「[テーブルを Amazon S3 に移行する](https://aws.amazon.com/blogs/database/simplify-amazon-dynamodb-data-extraction-and-analysis-by-using-aws-glue-and-amazon-athena/)」などの代替オプションを検討してください。

## アーキテクチャ
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-architecture"></a>

次の図は、ユーザーが Athena から DynamoDB テーブルで SQL クエリを実行する方法を示しています。

![\[Athena と DynamoDB を接続して SQL クエリを実行するためのワークフロー。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/e6ff94af-d208-40c7-94e4-af257755a603/images/bc8e0132-b578-463b-bf55-3c39ce359c17.png)


この図表は、次のワークフローを示しています:

1. DynamoDB テーブルにクエリを実行するには、ユーザーは Athena から SQL クエリを実行します。

1. Athena は Lambda 関数を開始します。

1. Lambda 関数は、DynamoDB テーブル内のリクエストされたデータをクエリを行います。

1. DynamoDB はリクエストされたデータを Lambda 関数に返します。次に、この関数は Athena を介してクエリ結果をユーザーに転送します。

1. Lambda 関数は S3 バケットにデータを保存します。

テクノロジースタック
+ Amazon Athena
+ Amazon DynamoDB
+ Amazon S3
+ AWS Lambda

## ツール
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-tools"></a>
+ 「[Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)」はインタラクティブなクエリサービスで、Amazon S3 内のデータをスタンダード SQL を使用して直接分析できます。
+ 「[Amazon Athena DynamoDB コネクタ](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb)」は、Athena テナが DynamoDB に接続し、SQL クエリを使用してテーブルにアクセスできるようにする AWS ツールです。
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) は、フルマネージド NoSQL データベースサービスです。高速かつ予測可能でスケーラブルなパフォーマンスを提供します。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

## エピック
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-epics"></a>

### サンプル DynamoDB テーブルを作成する
<a name="create-sample-dynamodb-tables"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 1 つ目のサンプルテーブルを作成します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | 開発者 | 
| 最初のテーブルにサンプルデータを挿入します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)<pre>{<br />  "PK1": "1234",<br />  "SK1": "info",<br />  "Salary": "5000"<br /> }</pre><pre>{<br />  "PK1": "1235",<br />  "SK1": "info",<br />  "Salary": "5200"<br /> }</pre> | 開発者 | 
| 2 番目のサンプルテーブルを作成します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | 開発者 | 
| 2 番目のテーブルにサンプルデータを挿入します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)<pre>{<br />  "PK2": "1234",<br /> "SK2": "bonus",<br /> "Bonus": "500"<br />}</pre><pre>{<br />  "PK2": "1235",<br /> "SK2": "bonus",<br /> "Bonus": "1000"<br />}</pre> | 開発者 | 

### Athena で DynamoDB 用のデータソースを作成する
<a name="create-a-data-source-in-athena-for-dynamodb"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| データソースコネクタを設定します。 | DynamoDB のデータソースを作成し、そのデータソースに接続する Lambda 関数を作成します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | 開発者 | 
| Lambda 関数が S3 スピルバケットにアクセスできることを確認します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)エラーが発生した場合は、このパターンの *[追加情報]* セクションでガイダンスを参照してください。 | 開発者 | 

### Athena から DynamoDB テーブルにアクセスする
<a name="access-dynamodb-tables-from-athena"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| DynamoDB テーブルに対してクエリを実行します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | 開発者 | 
| 2 つの DynamoDB テーブルを結合します。 | DynamoDB は NoSQL データストアであり、SQL 結合オペレーションをサポートしていません。そのため、次の 2 つの DynamoDB テーブルで結合操作を実行する必要があります。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)<pre>SELECT pk1, salary, bonus FROM dydbtable1 t1<br /> JOIN dydbtable2 t2 ON t1.pk1 = t2.pk2;</pre> | 開発者 | 

## 関連リソース
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-resources"></a>
+ 「[Amazon Athena DynamoDB コネクタ](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb)」(AWS ラボ)
+ 「[Amazon Athena の新しいフェデレーテッドクエリ](https://aws.amazon.com/blogs/big-data/query-any-data-source-with-amazon-athenas-new-federated-query/)」(AWS ビッグデータブログ) であらゆるデータソースをクエリできます
+ 「[Athena エンジンバージョンリファレンス](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference.html)」(Athena ユーザーガイド)
+ 「[AWS Glue と Amazon Athena を使用して Amazon DynamoDB データの抽出と分析を簡素化](https://aws.amazon.com/blogs/database/simplify-amazon-dynamodb-data-extraction-and-analysis-by-using-aws-glue-and-amazon-athena/)」(AWS データベースブログ)

## 追加情報
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-additional"></a>

Athena のクエリで `spill_bucket` を `{bucket_name}/folder_name/` という形式で実行すると、次のエラーメッセージが表示されることがあります。

```
"GENERIC_USER_ERROR: Encountered an exception[java.lang.RuntimeException] from your LambdaFunction[arn:aws:lambda:us-east-1:xxxxxx:function:testdynamodb] executed in context[retrieving meta-data] with message[You do NOT own the spill bucket with the name: s3://amzn-s3-demo-bucket/athena_dynamodb_spill_data/]
This query ran against the "default" database, unless qualified by the query. Please post the error message on our forum  or contact customer support with Query Id: [query-id]"
```

このエラーを解決するには、Lambda 関数の環境変数 `spill_bucket` を `{bucket_name_only}` に更新し、バケット書き込みアクセス用の次の Lambda IAM ポリシーを更新します。

```
{
             "Action": [
                 "s3:GetObject",
                 "s3:ListBucket",
                 "s3:GetBucketLocation",
                 "s3:GetObjectVersion",
                 "s3:PutObject",
                 "s3:PutObjectAcl",
                 "s3:GetLifecycleConfiguration",
                 "s3:PutLifecycleConfiguration",
                 "s3:DeleteObject"
            ],
             "Resource": [
                 "arn:aws:s3:::spill_bucket",
                 "arn:aws:s3:::spill_bucket/*"
            ],
             "Effect": "Allow"
        }
```

または、前に作成した Athena データソースコネクタを削除し、`spill_bucket` のために `{bucket_name}` のみを使用して再作成することもできます。

# スカラー Python UDF を使用した Amazon Redshift クエリー結果の言語固有のソートの設定
<a name="set-up-language-specific-sorting-for-amazon-redshift-query-results-using-a-scalar-python-udf"></a>

*Ethan Stark、Amazon Web Services*

## 概要
<a name="set-up-language-specific-sorting-for-amazon-redshift-query-results-using-a-scalar-python-udf-summary"></a>

このパターンは、スカラーの Python UDF (ユーザー定義関数) を使用した Amazon Redshift のクエリ結果について、大文字と小文字を区別しない言語ソートを設定する手順とサンプルコードを提供します。Amazon Redshift はバイナリ UTF-8 ソートに基づいて結果を返し、言語固有のソートをサポートしていないので、スカラー Python UDF を使用する必要があります。Python UDF は Python プログラム基づいた SQL 以外の処理コードで、データウェアハウス内で実行されます。1 つのクエリで SQL ステートメントを使用して Python UDF コードを実行できます。詳細については、[Amazon Redshift ビッグデータブログ記事のUDFs の概要](https://aws.amazon.com/blogs/big-data/introduction-to-python-udfs-in-amazon-redshift/) AWS 」を参照してください。

このパターンのサンプルデータは、デモ用にトルコ語のアルファベットに基づいています。このパターンのスカラー Python UDF は、Amazon Redshift のデフォルトのクエリ結果をトルコ語の文字の言語順序に合うように構築されています。詳細については、このパターンの「*追加情報*」セクションにある*トルコ語の例*を参照してください。このパターンのスカラー Python UDF を他の言語に変更できます。

## 前提条件と制限事項
<a name="set-up-language-specific-sorting-for-amazon-redshift-query-results-using-a-scalar-python-udf-prereqs"></a>

**前提条件**
+ データベース、スキーマ、テーブルを含む [Amazon Redshift クラスター](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html) 
+ `CREATE TABLE` および `CREATE FUNCTION` アクセス許可を持つ [Amazon Redshift ユーザー](https://docs.aws.amazon.com/redshift/latest/dg/r_Users.html) 
+ [Python 2.7](https://www.python.org/download/releases/2.7/) 以降

**機能制限**

このパターンのクエリで使用される言語ソートでは、大文字と小文字は区別しません。

## ツール
<a name="set-up-language-specific-sorting-for-amazon-redshift-query-results-using-a-scalar-python-udf-tools"></a>

**AWS のサービス**
+ [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html) は、 AWS クラウド内でのフルマネージド型、ペタバイト規模のデータウェアハウスサービスです。Amazon Redshift はデータレイクと統合されているため、データを使用して、ビジネスと顧客に関する新しいインサイトを得られます。

**その他のツール**
+ [Python (UDF) ユーザー定義関数](https://docs.snowflake.com/en/developer-guide/udf/python/udf-python-introduction.html) は、Python で記述し、SQL ステートメントで呼び出すことができる関数です。

## エピック
<a name="set-up-language-specific-sorting-for-amazon-redshift-query-results-using-a-scalar-python-udf-epics"></a>

### クエリ結果を言語順にソートするコードの開発
<a name="develop-code-to-sort-query-results-in-linguistic-order"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| サンプルデータ用のテーブルを作成します。 | Amazon Redshift でテーブルを作成し、次の SQL ステートメントを使用してサンプルデータを挿入します。<pre>CREATE TABLE my_table (first_name varchar(30));<br /><br />INSERT INTO my_table (first_name)<br />VALUES<br />    ('ali'),<br />    ('Ali'),<br />    ('ırmak'),<br />    ('IRMAK'),<br />    ('irem'),<br />    ('İREM'),<br />    ('oğuz'),<br />    ('OĞUZ'),<br />    ('ömer'),<br />    ('ÖMER'),<br />    ('sedat'),<br />    ('SEDAT'),<br />    ('şule'),</pre>サンプルデータのファーストネームには、トルコ語アルファベットの特殊文字が含まれます。この例のトルコ語の考慮事項については、このパターンの「*追加情報*」セクションにある「*トルコ語の例*」を参照してください。 | データエンジニア | 
| サンプルデータのデフォルトソートを確認します。 | Amazon Redshift のサンプルデータのデフォルトソートを確認するには、次のクエリを実行します。<pre>SELECT first_name FROM my_table ORDER BY first_name;</pre>このクエリは、以前に作成したテーブルからファーストネームのリストを返します。<pre>first_name<br />---------------<br />Ali<br />IRMAK<br />OĞUZ<br />SEDAT<br />ali<br />irem<br />oğuz<br />sedat<br />ÖMER<br />ömer<br />İREM<br />ırmak<br />ŞULE<br />şule</pre>デフォルトのバイナリ UTF-8 の順序がトルコ語の特殊文字の言語順序に対応していないため、クエリ結果の順序が正しくありません。 | データエンジニア | 
| スカラー Python UDF の作成 | スカラー Python UDF を作成するには、次の SQL コードを使用します。 <pre>CREATE OR REPLACE FUNCTION collate_sort (value varchar) <br />RETURNS varchar <br />IMMUTABLE <br />AS <br />$$    <br />    def sort_str(val):<br />        import string<br />        <br />        dictionary = {<br />            'I': 'ı', <br />            'ı': 'h~', <br />            'İ': 'i', <br />            'Ş': 's~', <br />            'ş': 's~', <br />            'Ğ': 'g~', <br />            'ğ': 'g~', <br />            'Ü': 'u~', <br />            'ü': 'u~', <br />            'Ö': 'o~', <br />            'ö': 'o~', <br />            'Ç': 'c~', <br />            'ç': 'c~'<br />        }<br />        <br />        for key, value in dictionary.items():<br />            val = val.replace(key, value)<br />        <br />        return val.lower()<br /> <br />    return sort_str(value)<br />    <br />$$ LANGUAGE plpythonu;</pre> | データエンジニア | 
| サンプルデータをクエリします。　 | Python UDF を使用してサンプルデータをクエリするには、次の SQL クエリーを実行します：<pre>SELECT first_name FROM my_table ORDER BY collate_sort(first_name);</pre>これで、クエリはトルコ語の順序でサンプルデータを返すようになりました。<pre>first_name<br />---------------<br />ali<br />Ali<br />ırmak<br />IRMAK<br />irem<br />İREM<br />oğuz<br />OĞUZ<br />ömer<br />Ömer<br />sedat<br />SEDAT<br />şule<br />ŞULE</pre> | データエンジニア | 

## 関連リソース
<a name="set-up-language-specific-sorting-for-amazon-redshift-query-results-using-a-scalar-python-udf-resources"></a>
+ [「注文条件」](https://docs.aws.amazon.com/redshift/latest/dg/r_ORDER_BY_clause.html) (Amazon Redshift ドキュメント)
+ [「スカラー Python UDF の作成」](https://docs.aws.amazon.com/redshift/latest/dg/udf-creating-a-scalar-udf.html) (Amazon Redshift ドキュメント)

## 追加情報
<a name="set-up-language-specific-sorting-for-amazon-redshift-query-results-using-a-scalar-python-udf-additional"></a>

**トルコ語の例**

Amazon Redshift は、言語固有のソート順序ではなく、バイナリ UTF-8 の順序に基づいてクエリ結果を返します。つまり、トルコ語の文字を含む Amazon Redshift テーブルに対してクエリを実行した場合、クエリ結果はトルコ語の言語順でソートされません。トルコ語には、ラテン文字にはない 6 つの特殊文字 (、ı、、ö、ü) が含まれています。これらの特殊文字は、次のテーブルに示すように、UTF-8 バイナリの順序に基づいてソートされた結果セットの最後に配置されます。


| 
| 
| UTF-8 バイナリの順序 | トルコ語の順序付け | 
| --- |--- |
| ある | ある | 
| b | b | 
| c | c | 
| d | **çe (\$1)** | 
| e | d | 
| f | e | 
| g | f | 
| h | g | 
| i | **ğ (\$1)** | 
| j | h | 
| k | **ı (\$1)** | 
| I | i | 
| m | j | 
| n | k | 
| o | I | 
| p | m | 
| r | n | 
| s | o | 
| t | **ö (\$1)** | 
| u | p | 
| v | r | 
| y | s | 
| z | **ş (\$1)** | 
| **çe (\$1)** | t | 
| **ğ (\$1)** | u | 
| **ı (\$1)** | **ü (\$1)** | 
| **ö (\$1)** | v | 
| **ş (\$1)** | y | 
| **ü (\$1)** | z | 

**注記**  
アスタリスク (\$1) はトルコ語の特殊文字を示します。

上の表が示すように、特殊文字 **ç** はトルコ語の順序では **c** と **d **の間ですが、UTF-8 バイナリの順序では **z** の後に表示されます。このモードのスカラー Python UDF は、トルコ語の特殊文字をラテン語の対応する文字に置き換えるために、次の文字置換辞書を使用します。


| 
| 
| トルコ語の特殊文字 | ラテン語に相当する文字 | 
| --- |--- |
| ç | c\$1 | 
| ı | h\$1 | 
| ğ | g\$1 | 
| ö | o\$1 | 
| ş | s\$1 | 
| ü | u\$1 | 

**注記**  
トルコ語の特殊文字を置換するラテン文字の末尾には、チルダ (\$1) 文字が追加されます。

**スカラー Python UDF 関数を変更する**

スカラー Python UDF 関数が locate パラメータを受け入れ、マルチトランザクション辞書をサポートするように、このスキーマに基づいて変更するには、次の SQL コードを使用します：

```
CREATE OR REPLACE FUNCTION collate_sort (value varchar, locale varchar) 
RETURNS varchar 
IMMUTABLE 
AS 
$$    
    def sort_str(val):
       import string
       # Turkish Dictionary
       if locale == 'tr-TR':
            dictionary = {
               'I': 'ı', 
               'ı': 'h~', 
               'İ': 'i', 
               'Ş': 's~', 
               'ş': 's~', 
               'Ğ': 'g~', 
               'ğ': 'g~', 
               'Ü': 'u~', 
               'ü': 'u~', 
               'Ö': 'o~', 
               'ö': 'o~', 
               'Ç': 'c~', 
               'ç': 'c~'
        }
        # German Dictionary
        if locale == 'de-DE':
            dictionary = {
               ....
               ....
        }
        
        for key, value in dictionary.items():
            val = val.replace(key, value)
        
        return val.lower()
 
    return sort_str(value)
    
$$ LANGUAGE plpythonu;
```

次のコード例では、変更された Python UDF をクエリする方法を示しています。

```
SELECT first_name FROM my_table ORDER BY collate_order(first_name, 'tr-TR');
```

# さまざまな AWS リージョンの S3 バケットからのイベント通知に Lambda 関数をサブスクライブする
<a name="subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions"></a>

*Amazon Web Services、Suresh Konathala*

*Andrew Preston、Arindom Sarkar (所属なし)*

## 概要
<a name="subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions-summary"></a>

[Amazon Simple Storage Service (Amazon S3) イベント通知](https://docs.aws.amazon.com/AmazonS3/latest/userguide/NotificationHowTo.html)は、S3 バケット内の特定のイベント (オブジェクト作成イベント、オブジェクト削除イベント、オブジェクト復元イベントなど) の通知を発行します。AWS Lambda 関数を使用して、アプリケーションの要件に従ってこれらの通知を処理できます。ただし、Lambda 関数は、さまざまな AWS リージョンでホストされている S3 バケットからの通知を直接サブスクライブすることはできません。

このパターンのアプローチでは、各リージョンの Amazon Simple Notiﬁcation Service (Amazon SNS) トピックを使用して、クロスリージョン S3 バケットからの Amazon S3 通知を処理する[ファンアウトシナリオ](https://docs.aws.amazon.com/sns/latest/dg/sns-common-scenarios.html)をデプロイします。これらのリージョン SNS トピックは、Lambda 関数も含む中央リージョンの Amazon Simple Queue Service (Amazon SQS) キューに、Amazon S3 イベント通知を送信します。Lambda 関数はこの SQS キューにサブスクライブし、組織の要件に従ってイベント通知を処理します。

## 前提条件と制限事項
<a name="subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント。
+ Amazon SQS キューと Lambda 関数をホストする中央リージョンを含む、複数のリージョンにある既存の S3 バケット。
+ AWS コマンドラインインターフェイス (AWS CLI) がインストール済みおよび設定済み。詳細については、AWS CLI ドキュメントの「[ CLI バージョン 2 のインストール、更新、およびアンインストール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」を参照してください。 
+ Amazon SNS のファンアウトシナリオに精通していること。Amazon SNS のトピック作成の詳細については、「[Amazon SNS のドキュメント](https://docs.aws.amazon.com/sns/latest/dg/sns-common-scenarios.html)」を参照してください。

## アーキテクチャ
<a name="subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions-architecture"></a>

次の図は、このパターンのアプローチのアーキテクチャを示しています。 

![\[ワークフローは Amazon SNS、S3、SQS を使用して、クロスリージョン S3 バケットからのイベント通知を処理します。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/cf6c1804-8c41-46f1-9f17-ff361708c595/images/760cf4c0-0cb3-48d1-92ae-1cf0fa8ae076.png)


この図表は、次のワークフローを示しています:

1. Amazon S3 は、S3 バケットに関するイベント通知 (オブジェクトの作成、削除、復元など) を同じリージョンの SNS トピックに送信します。

1. SNS トピックは、中央リージョンの SQS キューにイベントを発行します。

1. SQS キューは Lambda 関数のイベントソースとして構成され、Lambda 関数のイベントメッセージをバッファします。 

1. Lambda 関数は SQS キューにメッセージがないかポーリングし、アプリケーションの要件に従って Amazon S3 イベント通知を処理します。

 

**テクノロジースタック**
+ Lambda
+ Amazon SNS
+ Amazon SQS
+ Amazon S3

## ツール
<a name="subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions-tools"></a>
+ [ CLI ](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)- AWS コマンドラインインターフェイス (AWS CLI) はオープンソースのツールで、コマンドラインシェルのコマンドで AWS サービスとインタラクトします。最小限の構成で、コマンドプロンプトからブラウザベースの AWS マネジメントコンソールで提供される機能と同等の機能を実装する AWS CLI コマンドを実行できます。
+ 「[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)」 を使用することで、AWS リソースをセットアップし、迅速かつ一貫したプロビジョニングを行い、AWS アカウントとリージョン全体でライフサイクルの最初から最後までリソースを管理できます。リソースを個別に管理する代わりに、テンプレートを使用してリソースとその依存関係を記述し、それらをスタックとしてまとめて起動して設定できます。複数の AWS アカウントと AWS リージョンにまたがるスタックを管理し、プロビジョニングすることが可能です。
+ 「[AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)」 – AWS Lambda はサーバーのプロビジョニングや管理を行わずにコードの実行を支援できるコンピューティングサービスです。Lambda は必要に応じてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケールします。課金は実際に消費したコンピューティング時間に対してのみ発生します。コードが実行されていない場合、料金は発生しません。
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) — Amazon Simple Notiﬁcation Service (Amazon SNS) は、ウェブサーバーや E メールアドレスなど、パブリッシャーとクライアント間のメッセージ配信や送信を調整および管理します。サブスクライバーは、サブスクライブしているトピックに対して発行されたすべてのメッセージを受信します。また、同じトピックのサブスクライバーはすべて同じメッセージを受信します。
+ [Amazon SQS ](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)– Amazon Simple Queue Service (Amazon SQS) は、配信ソフトウェアシステムとコンポーネントを統合および分離できる、安全で耐久性があり、利用可能なホスト型キューを提供します。Amazon SQSは、スタンダードおよび FIFO キューの両方をサポートしています。

## エピック
<a name="subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions-epics"></a>

### 中央リージョンに SQS キューと Lambda 関数を作成する
<a name="create-the-sqs-queue-and-lambda-function-in-your-central-region"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Lambda トリガーを使用して SQS キューを作成する。 | AWS マネジメントコンソールにサインインし、AWS Lambda ドキュメントの「[Amazon SQS で Lambda を使用する](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-example.html)」チュートリアルの手順に従って、中央リージョンに次のリソースを作成します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions.html)Lambda 関数のイベントソースとして SQS キューを構成するようにしてください。 | AWS DevOps、クラウドアーキテクト | 

### SNS トピックを作成し、必要な各リージョンの S3 バケットのイベント通知を設定する
<a name="create-an-sns-topic-and-set-up-event-notifications-for-the-s3-buckets-in-each-required-region"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
|  Amazon S3 イベント通知を受信する SNS トピックを作成します。 | Amazon S3 イベント通知を受信したいリージョンに SNS トピックを作成します。Amazon SNS のトピック作成の詳細については、Amazon SNS のドキュメントの「[SNS トピックを作成する](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html)」を参照してください。 SNS トピックの Amazon リソースネーム (ARN) を必ず記録してください。  | AWS DevOps、クラウドアーキテクト | 
| 中央 SQS キューにSNSトピックをサブスクライブします。 | 中央リージョンがホストする SQS キューに SNS トピックをサブスクライブします。これに関する詳細については、Amazon SNS ドキュメントの「[SNS トピックにサブスクライブする](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html)」を参照してください。 | AWS DevOps、クラウドアーキテクト | 
| SNS トピックのアクセスポリシーを更新する。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions.html)<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Sid": "0",<br />      "Effect": "Allow",<br />      "Principal": {<br />        "Service": "s3.amazonaws.com"<br />      },<br />      "Action": "sns:Publish",<br />      "Resource": "arn:aws:sns:us-west-2::s3Events-SNSTopic-us-west-2"<br />    }<br />  ]<br />}</pre> | AWS DevOps、クラウドアーキテクト | 
| リージョンの各 S3 バケットに通知を設定します。 | リージョンの各 S3 バケットにイベント通知を設定します。これに関する詳細については、Amazon S3 ドキュメントの「[Amazon S3 コンソールを使用したイベント通知の有効化と構成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-event-notifications.html)」を参照してください。**[送信先]** セクションで **[SNS トピック]** を選択し、先に作成した SNS トピックの ARN を指定します。 | AWS DevOps、クラウドアーキテクト | 
| 必要なすべてのリージョンについてこのエピックを繰り返します。 | 中央リージョンを含め、Amazon S3 イベント通知を受信したいリージョンごとに、このエピックのタスクを繰り返してください。 | AWS DevOps、クラウドアーキテクト | 

## 関連リソース
<a name="subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions-resources"></a>
+ [アクセスポリシーの構成](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-add-permissions.html) (Amazon SQS ドキュメント)
+ [SQS キューをイベントソースとして構成する](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#events-sqs-eventsource) (AWS Lambda ドキュメント)
+ [Lambda 関数を開始するための SQS キューの構成](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-lambda-function-trigger.html) (Amazon SQS ドキュメント)
+ [AWS::Lambda::Function リソース](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html) (AWS CloudFormation ドキュメント)

# データを Apache Parquet に変換するための 3 つの AWS Glue ETL ジョブタイプ
<a name="three-aws-glue-etl-job-types-for-converting-data-to-apache-parquet"></a>

*Amazon Web Services、Adnan Alvee、Nith Govindasivan、Karthikeyan Ramachandran*

## 概要
<a name="three-aws-glue-etl-job-types-for-converting-data-to-apache-parquet-summary"></a>

Amazon Web Services (AWS) クラウド上で、AWS Glue は完全に管理された抽出、変換、ロード (ETL) サービスです。AWS Glue は、データを分類し、クリーニングし、リッチ化し、様々なデータストアやデータストリーム間で確実に移動させるための費用対効果を実現します。

このパターンでは、AWS Glue でさまざまなジョブタイプが提供され、3 つの異なるスクリプトを使用して ETL ジョブの作成を示しています。

AWS Glue を使用して Python シェル環境で ETL ジョブを記述できます。マネージド型の Apache Spark 環境で Python (PySpark) または Scala を使用して、バッチ ETL ジョブとストリーミング ETL ジョブの両方を作成することもできます。ETL ジョブの作成を始めるにあたって、このパターンは Python シェル、PySpark、および Scala を使用するバッチ ETL ジョブに焦点を当てています。Python シェルジョブは、より少ない計算能力を必要とするワークロードを対象としています。マネージド Apache Spark 環境は、高い計算能力を必要とするワークロードを対象としています。

Apache Parquet は、効率的な圧縮とエンコードスキームをサポートするように構築されています。データを列指向に保存するため、分析ワークロードを高速化できます。データを Parquet に変換すると、長期的にはストレージ容量、コスト、時間を節約できます。Parquet について詳しくは、ブログ記事「[Apache Parquet:オープンソースの列指向データ形式でヒーローになる方法](https://blog.openbridge.com/how-to-be-a-hero-with-powerful-parquet-google-and-amazon-f2ae0f35ee04)」をご覧ください。

## 前提条件と制限事項
<a name="three-aws-glue-etl-job-types-for-converting-data-to-apache-parquet-prereqs"></a>

**前提条件**
+ AWS Identity and Access Management (IAM) ロール (ロールがない場合は、「[追加情報](#three-aws-glue-etl-job-types-for-converting-data-to-apache-parquet-additional)」セクションを参照してください)

## アーキテクチャ
<a name="three-aws-glue-etl-job-types-for-converting-data-to-apache-parquet-architecture"></a>

**ターゲットテクノロジースタック**
+ AWS Glue
+ Amazon Simple Storage Service (Amazon S3)
+ Apache Parquet

**自動化とスケール**
+ 「[AWS Glue ワークフロー](https://docs.aws.amazon.com/glue/latest/dg/workflows_overview.html)」は ETL パイプラインの完全自動化をサポートします。
+ データ処理ユニット (DPU) の数またはワーカーのタイプを変更して、水平方向と垂直方向にスケールさせることができます。

## ツール
<a name="three-aws-glue-etl-job-types-for-converting-data-to-apache-parquet-tools"></a>

**AWS サービス**
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、量にかかわらず、データを保存、保護、取得するのに役立つクラウドベースのオブジェクトストレージサービスです。
+ 「[AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)」は、さまざまなデータストアやデータストリーム間でデータを分類、クリーニング、強化、移動するための完全マネージド型の ETL サービスです。

その他のツール
+ 「[Apache Parquet](https://parquet.apache.org/)」は、ストレージとデータの取得を目的として設計されたオープンソースの列指向データファイル形式です。

**設定**

AWS Glue ETL の計算能力を設定するには、以下の設定を使用してください。コストを削減するには、このパターンで提供されるワークロードを実行するときには最小限の設定を使用してください。 
+ **Python シェル** – 1 DPU を使用して 16 GB のメモリを利用するか、0.0625 DPU を使用して 1 GB のメモリを利用できます。このパターンでは、AWS Glue コンソールのデフォルトである 0.0625 DPU を使用します。
+ **Python または Scala for Spark** – コンソールで Spark 関連のジョブタイプを選択した場合、AWS Glue はデフォルトで 10 個のワーカーと G.1X ワーカータイプを使用します。このパターンでは、2 つのワーカー (許容される最小数) と標準のワーカータイプを使用するため、十分かつ費用対効果が高くなります。

次の表は、Apache Spark 環境のさまざまな AWS Glue ワーカータイプを示しています。Python シェルジョブは Apache Spark 環境を使用して Python を実行しないため、このテーブルには含まれていません。


| 
| 
|  | Standard | G.1X | G.2X | 
| --- |--- |--- |--- |
| vCPU | 4 | 4 | 8 | 
| メモリ | 16 GB | 16 GB | 32 GB | 
| ディスク容量 | 50 GB | 64 GB | 128 GB | 
| ワーカーごとのエグゼキューター | 2 | 1  | 1 | 

**Code**

IAM ロールやパラメータ設定など、このパターンで使用されるコードについては、「[追加情報](#three-aws-glue-etl-job-types-for-converting-data-to-apache-parquet-additional)」セクションを参照してください。

## エピック
<a name="three-aws-glue-etl-job-types-for-converting-data-to-apache-parquet-epics"></a>

### データをアップロードする
<a name="upload-the-data"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| データを新規または既存の S3 バケットにアップロードします。 | お使いののアカウント内で新しい S3 バケットを作成するか、既存の S3 バケットを使用します。「[添付ファイル](#attachments-8c926709-8fa4-417f-9aaf-bcc8113d018f)」セクションから sample\$1data.csv ファイルをアップロードし、S3 バケットとプレフィックスの場所を書き留めます。 | AWS 全般 | 

### AWS Glue ジョブを作成して実行する
<a name="create-and-run-the-aws-glue-job"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS Glue ジョブを作成します。 | AWS Glue コンソールの ETL セクションで、AWS Glue ジョブを追加します。適切なジョブタイプ、AWS Glue バージョン、対応する DPU/ワーカータイプとワーカー数を選択します。詳細については、「*設定*」セクションを参照してください。 | デベロッパー、クラウド、またはデータ | 
| 入力位置と出力位置を変更します。 | AWS Glue ジョブに対応するコードをコピーし、「**データのアップロード**」エピックでメモした入力場所と出力場所を変更します。 | デベロッパー、クラウド、またはデータ | 
| パラメータを設定します。 | 「[追加情報](#three-aws-glue-etl-job-types-for-converting-data-to-apache-parquet-additional)」セクションに記載されているスニペットを使用して、ETL ジョブのパラメータを設定できます。AWS Glue は内部で次の 4 つの引数名を使用します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/three-aws-glue-etl-job-types-for-converting-data-to-apache-parquet.html)`--JOB_NAME` パラメータは、AWS Glue コンソールで明示的に入力する必要があります。**[ジョブ]**、**[ジョブの編集]**、**[セキュリティ設定]、[スクリプトライブラリ]、および [ジョブパラメータ]** (オプション) を選択します。`--JOB_NAME` キーとして入力し、値を提供します。また、AWS コマンドラインインターフェイス (AWS CLI) または AWS Glue API でもこのパラメータを設定できます。`--JOB_NAME` パラメーターは Spark によって使用され、Python シェル環境のジョブでは必要ありません。`--` をすべてのパラメーター名の前に追加する必要があります。そうしないと、コードは機能しません。たとえば、コードスニペットの場合、ロケーションパラメータは `--input_loc` と `--output_loc` によって呼び出される必要があります。 | デベロッパー、クラウド、またはデータ | 
| ETL ジョブを実行する。 | ジョブを実行し、出力を確認します。元のファイルからどれだけの容量が削減されたかに注意してください。 | デベロッパー、クラウド、またはデータ | 

## 関連リソース
<a name="three-aws-glue-etl-job-types-for-converting-data-to-apache-parquet-resources"></a>

**リファレンス**
+ [Apache Spark](https://spark.apache.org/)
+ 「[AWS Glue:仕組み](https://docs.aws.amazon.com/glue/latest/dg/how-it-works.html)」
+ 「[AWS Glue の価格](https://aws.amazon.com/glue/pricing/)」

**チュートリアルと動画**
+ 「[AWS Glue とは何ですか?](https://www.youtube.com/watch?v=qgWMfNSN9f4)」

## 追加情報
<a name="three-aws-glue-etl-job-types-for-converting-data-to-apache-parquet-additional"></a>

**IAM ロール**

AWS Glue ジョブを作成するときは、次のコードスニペットに示されている権限を持つ既存の IAM ロールまたは新しいロールを使用できます。

新規ロールを作成するには、次の YAML コードを使用します。

```
# (c) 2022 Amazon Web Services, Inc. or its affiliates. All Rights Reserved. This AWS Content is provided subject to the terms of the AWS Customer
# Agreement available at https://aws.amazon.com/agreement/ or other written agreement between Customer and Amazon Web Services, Inc.

AWSTemplateFormatVersion: "2010-09-09"

Description: This template will setup IAM role for AWS Glue service.

Resources:
  rGlueRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: "Allow"
            Principal:
              Service:
                - "glue.amazonaws.com"
            Action:
              - "sts:AssumeRole"
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole
      Policies:
        - PolicyName: !Sub "${AWS::StackName}-s3-limited-read-write-inline-policy"
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action:
                  - "s3:PutObject"
                  - "s3:GetObject"
                Resource: "arn:aws:s3:::*/*"
      Tags:
        - Key  : "Name"
          Value : !Sub "${AWS::StackName}"

Outputs:
  oGlueRoleName:
    Description: AWS Glue IAM role
    Value:
      Ref: rGlueRole
    Export:
      Name: !Join [ ":", [ !Ref "AWS::StackName", rGlueRole ] ]
```

AWS Glue Python シェル

Python コードでは、Pandas ライブラリと PyArrow ライブラリを使用してデータを Parquet に変換します。Pandas ライブラリは既に使用可能です。PyArrow ライブラリは 1 回限りの実行なので、パターンを実行するとダウンロードされます。ホイールファイルを使用して PyArrow をライブラリに変換し、そのファイルをライブラリパッケージとして提供できます。wheel ファイルのパッケージングについての詳細は、「[独自の Python ライブラリの提供](https://docs.aws.amazon.com/glue/latest/dg/add-job-python.html)」を参照してください。

AWS Glue Python シェルパラメータ

```
from awsglue.utils import getResolvedOptions

args = getResolvedOptions(sys.argv, ["input_loc", "output_loc"])
```

AWS Glue Python シェルコード

```
from io import BytesIO
import pandas as pd
import boto3
import os
import io
import site
from importlib import reload
from setuptools.command import easy_install
install_path = os.environ['GLUE_INSTALLATION']
easy_install.main( ["--install-dir", install_path, "pyarrow"] )
reload(site)
import pyarrow


input_loc = "s3://bucket-name/prefix/sample_data.csv"
output_loc = "s3://bucket-name/prefix/"


input_bucket = input_loc.split('/', 1)[0]
object_key = input_loc.split('/', 1)[1]


output_loc_bucket = output_loc.split('/', 1)[0]
output_loc_prefix = output_loc.split('/', 1)[1] 


s3 = boto3.client('s3')
obj = s3.get_object(Bucket=input_bucket, Key=object_key)
df = pd.read_csv(io.BytesIO(obj['Body'].read()))


parquet_buffer = BytesIO()
s3_resource = boto3.resource('s3')
df.to_parquet(parquet_buffer, index=False) 
s3_resource.Object(output_loc_bucket, output_loc_prefix +  'data' + '.parquet').put(Body=parquet_buffer.getvalue())
```

Python を使った AWS Glue ースパークジョブ

Python で AWS Glue Spark ジョブタイプを使用するには、ジョブタイプとして **[Spark]** を選択します。AWS Glue バージョンとして、**ジョブの起動時間が改善された Spark 3.1、Python 3 (グルーバージョン 3.0)** を選択してください。

AWS Glue Python パラメータ

```
from awsglue.utils import getResolvedOptions

args = getResolvedOptions(sys.argv, ["JOB_NAME", "input_loc", "output_loc"])
```

Python コードを使用した AWS Glue ースパークジョブ

```
import sys
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.transforms import *
from awsglue.dynamicframe import DynamicFrame
from awsglue.utils import getResolvedOptions
from awsglue.job import Job


sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)

input_loc = "s3://bucket-name/prefix/sample_data.csv"
output_loc = "s3://bucket-name/prefix/"

inputDyf = glueContext.create_dynamic_frame_from_options(\
    connection_type = "s3", \
    connection_options = { 
        "paths": [input_loc]}, \
    format = "csv",
    format_options={
        "withHeader": True,
        "separator": ","
    })


outputDF = glueContext.write_dynamic_frame.from_options(\
    frame = inputDyf, \
    connection_type = "s3", \
    connection_options = {"path": output_loc \
        }, format = "parquet")
```

圧縮されたサイズの大きいファイルが多数ある場合 (たとえば、1,000 個のファイルがそれぞれ約 3 MB)、次のコードに示すように、`recurse` パラメータと `compressionType` パラメータを組み合わせてプレフィックス内にあるすべてのファイルを読み取ります。

```
input_loc = "bucket-name/prefix/"
output_loc = "bucket-name/prefix/"

inputDyf = glueContext.create_dynamic_frame_from_options(
                    connection_type = "s3", 
                    connection_options = {"paths": [input_loc], 
                                            "compressionType":"gzip","recurse" :"True",
                                            },
                    format = "csv",
                    format_options={"withHeader": True,"separator": ","}
                    )
```

圧縮された小さなファイルが多数ある場合 (たとえば、それぞれが約 133 KB の 1,000 ファイル)、`compressionType` パラメーターと `recurse` パラメーターとともに、`groupFiles` パラメーターを使用してください。`groupFiles` パラメータは小さなファイルを複数の大きなファイルにグループ化し、`groupSize` パラメータは指定されたサイズ (たとえば 1 MB) にグループ化を制御します。次のコードスニペットは、コード内でこれらのパラメーターを使用する例を示しています。

```
input_loc = "bucket-name/prefix/"
output_loc = "bucket-name/prefix/"

inputDyf = glueContext.create_dynamic_frame_from_options(
                    connection_type = "s3", 
                    connection_options = {"paths": [input_loc], 
                                            "compressionType":"gzip","recurse" :"True",
                                             "groupFiles" :"inPartition",  "groupSize" :"1048576",
                                            },
                    format = "csv",
                    format_options={"withHeader": True,"separator": ","}
                    )
```

ワーカーノードを変更しなくても、これらの設定により、AWS Glue ジョブは複数のファイル (大小を問わず、圧縮の有無にかかわらず) を読み取り、Parquet 形式でターゲットに書き込むことができます。

Scala を使った AWS Glue ースパークジョブ

Scala で AWS Glue Spark ジョブタイプを使用するには、ジョブタイプとして **[Spark]** を選択し、**言語**として **[Scala]** を選択します。AWS Glue バージョンとして、**ジョブの起動時間が改善された Spark 3.1、Scala 2 (Glue バージョン 3.0)** を選択してください。ストレージ容量を節約するために、次の AWS Glue with Scala サンプルでも `applyMapping` 機能を使用してデータ型を変換しています。

AWS Glue Scala パラメータ

```
import com.amazonaws.services.glue.util.GlueArgParser val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME", "inputLoc", "outputLoc").toArray)
```

Scala コードを使用した AWS Glue ースパークジョブ

```
import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.MappingSpec
import com.amazonaws.services.glue.DynamicFrame
import com.amazonaws.services.glue.errors.CallSite
import com.amazonaws.services.glue.util.GlueArgParser
import com.amazonaws.services.glue.util.Job
import com.amazonaws.services.glue.util.JsonOptions
import org.apache.spark.SparkContext
import scala.collection.JavaConverters._


object GlueScalaApp {
  def main(sysArgs: Array[String]) {
    
    @transient val spark: SparkContext = SparkContext.getOrCreate()
    val glueContext: GlueContext = new GlueContext(spark)

    val inputLoc = "s3://bucket-name/prefix/sample_data.csv"
    val outputLoc = "s3://bucket-name/prefix/"

    val readCSV = glueContext.getSource("csv", JsonOptions(Map("paths" -> Set(inputLoc)))).getDynamicFrame()

    val applyMapping = readCSV.applyMapping(mappings = Seq(("_c0", "string", "date", "string"), ("_c1", "string", "sales", "long"),
    ("_c2", "string", "profit", "double")), caseSensitive = false)

    val formatPartition = applyMapping.toDF().coalesce(1)

    val dynamicFrame = DynamicFrame(formatPartition, glueContext)

    val dataSink = glueContext.getSinkWithFormat(
        connectionType = "s3", 
        options = JsonOptions(Map("path" -> outputLoc )),
        transformationContext = "dataSink", format = "parquet").writeDynamicFrame(dynamicFrame)
  }
}
```

## アタッチメント
<a name="attachments-8c926709-8fa4-417f-9aaf-bcc8113d018f"></a>

このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「[attachment.zip](samples/p-attach/8c926709-8fa4-417f-9aaf-bcc8113d018f/attachments/attachment.zip)」

# Amazon Athena および Amazon QuickSight を使用して Amazon Redshift 監査ログを視覚化
<a name="visualize-amazon-redshift-audit-logs-using-amazon-athena-and-amazon-quicksight"></a>

*Amazon Web Services、Sanket Sirsikar、Gopal Krishna Bhatia*

## 概要
<a name="visualize-amazon-redshift-audit-logs-using-amazon-athena-and-amazon-quicksight-summary"></a>

セキュリティは、Amazon Web Services (AWS) クラウドでのデータベース運用に欠かせないものです。組織は、潜在的なセキュリティインシデントやリスクを検出するために、データベースユーザーのアクティビティと接続を必ず監視する必要があります。このパターンは、セキュリティとトラブルシューティングの目的でデータベースを監視するのに役立ちます。このプロセスは、多くの場合データベース監査と知られます。

 このパターンは、Amazon Redshift ログの監査に役立つ Amazon QuickSight のレポートダッシュボード用の Amazon Athena テーブルとビューの作成を自動化する SQL スクリプトを提供します。これにより、データベースアクティビティの監視を担当するユーザーは、データセキュリティ機能に簡単にアクセスできます。 

## 前提条件と制限事項
<a name="visualize-amazon-redshift-audit-logs-using-amazon-athena-and-amazon-quicksight-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント。
+ 既存の Amazon Redshift クラスター。これに関する詳細については、Amazon Redshift ドキュメントの「[Amazon Redshift クラスターの作成](https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-data-launch-cluster.html)」を参照してください。
+ 既存の Athena ワークグループへのアクセス。詳細については、Amazon Athena ドキュメントの「[ワークグループの仕組み](https://docs.aws.amazon.com/athena/latest/ug/user-created-workgroups.html)」を参照してください。 
+ 必要な AWS ID およびアクセス管理 (IAM) アクセス管理 (IAM) アクセス権限が付いた、既存の Amazon Simple Storage Service (Amazon S3) ソースバケット。詳細については、Amazon Redshift ドキュメントの「[データベース監査ロギング](https://docs.aws.amazon.com/redshift/latest/mgmt/db-auditing.html)」にある「[Amazon Redshift 監査ログのバケット権限](https://docs.aws.amazon.com/redshift/latest/mgmt/db-auditing.html#db-auditing-bucket-permissions)」を参照してください。

## アーキテクチャ
<a name="visualize-amazon-redshift-audit-logs-using-amazon-athena-and-amazon-quicksight-architecture"></a>

![\[Data flow diagram showing Amazon Redshift, logs, S3 bucket, Amazon Athena, and Amazon Quick.\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/90e69009-001e-4ced-bef0-3c361f93ae87/images/9fde7f01-17ab-4207-8a59-a12daf85a382.png)


 

**テクノロジースタック**
+ Athena
+ Amazon Redshift 
+ Amazon S3 
+ QuickSight

## ツール
<a name="visualize-amazon-redshift-audit-logs-using-amazon-athena-and-amazon-quicksight-tools"></a>
+ [Amazon Athena ](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)– Amazon Athena は、Amazon S3 内のデータを標準 SQL を使用して簡単に分析できるインタラクティブなクエリサービスです。 
+ [Amazon QuickSight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) — QuickSight は、スケーラブルでサーバーレス、埋め込みが可能な、機械学習を活用したビジネスインテリジェンス (BI) サービスです。 
+ [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html) – Amazon Redshift は、エンタープライズレベル、ペタバイト規模、フルマネージド型のデータウェアハウスサービスです。 
+ 「[Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)」— Amazon Simple Storage Service (Amazon S3)は、インターネット用のストレージです。

## エピック
<a name="visualize-amazon-redshift-audit-logs-using-amazon-athena-and-amazon-quicksight-epics"></a>

### Amazon Redshift クラスターを設定します。
<a name="configure-the-amazon-redshift-cluster"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
|  Amazon Redshift クラスターの監査ログ記録を有効にします。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/visualize-amazon-redshift-audit-logs-using-amazon-athena-and-amazon-quicksight.html) | DBA、データエンジニア | 
| Amazon Redshift クラスターのパラメータグループでロギングを有効にします。 | 接続ログ、ユーザーログ、およびユーザーアクティビティログは、AWS マネジメントコンソール、Amazon Redshift API リファレンス、または AWS コマンドラインインターフェイス (AWS CLI)を使用して、同時に有効になります。 ユーザーアクティビティログの監査については、`enable_user_activity_logging` データベースパラメータも有効にする必要があります。監査ログ作成機能のみを有効にし、関連するパラメータを有効にしない場合、データベース監査ログは接続ログとユーザーログの情報のみを記録し、ユーザーアクティビティログの情報は記録しません。この`enable_user_activity_logging`パラメータはデフォルトでは有効になっていませんが、`false`から`true`に変更することで有効にできます。`user_activity_logging` パラメータを有効にして新しいクラスターパラメータグループを作成し、Amazon Redshift クラスターにアタッチする必要があります。詳細については、Amazon Redshift ドキュメントの「[クラスターの変更](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-console.html#modify-cluster)」を参照してください。このタスクの詳細については、Amazon Redshift ドキュメントの「[Amazon Redshift パラメータグループ](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html)」と「[コンソールを使用した監査の設定](https://docs.aws.amazon.com/redshift/latest/mgmt/db-auditing-console.html)」を参照してください。 | DBA、データエンジニア | 
| Amazon Redshift クラスターロギングのための S3 バケットのアクセス権限を設定します。 | ログ作成を有効にすると、Amazon Redshift はログ作成情報を収集し、 S3 バケットに格納されたログファイルにアップロードします。既存の S3 バケットを使用するか、新しいバケットを作成します。Amazon Redshift に S3 バケットへのアクセスに必要な IAM 権限があることを確認してください。詳細については、Amazon Redshift ドキュメントの「[データベース監査ロギング](https://docs.aws.amazon.com/redshift/latest/mgmt/db-auditing.html)」の「[Amazon Redshift 監査ログのバケット権限](https://docs.aws.amazon.com/redshift/latest/mgmt/db-auditing.html#db-auditing-bucket-permissions)」を参照してください。 | DBA、データエンジニア | 

### Athena テーブルとビューを作成する
<a name="create-the-athena-table-and-views"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| S3 バケットから Amazon Redshift 監査ログデータをクエリするための Athena テーブルとビューを作成します。 | Amazon Athena コンソールを開き、`AuditLogging.sql` SQL スクリプト (添付) のデータ定義言語 (DDL) クエリを使用して、ユーザーアクティビティログ、ユーザーログ、接続ログのテーブルとビューを作成します。詳細と手順については、Amazon Athena ワークショップの「[テーブルの作成とクエリの実行](https://athena-in-action.workshop.aws/30-basics/301-create-tables.html)」チュートリアルを参照してください。 | データエンジニア | 

### QuickSight ダッシュボードでログモニタリングを設定する
<a name="set-up-log-monitoring-in-the-quicksight-dashboard"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Athena をデータソースとして使用して QuickSight ダッシュボードを作成します。 | Amazon QuickSight コンソールを開き、Amazon Athena Athena ワークショップの「[Athena を使用して QuickSight で視覚化](https://athena-in-action.workshop.aws/30-basics/307-quicksight.html)」チュートリアルの指示に従って QuickSight ダッシュボードを作成します。 | DBA、データエンジニア | 

## 関連リソース
<a name="visualize-amazon-redshift-audit-logs-using-amazon-athena-and-amazon-quicksight-resources"></a>
+ [Athenaでテーブルの作成やクエリを実行する](https://athena-in-action.workshop.aws/30-basics/301-create-tables.html)
+ [Athena を使用して QuickSight で視覚化する](https://athena-in-action.workshop.aws/30-basics/307-quicksight.html)

## アタッチメント
<a name="attachments-90e69009-001e-4ced-bef0-3c361f93ae87"></a>

このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「[attachment.zip](samples/p-attach/90e69009-001e-4ced-bef0-3c361f93ae87/attachments/attachment.zip)」

# Amazon Quick Sight を使用してすべての AWS アカウントの IAM 認証情報レポートを視覚化する
<a name="visualize-iam-credential-reports-for-all-aws-accounts-using-amazon-quicksight"></a>

*Amazon Web Services、Parag Nagwekar、Arun Chandapillai*

## 概要
<a name="visualize-iam-credential-reports-for-all-aws-accounts-using-amazon-quicksight-summary"></a>


| 
| 
| 警告: IAM ユーザーは長期認証情報を保有するため、セキュリティ上のリスクが生じます。このリスクを軽減するために、これらのユーザーにはタスクの実行に必要な権限のみを付与し、不要になったユーザーは削除することをお勧めします。 | 
| --- |

AWS Identity and Access Management (IAM) 認証情報レポートを使用して、組織のセキュリティ、監査、コンプライアンス要件を満たすのに役立ちます。[認証情報レポートには](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_getting-report.html)、AWS アカウントのすべてのユーザーのリストと、パスワード、アクセスキー、多要素認証 (MFA) デバイスなど、認証情報のステータスが表示されます。「[AWS Organizations](https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/core-concepts.html)」が管理する複数のAWSアカウントに対して、認証情報レポートを使用できます。

このパターンには、Amazon Quick Sight ダッシュボードを使用して、組織内のすべての AWS アカウントの IAM 認証情報レポートを作成および共有するのに役立つステップとコードが含まれています。ダッシュボードは組織内の利害関係者と共有できます。このレポートは、組織が、次のような目標を絞ったビジネス成果を達成するのに役立ちます。
+ IAM ユーザーに関連するセキュリティインシデントを特定します。
+ IAM ユーザーのシングルサインオン (SSO) 認証への移行をリアルタイムで追跡する
+ IAM ユーザーがアクセスした AWS リージョンを追跡する
+ コンプライアンスを維持
+ 他の利害関係者との情報共有

## 前提条件と制限
<a name="visualize-iam-credential-reports-for-all-aws-accounts-using-amazon-quicksight-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント。
+ [組織](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tutorials_basic.html)内のメンバーアカウント。
+ Organizations アカウントにアクセスする権限を持つ [IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)
+ AWS コマンドラインインターフェース (AWS CLI) バージョン 2は、「[インストール済み](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)」および「[設定済み](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)」
+ [Amazon Quick Enterprise Edition](https://docs.aws.amazon.com/quicksight/latest/user/editions.html) の[サブスクリプション](https://docs.aws.amazon.com/quicksight/latest/user/signing-up.html) 

## アーキテクチャ
<a name="visualize-iam-credential-reports-for-all-aws-accounts-using-amazon-quicksight-architecture"></a>

**テクノロジースタック**
+ Amazon Athena
+ Amazon EventBridge
+ Amazon Quick Sight
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Glue
+ AWS Identity and Access Management (IAM)
+ AWS Lambda
+ AWS Organizations

**ターゲットアーキテクチャ**

次の図は、複数の AWS アカウントから IAM 認証情報レポートデータをキャプチャするワークフローを設定するためのアーキテクチャを示しています。

![\[アーキテクチャを以下に図で示します。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/8724ff28-40f6-4c43-9c65-fbd18bbbfd0f/images/e780916a-4ab7-4fdc-8ecc-c837c7d90d13.png)


1. EventBridge は Lambda 関数を毎日呼び出します。

1. Lambda 関数は、組織全体のすべての AWS アカウントで IAM ロールを引き受けます。次に、この関数は IAM 認証情報レポートを作成し、レポートデータを一元管理された S3 バケットに保存します。S3 バケットで暗号化を有効にし、パブリックアクセスを無効にする必要があります。

1. AWS Glue クローラーは S3 バケットを毎日クロールし、それに応じて Athena テーブルを更新します。

1. Quick Sight は、認証情報レポートからデータをインポートして分析し、ステークホルダーが視覚化して共有できるダッシュボードを構築します。

## ツール
<a name="visualize-iam-credential-reports-for-all-aws-accounts-using-amazon-quicksight-tools"></a>

**AWS サービス**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) は、Amazon S3 内のデータを標準 SQL を使用して簡単に分析できるインタラクティブなクエリサービスです。
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) は、アプリケーションをさまざまなソースのリアルタイムデータに接続できるようにするサーバーレスイベントバスサービスです。たとえば、Lambda 関数、API 宛先を使用する HTTP 呼び出しエンドポイント、または他の AWS アカウントのイベントバスなどです。
+ [Amazon QuickSight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) は、視覚化、分析、レポート生成に使用できるクラウドスケールのビジネスインテリジェンス (BI) サービスです。Quick Sight は Amazon Quick 内のコアコンポーネントであり、インタラクティブなデータ可視化、SPICE インメモリ分析、埋め込み分析、ダッシュボード共有を提供します。
+ 「[AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

**コード**

このパターンのコードは GitHub 内の「[getiamcredsreport-allaccounts-org](https://github.com/aws-samples/getiamcredsreport-allaccounts-org)」リポジトリで利用できます。このリポジトリのコードを使用して、Organizations の AWS アカウント全体の IAM 認証情報レポートを作成し、一元的に保存できます。

## エピック
<a name="visualize-iam-credential-reports-for-all-aws-accounts-using-amazon-quicksight-epics"></a>

### インフラストラクチャを設定します。
<a name="set-up-the-infrastructure"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Amazon Quick Enterprise Edition をセットアップします。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/visualize-iam-credential-reports-for-all-aws-accounts-using-amazon-quicksight.html) | AWS 管理者、AWS DevOps、クラウド管理者、クラウドアーキテクト | 
| Amazon Quick Sight を Amazon S3 および Athena と統合します。 | AWS CloudFormation スタックをデプロイする前に、Amazon S3 と Athena の使用を Quick Sight に[許可](https://docs.aws.amazon.com/quicksight/latest/user/troubleshoot-connect-to-datasources.html)する必要があります。 | AWS 管理者、AWS DevOps、クラウド管理者、クラウドアーキテクト | 

### インフラストラクチャを準備する
<a name="deploy-the-infrastructure"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| GitHub リポジトリのクローンを作成します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/visualize-iam-credential-reports-for-all-aws-accounts-using-amazon-quicksight.html) | AWS 管理者 | 
| インフラストラクチャを準備します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/visualize-iam-credential-reports-for-all-aws-accounts-using-amazon-quicksight.html) | AWS 管理者 | 
| IAM 権限ポリシーを作成します | 以下の権限を使用して、組織全体のすべての AWS アカウントに「[IAM ポリシーを作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)」します。<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Effect": "Allow",<br />      "Action": [<br />        "iam:GenerateCredentialReport",<br />        "iam:GetCredentialReport"<br />        ],<br />      "Resource": "*"<br />    }<br />  ]<br />}</pre> | AWS DevOps、クラウド管理者、クラウドアーキテクト、データエンジニア | 
| IAM ロールを信頼ポリシーとともに作成します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/visualize-iam-credential-reports-for-all-aws-accounts-using-amazon-quicksight.html)<pre>{<br />   "Version": "2012-10-17",		 	 	 <br />   "Statement":[<br />      {<br />         "Effect":"Allow",<br />         "Principal":{<br />            "AWS":[<br />               "arn:aws:iam::<MasterAccountID>:role/<LambdaRole>"<br />            ]<br />         },<br />         "Action":"sts:AssumeRole"<br />      }<br />   ]<br />}</pre>`arn:aws:iam::<MasterAccountID>:role/<LambdaRole>` を書き留めておいた Lambda ロールの ARN に置き換えます。Organizations は通常、自動化を使用して AWS アカウントの IAM ロールを作成します。この自動化は、可能であればを使用することをお勧めします。または、** **コードリポジトリにある`CreateRoleforOrg.py`スクリプトを使用することもできます。このスクリプトには、既存の管理者ロール、またはすべての AWS アカウントで IAM ポリシーとロールを作成する権限を持つその他の IAM ロールが必要です。 | クラウド管理者、クラウドアーキテクト、AWS 管理者 | 
| データを視覚化するように Amazon Quick Sight を設定します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/visualize-iam-credential-reports-for-all-aws-accounts-using-amazon-quicksight.html) | AWS DevOps、クラウド管理者、クラウドアーキテクト、データエンジニア | 

## 追加情報
<a name="visualize-iam-credential-reports-for-all-aws-accounts-using-amazon-quicksight-additional"></a>

**追加の考慮事項**

以下の点を考慮してください。
+ CloudFormation を使用してインフラストラクチャをデプロイしたら、Lambda と AWS Glue がそれぞれのスケジュールに従って実行されるまで、Amazon S3 で作成され、Athena によって分析されるレポートを受け取るのを待つことができます。または、Lambda を手動で実行して Amazon S3 のレポートを取得し、次に AWS Glue クローラーを実行してデータから作成された Athena テーブルを取得することもできます。
+ Quick は、ビジネス要件に基づいてデータを分析および視覚化するための強力なツールです。Quick の[パラメータ](https://docs.aws.amazon.com/quicksight/latest/user/parameters-in-quicksight.html)を使用して、選択したデータフィールドに基づいてウィジェットデータを制御できます。また、クイック分析を使用して、データセットからパラメータ (たとえば、Account、Date、User の各フィールド`user`) を作成し`partition_1`、Account`partition_0`、Date、User のパラメータのコントロールを追加できます。
+ 独自の Quick Sight ダッシュボードを構築するには、AWS Workshop Studio ウェブサイトの[「Quick Workshops](https://catalog.workshops.aws/quicksight/en-US)」を参照してください。
+ Quick Sight ダッシュボードのサンプルを確認するには、GitHub [getiamcredsreport-allaccounts-org](https://github.com/aws-samples/getiamcredsreport-allaccounts-org) コードリポジトリを参照してください。

**ターゲットを絞ったビジネス成果**

このパターンを使用すると、次のようなビジネス成果を達成できます。
+ **IAM ユーザーに関連するセキュリティインシデントを特定** — 組織内のすべての AWS アカウントのすべてのユーザーを 1 つの画面で調査できます。IAM ユーザーが最近アクセスした個々の AWS リージョンと、使用したサービスの傾向を追跡できます。
+ **IAM ユーザーの SSO 認証への移行をリアルタイムで追跡** — SSO を使用すると、ユーザーは 1 つの認証情報で 1 回サインインすると、複数の AWS アカウントとアプリケーションにアクセスできます。IAM ユーザーを SSO に移行することを計画している場合、このパターンは SSO に移行し、すべての AWS アカウントの IAM ユーザー認証情報の使用状況 (AWS マネジメントコンソールへのアクセスやアクセスキーの使用など) を追跡するのに役立ちます。
+ **IAM ユーザーがアクセスした AWS リージョンを追跡する** — データ主権やコスト管理など、さまざまな目的でリージョンへの IAM ユーザーのアクセスを制御できます。すべての IAM ユーザーによるリージョンの使用状況を追跡することもできます。
+ **コンプライアンスを維持** — 最小権限の原則に従うことで、特定のタスクの実行に必要な特定の IAM アクセス権限のみを付与できます。また、AWS サービス、AWS マネジメントコンソールへのアクセス、および認証情報の長期使用状況を追跡できます。
+ **他の利害関係者との情報の共有** — IAM 認証情報レポートや AWS アカウントへのアクセスを許可しなくても、厳選されたダッシュボードを他の利害関係者と共有できます。

# その他のパターン
<a name="analytics-more-patterns-pattern-list"></a>

**Topics**
+ [Amazon Cognito と AWS Amplify UI を使用して、React アプリケーションの既存ユーザーを認証する](authenticate-react-app-users-cognito-amplify-ui.md)
+ [Amazon Textract を使用して PDF ファイルからコンテンツを自動的に抽出する](automatically-extract-content-from-pdf-files-using-amazon-textract.md)
+ [Amazon SageMaker AI Studio Lab で時系列に DeepAR を使用してコールドスタート予測モデルを構築する](build-a-cold-start-forecasting-model-by-using-deepar.md)
+ [AWS Cost Explorer を使用して Amazon EMR クラスターの詳細なコストと使用状況レポートを作成する](create-detailed-cost-and-usage-reports-for-amazon-emr-clusters-by-using-aws-cost-explorer.md)
+ [Amazon RDS と Amazon Aurora の詳細なコストと使用状況レポートを作成する](create-detailed-cost-and-usage-reports-for-amazon-rds-and-amazon-aurora.md)
+ [AWS Cost Explorer を使用して、AWS Glue ジョブの詳細なコストと使用状況レポートを作成します。](create-detailed-cost-and-usage-reports-for-aws-glue-jobs-by-using-aws-cost-explorer.md)
+ [で Kinesis Data Streams と Firehose を使用して Amazon S3 に DynamoDB レコードを配信する AWS CDK](deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.md)
+ [AWS CodePipeline CI/CD パイプラインで AWS Glue ジョブをデプロイする](deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline.md)
+ [Amazon Cognito と IaC オートメーションを使用して Amazon Quick Sight ビジュアルコンポーネントをウェブアプリケーションに埋め込む](embed-quick-sight-visual-components-into-web-apps-cognito-iac.md)
+ [Amazon DynamoDB テーブルのストレージコストを推定](estimate-storage-costs-for-an-amazon-dynamodb-table.md)
+ [Terraform を使用して Amazon Redshift SQL クエリを実行する](execute-redshift-sql-queries-using-terraform.md)
+ [データレイク内の AWS IoT SiteWise メタデータ属性を抽出およびクエリする](extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake.md)
+ [Quick Sight で AWS Mainframe Modernization と Amazon Q を使用してデータインサイトを生成する](generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.md)
+ [Quick Sight で AWS Mainframe Modernization と Amazon Q を使用して Db2 z/OS データインサイトを生成する](generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.md)
+ [SageMaker ノートブックインスタンスに、別の AWS アカウントの CodeCommit リポジトリへの一時的なアクセスを許可する](give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.md)
+ [Amazon Data Firehose リソースが AWS KMS キーで暗号化されていない場合の識別とアラート](identify-and-alert-when-amazon-data-firehose-resources-are-not-encrypted-with-an-aws-kms-key.md)
+ [psycopg2 ライブラリを にインポート AWS Lambda して PostgreSQL データベースとやり取りする](import-psycopg2-library-lambda.md)
+ [Microsoft Sentinel に AWS セキュリティログを取り込んで分析する](ingest-analyze-aws-security-logs-sentinel.md)
+ [AWS DMS を使用して Amazon RDS for Oracle を Amazon RDS for PostgreSQL に移行します](migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.md)
+ [Oracle GoldenGate フラットファイルアダプタを使用して Oracle データベースを Amazon RDS for Oracle に移行する](migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters.md)
+ [AWS DMS と AWS SCT を使用して Oracle データベースを Amazon Redshift に移行する](migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct.md)
+ [Amazon S3 用 AWS PrivateLink と DistCP を使用して、オンプレミスの Hadoop 環境から Amazon S3 にデータを移行する](migrate-data-from-an-on-premises-hadoop-environment-to-amazon-s3-using-distcp-with-aws-privatelink-for-amazon-s3.md)
+ [カウチベースサーバーから AWS 上のカウチベースカペラへの移行](migrate-from-couchbase-server-to-couchbase-capella-on-aws.md)
+ [オンプレミスの Cloudera ワークロードを AWS 上の Cloudera データプラットフォームに移行する](migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws.md)
+ [Application Recovery Controller を使用して EMR クラスターのマルチ AZ フェイルオーバーを管理する](multi-az-failover-spark-emr-clusters-arc.md)
+ [IaC 原則を使用して Amazon Aurora Global Database のブルー/グリーンデプロイを自動化する](p-automate-blue-green-deployments-aurora-global-databases-iac.md)
+ [GitHub Actions を使用して AWS CloudFormation テンプレートに基づいて AWS Service Catalog 製品をプロビジョニングする](provision-aws-service-catalog-products-using-github-actions.md)
+ [pytest フレームワーク AWS Glue を使用して で Python ETL ジョブのユニットテストを実行する](run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.md)
+ [AWS ParallelCluster 用の Grafana モニタリングダッシュボードを設定する](set-up-a-grafana-monitoring-dashboard-for-aws-parallelcluster.md)
+ [アカウント間で Amazon Redshift クラスターから Amazon S3 にデータをアンロードする](unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.md)
+ [Flask と を使用して AI/ML モデルの結果を視覚化する AWS Elastic Beanstalk](visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk.md)