Amazon Web Services ブログ
Amazon AppFlow と Amazon AI サービスを使用して Veeva Vault PromoMats に保存されているアセットを分析してタグ付けする
この記事は、Mayank Thakkar と Anamaria Todor によって書かれた “Analyze and tag assets stored in Veeva Vault PromoMats using Amazon AppFlow and Amazon AI Services” を翻訳したものです。
以前投稿したブログでは、Amazon AI サービスと Veeva の Vault Platform の API を使用して Veeva Vault PromoMats に保存されているアセットの分析とタグ付けについて説明しました。この投稿では、Veeva Vault などのサービスとしてのソフトウェア (SaaS) アプリケーションから AWS にデータを安全に転送できるフルマネージド統合サービスである Amazon AppFlow の使用方法について説明します。 Amazon AppFlow Veeva connector を使用すると、AWS 環境を迅速、確実、かつコスト効率の高い方法でVeeva のエコシステムに接続して、Veeva Vault に保存されている豊富なコンテンツを大規模に分析できます。
Amazon AppFlow Veeva connector は Veeva ドキュメントの自動転送をサポートする Amazon AppFlow ローンチ時から提供されているコネクターです。最新バージョン (Veeva 用語では Steady State version) とすべてのバージョンのドキュメントのどちらかを選択できます。さらに、ドキュメントのメタデータをインポートできます。
数回クリックするだけで、管理された接続を簡単にセットアップし、インポートする Veeva Vault ドキュメントとメタデータを選択できます。送信元フィールドを送信先フィールドにマッピングすることで、インポート処理を設定することが可能です。ドキュメントの種類とサブタイプ、分類、製品、国、拠点などに基づいてフィルターを追加することもできます。最後に、妥当性の確認設定を追加し、フローの実行トリガーとしてオンデマンドおよびスケジュールされたトリガーを管理できます。
Amazon AppFlow Veeva connector は Veeva Vault PromoMats から QualityDocs、eTMF、Regulatory Information Management (RIM) などの他の Veeva Vault ソリューションに至るまで、さまざまなユースケースに使用できます。以下は、コネクタを使用できるいくつかの使用例です。
- データの同期 – コネクターはデータ送信元である Veeva Vault からのデータとデータ送信先であるサービスとの間で、一貫性と同期を長期間にわたって有効とするプロセスとして使用できます。たとえば Veeva PromoMats のマーケティングアセットを Salesforce と共有できます。また、コネクターを使用して標準作業手順書 (SOP) や製造現場にあるタブレットから検索可能なキャッシュされた Web サイトの仕様などを Veeva QualityDocs に共有することもできます。
- 異常検出 – 異常検出のために Veeva PromoMats ドキュメントを Amazon Lookout for Metrics と共有できます。アートワーク、商用ラベル、テンプレート、または患者向けリーフレットを印刷する際、Loftware, Inc. などが提供する企業向けラベリング・アートワーク管理ソリューションにインポートする前に、Vault RIM のコネクターを使用することもできます。
- データレイクへのインポート – コネクターはデータレイクの作成とデータインポートをサポートするために、構造化データまたは非構造化データをデータレイクに複製するための効果的なツールです。たとえばコネクターを使用して Vault RIM に保存されているプロトコルから標準化された研究情報を抽出し、医療分析インサイトチームに公開できます。
- 翻訳 – パッケージングや臨床試験の部門、または規制当局への提出を行う際、アートワークや臨床文書、マーケティング資料、または研究プロトコルを母国語に翻訳することにコネクターが役立ちます。
この投稿では、Amazon AI サービスを Amazon AppFlow と組み合わせて使用して Veeva Vault PromoMats に保存されているコンテンツを分析し、タグ情報を自動的に抽出して、最終的にこの情報を Veeva Vault にフィードバックする方法にフォーカスしています。投稿の内容としては、アーキテクチャ全体、ソリューションとダッシュボードをデプロイする手順、およびアセットメタデータのタグ付けのユースケースについて説明しています。このユースケースを想定したサンプルコードの詳細については、GitHub リポジトリを参照してください。
ソリューションの概要
次の図は、以前投稿されたブログのソリューションを更新したアーキテクチャを示しています。
以前のソリューションで Veeva Vault からアセットをインポートするには、Veeva Vault API を使用して独自のカスタムコードロジックを記述し、変更をポーリングしてデータを Amazon Simple Storage Service (Amazon S3) にインポートする必要がありました。これは手動で時間のかかるプロセスである可能性があり、API の制限、失敗、再試行、および膨大な量のアセットに対応するためのスケーラビリティを考慮する必要がありました。更新されたソリューションは Amazon AppFlow を使用して、Veeva からAmazon S3 へのデータインポートパイプラインを維持する複雑さを取り除きます。
冒頭でお伝えしたように、Amazon AppFlow はポイントアンドクリックな操作で様々な SaaS アプリケーションと AWS サービス間でデータを簡単かつ安全に転送する、使いやすいノーコードなセルフサービスツールです。 AppFlow を使用するとサポートされているソースからデータ (オブジェクトとドキュメント) をプルし、そのデータをサポートされているさまざまな送信先に書き込むことができます。送信元や送信先は SaaS アプリケーションまたは Amazon S3、Amazon Redshift、Lookout for Metrics などの AWS サービスから選択可能です。ノーコードなインターフェースに加えて、Amazon AppFlow は API、AWS CLI、および AWS CloudFormation インターフェースを介した設定をサポートします。
Amazon AppFlow のフローは、送信元の詳細、送信先の詳細、フローのトリガー条件(オンデマンド、オンイベント、スケジュール)、チェックポインティング、フィールドの妥当性確認、マスキングといったデータ処理タスクなど、データの転送方法を記述します。フローがトリガーされると、Amazon AppFlow は送信元データをフェッチし(通常は送信元アプリケーションのパブリック API を介して)、データ処理タスクを実行して、処理されたデータを送信先に転送するフローを実行します。
この例では CloudFormation テンプレートを使用して事前構成されたフローをデプロイします。次のスクリーンショットは Amazon AppFlow コンソールのソリューションテンプレートによって自動的に作成される、事前設定された veeva-aws-connector
フローを示しています。
フローは Veeva を送信元として使用し、Veeva Vault コンポーネントオブジェクトをインポートするように構成されています。処理されたアセットを追跡し、送信元システムの対応するアセットにタグをプッシュバックするには、メタデータとソースファイルの両方が必要です。今回は最新バージョンのみがインポートされており、レンディションは含まれていません。
フローの送信先も構成する必要があります。上記のスクリーンショットでは、CloudFormationテンプレートの一部として作成された S3 バケットのファイル形式とフォルダ構造を定義しています。
最後に、デモンストレーションの目的で、フローがオンデマンドでトリガーされます。これは、フローが最大 1 分の粒度でスケジュールどおりに実行されるように変更できます。スケジュールに従ってトリガーされると、転送モードは完全転送から増分転送モードに自動的に変更されます。変更を追跡するためのソースタイムスタンプフィールドを指定します。なお、今回のタグ付けのユースケースでは Last Modified Date が適切であることがわかりました。
Amazon AppFlow は Amazon EventBridge と統合され、フローの実行が完了するたびにイベントを実行します。
回復性のある構成を考慮し、AVAIAppFlowListener
の AWS Lambda 関数は EventBridge に接続されています。 Amazon AppFlow イベントがトリガーされると、特定のフロー実行が正常に完了したことを確認し、その特定のフロー実行からインポートされたすべてのアセットのメタデータ情報を読み取り、個々のドキュメントメタデータを Amazon Simple Queue Service (Amazon SQS) キューに挿入します。 Amazon SQS を使用すると、アーキテクチャのプロデューサーセクションとプロセッサセクションが疎結合になり、受信した更新を停止せずにプロセッサセクションに変更をデプロイできます。
2 番目のポーラー関数 (AVAIQueuePoller
) は、頻繁な間隔 (1 分ごと) で SQS キューを読み取り、受信アセットを処理します。 Lambda 関数からの反応時間をさらに短縮するために Amazon SQS を関数のトリガーとして設定することで、CloudWatch ルールを置き換えることができます。
受信メッセージのタイプに応じて、ソリューションはさまざまな AWS AI サービスを使用してデータから洞察を引き出します。以下ではいくつかの例を示しています。
- テキストファイル – 関数は、Amazon Comprehend Medical の DetectEntities オペレーションを使用します。これは、ML を使用して、構造化されていないテキストから関連する医療情報を簡単に抽出できる自然言語処理 (NLP) サービスです。このオペレーションは、
Anatomy
、Medical_Condition
、Medication
、Protected_Health_Information
、Test_Treatment_Procedure
などのカテゴリのエンティティを検出します。結果の出力はProtected_Health_Information
でフィルタリングされ、残りの情報は信頼スコアとともにフラット化されて Amazon DynamoDB テーブルに挿入されます。この情報は OpenSearch Kibana クラスターにプロットされます。実際のアプリケーションでは、Amazon Comprehend Medical ICD-10-CM または RxNorm 機能を使用して、検出された情報を医療オントロジーにリンクし、下流のヘルスケアアプリケーションでさらに分析できるようにすることもできます。 - 画像 – 関数は、Amazon Rekognition の DetectLabels メソッドを使用して、受信画像にあるラベルを検出します。これらのラベルは、コマーシャルアートワークや臨床ラベルに関する情報など、画像に埋め込まれた豊富な情報を識別するタグとして機能します。
Human
またはPerson
などのラベルが 80% を超える信頼スコアで検出された場合、コードは DetectFaces メソッドを使用して、目、鼻、口などの主要な顔の特徴を探し、入力画像内の顔を検出します。Amazon Rekognition は、これらすべての情報を関連する信頼スコアとともに提供します。信頼スコアは、フラット化されて DynamoDB テーブルに保存されます。 - 音声録音 – オーディオアセットの場合、コードは Amazon Transcribe の StartTranscriptionJob 非同期メソッドを使用して受信オーディオをテキストに変換し、
TranscriptionJobName
として一意の識別子を渡します。コードでは、音声言語を英語 (米国) と想定していますが、これを変更して Veeva Vault からの情報に関連付けることもできます。コードは GetTranscriptionJob メソッドを呼び出し、ジョブが完了するまで、TranscriptionJobName
と同じ一意の識別子をループで渡します。Amazon Transcribe は S3 バケットで出力ファイルを配信します。これはコードによって読み取られ、削除されます。コードはテキスト処理ワークフロー (前述) を呼び出して、書き起こされた音声からエンティティを抽出します。 - スキャンされた文書 (PDF) –ライフサイエンスアセットの大部分は PDF となっています。これらは、科学雑誌や研究論文から薬物ラベルなど、さまざまです。Amazon Textract は、スキャンされた文書からテキストとデータを自動的に抽出するサービスです。コードは StartDocumentTextDetection メソッドを使用して、非同期ジョブを開始し、文書内のテキストを検出します。コードは、応答で返された
JobId
を使用して、ジョブが完了するまで、ループで GetDocumentTextDetection を呼び出します。出力 JSON 構造には、検出されたテキストの行と単語、およびそれが識別する各要素の信頼スコアが含まれているため、結果の使用方法について十分な情報に基づいて決定できます。コードは JSON 構造を処理してテキストを再作成し、テキスト処理ワークフローを呼び出してテキストからエンティティを抽出します。
DynamoDB テーブルには、処理されたすべてのデータが格納されます。このソリューションでは、DynamoDB Streams と Lambda トリガー (AVAIPopulateES
) を使用して、OpenSearch Kibana クラスターにデータを入力します。AVAIPopulateES 関数は、DynamoDB テーブルで発生するすべての更新、挿入、および削除操作に対して実行され、対応する1つのレコードを OpenSearch インデックスに挿入します。これらのレコードは、Kibanaを使用して視覚化できます。
フィードバック処理を行うため、AVAICustomFieldPopulator
Lambda 関数が作成されました。これは、メタデータ DynamoDB テーブルの DynamoDB Streams 内のイベントによってトリガーされます。この関数は、DynamoDB レコード内のすべての DocumentID について、Veeva API を使用して、Veeva内の対応する ID を持つアセットの事前定義されたカスタムフィールドプロパティにタグ情報をアップサートしようとします。カスタムフィールドにノイズが挿入されないようにするために、Lambda 関数は 0.9 未満の信頼スコアで識別されたタグをフィルタリングします。失敗した要求は、手動による検査または自動再試行のためにデッドレターキュー(DLQ)に転送されます。
このソリューションは、デジタルアセットを処理およびタグ付けし、包括的に検索することを可能にする、サーバーレスの従量課金制のアプローチを提供します。さらに、各管理対象コンポーネントは、複数のアベイラビリティーゾーンにまたがって自動デプロイによって組み込まれた高可用性を有しています。Amazon Opensearch Service (Amazon Elasticsearch Service の後継) では、3 AZ オプションを選択して、ドメインの可用性を向上させることができます。
前提条件
このチュートリアルには、以下の前提条件が必要です。
- CloudFormation テンプレートを起動するための適切な AWS Identity and Access Management (IAM) のアクセス許可を持つ AWS アカウント
- Veeva Vault PromoMats ドメイン (ドメインURL、ユーザー名、パスワード) の適切なアクセス認証情報
- タグ付けするデジタルアセット用に Veeva で定義されたカスタムコンテンツタグ (例として、カスタムコンテンツタグ AutoTags を作成しました)
- 前述の資格情報にアクセス可能な PromoMats Vault のデジタルアセット
ソリューションをデプロイする
CloudFormation スタックを利用してソリューションをデプロイします。スタックは、必要なすべてのリソースを作成します。これには、次のものが含まれます。
- 受信アセットを保存する S3 バケット。
- アセットを S3 バケットに自動的にインポートする Amazon AppFlow フロー。
- Amazon AppFlow (
AVAIAppFlowListener
) によって生成されたイベントに反応するための EventBridge ルールと Lambda 関数。 - リスナー関数 (
AVAIAppFlowListener
) とポーラー関数 (AVAIQueuePoller
) の間を疎結合に機能する SQS FIFO キュー。 - Amazon AI サービスの出力を格納する DynamoDB テーブル。
- 分析されたタグを視覚化するための Amazon OpenSearch Kibana (ELK) クラスター。
- 対応する DLQ を使用して、識別されたタグを Veeva (
AVAICustomFieldPopulator
) にプッシュバックする Lambda 関数。 - 必要な Lambda 関数:
- AVAIAppFlowListener – Amazon AppFlow によって EventBridge にプッシュされたイベントによってトリガーされます。フロー実行の検証と、SQS キューへのメッセージのプッシュに使用されます。
- AVAIQueuePoller – 1 分ごとにトリガーされます。SQS キューのポーリング、Amazon AI サービスを使用したアセットの処理、DynamoDB テーブルへの入力に使用されます。
- AVAIPopulateES – DynamoDB テーブルで更新、挿入、または削除があるとトリガーされます。DynamoDB から変更をキャプチャし、ELK クラスターに入力するために使用されます。
- AVAICustomFieldPopulator – DynamoDB テーブルで更新、挿入、または削除が行われたときにトリガーされます。タグ情報を Veeva にフィードバックするために使用されます。
AVAIQueuePoller
関数をトリガーする Amazon CloudWatch Events ルール。これらのトリガーは、デフォルトでDISABLED
状態になっています。- スコープを絞り込んだ方法で EventBridge および AI サービスを操作するために必要な IAM ロールとポリシー。
開始するには、次の手順を実行します。
- 前提条件となる IAM アクセス許可を持つアカウントを使用して AWS マネジメントコンソールにサインインします。
- [スタックの起動] を選択し、新しいタブで開きます。
- [スタックの作成] ページで、[次へ] を選択します。
- [スタックの詳細の指定] ページで、スタックの名前を入力します。
- パラメータの値を入力します。
- [次へ] を選択します。
- [スタックオプションの設定] ページで、すべてをデフォルトのままにして、[次へ] を選択します。
- [確認] ページの [機能と変換] セクションで、3 つのチェックボックスをオンにします。
- [スタックの作成] を選択します。
- スタックが完了するのを待ちます。[イベント] タブでスタック作成プロセスからのさまざまなイベントを調べることができます。
- スタックの作成が完了したら、[リソース] タブで CloudFormation テンプレートが作成したすべてのリソースを確認できます。
- [出力] タブで、
ESDomainAccessPrincipal
の値をコピーします。
これは、AVAIPopulateES
関数が引き受ける IAM ロールの ARN です。後でそれを使用して、Amazon OpenSearch Service ドメインへのアクセスを設定します。
Amazon OpenSearch Service と Kibana をセットアップする
このセクションでは、Amazon OpenSearch Service クラスターのセキュリティ保護と、Kibana に安全にアクセスするためのローカルプロキシのインストールについて説明します。
- Amazon OpenSearch Service コンソールで、テンプレートによって作成されたドメインを選択します。
- [アクション] メニューで、[アクセス ポリシーの変更] を選択します。
- [ドメイン アクセス ポリシー] で、[カスタム アクセス ポリシー] を選択します。
- [アクセスポリシーがクリアされます] のポップアップウィンドウで、[クリアして続行] を選択します。
- 次のページで、Amazon OpenSearch Service ドメインへのアクセスをロックダウンするように次のステートメントを設定します。
- IPv4 アドレスの許可 – 自分の IP アドレス。
- IAM ARN の許可 – 以前コピーした
ESDomainAccessPrincipal
の値。
- [送信] を選択します。
これにより、AVAIPopulateES
関数へのアクセスと、IP アドレスからの Kibana アクセスを許可するアクセスポリシーが作成されます。アクセスポリシーのスコープを絞り込むことについての詳細については、アクセスポリシーの設定を参照してください。
- ドメインのステータスが [アクティブ] になるまで待ちます。
- Amazon EventBridge コンソールの [イベント] で、[ルール] を選択します。 CloudFormation テンプレートによって作成された 2 つのルールが表示されます。
- AVAIQueuePollerSchedule ルールを選択し、[有効にする] をクリックして有効にします。
5〜8 分以内にデータが流入し始め、Amazon OpenSearch Service クラスターにエンティティが作成されます。これで、これらのエンティティを Kibana で視覚化できるようになりました。これを行うには、aws-es-kibana と呼ばれるオープンソースのプロキシを使用します。コンピュータにプロキシをインストールするには、次のコードを入力します。
aws-es-kibana your_OpenSearch_domain_endpoint
ドメインエンドポイントは、ESDomainEndPoint
の下の CloudFormation スタックの [出力] タブにあります。次の出力が表示されます。
ビジュアライゼーションを作成し、タグ付けされたコンテンツを分析する
以前投稿したブログを参照してください。
クリーンアップ
今後の料金が発生しないように、使用していないリソースを削除します。関連する CloudFormation スタックを削除することで、すべてのリソースを簡単に削除できます。スタックを正常に削除するには、作成された S3 バケットのコンテンツを空にする必要があることに注意してください。
まとめ
この投稿では、Amazon AI サービスを Amazon AppFlow と組み合わせて使用して、Veeva Vault PromoMats の機能を拡張し、貴重な情報を迅速かつ簡単に抽出する方法を示しました。ビルトインループバックメカニズムにより、タグを更新して Veeva Vault に戻し、アセットの自動タグ付けを有効にすることができます。これにより、チームはアセットをすばやく簡単に見つけることができます。
完璧な ML 出力はありませんが、人のパフォーマンスに非常に近づけた行動をするようにして、チームの労力のかなりの部分を削減するのに役立ちます。この追加のキャパシティーを付加価値を生み出すタスクに用いるとともに、ML ソリューションの出力を確認するために割り当てるキャパシティーを小さくすることができます。このソリューションは、コストを最適化し、タグ付けの一貫性を実現し、既存のアセットの迅速な発見を可能にするのにも役立ちます。
最後に、データの所有権を維持し、コンテンツを処理、保存、ホストできる AWS のサービスを選択できます。AWS は、お客様の同意を得ることなく、いかなる目的においても、コンテンツにアクセスしたり、コンテンツを使用したりすることはなく、マーケティングや広告のための情報を取得するためにお客様のデータを使用することもありません。詳細については、データプライバシーに関するよくある質問を参照してください。
追加の機能拡張により、このソリューションの機能をさらに拡張することもできます。たとえば、この投稿の AI と ML サービスに加えて、Amazon SageMaker を使用して構築されたカスタム ML モデルをアーキテクチャに簡単に追加できます。
Veeva と AWS の追加のユースケースを検討することに関心がある場合は、AWS アカウント チームにお問い合わせください。
このコンテンツは、Veeva Systems によって確認および承認されています。Veeva Vault 関連のその他の質問については、Veeva サポートにお問い合わせください。
著者について
Mayank Thakkar は、AWS の AI/ML ビジネス開発、グローバル ヘルスケアおよびライフ サイエンスの責任者です。彼は、ヘルスケア、ライフ サイエンス、保険、小売などのさまざまな業界で 18 年以上の経験を持ち、サーバーレス、人工知能、機械学習ベースによる実際の業界の問題を解決するためのソリューションを構築することを専門としています。 AWS では、世界中の大手製薬会社と緊密に連携して最先端のソリューションを構築し、クラウドへの移行を支援しています。仕事以外では、Mayank 氏は、彼の妻と一緒に、家が火災で消失したり、水浸しになったりしないように対策を講じつつ、2 人の元気でいたずら好きな男の子の Aaryan (6 歳) と Kiaan (4 歳) を育てるのに忙しくしています。
Anamaria Todor は、デンマークのコペンハーゲンを拠点とするシニア ソリューション アーキテクトです。彼女は 4 歳のときに初めてコンピューターを見ました。それ以来、コンピューター サイエンスとエンジニアリングを手放すことはありませんでした。彼女は、デンマークのさまざまな企業で、フルスタック開発者からデータ エンジニア、テクニカル リード、CTO まで、さまざまな技術的役割を果たしてきました。 Anamaria は、応用工学とコンピューターサイエンスの学士号、コンピューターサイエンスの修士号を取得しており、AWS での 10 年以上の実践経験があります。 AWS では、エンタープライズ セグメントのヘルスケアおよびライフ サイエンス企業と緊密に連携しています。仕事をしていない時やビデオゲームをしていない時は、少女や女性の専門家がテクノロジーを通じて自分の道を理解し、見つけられるように指導しています。
翻訳はソリューションアーキテクトの中島丈博が担当しました。
原文はこちらをご覧ください。