繁体   English   中英

部署时如何解决 GCP Cloud Function (Gen2) 缺少端口的问题?

[英]How to fix missing port issue with GCP Cloud Function (Gen2) when deployed?

我正在尝试在 GCP 中部署云 function (gen2) 但遇到了同样的问题,并且在 Cloud Functions 设置 Cloud Run 时每次部署都会出现此错误:

用户提供的容器无法启动并侦听由 PORT=8080 环境变量提供的端口。

主程序

from google.cloud import pubsub_v1
from google.cloud import firestore
import requests
import json
from firebase_admin import firestore
import google.auth

credentials, project = google.auth.default()



# API INFO
Base_url = 'https://xxxxxxxx.net/v1/feeds/sportsbookv2'
Sport_id = 'xxxxxxxx'
AppID = 'xxxxxxxx'
AppKey = 'xxxxxxxx'
Country = 'en_AU'
Site = 'www.xxxxxxxx.com'


project_id = "xxxxxxxx"
subscription_id = "xxxxxxxx-basketball-nba-events"
timeout = 5.0

subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path(project_id, subscription_id)


db = firestore.Client(project='xxxxxxxx')

def winodds(message: pubsub_v1.subscriber.message.Message) -> None:

        events = json.loads(message.data)
        event_ids = events['event_ids']

        url = f"{Base_url}/betoffer/event/{','.join(map(str, event_ids))}.json?app_id={AppID}&app_key={AppKey}&local={Country}&site={Site}"
        print(url)

        windata = requests.get(url).text
        windata = json.loads(windata)

        for odds_data in windata['betOffers']:
            if odds_data['betOfferType']['name'] == 'Head to Head' and 'MAIN' in odds_data['tags']:
                event_id = odds_data['eventId']
                home_team = odds_data['outcomes'][0]['participant']
                home_team_win_odds = odds_data['outcomes'][0]['odds']
                away_team = odds_data['outcomes'][1]['participant']
                away_team_win_odds = odds_data['outcomes'][1]['odds']

                print(f'{event_id} {home_team} {home_team_win_odds} {away_team} {away_team_win_odds}')

                # WRITE TO FIRESTORE
                doc_ref = db.collection(u'xxxxxxxx').document(u'basketball_nba').collection(u'win_odds').document(f'{event_id}')
                doc_ref.set({
                    u'event_id': event_id,
                    u'home_team': home_team,
                    u'home_team_win_odds': home_team_win_odds,
                    u'away_team': away_team,
                    u'away_team_win_odds': away_team_win_odds,
                    u'timestamp': firestore.SERVER_TIMESTAMP,
                })

streaming_pull_future = subscriber.subscribe(subscription_path, callback=winodds)
print(f"Listening for messages on {subscription_path}..\n")

# Wrap subscriber in a 'with' block to automatically call close() when done.
with subscriber:
    try:
        # When `timeout` is not set, result() will block indefinitely,
        # unless an exception is encountered first.
        streaming_pull_future.result()
    except TimeoutError:
        streaming_pull_future.cancel()  # Trigger the shutdown.
        streaming_pull_future.result()  # Block until the shutdown is complete.

if __name__ == "__main__":
    winodds()

DOCKER 文件

# Use the official Python image.
# https://hub.docker.com/_/python
FROM python:3.10

ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . .


ENV GOOGLE_APPLICATION_CREDENTIALS /app/xxxxx-key.json

ENV PORT 8080


# Install production dependencies.
RUN pip install functions-framework
RUN pip install -r requirements.txt

# Run the web service on container startup.
CMD exec functions-framework --target=winodds --debug --port=$PORT

我正在使用 PyCharm,当我通过 Docker、Main.py 和 Cloud Run 在本地运行时,它似乎在本地运行。 但是一旦我部署,我就会立即收到错误消息。

请有人能指出我正确的方向吗? 我需要在哪里编辑端口 # 以便我的云 function 能够成功部署?

上述错误可能是由侦听器端口的配置问题引起的,这可能是用户定义值设置中的一些不匹配。 您可以检查并验证以下指示以了解错误的可能原因并纠正这些指示以尝试消除问题:

您可以首先检查以下简单示例以检查它们是否正常工作。

const port = parseInt(process.env.PORT) || 8080;
app.listen(port, () => {
  console.log(`helloworld: listening on port ${port}`);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM