💭
【Azure Kubernetes Service/Dapr/Blobstorage】Bindingsを実装する②(AKSへデプロイ)
執筆日
2024/11/12
やること
以下の続き。AKSにデプロイしてみる。
手順
- 必要なリソース/コマンドをデプロイする
- AKSにDaprのアプリをデプロイする
- 動作確認
必要なリソース/コマンドをデプロイする
- 以下を参考にACRをデプロイする
- 以下を参考にAKSをデプロイする
※1で作成したACRとのアタッチを忘れずに
- Azure CLI と kubectl をインストールする
AKSにDaprのアプリをデプロイする
- 以下のファイル構成でアプリケーションを作成する
dapr/
├── app.py
├── requirements.txt
├── Dockerfile
└── deployment.yaml
└── 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
Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD [ "python","app.py" ]
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: flaskapp
spec:
replicas: 1
selector:
matchLabels:
app: flaskapp
template:
metadata:
labels:
app: flaskapp
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "flaskapp"
dapr.io/app-port: "5000"
spec:
containers:
- name: flaskapp
image: <ACRのリソース名>.azurecr.io/flaskapp:latest
ports:
- containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
name: flaskapp
spec:
ports:
- port: 80
targetPort: 5000
selector:
app: flaskapp
type: LoadBalancer
components/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: <コンテナ名>
- ACRにPushする
az login -t "<テナント名>"
az acr login --name "<ACRのリソース名>"
docker build -t <ACRのリソース名>.azurecr.io/flaskapp:latest .
docker push <ACRのリソース名>.azurecr.io/flaskapp:latest
- AKSにdaprをデプロイする
az aks get-credentials --resource-group <リソースグループ名> --name <AKSのリソース名>
dapr init -k
kubectl apply -f components/my-blob-storage.yaml
kubectl apply -f deployment.yaml
動作確認
- 以下のコマンドを実行し、外部IPを取得する
kubectl get services
- 以下のコマンドを実行して動作確認する
curl -X POST http://<外部IP>:80/save-time
- Blobを確認し、ログファイルが作成されたことを確認する
まとめ
DaprのBindingを使ったアプリをAKSにデプロイしました。
次は、InputのBindingsを実装しようかなとー。
Discussion