IBM Cloud Object Storage(ICOS)へのアップロードをIBM Cloud FunctionsでSlackに通知してみる
はじめに
IBM Cloudでは、AWSのS3に相当するオブジェクトストレージ「IBM Cloud Object Storage」(ICOS)、および、Lambdaに相当するFunction as a Serviceプラットフォームとして「IBM Cloud Functions」が提供されています。
当記事では、この2つのサービスを利用し、「ICOSにファイルがアップロード・削除されたときに、自動でSlackのチャンネルに通知する」処理を作成してみます。
ICOSにファイルがアップロードされたり、既存のファイルが削除されたりすると、IBM Cloud Functionsに対してトリガーが発行され、それを受けてSlackへの通知処理が起動するというものです。
なお、当記事の作成にあたり、IBM Cloud FunctionsでのSlack通知処理について、以下の記事を参考にしています。
IBM Cloud Functions からPythonで Slack にメッセージをPostする
SlackのIncoming Webhook URLの発行
まず、任意のSlackワークスペースで、通知したいチャンネルに対するIncoming Webhookを発行します。
Webhookの発行方法は以下を参考にしてください。
Slack での Incoming Webhook の利用
Sending messages using Incoming Webhooks
IBM Cloud Object Storageの作成
IBM Cloudにログイン後、画面上部の「カタログ」をクリックし、「カタログを検索...」フィールドで「Object Storage」と入力し、検索します。
以下の「Object Storage」が出てくるのでこれをクリックします。
無料の「ライト」プランを選択し、他はデフォルトのままで「作成」ボタンをクリックします。
「固有のバケット名」に任意の名前を入力し、「ロケーション」を「jp-tok」とし、他はデフォルトのままで「バケットの作成」をクリックします。
これでICOSのバケットが作成され、ファイルをアップロードできる状態になりました。
IBM Cloud Functionsの名前空間の作成
IBM Cloud Functionsのトリガー・アクションを作成する前に、それらを含める名前空間を作成します。
IBM Cloud Functionsのページにアクセスします。
「現在の名前空間」欄を展開し、「名前空間の作成」をクリックします。
「名前」に任意の名前、「デプロイするロケーションの選択」で「東京」を選択し、「作成」ボタンをクリックします。ICOSのバケットと、Cloud Functionsの名前空間は同じリージョンである必要があります。
Cloud Functionsの名前空間への通知マネージャロールの割り当て
ICOSからトリガーを発行するにあたり、Cloud Functionsの名前空間に権限を付与する必要があります。
IAMダッシュボードにアクセスします。
サービス許可の付与画面で、以下のように入力し、「許可」ボタンをクリックします。
- ソース・サービス:Functions
- ソース・サービス・インスタンス:上記で作成したFunctionsの名前空間
- ターゲット・サービス:Cloud Object Storage
- サービス・インスタンス:上記で作成したCloud Object Storageのインスタンス
- サービス・アクセス:「Notification Manager」にチェックを入れる
Cloud Functionsのトリガー・アクションの作成
Cloud Functionsのトリガーのページにアクセスします。
「現在の名前空間」が上記で作成した名前空間であることを確認し、「作成」ボタンをクリックします。
「Cloud Object Storage」をクリックします。
「トリガー名」に任意の名前を入力し、「COSサービス・インスタンス」「バケット」で上記で作成したICOSインスタンス、バケットを選択し、「作成」ボタンをクリックします。
トリガーが作成できたので、次は、トリガー発生により実行されるアクションを作成します。
「接続されたアクション」の右側にある「追加」をクリックします。
「アクション名」に任意の名前を入力し、「ランタイム」で「Python 3.7」を選択し、「作成&追加」ボタンをクリックします。
作成されたアクション(以下では「cos-update-slack-notify」)をクリックします。
アクションのコードが表示されるので、以下の内容に置き換えて、「保存」ボタンをクリックします。
urlの部分は、上記で取得したSlackのIncoming WebhookのURLに変更します。
import requests
import json
def main(dict):
body={'username':'ICOS','icon_emoji':':donut:','text': "バケット=" + dict["bucket"] + ", ファイル=" + dict["key"] + ", 操作=" + dict["operation"]}
url = "https://hooks.slack.com/services/xxxxxxxxxxxxxx" # 取得済みのSlack Incoming WebhookのURLに置き換える
response = requests.post(url,data=json.dumps(body))
return { "message" : "Slack notified" }
ファイルアップロードとSlack通知の確認
作成したICOSのバケットにファイルをアップロードし、Slackチャンネルに通知されることを確認します。
リソース・リストのページにアクセスします。
「Storage」以下に作成したObject Storageのインスタンスが表示されるのでクリックします。
「アップロードするにはファイルまたはフォルダーをドラッグ・アンド・ドロップします」の箇所をクリックし、任意のファイルをアップロードします。
ファイルアップロードをトリガーとして、対象のSlackチャンネルに以下のようなメッセージが投稿されます。
以上、ICOSへのアップロードなどの通知をSlackに通知する方法でした。
なお、IBM Cloud Functionsのマニュアルでは、
Triggers created with /whisk.system/cos package have the following limitations.
- The trigger is available in the us-east, us-south, and eu-gb regions.
のように、jp-tokはトリガーの利用可能リージョンになっていませんが、2020年8月10日時点では上記のようにjp-tokでも利用できています。
以下のように、/whisk.system/cos パッケージも含まれているようです(sample-ns-3はjp-tokの名前空間)。
❯ ibmcloud fn namespace target sample-ns-3
ok: whisk namespace set to sample-ns-3
~
❯ ibmcloud fn package list /whisk.system
packages
/whisk.system/samples shared
/whisk.system/websocket shared
/whisk.system/slack shared
/whisk.system/weather shared
/whisk.system/utils shared
/whisk.system/cloudant shared
/whisk.system/cos shared
/whisk.system/messaging shared
/whisk.system/alarms shared
Author And Source
この問題について(IBM Cloud Object Storage(ICOS)へのアップロードをIBM Cloud FunctionsでSlackに通知してみる), 我々は、より多くの情報をここで見つけました https://qiita.com/hisato_imanishi/items/858f301dc7eab51a6e76著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .