/// BANGBOO BLOG ///

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

March 30, 2022

GCP runs off functions pubsub on scheduler
run:言語自由、リクエストタイム60分
functions:リクエスト9分、関数をデプロイ
  gke auto pilot mode:制限がなくなる

■RUN
httpリクエストでコンテナを呼び出す
Google Cloud Run を使うまで - Qiita

■ハンズオン(run)
クイックスタート: ビルドとデプロイ  |  Cloud Run のドキュメント  |  Google Cloud
クイックスタート: Cloud Run に Python サービスをデプロイする  |  Cloud Run のドキュメント  |  Google Cloud
http responseを返すコードである必要があるみたいだ
 pubsubのpush httpでキックしてもいいかも
ローカルやterminalなどで作成しcmdでレジストリに入れるが、~/unco で下記作成
 Dockerfile
 .dockerignore
 main.py
コンテナイメージにパッケージ化しContainer Registry にアップロード
 gcloud auth application-default login
 gcloud run deploy (対話型でデプロイまでできるが、SAはデフォルトになる)
 gcloud builds submit --tag gcr.io/bangboo-run/unco (ビルドのみ、手動でコンソールでSAを指定しデプロイする)
コンソールでデプロイ(trigger/permission)-新ver更新のときTagを付けなおす?
 設定allow all traficとrequire auth(IAM)、権限allAuthenticatedUsersにCloud Run Invokerでブラウザアクセス駄目
 設定allow all traficとAllow unauthenticated invocations、権限allUsersにCloud Run Invokerではブラウザでも上手行く
 設定allow all traficとrequire auth(IAM)、権限allAuthenticatedUsersにCloud Run Invokerのとき
  IAMが要るのでターミナルから
  curl https://unco-zp2aehj5rq-an.a.run.app/ ではIAM要求の場合は駄目
  curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://unco-zp2aehj5rq-an.a.run.app/ で上手行く
 設定allow internal trafic onlyとrequire auth(IAM)、権限allAuthenticatedUsersにCloud Run Invokerのとき
  IAMが要るのでターミナルから
  curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://unco-zp2aehj5rq-an.a.run.app/ でも駄目
インターナルでIAMを使うにはどする?(vpcかvpc scかpubsubかEventarcだけ?terminalやschdulerは駄目?
 →IAMを使うようにすればallow all traficでいいのでは、allusersにinvokerを付与しなければいいし
 →怖ければVMを立ててそこからキック)
runのデフォルトのSAは別のrunでも同じSA実行として使い回されるので、別途作成したものを指定したい
 デプロイをコンソールで実行するとサービスアカウントを指定できる(runのPermissonでそのSAにinvokerを付ける)
ブラウザ+IAMをrunで使うにはIAP
 global ip、ドメイン、DNS、証明書、設定allow all traficとrequire auth(IAM)、権限各メールidにinvoker
LBはバックエンドにserverless network end groupを選べばいい

===
dockerfileに記載
FROM google/cloud-sdk:latest
 PythonモジュールでなくOS側にインストールする必要がありコンテナ化のDockerfileに記載できる
 /// BANGBOO BLOG /// - k8s にDocker記載がある

 python requirements.txtでは google-cloud-bigqueryはインスコできるがsdkは無理
  main.pyに from google.cloud import bigquery
  Dockerfileでイメージでgoogle-cloud-sdkが入ればPythonのsubprocessでgcloud cmdが打てる
  Dockerのベースイメージを FROM google/cloud-sdk:latest にして
   RUN apt-get update && apt-get install -y \
    python3-pip
   RUN pip install --no-chache-dir -r requirements.txt
  Cloud API client library for pythonを使うにはrequirements.txtに
   google-api-python-client

Dockerfileの動作はCloud buildのhistoryで見れる
RUN which gcloud
RUN echo $PATH

OSの実行ユーザとコンテナ内のユーザを合わせないとファイル読み込み等ができない
 permission deniedになる
 Cloud runのそれぞれのユーザが誰なのか分からない(上記でわかるが)
 Dockerfileに RUN chmod -R 777 /app と入れてしまう

===
runとscheduler/pubsubの連携は eventarc triggerの設定が必要そう
 設定したrunのサービスのトリガー項目に
  google.cloud.scheduler.v1.CloudScheduler.Run.Jobを設定(スケジューラなら)
 色んなAPI有効が必要 クイックスタート: Pub/Sub メッセージを使用してイベントを受信する(Google Cloud CLI)  |  Eventarc

■Scheduler
 get で https://run-service-name-.kuso.run.app
 0 7 * * 1 毎週月曜の6時
 Auth headerに add OIDC token
 runのサービスにinvokerを付けたSAを指定
 5回リトライ/最大リトライ0sで制限なし/バックオフ最小180s最大1h/期間倍5回
  http経由ならデフォルトのサービスアカウントにCloud service agentロールが必要

===
■Run jobs
runはジョブならFlask不要

Procfile作成
web: python3 main.py

pipしたいものは requirements.txtに書く
google-cloud-bigquery

main.py作成
コードを書く from google.cloud import bigquery

gcloud auth application-default login
 run job実行とコンテナのプロジェクトを合わすなら
 gcloud config set project bangboo-runs
 下記は通常不要なようだ
 gcloud auth configure-docker

Buildpackを使用してコンテナをビルド
 Cloud buildデフォルトサービスアカウントにGCSバケット権限必要 123456@cloudbuild.gserviceaccount.com
gcloud builds submit --pack image=gcr.io/bangboo-runs/run_data_to_bq
 bangboo-runsのコンテナレジストリにrun_data_to_bqができている

Cloud runでジョブを作成
gcloud beta run jobs create job-run-data-to-bq \
    --image gcr.io/bangboo-runs/run_data_to_bq \
    --task 1 \
    --set-env-vars SLEEP_MS=10000 \
    --set-env-vars FAIL_RATE=0.5 \
    --max-retries 0 \
    --region asia-northeast1
(gcloud beta run jobs create --helpで見るとenv-varのハンドルは何もないのでコードでエラースローする必要がありそう、そこでスリープとか使ってエラーを吐くと、リトライはしてくれそう。taskを複数にすると同時に何個も動く)

ローカルでテスト
docker run --rm -e FAIL_RATE=0.9 -e SLEEP_MS=1000 gcr.io/bangboo-runs/run_data_to_bq

Cloud runでジョブを実行
gcloud beta run jobs execute job-run-data-to-bq

============
■Flask
from flask import Flask #モジュール読み込み
app = Flask(__name__) #Webアプリ作成
@app.route("/") #エンドポイント設定(ルーティング)
def index():
if __name__ == '__main__': #Webアプリ起動
  app.run(debug=True)

============
■functions
コンソールでコード書いてもデプロイエラーになると入力分が消える糞
 テキストで書いてコンソールにペーストしてやった
functionsもhttpで初めに実行される関数はFlaskのflask.Requestオブジェクトを受取る
requirementsは必要?import文を本体に書いていれば良さそう
 標準ライブラリ以外はrequirementでインスコでは?
 pprint.pprintでエラー、requirementの場合バージョンも必要そう
一時ファイルは/tmpというDIRであるがメモリーに保持される
テストでJSONを書く場合はキッチリ書く(文字はダブルクォート等)
{
"test" : "aaa"
}
functions invoker等のIAMはプロジェクトレベルではなく各functionsに対しての設定が必要そう
functionsのデプロイ時にinternal trafic や allow all trafic等の変更ができる
functions で gcloud cmdが打てない、SDKがないから
 クライアントライブラリでは? > 非力そう、、cloud runならgcloud cmd打てるようだ
 Cloud クライアント ライブラリ  |  Cloud APIs  |  Google Cloud
  functionsはちょっとした加工程度しか無理?
逆にgcloud cmdはダメだが、requirementでライブラリはpipインスコ自由では?

topicという入れ物
 メッセージがpublish投入される(コンソールでも作れるのでinternal traficのトリガーにできる)
 subscriptionでTopicのデータ取得状況を管理
 subscriptionからsubscribeでメッセージの取得
メッセージは重複する仕様
 Topicにメッセージを入れると勝手に紐づけられたアプリが動く
  フィルターがあり条件を設定をできるがTopicを沢山作ればいいのでは
 サブスクのpullはメールボックスみたいな入るだけ
  functionsのpubsubで作った指定のTopicにメッセージが入れば動く
 サブスクのpushも送信メールボックスみたいで送る
  functionsのhttpで作ったエンドポイントに送られる
 pullは謎に上手く行かなくなる?pushの方が安定かも
  でもトラフィックの種類でpullならinternal trafic OK
   pubsub pull -> functions:pull なら internal traficでもOK
   pubsub push -> functions:push は http なので internal traficダメ
 functionsのデプロイ時にinternal trafic や all等の変更もできる



twitter
Hatena
Google Buzz
newsing
Yahoo!
Buzzurl
Technorati
del.icio.us
Choix
Iza!
Livedoor Clip
Facebook
Evernote
 

Posted by funa : 07:59 PM | Web | Comment (0) | Trackback (0)


PhotoGallery


TWITTER
Search

Mobile
QR for cellphone  QR for smart phone
For mobile click here
For smart phone click here
Popular Page
#1Web
#2Hiace 200
#3Gadget
#4The beginning of CSSレイアウト
#5Column
#6Web font test
#7Ora Ora Ora Ora Ora
#8Wifi cam
#9みたらし団子
#10Arcade Controller
#11G Suite
#12PC SPEC 2012.8
#13Javascript
#14REMIX DTM DAW - Acid
#15RSS Radio
#16Optimost
#17通話SIM
#18Attachment
#19Summer time blues
#20Enigma
#21Git
#22Warning!! Page Expired.
#23Speaker
#24Darwinian Theory Of Evolution
#25AV首相
#26htaccess mod_rewite
#27/// BANGBOO BLOG /// From 2016-01-01 To 2016-01-31
#28竹書房
#29F☆ck CSS
#30Automobile Inspection
#31No ID
#32Win7 / Win10 Insco
#33Speaker
#34Arcade Controller
#35Agile
#36G Suite
#37Personal Information Privacy Act
#38Europe
#39Warning!! Page Expired.
#40GoogleMap Moblile
#41CSS Selectors
#42MySQL DB Database
#43Ant
#44☆od damnit
#45Teeth Teeth
#46Itinerary with a eurail pass
#47PHP Developer
#48Affiliate
#49/// BANGBOO BLOG /// From 2019-01-01 To 2019-01-31
#50/// BANGBOO BLOG /// From 2019-09-01 To 2019-09-30
#51/// BANGBOO BLOG /// On 2020-03-01
#52/// BANGBOO BLOG /// On 2020-04-01
#53Windows env tips
#54恐慌からの脱出方法
#55MARUTAI
#56A Rainbow Between Clouds‏
#57ER
#58PDF in cellphone with microSD
#59DJ
#60ICOCA
#61Departures
#62Update your home page
#63CSS Grid
#64恐慌からの脱出方法
#65ハチロクカフェ
#66/// BANGBOO BLOG /// On 2016-03-31
#67/// BANGBOO BLOG /// From 2017-02-01 To 2017-02-28
#68/// BANGBOO BLOG /// From 2019-07-01 To 2019-07-31
#69/// BANGBOO BLOG /// From 2019-10-01 To 2019-10-31
#70/// BANGBOO BLOG /// On 2020-01-21
#71Bike
#72Where Hiphop lives!!
#73The team that always wins
#74Tora Tora Tora
#75Blog Ping
#76無料ストレージ
#77jQuery - write less, do more.
#78Adobe Premire6.0 (Guru R.I.P.)
#79PC SPEC 2007.7
#80Google Sitemap
#81Information privacy & antispam law
#82Wifi security camera with solar panel & small battery
#83Hope get back to normal
#84Vice versa
#85ハイエースのメンテ
#86Camoufla
#87α7Ⅱ
#88Jack up Hiace
#89Fucking tire
#90Big D
#914 Pole Plug
#925-year-old shit
#93Emancipation Proclamation
#94Windows env tips
#95Meritocracy
#96Focus zone
#97Raspberry Pi
#98Mind Control
#99Interview
#100Branding Excellent
Category
Recent Entry
Trackback
Comment
Archive
<     July 2022     >
Sun Mon Tue Wed Thi Fri Sat
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Link