みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

Google Cloud

クラウドプロバイダのシェア

Synergy Research Group が公開している情報によると,2022 Q4 は全世界で610億ドル ($61 billion) を超える料金がクラウドインフラストラクチャサービスに支払われているそうです.シェアの推移は以下のグラフようになっています. *1 Amazon が 3割,Micro…

Terraform で GCS Bucket を削除するのに苦労した

Google Cloud Storage (GCS) の,とある Bucket を Terraform で管理していたのですが,不要になったので削除することにしました.何も考えずに google_storage_bucket を tf ファイルから削除して,terraform apply を実行しましたが,以下のようなエラーメ…

Cloud Pub/Sub の再試行

Cloud Pub/Sub の再試行の動作確認をしました.Terraform で以下のように topic と subscription を作成しました.なお,subscription は一瞬で status code 500 を返す web サーバーに push するよう設定しました. resource "google_pubsub_topic" "test" …

Cloud SQL への接続とポイントインタイム リカバリの検証

Cloud SQLは, 豊富な拡張機能コレクション、構成フラグ、デベロッパー エコシステムを備えた、MySQL、PostgreSQL、SQL Server 向けのフルマネージド リレーショナル データベース サービスです。(https://cloud.google.com/sql?hl=ja) Cloud SQL で Postgre…

Workload Identity で Github Actions を快適に認証する

Google Cloud の Workload Identity を使用して,Github Actions から認証できるように設定します. Workload Identity とは Workload Identity を設定する サービスアカウントとして認証する .github/workflows/oidc.yml 監査ログを使用する 許可する範囲を…

Django async viewを使用してCloud Runで並行処理をする

一般的にWebサーバーの開発は非同期処理と相性がよいです.Webサーバーは不特定多数の人から任意の時刻にリクエストを受信して処理し,レスポンスを返します.Webサーバーの処理の多くは,データベースなど外部のリソースにアクセスすることなので,I/O boun…

Cloud Runでアクセス元のIPアドレスを取得する

結論 Cloud Run で,アクセス元のIPアドレスを取得するには,x-forwarded-forヘッダーを使用します. 検証 リクエストヘッダーを返すWebサーバーを作成して,Cloud Runにデプロイし,動作を確認しました. main.ts import express from 'express'; const app…

terraform importで簡単にtfファイルを作成する

Terraformには,importコマンドが用意されており,既存のインフラストラクチャをTerraformに読み込めます. Command: import | Terraform by HashiCorp Terraformのドキュメントを眺めながら.tfファイルを手入力で作成するのもよいのですが,サービス提供元…

ログベースの指標は作成後に集計される

Google Cloud Platformでユーザー定義のログベースの指標を作成し,ダッシュボードにグラフで表示しようと思ったのですが,作成直後にデータが表示されずに困りました. 原因 ログベースの指標は作成後に集計されるため,しばらく時間を置かないとデータが表…

Raspberry Pi Zero WからCloud Storageにアップロードする

www.raspberrypi.com Raspberry Pi Zero Wとは,2000円程度で購入できる,以下の性能のシングルボードコンピュータです. 802.11 b/g/n wireless LAN 1GHz, single-core CPU 512MB RAM CPUはARMv6で,WiFiも搭載しているため,pythonの実行結果をGoogle Clou…

functions-framework-pythonの名前はややこしい

functions-framework-pythonの名前がややこしいという話です. GitHub - GoogleCloudPlatform/functions-framework-python: FaaS (Function as a service) framework for writing portable Python functions プロジェクトの名前はfunctions-framework-python…

SendGridのSigned Event Webhookを使う

SendGridの送信履歴は数週間しか残らないので,履歴を保存するために,Webhookを利用して自分のサーバーに記録する仕組みを用意しなければなりません. Google Cloud Functionsを利用して,かんたんにPythonで実装してみました.とりあえずverifyできるかを…

Google Cloud SQLのインスタンスをprivate IPで扱う

プライベートIPアドレスを割り当てたGoogle Cloud SQLのインスタンスに,Google Cloud Runなどのサーバーレス環境からアクセスする方法を紹介します. 方法 Terraformのgoogle_sql_database_instance,google_compute_network,google_compute_global_addres…

Djangoからpostgresデータベースに効率よく接続する

Djangoで作成したWebアプリケーションをCloud Runで実行して,Cloud SQL postgresに接続する負荷テストを実施していたところ,以下のエラーが発生しました. psycopg2.OperationalError: FATAL: remaining connection slots are reserved for non-replicatio…

Google Cloud Platformのプロジェクト数の割り当てを増やしてもらった

Google Cloud Platformで,プロジェクトを作成して使わなくなったら削除を繰り返していたら,プロジェクトがあと2個しか作成できなくなってしまいました. 初期設定では25個のプロジェクトが作成可能な割り当てでした.プロジェクト数は削除したらすぐに減る…

Cloud RunでDjangoの快適なlogging設定

Cloud RunでDjangoのプロジェクトを快適に実行するためのloggingについてまとめます. 実行環境 Python logging logging.Logger logging.Handler logging.Formatter logging.Filter logging.config.dictConfig DjangoのLOGGINGの設定 Cloud Logging 認証の準…

Cloud FunctionsとCloud Runの処理速度を比較する

CPUが律速となる処理を行うのに適したサーバーレス環境を選定するために,ベンチマークなどを行いました.候補はGCPのCloud FunctionsとCloud Runです.AWSやAzureなど他のプラットフォームは検証しません. 注意事項 Cloud Functions 256 MB 400 MHz 1,024 …

ブラウザのスクリーンショットを利用したWebサービスをpuppeteerで作る

URLが含まれるリクエストを受け付けて,そのURLにブラウザでアクセスし,描写された内容をスクリーンショットしてPNG画像を生成し,その画像をレスポンスするWebサービスを作成した時の話です. なお,このWebサービスはみーが個人的に利用するために作成し…

Cloud Deployment Manager まとめ

自分の勉強のために,Cloud Deployment Managerについてまとめました. Terraformとの比較 Cloud Deployment Manager の最小構成 create update delete jinjaテンプレートを使用する template_pubsub.jinja main.yaml 環境変数 template_pubsub.jinja main.y…

コンテナはスケーラブルにできるが、お財布はスケールしない

最近Google Cloud Platformを使っています.例えば,Cloud Runは以下のような宣伝がされています. フルマネージドのサーバーレス プラットフォーム上で、スケーラブルなコンテナ化されたアプリケーションを開発し、デプロイできます。*1 気軽にスケーラブル…

Cloud Functionsのファイルシステムについて

Cloud Functionsのファイルシステムについては,ここに詳しく書いてありますが,自分なりにまとめます. 基本的にread-only Cloud Functionsで実行するPythonスクリプトが,ファイルシステムに何らのデータを書き込もうとするとエラーになります. [Errno 30…

快適なCloud Functionsの開発環境を整える

Google Cloud PlatformのFaaSであるCloud Functionsを利用したサービスを開発する時のために,できるだけ快適に開発できるようにするために工夫したことをまとめます. 環境 Python3.8 macOS 10.15.7 ローカルで実行するためにFunctions Framework for Pytho…

Cloud SQLを使わないための費用

最近,Cloud SQLを使い始めました.時々しか使わないCloud SQLのインスタンスがあるので,使う時に起動して,使い終わったら停止するようにしていました. しばらくしてGoogleからの請求書を確認すると,以下の項目が請求されていました. Cloud SQL Cloud S…

Google Cloud Runは魅力的だがまだ実用的でない

DockerベースのWebアプリケーションの運営に,Google Cloud Runがよさそうだと思ったので,使ってみました.Google Cloud Runは2019年12月に正式リリースされたばかりで,まだ半年しか経過していません*1.とはいうものの,Dockerイメージを指定して,CPUと…

Google Compute Engineでディスクを作成しマウントする方法

Google Compute Engine (GCE) で,インスタンスに接続したディスクをマウントする方法をメモしておきます. $ ls -l /dev/disk/by-id/ total 0 lrwxrwxrwx 1 root root 9 Jul 18 15:18 google-data -> ../../sdb lrwxrwxrwx 1 root root 10 Jul 18 15:18 goo…

Google Compute Engineで安定できれいにpythonをインストールする

Google Compute Engineで安定できれいなpython3をインストールするにはいくつかコツがあるので,備忘録を兼ねてメモします. Google Compute Engineをはじめクラウドではいろいろなインスタンスの種類があって,高性能なものほど高価です.しかしサーバーサ…

DrupalをGoogle App Engineにデプロイする

Drupalでサイトを運営するにはサーバーの管理が必要で,nginxの設定とかアップロードとかが面倒なうえに余計なことをするとサイトが停止してしまう.以前,Amazon EC2のUbuntuでnginxとphp-fpmとDrupal 7という記事でPaaS (Platform as a Service)なサーバー…

Google App EngineでDjangoの管理画面が使えない

Google App EngineでDjangoの管理画面(admin/)で, You don"t have permission to edit anything. (変更のためのパーミッションがありません。) というエラーが表示されたら,urls.pyの内容を確認してください. # url.py from django.conf.urls import patt…

Google App EngineでAdminerを使ってGoogle Cloud SQLを操作する

Google Cloud SQLは,GoogleのMySQLデータベースサービスです.AdminerをGoogle Apps Engineにデプロイし.Google Cloud SQLをブラウザーから操作する方法を紹介します.Adminerは1つだけのphpファイルで構成されているために,phpmyadminよりもずっと簡単に…