Advanced I/O Functionの設定
Alien Cityアプリケーションのコーディングを、functionコンポーネントの設定から始めましょう。
Pythonのfunctionディレクトリ(functions/alien_city_function)には以下のファイルが含まれています:
-
main.py メインfunctionファイル
-
catalyst-config.json 設定ファイル
-
追加する外部ライブラリを記載するためのrequirements.txtファイル
main.py メインfunctionファイルにコードを追加します。
Advanced I/O functionには、サーバーとData Store間のルーティングを処理する2つのAPIがあります:
-
GET /alien: 都市にエイリアンが存在するかどうかを確認する
-
POST /alien: 都市でのエイリアンの存在を報告する
それでは、functionファイルにコードを追加しましょう。
以下のコードをコピーして、プロジェクトのfunctions/alien_city_functionディレクトリにあるmain.pyに貼り付けて、ファイルを保存してください。アプリケーションのファイルを操作するには、お好みのIDEを使用できます。
注意: このセクションのコードを十分に理解するために、必ず目を通してください。
main.py
copy
import json
import zcatalyst_sdk
import logging
from flask import Request, make_response, jsonify
tableName = 'AlienCity' # Data Storeに作成したテーブル
columnName = 'CityName' # テーブルに作成したカラム
def handler(request: Request):
try:
app = zcatalyst_sdk.initialize() # Catalyst SDKの初期化
logger = logging.getLogger()
if request.path == "/alien" and request.method == 'POST': # 特定の都市のエイリアン遭遇を報告するPOST API
req_data = request.get_json()
name = req_data.get('city_name')
rowid = getAlienCountFromCatalystDataStore(name) # Catalyst Data Storeテーブルにクエリを実行し、指定された都市の行が存在するかどうかを確認します
if len(rowid) == 0: # 行が存在しない場合、新しい行を挿入します
logger.info("Alien alert!") # ログに記録されます。コンソールのMonitorセクションにあるLogsからこのログを確認できます
datastore_service = app.datastore()
table_service = datastore_service.table(tableName)
row_data = {
columnName:name
}
table_service.insert_row(row_data) # Catalyst Data Storeテーブルに都市名を行として挿入します
response = make_response(jsonify({
"message": "Thanks for reporting!"
}), 200)
else: # 行が存在する場合、重複を示すメッセージを送信します
response = make_response(jsonify({
"message": "Looks like you are not the first person to encounter aliens in this city! Someone has already reported an alien encounter here!"
}), 200)
return response
elif request.path == "/alien" and request.method == 'GET': # テーブルで該当都市のエイリアン遭遇を確認するGET API
name = request.args.get('city_name')
rowid = getAlienCountFromCatalystDataStore(name) # Catalyst Data Storeテーブルにクエリを実行し、指定された都市の行が存在するかどうかを確認します
if len(rowid) == 0:
response = make_response({
"message": "Hurray! No alien encounters in this city yet!",
"signal": "negative"
}, 200)
else:
response = make_response(jsonify({
"message": "Uh oh! Looks like there are aliens in this city!",
"signal": "positive"
}), 200)
return response
else:
response = make_response("Error. Invalid Request")
response.status_code = 404
return response
except Exception as err: # エラーレスポンスを送信します
logger.error(f"Exception in AlienCityAIO :{err}")
response = make_response(jsonify({
"error": "Internal server error occurred. Please try again in some time."
}), 500)
return response
def getAlienCountFromCatalystDataStore(cityname): # 指定された都市のエイリアン遭遇が既に報告されているかどうかをData Storeテーブルにクエリを実行して確認します
app = zcatalyst_sdk.initialize()
zcql_service = app.zcql()
query = f"SELECT * FROM {tableName} WHERE {columnName} = '{cityname}'"
output = zcql_service.execute_query(query)
return output
Advanced I/O functionの設定が完了しました。次のセクションでは、functionとクライアントのアーキテクチャについて説明します。
最終更新日 2026-03-05 11:43:24 +0530 IST