Building Your Own REST API-based AWS Connector

アマゾン ウェブ サービス (AWS) は、世界で最もよく知られているクラウド コンピューティング プラットフォームの 1 つであり、あらゆる規模の企業に膨大なツールとサービスを提供しています。小規模な新興企業から大企業まで、多くの企業がインフラストラクチャ、アプリケーション、データの処理を AWS に依存しています。

ただし、AWS と他のシステムの統合は、専門的な知識と技術的熟練度が必要となる困難なプロセスになる可能性があります。そこでMendixが登場します。

開発者の皆様は、Mendix の効率的なローコード開発プラットフォームを使用して、既存コネクタを簡単に利用したり、AWS サービスを他のアプリケーションやシステムと統合する新しいコネクタを構築したりできます。

「AWS は、Mendix プラットフォームの変革力を認識しており、私たちも AWS サービスの変革力を認識しています」と Mendix CEO、Tim Srock 氏は述べています。Mendix と AWS の間の 7 年間にわたる戦略的関係が成功したため、両社は市場参入関係を拡大することを決定しました。

AWS とのパートナーシップの詳細については、こちらのプレスリリースをご覧ください。 

AWS を使用すると、Mendix ユーザーは、AWS が提供する自動化された手順やサービスを自分で開発することなく活用でき、時間と労力を節約できます。Mendix 用の AWS コネクタを使用すると、AWS 内で利用可能な膨大な数のサービスを、ローコードで効率的な方法で簡単に利用できます。Mendix で AWS コネクタを作成すると、AWS リソースにアクセスする必要があるカスタム アプリを開発している場合でも、Lambda や S3 などの AWS ツールを使用してビジネス プロセスを自動化しようとしている場合でも、運用を合理化し、組織全体の生産性を向上させることができます。AWS サービスをアプリケーションに統合できるように、Mendix で REST API ベースの AWS コネクタを作成する段階を順を追って説明します。

入門

使用したい AWS サービスが Mendix Marketplace に既存のコネクタがないことを発見したとき、通常、最初の反応は次のようなものです。「わかりました。つまり、このソリューションは現在 Mendix では構築できないということですね」または「これについては回避策を見つけなければなりません。」

私は現在、Mendix の AWS チームの一員ですが、始める前はこれが私の最初の反応でもありました。AWS コネクタの構築がチームの目標であると分かっていた後でも、まだ圧倒されていました。「AWS のサービスが多すぎて、それぞれのサービスにアクションが多すぎる。どうすれば需要に応えられるでしょうか?」

念のため言っておきますが、これは私がチームに加わったばかりの頃、まだコネクタを構築することは世界を救うことに似ている、つまり非常に難しいと考えていた頃の私の考えでした。しかし、それはまったく本当ではありませんでした。Mendix 開発者全員がハウツー ガイドをほんのちょっぴり確認すれば、AWS コネクタの構築は可能です。

新しい AWS コネクタをできるだけ早く構築する必要があると判断した場合は、どのようにしてその作業を開始できるかを検索したことがあるかもしれません。Mendix で AWS コネクタを構築するために利用できる 2 つの統合方法があることをご存知かもしれません。それは、Representational State Transfer (REST) アプリケーション プログラミング インターフェイス (API) またはソフトウェア開発キット (SDK) です。プログラミングのバックグラウンドがない場合は、SDK という言葉を読んだだけでゾッとするかもしれません。実際、このプロセスは人々(私も含めて)が頭の中で想像しているほど複雑ではなく、完全に実行可能です。しかし、私たちは Mendix 開発者なので、使い慣れたものを使用して、REST API ベースの AWS コネクタを構築してみてはいかがでしょうか?  準備はできていますか?

これは皆様による、ステップ・バイ・ステップ形式のガイドです。

REST API ベースの AWS コネクタの構築

まず最初に知っておく必要があるのは、すべての AWS のサービスとアクションに API があるわけではないということです。つまり、REST API ベースの AWS コネクタを開始する前に、必要なサービスとアクションに利用可能な API があるかどうかを確認し、必要な HTTP ヘッダー (x-amz-target 値) を見つける必要があります。必要なサービスやアクション用の API がない場合、残念ながら、続行する唯一の方法は、SDK を使用してコネクタの構築を開始することです。

一部のサービスとアクションについては、API はそれぞれの AWS サービスの開発者ガイドに記載されています (例: Amazon Translate での署名バージョン 4 の使用 – Amazon Translate )。しかし、他の人にとっては、それはより困難な検索です。私が便利だと感じた Web サイトはAnyAPI (any-api.com)です。[Search APIs]エリアに移動し、作業したい AWS サービスの名前を検索してクリックすると、API を持つサービスのアクションのリストと、その x-amz-target 値が存在する場合はその値を見つけることができます。 。

AnyAPIの検索結果

これから実装する内容は、「AWS コネクタの構築」記事とその関連リンクから引用されています。いくつかのトピックの詳細な説明については、記事も参照してください。
このシナリオでは、Amazon Translate Connector がマーケットプレイスに存在しないことを前提としていますが、これは顧客プロジェクトに必要なコネクタです。いくつかのアクション (API を持つ) を使用する AWS コネクタを構築し、TranslateTextアクションを実装することにしました。

プロジェクトの開始

コネクタの作業を開始するには、まず適切な環境を準備する必要があります。

Mendix Studio Pro では、 AmazonTranslateConnectorという新しいモジュールを作成します。

次に、アマゾン ウェブ サービスでの認証に必要なAWS 認証コネクタ バージョン 2.1 以降をインストールして設定します。

AmazonTranslateConnectorモジュールで、以下に示すようなフォルダー構造を適用します。

AmazonTranslateConnector モジュールのフォルダー構造
ドメインモデルに必要なエンティティを追加して構築を開始する

作業環境の準備ができたら、実装したいアクション、特に REST API がリクエストとして何を必要とし、そのレスポンスとして何を受け取るかについてさらに学習します。

実装したいアクションの詳細については、AWS ドキュメント (amazon.com)を参照してください。

AWSドキュメント検索

そこでは、現在取り組んでいる AWS サービスのドキュメントが見つかります。この場合、これはAmazon Translate Documentationになります。

AWS からの Amazon Translate ドキュメント

ここでは、AWS コネクタの開発中に役立つ 2 つのガイドを紹介します。REST API ベースのコネクタを構築しているため、「Amazon Translate API Reference – Amazon Translate API Reference」を選択し、次に「TranslateText – Amazon Translate API Reference」を開きます。

TranslateText Amazon Translate API リファレンス

このページでは、リクエストとレスポンスの構文、パラメータの詳細、直面する可能性のある一般的なエラーなど、実装したいアクションに関する多くの貴重な情報を見つけることができます。

これから実装するアクションについて詳しく読んだ後、TranslateTextアクションの応答構文を使用して応答エンティティをモデル化します。

JSON Snippetsフォルダーに  、AWS サービスにちなんで名付けられた JSON 構造ドキュメント (この場合は JSON_TranslateText )を作成します。

JSON構造ドキュメントの作成

ドキュメントを開き、「TranslateText – Amazon Translate API Reference 」にある応答構文を貼り付けます。

次に、「Format」をクリックします。この場合、適用された設定と適用された用語は気にしないため、これらの部分を削除し、SourceLanguageCodeTargetLanguageCode、およびTranslatedTextだけを残してから、 [Refresh]および[OK]をクリックします。

JSON構造ドキュメントのフォーマット

[Import Mappings ]フォルダーでインポート マッピング ドキュメントを作成し、IMM_TranslateTextという名前を付けて[OK]をクリックします。

インポートマッピングドキュメントの作成

IMM_ListLanguagesドキュメントを開きます。「Schema source」セクションで 、 「JSON Snippets」 を選択し 、次に 「JSON_ListLanguages」 ドキュメントを選択します。

JSON_ListLanguages ドキュメントの選択

次に、 [Expand all]をクリックし 、  [Check all]を選択して、[OK] を選択します。

IMM_TranslateText でのインポート マッピングのスキーマの選択

Mendix Studio Pro は、Mendix アプリケーションへの AWS サービスのマッピングを視覚的に表示します。場合によっては、目的を持たないエンティティが生成される可能性があります。インポート マッピング ドキュメントを再度開き、不要なドキュメントのチェックを外して、それらを削除します。この場合、不要なエンティティは作成されていないので、次に進みます。

これが完了したら、 「Map automatically」をクリックします。Mendix Studio Pro は、AWS サービスの応答がドメイン モデルにマッピングされるエンティティを作成します。この場合、インポート マッピングは次のようになります。

自動マッピングの結果

ここで、ドメイン モデルに移動し、作成されたエンティティの名前をTranslateTextアクションに対応するように変更します。

ドメインモデルでのエンティティ名の変更

ドメイン モデルの準備ができたら、マイクロフロー アクションの作成に進むことができます。ただし、作業を開始する前に、後で AWS 認証に必要となる定数をすぐに追加します。

[Connection Details]の下の[Constants]フォルダーに、以下の図に示すように定数を追加します。

必要な定数を追加する

これで、マイクロフローの作業を開始できます。

Operationsフォルダーに、 Mendix の命名規則に従って、POST_TranslateTextというマイクロフローを作成します。

TranslateText – Amazon Translate API Referenceによると、このアクションのリクエストには、SourceLanguageCodeTargetLanguageCode、そして翻訳したいテキストであるTextという 3 つの必須パラメータがあります。そこで、これらのパラメーターの 3 つの入力パラメーターをマイクロフローに追加し、アクション リクエストを準備するためにRequestBodyという文字列変数を作成します。

入力パラメータをマイクロフローに追加する

AWS 認証モジュールからGetSessionCredentialsまたはGetStaticCredentials Java アクションを追加して、認証情報を取得します。この実装では静的資格情報を使用するため、GetStaticCredentials Java アクションをマイクロフローに追加し、前に作成した定数AccessKeyIDSecretAccesKeyを入力パラメーターとして追加します。このアクションは Credentials オブジェクトを返します。

マイクロフローへの資格情報の追加

これで、リクエストと AWS 認証情報の両方が得られました。ただし、REST サービスを呼び出す前に、署名バージョン 4 を使用して認証情報をリクエスト呼び出しに追加する必要があります。AWS 認証モジュールからGet SigV4 Headers  Java アクション を使用して SigV4Header オブジェクトを取得するようにマイクロフローを設定する必要があります 。このために、まずNewSigV4Builderという名前の新しい SigV4Builder オブジェクトを作成し、そのメンバーを設定します。

SigV4Header オブジェクトを取得するためのマイクロフローの構成

次に、 Get SigV4 Headers Java アクションの入力パラメータとして必要な 2 つの重要なヘッダーがあるため、HeaderListと呼ばれるSigV4Parameterオブジェクトのリストを作成します 。

最初のヘッダーでは、次のパラメーターを使用してSigV4ParameterオブジェクトContentTypeHeaderを作成します。

  • キーコンテンツタイプ
  • – application/x-amz-json-1.1
SigV4Parameter オブジェクトのリストを作成する

2 番目のヘッダーでは、SigV4ParameterオブジェクトTranslateTextActionHeaderを作成して、コネクタの作業を開始する前に見つけたTranslateTextアクションのx-amz-targetを追加します。

  • Key  Content-type
  • Value  application/x-amz-json-1.1
2 回目の SigV4Parameter オブジェクトの作成

これらのヘッダーを両方とも、作成したHeaderListに追加します。

これで、Get SigV4 Headers  Java アクションをマイクロフローに追加し、資格情報、NewSigV4Builderオブジェクト、およびSigV4ParameterオブジェクトのリストHeaderList を入力パラメーターとして使用できるようになりました。SigV4Headersオブジェクトを返します。

Get SigV4Headers Java アクションの追加

必要な情報がすべて揃ったので、REST サービスを呼び出すことができます。REST 呼び出しアクションをマイクロフローに追加します。Locationは返されたSigV4HeadersのEndpointURL属性、Timeoutは前の手順で作成したタイムアウト定数、RequestはマイクロフローのRequestBody文字列変数です。ContentTypeHeaderTranslateTextActionHeader 、および返されたSigV4HeadersオブジェクトのヘッダーをCustom HTTP HeadersとしてREST 呼び出しにも追加します。

REST呼び出しアクションをマイクロフローに追加する

IMM_TranslateTextドキュメントを使用してResponseをマップします。IMM_TranslateText ドキュメントは、TranslateTextResponseオブジェクトを返します。

完成したマイクロフローは次のようになります。

マイクロフロー完成イメージ

これで完了です!テキストを別の言語に翻訳できる新しい Amazon Translate Connector が作成されました。