この記事の作成に至った経緯
現在対応している案件で、MS Dataverse上に存在するデータをPowerAutomateを使用してCSVファイルとして保存し、その後SharePointとAWSのS3環境に保存してほしいと依頼を受けました。
なかなか需要のある技術かはわからないですが、個人的な備忘録もかねてこちらに記事投稿をすることでアウトプットしておこうと思った次第です。
ワークフローの流れ
簡単に表したのものではありますが、全体のワークフロー図としては下記のようなイメージになります。
トリガーからデータの作成やSharePointへの格納はよく使われる機能だと思うのでここでの説明は省きます。
SharePointに格納したファイルを「コンテンツを取得」のアクションで取得したのち、HTTPのアクションを使いPowerAutomateからPOSTリクエストをAWSのLambdaを呼び出しS3への認証機能が付与されたURLを発行後、そのURLへPUTリクエストを送信することで今回の要件を満たすことができます。
AWSへHTTPリクエストを送信する際に必要な設定
PowerAutomateからLambdaや認証機能付きのURLへリクエストを送るためにはいくつかの設定が必要になります。
1.IAMの設定
ここではユーザーの作成、アクセスキーIDとシークレットアクセスキーIDの取得、ロールの設定(S3へのアクセス権限)が必要になります。
2.API Gatewayの開通
ここでAPIを作成しPowerAutomateからLambdaへリクエストを送信します。
3.Lamdaへのコーディング
私はS3の環境へPowerAutomateから受け取ったファイル名のcsvファイルを核のする際に必要な認証URLを作成するコードをPythonで書きました。
今回のフローを開発した際の注意点
今回のワークフローを組むことで、どんなファイルでもS3へのデータ移送ができるようというわけではなく、PowerAutomateやAWSにいくつかの制限があるので最後に紹介したいと思います。
PowerAutomateの制限
一度のアクションで処理できるデータの量は100Mbという制限があります。
これはSharePointからコンテンツを取得するときにも対象のファイルの容量が制限を超えているとエラーになるので気を付けましょう。
https://learn.microsoft.com/ja-jp/power-automate/limits-and-config
AWSでの制限
API Gatewayを使用して取得したファイルをAWSへの移送をすることは可能ですが、作成したAPIを使用してデータの送信をする場合は容量が10Mbまでという制限がかかっています。
一方でREST APIやAWS CLIを使用してPUTリクエストを送信する場合は5Gbまでこの制限が引き上げられるので、PowerAutomateを使用する場合の実質的な制限は100Mbとなります。
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/limits.html
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/upload-objects.html