😸

【Dapr/Azure BlobStorage】- Bindingsを実装する①(Local環境)

2024/11/12に公開

執筆日

2024/11/11

やること

FlaskでAPIを作成して、その結果をDaprの仕組みを使ってBlobのコンテナーに保存する

参考資料

手順

  1. Dapr CLIのインストール
  2. Blob Storage/コンテナを構築する
  3. アプリケーションを作成
  4. 動作確認

Dapr CLIのインストール

Dapr CLI のインストール:
公式ドキュメントを参考にインストールしてください。

Blob Storage/コンテナを構築する

  1. 以下を参考にし、Blob Storage/コンテナを構築する
    Azure Blob Storageのコンテナ作成

アプリケーションを作成

  1. 以下のフォルダー構成でアプリを作成する
dapr/
├── app.py
├── requirements.txt
├── components
└─── my-blob-storage.yaml

app.py

from flask import Flask, jsonify
import requests
import json
from datetime import datetime

app = Flask(__name__)

@app.route("/save-time", methods=["POST"])
def save_time():
    try:
        current_time = datetime.utcnow().isoformat() + "Z"
        data = {"time": current_time}
        url = "http://localhost:3500/v1.0/bindings/my-blob-storage"
        payload = {
            "data": data,
            "metadata": {
                "blobName": f'time_{datetime.utcnow().strftime("%Y%m%d%H%M%S")}.json'
            },
            "operation": "create",
        }
        headers = {"Content-Type": "application/json"}
        response = requests.post(url, data=json.dumps(payload), headers=headers)
        if response.status_code == 200:
            return jsonify({"message": "Time saved successfully"}), 200
        else:
            app.logger.error(f"Failed to save time: {response.text}")
            return jsonify({"message": "Failed to save time"}), 500
    except Exception as e:
        app.logger.error(f"Exception occurred: {str(e)}")
        return jsonify({"message": "Internal server error"}), 500

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

requirements.txt

Flask
requests

my-blob-storage.yaml

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: my-blob-storage
  namespace: default
spec:
  type: bindings.azure.blobstorage
  version: v1
  metadata:
  - name: storageAccount
    value: <Storage Account名>
  - name: storageAccessKey
    value: <storage account key>
  - name: container
    value: <コンテナ名>

動作確認

  1. 以下のコマンドを実行し、ライブラリーをインストールする
pip install -r requirements.txt
  1. 以下のコマンドを実行し、Daprを立ち上げる
dapr init  
dapr run --app-id flaskapp --app-port 5000 --dapr-http-port 3500 --components-path ./components python app.py
  1. 別のターミナルで以下を実行する
curl -X POST http://localhost:5000/save-time


4. Blobのコンテナーを確認し、作成されていることを確認する

まとめ

DaprのBindingを実装してみました。
次はAKSにデプロイして動作確認してみようかなと。

ヘッドウォータース

Discussion