Life is Like a Boat

忘備録や投資日記、プログラミングに関するメモやtipsなど

PowerAppsからAzure Blob Storageに画像をアップロードする

ここ数週間、MicrosoftのPower Appsを触っています。

Power Appsのメリットは、かなり少ないコード量で、多くの学習コストをかけず業務アプリが開発できる点です。

特にある業務をモバイルアプリ化する部分に生産性の高さを感じています。自分は前に大企業の業務向けiOS/Androidアプリの仕事に関わっていたのですが、 + iOS/Androidそれぞれの開発不要 + コンポーネントを組み合わせ(UIパーツ) + API連携 これらができることで、3ヶ月かけていた開発が3日以内にリリースに近い状態まで持っていける肌感覚があります。 多くのユーザに配布が必要なtoCアプリでなく、Microsoftライセンスがすでにある企業に最適なプロダクトだと感じます(Power AppsのPlan1/2が必要です Pricing - Power Apps )。

www.cloudtimes.jp

Power Appsの概要の説明は割愛するとして、画像の取り扱いについて知見が溜まってきたので共有したいと思います。 「PowerApps 画像」のような検索キーワードでたどり着いた人の助けになれば幸いです。

数週間触ってみて、画像の取り扱いはPower Appsでは注意した方がよい印象を持っています。 というのも、一般的なCommon Data Serviceを使う場合Planにもよりますが、容量の上限を考えるとたくさんの画像を扱う場合には適していないからです。2020年3月時点でファイルストレージは2GBです。 ケチってSharePointを使うケースもありますが、これは他システムとの連携を考えた場合に使い勝手悪いです。例えば、DjangoサイトからSharePoint上の画像ファイルにアクセスするケースです。

クラウドベースの画像管理のサービスのCloudinaryを使うのも案です。未検証なのですが、この場合、PowerAppsから画像バイナリを送信、AWS Lambda/Azure Functionなりを使ってCloudinaryにアップロードという経路になると思います。

いろいろ事例を調べて、もっとシンプルにいけそうなのが、Azure Blob Storageを使う方法です。

これはPowerAppsのボタンとカメラコンポーネント、Azure Storageにコンテナを作るだけでPowerAppsから画像アップロードが可能です。

f:id:nerimplo:20200323122025p:plain

画像アップロード用のボタンのOnSelectに

AzureBlobStorage.CreateFile("example-container",Concatenate(GUID(), Text(Today(), "yyyy-mm-dd"), ".jpg"), Camera2.Stream)

を加えてあげます。example-containerというAzure StorageコンテナにCamera2.StreamのImage型データをGUIDと日付、.jpgの拡張子付きでファイルを作る数式です。

注意点としてStreamRateを100にする必要があります。デフォルトでは(カメラコンポーネントを追加する時)には0になっているため、アップロードボタンを押してもコンテナ側には0バイトのファイルしか作られません。これはハマりポイントでした。

Azure Storageのコンテナ作成はこちらに解説があります。 powerapps.microsoft.com