お知らせ:

当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

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
View more

Advanced I/O functionの設定が完了しました。次のセクションでは、functionとクライアントのアーキテクチャについて説明します。


最終更新日 2026-03-05 11:43:24 +0530 IST