kokoni

クラウドおじさんの備忘録

re:viewとAzure DevOpsで技術同人誌を執筆するためのCI/CD環境を構築する その2

前回はAzure DevOpsの環境構築について説明しました。

blog.kokoni.jp

今回はアップロードしたPDFファイルをSlackに自動で通知する仕組みについて説明していきます。 Azure環境を利用してAzureStorageにファイルがアップロードしたらLogicAppsでSlackに通知するという流れになります。 この環境はうまく扱えば運用費用を安く抑えることができます。

※本投稿は2020年3月28日時点の情報となります

※Azure Portalを英語設定にしているので参考画像が英語になっています

前提作業

Slackに通知するためのIncoming Webhookを取得します。 方法については下記のリンクを参考にしてください。

slack.com

Azure LogicAppsの作成

Azure Storageにファイルが作成されたことを検知してSlackにそのURLを通知します。

前回、言及しませんでしたがAzure StorageのコンテナアクセスレベルはなるべくPrivateにしておいたほうがいいです。 理由としてはURLさえわかってしまえばだれでもダウンロードすることができてしまうことです。 ここではコンテナアクセスレベルをPrivateにしていることを前提にSASトークンで処理を実施する方式で進めます。

それではAzurePortalを開いてLogicAppsを作成していきます。 まずはAzurePortalにアクセスしましょう。

f:id:kingkino:20200328200259p:plain

左のメニューから「All services」を選択し検索ボックスに「logic」と入力してください。 Logic Appsが表示されるので選択してください。

f:id:kingkino:20200328200303p:plain Logci Appsのポータルが表示されるのでAddを選択します。

f:id:kingkino:20200328200318p:plain Logic Appsを作成するために必要な情報を入力します。

  • ResourceGroupは任意のものを選択してください
  • Logic Apps nameは任意の名称を入力してください
  • Locationは任意のRegionを選択してください

入力が完了したら「Review + create」を選択します。 確認をしたらCreaete(作成)を選択してLogic Appsを作成します。

f:id:kingkino:20200328200321p:plain Logic Appsを作成したらTriggerを選択します。 「Blank Logic App」を選択してください。 テンプレートを使わずに空の状態からLogicAppsを作成します。

f:id:kingkino:20200328200326p:plain デザイナーが開いたら検索ボックスにblobと入力します。 検索結果に表示されるAzure Blob Storageを選択してTriggersの「When a blob is added or modified」を選択します。 これはAzure Storage Blobが作られるか更新された時に発火するトリガーになります。

f:id:kingkino:20200328200331p:plain トリガーに各種設定をしていきます。

  • Conainerにはアップロード対象のConainerを選択します
  • Numver of Blobs to return from the triggersは1を設定してください、トリガー時に取得されるファイル情報の数を指定します
  • How often do you watn to check for itemsにはintervalに1、FrequencyはMinuteを選択します、ここではBlobの変更確認の間隔を指定します

入力が完了したら新しいAcitonを追加します。

f:id:kingkino:20200328204744p:plain 次に同じ要領で「Create SAS URI by path」を選択します。 これはblobの追加・変更トリガーで取得したblobの情報をもとにSASTokenを作成するActionになります。

「Add new parameter」を選択して「Start Time」と「Expiry Time」を追加します。 この二つのパラメータを追加することでSASTokenのExpireTimeを指定することが出来ます。

f:id:kingkino:20200328204747p:plain パラメータを追加したら各種設定を行います。

  • Blob pathには「List of Files path」を選択します
  • Permissionsは「Read」のままにしておいてください
  • StartTimeには下記のExpressionを追加します

f:id:kingkino:20200328200309p:plain

Start TimeをUTC時間で現在時刻を指定します。

  • ExpiryTimeには下記のExpressionを追加します

f:id:kingkino:20200328200306p:plain

Expiry TimeにはUTC時間で30日後にExpireされるように指定します これでSASTokenつきのURLが発行されます。

入力が完了したら新しいAcitonを追加します。

f:id:kingkino:20200328200312p:plain

次にHTTP Actionを追加します。ここではSlackに生成されたSASToken付きURLを送信します。

  • MethodにはPostを選択します。ここではHTTP Methodの設定になります。WebhookなのでPostを選択してください
  • URIには先に取得しておいたSlackのIncoming WebhookのURLを設定します
  • Headersには「ContentType」と「application/json」を設定します、JSONでWebhookに送信するので左記の設定になります
  • BodyにはJSON形式でリクエストを設定します、「WebUrl」の部分は先のActionで取得したSASTokenURLになります

以上でLogicAppsの設定は完了です。

Slack通知を試してみる

Blobの作成・変更でのTriggerの場合はAzure Portalからの試行実行が利用できないです。 なので対象のAzure StorageのコンテナにPortalやツールからアップロードして確認します。

f:id:kingkino:20200328213339p:plain

Azure Storage Explorerで対象のコンテナに任意で作成したファイルをアップロードします。 これでTriggerが発火しますのでLogicAppsの実行履歴を確認しましょう。

f:id:kingkino:20200328213710p:plain

Logic Appのポータルで実行履歴を確認できます。ここではStatusが「Succeeded」になっているので成功しているのがわかります。

f:id:kingkino:20200328213655p:plain

実行履歴を選択すると詳細な履歴を確認することが出来ます。

処理が成功している場合はSlackに正常に通知が行われていると思います。 Slackのチャンネルを見て確認しましょう。

f:id:kingkino:20200328214530p:plain

通知されていることが確認できれば今回の設定は完了です。 通知されたメッセージのURLを開いてみましょう。 中身を確認することが出来ると思います。 このURLはSASTokenによってコントロールされているため発行した日から30日が経過するとExpireされて利用できなくなります。

ここまで設定が完了したら前回に作成したRe:ViewのCI/CDから実行し一連の処理が正常に実行されるか確認してみてください。 Slackへの通知はスマホiPadなどから閲覧することが出来るので場所を選ばずに確認が出来ます。

まとめ

長くなりましたがこれで一連の設定方法の説明は完了になります。 一度環境を作ってしまえば執筆が完了するまでのあいだ非常に効率が良くなるので、まずは環境構築から始めるのがおすすめです。 またAzure Logic Appsの部分をPower Automateに変えてみたりリポジトリGitHubにしてみる等、組み合わせは多種多様にあるので自分の得意な環境と組み合わせて環境構築することが出来ます。それではよい技術同人誌ライフをお過ごしてください。