5時間ほど悪戦苦闘しましたが、どうしても分からないので質問させていただきます。
ズバリこれを解決してほしい!
GCP上で下記画像のようなエラーが出ています。これを解決していただきたいです。
環境
Python3.8
GCP
経緯
もともとは1つのcloud functionで完結させようとしていたコードを、timeoutの関係から分割して実行する必要が起きました。
下記のサイトを参考にして、2つのcloud functionで実装したところ、上記画像のようなエラーが多発しています。
簡単な処理の流れとしては run-scrape-dbh-price-on-yafuoku → scrape-dbh-price-on-yafuokuです。
1つのcloud functionの時は問題なくプログラムが動いていたので、原因はおそらく2つのcloud functionの受け渡しのところだと思います。またネットで調べたところgoogle-cloud-pubsubのバージョンが結構シビア?みたいなので、これも原因としてありそうです。
正直自分はまだまだ知識不足なので全く太刀打ちが出来ません。
エラー文の言っていることもgoogle翻訳してみましたが意味が分かりません。
どうか解決お願いします。
また、この質問が分かりにくい場合は、なんなりと追加の情報提供します。
ソースコード
2つのcloud functionを繋げるところは、下記サイトを参考にして作りました。
https://qiita.com/kenkanayama/items/681440c05f79c2e61051
run-scrape-dbh-price-on-yafuoku
main
1from google.cloud import pubsub_v1 2import pytz 3import datetime 4from google.cloud import firestore 5import os 6 7db = firestore.Client() 8 9def main(event, context): 10 """Triggered from a message on a Cloud Pub/Sub topic. 11 Args: 12 event (dict): Event payload. 13 context (google.cloud.functions.Context): Metadata for the event. 14 """ 15 PROJECT_ID = os.getenv("GCP_PROJECT") 16 client = pubsub_v1.PublisherClient() 17 topic_id = "test-topic" 18 19 topic_path = client.topic_path(PROJECT_ID, topic_id) 20 21 #500個ほどの要素数 22 card_numbers = [ 23 [~,~,~], 24 [~,~,~], 25 [~,~,~] 26 ] 27 28 for i in [0, 1, 2]: 29 print(i) 30 if passedPreCheck(i): 31 data = ",".join(card_numbers[i]) + f"-{i}" 32 print(data) 33 data1 = data.encode() 34 print(data1) 35 client.publish(topic_path, data=data1) 36
requirements
1# Function dependencies, for example: 2# package>=version 3beautifulsoup4>=4.9.1 4requests>=2.24.0 5google-cloud-firestore>=1.2.0 6pytz==2020.1 7google-cloud-pubsub==0.45.0
scrape-dbh-price-on-yafuoku
main
1import requests 2from bs4 import BeautifulSoup 3import datetime 4from google.cloud import firestore 5import pytz 6import time 7import base64 8 9db = firestore.Client() 10 11def main(event, context): 12 """Triggered from a message on a Cloud Pub/Sub topic. 13 Args: 14 event (dict): Event payload. 15 context (google.cloud.functions.Context): Metadata for the event. 16 """ 17 event_message = base64.b64decode(event["data"]).decode("utf-8") 18 data = eval(event_message) 19 print(data) 20 21 a = data.split("-") 22 dict2 = {"card_numbers": a[0].split(","), "number": a[1]} 23 24 yafuoku_url = "https://auctions.yahoo.co.jp/" 25 output = [] 26 for j, card_number in enumerate(dict2["card_numbers"]): 27 price = get_average_price(yafuoku_url, card_number) 28 print(price) 29 output.append({"card_number": card_number, "average_price": price}) 30 time.sleep(0.5) 31 print(output) 32 insert_to_firestore(output, dict2["number"]) 33 print("end")
requirements
1# Function dependencies, for example: 2# package>=version 3beautifulsoup4>=4.9.1 4requests>=2.24.0 5google-cloud-firestore>=1.2.0 6pytz==2020.1
あなたの回答
tips
プレビュー