クラウド機能をクラウドに移す
10343 ワード
エーcron ジョブは指定された間隔でサーバ上でプログラムを実行する方法です.これはしばしば、いくつかの反復タスクを行う小さなスクリプトで、メトリックを収集したり、サービスのヘルスをチェックしたり、いくつかのデータセットのスナップショットを取るなどです.
cronユーティリティはcrontabファイルと呼ばれる非常にカスタマイズ可能な形式を持っています.あなたのスクリプトを頻繁に1分として実行することができますし、頻繁に1年に1回.
ほとんどの場合、cronジョブはいくつかの入力を受け取り、少し処理を行い、出力を生成します.入力は、Webページ、別のアプリケーション、データベースなどです.出力は、データベース内のテーブルに行を追加したり、ストレージにファイルを入れたり、メッセージを送信するためのものです.
cronジョブの使用
cronジョブには多くの用途があります:あなたが繰り返し可能な方法で起こりたいものはcronジョブにすることができます.
私がcron仕事を使うのが好きである1つのものは、私が頻繁に訪問するウェブサイトの目を保つことです.例えば、記事を見たいですHacker News Serverlessについては、私はそれを毎日チェックする時間がないし、すべてのポストのタイトルを見て、それがPythonについてのかどうかを確認します.
代わりに、私はcronジョブを書くことができます.その手順は、次のようになる. 一日一日、APIからトップ記事を取得する すべての物語を繰り返します いずれかのタイトルが"Serverless "とマッチする場合: リンクでメールを送る スクリプトです.
私がLinuxマシンでcronジョブとして設定したいなら、ファイルに保存します
それから、私はcrontabを編集します
スクリプトをクラウドに動かす
これは素晴らしいですが、それは1つの巨大なダウンサイドを持っています:今私はメールを送信することを確認するために私のサーバーを維持し、実行している必要があります、さもなければ、私は貴重なサーバーレスコンテンツを欠落しているでしょう.そして、これはさらに私がこの1つのスクリプトを一日一回実行する他のもののためにこのサーバーを使用しなければならないという事実によってさらに複雑です.理想的でない.
代わりに、この関数を雲にしましょう.最初に、我々はそれをAに変えますGoogle Cloud Function . 既存のスクリプトをPython関数でラップし、それを
次に、依存関係を定義します.私たちは
クラウド内のスクリプトのスケジューリング
今、我々は雲の中の関数としてスクリプトを持っています.我々は、新しいGoogleのクラウドスケジューラのジョブを作成することができます
我々の仕事をリストすることができます.
次の手順
雲の機能+雲スケジューラで行うことができますもっとたくさんあります!次のリンクに従ってください. Schedule more complex tasks with Cloud Scheduler Use Cloud Scheduler and Pub/Sub to trigger a Cloud Function App Engineからメールを送るMailjet or SendGrid
すべてのコードは、Google
cronユーティリティはcrontabファイルと呼ばれる非常にカスタマイズ可能な形式を持っています.あなたのスクリプトを頻繁に1分として実行することができますし、頻繁に1年に1回.
ほとんどの場合、cronジョブはいくつかの入力を受け取り、少し処理を行い、出力を生成します.入力は、Webページ、別のアプリケーション、データベースなどです.出力は、データベース内のテーブルに行を追加したり、ストレージにファイルを入れたり、メッセージを送信するためのものです.
cronジョブの使用
cronジョブには多くの用途があります:あなたが繰り返し可能な方法で起こりたいものはcronジョブにすることができます.
私がcron仕事を使うのが好きである1つのものは、私が頻繁に訪問するウェブサイトの目を保つことです.例えば、記事を見たいですHacker News Serverlessについては、私はそれを毎日チェックする時間がないし、すべてのポストのタイトルを見て、それがPythonについてのかどうかを確認します.
代わりに、私はcronジョブを書くことができます.その手順は、次のようになる.
#!/usr/bin/python
import requests
from utils import send_email
api_url = 'https://hacker-news.firebaseio.com/v0/'
top_stories_url = api_url + 'topstories.json'
item_url = api_url + 'item/{}.json'
def scan_hacker_news()
# Make a request to the API
top_stories = requests.get(top_stories_url).json()
serverless_stories = []
# Iterate over every story
for story_id in top_stories:
story = requests.get(item_url.format(story_id)).json()
if 'serverless' in story['title'].lower():
serverless_stories.append(story)
# If there are any, send an email
if serverless_stories:
send_email(serverless_stories)
これは、APIに要求を行い、すべての物語を繰り返し、タイトルの“Serverless”を持っている物語をフィルタリングし、私にメール(私たちは読者に運動としてその機能を残して)を送信します.私がLinuxマシンでcronジョブとして設定したいなら、ファイルに保存します
send_me_pythons.py
), 実行可能にするchmod 755 send_me_pythons.py
) そして、それを私のローカルビンに入れてください/usr/local/bin/send_me_pythons.py
).それから、私はcrontabを編集します
/etc/crontab
) 次の行を追加します.0 0 * * * /usr/local/bin/send_me_pythons.py
これは真夜中に1日1回スクリプトを実行します.私のようにhttps://crontab.guru/ 設定する前にcrontabが正しいことを確認します.以下に各フィールドの図を示します.# 0 0 * * * /usr/local/bin/send_me_pythons.py
# │ │ │ │ │ └── run this script
# │ │ │ │ └──── every year
# │ │ │ └────── every month
# │ │ └──────── every day
# │ └────────── at hour zero
# └──────────── at minute zero
crontabがセットされると、私のマシンは新しいcronジョブを取り上げ、指定したとおりに実行します.スクリプトをクラウドに動かす
これは素晴らしいですが、それは1つの巨大なダウンサイドを持っています:今私はメールを送信することを確認するために私のサーバーを維持し、実行している必要があります、さもなければ、私は貴重なサーバーレスコンテンツを欠落しているでしょう.そして、これはさらに私がこの1つのスクリプトを一日一回実行する他のもののためにこのサーバーを使用しなければならないという事実によってさらに複雑です.理想的でない.
代わりに、この関数を雲にしましょう.最初に、我々はそれをAに変えますGoogle Cloud Function . 既存のスクリプトをPython関数でラップし、それを
main.py
:import requests
from utils import send_email
api_url = 'https://hacker-news.firebaseio.com/v0/'
top_stories_url = api_url + 'topstories.json'
item_url = api_url + 'item/{}.json'
def send_pythons(request):
# Make a request to the API
top_stories = requests.get(top_stories_url).json()
serverless_stories = []
# Iterate over every story
for story_id in top_stories:
story = requests.get(item_url.format(story_id)).json()
if 'serverless' in story['title'].lower():
serverless_stories.append(story)
# If there are any, send an email
if serverless_stories:
send_email(serverless_stories)
注意:関数が呼び出される度に実際に起こる必要のある行だけがsend_pythons
関数.import文は、関数がロードされたときに一度だけ実行する必要があり、関数の外側に残されます.次に、依存関係を定義します.私たちは
requests
, それで、我々はそれを我々に入れなければなりませんrequirements.txt
:requests==2.20.0
そして、これを展開します gcloud
コマンドラインツール$ gcloud beta functions deploy test --runtime python37 --trigger-http
これによってエンドポイントが得られます.https://us-central1-[PROJECT_ID].cloudfunctions.net/send_pythons
とHTTPを作るGET
そのエンドポイントへの要求は、私たちの関数が実行される結果になります.クラウド内のスクリプトのスケジューリング
今、我々は雲の中の関数としてスクリプトを持っています.我々は、新しいGoogleのクラウドスケジューラのジョブを作成することができます
gcloud
コマンドラインツール$ gcloud beta scheduler jobs create http send_pythons_job \
--schedule="0 0 * * *" \
--uri=https://us-central1-[PROJECT_ID].cloudfunctions.net/send_pythons
これは私たちの仕事の名前を指定します.send_pythons_job
, プロジェクトごとにユニークです.また、上記のcrontabスケジュールを指定し、作成したHTTP関数にジョブを指し示します.我々の仕事をリストすることができます.
$ gcloud beta scheduler jobs list --project=$PROJECT
ID LOCATION SCHEDULE (TZ) TARGET_TYPE STATE
send_pythons_job us-central1 0 0 * * * (Etc/UTC) HTTP ENABLED
そして、スケジュールから仕事を実行したいなら、コマンドラインから実行できます.$ gcloud beta scheduler jobs run send_pythons_job
次の手順
雲の機能+雲スケジューラで行うことができますもっとたくさんあります!次のリンクに従ってください.
Reference
この問題について(クラウド機能をクラウドに移す), 我々は、より多くの情報をここで見つけました https://dev.to/googlecloud/moving-your-cron-job-to-the-cloud-with-google-cloud-functions-1ecpテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol