databricks公式ドキュメントやってみた~Secure access to S3 buckets using instance profiles(後編)~

はじめに

公式ドキュメントやってみたシリーズ第2弾です。
今回のテーマは
「Secure access to S3 buckets using instance profiles」です。
インスタンスプロファイルを使用してセキュアにS3バケットにアクセスする方法をdatabricks公式ドキュメントの手順に従ってやってみたいと思います。

今回の作業内容

今回行う作業は以下の8項目です。

※0.ターゲットS3バケットの作成

  1. S3バケットにアクセスするためのインスタンスプロファイルを作成
  2. ターゲットのS3バケットのバケットポリシーの作成
  3. databricks on AWSデプロイ時のIAMロールの確認
  4. ターゲットS3バケットにアクセスするためのIAMロールをEC2に付与
  5. インスタンスプロファイルをdatabricksにアタッチ
  6. インスタンスプロファイルを使用してクラスタを立ち上げる
  7. ノートブックから今回設定したS3へのアクセスを確認する

作業自体がやや長いのと、
細かいロールやポリシーの設定があるため

  • 前編(0~3)→AWS側の設定
  • 後編(4~7)→databricks側の設定

に分けてやっていきたいと思います。

本題

では、本題に入っていきましょう。

5. インスタンスプロファイルをdatabricksにアタッチ

前編.1で作成したIAMロールを選択し、インスタンスプロファイルARNをコピーします。
image.png

databricksにログインして
右側の人間マークからdatabricks adminコンソールに入る、
image.png

Instance Profileに移動、
image.png

Add Instance Profileをクリック。
image.png

Instance Profile ARNに先ほどコピーしたIAMロールインスタンスプロファイルARNを貼り付けてAddをクリック。
その下の2つの項目に関しては今回はチェックしないで進めたいと思います。
image.png

6. インスタンスプロファイルを使用してクラスタを立ち上げる

先ほど作成したインスタンスプロファイルを使用してクラスターの立ち上げを行います。
すでに作成済みもしくは新しいクラスタのページに移動します。
Advanced Optionsをクリックして項目を表示させると、一番下にInstance Profileを記入する欄がありますのでクリック
先ほど設定したInstance Profileがあると思うので、それを設定してクラスターを立ち上げます。
image.png

7. ノートブックから今回設定したS3へのアクセスを確認する

新しくノートブックを開きます。
名前はなんでもOKで、言語はPython、クラスタはインスタンスプロファイルを設定したものを選択してください。
ノートブックの画面を開いたら下記を実行します。s3-bucket-nameは今回のターゲットS3バケット名を記入します。

[crayon-600e67882322f710635760/]

このようにターゲットS3バケットの中身が表示されたら無事今回の作業がうまくいっていることになります。
(この例ではターゲットS3バケット内にsampleとsample2という2つのフォルダを入れているのでこのような結果表示になっています。)
image.png

注)ターゲットS3バケットが空の状態でスクリプトを実行すると対象のディレクトリがありませんという内容のエラーを吐くので、必ずフォルダもしくはファイルを最低1つ入れた状態にしてください。

終わりに

以上がdatabricks公式ドキュメントやってみた~Secure access to S3 buckets using instance profiles(後編)~でした。
今回の内容を活用して、ぜひご自身の目的に合ったセキュアなdatabricks環境構築に取り組んでみてください。
最後までお読みいただきありがとうございました。
本記事がどなたかのお役に立てていれば幸いです。

※本内容はこちらの公式ドキュメントを参考にしております。
https://docs.databricks.com/administration-guide/cloud-configurations/aws/instance-profiles.html


databricks公式ドキュメントやってみた~Secure access to S3 buckets using instance profiles(前編)~

はじめに

公式ドキュメントやってみたシリーズ第2弾です。
今回のテーマは
「Secure access to S3 buckets using instance profiles」です。
インスタンスプロファイルを使用してセキュアにS3バケットにアクセスする方法をdatabricks公式ドキュメントの手順に従ってやってみたいと思います。

今回の作業内容

今回行う作業は以下の8項目です。

※0.ターゲットS3バケットの作成

  1. S3バケットにアクセスするためのインスタンスプロファイルを作成
  2. ターゲットのS3バケットのバケットポリシーの作成
  3. databricks on AWSデプロイ時のIAMロールの確認
  4. ターゲットS3バケットにアクセスするためのIAMロールをEC2に付与
  5. インスタンスプロファイルをdatabricksにアタッチ
  6. インスタンスプロファイルを使用してクラスタを立ち上げる
  7. ノートブックから今回設定したS3へのアクセスを確認する

作業自体がやや長いのと、
細かいロールやポリシーの設定があるため

  • 前編(0~4)→AWS側の設定
  • 後編(5~7)→databricks側の設定

に分けてやっていきたいと思います。

本題

では、本題に入っていきましょう。

0.ターゲットS3バケットの作成

今回の内容では、databricks on AWSのデプロイ時に使用したS3バケットとは別のS3バケットが必要となりますので、お持ちでない方は新たに作成しましょう。
既存のバケットを使用するという方は次に進みます。

1.S3バケットにアクセスするためのインスタンスプロファイルを作成

AWSにログインしてコンソール画面に入ります。
IAMのページに移動します。
サイドバーからロールを選択してロールの作成をクリック。
image.png

信頼されたエンティティの種類を選択→AWSサービス
ユースケースの選択→EC2
を選択して、次のステップに進みます。
image.png

アクセス権限、タグの設定は特に設定不要なのでそのまま進んでOKです。
最後の確認ページでロール名を記入してロールの作成をクリック。
image.png

作成したロールに戻ってインラインポリシーの追加をクリック。
ポリシーの作成ページでJSONのタブを選択し、以下スクリプトをコピぺ。
image.png

s3-bucket-name のところは今回使用するターゲットS3バケット名を記入してください。

[crayon-600e678823fbb865514738/]

ポリシーの確認に進んでポリシー名を記入し、ポリシーの作成をクリックでOK
作成したロールにもどって、ロールARNをコピーしておきましょう。
image.png

2.ターゲットのS3バケットのバケットポリシーの作成

AWSコンソール画面にもどってS3設定画面に移動します。
ターゲットS3バケット、アクセス権限、バケットポリシーの順で移動します。
バケットポリシーエディター欄で以下スクリプトをコピペします。
arn:aws:iam::aws-account-id-databricks:role/iam-role-for-s3-accessの部分は1.でコピーしたロールARNを貼り付けます。
s3-bucket-nameは今回使用するターゲットS3バケット名を記入します。

[crayon-600e678823fc2664271277/]

こんな感じでコピペできたら保存をクリックします。
image.png

S3バケットポリシーの設定は以上です。

3.databricks on AWSデプロイ時のIAMロールの確認

https://accounts.cloud.databricks.com/registration.html#login
からdatabricksにログインします。
サイドバーからAWS Accountを選択しデプロイに使用したロールARNを確認します。

image.png

4.ターゲットS3バケットにアクセスするためのIAMロールをEC2に付与

AWSの、ロール設定画面に戻ります。
3.で確認したdatabricks on AWS デプロイ時に使用したロールを選択します。
ポリシーの編集で以下スクリプトをコピペします。
arn:aws:iam::aws-account-id-databricks:role/iam-role-for-s3-accessには1.で作成したIAMロールのARNを記入します。
image.png
image.png

[crayon-600e678823fc6332014901/]

編集を終えたらポリシーの確認、変更の保存でOKです。

おわりに

databricks公式ドキュメントやってみた~Secure access to S3 buckets using instance profiles(前編)~
は以上です。
前半でAWS側の設定は完了となりましたので、後半ではそれを使ってdatabricks側の設定作業を行なっていきます。
お読みいただきありがとうございました。
引き続き後半もご覧いただけると幸いです。


Enterprise Cloud Service Public Preview on AWS - Enterprise Security 編についてまとめて和訳してみた②-2

はじめに

今回は、2020年6月12日に Vinay Wagh 氏と Abhinav Garg 氏によって投稿されました「 Enterprise Cloud Service Public Preview on AWS 」で紹介されている Enterprise Security の1つである「 Customer-managed VPC 」のリージョナルエンドポイントについて、まとめました。

本記事のリンクは下記参照。
■リンク
Customer-managed VPC
Enterprise Cloud Service Public Preview on AWS

リージョナルエンドポイント(セキュアなクラスタ接続限定)

カスタママネージド VPC を使用してセキュアなクラスタ接続を行う場合は、AWS グローバルエンドポイントと比較して、より直接的な接続を実現し、コスト削減のために AWS サービスへのリージョナル VPC エンドポイントのみを使用するよう VPC を構成可能です。
以下の4つが、カスタマー管理のVPC を持つ Databricks ワークスペースが到達する必要がある AWS サービスです。

  • STS
  • S3
  • Kinesis
  • RDS (※デフォルトの Databricks メタストアを使用する場合のみ VPC から RDS サービスへの接続が必要)

RDS 以外の3つのサービスにおける、VPCエンドポイントを使用したネットワークの動作、ノートブック、またはクラスターレベルの Spark 構成による動作の変化や構成について説明します。

STS リージョナル VPC エンドポイント概要

AWS STSへのデータプレーンアクセスの場合:

  • デフォルトでは VPC エンドポイントを設定すると、トラフィックは S3 VPC エンドポイントをバイパスし、グローバル STS URL を使用して送信します。全てのトラフィックがVPCエンドポイントを通過するようにするには、追加の設定が必要です。
  • 関連する Spark 構成をノートブック、またはクラスターレベルに追加すると、STS VPC エンドポイントを介してトラフィックが出ます。

Databricks では、アクセスが一時的に使用される場合に備えて、STS グローバル URL へのアクセスを許可する出口装置を構成することをお勧めします。たとえば、最初のワークスペース作成後、ノートブック、またはクラスタ Spark 構成とクラスターポリシのセットアップ前に、Databricks はグローバル URL を使用しなくてはいけません。

S3 リージョナル VPC エンドポイント概要

コントロールプレーン内のアーティファクトとログ保存のための S3 へのデータプレーンアクセスのために VPC エンドポイントを構成すると、次のような動作になります。

  • us-west-2、us-east-1 と us-east-2、リージョンへのトラフィックは S3 VPC エンドポイントを使用
  • us-west-1 のリージョンの場合、関連するエンドポイントがクロスリージョンのため、S3 VPC エンドポイントはバイパスされる

DBFS ルートストレージ用のS3へのデータプレーンアクセスと、VPCリージョン内の独自のS3データストレージ用。

  • デフォルトでは、VPC エンドポイントを設定すると、トラフィックは S3 VPC エンドポイントをバイパスし、グローバル S3 URL を使用して送信します。全てのトラフィックが VPC エンドポイントを通過するようにするには、追加の設定が必要です。
  • ノートブック、またはクラスタレベルで関連する Spark 構成を追加すると、トラフィックは S3 VPC エンドポイントを使用して送信されます

Databricks では、アクセスが一時的に使用される場合に備えて、S3 グローバル URL へのアクセスを許可する出口装置を構成することをお勧めします。たとえば、最初のワークスペース作成後、ノートブック、またはクラスタ Spark 構成とクラスターポリシのセットアップ前に、Databricks はグローバル URL を使用しなくてはいけません。

Kinesis リージョナル VPC エンドポイント概要

コントロールプレーンのロギングおよび使用状況データエンドポイントのKinesisへのデータプレーンアクセスの場合:

  • us-west-2、us-east-1 と us-east-2、リージョンへのトラフィックは Kinesis VPC エンドポイントを使用
  • us-west-1 のリージョンの場合、関連するエンドポイントがクロスリージョンのため、Kinesis VPC エンドポイントはバイパスされる

VPCリージョン内の顧客データストリームのKinesisへのデータプレーンアクセスの場合:

  • トラフィックは、Kinesis VPCエンドポイントを使用

リージョナルエンドポイントのセットアップ

ここでは、ノートブックやクラスタレベルでのアウトバウンドアクセスの制限や、Spark の設定を追加するためのオプションの手順と、リージョナルエンドポイントの設定方法を説明します。

S3 VPC ゲートウェイエンドポイントのセットアップ

AWS コンソール、または AWS CLI ツールで利用できます。

■CLI コマンド

[crayon-600e678824c15008506005/]

STS VPC ゲートウェイエンドポイントのセットアップ

AWS コンソール、または AWS CLI ツールで利用できます。

■CLI コマンド

[crayon-600e678824c1b660745973/]

■AWS コンソール
1. AWS コンソール画面より、 VPC サービスの画面に移動
2. 左のナビゲーションより「エンドポイント」を選択し、「エンドポイントの作成」をクリック
3. 「サービス名」フィールドで sts を検索し、ユーザの利用しているリージョンのを選択
4. 「VPCフィールド」で Databricks デプロイメントと関連づいている VPC を選択
5. 同じフィールドで、ワークスペースのサブネットを選択(本番環境への導入時は、エンドポイントネットワークインターフェイス用のサブネットはワークスペースのサブネットとは異なる必要がある。)
6. 「DNS 名を有効化」にチェック
7. VPC で DNS ホスト名と DNS 解決が有効になっていることを確認
8. セキュリティグループ画面で、Datarbricks ワークスペースに関連づいたセキュリティグループを選択
9. ポリシー画面にて「フルアクセス」を選択
10. STS インターフェイスエンドポイントが AWS VPC コンソールのエンドポイントセクションに表示されていることを確認

おわりに

Customer Managed VPC の リージョナルエンドポイントに関するまとめは以上です。
詳細については、元記事をご参照ください。


databricks on AWS deploy手順~その3~

はじめに

databricks on AWSをdeployするまでの手順をご紹介したいと思います。
databricks on AWSのdeploy完了までには
databricks側とAWS側でいくつかの登録&設定作業が必要となっているため以下3章に分けてご説明いたします。

  • その1 databricksアカウントの作成
  • その2 AWSアカウントとの連携
  • その3 databricks用S3バケットとの連携 ← 今回はここ

本題

長かったdatabricks on AWS のdeploy手順もいよいよ最後のその3まできました。
今回もAWSアカウントとdatabricksアカウントの両方使用するので、
ログインした状態でご準備をお願いいたします。

➀databricks用S3バケットの作成

databricks用のS3バケットを作成します。
databricks公式サイトでも、databricks専用のS3バケットを作成することがベストプラクティスとされているのでそちらに則って進めていきたいと思います。

S3のコンソール画面に移動します。
「バケットを作成する」をクリックしてdatabricks用新規バケット作成作業に入ります。
image.png

名前とリージョン

バケット名は任意のものでOK(私はs3-for-databricks-testという名前にしました)
リージョンは「アジアパシフィック(東京)」
既存のバケットから設定をコピーは入力不要です。
バケット名とリージョンを記入したら「次へ」をクリック
スクリーンショット 2020-08-14 14.45.09.png

オプションの設定

ここでは様々なオプションを設定することができます。
今回は、databricks公式サイトの方で強く推奨されている「バージョニング」機能のみ設定してとりあえず先に進みたいと思います。
一番上の「バージョニング」にチェックを入れて「次へ」をクリック
スクリーンショット 2020-08-14 14.45.29.png

アクセス許可の設定

何も変更せずに「次へ」をクリック
スクリーンショット 2020-08-14 14.45.42.png

確認

バケット名
バージョニングの有効化
アクセス権限
を確認したら、「バケットを作成」をクリックして、
databricks用S3バケットの作成が完了です。
スクリーンショット 2020-08-14 14.46.10.png

➁バケットポリシーの作成

databricksコンソール画面から左部の「AWS Storage」欄を選択するとこの画面になります。
画面中央部の空欄に作成したdatabricks用S3バケット名を記入して「Generate Policy」をクリック。
image.png

生成されたバケットポリシーをコピーしておく。
image.png

S3コンソール画面に戻って
「databricks用S3バケット」→「アクセス権限」→「バケットポリシー」の順に進みます。
バケットポリシーエディターに先ほどコピーしたバケットポリシーを貼り付けます。
画面右側の「保存」をクリック。

image.png

databricksのAWS Storage画面に戻り
「Apply Change」をクリック。
このような画面になったらS3の設定完了です。
image.png

➂Deploy Databricks

databricksのコンソール画面に戻り、
画面左部から「Deploy Databricks」を選択するとこの画面になります。
空欄にチェックをいれて「Deploy」をクリック。
Deployが完了するまで30分ほどかかります。
image.png

deployが完了するとdatabricksからこのようなメールが届き、
image.png
databricksコンソール画面でもこのような表示になります。
image.png

以上で、作業は終了です。

おわりに

3章にわたるdeploy作業も今回でついに終わりを迎えました。
お疲れさまでした。
本記事がどなたかのお役に立てていれば幸いです。

今後も引き続きdatabricks公式ドキュメントを参考に記事をupしていく予定です。


databricks on AWS deploy手順~その2~

はじめに

databricks on AWSをdeployするまでの手順をご紹介したいと思います。
databricks on AWSのdeploy完了までには
databricks側とAWS側でいくつかの登録&設定作業が必要となっているため以下3章に分けてご説明いたします。

  • その1 databricksアカウントの作成
  • その2 AWSアカウントとの連携 ← 今回はここ
  • その3 databricks用S3バケットとの連携

本題

AWSアカウントとの連携方法は

  • クロスアカウントロールを使用する方法
  • アクセスキーを使用する方法

の2種類がありますが、databricks公式サイトではクロスアカウントロールを使用する方法を強く推奨しているので、今回はそちらの方法で進めて行こうと思います。
ここからはAWSアカウントとdatabricksアカウントを使用するので、
両方ログインした状態のページのご用意をお願いいたします。

➀databricksアカウント設定

databricksコンソール画面から、サイドバー内「AWS Account」を選択
「Deploy to AWS using Cross Account Role」にチェック
AWS Regionは「ap-northeast-1:Asia Pacific(Tokyo) Region」を選択
External IDはIAMロール作成時に使用するので、コピーしておいてください
ここまで終えたら一旦AWS側の設定に移ります。
image.png

➁クロスアカウントロールとアクセスポリシーの作成

AWSコンソール画面からIAMサービスのページへ移動します。
(検索欄でIAMと入れれば移動できます。)

画面左部のサイドバーから「ロール」を選択。
image.png

「ロールの作成」をクリック。
「別のAWSアカウント」を選択。
「このロールを使用できるアカウントを指定する」の必要事項欄を埋めていきます。
アカウントID : 414351767826
オプション : 外部IDが必要にチェック
外部ID : 本題➀でコピーしたExternal IDをペースト
3つの記入が済んだら「次のステップ:アクセス権限」をクリック
image.png

何もせず「次のステップ:タグ」をクリック
image.png

何もせず「次のステップ:確認」をクリック
image.png

ロール名を記入して「ロールの作成」をクリック
image.png

IAMの画面に戻り、サイドバーから「ロール」を選択。
ロール一覧内から作成したロールを選択
image.png

画面右にある「インラインポリシーの追加」をクリック
image.png

JSONのタブを選択し、以下コードをコピペ
「ポリシーの確認」をクリック

[crayon-600e6788257dd320594678/]

image.png

ポリシー名を記入して、「ポリシーの作成」をクリック
image.png

再度ロールのページに戻って、「ロールARN」をコピー
image.png

➂databricksアカウント設定残り

本題➀で使用していたdatabricksの画面に戻ります。
本題➁でコピーしておいたロールARNをペーストして「Next Step」をクリック
image.png

自動的にS3設定画面に移動したら、その2の作業は無事完了です。
image.png

おわりに

今回その2ではAWSアカウントとの連携作業を行いました。
次回その3ではいよいよ最後のS3との連携作業を行います。
引き続き頑張りましょう!
お疲れ様でした。


databricks on AWS deploy手順~その1~

はじめに

databricks on AWSをdeployするまでの手順をご紹介したいと思います。
databricks on AWSのdeploy完了までには
databricks側とAWS側でいくつかの登録&設定作業が必要となっているため以下3章に分けてご説明いたします。

  • その1 databricksアカウントの作成 ← 今回はここ
  • その2 AWSアカウントとの連携
  • その3 databricks用S3バケットとの連携

本題

➀databricksアカウント登録

では、さっそく本題に参ります。
以下URLから登録画面に飛びます。
https://databricks.com/try-databricks?_ga=2.231496607.1278047542.1597105290-1399252035.1593565763
image.png

必要情報を埋めていきましょう。
How would you describe your role?(あなたは役割なに?)
What is intended use case?(用途は?)
の質問に関しては、正確でなくてOKです。
※当てはまるものがなければ、とりあえず何か選択して先に進みましょう。
すべて記入したら画面下部の「SIGN UP」をクリック
image.png

記入漏れなどがなければ、この画面に進みます。
2020-08-12_10h10_05.png
画面下部の
GET STARTED ON 「Azure」OR 「AWS」
でAWSの方をクリック
image.png

問題がなければ、databricksから以下のメールが届きます。
メール内のリンクを踏んでdatabricksアカウントのパスワード設定画面に飛びます。
※メール内の2つのリンクは同じですので、どちらからでもOKです。
image.png

パスワード設定画面です。
ここでパスワードを設定します。メモを忘れずに。
image.png

➁決済情報の登録

パスワード設定が完了し、ログインすると以下画面になります。
画面左部の「Billing Details」欄から決済情報の登録を行います。
必要事項の記入したら「Next Step」をクリックで登録は完了です。
image.png

その1の内容はここまでです。

おわりに

今回はdatabricksアカウント登録~決済情報の登録までを行いました。
次回「その2」ではAWSアカウントとの連携についての作業を行います。
引き続き頑張っていきましょう。
ひとまずお疲れさまでした。


databricks公式ドキュメントをやってみた~Get EC2 instance information~

はじめに

公式ドキュメントに沿ってdatabricks on AWSを動かしてみたいと思います。
今回のテーマは
「Get EC2 instance information」です。
その名の通り、databricks上でコードを実行してEC2インスタンスの情報を表示させるという内容です。

本題

今回行う作業としては、

  • 作業ページまでのログイン
  • クラスターの作成
  • Notebookの作成
  • スクリプトの実行

の4ステップです。
早速初めて行きましょう。

作業ページにログインする

1.以下URLからdatabricksにログインします。
https://accounts.cloud.databricks.com/registration.html#login

2.「Deploy Databricks」を選択し、水色文字になっているURLをクリックします。
image.png

3.1でログイン時に使用したメールアドレスとパスワードを使用してログインします。
この画面に辿りついたらOKです。
image.png

クラスターの作成

1.先ほどの画面Common Tasks欄のNew Clusterをクリック。
※左のメニューバーからClustersを選択してもOKです。

2.ここではクラスターの詳細設定ができますが、とりあえずデフォルトのもので構いません。
(コストが気になるという方は
Worker Typeのところをm4.largeなどの変更しても大丈夫です。)
Cluster Nameを記入したらCreate Clusterをクリックします。
image.png

3.左のメニューバーからClusterページにいき
このようにStateがRunningになったらクラスターの設定が完了です。
image.png

Notebook作成

左上のメニューバーからHome画面に戻ったら
画面右のCreate a Blank Notebookをクリックします。
Name : 任意
Default Language : Python
Cluster : 先ほど作成したもの
を記入してCreateをクリック。
image.png

スクリプトの実行

以下のスクリプトを実行していきましょう。
基本的な動作はjupyter notebookと同じです。

1.今回使うモジュールのimport

[crayon-600e6788265dc378528082/]

2.インスタンス情報取得

[crayon-600e6788265e1824763256/]

3.マスター/ドライバーのパブリックホスト名を取得

[crayon-600e6788265e3558143766/]

4.全てのワーカーのパブリックホスト名とIP情報を取得
numWorkersはClusterページから確認して各自変更してください。

[crayon-600e6788265e4278716764/]

※今回の内容は以下公式サイトを参考に作成しました。
ドキュメント内のスクリプトはPython2のモジュールになっているので、本記事ではPython3用に修正しております。
https://docs.databricks.com/administration-guide/cloud-configurations/aws/describe-my-ec2.html

さいごに

公式ドキュメントに基づいて実際にNotebookを動かしてみました。
非常に簡単でしたが、databricksとAWSが連携していることが確認できたと思います。

最後までお読みいただきありがとうございました。


Amazon Forecast を使った予測の手順まとめ

はじめに

今回は、Amazon Forecast を用いた予測を実施します。手順は以下となります。
AWS 公式の Amazon Forecast の開発ガイドについては、下記リンク参照で。

■リンク
Amazon Forecast 開発者ガイド

■手順

①予測するデータセットの準備(csv を S3 にインポートしておく)
②Amazon Forecast に csv データをインポート
③トレーニングモデルの作成
④予測の実施

Amazon Forecast とは

■Amazon Forecas の特徴

  • 時系列データと、それに関するデータを組みあせて予測を実施
  • 一度に複数のアイテムの予測をすることが可能(最大100,000)
  • 予測結果は csv にして S3 にエクスポート可能
  • 予測をしたい内容に合わせて、以下からドメインを選択して予測を実施

■Amazon Forecast のドメイン一覧

  • RETAIL:小売の需要予測
  • INVENTORY_PLANNING:サプライチェーンとインベントリの計画
  • EC2 CAPACITY:EC2 のキャパシティ予測
  • WORK_FORCE:従業員の計画(労働力需要)
  • WEB_TRAFFIC:今後のウェブトラフィックの見積もり
  • METRICS:収益、およびキャッシュフローなどの予測メトリクス
  • CUSTOM:その他すべての時系列予測のタイプ

予測準備

csv の準備

今回は予測の実施にあたって、2つの csv を用意しました。

■用意した csv データ

  • target_time_series:予測をしたいcsv データ。こちらの csv データだけでも予測の実施は可能
  • related_time_series:target_time_series の補助となる csv データ(天候や気温、曜日など説明変数にあたるデータ)

今回は、RETAIL というドメインを利用して予測を行いたいと思います。ドメインごとに必要な項目が異なりますので、注意しましょう。また、Amazon Forecast で予測できる期間はインポートしたデータの1/3までです。今後1ヶ月の予測をしたい場合は、少なくとも直近3ヶ月分のデータが必要となります。

■RETAILドメインを利用する場合のcsv データセットタイプに必要な項目

  • target_time_series データセットに必要な項目
    • item_id (string) :需要を予測する商品名や商品の ID など
    • timestamp (teimstamp):時系列
    • demand (float) :時系列ごとの商品の販売数。Amazon Forecast が予測を生成するターゲットフィールド
    • location(string):商品の販売先店舗や地域名など(※任意で使用)

2020-07-17_15h37_55.png

  • related_time_series データセットに必要な項目
    • item_id (string) :需要を予測する商品名や商品の ID など
    • timestamp (teimstamp):時系列
    • price (float) :時系列ごとの商品の価格(※任意で使用)

※related_time_series データセットでは、天候や曜日、気温などの項目も使用可能です。

2020-07-21_15h38_32.png

予測実施

データのインポート

コンソール画面から「Amazon Forecast」を検索します。
データセットグループの作成、時系列データセットの作成、そしてcsv データのインポートを実施します。

■データセットグループの作成
image.png

  • Dataset group name:予測をするこのデータセットグループ名を入力
  • Forecasting domain:予測に使用するドメインを選択

■時系列データセットの作成
image.png

  • dataset name:時系列データセット名を入力(S3 にインポートした csv と同じの方が分かりやすい)
  • Frequency of your data:時系列データセットの時系列(月・日・時)を選択
  • Data schema;時系列データのスキーマをJSON 形式で入力

■csv データのインポート
image.png

  • Dataset import name:インポートする csv データ名を推奨
  • Timestamp format:csv のtimestamp 形式をこの形式に合わせておくこと
  • Data location:csv データの置いてあるパス

データのトレーニング

無事にインポートが完了したら、次はインポートしたデータを用いてモデルのトレーニングを実施します。
ここでは、以下の項目を入力します。
image.png

  • Predictor name :予測モデルの名前(任意)
  • Forecast horizon:予測をしたい期間決め(期間は最大で csv データの1/3まで)
  • Forecasat frequency:csv データと同じ時系列を選択
  • Algorithm selection:利用するアルゴリズムを選択(特に希望が無ければ「Automatic」を選択)
  • Country for Holidays:休日・祝日情報を追加する場合、こちらを使用(「Japan」を検索して使用)

夜速のトレーニグの完了には、データにもよりますが大体30分以上はかかります。

予測の実施

それでは、いよいよ予測を実行してみましょう。
image.png

  • Forecast name:予測を実行して出てくる予測結果モデルの名前
  • Predictor:予測の実施にあたり利用する予測モデル(先程の学習モデルを選択すればOK)

上記の2つを入力したら、「Create forecast」を選択し、暫く待ちましょう。
これで、完了です。

Forecast lookup の使用

Amazon Forecast lookup で、Amazon Forecast のコンソール画面上で予測結果を可視化することができます。

image.png

  • Forecast:可視化したい予測結果モデルを選択
  • Start date:可視化したい最初の月日を選択(インポートした csv データの最後の時系列を選択)
  • End date:可視化したい最終の月日を選択(選択できる月日はインポートした csv データの1/3の期間まで)
  • Value:可視化したいアイテム名を選択

可視化結果は、図のように3つの予測モデルが表示されます。
image.png

  • P90 forecast:予測値の上限
  • P50 forecast:一般的に言う予測値
  • P10 forecast:予測値の下限

その他

S3 へのエクスポート

Amazon Forecast で行った予測は、 csv で S3 にエクスポートすることが可能です。
以下が手順です。

image.png
■手順
①ダッシュボードの左の「Forecasts」を選択
②作成した予測モデルを選択
③「Create forecast export」を選択

image.png
■手順
④以下の項目を入力、選択したら S3 へのエクスポートを実行

  • Export name:S3 へ送る csv の名前を決める
  • Generated forecast:S3へ送る 予測結果を選択
  • S3 forecast export location:csv を送る先の S3 のパスを入力

S3 へのエクスポートが完了するのには10数分かかります。

料金体系について

Amazon Forecast は従量課金制です。課金対象は以下の3つです。

■課金対象

  • 予測をしたいアイテムの総数×3パターンの予測モデル
  • csv データの重さ
  • モデルのトレーニングに費やした時間

おわりに

Amaozn Forecast を用いた予測は以上となります。
詳細な内容については、AWS公式を参照ください。

 

 

 


はじめての機械学習をデプロイしてみた(後編)

はじめに

前回の記事の Amazon sagemaker のチュートリアルの続きです。

次に、データを SageMaker インスタンスにダウンロードして、データフレームにロードする必要があります。
次のコードをコピーして実行します。

[crayon-600e6788271f4309364067/]

image.png
次に、データをシャッフルし、トレーニングデータとテストデータに分割します。

トレーニングデータ
(顧客の70%)がモデルのトレーニングループ中に使用されます。
勾配ベースの最適化を使用して、モデルパラメータを繰り返し調整します。
モデルエラーを最小化していきます。

テストデータ
(顧客の30%を、残りの)モデルの性能を評価し、目に見えないデータに、訓練されたモデルのデフォルト値を測定するために使用されます。

次のコードを新しいコードセルにコピーし、[run]を選択してデータをシャッフルおよび分割します。

[crayon-600e6788271fb637664835/]

image.png

ステップ4.データからモデルをトレーニングする

トレーニングデータセットを使用して機械学習モデルをトレーニングします。

ビルド済みXGBoostモデルを使用するには、トレーニングデータのヘッダーと最初の列を再フォーマットし、S3バケットからデータをロードする必要があります。

次のコードを新しいコードセルにコピーし、[Run]を選択してデータを再フォーマットしてロードします。

[crayon-600e6788271fd145103391/]

次に、Amazon SageMaker セッションをセットアップし、XGBoost モデルのインスタンス(推定器)を作成し、モデルのハイパーパラメーターを定義する必要があります。
次のコードを新しいコードセルにコピーし、[ 実行 ] を選択します。

[crayon-600e6788271ff578984975/]

データが読み込まれ、XGBoost 推定器が設定されたら、次のコードを次のコードセルにコピーして[実行]を選択することにより、ml.m4.xlarge インスタンスで勾配最適化を使用してモデルをトレーニングします。

数分後、生成されるトレーニングログの表示を開始する必要があります。

[crayon-600e678827200252834701/]

成功すればこのようにログが出てきます。
image.png

コンソール上でもこのように、トレーニングジョブが立ち上がっています。

2020-05-14_14h40_17.png

ステップ5.モデルをデプロイする

このステップでは、トレーニング済みモデルをエンドポイントにデプロイし、CSVデータを再フォーマットしてロードしてから、モデルを実行して予測を作成します。

サーバーにモデルをデプロイし、アクセス可能なエンドポイントを作成するには、次のコードを次のコードセルにコピーして、[ 実行 ] を選択します。

[crayon-600e678827202265694256/]

銀行商品に登録されたテストデータの顧客がいるかどうかを予測するには、次のコードを次のコードセルにコピーして、[ Run ] を選択します。

[crayon-600e678827205238294762/]

2020-05-14_14h38_44.png

ステップ6.モデルのパフォーマンスを評価する

このステップでは、機械学習モデルのパフォーマンスと精度を評価します。

以下のコードをコピーして貼り付け、[Run]を選択します。

混合行列と呼ばれるテーブルの実際の値と予測値を比較します。

[crayon-600e678827207973327354/]

予測に基づいて、テストデータの90%の顧客に対して、顧客が預金証書を正確に登録すると予測したと、結論付けることができます。
登録済みの精度は65%(278/429)で、90%(10,785 / 11,928)登録しませんでした。

image.png

ステップ7.リソースを終了する

このステップでは、Amazon SageMaker 関連のリソースを終了します。

重要※
アクティブに使用されていないリソースを終了すると、コストが削減されます。
リソースを終了しないと、料金が発生します。

Amazon SageMaker エンドポイントと S3 バケット内のオブジェクトを削除するには、次のコードをコピーして貼り付け、実行します。

[crayon-600e678827209594511608/]

2020-05-29_09h53_49.png

感想

ただデータを用意するだけではなく、訓練したりテストしたり、様々なデータが機械学習には必要であることが分かったと思います。
さらにその精度を評価したり。本当に結果が正しいものかを推測する必要もあります。
今回はコンソール画面ではなく、Jupyter-notebook 上でほとんど完結する内容でした。
あまり使い慣れていない方でも気軽に試せるので、ぜひ実際にやってみてください。

公式リンク

Amazon SageMaker

 

 

SageMakerの導入ならナレコムにおまかせください。

日本のAPNコンサルティングパートナーとしては国内初である、Machine Learning コンピテンシー認定のナレコムが導入から活用方法までサポートします。お気軽にご相談ください。

ソリューションページはこちら

 


AWS Transit Gateway にざっくり触れる【初心者】

はじめに

今回は AWS Transit Gateway というサービスについて、便利なところをピックアップしてご紹介していきます。
2020-06-25_14h21_51.png

Transit Gateway は中央※ハブを介して、 VPC とオンプレミスネットワークを接続するクラウドルーターだと言われています。
ネットワークが簡素化され、VPCの複雑なピアリング接続をしなくてよくなります。

2020-06-25_14h28_52.png
パッと見て分かる通り、ごちゃごちゃVPC同士を繋げなくて良いので、管理がとてもしやすそうですよね。

※ハブとは
HUBとは、LAN上で各端末(コンピューター、ネットワークプリンタなど)同士を接続する機器のことです。
ネットワーク内のデバイスの共通接続ポイントとして機能します。

2020-06-25_14h22_28.png

image.png

ルーティング

  • Amazon Virtual Private Cloud (VPC) と VPN の間の動的および静的レイヤー 3 ルーティングをサポート
  • パケットの送信先 IP アドレスに応じて、ルートでネクストホップが決定
  • ルートでは、Amazon VPC または VPN 接続を指定できる

エッジ接続

  • AWS Transit Gateway とオンプレミスゲートウェイの間に、VPN を使用して VPN 接続を作成
  • 同じプレフィックス(単語なり何なりの頭につける文字列)の複数の VPN 接続を作成できる
  • トラフィックを複数のパスに負荷分散することで、帯域幅を広げることができる

Amazon VPC 機能の相互運用性

AWS Transit Gateway にアタッチされている Amazon VPC からクエリが発行されたときに、パブリック DNS ホスト名をプライベート IP アドレスに解決できます。

Amazon VPC のインスタンスは、この AWS Transit Gateway にアタッチされている他の Amazon VPC の

  • NAT ゲートウェイ
  • Network Load Balancer
  • AWS PrivateLink
  • Amazon Elastic File System

にアクセスできます。

モニタリング

AWS Transit Gateway では統計とログが提供されます。

  • Amazon VPC と VPN 接続間の帯域幅の使用量
  • パケットフロー数
  • パケットドロップ数
  • Amazon VPC フローログを有効にできる
  • ルーティングされた IP トラフィックに関する情報を取得できる

AWSとオンプレミスでのイベントおよびグローバルネットワークの品質をモニターするメトリクスが含まれます。

管理

コマンドラインインターフェイス (CLI)、AWS マネジメントコンソール、AWS CloudFormation を使用して AWS Transit Gateway の作成と管理を行うことができます。

  • Amazon VPC と VPN の間の送受信バイト数
  • パケット数
  • ドロップ数などの Amazon CloudWatch メトリクスを提供

さらに、Amazon VPC フローログを使用して、AWS Transit Gateway のアタッチメントを経由する IP トラフィックについての情報を取得できます。

リージョン間のピア接続

  • リージョン間のピア接続により、AWS グローバルネットワークを使用して AWS リージョン全体のトラフィックを作成できる
  • リージョン間でリソースを共有出来る
  • 地理的な冗長性のためにデータをレプリケートできる
  • シンプルで費用対効果が高い

マルチキャスト

Transit Gateway マルチキャストを使用して、クラウドに簡単にマルチキャストグループを作成し、管理できるようになりました。
オンプレミスでレガシーのハードウェアをデプロイ、管理するよりずっと簡単です。

  • クラウドのマルチキャストソリューションを、スケールアップ
  • スケールダウンして、同時に複数のサブスクライバ―に、一連のコンテンツを届けることができる
  • 誰がマルチキャストトラフィックを作り、誰がそれを消費しているか、細かいコントロールができる

セキュリティ

  • Identity and Access Management (IAM) と統合されている
  • AWS Transit Gateway へのアクセスを安全に管理
  • IAM を使用すると、AWS のユーザーとグループを作成および管理できる
  • アクセス権を使用して AWS Transit Gateway へのアクセスを許可、拒否できる

自動処理プロビジョニング

既存の AWS Transit Gateways に登録すると、ネットワークマネージャーが VPN 接続および関連するオンプレミスリソースを自動的に特定します。

  • Transit Gateway ネットワークマネージャーの、新しい VPN 接続を自動的にプロビジョン
  • ネットワークマネージャーの、オンプレミスネットワークを自動的に定義
  • オンプレミスネットワークを手動でも定義できる
  • クラウドとオンプレミスにある、プライベートネットワークを、マネジメントコンソールで一括管理できる

イベント

  • ネットワーク変更、ルート変更、接続ステータス更新の通知を受けるメトリクス
  • バイトイン/アウト、パケットイン/アウト、ドロップパケットなどの、パフォーマンスおよびトラフィックメトリクスを通して、グローバルネットワークをモニターする

グローバルネットワーク

AWS 内のユーザーの、プライベートグローバルネットワークを表す AWS Transit Gateway network manager のオブジェクトです。

  • AWS Transit Gateway のハブ
  • そのアタッチメント
  • およびオンプレミスのデバイス、サイト、リンク

が含まれます。

グローバルネットワークの監視に役立つ

AWS Transit Gateway network manager のダッシュボードには

  • 入出力バイト数
  • 入出力パケット数
  • ドロップされたパケット数
  • リアルタイムのイベントとメトリクス

これらが表示されます。

接続ステータスは、グローバルネットワークの地理的ビューに埋め込まれています。

AWS Transit Gateway network manager は、AWS CloudWatch を通じた可視化により、一つのダッシュボードから多くのロケーションの、ネットワークアクティビティを確認できます。

まとめ

ちょっと情報多めでしたが、 Transit Gateway があるだけでかなり全体管理が楽になるということは伝わったでしょうか。
どうしても規模が大きくなるにつれて、VPC や接続環境が増えていくので、ぜひ重宝したいサービスですよね!
アクティビティを比較して、オンプレミスのロケーションと AWS クラウド間の不整合や、複数のロケーションに異なる影響を与える問題を特定できるので
問題対処も早くなりそうですよね!

公式サイトリンク

AWS Transit Gateway