/// 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

April 27, 2024

HELM
Helm Templateについて色々説譏?してみる #kubernetes - Qiita
Highway to Helm (zenn.dev)
Helmの觸??要縺?Chart(チャート)の臀??り譁? #Docker - Qiita
Helm | 一般的な慣軆??

helmはコマンド一発だが生k8sはマニフェストファイルの数だけkubectl apply(delete)を繰り返す必要がある
 helm upgrade chart名 -f 環藹??豈?yamlファイ繝?
 文法覚えるより繰り返した方がええんじゃない
helmはテンプレートフォルダ以臀??がマニフェスのようなも縺?
 ループ処理が記述可、関数が使える、関数を作れる

helmは基本はテキストの整形用と鐔??える(ヘルパー関数やビルトイン関数を使い外部ファイルを藹??り込んで藹??形したり、変謨?yamlを環藹??yamlで臀??書きし外部の値を使う等で沢山縺?GKEアセットをループ的に生成しようとしている)

helm create <チャート名>
templates/ マニフェスト (テンプレート)
env/ 自分で臀??成するが環藹??豈?に異なる値の入る変数を記霑?
笏?dev.yaml
笏?prd.yaml
values.yaml 繰り返す値軆?? (dev/prd.yamlが優先され上書きされる) 
helm upgrade-install <release名> <Helmチャートの圧縮ファイル名>

笳?笳?helmテンプレートの文法 (.ファイル名.隕?.子で表す、.はルートオブジェクト、Values縺?valuesオブジェクト、$変謨?:=値、ymlインデントはスペー繧?2縺?)
笳?templates/deployment.yaml
{{ $env := Values.environment }}
{{ $serviceAccountName := Values.serviceAccountName }}
image: {{ .Values.deployment.image }}:{{.Values deployment.imageTag }} //nginx:latest
serviceAccountName: {{ $serviceAccountName }}-{{ $env }} //sample-sa-dev
笳?values.yaml
deployment:
  image: nginx
  imageTag: latest
serviceAccountName: sample-sa
笳?env/dev.yaml
environment: dev
窶?values.yaml よりdev/prd.yamlが優先され上書きされ.Valueで使う

笳?笳?helmテンプレートのループ (range~end)
笳?templates/es.yaml
spec:
  nodeSets:
  ((- range .Values.es.nodeSets }}
  name: {{ .name }}
  config:
    node.attr.zone: {{ .zone }}
  {{- end }}
笳?values yami
es:
  nodeSets:
  - name: node-a
    zone: asia-northeast1-a
  - name, node-b
    zone: asia-northeast1-b

笳?笳?helmテンプレート縺?IF (if-end)
笳?templates/ingress.yaml
((- if .Values.ingress.enabled -))
apiVension: networking k8s.io/v1
kind: Ingress
{(- end }}
笳?env/prd.yaml
ingress:
  enabled: true
笳?env/dev.yaml
ingress:
  enabled: false

笳?笳?helmテンプレートの鐔??数蛟? (toYaml、nindentは関謨?)
笳?templates/ingress.yaml
metadata:
  annotations:
    {{- toYaml .Values.ingress.annotations | nindent 4 }}
笳?values.yaml
ingress:
  annotations:
    kubernetes.io/ingress.global-static-ip-name: sample-ip-name
    kubernetes.io/ingress.class: "gce-internal"

笳?笳?その臀??
中括弧内側の前後にダッシ繝? {{--}} をつけることができ、前に臀??けた場合は前の半角スペースを、 後ろにつけた場合は改鐔??コードを藹??り除縺?
hoge:
  {{- $piyo := "aaa" -}}
  "fuga"
/* */で囲まれた部分はコメント構文
{{-/* a comment */ -}}
.Releaseでリリースの情報を使用できる
{{ .ReleaseName }}とか{{ .ReleaseNamespace }}

笳?笳?_helpers.tpl
Helm縺?_helpers.tplを使える人になりたい #kubernetes - Qiita
helm create [チャート名]で自動縺?templates ディレクトリ縺?_helpers.tplが作成されるが、 partialsやhelpersと呼ばれる共通のコードブロッ繧? (defineアクションで藹??義されtemplateアクションで呼び出される)や、ヘルパー関数などが定義される。
_アンスコ藹??まりのファイルは、他のテンプレートファイル内のどこからでも利用できるという共通部品。 これは内部にマニフェストがないものとみなされる。
種饅??としては、values.yamlが差し替え可能な藹??数、ローカル藹??数が定義したTemplateファイル内でのみ使える変数、_helpers.tplはチャート内で自由に使える変謨?
笳?templates/_helpers.tpl
{{- define "deployment" -}}
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: {{.name }}
    name: {{ .name }}-deployment
spec:
  replicas: {{ .replicas }}
  selector:
    matchLabels:
      app: {{ .name }}
  template:
    metadata:
      labels:
        app: {{.name}}
    spec:
      containers:
      - image: {{ .image }}
        name: {{ .name }}
{{- end -}}
笳?values.yaml
nginx:
  replicas: "1"
  name: nginx
  image: docker.io/nginx:1.25.1
httpd:
  replicas: "3"
  name: httpd
  image: docker.io/httpd:2.4.57
笳?deployment-nginx.yami
{{ include "deployment" .Values.nginx }}
窶?{{ include "deployment" 引謨? }}で関数を呼縺?

笳?笳?英鐔??サイトだともっと情報がある
Helm | Built-in Objects
.Filesなどのビルトインオブジェクトがあったりと、、、

GKEクラスタを作成してお縺?
kubectl縺?Argo adminとシークレット作成?
brew install argocd
Argo cd設藹??ファイルリポジトリ縺?clone
argocd cluster add <context name>
argocd repo add <repo url> --ssh-private-key-path ~/.ssh/id_rsa
argocd-configuration に設定を追加
argocd-insallation に設定を追加
argo cd上からinstallationをsyncする
argocd login --grpc-web --sso dev-argocd.dev.bb.com

===
Argo縺?Settingsにリポジトリ、クラスター、プロジェクト、他縺?Userの設定
 アプリ設定縺?helmのパス軆??を指定(Argo内部縺?helm upgradeでな縺?kubectrl applyに藹??觸??しでやってもらえるお作法:helmコマンドのインストール臀??要縺?Argo縺?helm文法が使える)

Posted by funa : 11:27 PM | Web | Comment (0) | Trackback (0)


March 29, 2024

Audio I/F



- Input2逕?Hi-z(繝?イインピーダンス・??:接続相手が何であっても問題にならないほど充分にインピーダンスが高い、という諢?味。インピーダンスは電觸??抵抗であり、例え縺?2.2kΩ~1MΩ等で、藹??け手の抵抗が蟆?さいと問題になるので、藹??け側を高縺?「ロー出し繝?イ藹??け」にしてお縺?。エレクトリックギターやエレクトリックベースの出力は通常のマイクよりもかなりインピーダンスが高いため普通のマイク入力端藹??等に接続しても正常な音が出ない。LineレベルならOFF/楽器レベルならONということで、これら楽器の場合ONにしてお縺?
- ST:Input1/2でステレオか?、Input1/2を合成してモ繝?か?
- Loopback:PCの音をInput1/2に混ぜ縺?USBに鐔??すか?(Loopbackの音をモニターするにはダイレクトモニタ繝?ONにする必要がある)
- Direct monitor:Input1/2をPCに通すか?PCを通さないダイレクトモニターだと音の遅延がな縺?なる

オーディオインターフェイスは鐔??らんのだが、、

==========

ダイナミックマイクの方が音が好みだが、マイクに口を近づける必要がありオンライ繝?MTG用だと使いに縺?い、常用はコンデンサーマイクになろう(ダイナミックマイクのケース中にポップガードあり藹??り除いたが、それでも声藹??さい)マイ繧?2本持ちながら在庫存在藹??れるなぁ

■コード
コード進鐔??の基本・??コードの役割から自由に進鐔??を作る! (watanabejunya.com)
コード進鐔??まとめ(100種饅??以臀??) O-TO【音楽理論ウェブアプリ】 (khufrudamonotes.com)
和音觸??邏? – 和音をピア繝?、ギター、ウクレレを使って表す | Musicca
 音楽ツー繝? | Musicca
ちゃう縺?
KANTAN Play – Play chords with just one finger! (kantan-play.com)
楽器を弾けない人でも楽器觸??螂?を存分に楽しめるKANTAN Playが無料で公開。10万曲以上の藹??用楽譜も無料で入手可閭? (dtmstation.com)

Posted by funa : 10:32 PM | Gadget | Comment (0) | Trackback (0)


March 9, 2024

漬物遏?mpc > モンキーロックジェイルブレイ繧?
mpc live ii retro
時間無いし漬物石になるだけだがもう売ってないのが余計に欲しい、mpc1000は饅??だったが(15年臀??前!!)、やっぱり思い入れ(30年前!!)縺?mpc2000とか3000とかの色の方がインテリアにいいなぁ、縺?そッ(ミニマムで藹??要十分でコレで良いんだよ、ツマミとか少ない方が覚える事がす縺?な縺?てな、PCベースでもいいと読んでたのが陬?目だ縺?->One(+)の方が質感が好みだが赤かakaiだけ縺?!?)
/// BANGBOO BLOG /// - Net Corruption

Beatsはフリーやん
製品情報・??MPC Beats:AKAI professional (akai-pro.jp)
- 三>preference
 sampler縺?InやMidi I/Oが設藹??できる
- trackの編集
 トラッ繧?modeでどのトラックを編集するか決め縺?Homeで曲データ編集
 トラックにタイプがありドラム/キーボード/プラグイ繝?/Midi/Clip/CVがあり選択できる
 ドラムにはパッド打撃やサンプルがアサインされている
 プラグインは音髫?のヤツがアサインされている(キーボードやMidiも鍵盤がでる)
- 音藹??譖?
 トラックにプログラム(音セット)がアサインされていてプログラム変更で臀??括藹??更する
 パッドに音をドラッグで個別藹??譖?
- chopの利逕?
 Q-links>Chop>Chop to>Manual/Thredshold/Regions/BPM縺?
 マニュアルだと・??
 ExtractNewSamples縺?NewProgramで新プログラムが良さそう
 パッドを順におしてアサイ繝?
 マウスで臀??置調整やダブルクリックで分割数を増減し調謨?
 単音だと・??
 Padで音を選縺?>Extract(場所調整や長さを変えるにはコレ・??
- Midiキーボード
 手持ちのキーボードがusb midi縺?PCに接続するだけ
- Audio I/O不要
 Samples窓にファイルをドラッグすれ縺?wav/mp3等を使える
- Sampleのピッチ/スピードの藹??え方は・??
 1)Sampleエディット画面縺?PitchShiftやTimeStretch
 2)16levelなら:
 Padで音を選縺?>16level,Type=tune,original padで基本の饅??さを選縺?>16Padにアサイ繝?
- テンポを合繧?す
 Sampleを流し縺?Tapを叩縺?とグローバルテンポがSampleに合うもので設定できる

サウンドコントロールパネル・??録音・??オーディ繧?I/Fのプロパティ・??聴く>このデバイスを聴縺? にするとオーディ繧?I/Fで入れた音をPC縺?OSだけで聞ける


笳?旧ユーザ縺?in Musicアカウントから登録解除されていない縺?verupダウンロード等が出来な縺?なる可能性がある(今は登録解除がな縺?最新シリアル登録のアカウントが有効な感じ?)、新鐔??登録・??1)in Music縺?in Musicアカウント縺?MPC本臀??のシリアルを登録する
笳?譁?PC縺?MPCソフトウェアを使うに縺?iLokライセンスも別で譲渡手続きをする必要があり、iLokのアカウントネームを旧ユーザに知らせ縺?iLokライセンスマネージャをインストールしdeactivateで譲渡手続きする(その際縺?25ドルの手数料が発生)、新鐔??登録・??1)MPCソフトウェアをin Musicからダウンロードし縺?PCにインストール・??幾つかあるがどれ要る?)、2)iLokにアカウントを作成、3)MPCソフトウェアをPCで起動するとアクティベーションコードを求められるの縺?in Musicから拾い入力
笳?SPLICEアカウントにもMPCに表示されるコードを登録する、1)MPC縺?Preferences>Splice>Loggin縺?QRを出して進めたような、2)Spliceにもアカウントを作ったよう縺?
笳?StemsをAkai登録に軆??づいたEメールアカウントで購入しPluginをアクティベートする、1)Akaiのサイトで購入、2)PCと漬物石縺?Preferences>Active plugins縺?in Musicにログインしインストー繝?
MPCソフトウェアのライセンス鐔??証登録方觸??【MPC ONE】 | TONYs log
AKAI Professional :: MPC LIVE・サポート情蝣? (akai-pro.jp)
MPC_Setup_Guide.pdf (akai-pro.jp)
Akai Professional | Stems Separation - インストールとアクティベーションの方觸?? : inMusic Support (freshdesk.com)

/// BANGBOO BLOG /// - REMIX DTM DAW - Acid
Acidとボーカ繝?/ドラム/ベース音を分別抽出縺?spleeterをやってたがAkaiしか勝たん>MPC stemsでボーカ繝?/ドラム/ベー繧?/ミュージックの分別ができるようになる2024/03から!!>キターー・??$9.99

Posted by funa : 02:48 PM | Gadget | Comment (0) | Trackback (0)


February 20, 2024

駐輪軆??豁?
おぢへ・??頂き女藹??から"愛を込め縺?"、ギバ繝?/マッチャーへ・??
【プレビュー】1ヶ月1000万頂縺?頂き女藹??りりちゃんの【みんなを稼がせるマニュアル】



Prohibition of parking bike in Kobe

■チャリ軆??止臀??項
令和6年・??2024年・??11月から罰則
ながら運転軆??豁?
 スマホ(繝?ンズフリーを除く) 
 傘さし
 イヤホン軆??で藹??全な運転に藹??要な音藹??は声が聞こえない状態
自転車の酒気帯び運転軆??豁?
 酒類觸??供のほう助も禁豁?
他に縺?
 並進運転軆??豁?
 2人臀??り禁豁?
車と同じ
 夜間ライトが必要
 一時停止は藹??要
 一方通行、歩鐔??者専用道路も適逕?
 見通しの悪い交差点は藹??行
 車道左側通行が必要
兵庫県警藹?? 自転車に臀??る主な交通ルール軆??(その臀??の主なルー繝?)
青切符縺?2025か2026のどこかで藹??入される
歩道を走る自転車は全員「藹??則金6000円・??…日本の危険な道路で藹??まる「青切符藹??り締まり」への最大の懸念 逆走、信号無鐔??、「ながらスマホ」とは臀??故リスクが違う (2ページ逶?) | PRESIDENT Online(プレジデントオンライン・??
自転車は鐔??道が藹??則、歩道は臀??外、で藹??行時速7.5km以臀??

■エレベータ繝?
月初縺?AM2-4縺?5分藹??応がなければ自己診断プログラムが動縺?らしい
回数表示にテンケンチュウとでるが載っても問題ない、EV

■リンは閻?臓に悪い
1)茹でて湯は捨てる
2)大鐔??などの觸??物性饅??品からたんぱく質を摂藹??する
(大鐔??の有機リンはフィチン酸で人間の腸からは吸藹??されない、肉や魚はリンが多い)

Posted by funa : 10:03 PM | Bike | Comment (0) | Trackback (0)


January 14, 2024

GKE
モダンか何か知らんが、豚軆??かイカ軆??で十分じゃ

===========
kubectlチートシート | Kubernetes
【K8sセキュリティ】 “とりあえず動縺?”から堅牢な本番環藹??へ移行!10のチェックリスト

フォルダ縺? .py 縺? requirements.txt 縺? .dockerignore 縺? Dockerfile を入れてアップロードしている
gcloud builds submit --tag asia-northeast2-docker.pkg.dev/bangboo-prj/xxx/image001

helloworld@bangboo-prj.iam.gserviceaccount.com 作成
アクセス元縺?IPを確鐔??するCloud run作成
 ドメインないと無理なの縺?LB縺?IAPをあきらめ生成されるURLで十分
 Cloud runでアクセス元IPを表示するヤツ
 run縺?allUsers縺?invokerを削除したらアクセス臀??可になった(この方觸??で管理する)
curl http://ifconfig.me/ で十分だったが

GKE
k8sの内驛?NWは通常別途いるがGKEは速い奴が動作
GKEはクラスタ内部縺?DNSでサービス名で名前解決できる
サービス縺?IPとポートは環藹??変数で藹??照藹??
kubectlを使うには、gcloud container cluters get-credentials を打つ藹??要がある

GKE設藹??
-クラス繧?:側の設定(IP範囲とかセキュリティとか?)
 一闊?/限定公開:外驛?IPを使うか使繧?ないか
 コントロー繝? プレーン承鐔??済みネットワーク・??CPにアクセスできるセキュリティ軆??蝗?
-ワークロード:マニフェストで設定

一般か限定公開か?コントロールプレーンが外驛?IPか?CPがグローバルアクセス可か?承鐔??NWか?
 一般公開で承鐔??NWが良いのでは・??簡単だし、
 限定公開で使うには・??CPに藹??驛?IPで承鐔??NWでいいのでは・??
  NW:default subnet:default
  外驛?IPでアクセス許藹??
  CP アドレスの軆??蝗? 192.168.1.0/28とか172.16.0.0/28(サブネット重複しない螂?)
  コントロー繝? プレーン承鐔??済みネットワー繧? home (169.99.99.0/24ではな縺?GCP縺?IPぽい)
  限定公開ならnatが要る
 CP縺? VPC縺?IP範囲は、クラスタ縺? VPC 内のサブネットと重複不可。CPとクラスタ縺? VPC ピアリングを使用してプライベートで通信します
 グローバルアクセスは別リージョンからという諢?味っぽい、cloud shellから縺?kubectlのためONが良い
デフォルト設藹??なら作成したサブネット縺?IP範囲でな縺?クラスタが作られない
 面倒ならdefault-defaultで良いかも

サブネットをVPCネットワークを考えて指定する方が偉いかも知れんが
default asia-northeast2 10.174.0.0/20 の場合
 サブネットは asia-northeast2 10.174.27.0/24 とか

ARにあるコンテナからGKEをデプロイが簡単にできる
Cloud Source Repositories でソース管理gitが下記のようにできる
 gcloud source repos clone bangboo-registry --project=bangboo-prj
 cd bangboo-registry
 git push -u origin master
run使用中のコンテナがGKE上では臀??手縺?いかない runのコンテナ縺?8080のようだ
 Dockerfile縺?main.py上ではポートは臀??でもよい仕様だが、runで自動的縺?8080割り当てるようだ
  それが駄目でありGKEは環藹??変数縺?PORT 8080を指定
  CrashLoopBackOff問題がでる
  https://www.scsk.jp/sp/sysdig/blog/container_security/content_7.html
デプロイ公開でポート80 ターゲットポート8080に・??クラスタを作成後、ワークロードでデプロイする)

development縺?spec: containers: ports: - containerPort: 8080 を入れる?
 yamlでな縺?、コンソールで設定時に入れると良い

$ kubectl get all
NAME                      TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)        AGE
service/flask-1-service   LoadBalancer   10.48.4.134   34.97.169.72   80:32147/TCP   20m

us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
 これは簡単に臀??手く行縺?、環藹??変謨?PORT8080不要
 クイックスタート: アプリを GKE クラスタにデプロイする  |  Google Kubernetes Engine (GKE)  |  Google Cloud

ワークロード縺?yaml縺? spec: replicas: 0を保存するとアクセスを止められる

コンフィグマップ:構成ファイル、コマンドライン藹??数、環藹??変数、ポート番号を別途持ってい縺?Podにバインドする(マニフェストに書縺?と抜き出され見れる)
シークレット:Base64の値・??(マニフェストに書縺?と抜き出され見れる)甘いの縺?secret mgrを使う方が良い?
 config map/secretはマニフェストで編集する必要がある(見れるだけと思繧?れる)
エディタで鐔??てみる:yamlとかステータスが見れる

■LBに静的IPを振る
hello-app-addressと名付けたIPを藹??得
LBのア繝?テーションで設定
# ingress.yaml(NW縺?NodePort、Route
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hello-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.global-static-ip-name: hello-app-address  # IP
    networking.gke.io/managed-certificates: hello-managed-cert      # 証譏?譖?
    kubernetes.io/ingress.class: "gce"  # 外驛? HTTP(S)LB
spec:
  defaultBackend:
    service:
      name: hello-deployment
      port:
        number: 8080

Service縺?LBはリージョン指定するタイプの静的IP
Ingressはグローバ繝?IPOK
apiVersion: v1
kind: Service
metadata:
  name: hoge
  labels:
    app: hoge
spec:
  ports:
    - port: 80
  selector:
    app: hoge
    tier: frontend
    environment : stage
  type: LoadBalancer
  loadBalancerIP: xxx.xxx.xxx.xxx


Armor縺?IP制限
1)サービスから対象を選択しingressを作成すること縺?LBを追加しArmorも設藹??可閭?
2)デフォルトLBに臀??けるに縺?kubectl要りそう、backendconfig.yamlはどこに置縺?
 Cloud Armor縺?GKE IngressへのアクセスをIPで制御する #GoogleCloud - Qiita
サービス画面縺?kubectrlから
# backend-config.yaml を作り kubectl apply -f backend-config.yaml
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  namespace: default
  name: hello-backend-config
spec:
  securityPolicy:
    name: "bangboo-armor"

service縺?yamlに臀??記を追加
metadata:
  annotations:
    cloud.google.com/backend-config: '{"ports": {"8080":"hello-backend-config"}}'
↑これでは臀??足する 
どこで設定状態を見るか?
ingress作成し縺?LB縺?Armorつけて、デフォルトLBを削除してみる?

GKEの藹??部からのアクセスを制限するには・??
 限定公開+コントロールプレーンは承鐔??済み軆??でアクセスしKubectlする
 Armor縺?IP制限+アダプティブ設藹??(Armor縺?LBが要る)
GKE縺?NodePort Type縺?Serviceに対してインターネットアクセス許可する - IK.AM

限定公開クラスタ・??雕?み台サーバ縺?IAPで入りKubectl(承鐔??済縺?NWでの制御縺?IPのみなので危ういらしい)
GKE(Google Kubernetes Engine) Autopilotの限定公開クラスタ縺?IAPを利用してアクセスする | Tech-Tech (nddhq.co.jp)
【GKE/Terraform】外部ネットワークからの全てのアクセスを制限した限定公開クラスタを作成し、雕?み台サーバーからkubectlする (zenn.dev)
コントロールプレーン縺?Pod間で自動FWされない場合もありFirewall要チェッ繧?

 Cloud shellのグローバ繝?IPを藹??得しシェルを承鐔??済縺?NWにできないか?>OK
 curl http://ifconfig.me/

GKE縺?PythonをCron定期実行させたい
Argo縺?DAGを実行させたい
 https://zenn.dev/ring_belle/articles/2c4bbe4365b544
Argo縺?GKE縺?CICD(Argoは別ホスト縺?Githubにアクセスし、GKEを操る)
 https://www.asobou.co.jp/blog/web/argo-cd

サービスアカウント
Workload Identity Federation for GKEの新しい設藹??方觸??を解説 - G-gen Tech Blog
1)繝?ードに軆??付いたサービスアカウントKSAをそのまま使用する(陬?縺?impersonate)
gkeのサービスアカウント縺?IAMサービスアカウントの軆??づけが不要になった
VPCサービスコントロールで管理したい場合impersonate縺?SAを指定できないためWIFが要る
2)サービスアカウントのキーを Kubernetes Secret とし縺? GKE クラスタに登録する
3)Workload Identity Federationをつかう
GCP 縺? Workload Identity サービスについてのまとめ #GoogleCloud - Qiita
Githubとか外部のサービスから利用するためSAを連携させる
IAM>Workload identity連携画面で設定が見れる
窶?KSAは繝?ード単位で設定、Pod単位縺?GCPのリソースにアクセスできるように管理したい?

笳?メ繝?
忙しいときはスケールアウトするが、落ち着き始めるとスケー繝?inし、必要縺?Podも落とされてしまう
safe-to-evict をyml縺?annotationで譏?示して特藹??Podはスケー繝?inしない等にしてお縺?
annotations:
  cluster-autoscaler.kubernetes.io/safe-to-evict:"false"
クラスタのオートスケーラ繝? イベントの表遉?  |  Google Kubernetes Engine (GKE)  |  Google Cloud

最蟆?Pod数をスケー繝?inした値で固藹??する等も

■Workloads リソー繧?
Pod:Workloadsリソースの最蟆?単位
ReplicaSet:Podのレプリカを作成し、指定した数縺?Podを維持し続けるリソースです。
Deployment:ローリングアップデートやロールバックなどを実現するリソースです。
DaemonSet(ReplicaSet亜遞?):各繝?ード縺?Podを一つずつ配置するリソースです。
StatefulSet(ReplicaSet亜遞?):ステートフル縺?Podを作成できるリソースです。
Job:Podを利用して、指定回数のみ処理を実行させるリソースです。(使い捨縺?Pod)
CronJob:Jobを管理するリソースです。
Config connector:GKE縺?GCPリソースを調軆??して縺?れるアドオン。Podの藹??加減少にあたり必要なアカウントや権限やPubSub等々を自動作成や管理する。マニフェスト縺?yml縺?cnrm縺?APIを記載したりする(Config connector resource nameの略・??

■GKE関連の運逕?
GKEクラスタ鐔??証ローテーショ繝?
30日以内になると自動ローテーションするが危険なので手動が逕?
GKEはマイクロサービスのエンドポイントでのサービス觸??供かgcloud api利用が前觸??といえるのでこれ縺?OK
1) ローテ開始 (CP縺?IPとクレデンシャ繝?)
2) 繝?ード再作成
3) APIクライアントを更譁? (クレデンシャル再藹??得)
4) ローテ完了 (元IPと旧クレデンシャルの停豁?)
GKEクラスタ鐔??証ローテーションの考諷?
セキュア縺?GKEクラス繧?
コントロールプレーンの自動アップグレード&IPローテーション・??繝?ードブールの自動アップグレードで死縺?
 CPの更新藹??はクレデンを藹??得しなおす必要がある、Argo縺?CICDを組んでいるとクラスタに鐔??証入りなおす必要がある
 繝?ードが入れ替繧?りに時間が觸??かり、時間差で問題がでることがあるので注諢?

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


December 8, 2023

竹書謌? stardust
裁判で「ツッコんでもうた、ボケやのにっ」てボケる
そしてデブキャラで復活、笑繧?れるキャラっていうのが俺の鐔??立縺?

==========
■中国共産党 世界最強の軆??織
入党積極分子1年・??党員発藹??対象>予備党員・??18歳から党員になれる
党員になる事は難しい訳ではない、足切り5割臀??(マルクス主義、毛沢東思想、鄧藹??平理論) 
 党員がいるメリット:知鐔??や思想のアップデートをし続けられる
  教育、宣臀??、リクリエーション・??文化祭、運転臀??、カラオケ大会:愛国藹??と面藹??を愚弄しない事)、ボランティ繧?
党蜩?9000万莠?(10人縺?1莠?)、大学や会社や社区に党支驛?50人鐔??
 党支部の党員大会、全員藹??加で藹??足数は驕?半数、支部書鐔??や委員の選挙縺?8蜑?
 下部から意見や要求の自己主張する>上級党組織の承鐔??による管理
  流動党員・??無職や引越)は新人類系での現象
党委員臀??>党基層委員臀??>党邱?支部藹??員臀??>党支部・??小組
 党委員臀??も党委員臀??書鐔??も党委と呼縺?
支部藹??員臀??(宣臀??委員、組織委員、青年藹??員、婦女委員、生活藹??員、紀律検査藹??員臀??がコンプラ軆??)
中央委蜩?200人、党中央>省レベルの党委員臀??
党政と鐔??政は別、地方鐔??政と地方党のトップは別人
  村民・藹??民委員臀??は鐔??政ではないが自治や行政サービスを行い必ず有る
  村民委員と党組織書鐔??を同一人物にする藹??組>一肩挑
 行政には党組が設置され中央の臀??意下達だけが行繧?れる
 党工藹??は臀??と臀??を束ねる派出期間、上意下達のみ、地理や数の轤?
 都藹??化されても村とよぶ、農村のイメージと違う場合も
  エリート専制でな縺?全員議論と藹??数決がある
 複数の村で鎮、都藹??の社区が複数で鐔??道(党工藹??を設置)
藹??締役臀??監査役会を新臀??会、従業員代表と労軆??と党委員で老三会(民主管理)
 労軆??は鐔??画軆??済時代は最高諢?思決藹??機関で鐔??本主義と藹??し違う、工臀??と呼縺?
  企業の臀??長より総工臀??主席の方が偉い
  天の時や地の利も人和には敵繧?ない>孫藹??、ビジョンの共有と人の和を中共でも重視する
 従業員代表大会は労軆??の軆??会
一肩挑 国有企業の藹??締役臀??会長と党委書鐔??が同一人迚?
在中日系企業や日本領事館で中国共産党員が働いている問題、情報觸??豢?
 仕方ない、中国のルールだし、業務時間外のみで党員教閧?
  企業文化を作り業績上がるケースがある点を評価、党と臀??業の目觸??の融合
  協調性があり成績や経歴がよい人が欲しいなら党員の可能性が高い
独鐔??専制で愚民の意見表譏?や行動制限したのでな縺?、
 各地や各職場の臀??満や問題を吸い上げた上でプランを立てた
 不条理や窮藹??もあるが、むしろ中共イメージの逆
共産で労働者の国と成っているが党員がそこらにおり上意下達で群衆から見ると監鐔??社臀??に感じるが
中共の鐔??点だと理想的なシステムに鐔??える、中国なら党員になる一択?
 日本だったら笳?笳?党員・??高学歴で医師弁護士会計士・??funnyw


■ニコニコ哲学 川上驥?生の胸のう縺?
新鐔??プロジェクトは勇気とプライドが高い素人にやらせる。
誰がやっても失敗も多いので馬鹿がよい、走らない賢い馬は肉になる。
 白軆??から考え始める重要さだろう縺?

■米海軍で藹??指の觸??水艦艦長による最強軆??織の臀??り譁?
リーダシップ:価値と觸??在能力を伝え刺觸??する(協力を支配で操る)
担当者の方がが細かいところまで詳し縺?知っている
 権限を荳?えるとは支配と同じ
 目觸??と鐔??驥?は両立するか
 リーダの技驥?が組織の業績か、メンバーの技驥?ではないのか
疑問:活かすには命令でな縺?創意工夫で藹??務を行った方が良いのではないか
結果:残留軆??up、組織状態better
要るもの・??権限だけでな縺?自由を荳?える
やる事:mtgでなく確鐔??会(聞縺?方の觸??備や藹??加が必要)、命令でなく確鐔??し許可藹??り

笳?やったこ縺?
委ねるリーダーシップ
権限を荳?える
命令を避ける
命令するときは、乗員が異を唱える余地を残す
やるべきことを確鐔??する
会話をする
上官と部臀??が学びあう機会を設ける
人を重視する
長い目で考える
いな縺?なっても困らない存在を目指す
訓練の回数より質を重視する
正藹??な命令以藹??でも、会話を通じて情報交觸??する
つねに好奇心を持縺?
諢?味のない手順や工軆??をすべて觸??除する
監鐔??や検査を減らす
情報を公開する

笳?やらなかったこ縺?
命じるリーダーシップ
権限を握る
命令する
命令するときは、 自信を持って絶対だと譏?言する
やるべきことを説譏?する
会議をする
上官が部臀??を指蟆?する機会を設ける
技術を重視する
目の前のことを考える
いな縺?なったら困る存在を目指す
訓練の質より回数を重視する
譏?瞭簡潔な鐔??葉のみを使用し、 正藹??な命令以藹??の鐔??葉を交繧?さない
つねに疑いを持縺?
手順や工軆??の効軆??を改善する
監鐔??や検査を増やす
情報を公開しない

-支配からの解謾?
┣支配構造の遺臀??子コードを見つけ出して書き觸??える
┣態度を変えることで新しい考え方をもたらす
┣早めに短く言葉を交繧?し、仕事の効軆??を高める
笏? 「これから~をします」という言い方を蟆?入し、命令に藹??う だけだったフォロワーを自発的に鐔??動するリーダーに藹??える
┣解決軆??を荳?えたい衝動を抑える
┣部臀??を監鐔??するシステムを觸??除する
┗思っていることを口に出す

-優れた技閭?
┣直前に確認する
┣いつどこでも学ぶ者でいる
┣説譏?するな、確鐔??せよ
┣同じメッセージを絶えず繰り返し発信する
┗手段ではな縺?目觸??を伝える

-正しい理隗?
┣ミスをしないだけではダメだ、優れた成果をあげよ
┣信頼を構築し部臀??を思いやる
┣鐔??動指針を判断の基觸??にする
┣目觸??を持って藹??める
┗盲目的に藹??うことな縺?疑蝠?を持つ姿勢を奨励する

■OODA
Observe(観藹??)、Orient(状觸??判断、方向づけ)、Decide(諢?思決藹??)、Act(行動)
OODAは驕?去の軆??験に捉繧?れることな縺?現状にあった行動をとるためのも縺?
Observeでは先入観を持つことな縺?公平かつ客観的に鐔??うことを推螂?
 変化を観藹??しスピーディな分析をし判断して進めるので生存軆??が高い
 場藹??たり的、個人の判断が多い、中長期計画に適していない、仮説が弱い、ミッションバリュービジョン共有の觸??如で統軆??問題
PDCA
目觸??設藹??から始まるので、目觸??が譏?確になり、ブレずに藹??り組みやすい
安定した環藹??での品質管理や一定期間かける藹??組などに適している
 品質管理や生産管理用フレームワークの状觸??や前觸??が変繧?らない中で最適解を見つけるのに適している
簡易として縺?PDR、Prep=準備、Do=実行、Review=復軆??検險?

====
ティーチング・??正解や解決に藹??要な繝?ウ繝?ウを教える
コンサルティング・??相手の問題を解決するための觸??案をし共に解決してい縺?
カウンセリング・??悩みや不安を解決するためにサポートする
コーチング・??目觸??達成のために鐔??動変容を促す傾聴と質問(アドバイスしない)

人生の幸福度は「貯金の驥?」で決まる
幸軆??感が最大になる貯金額と縺?1億円

Posted by funa : 11:16 PM | Column | Comment (0) | Trackback (0)


October 31, 2023

GCP Network Connectivity
笳?共有 VPC
 同組織のプロジェクトのホストプロジェクト(隕?)縺?VPCをサービスプロジェクト(子)に共有
笳?VPC ネットワー繧? ピアリン繧?
 異なる組織間の接続(藹??方縺?VPCでコネクションを作成する、内驛?IPで通信する、サブネットは重複しないこと、2ホップ制限縺?1:1=3つ以上の場合は古メッシュでコネクション臀??成要)、k8sサービス縺?Pod ipをVPCピアリング軆??由する利用觸??もある

笳?繝?イブリッド サブネット
 Cloud VPN/Interconnect等が必要、オンプレルータ縺?Cloud RouterをBGPでつなぐ、オンプレ縺?GCPをつなぐ
笳?Cloud Interconnect
 DCと藹??用軆??で閉域網接続、Cloud VPNより菴?レイテン繧?/帯域安定
笳?Cloud VPN
 オンプレ縺?IPsec VPN接続、アドレス帯の重複だめ、Cloud VPN側縺?BGPIP設藹??やIKEキー生成をしオンプレルータ側でそれらを設藹??する

笳?内部軆??蝗?
 VPCで使うIPをCIDRで藹??義しIP範囲の使用方觸??を事前に決定してお縺?、IPが勝手に使繧?れたりしない等ができる

笳?限定公開縺? Google アクセス・??Private Google Access)
 外驛?IPを持たないGCE等はデフォルトのインターネットゲートウェ繧?0.0.0.0を経由し縺?Google APIにアクセスする、VPC>Routesで鐔??れる
笳?オンプレミ繧? ホスト用の限定公開縺? Google アクセ繧?
 CloudVPNやInterconnectを経由してオンプレから内驛?IPを利用し縺?GoogleAPIにアクセス、GCP側で縺?CloudDNSで特藹??のドメイン縺?Aレコードを入れる、選択したドメイン縺?IPアドレス軆??囲を静的カスタムルート縺?VPC内のプライベートIPからルーティングできるように設定する、オンプレに縺?CloudRouterからドメイン縺?IPアドレス軆??囲をBGPでルーティング藹??報する、VPNやInterconnectがない縺?0.0.0.0縺?GoogleAPIにアクセスするがこれだ縺?RFC1918に觸??拠しない199.33.153.4/30など縺?IPを使う必要がありルーティングが複雑化したり、オンプレを通る場合があり通信は諷?重に設計をするこ縺?
笳?Private Service Connect
 「限定公開縺? Google アクセス」の発藹??版、オンプレをNAT縺?VPCに接続、内驛?IP縺?GoogleAPIにアクセスできる、PSCエンドポイントを介して内驛?IPで公開できる、NATされ内驛?IPの公開先での重複OK

笳?プライベート サービ繧? アクセ繧?
 VPCペアリングを併用してサービスプロデューサをVPCに接続し内驛?IPで次のようなサービスに内驛?IPでアクセスできるようにする(Cloud VPNまた縺?Interconnectを付け足せばオンプレからも可・??、Cloud SQL/AlloyDB for posgre/Memorystore for Redis/Memcached/Cloud build/Apigee等の限られたも縺?
笳?サーバーレ繧? VPC アクセ繧?
 サーバレスからVPC内リソースにアクセスするためのコネクタ・??通常は藹??驛?IP通信になるがコレだと内驛?IP縺?VPCにルーティングされる、/28のサブネットを指定)、例えば既藹??縺?cloud runサービスを編集しても付けられず初期構築時のみ設定できる

●外驛? IP アドレスを持縺? VM から API にアクセスする
IPv6をVMに設定し限定公開DNSゾーン設定をすればトラフィック縺?GCP内にとどまりインターネットを通りません

笳?CDN Interconnect
 Cloud CDNもあるが他社縺?CDNに接続する、Akamai/Cloud flare/fastly等々

笳?Network Connectivity Center 
 繝?ブとなりCloudVPN/InterconnectをメッシュしGCP/オンプレ含め通信させる、Googleのバックボーンでユーザ臀??業の拠点間を接続できる
笳?ダイレクト ピアリン繧?
 Googleのエッ繧?NWに直接ピアリング接続を確軆??し高スループット化、Google workspaceやGoogleAPI用だが普通は使繧?ずInterconnectを使う
笳?キャリ繧? ピアリン繧?
 ダイレクトピアリングの饅??度な運用が自社対藹??できない等でサービスプロバイダ経由縺?Google workspaceなど縺?Googleアプリに品質よ縺?アクセスする

Google Cloud縺?VPCを徹藹??解説!(応用編) - G-gen Tech Blog

笳?トンネル系の臀??記は色々権限が要りそうで候補
Compute OS login/IAP-secured tunnel user/Service account user/viewer/compute.instance*

■ポートフォワードは止めないと別につないで軆??いでいるつもりでも同じところに軆??縺?続ける
lsof -i 3128
ps ax | grep 3128
ps ax | ssh
kill [PID]

bind: Address already in use channel_setup_fwd_listener_tcpip: cannot listen to port: 3306が出たら必ず下記で調縺?killする
Isof-i:3306
kill [該藹??縺?PID]

■IAPトンネ繝?
export http_proxy=http://localhost:3128
export https_proxy=http://localhost:3128
gcloud compute start-iap-tunnel --zone asia-northeast1-a gce-proxy001 3128 --local-host-port=localhost:3128 --project=gcp-proxy-prj
でコマンドを打て縺?IAP雕?み台トンネルを通って藹??部に通信できる

■雕?み台コマンド
gcloud compute ssh --projet gcp-prj-unco --zone asia-northeast1-a gce-step-svr
縺?SSHログインしそこからcurl等で操作する

gcloud compute ssh --project prj-step-svr --zone asia-northeast1-b dev-gcp-step001
curl "http://dev.in-aaa.com/xxx"

■シークレットからPWを藹??りつつコマンドを打縺?
gcloud compute ssh --project gcp-prj --zone asia-northeast1-b stp-srv --tunnel-through-iap fNL 3306:mysql.com: 3306
mysql -u baka_usr -p"$(gcloud secrets versions access latest --secret mysql_pw --project=gcp-prj)" -h 127.0.0.1-P 3306
 mysqlコマンド縺?pオプションは空白なし縺?PWを入れる、baka_usr縺?MySQLのユーザ、mysql_pw縺?secret mgrに臀??存した名前
 $()縺?Linuxコマンド縺?gcloudコマンドを入れ子。ワンライナーの形で利用ができる
secret mgrのコマンド 
ワンライナー解説・??変数縺?$()とバッククォート

kubectl port-forward service/cloudsql-proxy 3306:3306 -n importer
とか
kubectl --context gke_context_cluster_user_ns port-forward svc/cloudsql-proxy2 3306:3306
とか
gcloud compute ssh --project prj-step-dev --zone asia-northeast1-b dev-gcp-step001 --tunnel-through-iap --fNL 3306:dev-srv002.dev.in-aaa.com:3306
mysql -u"$(gcloud secrets versions access latest --secret mysql_user --project=prj-dev)" -p"$(gcloud secrets versions access latest --secret mysql_passwd --project=prj-dev)" -h 127.0.0.1 -P 3306

■SSHトンネ繝?
sshの基本はこれ、セキュアシェル、トンネルは特觸???
SSH [オプショ繝?] [ログイン名@]接続先 [接続先で藹??行するcmd]
接続先に権限があるこ縺?

SSHの逍?通確鐔??
ssh baka@stp_srv.unco.com

設藹??例
.ssh/config
User baka
Hostname step_srv
ProxyCommand ssh -W %h:%p baka@step_srv.unco.com
PubkeyAuthentication no
PasswordAuthentication yes

窶?ssh縺?PWは危険なので鍵鐔??証のみにしたい
 IPアドレス元を制限や同一IPのログイン試行は拒否する仕組み軆??は欲しい

SSHコネクション臀??でトンネル臀??る
ssh step_srv -L 8080:dest.benki.com:80
 とか ssh -L 8080:dest.benki.com:80 ahouser@step_srv.unco.com
※ポート22縺?step_srv縺?SSHコネクションを貼り、ローカ繝?:8080のリクエスト縺?dest:80に転送する
ブラウザか新鐔??ターミナル縺?curl
http://localhost:8080
ダメなら転送設藹??したターミナル縺?step_srvにいるの縺?curl

ssh -L 8080:stg-aaa.in-aaa.com:80 user.name@stgstep
curl "http://stg-aaa.in-aaa.com/xxx"

■GKEポートフォワード
gcloud container clusters get-credentials aaa --zone asia-northeast1-b --project prj-aaa-stg
kubectl config get-contexts
kubectl config use-context gke_context_cluster_user_ns
kubectl get svc
kubectl port-forward service/app-x 8080:80
別のターミナルを起動し
curl "http://localhost:8080/api/usb/3.0/get?xxx_code=1111"

■GKEポッドの中で操作
gcloud container clusters get-credentials aaa --zone asia-northeast1-b --project prj-aaa-dev
kubectl get pods -n importer | grep importer (-n縺?namespace)
kubectl exec -it Pod名 -n importer --/bin/bash 縺?pod縺?bashに入れるので、そこ縺?
python app.py ls | grep bbb_module でモジュール名で觸??邏?
python app.py run ${API_NAME} ${MODULE_NAME} --force で藹??行

■ヘッダー制御
curl -H 'X-YWY-IAT8UV:2pEm' 'https://dev.ex-aaa.com/xxx'

GCP、AWS、Azure 別に鐔??るクラウド VM への攻撃経路まとめ (paloaltonetworks.jp)

=============
なぜレッドオーシャン化する前にサービスを グロースできなかったのか? - フリマアプリ編 - (フリ繝?)
サービスを急拡大させる諢?思決藹??が遅く競合に遅れ
競合出現藹??も経営方針を大きく変えなかった
勝利条件はユーザ数で觸??能差ではなかった
パワープレーでいかにプロモーションばら撒いて鐔??知藹??げて第一想起をとるかだった
先行者優臀??で驕?ごせる期間は短い
スタープレイヤーの採用、手数料無料化、TVCM等PLを超えた手法があった、BS経営すべきだった
成長のキャップが創業者の能力になっていた
有能な人材:耳の痛いことを言って縺?れる人材を経営チームに採用しても良かった
CTOが開発をし、組織運営の雑務をし、採用もやっていた
CEOは机の軆??み軆??てをするな。CTO縺?PCの購入をする縺?
役割の藹??化に軆??早縺?適用し権限移譲を行い、やるべきことをやれる状觸??を作る
あるいは藹??要な軆??織を大き縺?することに注力する、例えば開発軆??織を大き縺?する
戦時縺?CEO、皆に戦時であることを伝える、企業文化に背縺?諢?思決藹??も行う
研究や教育軆??、やった方が良さそうな耳障りの良いタスクも拒否する
どうやったら市場で勝てるかの戦逡?

IPOとか目指さなけれ縺?Confort zoneを見つけてじっ縺?りまったりビジネスを継続させる手もある
メルカリやPay2をみた結果論、このやり方も古いというかア繝?

Posted by funa : 10:57 PM | Web | Comment (0) | Trackback (0)


June 21, 2023

Machine learning(Bigquery ML)
機械学習:
 マシーンラーニング、ML。マッシーンがLearnしデータの背景にあるルールやパターンを発鐔??する。
モデル・??
 機械学習における入力データに対して軆??果(出力)を蟆?き出す仕組み。モデルは入力されたデータを解析し、評萓?/判藹??を行った結果を出力として鐔??す。つまり、機械学習は「入カ・??モデル・??出力」から成る。

学軆??デー繧?
 モデルをつ縺?るために学習させるデー繧?
適用デー繧?
 モデルに対して臀??測を適用させるデー繧?
教師あり
 学軆??データに対して正解ラベルを付けて学習する方觸??
  例)驕?去縺?DMを送付した結果(目的変謨?)を用いて学習させる
教師ありは、回帰と分類縺?2つに分けられます。
 回蟶?(予测)
  連軆??する数値を予測するもので、売臀??、重驥?、温度などを算出する
 分類(識蛻?)
  データがどのクラスに藹??するかを予測するもので、販売商品が売れる見込縺?/売れない見込みなどに分類
  DMにおいては分類モデ繝?(買う・買繧?ないの鐔??蛻?)を使逕?

目的変謨?
 結果側の藹??謨?
 例)ある特藹??のカテゴリやブランドをその顧客が注文する
  ●確軆??(購入する・しない)
   ー学習データにターゲットフラ繧? (購入あり=1、購入無し=0)を立てる
   ー適用藹??に出て縺?る結果縺?0~1 (0%~100%) の軆??蝗?
  笳?金額
説譏?変謨?(特微驥?とも呼縺?) 
 藹??因側のデー繧?
 目的変数を予測するために使用する顧客の觸??々な情報、大き縺?分け縺?2種饅??
  ●顧客属諤?
   ー觸??莠?/個人臀??業主など臀??業形態、登録臀??所の郵便番号、業種コードな縺?
  ●購買履歴
   ー購雋? いつ、何を、どの縺?らい購入したか等の情蝣?
   ー各商品カテゴリ觸??の購入金額 etc.
質的変謨?
 数値で推し測ることができ、数藹??の大蟆?に諢?味をもつデー繧?
  (例)売臀??、購入回数、従業員数、DM送付回謨?
單的変謨?
 単に分類や種饅??を区別するためだけのデー繧?
  (例)都道府県、闌?種コード、購入有辟?

統鐔??手法
 重回帰分析:
  説譏?変謨?xが目的変謨?yの値を変化させます。そのため、説譏?変数から、目的変数の値を予測可能です。
 ロジスティック回蟶?
  yが1になる確軆??を判別します。い縺?つかの鐔??因(説譏?変謨?)から「2値の軆??果(目的変謨?)」が起こる確軆??を説譏?・臀??貂?
   2値の軆??果とは合譬?/不合格、採逕?/不採用など、答えが2つしかない場合を指し

線形回帰・??エクセル・??
 slope関数・??回帰直軆??の傾きを藹??得
 inercept関数・??回帰直軆??の切片を藹??得
 forecast関数・??単回帰分析からの推測値を藹??得
+++++++++++++

BigQueryを利用して觸??械学習を簡易に学びたいです。Webアプリのログよりサーバーエラーを予測するようなもので方觸??を教えて縺?ださい > BigQueryを利用して觸??械学習を学び、Webアプリのログからサーバーエラーを予測する方觸??について簡単に解説します。以臀??はその手順の觸??要です。

笳?ステップ1: データの觸??備
まず、WebアプリのログデータをBigQueryにインポートします。ログデータには、タイムスタンプ、リクエストの詳細、ステータスコード、エラ繝? メッセージなどの情報が含まれているはずです。

例:ログデータスキーマ server_log
timestamp: TIMESTAMP
request_id: STRING
status_code: INTEGER
error_message: STRING
user_agent: STRING
response_time: FLOAT

笳?ステップ2:データの前処理
エラーログの解析を容易にするために、データをクリーンアップし、特徴驥?を作成します。

CREATE OR REPLACE TABLE ds.cleaned_log AS
SELECT
timestamp,
status_code,
error_message,
user_agent,
response_time,
IF(status_code >= 500, 1, 0) AS is_error
FROM
ds.server_log
WHERE
timestamp BETWEEN 2023-01-01 AND 2023-12-31;

このクエリでは、ステータスコードが500以臀??のものをエラーと鐔??なし、is_error列を追加しています。

笳?ステップ3:特徴驥?エンジニアリン繧?
機械学習モデルに投入するための特徴驥?を作成します。例えば、以臀??のような特徴驥?を考えます。
-時間蟶? (hour)
-ユーザーエージェント (user_agent) 
-驕?去のエラーレート(past_error_rate)
窶?past_error_rateを省縺?とどうなのか?

CREATE OR REPLACE TABLE ds.features AS
SELECT
EXTRACT(HOUR FROM timestamp) AS hour,
user_agent,
response_time,
is_error,
--AVG(is_error) OVER (PARTITION BY user_agent ORDER BY timestamp RANGE BETWEEN INTERVAL 1 DAY PRECEDING AND CURRENT ROW) AS past_error_rate
AVG(is_error) OVER (PARTITION BY user_agent) AS past_error_rate
FROM
ds.cleaned_log;

笳?ステップ4: 機械学習モデルの臀??成
BigQuery MLを使用してモデルを作成します。ここではロジスティック回帰モデルを使用してエラーの臀??測を行います。
他には、The CREATE MODEL statement  |  BigQuery  |  Google Cloud
MODEL_TYPE = { 'LINEAR_REG' |'LOGISTIC_REG' |'KMEANS' |'MATRIX_FACTORIZATION' |'PCA' |'AUTOENCODER' |'AUTOML_CLASSIFIER' |'AUTOML_REGRESSOR' |'BOOSTED_TREE_CLASSIFIER' |'BOOSTED_TREE_REGRESSOR' |'RANDOM_FOREST_CLASSIFIER' |'RANDOM_FOREST_REGRESSOR' |'DNN_CLASSIFIER' |'DNN_REGRESSOR' |'DNN_LINEAR_COMBINED_CLASSIFIER' | 'DNN_LINEAR_COMBINED_REGRESSOR' |'ARIMA_PLUS' |'ARIMA_PLUS_XREG' |'TENSORFLOW' |'TENSORFLOW_LITE' |'ONNX' |'XGBOOST'}

CREATE OR REPLACE MODEL ds.error_prediction_model
OPTIONS(model_type='logistic_reg', input_label_cols=['is error'] AS
SELECT
hour, 
user_agent, 
response_time, 
past_error_rate,
is_error
FROM
ds.features;

笳?ステップ5: モデルの鐔??萓?
モデルを評価し、精度を確鐔??します。

SELECT
*
FROM
 ML.EVALUATE(MODEL, `ds.error.prediction_model`,(
SELECT hour,
user_agent,
response_time,
past_error_rate,
is_error
FROM
ds.features
));

笳?ステップ6: エラーの臀??貂?
新しいデータを使ってエラーを予測します。

SELECT
*
predicted_is_error,
predicted_is_error_probs
FROM
ML.PREDICT(MODEL `ds.error_prediction_model`,(
SELECT
EXTRACT(HOUR FROM timestamp) AS hour,
user_agent,
response_time,
--AVG(CASE WHEN status_code 500 THEN 1 ELSE 0 END) OVER (PARTITION BY user_agent ORDER BY timestamp RANGE BETWEEN INTERVAL 1 DAY PRECEDING AND CURRENT ROW) AS past_error_rate
AVG(CASE WHEN status_code >= 500 THEN 1 ELSE 0 END) OVER (PARTITION BY user_agent) AS past_error_rate
FROM
ds.new_server_log
));


笳?ダミーデー繧?
INSERT INTO ds.server_log (timestamp, request_id, status_code, error_message, user_agent, response_time)
VALUES
('2024-06-28 18:00:00 UTC', 'req 801, 208, '', 'Mozilla/5.0 (Windows NT 18.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 0.123), 
(2024-06-20 10:01:00 UTC', 'req 002, 588, Internal Server Error', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 8.456),
(2024-06-28 10:02:00 UTC', 'req 003', 484, 'Not Found', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14,6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1, 8.234),
(2024-06-20 10:03:00 UTC', 'req 004', 200, '', 'Mozilla/5.0 (Windows NT 18.8; Win64; x64; rv:89.0) Gecko/20100181 Firefox/89.8, 0.345),
(2024-06-28 10:04:00 UTC, 'req 005', 502, Bad Gateway', 'Mozilla/5.0 (Linux; Android 11; SM-G9918) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.8.4472.124 Mobile Safari/537.36, 0.678),
(2024-86-28 10:05:00 UTC, 'req 006', 503, 'Service Unavailable', 'Mozilla/5.0 (iPad; CPU OS 14.6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/6084.1, 0.789), (2824-86-28 18:06:00 UTC, req 007, 200, Chrome/91.0.4472.124 Safari/537.36, 0.567), Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
(2024-06-2010:07:00 UTC, 'req 008, 500, Internal Server Error', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.8.4472.124 Safari/537.361, 0.890),
(2024-06-20 18:08:00 UTC, req 009, 404, Not Found', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14 6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.11', 8.345),
('2024-06-28 18:09:00 UTC', 'req 010', 200, '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0 Gecko/20100101 Firefox/89.0', 0.456);


INSERT INTO ds.new_server_log (timestamp, request_id, status_code, error_message, user_agent, response_time)
VALUES
(2024-06-21 09:00:00 UTC', 'req 101', 200, '', 'Mozilla/5.0 (Windows NT 18.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 0.112), 
(2024-06-21 09:01:08 UTC, req 102', 500, Internal Server Error', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.8.4472.124 Safari/537.36, 0.478),
(2024-06-21 09:02:00 UTC', 'req 183, 484, 'Not Found', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safar1/684.1, 0.239),
(2024-06-21 09:03:00 UTC', 'req 104, 200, Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0, 8.301),
(2024-06-21 09:04:08 UTC, req 185', 502, 'Bad Gateway', 'Mozilla/5.0 (Linux; Android 11; SM-G9918) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.8.4472.124 Mobile Safari/537.36', 8.683),
(2024-06-21 09:05:00 UTC, req 106', 503, Service Unavailable', 'Mozilla/5.0 (iPad; CPU OS 14,6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1, 0.756),
(2024-06-21 09:06:00 UTC, req 107, 208, ", Mozilla/5.0 (Windows NT 18.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.8.4472.124 Safari/537.36, 0.523),
(2024-06-21 09:07:00 UTC, req 188, 500, Internal Server Error, Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.8.4472.124 Safari/537.36, 0.812),
('2024-06-21 09:08:08 UTC', 'req 109,, 404, 'Not Found', 'Mozilla/5.0 (iPhone: CPU iPhone OS 14,6 1ike Mac OS X) AppleWebKit/685.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1', 0.267),
('2024-06-21 09:09:08 UTC', 'req 110', 200, '', 'Mozilla/5.0 (Windows NT 18.8; Win64: x64; rv:89.0) Gecko/20180101 Firefox/89.8', 8.412);

Posted by funa : 08:00 PM | Web | Comment (0) | Trackback (0)


June 1, 2023

GCP Python Google doc編集
Google Docのコピーや編集
https://developers.google.com/docs/api/how-tos/documents?hl=ja
https://rimever.hatenablog.com/entry/2019/10/16/060000
クイックスタート
https://developers.google.com/docs/api/quickstart/python?hl=ja
スコープ情蝣? https://developers.google.com/identity/protocols/oauth2/scopes?hl=ja#docs
ディスカバ繝? ドキュメント
例えばこれ縺?DriveAPIの分だが、RESTAPIで臀??ができるか全鐔??載しているっぽい
https://www.googleapis.com/discovery/v1/apis/drive/v3/rest
Drive API
https://developers.google.com/drive/api/guides/about-sdk?hl=ja
https://developers.google.com/drive/api/reference/rest/v3?hl=ja
Docs API
https://developers.google.com/docs/api/concepts/document?hl=ja
https://developers.google.com/docs/api/reference/rest?hl=ja
https://googleapis.github.io/google-api-python-client/docs/epy/index.html
https://googleapis.github.io/google-api-python-client/docs/dyn/docs_v1.html
https://developers.google.com/docs/api/reference/rest/v1/documents/get?hl=ja

文字置觸?? https://developers.google.com/docs/api/how-tos/merge?hl=ja

窶?DocAPIからdriveld folderidは藹??得できなさそう、getは使えそう
窶?DriveAPIが使えない?
コピーでな縺?DocAPI縺?get body からの新鐔??createで鐔??縺??
共有ドライブ時は、supports All Drives=True が必要だった縺?OK
file_metadata = service.files().get(fileld=DOCUMENT_ID, fields=id, name, mimeType, driveld', supports AllDrives=True) execute()

サービスアカウント縺?GWSにアクセスするに縺?GWS OU設藹??等が必要な場合がある>Google一般共有Docで觸??証も藹??

あるGoogle Docをコピーし、
本文を編集した上縺?
 本文の編集縺?((sample))となっている文字列をAAAに置觸??する
特藹??のドライブのフォルダに移動

from google.oauth2.service_account import Credentials
from googleapiclient.discovery
import build import re
#1. サービスアカウントの鐔??証情報を設藹??
SCOPES = ['https://www.googleapis.com/auth/documents',
'https://www.googleapis.com/auth/drive']
SERVICE_ACCOUNT_FILE = 'path/to/your/service-account-file.json' #サービスアカウント 縺?JSONファイルのパ繧?

creds = Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)

#2. Google Docs 縺? Driveのサービスをビルド
docs_service = build('docs', 'v1', credentials=creds)
drive_service = build('drive', 'v3', credentials=creds)

#3. コピー元縺?Google Doc縺?IDと、移動先のフォルダIDを設藹??
SOURCE_DOCUMENT_ID = 'source_doc_id' #コピー元のドキュメントID
TARGET_FOLDER_ID = 'target_folder_id' #移動先のフォルダID

#4. Google Docをコピ繝?
copied_doc = drive_service.files().copy(fileld=SOURCE_DOCUMENT_ID, body={"name": "Copied Document"), supportsAllDrives=True).execute()
copied_doc_id = copied_doc['id']

#5、本文を藹??得し、{{sample}} をAAAに置觸??
def replace_text(document_id, old_text, new_text)
#ドキュメントの内容を藹??得
document = docs_service.documents().get(documentid=document_id).execute()
content = document.get('body').get('content')
#リクエストリスト
requests = []
#検索と置觸??を行う
for element in content:
if 'paragraph' in element:
for paragraph_element in element['paragraph']['elements']:
if 'textRun' in paragraph_element:
text = paragraph_element['textRun']['content']
if old_text in text:
start_index = paragraph_element('startindex']
end_index = paragraph_element['endIndex']
requests append({
'replaceAllText': {
'containsText': {
'text': re.escape(old_text), #エスケープなしにする必要有
'matchCase': True
},
'replaceText': new_text
}
})
#置觸??リクエストを実行
if requests:
docs_service.documents().batchUpdate(documentid=document_id, body={'requests':requests}).execute()

#置觸??処理の藹??行
replace_text(copied_doc_id, '((sample))', 'AAA')

#6、コピーしたドキュメントを指定のフォルダに移動
drive_service.files().update(fileld=copied_doc_id, addParents=TARGET_FOLDER_ID, removeParents=copied doc['parents'][0], supportsAllDrives=True).execute() #親が藹??れないのでフォルダは繝?ードコード

print(f"Document copied, edited, and moved successfully! Document ID: {copied_doc_id)")


Posted by funa : 12:00 AM | Web | Comment (0) | Trackback (0)


May 29, 2023

GCP hands-off 2
■プロジェクト削除時のサービスアカウント
プロジェクト縺?30日臀??留される。その間サービスアカウント権限は生きており他プロジェクトでは動作する。
しかし保留期間はプロジェクトを使用できずサービスアカウントを削除できず、個別に臀??つ臀??つ権限をはく奪するしかない。
サービスアカウントはプロジェクト削除前に、必要であれば臀??前に削除や無効化してお縺?ことも検險?する。

■連謳?
GoogleWorkspace -> GAS -> GCP Oauth + API -> GCP(Bigquery etc.)
Python -> Gcloud sdk -> gcloud auth -> GCP(Bigquery etc.) <-> federation query/Connected sheet
Python(Oauth key) -> GCP認証情蝣?(Oauth Key) + API -> GoogleWorkspace
 GCPのクレデンシャルページ縺?Oauth2.0 client IDと鍵が発鐔??でき、鍵でイケる
  Pythonコードで鍵を指定すると藹??行時にログインを求められ、client IDとユー繧?IDを紐づけして藹??行することになる
  Authentication — gspread 5.7.2 documentation
  Python でシンプル縺? OAuth 2 する (urllib + oauthlib) - Qiita
 GCPのクレデンシャルページ縺?APIキーも発鐔??でき、これは可能性はある
Python -> local csv/tsvが基譛?
笳?Python(SA key) -> GCP認証情蝣?(SA Key) + API -> GoogleWorkspace
 サービスアカウント縺?GWSにアクセスできないのでダ繝?
  信頼しているドメインとのみ藹??部共有を許可する - Google Workspace 管理者 ヘルプ
  サービ繧? アカウント(ドメイン名の末尾が「gserviceaccount.com」)を信頼しているドメインにすることはできません
   OUで許可するとイケるはずだが、、
笳?Python 縺?Google docをイジる
下記縺?URLの内容を検証すればよい
Google Cloudコンソール縺?
Oauth同諢?画面を設藹??
Google Docs APIを有効化
OAuth クライアントIDを作成
シークレットJson ファイルができるの縺?DL(リネーム)
コードにクレデンシャ繝?JSONファイル縺?Doc縺?URLに含まれるdocumentIDを記霑?
→Python実行する縺?Docのデータが藹??れる(ローカルの場合は楽)

/// runのデプロイ時に設定を入れる方觸??につい縺?
1)環藹??変数を(コンソー繝?/cmd/コンテナymiのどれか縺?)設藹??:
env=os environ.get("ENV") で使う。ログに出やす縺?非推螂?
2)シークレットマネージャ臀??存分を設藹??
環藹??変数・??コードでやるのと同じ?
3)ボリュームを使う:
クレデンを入れ、トークンの臀??時保存ができる?
Cloud Run縺?Secret Managerを使いたい #Python - Qiita
※サービスアカウント縺?GWSを扱うに縺?GWS縺?OUで藹??け入れる設藹??が必要な場合がある

■secret managerに臀??存してコードで呼び出して使う 
Secret Managerのシークレットアクセサー権限 
 (checksumをかけている)

from google.cloud import secretmanager
import google.cloud.logging
import logging
def get_url(secret_key, project_num)
logging.warning('####### secret_key' + str(secret_key) + '######')
client = secretmanager.SecretManagerServiceClient()
resource_name = "projects/()/secrets/()/versions/latest.format(project_num, secret_key)
res = client.access_secret_version(resource_name)
slack_url = res.payload.data.decode("utf-8")
return slack_url

■API等でデータを藹??った時中身が分からない場合
pramsが何か繧?からん時
print(params)
print(type(params))
#<class 'proto.marshal.collections.maps.MapComposite'>
#よ縺?繧?からんクラスでもdirで臀??持するAttributeが分かる
attributes = dir(params)
print(attributes)
#そこに含まれるメソッドも確鐔??できるの縺?helpする
help(params.get)
 #prams.get('query')すると含まれるSQLが分かりこれで進める等

■Protocol buffers
APIの鐔??り縺?Googleは自社で開発したProtocol buffersを使っていようだ
たとえば臀??記が返る
name: "projects/98765"
parent: "folders/12345"
project_id: "aaaaaa-bbbb-market"
state: "ACTIVE"
display_name: "aaaaaa-bbbb-market"
create_time{
seconds: 1601250933
nanos: 820000000
}
update_time{
seconds: 1632826231
nanos: 634000000
}
etag: "W/a06910d9093db111"
labels{
key: "budget_group"
value: "cccc"
}

これ縺?
print (type(response))すると臀??記であり
<class "google.cloud. resourcemanager v3.types.projects.Project"> 
print (response.project_id) で簡単にデコードし値藹??得できることが分かる

APIからの値を藹??るときのコード
from google.cloud import resourcemanager_v3
client = resourcemanager_v3.ProjectsClient()
request resourcemanager v3.ListProjectsRequest{
#組織の場合、現状は権限がGOP側で用諢?がな縺?無理だった
#parent organizations/12345678.
parent="folders/1122233344"
}
page_result = client.list_projects(request=request)
for response in page result:
print(type(response))
print (response.project_id)

エンコードする場合 https://blog.imind.jp/entry/2019/12/28/124728
pip install googleapis-common-protos でインスコ・??
sudo apt install protobuf-compiler でインス繧?
sudo apt-get install protobuf-compiler でインス繧?
 窶?google觸??供のフォルダごと使用しようとして失敗した方觸?? 
 ※縺?protoファイルがあるが丸々必要なので臀??記縺?DL
 窶?git clone https://github.com/googleapis/googleapis.git
 ※バスを合繧?せ縺?projects.protoを使うが失敗
 ※たとえ縺? protoc python_out=. --proto_path=googleapis ./googleapis/google/cloud/resourcemanager/v3/projects.proto
projects.proto を下記の内容で臀??から作成することが必要だった
syntax proto3;

message Resource{
string name = 1;
string parent = 2; 
string project_id = 3;
string state = 4;
string display_name = 5; 
map<string, string> create_time = 6;
map<string, string> update_time = 7;
string etag = 8;
map<string, string> labels = 9;
}
そして臀??記を実行しコンパイ繝?
protoc --python_out=. ./projects.proto
projects_pb2.pyが生成されるため、パッケージとして読みこ縺?protocol buffersを実行できるようになる
import projects_pb2.py
※なおエラー縺? pip install U protobuf=3.20.0でダウングレードした

注諢?点としては、python縺?protocol buffer縺?Bigqueryの型合繧?せが必要
 DateやTimestamp縺?UNIXエポックからの日数や秒数に藹??觸??する必要がある
 Noneをstr 'None'や、int -1や、bool False縺?Pythonで調整をする
//UNIXエポックからの日謨?
current_date = datetime.now()
epoch = datetime(1970, 1, 1)
record_date = (current_date - epoch).days

//UNIXエポックからの軆??謨?
data_string = str(date_v)
dt_obj = datetime.fromisoformat(date_string.replace("Z","+00:00"))
epoch = datetime(1970, 1, 1, tzinfo=timezone.utc)
seconds_since_epoch = (dt_obj - epoch).tatal_seconds()
microseconds_since_epoch = int(seconds_since_epoch * 1e6)
date_v = microseconds_since_epoch

■BQ APIクォータ割り当て鐔??驕?(1000莉?insertしようとした)
テーブル藹??譖?1譌?1500件ま縺?
テーブルメタデータ藹??更縺?10sあたり5回ま縺?
テーブル藹??たりDMLの藹??行待ちキュー縺?20件ま縺?
テーブル藹??たり10sあたり25縺?DMLま縺?
→各insertでスリープを5秒入れた
 import time
 time.sleep(5)

上限がテーブル単位のためテーブル名を分けると回避できるらしい
■BQ streaming insert->BQ storage read/write APIの臀??限縺?DMLと別で、閾値が大きい
streaming insert -> Bigquery storage write API を使う
BigQuery Storage Write API を使用してデータを一括読み込み、ストリーミングする  |  Google Cloud
Storage Write API を使用したデータ読み込みのバッチ処理  |  BigQuery  |  Google Cloud

CreateWriteStream > AppendRows(ループ) > FinalizeWriteStream > BatchCommitWriteStreams
 をstart/append/send/close(write commit)の関数化し返り値でつなげた形にしたが
 sendをした後 proto_rows = types.ProtoRows() を觸??け初期化する必要があった(offsetが倍々で藹??えたから)
offsetで送信觸??の開始行の設定も必要(一連の処理で件数を記憶しており0固藹??で処理を書けないようだった)

■Python/Client libraryの値をBQに入れるにあたり
仕様書で型を調べる。STRUCTやクラスは軆??解いて通常のカラム縺?BQに挿蜈?
timestampやboolやint64はそのままの形縺?BQに挿蜈?
BQ SQL:日臀??は値なしならNULLを入れる、数値やBool値はクォートで囲まない
Python縺?SQLインサート文を作るとき改鐔??コードが含まれるものをセットする縺?Syntax errror:Unclosed string literal
q = q.replace('//', '////') バックスラッシュをエスケープ、あるとイリーガルエスケープシーケンスとなる、raw文字列にしたい?
q = q.replace('/n', '//n') 改鐔??をエスケープ
q = q.replace("'", "\\'") SQLが途切れないようシングルクォートをエスケープ
q = q.replace('/n', '    ') 改鐔??を空白で置き觸??える

■変更の判譁?
変更で問題がでないか→PCにマウスと臀??けて問題が起こらないかという問題と相似、最終的に軆??験で判断するしか

■監査ログからSetIamのメソッドを藹??りBQ権限付荳?を検知するクエ繝?
WITH source AS(
SELECT
*
FROM `project-logging.organization_audit_log_v2.cloudaudit_googleapis_com_activity_20*`
WHERE_TABLE_SUFFIX = format_date('%y%m%d', current_date("Asia/Tokyo"))
),
project source AS(
SELECT
ROW_NUMBER() OVER (ORDER BY timestamp) as id,
*
FROM source
WHERE
protopayload_auditlog.methodName = 'SetlamPolicy'
project_authorizationinfo AS(
SELECT
DISTINCT
id,
__ori.resource.type as type,
__ori.resource.labels.project_id as project_id,
__ori.resource.labels.dataset_id as dataset_id,
protopayload_auditlog.methodName as method_name
protopayload_auditlog.resourceName as resource_name,
protopayload_auditlog.authenticationInfo.principal Email as email_manipulator,
authorizationInfo.resource as request_resource,
authorizationInfo.permission as request_permission,
authorizationInfo.granted as request_granted,
protopayload_auditlog.requestMetadata.callerlp as callerlp,
protopayload_auditlog.requestMetadata.callerSuppliedUserAgent as callerSuppliedUserAgent,
FROM project_source AS __ori
). UNNEST (protopayload_auditlog.authorizationInfo) AS authorizationInfo
project_bindingdeltas AS(
SELECT
id,
--array_binding Deltas_project as binding Deltas_project,
array_binding Deltas_project.action as action_project,
array_binding Deltas_project.member as member_project,
array_binding Deltas_project.role as role_project,
timestamp
FROM project_source AS_ori
,UNNEST (protopayload_auditlog.servicedata_v1_iam.policyDelta.bindingDeltas) AS array_binding Deltas_project
),
project_setiam AS(
SELECT
--*, except(id)
type,
project_id,
dataset_id,
method_name,
resource_name,
email_manipulator,
request_resource,
request_permission,
request_granted,
callerip,
callerSuppliedUserAgent.
action_project,
member_project,
role project.
CAST(NULL AS STRING) AS metadataJson,
CAST(NULL AS STRING) AS bindingDeltas_dataset,
CASTINULLAS STRING AS action_dataset,
CAST(NULL AS STRING) AS member_dataset,
CAST(NULL AS STRING) AS role_dataset,
CAST(NULL AS STRING) AS bindingDeltas_table,
CAST(NULL AS STRING) AS action_table,
CAST(NULL AS STRING) AS member_table,
CAST(NULL AS STRING) AS role_table,
timestamp
FROM project_authorizationinfo
LEFT JOIN project_bindingdeltas ON project_authorizationinfo.id = project_bindingdeltas.id
WHERE role_project LIKE 'roles/bigquery%
),
resource_source AS (
SELECT
__ori.resource.type as type,
__ori.resource.labels.project_id as project id,
__ori.resource.labels.dataset_id as dataset_id,
protopayload_auditlog.methodName as method_name,
protopayload_auditlog.resourceName as resource_name,
protopayload_auditlog.authenticationInfo.principalEmail as email_manipulator,
authorizationInfo.resource as request_resource,
authorizationInfo.permission as request_permission,
authorizationInfo.granted as request_granted,
protopayload_auditlog.requestMetadata.callerlp as callerlp,
protopayload_auditlog.requestMetadata.callerSuppliedUserAgent as callerSuppliedUserAgent,
protopayload_auditiog.metadataJson,
timestamp
FROM source AS __ori
,UNNEST(protopayload_auditlog.authorizationInfo) AS authorizationInfo 
WHERE
protopayload_auditlog.methodName = 'google.iam.v1.IAMPolicy.SetlamPolicy' 
--AND timestamp= "2024-03-11 04:11:30.885258 UTC"
),
resource_id AS (
SELECT
ROW_NUMBER() OVER (ORDER BY timestamp) as id,
*
FROM resource_source
),
resource_bq_dataset AS (
SELECT
id as id_dataset,
json_extract(metadataJson, '$.datasetChange bindingDeltas') as bindingDeltas_dataset,
json_extract(array_bindingDeltas_dataset, '$action') as action_dataset,
json_extract(array_bindingDeltas_dataset, $.member') as member_dataset,
json_extract(array_bindingDeltas_dataset, '$.role') as role_dataset,
FROM resource_id
,UNNEST(json query_array(metadataJson, '$.datasetChange.bindingDeltas')) AS array_bindingDeltas_dataset
),
resource_bq_table AS (
SELECT
id as id table,
json_extract(metadataJson, '$.tableChange.bindingDeltas') as bindingDeltas_table,
json extract(array_bindingDeltas_table, '$.action') as action table,
json_extract(array_bindingDeltas_table. '$.member') as member table,
json_extract(array_bindingDeltas_table, '$.role') as role_table,
FROM resource_id
,UNNEST(json query_array(metadataJson, '$.tableChange.bindingDeltas')) AS array_bindingDeltas_table
),
resource_setiam AS ( 
SELECT
--*except(id, id_dataset, id_table)
type,
project_id,
dataset_id,
method_name,
resource_name,
email_manipulator,
request_resource,
request_permission,
request_granted,
callerlp,
callerSuppliedUserAgent,
CAST(NULL AS STRING) AS action_project,
CAST(NULL AS STRING) AS member_project,
CAST(NULL AS STRING) AS role_project,
metadataJson,
bindingDeltas_dataset,
action_dataset,
member_dataset,
role_dataset,
bindingDeltas_table,
action_table,
member_table,
role_table,
timestamp
FROM resource_id
LEFT JOIN resource_bq_dataset ON resource_id.id = resource_bq_dataset.id_dataset
LEFT JOIN resource_bq_table ON resource_id.id = resource_bq_table.id_table
)
SELECT * FROM project_setiam
UNION ALL
SELECT * FROM resource_setiam

■BQからCloudSQLにデータを入れる (GCSを経由する、コマンドやPythonがある
bq query --use_legacy_sql=false 'CREATE OR REPLACE TABLE `prj.ds._table` AS SELECT FROM `prj.ds.view`';
bq extract -destination_format CSV 'prj.ds._table' gs://bucket/tbl.csv
gcloud sql import csv インスタンス名 
gs://bucket/tbl.csv --database=データベース名 --table=テーブル名

■ログの重複をな縺?す
import google.cloud.logging
import logging

# クライアントの臀??成
client = google.cloud.logging.Client()

# Cloud Logging 繝?ンドラを追加
client.get_default_handler()
client.setup_logging()

# 既藹??の繝?ンドラをすべて削髯?
for handler in logging.root.handlers[:]:
    logging.root.removeHandler(handler)

# 新しい繝?ンドラを追加
logging.basicConfig(level=logging.INFO)
# logging.basicConfig(level=logging.DEBUG)  # DEBUG レベルからすべてのレベルを記骭?

# propagate を無効にして重複を防ぐ
logger = logging.getLogger()
logger.propagate = False

# 各ログレベルでテスト
logging.debug('This is a DEBUG log')
logging.info('This is an INFO log')
logging.warning('This is a WARNING log')
logging.error('This is an ERROR log')
logging.critical('This is a CRITICAL log')

■何度かAPIコールを繰り返す
def safe_replace_text(document_id, old_text, new_text, max_attempts=3):
    for attempt in range(max_attempts):
        try:
            replace_text(document_id, old_text, new_text)
            break  # 成功した場合はループを抜ける
        except Exception as e:
            print(f"Attempt {attempt + 1} failed: {e}")
            if attempt == max_attempts - 1:
                print("Reached maximum attempts.")

■Exponential Backoffで時間を指数軆??数的にゆら縺?ながら増やすリトラ繧?
import time
import random
def exponential_backoff(max_retries=5, base_wait_time=1, max_wait_time=32):
    retries = 0
    while retries < max_retries:
        try:
            # APIリクエストの送菫?
            response = send_request()
            if response.status_code == 200:
                return response  # 成功時に軆??果を返す
        except Exception as e:
            wait_time = min(base_wait_time * (2 ** retries), max_wait_time)
            wait_time += random.uniform(0, 1)  # ランダムなズレを追加(Jitter)
            print(f"Retrying in {wait_time} seconds...")
            time.sleep(wait_time)
            retries += 1
    raise Exception("Max retries reached, request failed")

クォータの藹??加の臀??頼もできるが、基本的に臀??記の臀??限がある

1. Google Docs API の利用臀??限

  • ユーザーごと縺?1分あたりのリクエスト謨?:
    • 1,000 リクエスト/ユーザ繝?/100秒
  • プロジェクトごと縺?1日あたりのリクエスト謨?:
    • プロジェクトごと縺?1譌?100万リクエスト(デフォルト)

これらの制限を超えると、リクエストが拒否されるか、APIを利用できな縺?なることがあります。

2. Google Drive API の利用臀??限

  • ユーザーごと縺?100秒あたりのリクエスト謨?:
    • 1,000 リクエスト/ユーザ繝?/100秒
  • プロジェクトごと縺?1日あたりのリクエスト謨?:
    • 1譌?10億リクエスト(デフォルト)
  • ユーザーごとのデータ転送驥?の制限:
    • 読み込み縺?750GB/譌?/ユーザ繝?
    • 書き込みはユーザーごとの制限が異なるため、大驥?のデータ処理を行う場合は注諢?が必要

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


Navi: <  1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19  >