Amazon AppFlowを活用してSaaSサービスから簡単にデータを取得してみた

## はじめに
このたび、[ANGEL Calendarの企画](https://qiita.com/har1101/items/637ba82948aa7670fb9f)に参加しております！
この記事は20日目の記事となります。
他の方の記事は、[2024-ANGEL-Dojo](https://qiita.com/organizations/2024-angel-dojo)の記事一覧から是非チェックしてみてください！

## なぜこの記事を書いたのか
今回、AngelDojo内でAmazon AppFlowのサービスを使っているチームが少なかったので、
AppFlowの便利な点を共有したいと思い、記事を書かせていただきました。
Angel Dojo内の実装ではAppFlowを活用して、slack、salesforce、githubからデータを取得を実際に行いました。実際に使ってみて便利だと思った部分をこれから紹介をさせていただきます。

## Amazon AppFlowとは？
初めにAmazon AppFlowとは何かについての説明をしていきます。
簡単に言うとSoftware as a Service(SaaS)アプリケーションとAmazon Simple Storage Service(S3)やAmazon Redshiftを連携して安全に転送できるサービスです。

実際に連携できるSaaSアプリケーションはSalesforce、slack、GitHub、GitLabなどがあります。他にも多くのSaaSアプリケーションとの連携が可能です。

公式サイト引用
>Amazon AppFlow は、Salesforce、SAP、Google Analytics、Facebook Ads、ServiceNow などの Software as a Service (SaaS) アプリケーションと、Amazon Simple Storage Service (S3) や Amazon Redshift などの AWS のサービス間で、わずか数クリックで、データを安全に転送できるフルマネージド統合サービスです

https://aws.amazon.com/jp/appflow/

## AppFlowの設定
今回はSalesforceからデータを取得してきて、S3に保存できるように設定していきます。
最初にAWS マネジメントコンソールでAmazon AppFlowにアクセスをします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858395/36a39dd6-8584-e5d7-c6fd-4660b1c04856.png)

アクセスができたら、フローを選択します。
フローの作成をクリックして実際にフローの設定します。

### フローの詳細設定
最初にフロー名とフローを記入します。
そして、データの転送中のデータや保管中のデータを暗号化したい場合には
暗号化設定をカスタマイズする(高度)を選択します。
今回は検証でAppFlowを作成しているので暗号化はしていません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858395/f623b11a-0b48-194b-4025-3178d2af43fb.png)

### フローを設定
次に送信元と送信先の設定をしていきます。
今回はSalesforceからデータを取得してS3に保存したいので送信元名をSalesforce、送信先名をS3に設定します。

接続元名から「Salesforce」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858395/bea24e99-31ff-ade5-4b1f-a90c15292dc1.png)

新規接続を作成をクリックし、Salesforceに接続するための設定を行います。
接続先名を入力し、OAuthグランドタイプを「認証コード」を選択します。
Salesforce環境は「Production」「Sandbox」がありますが、それぞれ「本番環境」「検証環境」の意味になります。今回は「Production」を選択します。
PrivateLinkは今回、非公開接続にはしないので、PrivateLinkは「無効」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858395/ffb2489f-10ca-33f8-c6ef-79a0f898ebbb.png)

設定が全て完了し、接続するを選択するとSalesforceのログイン画面に飛ぶので
ユーザ名とパスワードを入力してログインをします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858395/6e08eddb-c316-4145-4ac8-0cb8504a39fd.png)

ログイン後、Salesforce接続を選択できるようになるので先ほど設定した新規接続先を選択します。
今回はSalesforceの商談オブジェクトをS3に保存して設定を行っていきます。
Salesforceオブジェクトを選択して、Salesforceオブジェクトを選択で商談を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858395/8e2d5f9e-580b-987e-ef83-c92d529626fd.png)

次に接続先の設定を行います。
S3にsalesforceの商談オブジェクトのデータを保存したいので送信先をAmazonS3を選択します。
パケットは事前に作成していたsalesforce--testを選択し、
プレフィックスは生データを今回S3に保存するのでrawという名前で設定します。

データの形式はJSON形式、CSV形式、Parquet形式が選択できます。
今回はJSON形式でS3に保存したいのでJSON形式を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858395/6f8c5e6b-7012-1909-8d80-ab4b2d50d43d.png)


次にいつ実行したいかの設定を実施します。
フローを実行したら、すぐに実行したいのでオンデマンドで実行を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858395/bf4c564f-bd03-8a07-92b6-0cb3d8de6943.png)

### データフィールドをマッピング
ここではどのデータを持ってくるのかの設定ができます。
送信元フィールド名を選択し、取得したいデータを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858395/94693542-f1c2-b4b0-8d12-a88ede11ee09.png)

今回は商談IDと取引先IDと金額を選択しました。
ここで設定することで取得したデータだけをS3に保存することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858395/ee854603-362a-bb1c-b935-f2a27bad4ce4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858395/4c4fc528-5d6f-ac4a-f74e-aad04a59af4b.png)

### フィルターを追加する
ここでは、取得したいデータを絞り込むことできます。
今回は商談ID、取引先IDと金額の全てのデータを取得したいので絞り込みは行いません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858395/5c566bc9-f71f-62ad-e18b-44058636e07d.png)

これで全て設定が完了したので設定内容を確認してフローを実行します。
実行をすると以下の画像のように指定したS3パケット内にsalesforceデータ(商談ID、取引先ID、金額)を取得することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858395/4e49487e-8bc7-3eb9-9c6c-503791195ddb.png)

取得したデータ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858395/0e35accc-7b85-5cb6-b905-09d349301bac.png)
### 終わりに
今回は、Salesforceを連携して、データをS3に保存しました。
実際にAppFlowを使っていて、データをマッピングできる点とフィルタリングできる点が便利だと思いました。Salesforce以外には様々なサービスが連携できるので他のサービスも試していきたいと思います。便利だと思ったら、ぜひ機会があれば使ってみてください！