はじめに
はじめまして。 NTTデータ ソリューション事業本部 デジタルサクセスソリューション事業部 の nttd-nagano です。
Informatica(インフォマティカ) のクラウドデータマネージメントプラットフォームとして、「Intelligent Data Management Cloud」(※1。以下IDMCと記載)というものがあります。
今回は、そのIDMCのデータ統合サービス「Cloud Data Integration」(※2。以下CDIと記載)の処理が失敗したら、携帯電話にSMSを送るようにしてみました ので、ご報告します。
※1. Intelligent Data Management Cloud
略称はIDMC。旧称はIICS。クラウドデータマネジメントプラットフォーム。以下IDMCと記載。※2. Cloud Data Integration
略称はCDI。データ統合サービス。ETL処理(※3)やELT処理(※4)を担う。以下CDIと記載。※3. ETL処理
データベースなどに蓄積されたデータから必要なものを抽出(Extract)し、目的に応じて変換(Transform)し、データを必要とするシステムに格納(Load)すること。※4. ELT処理
ETL処理(※3)と対比して使われることが多い言葉。データ統合処理の順序を従来型のE→T→Lの順ではなく、E→L→Tの順でおこなう。近年ではDBMSの性能が爆発的に向上したことから、その性能を有効活用するために使われる手法。さて、IDMC CDIにはデータ統合機能(ETL/ELT機能)だけではなく、運用管理機能もあり、たとえば処理が失敗した際にメールを送信するさまざまな仕組みがあります。
通常はこれらの仕組みを使いますが、それでは本記事の特色がでないので、今回は Amazon SNS を使って、携帯電話に対してSMS(いわゆるショートメッセージ)を送るようにしてみます。
前提
本記事は次の状態を前提としています。
- LinuxがインストールされたEC2インスタンスが存在する。
- 当該EC2インスタンスにIAMロールが割り当てられている。
- Linux上に Secure Agent をインストールしており、IDMCの「管理者」の「ランタイム環境」に当該SecureAgentが表示されている。
- Linux上に AWS CLI をインストールしている。
注意点
次の注意点があります。
- Amazon SNSではSMSを送信する度にコストがかかりますが、 デフォルトではその上限値が1ドル/月に制限されています。
1通当たりの料金は 公式ページ をご覧ください。
上限値を引き上げるためには、 AWS Support Centerでクォータの制限緩和ケースを開く必要があります。
IAMでIAMロールにポリシーを追加する。
まずは、EC2インスタンスに割り当て済みのIAMロールに権限を追加します。
- AWSマネジメントコンソールでIAMを開く。
- 前述のトピックに書き込めるIAMポリシーを作る。
- EC2インスタンスに割り当てているIAMロールにそのIAMポリシーを追加する。(今回は簡単のために、
AmazonSNSFullAccess
を追加しました)
Amazon SNSで電話番号を登録する
次に、SMSの送信先の電話番号を登録します。
というのも、Amazon SNSはデフォルトでは、「サンドボックス」モードになっており、このモードの場合は、登録済みの電話番号にしかSMSを送信できないためです。
この「サンドボックス」モードは、 公式の解説ページ によれば、次のような目的で設けられている仕組みです。
SMS サンドボックスは、SMS 送信者としての評判を損なうことなく、Amazon SNS 機能を試すための安全な環境を提供します。アカウントは SMS サンドボックスにありますが、Amazon SNS のすべての機能を使用することができます。ただし、以下の制限があります。
- SMS メッセージは、認証済みの送信先電話番号にのみ送信できます。
- 最大 10 個の認証済みの送信先電話番号を持つことができます。
- 送信先の電話番号を削除できるのは、認証または最後の認証の試行から 24 時間以上経過後に限られます。
アカウントがサンドボックスから移動されると、これらの制限は解除され、SMS メッセージを任意の受信者に送信できます。
- AWSマネジメントコンソールでAmazon SNSを開く。
- 左ペインの「テキストメッセージング (SMS)」をクリックする。
- 「サンドボックスの送信先電話番号」の「電話番号を追加」ボタンをクリックする。
- 「電話番号」欄にSMSを送信する先の電話番号を入力します。 (このとき日本の携帯電話に送る場合は、先頭の「0」を除いたうえで、「+81」を追加して記述する)
- 「検証メッセージの言語」欄で「日本語 (日本)」を選択する。
- 「電話番号を追加」ボタンをクリックします。
- 携帯電話にベリファイ用のSMSが届くため、SMS内に記載された番号を「検証コード」欄に入力する。
- 「電話番号を検証」ボタンをクリックする。
Amazon SNSでトピックを作る
次に、AWS CLIで送信の指定に使うトピックを作ります。
- 左ペインの「トピック」をクリックする。
- 「トピックの作成」ボタンをクリックする。
- 「タイプ」欄で「スタンダード」を選択する。(「FIFO」を選択するとサブスクリプションを作成する際に「SMS」を選択できないため、注意。)
- 「名前」欄に任意の名称を入力する。(以降では、
TopicSmsToAdmin
と記載します) - 「トピックの作成」ボタンをクリックする。
Amazon SNSでサブスクリプションを作る
次に、サブスクリプションを作ります。
- 左ペインの「サブスクリプション」をクリックする。
- 「サブスクリプションの作成」ボタンをクリックする。
- 「トピックARN」欄で前述のトピックを選択する。
- 「プロトコル」欄で「SMS」を選択する。
- 「エンドポイント」欄で前述の電話番号を選択する。
- 「サブスクリプションの作成」ボタンをクリックする。
Linux上で以降の作業の準備をする
次に、IDMCの操作前に必要な作業を実施します。
- ソース側のフラットファイル(
input.csv
)を作成する。 - ターゲット側のフラットファイル(
output.csv
)を作成する。 - 今回は意図的に実行時に処理が失敗するようにするため、ターゲット側のフラットファイル(
output.csv
)に書き込めないようにパーミッションを変更する。 - 下記の内容のシェルスクリプト(
sms.sh
)を作成する。(TOPIC_ARN
には、前述のトピックのARNを記入する)bash#!/bin/bash TOPIC_ARN="arn:aws:sns:ap-northeast-1:999999999999:TopicSmsToAdmin" MAPPING_TASK_NAME=$1 MESSAGE="Mapping Task ${MAPPING_TASK_NAME} failed." SENDER_ID="IDMC-CDI" /usr/local/bin/aws sns publish \ --topic-arn "${TOPIC_ARN}" \ --message "${MESSAGE}" \ --message-attributes '{"AWS.SNS.SMS.SenderID":{"DataType":"String","StringValue":"'${SENDER_ID}'"}}' exit $?
- シェルスクリプトを実行できるようにパーミッションを変更する。
IDMCでマッピングを作る
ここから、IDMCでの作業になります。まず、マッピングを作っていきます。
- IDMCにログインする。
- アプリケーションピッカーで「データ統合」をクリックする。
- 左ペインの「新規」をクリックする。
- 左ペインの「マッピング」をクリックする。
- 「作成」ボタンをクリックする。
- 「名前」欄に任意の名称を入力する。(以降では、
m_sms_if_mapping_failed
と記載します) - ソーストランスフォーメーションをクリックする。
- 「ソース」をクリックする。
- 「接続」欄であらかじめ作っておいたフラットファイル接続を選択します。
- 「オブジェクト」欄右横の「選択」ボタンをクリックする。
- ソース側のフラットファイル(
input.csv
)を選択する。 - 「OK」ボタンをクリックする。
- 「ターゲット」をクリックする。
- 「接続」欄であらかじめ作っておいたフラットファイル接続を選択します。
- 「オブジェクト」欄右横の「選択」ボタンをクリックする。
- ターゲット側のフラットファイル(
output.csv
)を選択する。 - 「OK」ボタンをクリックする。
- 「フィールドマッピング」をクリックする。
- 「ターゲットフィールド」側の「自動マップ」をクリックし、「正確なフィールド名」をクリックする。
- 「保存」ボタンをクリックする。
IDMCでマッピングタスクを作る
次に、マッピングタスクを作っていきます。
- 左ペインの「新規」をクリックする。
- 左ペインの「タスク」をクリックする。
- 「マッピングタスク」をクリックする。
- 「作成」ボタンをクリックする。
- 「タスク名」欄に任意の名称を入力する。(以降では、
mt_sms_if_mapping_failed
と記載します) - 「ランタイム環境」欄で有効なランタイム環境を選択する。
- 「マッピング」欄で前述のマッピング(
m_sms_if_mapping_failed
)を選択する。 - 「完了」ボタンをクリックする。
IDMCでタスクフローを作る
最後に、タスクフローを作っていきます。
- 左ペインの「新規」をクリックする。
- 左ペインの「タスクフロー」をクリックする。
- 「タスクフロー」をクリックする。
- 「名前」欄に任意の名称を入力する。(以降では、
tf_sms_if_mapping_failed
と記載します) - 「開始」と「終了」の間に、「データタスク」を挿入する。
- 下ペインで「データタスク」をクリックする。
- 「データタスク」欄で前述のマッピングタスク(
mt_sms_if_mapping_failed
)を選択する。 - 下ペインで「エラー処理」をクリックする。
- 「エラー発生時」欄で「カスタムエラー処理」を選択する。
- 「データタスク」から下に伸びる矢印の箇所に「コマンドタスク」を挿入する。
- 「Script」パートの「Script1」のツリーを開く。
- 下ペインで「入力フィールド」をクリックする。
- 「スクリプトファイル名」の「値」欄に前述のシェルスクリプトのフルパス(
/home/infa/sms.sh
)を入力する。 - 「入力引数」の「値」欄の右側の「(x)」をクリックする。
- 「データタスク1」>「フォルト」>「詳細」>「エラー出力の詳細」>「オブジェクト名」をクリックする。
- 「入力引数」の「値」欄に入力された値の先頭と末尾に「"」を入力する。
- 「保存」ボタンをクリックする。
IDMCでタスクフローを実行する~実行結果の確認
さて、必要なものはすべて揃ったので、実際に実行してみます。
- 前述のタスクフロー(
tf_sms_if_mapping_failed
)を開く。 - 「実行」ボタンをクリックする。
- 左ペインで「マイジョブ」をクリックする。
- 最新のジョブインスタンスをクリックする。
- 「コマンドタスク1」が実行される(タスクの右上に緑色のチェックアイコンが表示される)まで、画面右上の更新アイコンを定期的にクリックする。
- 携帯電話のSMSアプリを起動し、SMSが届いていることを確認する。
ちゃんと届きましたね!
おわりに
以上、「Informaticaのデータ統合サービスCloud Data Integrationの処理が失敗したら、携帯電話にSMS(ショートメッセージ)を送るようにしてみた」でした。
いかがでしたでしょうか。IDMC CDIがデータ統合機能(ETL/ELT機能)だけではなく、例外処理や(今回は使いませんでしたが)条件分岐などを伴うような運用管理機能も具備していることの一端をご紹介できたのではないでしょうか。
CDIは30日間の無料体験ができる ので、この機会に試してみてはいかがでしょうか。
仲間募集
NTTデータ ソリューション事業本部 では、以下の職種を募集しています。
1. クラウド技術を活用したデータ分析プラットフォームの開発・構築(ITアーキテクト/クラウドエンジニア)
クラウド/プラットフォーム技術の知見に基づき、DWH、BI、ETL領域におけるソリューション開発を推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/cloud_engineer
2. データサイエンス領域(データサイエンティスト/データアナリスト)
データ活用/情報処理/AI/BI/統計学などの情報科学を活用し、よりデータサイエンスの観点から、データ分析プロジェクトのリーダーとしてお客様のDX/デジタルサクセスを推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/datascientist
3.お客様のAI活用の成功を推進するAIサクセスマネージャー
DataRobotをはじめとしたAIソリューションやサービスを使って、
お客様のAIプロジェクトを成功させ、ビジネス価値を創出するための活動を実施し、
お客様内でのAI活用を拡大、NTTデータが提供するAIソリューションの利用継続を推進していただく人材を募集しています。
https://nttdata-career.jposting.net/u/job.phtml?job_code=804
4.DX/デジタルサクセスを推進するデータサイエンティスト《管理職/管理職候補》
データ分析プロジェクトのリーダとして、正確な課題の把握、適切な評価指標の設定、分析計画策定や適切な分析手法や技術の評価・選定といったデータ活用の具現化、高度化を行い分析結果の見える化・お客様の納得感醸成を行うことで、ビジネス成果・価値を出すアクションへとつなげることができるデータサイエンティスト人材を募集しています。https://nttdata-career.jposting.net/u/job.phtml?job_code=898
ソリューション紹介
Trusted Data Foundationについて
~データ資産を分析活用するための環境をオールインワンで提供するソリューション~
https://www.nttdata.com/jp/ja/lineup/tdf/
最新のクラウド技術を採用して弊社が独自に設計したリファレンスアーキテクチャ(Datalake+DWH+AI/BI)を顧客要件に合わせてカスタマイズして提供します。
可視化、機械学習、DeepLearningなどデータ資産を分析活用するための環境がオールインワンで用意されており、これまでとは別次元の量と質のデータを用いてアジリティ高くDX推進を実現できます。
TDFⓇ-AM(Trusted Data Foundation - Analytics Managed Service)について
~データ活用基盤の段階的な拡張支援(Quick Start) と保守運用のマネジメント(Analytics Managed)をご提供することでお客様のDXを成功に導く、データ活用プラットフォームサービス~
https://www.nttdata.com/jp/ja/lineup/tdf_am/
TDFⓇ-AMは、データ活用をQuickに始めることができ、データ活用の成熟度に応じて段階的に環境を拡張します。プラットフォームの保守運用はNTTデータが一括で実施し、お客様は成果創出に専念することが可能です。また、日々最新のテクノロジーをキャッチアップし、常に活用しやすい環境を提供します。なお、ご要望に応じて上流のコンサルティングフェーズからAI/BIなどのデータ活用支援に至るまで、End to Endで課題解決に向けて伴走することも可能です。
NTTデータとInformaticaについて
データ連携や処理方式を専門領域として10年以上取り組んできたプロ集団であるNTTデータは、データマネジメント領域でグローバルでの高い評価を得ているInformatica社とパートナーシップを結び、サービス強化を推進しています。
https://www.nttdata.com/jp/ja/lineup/informatica/
NTTデータとTableauについて
ビジュアル分析プラットフォームのTableauと2014年にパートナー契約を締結し、自社の経営ダッシュボード基盤への採用や独自のコンピテンシーセンターの設置などの取り組みを進めてきました。さらに2019年度にはSalesforceとワンストップでのサービスを提供開始するなど、積極的にビジネスを展開しています。
これまでPartner of the Year, Japanを4年連続で受賞しており、2021年にはアジア太平洋地域で最もビジネスに貢献したパートナーとして表彰されました。
また、2020年度からは、Tableauを活用したデータ活用促進のコンサルティングや導入サービスの他、AI活用やデータマネジメント整備など、お客さまの企業全体のデータ活用民主化を成功させるためのノウハウ・方法論を体系化した「デジタルサクセス」プログラムを提供開始しています。
https://www.nttdata.com/jp/ja/lineup/tableau/
NTTデータとAlteryxについて
Alteryx導入の豊富な実績を持つNTTデータは、最高位にあたるAlteryx Premiumパートナーとしてお客さまをご支援します。
導入時のプロフェッショナル支援など独自メニューを整備し、特定の業種によらない多くのお客さまに、Alteryxを活用したサービスの強化・拡充を提供します。
NTTデータとDataRobotについて
NTTデータはDataRobot社と戦略的資本業務提携を行い、経験豊富なデータサイエンティストがAI・データ活用を起点にお客様のビジネスにおける価値創出をご支援します。
NTTデータとDatabricksについて
NTTデータではこれまでも、独自ノウハウに基づき、ビッグデータ・AIなど領域に係る市場競争力のあるさまざまなソリューションパートナーとともにエコシステムを形成し、お客さまのビジネス変革を導いてきました。
Databricksは、これら先端テクノロジーとのエコシステムの形成に強みがあり、NTTデータはこれらを組み合わせることでお客さまに最適なインテグレーションをご提供いたします。