製品をチェック

製品の情報と30日間無償トライアル

Redshift 連携ソリューション 相談したい

Azure App サービスでRedshift IFTTT フローをトリガー

この記事では、Logic Apps の標準ウィザードを使用してIFTTT (if-this-then-that) ワークフローを自動化する方法を説明します。

古川えりか
コンテンツスペシャリスト

最終更新日:2022-12-02
redshift ロゴ

CData

apiserver ロゴ画像
Microsoft Azure Logic Apps ロゴ

こんにちは!ドライバー周りのヘルプドキュメントを担当している古川です。

OData やSwagger などの標準ベースのインターフェースを介してCData API Server をADO.NET Provider for Redshift(もしくは250+ の他のADO.NET Providers)と組み合わせることで、Redshift を使用してLogic Apps と Power Automate のネイティブエクスペリエンスを提供します。OData は、データへのリアルタイム接続を可能にします。Swagger を使用すると、Logic Apps とPower Automateのウィザードのスキャフォールディング(コード生成) および、Power Apps のスキャフォールディングが可能になります。この記事では、Logic App のIFTTT (if-this-then-that) ワークフローにRedshift を追加する方法を説明します。

API サーバーをセットアップ

以下のステップに従って、安全でSwaggerに対応するRedshift API の作成を開始します。

デプロイ

API サーバーは独自のサーバーで実行されます。Windows では、スタンドアロンサーバーまたはIIS を使用して展開できます。Java サーブレットコンテナで、API Server WAR ファイルをドロップします。詳細とハウツーについては、ヘルプドキュメントを参照してください。

API サーバーは、Microsoft AzureAmazon EC2Heroku にも簡単にデプロイできます。

Redshift に接続

API サーバーとADO.NET Provider for Redshift を展開した後、[Settings]->[Connections]をクリックし、API サーバー管理コンソールで新しい接続を追加して認証値とその他の接続プロパティを指定します。 次に、[Settings]->[Resources]をクリックして、API サーバーへのアクセスを許可する エンティティを選択できます。

Redshift への接続には次を設定します:

  • Server: 接続するデータベースをホストしているクラスタのホスト名およびIP アドレス。
  • Port: クラスタのポート。
  • Database: データベース名、ブランクの場合ユーザーのデフォルトデータベースになります。
  • User: ユーザー名。
  • Password: ユーザーのパスワード。

Server およびPort の値はAWS の管理コンソールで取得可能です:

  1. Amazon Redshift console (http://console.aws.amazon.com/redshift) を開く。
  2. Clusters ページで、クラスタ名をクリック。
  3. クラスタのConfiguration タブで、表示された接続文字列からクラスタのURL をコピーします。

    また、CORS を有効にし、[Settings]->[Server]ページで次のセクションを定義する必要があります。[*]なしですべてのドメインを許可するオプションを選択することもできます。

    1. Access-Control-Allow-Origin:値を[*]に設定します。Logic Apps Designer でAPI サーバーを使用するには、Access-Control-Allow-Origin ヘッダー値[*]が必要です。
    2. Access-Control-Allow-Methods:値を[GET,PUT,POST,OPTIONS]に設定します。
    3. Access-Control-Allow-Headers:[x-ms-client-request-id, authorization, content-type]に設定します。

    API サーバーユーザーを承認

    作成するOData サービスを決定したら、[Settings]->[Users]をクリックしてユーザーを承認します。API サーバーは、認証トークンベースの認証を使用して主要な認証スキームをサポートします。SSL を使用して、接続を認証及び暗号化することができます。アクセスはIP アドレスによって制限することもできます。デフォルトでは、ローカルマシンのみに制限されています。

    簡単にするために、API ユーザーの認証トークンをURL で渡すことができます。データディレクトリにあるsettings.cfg ファイルの[Application]セクションに設定を追加する必要があります。Windows でこれは、アプリケーションルートのapp_data サブフォルダにあたります。Java エディションでは、データディレクトリの場所はオペレーティングシステムによって異なります。

    1. Windows:C:\ProgramData\CData
    2. Unix or Mac OS X: ~/cdata
    [Application] AllowAuthtokenInURL = true

    Logic App でRedshift にアクセス

    Logic App でAPI サーバーを使用し、Redshift の周りにプロセスフローを作成できます。HTTP + Swagger アクションは、Redshift に対して実行する操作を定義するためのウィザードを提供します。以下のステップでは、Logic App でRedshift を取得する方法を説明しています。

    テーブルにレコードの作成日を含むカラムがある場合は、以下のステップに従って新しいレコードのカラム値をチェックする関数を作成できます。それ以外の場合は、[Create a Logic App]セクションにスキップし、フィルタに一致するエンティティにメールを送信します。

    新しいRedshift エンティティを確認

    特定の新しいRedshift エンティティを見つけるために、インターバルの開始日時の値を取得する関数を作成できます。

    1. [Azure Portal]で、[New]->[Function App]->[Create]と進みます。
    2. 名前を入力し、サブスクリプション、リソースグループ、App Service プラン、そしてストレージアカウントを選択します。
    3. Function App を選択し、Webhook + API シナリオを選択します。
    4. 言語を選択します。この記事では、JavaScript を使用します。
    5. 以下のコードを追加し、JSON オブジェクトで前の時間を返します。
      module.exports = function (context, data) { 
        var d = new Date();
        d.setHours(d.getHours()-1); 
        // Response of the function to be used later.
        context.res = { 
          body: { 
            start: d 
          } 
        }; 
        context.done(); 
      };
      

    トリガーにRedshift を追加

    以下のステップに従って、フィルタに一致する結果をRedshift で検索するトリガーを作成します。上記の関数を作成した場合は、返されたインターバルの開始後に作成されたオブジェクトを検索できます。

    1. Azure Portal で[New]をクリックし、[Web + Mobile]セクションで[Logic App]を選択してリソースグループとApp Service プランを選択します。
    2. これで、Logic App Designer で使用可能なウィザードが使用できます。このウィザードには、Logic App の設定ブレードからアクセスできます。Blank Logic App templateを選択します。
    3. Redshift オブジェクトをポーリングするRecurrence アクションを追加します。この記事では、一時間ごとにポーリングします。タイムゾーンを選択します。デフォルトはUTC です。
    4. 関数アクションを追加します。[Add Action]ダイアログのメニューを展開し、リジョンにAzure 関数を表示するオプションを選択します。先に作成したFunction App を選択し、インターバル開始を返す関数を選択します。
    5. からの中括弧のペア({})を入力し、からのペイロードオブジェクトを関数に渡します。
    6. HTTP + Swagger アクションを追加し、API サーバーのSwagger URL を入力します。 http://MySite:MyPort/api.rsc/@MyAuthtoken/$oas
    7. [Return Orders]操作を選択します。
    8. 各プロパティの説明を使用して、取得する列やフィルターなどの追加パラメータを指定します。以下はフィルタの一例です。

      ShipCountry eq 'USA'

      API サーバーは、Swagger ドキュメントにて説明とその他のドキュメントを返します。OData API とサポートされているOData の使用方法についての詳細は、API サーバーのヘルプドキュメントを参照してください。

    9. getInterval 関数から返された日時値を使用するには、Orders テーブルの日時列で[ge]演算子を使用し、ダイアログでBody パラメータを選択します。日時値を囲むには、クォーテーションを使用する必要があることに注意して下さい。

      An OData filter on the results of an Azure Function App, getToday.(Salesforce is shown.)
    10. [Code View]に切り替え、$filter 式を変更してインターバルの開始を含むプロパティを抽出します。'@{body('MyFunc')['MyProp']' 構文を使用します。

      "getAllAccount": {
        "inputs": {
          "method": "get",
            "queries": {
              "$filter":"CreatedDate ge '@{body('getInterval')['start']}'"
            },
            "uri": "https://MySite:MyPort/api.rsc/@MyAuthtoken/Orders"
        }
      

    これで、ワークフローのデータソースおよび宛先としてRedshift にアクセスできます。

    新しレコードをメールで送信

    以下のステップに従って、新しいOrders エンティティを含むレポートをメールで送信します。

    1. [Logic Apps Designer]で[SMTP - Send Email]アクションを追加します。
    2. SMTP サーバーに必要な情報を構成します。
    3. From、To、Subject、Body を構成します。返されたRedshift 列からパラメータを追加できます。

    [Save]をクリックし、[Run]をクリックして過去一時間に作成されたRedshift レコードに関する電子メール通知を送信します。

    Dynamic columns added to template the body of an email.(Salesforce is shown.)

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。