SODA Engineering Blog
🤖

Google CloudのiPaaS「Application Integration」でファイル転送を自動化する

2024/12/12に公開

\スニダンを開発しているSODA inc.の Advent Calendar 2024 12日目の記事です!!!/

📣 みなさん! GCPはGCPではなくなり、Google Cloudとなりました(2022年6月)
いまだにGCPという表記を見かけるので気をつけましょう

お客様のエクスペリエンスをシンプルにし、プロダクト間の一貫性を保つために、Google Cloud Platform は Google Cloud という名称になりました。
引用元: Google Cloud の新しくなったホームページのご紹介

はじめに

株式会社SODA CPOのkjです (自己紹介は文末に)
みなさん自動化してますか?
GAS(Google App Script)Zapier など多くの自動化手法が増えているので、自動化が身近になっていることでしょう

ただ、それぞれのサービスにもできること・できないことがあり、特にファイル転送(FTP, SFTP)は自動化に困ることもあるのではないかと思います(工数の側面や無料ソフトのリスクなど)
株式会社SODAではデータをGoogle Bigqueryに入れており、そこからファイル転送のためのデータ出力が行われています
そんなファイル転送をGoogle Cloud上で完結させるためにApplication Integrationを利用して自動化していきます

Application Integrationとは

Application Integration は Google Cloud の Integration Platform as a Service(iPaaS)ソリューションです。多様な業務を支えるために必要な数多くのアプリケーション(Google Cloud サービスややサードパーティ製 SaaS)とデータを連携させ、管理する中核的なインテグレーション ツールを幅広く備えています。
引用元: Application Integration の概要 - Google Cloud

メリット

  • ローコードで操作でき、GUI上でワークフローが作成可能なiPaaS
  • Gemini Code Assistによるプロンプトからのワークフロー作成
  • 便利なコネクタが90種類以上も用意されており、Googleのサービスだけではなく、多くのサービスとの連携が用意

デメリット

  • ローコードなので、一定の開発知識は必要
  • データ処理容量の上限があるため、GAS頼りになることもある

Application Integrationをセットアップする

サービスアカウントの作成

作成の詳細は省略しますが、多くのIAMロールを付与するため、不要な権限を持たせないためにもIntegrationごとにサービスアカウントを作成した方が良いと思っています

Application Integrationを初期設定をする

Application Integrationのコンソール にアクセスし、Get Startedしていきます

Application Integration を設定する - Google Cloud をみながら設定を進めていきます

プロジェクトを作成し、ワークフローを定義する

Application Integrationのコンソール から CREATE INTEGRATION とします

実際に作ってみる (BigQuery to FTP)

今回はBigQueryで取得したデータをFTPで実際にファイル転送するワークフローを作成します
本来であれば、結果をGCSなどに保存しておいた方がいいですが、今回は簡潔に説明するために省きます
また、BigQueryで取得するデータ量が多い場合はIntegration上では処理できないため、GASを使ってAPIで呼ぶ設計を検討する必要があります

要件定義する

今回の要件は以下のように定義します

  1. 1時間おきに実行する
  2. data テーブルから id, description, created_at を取得する
  3. FTPで item.csv というファイル名でCSVファイルを転送する

ワークフローを作成する

GUI上でワークフローを作成します
ワークフローにはTriggerとTaskのノードを作成することができます

  • Trigger
    • 何を用いてワークフローを発火するか定義します
    • 今回は時間ごとに発火したいため Schedule を利用します
      • APIやPub/Sub、他にもあらゆるサービスをTriggerに設定することができます
  • Task
    • 実際に行うタスクを定義します
    • 今回はBigQueryとFTP、DataMapperを利用します

要件定義通りにワークフローを作成します

必要なConnectorの設定をする

ここでIntegration Connectorsの登場です
作成したワークフローのConnectorの詳細設定をします

まずはBigQuery Connectorをクリックし、左のパネルより CONFIGURE CONNECTIOR をクリックします

Regionを選択肢、接続を作成します(この接続が先述のIntegration Connectors上での設定になります)
必要な情報を入力し、進めてください

Connectorを作成したら残りは以下を設定します

  • Type
    • 操作
  • Set entities/actions
    • ExecuteCustomQuery
      作成が完了するとLocal Variables(ローカル変数)に connectorOutputPayload が追加されます

FTP Connectorについても同様に設定します
接続先のPasswordは Secret Manager を利用して管理します
Connector作成後の設定は以下です

  • Type
    • 操作
  • Set entities/actions
    • Upload
      作成が完了するとLocal Variables(ローカル変数)に connectorInputPayloadconnectorOutputPayload が追加されます

BigQueryのクエリをセットする

次にBigQueryでファイル転送をしたいデータを取得します

ワークフロー作成画面に戻ります
BigQueryのConnectorをクリックし、サイドパネルからTask Inputのトグルを開くとScript Editorが開けるボタン EDIT CUSTOM SCRIPT が表示されます

ここにクエリを入力し、保存します

Data Mappingの設定をする

先述の通り、Data Mappingでは文字列やConnectorのOutputを変数に入れることができます

BiqQueryで取得したデータをFTP Connectorが扱えるようにDataを変換します
実際にやることは以下です

  1. ConnectorからOutputされたデータ(JSON配列)をStringに変換する
  2. 変換したデータをFTPで転送するContentsに入れる
  3. FTPで転送するファイル名を入れる

実際にやってみましょう
まずはData Mappingをクリックし、サイドパネルから OPEN DATA MAPPING EDITOR をクリックします

このような画面が表示されます
右のパネルには変数が表示されています
この変数を用いて実際のマッピング作業を行なっていきます

まずは ConnectorからOutputされたデータ(JSON配列)をStringに変換する をします
ConnectorからOutputされたデータ をInputにドラッグ&ドロップすることができます
+ボタンがあるので、クリックし、 TO_STRING() を選択します

次に FTP ConnectorのInput に先ほどのデータを入れます
InputはObjectになっており、こちらに入力パラメータの詳細が記載されています
connectorInputPayloadのContent に転送するデータ内容を入れる必要があるため、ドラッグ&ドロップします

最後に転送するファイル名を指定します
Inputは Variable or Value をクリックし、 Value からファイル名の文字列を入力します
Outputは connectorInputPayloadのRemoteFile となります

これでBigQueryを実行した結果をFTPでファイル転送するためのワークフローができました

Schedule Triggerの設定をする

定期的に実行するための設定をします(今回は1時間おき)

Triggerをクリックして、パネルを開きます
左のパネルの Schedule から設定ができます
BASICは以下の設定ができます

  • Run at a specific time
    • 特定の時間に実行する
  • Repeat by the hour
    • 時間ごとに実行する
    • 今回はこちらを使用します
  • Rebeat by the minute
    • 分ごとに実行する
      AdvanceではCronの設定ができますが、今回は省略します

以下のように設定します

テストをする

実際に動かしてみます
Schedule Triggerは時間を待たなければいけないため、Private Triggerを置きます
Private Triggerであれば、任意のタイミングで発火できるため、即時のテストに便利です

上部パネルの TEST > Private Trigger をクリックすると、 テスト統合 のパネルが表示されます
TEST INTEGRATION をクリックすると実行されます

成功したら以下のような表示がされます

実際に転送先のファイルを確認してみてください

デプロイをする

実際にデプロイします
上部パネルのPublishをクリックします
Autogenerate integration description と出てきますが、これは無視して NO JUST PUBLISH で進めましょう
YESにするとGeminiが自動で説明文を書いてくれるようなので、使ってみたい方はぜひ使用してみてください

少し待つと以下のような画面になり、デプロイが完了します

これでファイル転送の自動化の完了です

最後に

今回はGoogle Cloud上で完結させるためにApplication Integrationを利用して自動化していきました
初めて利用した際は結構つまづいたので時間がかかってしまいましたが、慣れてくると色々なことができて楽しいです
どんどん手作業を自動化し、より本質的なことに力を注いでいきましょう!Let's 自動化Life

自己紹介と宣伝

2024/12に執行役員CPO(Chief Product Officer)として入社したkjです
バックグラウンドとしては、Product Manager, toC Product, Blockchain, Engineer(BE, FE, iOS等々)です!
スニーカーダンクをより大きくしていくための戦略づくりと組織づくり、そして実行をしていっています
趣味は🎣、🍶です

株式会社SODAでは一緒に働く仲間を募集しています!
サービスも組織も共に大きく成長させていくフェーズとなっています
より多くのお客さまを支えるプロダクトを共に作っていきましょう
採用ページ

SODA Engineering Blog
SODA Engineering Blog

Discussion