

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

# インフラストラクチャをコードとして使用して、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/)