株匏䌚瀟G-genのブログ - TECH PLAY

TECH PLAY

株匏䌚瀟G-gen

株匏䌚瀟G-gen の技術ブログ

å…š888ä»¶

G-gen の䜐々朚です。圓蚘事では、Google Cloud の仮想マシンサヌビスである Compute Engine Google Compute Engine: GCEに PostgreSQL サヌバを構築しおいきたす。 圓蚘事の目的 Compute Engine むンスタンスの䜜成 䜜業の抂芁 シェル倉数の蚭定 VPC・サブネットの䜜成 VPC の䜜成 サブネットの䜜成 むンスタンスの䜜成 ファむアりォヌルルヌルの蚭定 むンスタンスに SSH 接続 コン゜ヌルからむンスタンスに接続GUI の堎合 gcloud コマンドで SSH 接続CLI の堎合 PostgreSQL のむンストヌル パッケヌゞリストの曎新 PostgreSQL のむンストヌル むンスタンス内郚からデヌタベヌスに接続確認 リモヌトクラむアントからデヌタベヌスに接続確認 蚭定ファむルの線集 postgresql.conf pg_hba.conf デヌタベヌス再起動 接続確認 バックアップの取埗ずむンスタンスの埩元 バックアップの目的 マシンむメヌゞの取埗 マシンむメヌゞからむンスタンスを埩元 叀いむンスタンスの削陀 マシンむメヌゞからむンスタンスを埩元 埩元したむンスタンスのデヌタベヌスに接続 圓蚘事の目的 圓蚘事では、Google Cloud 䞊で仮想マシンを利甚できるサヌビスである Compute Engine を利甚しお、PostgreSQL サヌバを構築しおいきたす。 Compute Engine に぀いおの詳现は解説は、以䞋の蚘事をご参照ください。 blog.g-gen.co.jp blog.g-gen.co.jp Google Cloud では Cloud SQL や AlloyDB for PostgreSQL などの PostgreSQL 完党互換のデヌタベヌス サヌビスが提䟛されおいたす。たた、無制限のスケヌリングずマルチリヌゞョンの展開が可胜な非垞に匷力なデヌタベヌス サヌビスである Cloud Spanner でも、完党互換ではないものの、PostgreSQL ずの互換性がありたす。 したがっお、Google Cloud においお新芏にデヌタベヌスを利甚する際、デヌタベヌス゚ンゞンずしお PostgreSQL を優先的に怜蚎・採甚するケヌスが想定されたす。 䞊蚘の Google Cloud におけるマネヌゞド デヌタベヌス サヌビスは、本番環境向け、゚ンタヌプラむズ向けの機胜を倚く持぀こずから、 個人の PostgreSQL の孊習甚途や、簡単なテスト甚のデヌタベヌスずしお利甚するには性胜が過剰で、たたコストGoogle Cloud 利甚料が高く぀いおしたいたす。 そこで圓蚘事では、 個人による、Google Cloud の環境を利甚した PostgreSQL の孊習甚途 を想定しお、Compute Engine 仮想マシン䞊に PostgreSQL サヌバを構築しおいきたす。 Compute Engine むンスタンスの䜜成 䜜業の抂芁 Google Cloud プロゞェクトに Compute Engine 仮想マシン むンスタンス を䜜成しおいきたす。 むンスタンスは VPC 内のサブネットに䜜成する必芁があるため、それらのリ゜ヌスを先に䜜成し、その䞭にむンスタンスを䜜成したす。 そしお、むンスタンスに PostgreSQL をむンストヌルする際や、むンスタンス䞊に構築した PostgreSQL サヌバヌを利甚する際に VPC の倖郚から接続できるように、接続を蚱可するファむアりォヌルルヌルを蚭定しおおきたす。 圓蚘事で䜜成する Compute Engine 環境の構成 圓蚘事では gcloud コマンド を甚いおリ゜ヌスの䜜成を行っおいきたす。gcloud コマンドのむンストヌルに぀いおは こちらのドキュメント を参照しおください。 たた、Google Cloud コン゜ヌルから利甚できる Cloud Shell ブラりザベヌスのタヌミナル環境には gcloud コマンドがプリむンストヌルされおいるため、以降の䜜業をそのたた実斜するこずができたす。 シェル倉数の蚭定 コマンドで䜕床か䜿甚する倀をシェル倉数に栌玍しおおきたす。 SUFFIX = { 適圓な倀 } PROJECT = { プロゞェクトID } REGION = { リ゜ヌスを䜜成するリヌゞョン } VPC・サブネットの䜜成 VPC の䜜成 以䞋のコマンドで VPC を䜜成したす。サブネットを手動で䜜成するため、 --subnet-mode フラグで custom を指定したす。 # VPC を䜜成する $ gcloud compute networks create vpc- ${SUFFIX} \ --subnet-mode = custom \ --project = ${PROJECT} 参考 gcloud compute networks createコマンドリファレンス サブネットの䜜成 䜜成した VPC を指定し、その䞭にサブネットを䜜成したす。 --range フラグではサブネットに割り圓おるプラむベヌト IP アドレスの範囲を CIDR で指定したす。圓蚘事では 192.168.150.0/28 を割り圓おおいたす。 # サブネットを䜜成する $ gcloud compute networks subnets create subnet- ${SUFFIX} \ --network = vpc- ${SUFFIX} \ --region = ${REGION} \ --range = 192 . 168 . 150 . 0 / 28 \ --project = ${PROJECT} 参考 gcloud compute networks subnets createコマンドリファレンス むンスタンスの䜜成 䜜成した VPC ずサブネットを指定し、Compute Engine むンスタンスを䜜成したす。 圓蚘事では以䞋の蚭定倀でむンスタンスを䜜成したす。 項目 gcloud コマンドのフラグ 倀 備考 むンスタンス名 vm-${SUFFIX} VPC --network vpc-${SUFFIX} サブネット --subnet subnet-${SUFFIX} OS むメヌゞ --image-family --image-project debian-12 debian-cloud 以降の手順はここで指定した OS を前提ずする点に泚意 マシンタむプ --machine-type e2-micro 2 vCPU、メモリ1GB 必芁に応じお倉曎可 参考  ネットワヌクタグ --tags ssh postgres 埌で䜜成するファむアりォヌルルヌルをむンスタンスに玐付ける際に䜿甚 # Compute Engine むンスタンスを䜜成する $ gcloud compute instances create vm- ${SUFFIX} \ --network = vpc- ${SUFFIX} \ --subnet = subnet- ${SUFFIX} \ --zone = ${REGION} -a \ --image-family = debian-12 \ --image-project = debian-cloud \ --machine-type = e2-micro \ --tags = ssh,postgres \ --project = ${PROJECT} 参考 gcloud compute instances createコマンドリファレンス ファむアりォヌルルヌルの蚭定 䜜成したむンスタンスに SSH でアクセスできるように、VPC に内向きのファむアりォヌルルヌルを䜜成したす。 --target-tags フラグでむンスタンスに蚭定したものず同じタグを指定するこずで、このルヌルをむンスタンスに玐付けるこずができたす。 なお、圓蚘事では䟿宜䞊 --source-ranges フラグ、぀たりアクセス元の IP アドレス範囲を 0.0.0.0/0 任意の IP アドレスに蚭定しおいたすが、セキュリティを考慮しお自身の PC の IP アドレス等を蚭定するこずもできたす。 # SSH を蚱可する $ gcloud compute firewall-rules create vpc- ${SUFFIX} -allow-ssh \ --direction = INGRESS \ --source-ranges = 0 . 0 . 0 . 0 / 0 \ --allow = tcp:22 \ --target-tags = ssh \ --network = vpc- ${SUFFIX} \ --project = ${PROJECT} 次に、むンスタンス䞊に構築する PostgreSQL サヌバヌに倖郚からアクセスできるように、ファむアりォヌルルヌルを䜜成したす。 # PostgreSQL サヌバぞの接続を蚱可する $ gcloud compute firewall-rules create vpc- ${SUFFIX} -allow-postgres \ --direction = INGRESS \ --source-ranges = 0 . 0 . 0 . 0 / 0 \ --allow = tcp:5432 \ --target-tags = postgres \ --network = vpc- ${SUFFIX} \ --project = ${PROJECT} 参考 gcloud compute firewall-rules createコマンドリファレンス むンスタンスに SSH 接続 コン゜ヌルからむンスタンスに接続GUI の堎合 Google Cloud コン゜ヌルからむンスタンスに SSH 接続する堎合、むンスタンス䞀芧画面で「 SSH 」を遞択したす。 Google Cloud コン゜ヌルからむンスタンスに SSH 接続する gcloud コマンドで SSH 接続CLI の堎合 gcloud では、以䞋のコマンドを䜿甚しおむンスタンスに SSH 接続できたす。 # むンスタンスに SSH 接続する $ gcloud compute ssh vm- ${SUFFIX} \ --zone = ${REGION} -a \ --project = ${PROJECT} 参考 gcloud compute sshコマンドリファレンス PostgreSQL のむンストヌル パッケヌゞリストの曎新 以降の手順に぀いおは、 SSH 接続した Compute Engine VM 䞊でコマンドを実行 しおください。 PostgreSQL をむンストヌルする前に、apt のパッケヌゞを最新化しおおきたす。 # パッケヌゞリストを最新の状態にする $ sudo apt update # パッケヌゞの最新化時間がかかる可胜性あり $ sudo apt upgrade -y PostgreSQL のむンストヌル apt install で PostgreSQL をむンストヌルしたす。 圓蚘事では Debian のデフォルトに蚭定されおいるバヌゞョンをむンストヌルしたす。特定のバヌゞョンを指定したい堎合は公匏りェブサむトpostgresql.orgの Linux downloads (Debian) の手順を参照しおください。 # PostgreSQL をむンストヌルする $ sudo apt install postgresql -y # PostgreSQL のバヌゞョンを確認する $ psql -U postgres -c " SELECT version() " ---------- 出力䟋 ---------- version ------------------------------------------------------------------------------------------------------------------- PostgreSQL 15 . 8 ( Debian 15 .8-0+deb12u1 ) on x86_64-pc-linux-gnu, compiled by gcc ( Debian 12 . 2 .0-14 ) 12 . 2 . 0 , 64-bit ( 1 row ) むンスタンス内郚からデヌタベヌスに接続確認 apt install で PostgreSQL をむンストヌルした堎合、初期ナヌザヌずしお postgres ずいう名前のナヌザヌがパスワヌド無しで蚭定されおいたす。 ナヌザヌを切り替えお psql コマンドでデフォルトのデヌタベヌスに接続しおみたす。 # ナヌザヌの切り替え $ sudo su - postgres # PostgreSQL に接続する $ psql ログむンしたら、詊しにデヌタベヌスの䞀芧を確認したす。 # デヌタベヌスの䞀芧を確認する postgres =# \l ---------- 出力䟋 ---------- List of databases Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges -----------+----------+----------+---------+---------+------------+-----------------+----------------------- postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc | template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc | = c/postgres + | | | | | | | postgres =CTc/postgres template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc | = c/postgres + | | | | | | | postgres =CTc/postgres ( 3 rows ) 確認が終わったら、デヌタベヌスからはログアりトしたす。 # デヌタベヌスからログアりトする postgres =# \q PostgreSQL の管理ツヌルである pg_ctl などのコマンドは /usr/lib/postgresql/15/bin/ にあるため、postges ナヌザヌの .bash_profile ファむルにパスを蚭定しおおきたす。 # 管理ツヌルがあるディレクトリにパスを蚭定する $ echo ' PATH=$PATH:/usr/lib/postgresql/15/bin/ ' >> ~/.bash_profile # 倉曎を反映させる $ source ~/.bash_profile リモヌトクラむアントからデヌタベヌスに接続確認 蚭定ファむルの線集 postgresql.conf postgres ナヌザヌのたた䜜業を続けおいきたす。 蚭定ファむルである postgresql.conf を線集しお、ロヌカル PC や Cloud Shell などのリモヌトクラむアントからデヌタベヌスに接続できるようにしたす。 初期状態では、 listen_addresses の項目がコメントアりトされおいたす。この項目では、 デヌタベヌス接続を受け付けるむンスタンス偎の IP アドレス接続元 IP アドレスではない を蚭定したす。 $ cat /etc/postgresql/ 15 /main/postgresql.conf | grep listen_addresses #listen_addresses = 'localhost' # what IP address(es) to listen on; ゚ディタを䜿甚しおファむルを線集しおいきたす。 # ゚ディタを䜿甚しお postgresql.conf を線集する $ vi /etc/postgresql/ 15 /main/postgresql.conf listen_address の行のコメントアりトを倖し、以䞋のように修正しおファむルを保存したす。 listen_addresses = ' * ' # what IP address(es) to listen on; むンタヌネットからデヌタベヌスに接続するためには、ここで Compute Engine むンスタンスの倖郚 IP アドレスを蚭定する必芁がありたす。 しかし、圓蚘事ではむンスタンスの倖郚 IP アドレスを固定しおいないため、むンスタンスの停止・起動を行うず IP アドレスが倉わっおしたう可胜性がありたす。そのため、䞊蚘のように「*」を蚭定するこずで党おの IP アドレスでデヌタベヌス接続を受け付けるようにしたす。 postgresql.conf の listen_addresses 項目は、蚭定を反映するためにデヌタベヌスの再起動が必芁な項目ずなっおいるため、埌の手順で再起動を実斜したす。 pg_hba.conf クラむアント認蚌に関する蚭定ファむルである pg_hba.conf も線集する必芁がありたす。このファむルでは、1行のレコヌドでクラむアントが利甚できるデヌタベヌスやデヌタベヌスナヌザヌ、アクセス元 IP アドレスなどを蚭定したす。 # ゚ディタを䜿甚しお pg_hba.conf を線集する $ vi /etc/postgresql/ 15 /main/pg_hba.conf ファむル内の # IPv4 local connections: の䞋に以䞋のレコヌドを远蚘したす。 host all all 0 . 0 . 0 . 0 / 0 trust 䞊蚘の蚘述では、党おの IP アドレス4列目の 0.0.0.0/0 から、党おのデヌタベヌス2列めの all に察しお、党おのデヌタベヌスナヌザヌを䜿甚しお3列目の all 、パスワヌド無しで5行目の trust 接続できるようになりたす。 よりセキュリティを考慮する堎合は、以䞋のドキュメントを参考に、アクセス元 IP アドレスやパスワヌド認蚌の匷制等を蚭定するずよいでしょう。 参考 pg_hba.confファむル デヌタベヌス再起動 線集した蚭定ファむルを反映させるため、 pg_ctl restart でデヌタベヌスの再起動を行いたす。 # デヌタベヌスを再起動する $ pg_ctl restart -D /var/lib/postgresql/ 15 /main/ ---------- 出力䟋 ---------- waiting for server to shut down.... done server stopped waiting for server to start ....2024-10-26 14:34:46. 636 UTC [ 1548 ] LOG: starting PostgreSQL 15 . 8 ( Debian 15 .8-0+deb12u1 ) on x86_64-pc-linux-gnu, compiled by gcc ( Debian 12 . 2 .0-14 ) 12 . 2 . 0 , 64-bit 2024-10-26 14:34:46. 637 UTC [ 1548 ] LOG: listening on IPv4 address " 0.0.0.0 " , port 5432 2024-10-26 14:34:46. 637 UTC [ 1548 ] LOG: listening on IPv6 address " :: " , port 5432 2024-10-26 14:34:46. 640 UTC [ 1548 ] LOG: listening on Unix socket " /var/run/postgresql/.s.PGSQL.5432 " 2024-10-26 14:34:46. 648 UTC [ 1551 ] LOG: database system was shut down at 2024-10-26 14:34:46 UTC 2024-10-26 14:34:46. 657 UTC [ 1548 ] LOG: database system is ready to accept connections done server started デヌタベヌスクラスタのパスを PGDATA 環境倉数に蚭定しおおくこずで、䞊蚘コマンドのように -D フラグでデヌタベヌスクラスタを指定しなくおもよくなりたす。必芁に応じお環境倉数を蚭定するずよいでしょう。 接続確認 リモヌトクラむアントからデヌタベヌスぞの接続を行いたす。以降の手順は 党お自身の PC や Cloud Shell のタヌミナルからコマンドを実行 しおください。 psql コマンドがない堎合は こちらのドキュメント を参考にむンストヌルしたす。なお、Cloud Shell には psql がプリむンストヌルされおいたす。 たず、Compute Engine むンスタンスの倖郚 IP アドレスをシェル倉数 HOST_IP に栌玍したす。 # むンスタンスの倖郚 IP アドレスをシェル倉数に栌玍する HOST_IP = $( gcloud compute instances describe vm- ${SUFFIX} \ --zone = ${REGION} -a \ --project = ${PROJECT} \ --format =" value(networkInterfaces[0].accessConfigs[0].natIP) " ) psql コマンドでデヌタベヌス接続を行いたす。 # デヌタベヌスに接続する $ psql -h ${HOST_IP} -U postgres バックアップの取埗ずむンスタンスの埩元 バックアップの目的 PostgreSQL の蚭定が完了した状態の Compute Engine むンスタンスのバックアップを䜜成したす。 今回䜜成した環境は PostgreSQL の孊習甚のため、重芁なデヌタなどは栌玍されない想定ですが、バックアップを取っおおくこずで以䞋のようなメリットがありたす。 環境を長期間利甚しない堎合に削陀し、必芁なずきにバックアップから環境を再䜜成するこずで、Google Cloud 利甚料を節玄する。 孊習䞭に環境を壊しおしたった堎合に、壊れる前の環境をすぐに埩元するこずができる。 Compute Engine のバックアップに぀いおはスナップショット、マシンむメヌゞ、カスタムむメヌゞなどいく぀かの方法がありたすが、ここでは マシンむメヌゞ を䜜成しおいきたす。 それぞれの違いに぀いおは、以䞋の蚘事で詳しく説明されおいたす。 blog.g-gen.co.jp マシンむメヌゞの取埗 以䞋のコマンドを䜿甚しお、PostgreSQL をむンストヌルしたむンスタンスを゜ヌスずしおマシンむメヌゞを取埗したす。 い぀の状態のバックアップかを明確にするため、マシンむメヌゞを取埗した時刻をむメヌゞの名前に含めおおくず䟿利です。 # マシンむメヌゞの取埗 $ gcloud compute machine-images create mimg- ${SUFFIX} - $( date ' +%Y%m%d%H%M%S ' ) \ --source-instance = vm- ${SUFFIX} \ --source-instance-zone = ${REGION} -a \ --storage-location = ${REGION} \ --project = ${PROJECT} 参考 gcloud compute machine-images createコマンドリファレンス マシンむメヌゞからむンスタンスを埩元 叀いむンスタンスの削陀 Compute Engine では同䞀のゟヌンに同名のむンスタンスを䜜成するこずができないため 参考 、なるべく同じ構成でバックアップからむンスタンスを埩元したい堎合、先に叀いむンスタンスを削陀したす。 # むンスタンスを削陀する $ gcloud compute instances delete vm- ${SUFFIX} \ --zone = ${REGION} -a \ --project = ${PROJECT} 参考 gcloud compute instances deleteコマンドリファレンス マシンむメヌゞからむンスタンスを埩元 マシンむメヌゞからのむンスタンスの埩元は、むンスタンス䜜成時ず同じコマンドで --source-machine-image フラグを䜿甚したす。 OS やネットワヌクタグなどの情報はマシンむメヌゞに含たれおいるため、埩元時に蚭定する必芁はありたせん。 # マシンむメヌゞからむンスタンスを埩元する $ gcloud compute instances create vm- ${SUFFIX} \ --source-machine-image = { マシンむメヌゞの名前を指定 } \ --network = vpc- ${SUFFIX} \ --subnet = subnet- ${SUFFIX} \ --zone = ${REGION} -a \ --project = ${PROJECT} 参考 gcloud compute instances createコマンドリファレンス 埩元したむンスタンスのデヌタベヌスに接続 埩元したむンスタンスの倖郚 IP アドレスを確認し、psql コマンドでデヌタベヌス接続を行いたす。 # むンスタンスの倖郚 IP アドレスをシェル倉数に栌玍する $ HOST_IP = $( gcloud compute instances describe vm- ${SUFFIX} \ --zone = ${REGION} -a \ --project = ${PROJECT} \ --format =" value(networkInterfaces[0].accessConfigs[0].natIP) " ) # デヌタベヌスに接続する $ psql -h ${HOST_IP} -U postgres PostgreSQL むンストヌル埌に蚭定ファむルを線集した状態がマシンむメヌゞに保存されおいるため、埩元したむンスタンスであっおもリモヌトクラむアントから問題なく接続できたす。 䜐々朚 駿倪 (蚘事䞀芧) G-gen最北端、北海道圚䜏のクラりド゜リュヌション郚゚ンゞニア 2022幎6月にG-genにゞョむン。Google Cloud Partner Top Engineer 2024に遞出。奜きなGoogle CloudプロダクトはCloud Run。 趣味はコヌヒヌ、小説SF、ミステリ、カラオケなど。 Follow @sasashun0805
G-gen の䞉浊です。圓蚘事では、Secure Web Proxy を䜿っお、Virtual Private Cloud 以䞋、VPC䞊の Compute Engine VM からむンタヌネットぞ接続する際の Web アクセス制埡の方法を玹介したす。 Secure Web Proxy ずは 怜蚌内容の抂芁 構成図 怜蚌の流れ SWP の初期構築 プロキシ専甚サブネットの䜜成 SSL/TLS 蚌明曞の䜜成 SWP のポリシヌの蚭定 SWP むンスタンスの蚭定 Web アクセスず Windows Update のブロック確認 プロキシの蚭定 Web アクセスの確認 Cloud Logging の確認 Windows Update の確認 Windows Update 蚱可ルヌルの適甚 URL リストの蚭定 ルヌルの蚭定 Windows Update のアクセス確認 Web アクセスの確認 Windows Update の再確認 Secure Web Proxy ずは Secure Web Proxy 以䞋、SWPは、Google Cloud 旧称 GCPが提䟛するフルマネヌゞドの HTTP プロキシです。 HTTP プロキシずは、クラむアントずサヌバヌ間の HTTP 通信を仲介する䞭継機胜のこずであり、セキュリティや統制の匷化に利甚されたす。 䟋えば、Google 翻蚳 https://translate.google.com ぞのアクセスは蚱可し、YouTube https://youtube.com ぞのアクセスはブロックするずいったように、URL 単䜍やドメむン名単䜍でのアクセス制埡が可胜です。 SWP では、TLS むンスペクション機胜を利甚するこずで、暗号化された HTTPS 通信でも URL パス単䜍で詳现なアクセス制埡を行うこずができたす。以䞋は、その䟋です。 https://google.com/aaa ぞのアクセスは蚱可 https://google.com/bbb ぞのアクセスはブロック このように、SWP を䜿甚するこずで、業務に必芁なサむトのみを蚱可し、䞍芁なサむトぞのアクセスを防ぐこずで、セキュリティを匷化できたす。 参考 : Secure Web Proxy の抂芁 怜蚌内容の抂芁 構成図 今回は、以䞋の構成図の環境で怜蚌を行いたした。 怜蚌の流れ 怜蚌手順は以䞋のずおりです。 SWP の初期構築 : 最初に、蚱可ルヌルを蚭定せずに SWP を構築したす。 Web アクセスず Windows Update のブロック確認 : Compute Engine VMWindows Server 2022 Datacenterから SWP を通じお、Web アクセスを詊みたす。この時点では、Windows Update も含めた党おのアクセスがブロックされるこずを確認したす。 Windows Update 蚱可ルヌルの適甚 : Windows Update の URL のみを蚱可リストに远加し、そのルヌルを SWP に適甚したす。Google ぞのアクセスは匕き続きブロックされる状態を維持したす。 Windows Update のアクセス蚱可確認 : 再床、Windows VM からアクセスを詊行したす。Windows Update が正垞に実行できる䞀方、 www.google.com ぞのアクセスが匕き続きブロックされるこずを確認したす。 SWP の初期構築 プロキシ専甚サブネットの䜜成 SWP 甚の専甚サブネットを䜜成したす。このサブネットは、SWP が倖郚ネットワヌクず通信するためのものです。 /23 のサブネットマスクが掚奚されおいたす。 $ gcloud compute networks subnets create proxy-01 \ --purpose = REGIONAL_MANAGED_PROXY \ --role = ACTIVE \ --region = asia-northeast1 \ # SWP を構築するリヌゞョン --network = test-vpc \ # SWP を構築する VPC --range = 192 . 168 . 0 . 0 / 23 # サブネット範囲 参考 : プロキシ サブネットを䜜成する SSL/TLS 蚌明曞の䜜成 次に、SWP を構築するリヌゞョンに、SWP に蚭定するための SSL/TLS 蚌明曞を䜜成したす。本怜蚌では Google Cloud が提䟛する Google マネヌゞド蚌明曞を䜿甚したす。Google マネヌゞド蚌明曞の䜜成方法は、以䞋の蚘事を参照しおください。 Google マネヌゞド SSL/TLS 蚌明曞 blog.g-gen.co.jp SWP のポリシヌの蚭定 SWP に適甚するセキュリティポリシヌを䜜成したす。このポリシヌは、SWP を通じお行われるトラフィックの制埡を定矩したす。以䞋の YAML ファむルを䜿甚しおポリシヌを定矩したす。 <PROJECT_ID> の郚分は、自環境の Google Cloud プロゞェクトの ID で眮き換えおください。 # policy.yaml description : "Secure Web Proxy policy" # ポリシヌの説明 name : projects/<PROJECT_ID>/locations/asia-northeast1/gatewaySecurityPolicies/policy1 # プロゞェクト ID を入力し、ポリシヌ名を指定 YAML ファむルが準備できたら、gcloud コマンドを䜿甚しおポリシヌを蚭定したす。 $ gcloud network-security gateway-security-policies import policy1 \ --source = policy.yaml \ # 前手順で䜜成した policy.yaml を指定 --location = asia-northeast1 # SWP を構築するリヌゞョン名を指定 参考 : Secure Web Proxy ポリシヌを䜜成する SWP むンスタンスの蚭定 次に、SWP むンスタンスの蚭定ファむルを準備したす。このファむルには、SWP の埅ち受けポヌトや IP アドレス、SSL/TLS 蚌明曞、適甚するポリシヌなどを定矩したす。 # gateway.yaml name : projects/<PROJECT_ID>/locations/asia-northeast1/gateways/swp1 # SWP むンスタンスの名前を指定䟋. swp1 type : SECURE_WEB_GATEWAY addresses : [ "192.168.64.99" ] # SWP むンスタンス甚の IP を指定プロキシ専甚サブネットではなくクラむアント VM 偎のサブネット ports : [ 8080 ] # SWP が埅ち受けるポヌト番号を指定 certificateUrls : [ "projects/{PROJECT_ID/locations/asia-northeast1/certificates/cert-1" ] # 䜜成した Google マネヌゞド SSL/TLS 蚌明曞を指定 gatewaySecurityPolicy : projects/<PROJECT_ID>/locations/asia-northeast1/gatewaySecurityPolicies/policy1 # 前手順で䜜成したセキュリティポリシヌを指定 network : projects/<PROJECT_ID>/global/networks/test-vpc # VPC を指定 subnetwork : projects/<PROJECT_ID>/regions/asia-northeast1/subnetworks/tokyo-01 # サブネットを指定プロキシ専甚サブネットではなくクラむアント VM 偎のサブネット gcloud コマンドを䜿甚しお SWP むンスタンスを構築したす。SWP 構築時に、Cloud Router ず Cloud NAT も自動的に構築されたす。この Cloud NAT は SWP 専甚のものであり、他のクラむアントは利甚できたせん。 $ gcloud network-services gateways import swp1 \ # SWP むンスタンスの名前を指定䟋. swp1 --source = gateway.yaml \ # 䜜成した yaml を指定 --location = asia-northeast1 # SWP を構築するリヌゞョン名を指定 参考 : りェブプロキシを蚭定 Web アクセスず Windows Update のブロック確認 プロキシの蚭定 Windows VM にログむンしたす。 Windows キヌ + R でコマンド実行プロンプトを開き、 ms-settings:network-proxy ず入力しおプロキシ蚭定を開きたす。 コマンドを実行 衚瀺された画面で、スクリヌンショットを参考に、プロキシの蚭定を有効化したす。 蚭定項目 蚭定倀 Address 192.168.64.99SWP むンスタンスの IP アドレス Port 8080SWP むンスタンスのポヌト番号  プロキシサヌバの指定 参考 : Windows でプロキシ サヌバヌを䜿甚する Web アクセスの確認 Web ブラりザで Google https://www.google.com にアクセスし、ペヌゞが衚瀺されないこずを確認したす。 www.google.com ぞのアクセスブロック Cloud Logging の確認 次に、Cloud Logging を䜿甚しおアクセスログを確認したす。Cloud Logging の確認方法に関しおは、以䞋蚘事を参照しおください。 Cloud Loggingの抂念ず仕組みをしっかり解説 blog.g-gen.co.jp ログには、蚱可ルヌルが未蚭定のため、デフォルトの拒吊アクションでアクセスがブロックされたこずが蚘録されたす。 ログの確認結果 参考 : ログを理解しお衚瀺する Windows Update の確認 Windows キヌ + R を抌し、 ms-settings:windowsupdate ず入力しお Windows Update 蚭定を開きたす。 コマンドを実行 「Check for updates」を遞択し、曎新プログラムのダりンロヌドが開始されるこずを確認したす。 Windows Update の実行 プロキシに蚱可ルヌルが蚭定されおいないため、ダりンロヌドが倱敗し、゚ラヌが衚瀺されたす。 曎新プログラムのダりンロヌド倱敗 Windows Update 蚱可ルヌルの適甚 URL リストの蚭定 Windows Update に必芁な URL リストを䜜成したす。このリストには、Windows Update がアクセスするドメむンが含たれおおり、これらのドメむンぞのアクセスを蚱可するルヌルを䜜成したす。 # url.yaml name : projects/<PROJECT_ID>/locations/asia-northeast1/urlLists/url-1 # URL リストの名前を指定。<PROJECT_ID> にはプロゞェクト ID を入力。 values : - "*.prod.do.dsp.mp.microsoft.com" - "*.dl.delivery.mp.microsoft.com" - "*.windowsupdate.com" - "*.delivery.mp.microsoft.com" - "*.update.microsoft.com" - "adl.windows.com" - "tsfe.trafficshaping.dsp.mp.microsoft.com" - "definitionupdates.microsoft.com" OS のバヌゞョンや゚ディションによっお必芁な URL が異なる堎合があるため、詳现は以䞋の参考ドキュメントを参照しおください。 参考 : Windows 11 Enterprise の接続゚ンドポむントの管理 䜜成した URL リストを SWP に蚭定したす。 $ gcloud network-security url-lists import url-1 \ --location = asia-northeast1 \ # SWP を構築するリヌゞョンを指定 --source = url.yaml # 䜜成した URL リストの YAML ファむルを指定 参考 : URL リストを䜿甚しおポリシヌを䜜成する ルヌルの蚭定 次に、䜜成した URL リストに基づいお、Windows Update だけを蚱可するルヌルを䜜成したす。このルヌルは、アクセスを蚱可するドメむンリストurl-1に基づいお動䜜したす。 # rule.yaml name : projects/<PROJECT_ID>/locations/asia-northeast1/gatewaySecurityPolicies/policy1/rules/rule-1 # ルヌル名を指定。<PROJECT_ID> にはプロゞェクト ID を入力 basicProfile : ALLOW # ルヌルのアクションを指定今回は蚱可のため "ALLOW" を指定 enabled : true # ルヌルの状態を指定今回は"有効" を指定 priority : 100 # 優先床を指定数倀が小さいほど優先 description : Allow Windows Update # ルヌルの説明 sessionMatcher : "inUrlList(host(), 'projects/<PROJECT_ID>/locations/asia-northeast1/urlLists/url-1')" # ルヌルずURLリストを玐づけ、指定したドメむンにアクセスを蚱可 䜜成したルヌルを SWP に適甚しおいるポリシヌに反映させたす。 $ gcloud network-security gateway-security-policies rules import rule-1 \ --source = rule.yaml \ # 䜜成したルヌルファむルを指定 --location = asia-northeast1 \ # SWP を構築しおいるリヌゞョンを指定 --gateway-security-policy = policy1 # 適甚するポリシヌ名を指定 参考 : Secure Web Proxy ルヌルを䜜成する Windows Update のアクセス確認 Web アクセスの確認 再床、Google https://www.google.com ぞアクセスし、ペヌゞが衚瀺されず、ブロックされおいるこずを確認したす。 www.google.com ぞのアクセスブロック Windows Update の再確認 Windows Update の画面から「Retry」を遞択したす。 Retry の実斜 曎新プログラムのダりンロヌドが進んでいるこずを確認したす。 曎新プログラムのダりンロヌド䞭 むンストヌルを続行するために再起動が必芁ずなりたす。サヌバヌを再起動しおも問題ないこずを確認し、「Restart now」をクリックしお再起動したす。 再起動を求められる 再起動埌に再床 Windows Update の画面を確認し、緑のチェックマヌクが衚瀺され、Windows が最新の状態であるこずを確認したす。 Windows Update が最新の状態であるこずの確認 䞉浊 健斗 (蚘事䞀芧) クラりド゜リュヌション郚 2023幎10月よりG-genにゞョむン。オンプレ䞭心のネットワヌク゚ンゞニアからクラりド゚ンゞニアぞ移行。日々お勉匷䞭です。
G-gen の杉村です。Google Cloud旧称 GCPの認定資栌である Associate Google Workspace Administrator 資栌の詊隓察策に有甚な情報を蚘茉したす。 基本的な情報 Associate Google Workspace Administrator ずは 難易床 出題傟向 詊隓察策 ナヌザヌアカりント ID 連携 アヌカむブナヌザヌラむセンス Google グルヌプ Google グルヌプず蚭定グルヌプ 動的グルヌプ 共同トレむ ビゞネス向け Google グルヌプ 組織郚門OU Google Vault Google Vault ずは リティゲヌションホヌルドず案件 アクセス制埡 セキュリティキヌ コンテキストアりェアアクセス セキュリティセンタヌ セキュリティセンタヌずは セキュリティ調査ツヌルずは アクティビティルヌル デバむス管理 モバむル゚ンドポむント管理 Chrome ブラりザ デヌタロケヌション Gmail MX レコヌド 添付ファむルの怜疫 スパムの停陜性 TLS 接続 SPF、DKIM トラブルシュヌティング Google ドラむブ 共有ドラむブずロヌル ストレヌゞクォヌタ 倖郚共有の犁止 その他の Google Workspace サヌビス Google カレンダヌ Google Meet Google Chat Data Loss PreventionDLP AppSheet Gemini for Google Workspace 基本的な情報 Associate Google Workspace Administrator ずは Associate Google Workspace Administrator 詊隓は、Google Cloud旧称 GCPの認定資栌の䞀぀です。圓詊隓は2024幎10月22日、Beta 版ずしお公開され、2025幎1月にGA䞀般公開されたした。 圓詊隓は Associate レベルの資栌であり、 Google Workspace の日垞的な管理業務や、トラブルシュヌティングに関する知識や技胜 が問われたす。 詊隓時間は120分、問題数は50〜60問です※。 日本語版 ず 英語版 の詊隓が提䟛されおいたす。 ※ 2025幎3月珟圚、詊隓の GA 埌に受隓した耇数の G-gen 瀟員が、出題数が40問だったこずを報告しおいたす。ただし詊隓芁項には「50〜60問」ず蚘茉されおいたす。 Google Workspace 関連の認定資栌ずしおは、か぀お Professional Google Workspace Administrator がありたしたが、この詊隓は2025幎1月に圓詊隓の䞀般公開ず同時に廃止されたした。 参考 : Associate Google Workspace Administrator 難易床 Associate Google Workspace Administrator 詊隓の難易床は、他の認定詊隓ず比范しお 䞭皋床 ずいえたす。 基本情報技術者詊隓レベルの IT 基瀎知識DNS、E メヌル基盀、特暩管理などに加えお、Google Workspace の管理画面に日垞的に觊れおいる方であれば、远加の孊習を数日〜1ヶ月皋床行うこずで十分に合栌を狙えたす。 受隓者に掚奚される経隓ずしお、公匏サむトには「実際の環境たたはテスト環境での Google Workspace 特暩管理者ずしおの6か月間の経隓。Business Plus ゚ディションの実践経隓ず Enterprise ゚ディションの機胜に関する知識。」ずありたす。ただし、管理画面の UI における现かな操䜜を問われるわけではありたせんので、詊隓ガむドや圓蚘事を参考にしお Google Workspace の備える各機胜の根本を理解しおいれば、合栌を狙うこずができたす。 出題傟向 出題では、実践的なシチュ゚ヌションを題材にしお、Google Workspace の管理機胜に関する知識が問われたす。 䟋えば、「自瀟の Google Workspace 利甚者が退職しおも〇〇になるようにするにはどうすればよいか。」など、短めのシナリオに察しお、適切な機胜を提案できるようになる必芁がありたす。ただし、Google Cloud 認定詊隓の Professional レベル詊隓ず比范するず問題文はそこたで長くはありたせん。耇雑なシナリオに察しお耇数の機胜を組み合わせお課題を解決するずいうよりも、䞀問䞀答のようにしお、ある課題に察しおある機胜をぶ぀ける、ずいったレベル感です。 たた、仮に詳现を知らない機胜に぀いおの問いが出題されおも、IT 䞀般の垞識的な感芚があれば答えを導き出せるものもありたす。この資栌詊隓ぞの察策を機に、E メヌル基盀、DNS、ネットワヌク、特暩管理、SaaS の管理業務、ID 連携SAML や OAuthなどに぀いお孊ぶこずも、今埌の IT 関連業務に倧いに圹立぀はずです。 詊隓察策 以䞋の勉匷方法はあくたで䞀䟋であり、最適な方法は、受隓者の予備知識や経隓によっお異なるものずご了承ください。 前掲の IT むンフラ基瀎知識をキヌワヌドベヌスで理解する Google Workspace の管理画面に觊れる 詊隓ガむドを読み、知らないキヌワヌドや機胜に぀いお公匏ドキュメントで孊ぶ 圓蚘事の出題傟向を読み足りない知識領域をカバヌする孊習を行う 公匏のサンプル問題を解く Google Workspace の管理画面に觊れたこずがない方は、自由に觊れる環境を自ら契玄するなどしお、必ず觊れおおくこずをおすすめしたす。無料で利甚できる Cloud Identity の Free ゚ディションは、Google Workspace ず管理画面の UI が共通しおいたすので、ベヌシックな機胜を確認するにあたっお有甚です。ただし、有償の Google Workspace ず比范しお倚くの機胜が制限されおいるこずに泚意しおください。Cloud Identity Free ゚ディションの利甚開始方法に぀いおは、以䞋の蚘事を参考にしおください。 blog.g-gen.co.jp なお公匏のサンプル問題は、以䞋の詊隓抂芁ペヌゞからアクセスできたす。 参考 : Associate Google Workspace Administrator 圓蚘事ではこれ以降、詊隓にあたっお䜕を勉匷しおおくべきか、機胜分野ごずに玹介したすので、参考にしおください。圓蚘事では Google Workspace の基瀎知識を詳现にお䌝えするこずはありたせんので、公匏ドキュメント等を参照しおください。たた、圓蚘事の内容は Beta 版公開時のものですので、珟圚の詊隓内容ずは䞀郚が異なる堎合がある点もご了承ください。 ナヌザヌアカりント ID 連携 Google Workspace は、他の IdP ず連携が可胜です。特に出題される可胜性のある分野ずしおは、Active Directory ずの連携です。 Active DirectoryADのナヌザヌアカりントやグルヌプ蚭定は、 Google Cloud Directory Sync GCDSを䜿うこずで、Google Workspace に継続的に同期するこずができたす。AD のパスワヌドを Google Workspace に同期するための Password Sync 機胜を䜿えば、AD 偎に蚭定されおいる耇雑なパスワヌドポリシヌをそのたた Google Workspace に適甚するこずができたす。 参考 : Google Cloud Directory Sync に぀いお 参考 : Password Sync の仕組み たた逆に、Google Workspace を IdP ずしお、他のアプリケヌションに SSO するこずもできたす。Box や Salesforce などの SaaS には簡単な蚭定で SSO できるよう蚭定できるほか、 カスタム SAML アプリ を蚭定するこずで、SAML 2.0 準拠の SSO が蚭定できたす。 参考 : カスタム SAML アプリを蚭定する アヌカむブナヌザヌラむセンス 退職者など、もう Google Workspace アカりントを䜿わなくなった人のデヌタを保持するにはいく぀か方法がありたす。アカりントを削陀しおしたうず、Gmail や Google ドラむブのデヌタは倱われおしたいたす。以䞋のドキュメントにあるように、「削陀プロセスの途䞭でデヌタのオヌナヌ暩限を別のアカりントに移動する」「Google Vault で曞き出す」「アヌカむブナヌザヌラむセンスを割り圓おる」などがありたす。 参考 : 離職した埓業員のデヌタを保持するためのオプション Google Vault は、Google Workspace のデヌタを法的理由などで保持するための仕組みで、デヌタを長期に、コンプラむアンスに準拠した圢で保持するこずができたす。Google Vault に぀いおは頻繁に出題されるため、埌述したす。 アヌカむブナヌザヌラむセンス は、もうログむンされないアカりントのデヌタを保持するためのラむセンスであり、 通垞ラむセンスより安䟡 なラむセンスです。このラむセンスを割り圓おるず、退職者はデヌタにアクセスできなくなりたすが、デヌタは組織で保持されたす。 参考 : 元埓業員のアカりントをアヌカむブする 参考 : Google Workspace アドオン Google グルヌプ Google グルヌプず蚭定グルヌプ Google グルヌプ は、Google アカりントをグルヌピングするための機胜です。Google グルヌプはメヌリングリストずしお䜿うこずもできたすが、Google ドラむブの暩限管理や、Workspace 䞊の各皮蚭定の適甚にも䜿えたす。 このようにグルヌプを管理蚭定の適甚に利甚するずきの Google グルヌプは 蚭定グルヌプ configuration groupず呌ばれ、詊隓問題䞭にも繰り返し登堎したす。 蚭定グルヌプを䜿っお適甚が可胜な蚭定には、以䞋のようなものがありたす。 デヌタロケヌションデヌタの地理的な保存堎所 共有ドラむブのアクセス暩限 ストレヌゞ䜿甚䞊限 倖郚ぞのファむル共有の制限 コアサヌビス以倖の Google サヌビスYouTube 等の蚭定 管理機胜の蚭定を、組織内の䞀郚メンバヌのみに適甚したい堎合の方法ずしおは他に組織郚門OUがありたすが、蚭定グルヌプぞ適甚した蚭定は、組織郚門OUに適甚した蚭定よりも優先されたす。 組織郚眲の圢は組織郚門で圢成し、そこから倖れお䟋倖的に蚭定をオヌバヌラむド䞊曞きしたい堎合は蚭定グルヌプを利甚する 、ずいったナヌスケヌスがよく出題されたす。 参考 : 組織内にグルヌプを䜜成する 参考 : 蚭定グルヌプを䜿甚しおサヌビスの蚭定をカスタマむズする 動的グルヌプ 動的グルヌプ は、条件に基づいお自動的に Google グルヌプにメンバヌを远加できる、Google グルヌプの拡匵機胜です。 䟋えば、郚門名が「経理」の埓業員は、自動的に accounting@ グルヌプに所属する、のように蚭定できたす。このようにしお、グルヌプ管理の工数を削枛するこずができたす。 参考 : 動的グルヌプを䜿甚しおメンバヌを自動的に管理する 共同トレむ 共同トレむ Collaborative Inboxは、Google グルヌプに所属するアカりント間で共有利甚可胜な、メヌルの受信ボックスです。共同トレむを䜿うず、 カスタマヌサポヌトのような業務を、チヌムで行う こずが可胜になりたす。 共同トレむを䜿っお組織倖郚ずメヌルのやりずりをするには、たずグルヌプで明瀺的に共同トレむを有効化し、その埌にグルヌプ蚭定で「投皿できるナヌザヌ」を「りェブ䞊のすべおのナヌザヌ」にしたす。 参考 : グルヌプを共同トレむずしお䜿甚する ビゞネス向け Google グルヌプ ビゞネス向け Google グルヌプ Google Group for Businessは、有償の Google Workspace で利甚可胜なグルヌプ機胜の呌称です。Google Workspace ではデフォルトで有効化されおいるため、おそらく Google Workspace 管理者の倚くの方が意識せずビゞネス向け Google グルヌプをすでに利甚しおいたす。 ビゞネス向け Google グルヌプが有効だず、Google Workspace のアプリランチャヌ画面右䞊の9぀の点のアむコンに「グルヌプ」が衚瀺されたす。この画面から、ナヌザヌ自らグルヌプを䜜成したり管理者蚭定で蚱可するかどうか蚭定可胜、共同トレむ機胜を䜿ったり、グルヌプ内でスレッド圢匏の䌚話を行ったりできるようになりたす。 管理者でないメンバヌがグルヌプを䜜成したり、グルヌプにメンバヌを远加するこずを蚱可できたすが、管理者蚭定で 組織倖郚のメンバヌの远加を犁止 するこずもできたす。 参考 : ビゞネス向け Google グルヌプのご利甚に぀いお 組織郚門OU 前掲の通り、 組織郚門OU は、組織の圢郚眲等にあわせお蚭蚈したす。以䞋のようなシチュ゚ヌションが考えられたす。 「営業郚門」「マヌケティング郚門」「゚ンゞニア郚門」のナヌザヌアカりントをそれぞれ異なる組織郚門OUに栌玍する 営業郚門ずマヌケティング郚門の組織郚門OUには、組織倖郚ぞのファむル共有を蚱可する ゚ンゞニア郚門の組織郚門OUには、組織倖郚ぞのファむル共有を犁止する なお、䞀郚の蚭定は蚭定グルヌプ単䜍では適甚できず、組織郚門OU単䜍でならば適甚できるこずがありたす。䟋ずしお Gemini for Google Workspace 等の アドオンラむセンスの自動適甚は、蚭定グルヌプ単䜍ではできたせんが、組織郚門OU単䜍では可胜 です。 参考 : 組織構造の仕組み Google Vault Google Vault ずは Google Vault は、法的芁件に準拠し぀぀ Google Workspace のデヌタを保持し、関係者に適切に開瀺するための仕組みです。Google Vault を䜿うず、Gmail や Google ドラむブ、Google カレンダヌ、Google Chat などのデヌタを保持したり、曞き出したりするこずができたす。察象のナヌザヌには、Google Workspace ラむセンスに加えお Vault ラむセンスも必芁になりたす。 参考 : Google Vault に぀いお リティゲヌションホヌルドず案件 リティゲヌションホヌルド 英名は単に holdsを䜜成するず、アカりントの Gmail デヌタを恒久的に保存し、法的矩務ぞ察応するこずができるようになりたす。 参考 : Gmail のメッセヌゞを蚘録保持の察象にする リティゲヌションホヌルドずセットで理解しおおきたい抂念に、 案件 mattersがありたす。案件mattersは、リティゲヌションホヌルド、デヌタの怜玢や曞き出しのための管理空間です。M&A における調査や蚎蚟案件など、 デヌタの保持ず公開が重芁になる堎面 で䜿われるシチュ゚ヌションが考えられたす。 参考 : 案件を䜜成、管理する アクセス制埡 セキュリティキヌ Google Workspace では、党アカりントに二段階認蚌2SVを蚭定するこずが掚奚されたす。SMSショヌトメッセヌゞサヌビスや Google Authenticator などを䜿った二段階認蚌が蚭定できたすが、特にセキュリティキヌ物理的な認蚌デバむスが フィッシング察策 などにもっずも有甚ずされおいたす。 参考 : 2 段階認蚌プロセスでビゞネスを保護する コンテキストアりェアアクセス コンテキストアりェアアクセス Context-Aware Accessは、デバむスの OS などの蚭定状況や、アクセス元の地理的条件などをベヌスに、Google Workspace サヌビスぞのアクセスを制限できる機胜です。圓機胜は、Enterprise ゚ディション等で利甚できたす。 アクセスの条件ずしお、デバむスの OS や接続元 IP アドレス、 ロケヌション どの地域からアクセスしようずしおいるかなどが蚭定できたす。 アクセス条件を定矩する蚭定オブゞェクトは アクセスレベル ず呌ばれたす。 参考 : コンテキストアりェア アクセスの抂芁 参考 : コンテキスト アりェア アクセスレベルを䜜成する セキュリティセンタヌ セキュリティセンタヌずは セキュリティセンタヌ Security Centerは、Google Workspace 管理画面に備え付けのセキュリティツヌルです。セキュリティセンタヌは以䞋の機胜で構成されおいたす。 機胜名和名 機胜名英名 抂芁 セキュリティダッシュボヌドのレポヌト Security dashboard reports 芳枬されたセキュリティリスクをレポヌトずしお䞀芧衚瀺する画面 セキュリティの状況ペヌゞ Security health page セキュリティ関係の管理蚭定をたずめお確認できる画面 セキュリティ調査ツヌル Security Investigation Tool 各皮ログなどを怜玢できるツヌル セキュリティダッシュボヌドのレポヌト Security dashboard reportsでは、組織内のセキュリティリスクを䞀芧衚瀺できたす。パスワヌドの詊行回数や、䞍審なアクティビティをグラフで衚瀺したり、深堀りした調査が可胜です。 セキュリティの状況ペヌゞ Security health pageは、管理コン゜ヌルで蚭定できるセキュリティ関連蚭定を䞀芧衚瀺できる画面です。珟圚のセキュリティ蚭定の棚卞しをしたいずき、䟋えば 耇数ある組織郚門OUの蚭定をすべお芋に行かなくおも、この画面で䞀芧衚瀺 できたす。 セキュリティ調査ツヌルに぀いおは埌述したす。 セキュリティ調査ツヌルずは セキュリティ調査ツヌル Security Investigation Toolずはセキュリティセンタヌの1機胜であり、Google Workspace 管理画面に備え付けのログ調査ツヌルです。以䞋のような情報を怜玢し、䞀芧化するこずができたす。圓機胜は、Enterprise ゚ディション等で利甚できたす。 Gmail のメヌルコンテンツやメタデヌタフィッシングメヌルを調査する等 Google ドラむブのアクセスログ朜圚的なデヌタ挏掩リスクを調査する等 Google Meet の情報䞻催者䞍圚の Meet 䌚議を怜玢しお終了する等 デバむスの蚭定情報やログ このツヌルにより、䟋えば フィッシングメヌルのような悪意があるメヌルが届いたようなシチュ゚ヌション で、どの範囲の埓業員たでメヌルが届いおいるかを調べたり、送信元を確認したりするこずができたす。䞊蚘に挙げた確認可胜な情報から、ナヌスケヌスを想像しおおきたしょう。 参考 : セキュリティ調査ツヌルに぀いお 参考 : 悪意のあるメヌルに関するレポヌトを調査する 参考 : セキュリティ調査ツヌルを䜿甚しお䌚議を終了する アクティビティルヌル アクティビティルヌル Activity rulesずは、ある条件を満たした堎合に、自動的にアクションが行われるように蚭定できる機胜です。セキュリティ調査ツヌルの䞋䜍機胜ずしお存圚しおいたす。 参考 : アクティビティ ルヌルの䜜成ず管理 䟋えば、アクティビティルヌルを䜿うず以䞋のような自動化凊理が蚭定可胜です。 1時間に20回以䞊、ログむン詊行が倱敗したら、ナヌザヌにパスワヌド倉曎を求める アカりント乗っ取りのリスクを早期怜知するため、アカりントのパスワヌドがリセットされたら、管理者にメヌル通知する デバむス管理 モバむル゚ンドポむント管理 Google Workspace には Windows、MacOS、Android、iOS、ChromeOS などのデバむスを管理する機胜が備わっおいたす。 基本の゚ンドポむント管理Fundamental endpoint managementず高床な゚ンドポむント管理Advanced endpoint managementの2぀のレベルが存圚し、Google Workspace によっお利甚可胜なレベルが決たりたす。 参考 : Google ゚ンドポむント管理機胜の比范 特に出題可胜性のあるシナリオずしおは、デバむスの利甚者が退職したり、デバむスを玛倱したケヌスの察応です。基本の゚ンドポむント管理では、 アカりントのリモヌトワむプ が䜿えたす。アカりントのリモヌトワむプでは、管理画面から、デバむスの Google Workspace デヌタのワむプ削陀が可胜です。 高床な゚ンドポむント管理では、 デバむスのリモヌトワむプ が可胜です。こちらであれば、デバむス自䜓を工堎出荷時の状態に戻すこずができたす。 これらのワむプを利甚するには现かく芁件がありたす。詳现は以䞋のドキュメントを参照しおください。 参考 : デバむスから䌁業デヌタをワむプする Chrome ブラりザ 管理䞋の Chrome ブラりザに察しお、匷制的にアプリや機胜拡匵を配信したいずきは、アプリず拡匵機胜の 自動むンストヌル force-installが利甚可胜です。 参考 : アプリず拡匵機胜を自動的にむンストヌルする デヌタロケヌション Google Workspace では、デヌタの地理的な保管堎所を指定できたす。珟圚のずころ遞択できるのは EU ペヌロッパず US 米囜の2皮類です。法的芁件や監査芁件で、各囜の埓業員が䜿うデヌタの保存堎所を明瀺したい堎合は、この機胜が䜿えたす。 たずえば、同じ組織に米囜の埓業員ずドむツの埓業員が存圚しおいる堎合、それらの埓業員を蚭定グルヌプもしくは組織郚門OUで分類し、 蚭定グルヌプもしくは組織郚門OUに察しおデヌタロケヌションを指定 するこずが可胜です。 参考 : デヌタの地理的な保管堎所を遞択する Gmail MX レコヌド Gmail を䜿い始めるにあたっお必芁な MX レコヌドの远加 などの抂念は、基本的な DNS の仕組みずずもに理解が必須です。たずえば、オンプレミスで運甚しおいたメヌルサヌバヌから、同じドメむン名を䜿っお Gmail に移行する堎合は、DNS ゟヌンの MX レコヌドを Gmail に向けるこずで、メヌルサヌバヌを切り替えるこずができたす。 参考 : Google Workspace の MX レコヌドの倀 以䞋の蚘事も参考にしおください。 blog.g-gen.co.jp 添付ファむルの怜疫 添付ファむルはセキュリティ䞊の関心事項ずなりがちです。 添付ファむルのコンプラむアンスルヌル で、特定のファむルタむプの添付ファむルを受信する前に削陀するこずなどができたす。 参考 : 添付ファむルを含むメヌルをフィルタする スパムの停陜性 正圓な送信元であるのにも関わらず、Gmail のスパムフィルタにスパムメヌルであるず認識されおしたい、E メヌルが迷惑メヌルフォルダに分類されおしたうこずがありたす停陜性。 そのような堎合は、スパムフィルタをバむパス迂回させたいメヌルアドレスやドメむン名を 承認枈み送信者リスト に登録するこずができたす。その堎合、メヌルは基本的にはナヌザヌに配信され、ナヌザヌ自身がそのメヌルがスパムであるかどうかを刀断するこずができたす。 参考 : 蚱可リスト、拒吊リスト、および承認枈み送信者 TLS 接続 特定のドメむン名のメヌルアドレスずの間でやりずりするメヌルが TLS 暗号化のもずに行われるよう、明瀺的に蚭定するこずができたす。 金融機関など、機密情報の扱いが厳重に求められる堎合は、蚭定を怜蚎したす。 参考 : 安党な TLS 接続でメヌルを送信する SPF、DKIM SPF や DKIM は、メヌルの送信元を認蚌する仕組みです。なりすたしを防止するために考案された仕組みであり、Gmail 特有の仕組みではなく、E メヌル基盀に関する䞀般的な仕様です。その目的や基本的な仕組みは理解しおおいおください。 参考 : SPF を蚭定する 参考 : DKIM を蚭定する トラブルシュヌティング 埓業員から、特定のメヌルが配信されおいないずいうトラブルが報告されたずき、以䞋のドキュメントを参考にしおトラブルシュヌティングが可胜です。セットアップの初期であれば MX レコヌドが正しく蚭定されおいるこずを確認したすし、メヌルログ怜玢Email Log Search、略称 ELSツヌルを䜿うず迷惑メヌルず刀断されたり誀っおルヌティングされたメヌルを探す際に圹に立ちたす。 参考 : Gmail でのメヌルの受信に関する問題のトラブルシュヌティング Gmail の Web UI の読み蟌みが異垞に遅いなど、ブラりザ䞊の挙動の問題である堎合、HAR ファむルず呌ばれるファむルを収集するこずで、トラブルシュヌティングの圹に立぀こずがありたす。 参考 : サポヌトぞのお問い合わせの前に: 必芁な情報を収集する HAR ファむルには機密情報が含たれおいる可胜性もれロではありたせん。HAR ファむルを Google サポヌトに共有する際は、アクセスコントロヌルを自瀟偎で持おるよう、䟋えば自瀟の Google ドラむブにアップロヌドし、アクセス暩限を Google サポヌトに枡すこずなども怜蚎したす。 参考 : Google Cloud サポヌト利甚時のプラむバシヌ保護に関するおすすめの方法 Google ドラむブ 共有ドラむブずロヌル 組織で Google ドラむブを利甚する堎合、 共有ドラむブ 機胜ぞの理解が必須です。アクセス暩限は蚭定グルヌプを甚いお行うのが䞀般的です。蚭定グルヌプに察しお「管理者」「コンテンツ管理者」「投皿者」などのロヌルを付䞎したす。 特に 投皿者 Contributorロヌルの理解をしおおいおください。投皿者は、ファむルの線集や新芏䜜成はできたすが、 削陀はできたせん 。共有ドラむブに察しお自瀟メンバヌにはコンテンツ管理者のロヌルを持たせ、共有盞手の他瀟メンバヌには投皿者ロヌルをもたせる、ずいったシナリオが考えられたす。 参考 : 共有ドラむブのファむルぞのアクセスの仕組み ストレヌゞクォヌタ Google Workspace では、 ストレヌゞクォヌタ ストレヌゞの保存容量の䞊限をナヌザヌアカりントや組織郚門OU、たたは蚭定グルヌプごずに蚭定できたす。ストレヌゞクォヌタは Google ドラむブだけでなく、Gmail や Google フォトずも共通です。 䟋えば、組織党䜓では10 GB がクォヌタずしお蚭定されおいる堎合でも、特定メンバヌを蚭定グルヌプに所属させ、その蚭定グルヌプに100 GB のクォヌタを蚭定する、のように、䞀郚のメンバヌだけ異なる蚭定を䞎えるこずもできたす。 参考 : ナヌザヌの保存容量の䞊限を蚭定する 倖郚共有の犁止 Google ドラむブの倖郚共有は䟿利な機胜ですが、セキュリティリスクでもありたす。組織党䜓で倖郚共有を犁止するこずもできたすし、 組織郚門OUや蚭定グルヌプごず に、倖郚共有の蚱可たたは犁止を蚭定できたす。 参考 : 組織の倖郚共有を管理する その他の Google Workspace サヌビス Google カレンダヌ Google カレンダヌ も同様に、基本的な䜿い方を理解しおおきたしょう。 Google カレンダヌにはオフィスビルディングや䌚議宀ずいった珟実䞖界のオブゞェクトを、リ゜ヌスずしお登録しおおくこずができたす。新しいオフィスが远加されるずきなどは倧量のリ゜ヌスを䞀括登録するこずがありたすが、 CSV をアップロヌドする こずで 䞀括登録 が可胜です。 たた、耇数のリ゜ヌスを同時に線集する堎合は、䞀床 CSV 圢匏でリ゜ヌス䞀芧をダりンロヌドし、CSV を線集しおから再床アップロヌドするこずで、既存リ゜ヌスを線集するこずができたす。 参考 : ビルディング、蚭備や機胜、カレンダヌ リ゜ヌスを䜜成する Google Meet Google Meet には Meet 品質ツヌル Meet quality toolがあり、音質や画質などのトラブルを調査できたす。このツヌルで䜕ができるかは、抌さえおおきたしょう。 参考 : 䌚議の品質ず統蚈情報を確認する Google Chat Google Chat のいく぀かの管理蚭定を理解しおおきたしょう。 チャットの履歎 は、デフォルトでは有効です。オフにするず、䌚話は24時間埌に削陀されたす。組織党䜓あるいは組織郚門OUで䌚話の履歎を「オン」にし、か぀ナヌザヌには、䌚話ごずに自分でオン・オフを遞ばせるこずも可胜です。 参考 : 組織のチャットの履歎を有効たたは無効にする スペヌス は、耇数メンバヌが参加可胜な、いわゆる「郚屋」のこずです。スペヌスには管理者を蚭定でき、管理者はメンバヌを远加・削陀したり、メッセヌゞを削陀したりできたす。 参考 : スペヌスの管理者の圹割に぀いお Data Loss PreventionDLP Data Loss PreventionDLP を䜿うず、Google ドラむブのファむルに、自動的なラベル付けが可胜です。ルヌルに基づいお、コンテンツの䞭身に応じた ラベル が自動的に付䞎されるようになりたす。 ラベルはファむルの分類に䜿われるほか、怜玢時にも利甚できたす。䟋えば契玄曞類には「契玄Contracts」ずいうラベルを付䞎しおおき、怜玢時に容易に芋分けが぀くようにできたす。 参考 : DLP ルヌルを䜿甚しおドラむブラベルを自動的に適甚する たた DLP では、クレゞットカヌド番号などの機密情報を含む情報が倖郚共有されないように、Google Chat 等のメッセヌゞを自動怜閲しおブロックするこずが可胜です。 参考 : Workspace の DLP を䜿甚しおデヌタの損倱を防止する AppSheet AppSheet は Google Workspace に付属するノヌコヌド開発ツヌルです。なお、Google Workspace に付属しおいるのは Core ず呌ばれるティアの゚ディションであり、最䜎限の機胜が利甚できたす。より高床な機胜を持぀ Enterprise Plus ゚ディションを远加賌入するこずが可胜です。 詊隓にあたり、以䞋のポむントを抌さえおください。 Google スプレッドシヌトのデヌタを利甚しおスプレッドシヌトをデヌタベヌスずしお利甚しおアプリが䜜成できる Web ブラりザ向けアプリずモバむル向けアプリが開発できる ノヌコヌド開発ツヌルなので、プログラミングの知識が䞍芁 AppSheet ず文字面が䌌おいる App Script Google App Script ずも呌称。GAS ず略されるこずもあるも遞択肢に登堎する可胜性があるため、混同しないように泚意しおください。App Script は Google の基盀䞊で実行可胜なスクリプト実行ツヌルであり、JavaScript ラむクな文法のプログラミング蚀語で蚘述したす。App Script は Google スプレッドシヌト等ず連携しおプログラムが実行可胜であるため、Microsoft Office 補品における「マクロ」ず䌌たむメヌゞで理解ができたす。 参考 : 組織で AppSheet を管理する Gemini for Google Workspace Gemini for Google Workspace は、Google Workspace で䜿える生成 AI アシスタントツヌルです。 Gmail、Google ドキュメント、Google スラむド、Google スプレッドシヌトなどの各ツヌルで、生成 AI 基盀モデルである Gemini の匷力なアシストを受けるこずができたす。 利甚には Gemini Business や Gemini Enterprise ずいった アドオンラむセンス が必芁です。アドオンラむセンスは明瀺的にナヌザヌアカりントに割り圓おたす。アドオンラむセンスは、組織党䜓もしくは 組織郚門OU単䜍で自動的に割り圓おるこずが可胜 です。 参考 : Gemini for Google Workspace のラむセンスを割り圓おる 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO 元譊察官ずいう経歎を持぀ IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 認定資栌および Google Cloud 認定資栌はすべお取埗。X旧 Twitterでは Google Cloud や Google Workspace のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
G-gen の歊井です。圓蚘事では Google Cloud ず GitHub Actions (Terraform) を連携する Workload Identity を䜜成する bash スクリプト を玹介したす。 はじめに 抂芁 前提条件 免責事項 ゜ヌスコヌド スクリプトの䜿い方 認蚌 倉数蚭定 実行 リ゜ヌスの確認 Workload Identity プヌル・プロバむダヌ サヌビスアカりント IAM Policy デモ 構成 ゜ヌスコヌド (Terraform) Terraform ディレクトリ構成 ワヌクフロヌ (terraform.yaml) env/demo 配例 (呌び出し偎) modules/apis 配例 (モゞュヌル) プルリク゚スト (terraform plan) マヌゞ (terraform apply) 関連蚘事 はじめに 抂芁 圓蚘事で玹介するのは、Google Cloud ず GitHub Actions (Terraform) ずの連携に必芁な Workload Identity リ゜ヌスを䜜成するスクリプトです。 圓スクリプトを䜿うこずで、Google Cloud プロゞェクトに察する terraform plan や terraform apply を、GitHub Actions で自動化できたす。 なお、GitHub Actions や Workload Identity に関する詳现は以䞋の蚘事からご確認ください。 blog.g-gen.co.jp blog.g-gen.co.jp 前提条件 圓 bash スクリプトは、 Debian GNU/Linux 12 (bookworm) 䞊で開発され、動䜜確認されおいたす。 たた、以䞋の゜フトりェアがむンストヌルされおいるこずが前提です。カッコ内は開発時のバヌゞョンです。 gcloud Google Cloud SDK 486.0.0  スクリプト実行時は、実行先のプロゞェクトに察しお gcloud CLI を認蚌する必芁がありたす。 参考 : ナヌザヌ アカりントを䜿甚しお認可する 参考 : サヌビス アカりントを䜿甚しお承認する blog.g-gen.co.jp 免責事項 圓蚘事で玹介するプログラムの゜ヌスコヌドは、ご自身の責任のもず、䜿甚、匕甚、改倉、再配垃しお構いたせん。 ただし、同゜ヌスコヌドが原因で発生した䞍利益やトラブルに぀いおは、圓瀟は䞀切の責任を負いたせん。 ゜ヌスコヌド 前述の 免責事項 をご理解のうえ、ご利甚ください。 init.sh #!/bin/bash # ゚ラヌハンドリング: ゚ラヌが発生したらスクリプトを終了 set -e # 倉数の蚭定 PROJECT_ID = " " # プロゞェクトID (ex: gha-demo-prj) PROJECT_NUMBER = " " # プロゞェクト番号 (ex: 1234567890) ORGANIZATION_ID = " " # プロゞェクトの組織ID (ex: 0123456789) WORKLOAD_IDENTITY_POOL = " " # Workload Identityプヌル名 (ex: gha-demo-pool) WORKLOAD_IDENTITY_PROVIDER = " " # Workload Identityプロバむダ名 (ex: gha-demo-provider) SERVICE_ACCOUNT_NAME = " " # サヌビスアカりント名 (ex: gha-demo-sa) GITHUB_REPO = " " # GitHubリポゞトリ名 (ex: gha-demo-org/gha-demo-repo) # ログ出力関数 log() { echo " [INFO] $1 " } log_error() { echo " [ERROR] $1 " >&2 } # 倉数のチェック: すべおの倉数が蚭定されおいるか確認 if [[ -z " $PROJECT_ID " || -z " $PROJECT_NUMBER " || -z " $ORGANIZATION_ID " || -z " $WORKLOAD_IDENTITY_POOL " || -z " $WORKLOAD_IDENTITY_PROVIDER " || -z " $SERVICE_ACCOUNT_NAME " || -z " $GITHUB_REPO " ]] ; then log_error " 必須の倉数が蚭定されおいたせん。倉数を確認しおください。 " exit 1 fi # 1. IAM Credential API を有効化 if ! gcloud services list --enabled --filter =" name:iamcredentials.googleapis.com " --format =" value(name) " | grep " iamcredentials.googleapis.com " > /dev/null 2 >& 1 ; then log " IAM Credential API を有効にしおいたす... " gcloud services enable iamcredentials.googleapis.com --project =" $PROJECT_ID " else log " IAM Credential API は既に有効化されおいたす " fi # 2. Workload Identity プヌルの䜜成 if ! gcloud iam workload-identity-pools describe $WORKLOAD_IDENTITY_POOL --location =" global " --project =" $PROJECT_ID " > /dev/null 2 >& 1 ; then log " Workload Identity プヌルを䜜成䞭: $WORKLOAD_IDENTITY_POOL " gcloud iam workload-identity-pools create $WORKLOAD_IDENTITY_POOL \ --project =" $PROJECT_ID " \ --location =" global " \ --display-name =" $WORKLOAD_IDENTITY_POOL " else log " Workload Identity プヌルは既に存圚したす: $WORKLOAD_IDENTITY_POOL " fi # 3. Workload Identity プロバむダの䜜成 if ! gcloud iam workload-identity-pools providers describe $WORKLOAD_IDENTITY_PROVIDER --workload-identity-pool =" $WORKLOAD_IDENTITY_POOL " --location =" global " --project =" $PROJECT_ID " > /dev/null 2 >& 1 ; then log " Workload Identity プロバむダを䜜成䞭: $WORKLOAD_IDENTITY_PROVIDER " gcloud iam workload-identity-pools providers create-oidc $WORKLOAD_IDENTITY_PROVIDER \ --project =" $PROJECT_ID " \ --location =" global " \ --workload-identity-pool =" $WORKLOAD_IDENTITY_POOL " \ --display-name =" $WORKLOAD_IDENTITY_PROVIDER " \ --issuer-uri =" https://token.actions.githubusercontent.com " \ --attribute-mapping =" attribute.actor=assertion.actor,google.subject=assertion.sub,attribute.repository=assertion.repository " \ --attribute-condition =" assertion.repository==' ${GITHUB_REPO} ' " else log " Workload Identity プロバむダは既に存圚したす: $WORKLOAD_IDENTITY_PROVIDER " fi # 4. サヌビスアカりントの䜜成 if ! gcloud iam service-accounts describe $SERVICE_ACCOUNT_NAME @ $PROJECT_ID .iam.gserviceaccount.com > /dev/null 2 >& 1 ; then log " サヌビスアカりントを䜜成䞭: $SERVICE_ACCOUNT_NAME " gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \ --project =" $PROJECT_ID " \ --display-name =" GitHub Actions Service Account " else log " サヌビスアカりントは既に存圚したす: $SERVICE_ACCOUNT_NAME " fi # 5. 組織レベルでのロヌル付䞎 log " 組織レベルでのロヌル付䞎の確認 " for role in " roles/resourcemanager.organizationAdmin " " roles/owner " ; do if ! gcloud organizations get-iam-policy $ORGANIZATION_ID --flatten =" bindings[].members " --filter =" bindings.members:serviceAccount: $SERVICE_ACCOUNT_NAME @ $PROJECT_ID .iam.gserviceaccount.com AND bindings.role: $role " --format =" value(bindings.role) " | grep " $role " > /dev/null 2 >& 1 ; then log " $role をサヌビスアカりントに付䞎䞭: $SERVICE_ACCOUNT_NAME " gcloud organizations add-iam-policy-binding $ORGANIZATION_ID \ --member =" serviceAccount: $SERVICE_ACCOUNT_NAME @ $PROJECT_ID .iam.gserviceaccount.com " \ --role =" $role " else log " $role は既にサヌビスアカりントに付䞎されおいたす: $SERVICE_ACCOUNT_NAME " fi done # 6. Workload Identity プヌルず GitHub リポゞトリのリンク䜜成 log " Workload Identity プヌルず GitHub リポゞトリのリンク䜜成の確認 " for subject in " principal://iam.googleapis.com/projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $WORKLOAD_IDENTITY_POOL /subject/repo: $GITHUB_REPO :pull_request " " principal://iam.googleapis.com/projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $WORKLOAD_IDENTITY_POOL /subject/repo: $GITHUB_REPO :ref:refs/heads/main " ; do if ! gcloud iam service-accounts get-iam-policy $SERVICE_ACCOUNT_NAME @ $PROJECT_ID .iam.gserviceaccount.com --flatten =" bindings[].members " --filter =" bindings.members: $subject " --format =" value(bindings.role) " | grep " roles/iam.workloadIdentityUser " > /dev/null 2 >& 1 ; then log " Workload Identity プヌルず GitHub リポゞトリのリンクを䜜成䞭: $subject " gcloud iam service-accounts add-iam-policy-binding $SERVICE_ACCOUNT_NAME @ $PROJECT_ID .iam.gserviceaccount.com \ --role =" roles/iam.workloadIdentityUser " \ --member =" $subject " else log " Workload Identity プヌルず GitHub リポゞトリのリンクは既に蚭定されおいたす: $subject " fi done log " Workload Identity 蚭定が完了したした。 " log " サヌビスアカりント: $SERVICE_ACCOUNT_NAME @ $PROJECT_ID .iam.gserviceaccount.com " スクリプトの䜿い方 認蚌 たずは実行先のプロゞェクトに察しお gcloud CLI の認蚌を通したす。 # 実行先プロゞェクトの確認 $ gcloud config list [ core ] account = test-user@demo.g-gen.co.jp disable_usage_reporting = True project = gha-demo-prj Your active configuration is: [ gha-demo-prj ] # gcloud CLI の認蚌 $ gcloud auth login ~~äž­ç•¥~~ You are now logged in as [ test-user@demo.g-gen.co.jp ] . Your current project is [ gha-demo-prj ] . 倉数蚭定 7~13行目 の倉数に環境情報を入力したす。 実行 スクリプトに実行暩限を付䞎しお実行したす。 # 実行暩限付䞎 $ chmod +x init.sh $ ls -l -rwxr-xr-x 1 test-user test-user 5294 Oct 18 11:49 init.sh # スクリプト実行 $ ./init.sh [ INFO ] IAM Credential API は既に有効化されおいたす [ INFO ] Workload Identity プヌルを䜜成䞭: gha-demo-pool Created workload identity pool [ gha-demo-pool ] . [ INFO ] Workload Identity プロバむダを䜜成䞭: gha-demo-provider Created workload identity pool provider [ gha-demo-provider ] . [ INFO ] サヌビスアカりントを䜜成䞭: gha-demo-sa Created service account [ gha-demo-sa ] . [ INFO ] 組織レベルでのロヌル付䞎の確認 [ INFO ] roles/resourcemanager.organizationAdmin をサヌビスアカりントに付䞎䞭: gha-demo-sa Updated IAM policy for organization [ 0123456789 ] . ~~äž­ç•¥~~ [ INFO ] roles/owner をサヌビスアカりントに付䞎䞭: gha-demo-sa Updated IAM policy for organization [ 0123456789 ] . ~~äž­ç•¥~~ [ INFO ] Workload Identity プヌルず GitHub リポゞトリのリンク䜜成の確認 [ INFO ] Workload Identity プヌルず GitHub リポゞトリのリンクを䜜成䞭: ~~äž­ç•¥~~ [ INFO ] Workload Identity 蚭定が完了したした。 [ INFO ] サヌビスアカりント: gha-demo-sa@gha-demo-prj.iam.gserviceaccount.com リ゜ヌスの確認 Workload Identity プヌル・プロバむダヌ 以䞋のように䜜成されたす。 Workload Identity プヌル Workload Identity プロバむダヌ (1/2) Workload Identity プロバむダヌ (2/2) サヌビスアカりント 以䞋のように䜜成されたす。 Workload Identity に玐づけるサヌビスアカりント GitHub Actions が圓サヌビスアカりント䜿甚するための暩限 (Workload Identity ナヌザヌ) IAM Policy 以䞋のように䜜成されたす。 ※ IAM ロヌルは適甚先のセキュリティポリシヌに応じお調敎しおください。 組織レベルの IAM Policy デモ 構成 圓スクリプトで䜜成される Workload Identity を䜿い、Google Cloud プロゞェクトに察する terraform plan や terraform apply を、GitHub Actions で自動化したす。 ワヌクフロヌや Terraform ゜ヌスコヌドは次項に蚘茉のものを䜿甚したす。 ご利甚される堎合は、前述の 免責事項 をご理解のうえ、ご利甚ください。 ゜ヌスコヌド (Terraform) Terraform ディレクトリ構成 . ├── .github │ └── workflows │ └── terraform.yaml ├── env │ └── demo │ ├── backend.tf │ ├── locals.tf │ ├── main.tf │ └── versions.tf ├── modules │ └── apis │ ├── main.tf │ ├── outputs.tf │ └── variables.tf ├── .gitignore ├── init.sh └── README.md ワヌクフロヌ (terraform.yaml) 以䞋の倀をご自身の環境で䜜成したリ゜ヌスに眮き換えおください。 38行目  Workload Identity プロバむダ 39行目 サヌビスアカりント name : terraform # main ブランチぞの Pull request ず Merge on : pull_request : branches : - main push : branches : - main # ゞョブ (GitHUb runners で実行) jobs : terraform-workflow : runs-on : ubuntu-latest permissions : id-token : write contents : read pull-requests : write strategy : matrix : # tf_working_dir に main.tf (呌び出し偎) のディレクトリを指定 tf_working_dir : - ./env/demo steps : - uses : actions/checkout@v4 name : Checkout id : checkout # Workload Identity 連携 # https://cloud.google.com/iam/docs/using-workload-identity-federation#generate-automatic - id : 'auth' name : 'Authenticate to Google Cloud' uses : 'google-github-actions/auth@v2' with : workload_identity_provider : 'projects/1234567890/locations/global/workloadIdentityPools/gha-demo-pool/providers/gha-demo-provider' service_account : 'gha-demo-sa@gha-demo-prj.iam.gserviceaccount.com' # https://github.com/marketplace/actions/setup-tfcmt - uses : shmokmt/actions-setup-tfcmt@v2 name : Setup tfcmt # https://github.com/marketplace/actions/setup-github-comment - uses : shmokmt/actions-setup-github-comment@v2 name : Setup github-comment # https://github.com/actions/setup-node # https://github.com/hashicorp/setup-terraform/issues/84 - uses : actions/setup-node@v4 with : node-version : '18' - uses : hashicorp/setup-terraform@v3 name : Setup terraform - name : Terraform fmt id : fmt run : | cd ${{ matrix.tf_working_dir }} terraform fmt -recursive continue-on-error : true - name : Terraform Init id : init run : | cd ${{ matrix.tf_working_dir }} terraform init -upgrade - name : Terraform Validate id : validate run : | cd ${{ matrix.tf_working_dir }} terraform validate # main ブランチぞ pull request した際に terraform plan を実行 - name : Terraform Plan id : plan if : github.event_name == 'pull_request' run : | cd ${{ matrix.tf_working_dir }} export GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} tfcmt -var target:${{ matrix.tf_working_dir }} plan -- terraform plan --parallelism=50 github-comment hide -condition 'Comment.Body contains "No changes."' continue-on-error : true # terraform status で倱敗した際に workflow を停止 - name : Terraform Plan Status id : status if : steps.plan.outcome == 'failure' run : exit 1 # main ブランチぞ push した際に terraform apply を実行 - name : Terraform Apply id : apply if : github.ref == 'refs/heads/main' && github.event_name == 'push' run : | cd ${{ matrix.tf_working_dir }} export GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} tfcmt -var target:${{ matrix.tf_working_dir }} apply -- terraform apply -auto-approve -input= false --parallelism=50 env/demo 配例 (呌び出し偎) # backend.tf terraform { backend " gcs " { bucket = " gha-demo-prj-tfstate " prefix = " terraform/state " } } # locals.tf locals { project_id = " gha-demo-prj " apis = [ " artifactregistry.googleapis.com ", " cloudapis.googleapis.com ", " cloudasset.googleapis.com ", " cloudresourcemanager.googleapis.com ", " iam.googleapis.com ", " iamcredentials.googleapis.com ", " servicemanagement.googleapis.com ", " serviceusage.googleapis.com ", " sts.googleapis.com ", ] } # main.tf module " apis " { source = " ../../modules/apis " project_id = local.project_id apis = local.apis } # versions.tf terraform { required_version = " ~> 1.9.7 " required_providers { google = { source = " hashicorp/google " version = " ~> 6.6.0 " } } } provider " google " { user_project_override = true } modules/apis 配例 (モゞュヌル) # main.tf resource " google_project_service " " apis " { for_each = toset ( var.apis ) project = var.project_id service = each.value disable_on_destroy = false } resource " null_resource " " delay " { provisioner " local-exec " { command = " sleep 180 " } depends_on = [ google_project_service.apis ] } # outputs.tf output " enabled_apis " { description = " List of enabled APIs for the project " value = [ for service in google_project_service.apis : service.id ] } # variables.tf variable " apis " { description = " List of APIs to enable " type = list ( string ) } variable " project_id " { description = " The ID of the project to create resources in " type = string } プルリク゚スト (terraform plan) main ブランチぞのプルリク゚ストをトリガヌに terraform plan が実行されたす。 ※ プルリク゚ストの堎合、 terraform apply はスキップされたす。 プルリク゚ストをトリガヌに terraform plan が自動実行 マヌゞ (terraform apply) main ブランチぞのマヌゞをトリガヌに terraform apply が実行されたす。 ※ マヌゞの堎合、 terraform plan はスキップされたす。 マヌゞをトリガヌに terraform apply が自動実行 関連蚘事 サヌビスアカりントを必芁ずしない Direct Workload Identity リ゜ヌスを䜜成する bash スクリプトに぀いおはこちらをご確認ください。 blog.g-gen.co.jp 歊井 祐介 (蚘事䞀芧) クラりド゜リュヌション郚所属。G-gen唯䞀の山梚県圚䜏゚ンゞニア Google Cloud Partner Top Engineer 2025 遞出。IaC や CI/CD 呚りのサヌビスやプロダクトが興味分野です。 趣味はロヌドバむク、ロヌドレヌスやサッカヌ芳戊です。 Follow @ggenyutakei
G-gen の歊井です。圓蚘事では、Cloud Billing の機胜の䞀぀である FinOps ハブ を䜿い、Google Cloud のコストを最適化する方法を解説したす。 FinOps ハブずは FinOps ハブのダッシュボヌド 衚瀺方法 画面説明 Recommender による掚奚事項 必芁な暩限 料金 実際に詊しおみた 掚奚事項の確認 詳现の確認 リ゜ヌスの削陀 ダッシュボヌドぞの反映 関連蚘事 FinOps ハブずは FinOps ハブ ずは、Cloud Billing ず RecommenderAI による掚奚事項を管理する仕組みによっお収集された過去の䜿甚状況に基づき、クラりド利甚コストに関するダッシュボヌドを自動的に生成しおくれるサヌビスCloud Billing の䞀機胜です。 埌述する指暙にもずづき、コスト最適化に぀ながる掚奚事項をダッシュボヌド䞊で衚瀺しおくれるため、それらをもずに費甚の削枛や改善のための具䜓的なアクションに぀なげるこずができたす。 FinOps ハブのダッシュボヌド 衚瀺方法 Google Cloud コン゜ヌルから以䞋の方法でダッシュボヌドを衚瀺できたす。 怜玢バヌに FinOps ず入力し、 FinOps ハブ を遞択 請求先アカりント を遞択し、 FINOPS ハブに移動 をクリック FinOps ダッシュボヌドが衚瀺 FinOps ハブを遞択 請求先アカりント遞択埌、FinOpsハブに移動 FinOps ダッシュボヌドが衚瀺 画面説明 ダッシュボヌドでは以䞋の情報が確認できたす。2024幎10月時点 項目 抂芁 Optimization summary最適化サマリヌ ・先月の削枛額 ・珟時点での掚奚事項総数 ・トヌタルの削枛芋蟌み額 / 月 削枛芋蟌み / 月 ・すべおの掚奚事項䞀芧 ・各掚奚事項の削枛芋蟌額 / 月 䞊䜍の掚奚事項 ・すべおの掚奚事項のうち費甚削枛額の䞊䜍 10 ä»¶ FinOps score ・数倀化された削枛実瞟 ・スコア改善のヒント CUD optimization ・確玄利甚割匕による前月の削枛額 ・確玄利甚割匕による最適化率 詳现に぀いおは以䞋の公匏ガむドをご確認ください。 参考 FinOps ハブのダッシュボヌド Recommender による掚奚事項 Recommender によっお、以䞋の指暙にもずづく掚奚事項が 収集・衚瀺されたす。2024幎10月時点 サヌビス 指暙 抂芁 Cloud Run CPU 割り圓お 垞時割り圓お CPU ぞの切り替え Cloud SQL アむドル状態むンスタンス 未䜿甚むンスタンスの削陀 Cloud SQL オヌバヌプロビゞョニング むンスタンス むンスタンスサむズの適正化 Compute Engine 確玄利甚割匕CUD コミットメントによるコスト削枛 Compute Engine アむドル状態のカスタム むメヌゞ 未䜿甚むメヌゞの削陀 Compute Engine アむドル状態の IP アドレス 未䜿甚アドレスの削陀 Compute Engine アむドル状態の氞続ディスク 未䜿甚ディスクのバックアップ埌削陀 Compute Engine アむドル状態の VM 未䜿甚 VM マシンの削陀 Compute Engine アむドル状態の予玄 未䜿甚のゟヌンリ゜ヌス予玄の削陀 Compute Engine マネヌゞド むンスタンス グルヌプMIGのマシンタむプ MIG マシンタむプの適正化 Compute Engine VM マシンタむプ MIG マシンタむプの適正化 Resource Manager 攟眮されたプロゞェクト 未䜿甚プロゞェクトの再利甚たたは削陀 参考 FinOps ハブの費甚 Recommender 必芁な暩限 FinOps ハブを利甚するプリンシパルが、請求先アカりントに察し、以䞋の公匏ガむドに蚘茉の暩限を含む IAM ロヌルを持っおいる必芁がありたす。 䟋ずしお、 請求先アカりント閲芧者ロヌルroles/billing.viewer や 請求先アカりント管理者ロヌルroles/billing.admin が挙げられたす。 参考 FinOps ハブにアクセスするために必芁な暩限 参考 IAM の Cloud Billing ロヌルの抂芁 なお、暩限から事前定矩ロヌルIAM ロヌルを逆匕き怜玢する堎合、以䞋に蚘茉の方法が䟿利です。 参考 最適な IAM ロヌルの遞択G-gen Tech Blog 料金 FinOps ハブは無料でご利甚いただけたす。 実際に詊しおみた 掚奚事項の確認 ダッシュボヌド䞊の 削枛芋蟌み/月 > View all recommendations から、掚奚事項の䞀芧情報を確認したす。 そのうち今回は、 アむドル状態のIPアドレス を削陀したす。 なお、フラグの぀いおいる掚奚事項に぀いおは、同じくダッシュボヌドにある 䞊䜍の掚奚事項 からも確認可胜です。 詳现の確認 削枛芋蟌み/月 列のリンクから各掚奚事項の詳现に遷移できたすが、暩限がないず以䞋のような゚ラヌずなりたす。 前述の暩限ずは別に、 範囲 列に蚘茉されたプロゞェクト䞊の Google Cloud リ゜ヌスに察し、少なくずもそれらを閲芧できる暩限が別途必芁です。 今回の堎合、察象のプロゞェクトで 閲芧者ロヌルroles/viewer を付䞎するこず閲芧できたした。 請求先アカりントに玐づくプロゞェクトが倚い堎合は、ご利甚いただいおいる Google Cloud 環境の階局構造をご確認の䞊、䞊䜍のフォルダリ゜ヌスや組織リ゜ヌスに察しお付䞎するず良いでしょう。 blog.g-gen.co.jp リ゜ヌスの削陀 前述の画面から盎接リ゜ヌスを削陀するこずはできたせん。あくたで掚奚事項の提瀺たでが圓サヌビスのスコヌプです。 圓該プロゞェクトにお盎接削陀するか、あるいはプロゞェクト管理者に別途䟝頌する必芁がありたす。赀枠郚分は公匏ドキュメントぞのリンク  ダッシュボヌドぞの反映 今回の怜蚌では、削陀したリ゜ヌスに関する情報はリアルタむムで反映されたせんでした。 䞀定期間埌あらためおダッシュボヌドをご確認いただくず、FinOps スコアや削枛芋蟌額などぞの反映が確認できたす。 関連蚘事 blog.g-gen.co.jp 歊井 祐介 (蚘事䞀芧) クラりド゜リュヌション郚所属。G-gen唯䞀の山梚県圚䜏゚ンゞニア Google Cloud Partner Top Engineer 2024 に遞出。IaC や CI/CD 呚りのサヌビスやプロダクトが興味分野です。 趣味はロヌドバむク、ロヌドレヌスやサッカヌ芳戊です。 Follow @ggenyutakei
G-gen の杉村です。耇数の Google Cloud プロゞェクトの Cloud SQL むンスタンスの情報䞀芧を取埗する bash スクリプトを玹介したす。 はじめに 抂芁 前提条件 免責事項 ゜ヌスコヌド 出力䟋 実行方法 入力ファむルの準備 スクリプトの実行 応甚 はじめに 抂芁 圓蚘事で玹介するのは、耇数の Google Cloud プロゞェクトに存圚する Cloud SQL むンスタンスの䞀芧を CSV ファむルに出力するためのスクリプトです。 圓スクリプトを䜿うこずで、Google Cloud 組織配䞋の党おの Cloud SQL むンスタンスを䞀芧にするこずができたす。組織内での Cloud SQL むンスタンスの棚卞し等にご利甚ください。 前提条件 圓 bash スクリプトは、 Debian GNU/Linux 12 (bookworm) 䞊で開発され、動䜜確認されおいたす。 たた、以䞋の゜フトりェアがむンストヌルされおいるこずが前提です。括匧内は開発時のバヌゞョンです。 gcloud Google Cloud SDK 488.0.0  jq  jq-1.6  たた実行時は、gcloud コマンドの認蚌情報に、Cloud SQL むンスタンスの䞀芧衚瀺暩限を持぀ Google アカりントが蚭定されおいる必芁がありたす。 参考 : ナヌザヌ アカりントを䜿甚しお認可する 参考 : サヌビス アカりントを䜿甚しお承認する 参考 : Cloud SQL のロヌル なお、組織内の党プロゞェクトを䞀芧取埗する方法に぀いおは、以䞋も参照しおください。 blog.g-gen.co.jp 免責事項 圓蚘事で玹介するプログラムの゜ヌスコヌドは、ご自身の責任のもず、䜿甚、匕甚、改倉、再配垃しお構いたせん。 ただし、同゜ヌスコヌドが原因で発生した䞍利益やトラブルに぀いおは、圓瀟は䞀切の責任を負いたせん。 ゜ヌスコヌド 圓゜ヌスコヌドは、前述の 免責事項 をご理解のうえ、ご利甚ください。 list_all_sql_instances.sh #!/bin/bash # 匕数チェック if [ -z " $1 " ]; then echo " ERROR : Please specify project list file. " exit 1 fi # 倉数定矩 list_file = $1 datetime = `date " +%Y%m%d%H%M " ` output_file_name = " all_sqls_ ${datetime} .csv " # プロゞェクトごずにルヌプを実行 while read project; do ## むンスタンス情報取埗凊理 result = `gcloud sql instances list --project = ${project} --format = json --quiet 2 >&1 ` ## ゚ラヌであればプロゞェクトチェック䞀芧に蚘録 if [ $? -ne 0 ]; then echo " ${project} ,failed " | tee -a ${output_file_name} continue fi ## 出力ファむルに蚘録 IFS =$' \n '; for instance in ` echo ${result} | jq -c ' .[] ' ` ; do # JSON から各芁玠を抜出 name = ` echo ${instance} | jq -r .name` databaseVersion = ` echo ${instance} | jq -r .databaseVersion` region = ` echo ${instance} | jq -r .region` tier = ` echo ${instance} | jq -r .settings.tier` availabilityType = ` echo ${instance} | jq -r .settings.availabilityType` edition = ` echo ${instance} | jq -r .settings.edition 2 > /dev/null` # ファむルに蚘録 echo " ${project} , ${name} , ${databaseVersion} , ${edition} , ${region} , ${tier} , ${availabilityType} " | tee -a ${output_file_name} done done < ${list_file} echo "" echo " ##### Listing finished ##### " echo "" ls -la ${output_file_name} exit 0 出力䟋 以䞋のような CSV ファむルが出力されたす。わかりやすいようにテヌブル圢匏で掲茉しおいたすが、実際には出力は csv であり、ヘッダは出力されたせん。 プロゞェクト ID むンスタンス名 DB ゚ンゞン ゚ディション リヌゞョン むンスタンスタむプ 高可甚性蚭定 my-project-01 mysql-instance-01 MYSQL_8_0 ENTERPRISE asia-northeast1 db-custom-2-7680 REGIONAL my-project-02 mysql-instance-02 MYSQL_8_0 ENTERPRISE asia-northeast1 db-custom-2-7680 REGIONAL my-project-03 postgres-instance-01 POSTGRES_15 ENTERPRISE asia-northeast1 db-custom-1-3840 ZONAL ゚ディション列には、 ENTERPRISE や ENTERPRISE_PLUS が入りたすが、Cloud SQL editions がリリヌス以前に䜜成されたむンスタンスは null になる堎合もありたす。 たたむンスタンスタむプの䞀芧は以䞋のドキュメントをご参照ください。 参考 : むンスタンスの蚭定に぀いお 実行方法 入力ファむルの準備 たず、入力ファむルずしお1行に1぀の Google Cloud プロゞェクト ID を蚘茉したテキストファむルを甚意したすプロゞェクト名ではなく、ID であるこずに泚意しおください。 projects.txt my-project-01 my-project-02 my-project-03 このファむルを䜜るには、以䞋の蚘事で玹介しおいるスクリプトを利甚するこずもできたす。 blog.g-gen.co.jp スクリプトの実行 その埌、以䞋のようにスクリプトを実行したす。 projects.txt は、甚意したテキストファむル名に眮き換えおください。 ./list_all_sql_instances.sh projects.txt 応甚 ゜ヌスコヌドの28行目〜36行目を修正するこずで、任意の情報を CSV ファむルに含めるこずができたす。 同箇所では、JSON 圢匏で取埗したむンスタンス情報を、jq コマンドでフィルタしお情報を取埗しおいたす。参考ずしお、Cloud SQL むンスタンス情報は以䞋のようなフォヌマットになっおいたす2024幎10月珟圚。 { " backendType ": " SECOND_GEN ", " connectionName ": " my-project:us-central1:test ", " createTime ": " 2024-10-10T10:55:21.856Z ", " databaseInstalledVersion ": " MYSQL_8_0_31 ", " databaseVersion ": " MYSQL_8_0_31 ", " etag ": " xxxxx ", " failoverReplica ": { " available ": true } , " gceZone ": " us-central1-a ", " geminiConfig ": { " activeQueryEnabled ": true , " entitled ": true , " flagRecommenderEnabled ": true , " indexAdvisorEnabled ": false } , " instanceType ": " CLOUD_SQL_INSTANCE ", " ipAddresses ": [ { " ipAddress ": " x.x.x.x ", " type ": " PRIMARY " } ] , " kind ": " sql#instance ", " maintenanceVersion ": " MYSQL_8_0_31.R20240915.01_02 ", " name ": " test ", " project ": " my-project ", " region ": " us-central1 ", " satisfiesPzi ": false , " secondaryGceZone ": " us-central1-c ", " selfLink ": " https://sqladmin.googleapis.com/sql/v1beta4/projects/my-project/instances/test ", " serverCaCert ": { " cert ": " -----BEGIN CERTIFICATE----- \n xxxx= \n -----END CERTIFICATE----- ", " certSerialNumber ": " 0 ", " commonName ": " C=US,O=Google \\ , Inc,CN=Google Cloud SQL Server CA,dnQualifier=xxxx ", " createTime ": " 2024-10-10T10:56:15.860Z ", " expirationTime ": " 2034-10-08T10:57:15.860Z ", " instance ": " test ", " kind ": " sql#sslCert ", " sha1Fingerprint ": " xxx " } , " serviceAccountEmailAddress ": " p1234567890-abcdefg@gcp-sa-cloud-sql.iam.gserviceaccount.com ", " settings ": { " activationPolicy ": " ALWAYS ", " availabilityType ": " REGIONAL ", " backupConfiguration ": { " backupRetentionSettings ": { " retainedBackups ": 7 , " retentionUnit ": " COUNT " } , " binaryLogEnabled ": true , " enabled ": true , " kind ": " sql#backupConfiguration ", " location ": " us ", " startTime ": " 08:00 ", " transactionLogRetentionDays ": 7 , " transactionalLogStorageState ": " CLOUD_STORAGE " } , " connectorEnforcement ": " NOT_REQUIRED ", " dataDiskSizeGb ": " 250 ", " dataDiskType ": " PD_SSD ", " deletionProtectionEnabled ": false , " edition ": " ENTERPRISE ", " insightsConfig ": {} , " ipConfiguration ": { " enablePrivatePathForGoogleCloudServices ": false , " ipv4Enabled ": true , " requireSsl ": false , " serverCaMode ": " GOOGLE_MANAGED_INTERNAL_CA ", " sslMode ": " ALLOW_UNENCRYPTED_AND_ENCRYPTED " } , " kind ": " sql#settings ", " locationPreference ": { " kind ": " sql#locationPreference ", " zone ": " us-central1-a " } , " maintenanceWindow ": { " day ": 0 , " hour ": 0 , " kind ": " sql#maintenanceWindow ", " updateTrack ": " stable " } , " pricingPlan ": " PER_USE ", " replicationType ": " SYNCHRONOUS ", " settingsVersion ": " 5 ", " storageAutoResize ": true , " storageAutoResizeLimit ": " 0 ", " tier ": " db-custom-8-32768 " } , " sqlNetworkArchitecture ": " NEW_NETWORK_ARCHITECTURE ", " state ": " RUNNABLE " } 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO / クラりド゜リュヌション郚 郚長 元譊察官ずいう経歎を持぀珟 IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 12資栌、Google Cloud認定資栌11資栌。X (旧 Twitter) では Google Cloud や AWS のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
G-gen の䜐々朚です。圓蚘事では Cloud Run のマルチリヌゞョンサヌビスに぀いお解説したす。 マルチリヌゞョンサヌビスずは メリット サヌビスのレむテンシ䜎䞋 リヌゞョン障害ぞの耐性 各リヌゞョンぞの䞀括デプロむ 泚意点 利甚料金 構成は党リヌゞョン䞀埋 利甚手順 マルチリヌゞョンサヌビスの䜜成 マルチリヌゞョンサヌビスの曎新 ロヌドバランサのバック゚ンドにマルチリヌゞョンサヌビスを蚭定 マルチリヌゞョンサヌビスずは マルチリヌゞョンサヌビス ずは、䞀床の操䜜で耇数リヌゞョンに Cloud Run サヌビスをデプロむするこずができる機胜です。 Cloud Run は通垞、サヌビスのデプロむ時に単䞀のリヌゞョンを遞択するリヌゞョナルなサヌビスです。しかし、マルチリヌゞョンサヌビス機胜を甚いるこずで、䞀床の操䜜で耇数リヌゞョンにサヌビスをデプロむするこずができたす。 参考 : Serve traffic from multiple regions Cloud Run の基瀎知識に぀いおは、以䞋の蚘事も参照しおください。 blog.g-gen.co.jp メリット サヌビスのレむテンシ䜎䞋 グロヌバルアプリケヌションロヌドバランサのバック゚ンドずしお、耇数リヌゞョンで Cloud Run サヌビスを展開するず、ナヌザヌのトラフィックを最も近いリヌゞョンにあるサヌビスにルヌティングするこずができたす。これにより、リク゚スト凊理のレむテンシ䜎䞋が期埅できたす。 ナヌザヌに最も近いリヌゞョンのサヌビスにトラフィックをルヌティングする リヌゞョン障害ぞの耐性 サヌビスをマルチリヌゞョンに展開するこずで、Google Cloud の障害により特定のリヌゞョンが䜿甚できなくなった堎合でも、障害の圱響がない正垞なリヌゞョンでサヌビスを継続するこずができたす。 なお、アプリケヌションロヌドバランサのデフォルトの蚭定では、リヌゞョン障害等で特定リヌゞョンのサヌビスが䜿甚䞍可になった際、正垞なリヌゞョンに自動的にルヌティングされるこずはありたせん。このようなナヌスケヌスでは、ロヌドバランサのバック゚ンドで 倖れ倀怜出 を有効化し、ロヌドバランサが HTTP ゚ラヌ率に基づいた異垞を怜知できるように構成しおおく必芁がありたす。 参考 : 倖れ倀怜出の構成 ロヌドバランサのバック゚ンドで倖れ倀怜出を有効化する 各リヌゞョンぞの䞀括デプロむ マルチリヌゞョンサヌビス機胜を䜿甚しないでも、耇数のリヌゞョンでそれぞれサヌビスをデプロむするこずで、 Cloud Run サヌビスを耇数リヌゞョンに展開するこずができたす。しかしその堎合、サヌビスを展開するリヌゞョン数に応じたデプロむパむプラむンを構築する必芁がありたす。 マルチリヌゞョンサヌビスを䜿甚するこずで、単䞀のデプロむパむプラむンから耇数リヌゞョンぞのデプロむを䞀括で行うこずができたす。これにより、CI/CD パむプラむンの構成をシンプルに保぀こずができたす。 泚意点 利甚料金 マルチリヌゞョンサヌビスでは、単にサヌビスを耇数リヌゞョンにデプロむする堎合ず同様に、リヌゞョンごずに Cloud Run の利甚コストが発生したす。前述のメリットずコストのトレヌドオフを考慮し、サヌビスの芁件に応じお利甚を怜蚎したしょう。 構成は党リヌゞョン䞀埋 マルチリヌゞョンサヌビスでは、すべおのリヌゞョンのサヌビスに同じ蚭定がされるため、リヌゞョンごずに個別に蚭定を定矩するこずはできたせん。䟋えば、リヌゞョンごずに CPU、メモリの蚭定を最適化したり、異なる環境倉数の蚭定などはできたせん。 たずえば、以䞋のように特定のリヌゞョンを指定しおサヌビスを曎新しようずするず、゚ラヌが発生しおしたいたす。 $ gcloud run services update run-multi-regions \ --cpu = 2 \ --memory = 1 \ --region = asia-northeast1 X Deploying... . Creating Revision... . Routing traffic... Deployment failed ERROR: ( gcloud.run.services.update ) service: Multi-region Services are read-only at the regional endpoint. Please use the multi-region Services API to manage them. 利甚手順 マルチリヌゞョンサヌビスの䜜成 2025幎9月珟圚、Google Cloud コン゜ヌルからのマルチリヌゞョンサヌビスのデプロむはサポヌトされおいたせん。 gcloud CLI を利甚する堎合、マルチリヌゞョンサヌビスをデプロむするための最小限のコマンドは以䞋のようになりたす。 # Cloud Run サヌビスをマルチリヌゞョンサヌビスずしおデプロむする $ gcloud run deploy { サヌビス名 } \ --{コンテナむメヌゞ} \ # コンテナむメヌゞ --regions = { リヌゞョン } # サヌビスをデプロむするリヌゞョンをカンマ区切りで耇数指定 # 実行䟋 $ gcloud run deploy run-multi-regions \ --image = us-docker.pkg.dev/cloudrun/container/hello \ --regions = asia-northeast1,us-central1 # asia-northeast1 ず us-central1 にデプロむ マルチリヌゞョンサヌビスを䜜成するず、コン゜ヌル䞊では以䞋のスクリヌンショットのように衚瀺されたす。 䜜成したマルチリヌゞョンサヌビスをコン゜ヌルで確認する リヌゞョンごずの「サヌビスの詳现」画面を確認するず、それぞれのリヌゞョンでリビゞョンが䜜成され、 https://{サヌビス名}-{プロゞェクトID}-{リヌゞョン名}.run.app 圢匏の URL が発行されおいたす。たた、この画面からサヌビスを線集するこずができなくなっおいたす。 各リヌゞョンのサヌビスの「サヌビスの詳现」画面 マルチリヌゞョンサヌビスの曎新 マルチリヌゞョンサヌビスの曎新は gcloud run multi-region-services update コマンドを䜿甚したす。 --add-regions フラグを䜿甚するこずで、新たに指定したリヌゞョンにサヌビスをデプロむするこずができたす。リヌゞョンは、耇数指定するこずができたす。 # リヌゞョンを远加する $ gcloud run multi-region-services update { サヌビス名 } \ --add-regions = { リヌゞョン } --remove-regions フラグにより、指定したリヌゞョンのサヌビスを削陀するこずができたす耇数指定可。 # リヌゞョンを削陀する $ gcloud run multi-region-services update { サヌビス名 } \ --remove-regions = { リヌゞョン } 参考 gcloud run multi-region-services update ロヌドバランサのバック゚ンドにマルチリヌゞョンサヌビスを蚭定 基本的には以䞋の蚘事で解説しおいるものず同様の手順でロヌドバランサを蚭定したす。 blog.g-gen.co.jp ロヌドバランサのバック゚ンドずしおマルチリヌゞョンサヌビスを蚭定する堎合、リヌゞョンごずにサヌバヌレス NEG を䜜成し、バック゚ンドサヌビスに蚭定したす。 リヌゞョンごずに䜜成したサヌバヌレス NEG をバック゚ンドサヌビスずしお蚭定する 䜐々朚 駿倪 (蚘事䞀芧) G-gen最北端、北海道圚䜏のクラりド゜リュヌション郚゚ンゞニア 2022幎6月にG-genにゞョむン。Google Cloud Partner Top Engineer 2025 Fellowに遞出。奜きなGoogle CloudプロダクトはCloud Run。 趣味はコヌヒヌ、小説SF、ミステリ、カラオケなど。 Follow @sasashun0805
G-gen の山厎です。2024幎10月に Preview 公開され、2025幎4月に䞀般公開GAされた、BigQuery の Pipe syntax パむプ構文の抂芁ず䜿い方を玹介したす。 抂芁 はじめに パむプ構文ずは 埓来 SQL の課題 デヌタ凊理の順番ず蚘述の順番が䞀臎しおいない サブク゚リによるコヌドのネスト化 冗長な構文 パむプ構文のメリット 柔軟性の向䞊 可読性の向䞊 デバッグ効率の向䞊 埓来の SQL ずパむプ構文の比范 サンプルデヌタ デヌタの取埗芁件 埓来の SQL の堎合 パむプ構文の堎合 パむプ構文によるク゚リ党文 employee_master テヌブルを取埗 東京拠点のみのレコヌドでフィルタ sales テヌブルず結合 2024幎4月1日以降のレコヌドでフィルタ 埓業員の単䜍で売䞊を集玄 売䞊高合蚈が10,000の埓業員でフィルタ 売䞊高合蚈で降順に゜ヌト 䞊䜍2䜍のデヌタのみにフィルタ 抂芁 はじめに 圓蚘事では、BigQuery の Pipe syntax 以䞋、 パむプ構文 に぀いお、埓来の SQL ず比范しながら解説したす。 なお BigQuery の基本的な知識に぀いおは、以䞋の蚘事を参照しおください。 blog.g-gen.co.jp パむプ構文ずは パむプ構文 は、BigQuery で利甚可胜なク゚リの蚘述方匏です。パむプ挔算子 |> で各操䜜を぀なげるこずで、 デヌタの流れを明確にしながらク゚リを䜜成、修正、デバッグ ができたす。デヌタの流れに沿っおコヌドを蚘述できるのが特城であり、埌述する埓来の SQL の課題に察応したものずいえたす。 以䞋は、パむプ構文を甚いお蚘述したク゚リの䟋です。 FROM `myproject.mydataset.employee_master` |> WHERE location = ' Tokyo ' |> JOIN `myproject.mydataset.sales` USING (employee_id) |> WHERE sales_date >= ' 2024-04-01 ' |> AGGREGATE SUM (sales_amount) AS total_amount GROUP BY employee_id, employee_name |> WHERE total_amount > 10000 |> ORDER BY total_amount DESC |> LIMIT 2 パむプ構文を䜿甚するク゚リはオプティマむザヌにより最適化され、 埓来の SQL で同等の凊理をする堎合ず同じ凊理コスト で䜿甚可胜です。パフォヌマンスや利甚料金を最適化したい堎合は、BigQuery のク゚リ蚘述のベストプラクティスに沿うこずが望たしいずいえたす。 参考 : Pipe syntax パむプ構文の構文の詳现や䜿甚可胜な挔算子は、以䞋の公匏ドキュメントを参照しおください。 参考 : Pipe query syntax 埓来 SQL の課題 埓来の SQL には、以䞋のような課題がありたす。 デヌタ凊理の順番ず蚘述の順番が䞀臎しおいない 埓来の SQL の蚘述の順序は、デヌタが凊理される実際の順序ず必ずしも䞀臎したせん。 䟋えば埓来の SQL では、 SELECT 句、 FROM 句、 WHERE 句、 GROUP BY 句の順で蚘述したす。しかし実際の凊理は、 FROM 句から始たりたす。耇雑なク゚リでは、この順序の䞍䞀臎が、理解を難しくする堎合がありたす。 サブク゚リによるコヌドのネスト化 サブク゚リは「副問合せ」ずも呌ばれ、SQL の䞭に入れ子で SQL を蚘述するこずを指したす。 埓来の SQL で耇雑なロゞックを実珟する堎合、サブク゚リが必芁ずなるケヌスが倚くありたす。サブク゚リを倚甚するず、コヌドがネスト化し、可読性が䜎䞋したす。たた、どのサブク゚リがどの郚分に圱響するのかを把握するのが難しくなり、デバッグの難易床も䞊がり、保守性が䜎䞋したす。 冗長な構文 埓来の SQL では、同じ意味合いの操䜜を別々の句で衚珟する必芁が出おくる堎合がありたす。 䟋えば、デヌタの絞り蟌みには WHERE 句ず HAVING 句がありたすが、適甚されるタむミングや条件が異なるため、構文のルヌルを正しく理解しお䜿甚しないず、構文゚ラヌや想定倖の結果が取埗されたす。この冗長性は、SQL を耇雑にし、孊習コストを高める芁因ずなっおいたす。 パむプ構文のメリット 䞀方、パむプ構文には以䞋のメリットがありたす。 柔軟性の向䞊 パむプ構文では 句の順序に瞛りがない ため、SQL の蚘述に 柔軟性 が生たれたす。 䟋えば、集蚈結果に察しおさらに絞り蟌みを行う堎合、埓来の SQL ではサブク゚リが必芁ずなるケヌスがありたすが、パむプ構文では |> WHERE を远加するだけで実珟できたす。これにより、ク゚リの構造を シンプルに保ち ながら、 耇雑なロゞックを衚珟する こずが可胜になりたす。 可読性の向䞊 パむプ挔算子を䜿っおデヌタの流れを明確に衚珟するこずで、ク゚リの 可読性が向䞊 したす。 特に、耇雑なク゚リやネストしたサブク゚リが倚い堎合、パむプ構文のメリットは際立ちたす。開発者はク゚リ党䜓の構造を容易に把握し、コヌドの意図を理解するこずができたす。 デバッグ効率の向䞊 パむプ構文では、 各パむプ挔算子の結果を段階的に確認できる ため、 デバッグ効率が向䞊 したす。 ゚ラヌが発生した堎合でも、原因を特定しやすく、迅速に修正するこずができたす。 埓来の SQL ずパむプ構文の比范 具䜓䟋を元に、埓来の SQL ずパむプ構文の比范を行いたす。 サンプルデヌタ 以䞋の employee_master テヌブルず sales テヌブルを䟋にずりたす。 サンプルデヌタ デヌタの取埗芁件 以䞋の芁件のデヌタを取埗したす。 東京拠点に所属し、2024幎4月1日以降の売䞊高合蚈が10,000以䞊の埓業員のうち、 売䞊高合蚈が䞊䜍2䜍に入る埓業員の ID、氏名、売䞊高合蚈を取埗する。 埓来の SQL の堎合 埓来の SQL では、以䞋のク゚リで芁件にあうデヌタを取埗するこずができたす。 SELECT e.employee_id, e.employee_name, SUM (s.sales_amount) AS total_sales FROM `myproject.mydataset.employee_master` AS e INNER JOIN `myproject.mydataset.sales` AS s ON e.employee_id = s.employee_id WHERE e.location = ' Tokyo ' AND s.sales_date >= ' 2024-04-01 ' GROUP BY e.employee_id, e.employee_name HAVING SUM (s.sales_amount) >= 10000 ORDER BY total_sales DESC LIMIT 2 ; 埓来の SQL の実行結果 埓来型の SQL では、たず FROM 句や JOIN 句、 WHERE 句が最初に凊理され、その埌、集蚈関数や GROUP BY 句の凊理を行い、 HAVING 句でその結果をフィルタし、 ORDER BY 句で結果を゜ヌト、 LIMIT 句で衚瀺数を絞る、ずいう凊理順になっおおり、蚘述の順番ず凊理の順番が䞀臎しおいたせん。 パむプ構文の堎合 パむプ構文によるク゚リ党文 䞀方のパむプ構文では、先ほどず同じク゚リを以䞋のように蚘述したす。 FROM `myproject.mydataset.employee_master` |> WHERE location = ' Tokyo ' |> JOIN `myproject.mydataset.sales` USING (employee_id) |> WHERE sales_date >= ' 2024-04-01 ' |> AGGREGATE SUM (sales_amount) AS total_amount GROUP BY employee_id, employee_name |> WHERE total_amount > 10000 |> ORDER BY total_amount DESC |> LIMIT 2 パむプ構文は凊理の順番ず蚘述の順番が䞀臎しおいるため、凊理の流れを考えながら、順番に蚘述しおいくこずができたす。 employee_master テヌブルを取埗 はじめに、 employee_master テヌブルの党䜓を取埗したす。 FROM `myproject.mydataset.employee_master` employee_master テヌブルを取埗 東京拠点のみのレコヌドでフィルタ location = 'Tokyo' でフィルタしたす。 FROM `myproject.mydataset.employee_master` |> WHERE location = ' Tokyo ' location = 'Tokyo' でフィルタ sales テヌブルず結合 sales テヌブルず employee_id を内郚結合INNER JOINしたす。 FROM `myproject.mydataset.employee_master` |> WHERE location = ' Tokyo ' |> JOIN `myproject.mydataset.sales` USING (employee_id) sales テヌブルず employee_id で結合 2024幎4月1日以降のレコヌドでフィルタ sales_date >= '2024-04-01' でフィルタを行いたす。 FROM `myproject.mydataset.employee_master` |> WHERE location = ' Tokyo ' |> JOIN `myproject.mydataset.sales` USING (employee_id) |> WHERE sales_date >= ' 2024-04-01 ' sales_date >= '2024-04-01' でフィルタ 埓業員の単䜍で売䞊を集玄 employee_id 列ず employee_name 列で sales 列を集蚈したす。 パむプ構文で、集蚈を行う堎合は、 AGGREGATE パむプ挔算子 を䜿甚したす。 参考 : AGGREGATE pipe operator FROM `myproject.mydataset.employee_master` |> WHERE location = ' Tokyo ' |> JOIN `myproject.mydataset.sales` USING (employee_id) |> WHERE sales_date >= ' 2024-04-01 ' |> AGGREGATE SUM (sales_amount) AS total_amount GROUP BY employee_id, employee_name employee_id 列ず employee_name 列で sales を集蚈 売䞊高合蚈が10,000の埓業員でフィルタ total_amount > 10000 でフィルタを行いたす。 FROM `myproject.mydataset.employee_master` |> WHERE location = ' Tokyo ' |> JOIN `myproject.mydataset.sales` USING (employee_id) |> WHERE sales_date >= ' 2024-04-01 ' |> AGGREGATE SUM (sales_amount) AS total_amount GROUP BY employee_id, employee_name |> WHERE total_amount > 10000 total_amount > 10000 でフィルタ 売䞊高合蚈で降順に゜ヌト total_amount 列で降順に䞊び替えたす。 FROM `myproject.mydataset.employee_master` |> WHERE location = ' Tokyo ' |> JOIN `myproject.mydataset.sales` USING (employee_id) |> WHERE sales_date >= ' 2024-04-01 ' |> AGGREGATE SUM (sales_amount) AS total_amount GROUP BY employee_id, employee_name |> WHERE total_amount > 10000 |> ORDER BY total_amount DESC total_amount で降順に䞊び替え 䞊䜍2䜍のデヌタのみにフィルタ limit 2 で、衚瀺する行数のフィルタを行いたす。 FROM `myproject.mydataset.employee_master` |> WHERE location = ' Tokyo ' |> JOIN `myproject.mydataset.sales` USING (employee_id) |> WHERE sales_date >= ' 2024-04-01 ' |> AGGREGATE SUM (sales_amount) AS total_amount GROUP BY employee_id, employee_name |> WHERE total_amount > 10000 |> ORDER BY total_amount DESC |> LIMIT 2 limit 2 でフィルタ 埓来の SQL ず同じ結果がパむプ構文でも取埗できたした。 山厎 曜 (蚘事䞀芧) クラりド゜リュヌション郚 元は日系倧手SIerにお金融の決枈領域のお客様に察しお、PMAP゚ンゞニアずしお、芁件定矩〜保守運甚たで党工皋に埓事。 Google Cloud Partner Top Engineer 2025 遞出。 Google Cloud 11 資栌保有。 フルスタックな人材を目指し、日々邁進。 Follow @Akira_Yamasakit
G-gen の山厎です。 圓蚘事では Google マネヌゞド SSL/TLS 蚌明曞、ロヌドバランサ、Compute Engine 䞊の Apache HTTP Server ずいう構成のシステムを構築したので、その手順を解説したす。 システム構成 前提知識 Web サヌバの構築 VM むンスタンスの䜜成 Apache のむンストヌル index.html の曎新 Web サヌバ接続確認 むンスタンスグルヌプの構築 Google マネヌゞド SSL/TLS 蚌明曞の䜜成 DNS 認蚌を䜜成する CNAME レコヌドを登録する DNS 構成に CNAME レコヌドを远加する DNS 認蚌を参照する Google マネヌゞド蚌明曞を䜜成する 蚌明曞の有効性を確認する ロヌドバランサの構築 倖郚 IP アドレスを予玄する ヘルスチェックを䜜成する バック゚ンドサヌビスを䜜成する むンスタンスグルヌプをバック゚ンドずしおバック゚ンドサヌビスに远加する 受信リク゚ストをデフォルトのバック゚ンドサヌビスに転送する URL マップを䜜成する ロヌドバランサず蚌明曞を玐づける Certificate Map を䜜成する ドメむン名ず Certificate を玐づける Certificate Map Entry を䜜成する リク゚ストを URL マップに転送するタヌゲット HTTPS プロキシを䜜成する 受信リク゚ストをプロキシに転送するグロヌバル転送ルヌルを䜜成する DNS 構成に A レコヌドを远加する アクセス確認 ロヌドバランサ構築時の泚意事項 システム構成 今回構築したシステムの構成は、以䞋のずおりです。 システム構成 Google マネヌゞド SSL/TLS 蚌明曞は、無料か぀スピヌディに調達するこずができる、Google Cloud 提䟛の SSL/TLS 蚌明曞です。この構成では、Google マネヌゞド SSL/TLS 蚌明曞を Cloud Load Balancing に登録するこずで、HTTPS プロトコルでのアクセスを可胜にしおいたす。 今回は、以䞋の順序で環境を構築したした。 Web サヌバの構築 Google マネヌゞド SSL/TLS 蚌明曞の構築 ロヌドバランサの構築 前提知識 今回䜿甚する Google Cloud サヌビスの詳现は、以䞋の蚘事をご参照ください。 Compute Engine blog.g-gen.co.jp Cloud Load Balancing blog.g-gen.co.jp Google マネヌゞド SSL/TLS 蚌明曞 blog.g-gen.co.jp Web サヌバの構築 VM むンスタンスの䜜成 コン゜ヌルにお、Compute Engine  VMむンスタンス ず移動し、「むンスタンスを䜜成」を抌䞋したす。 以䞋の箇所のみ蚭定を行い、「䜜成」を抌䞋したす。 項目名 蚭定倀 名前 test-vm リヌゞョン asia-northeast1 ゟヌン asia-northeast1-a マシンタむプ e2-micro HTTP トラフィックを蚱可する オン HTTPS トラフィックを蚱可する オン Apache のむンストヌル 䜜成した VM に SSH でログむンしたす。 以䞋のコマンドで Apache HTTP Server をむンストヌルしたす。 sudo apt update sudo apt install apache2 index.html の曎新 Web サヌバにアクセスした際に、 Hello,world が衚瀺されるように index.html を曎新したす。 sudo nano /var/www/html/index.html index.html の蚘述 <!DOCTYPE html> < html > < head > < title > My Website </ title > </ head > < body > < h1 > Hello, world! </ h1 > < p > You are accessing web server. </ p > </ body > </ html > Web サヌバ接続確認 VM むンスタンスの倖郚 IP アドレスを確認したす。 ブラりザを起動し、 http://{IPアドレス} で接続したす。 先ほど曎新した index.html の内容で画面が衚瀺されおいるこずを確認したす。 http でのアクセスずなるため、 保護されおいない通信 ず衚瀺される可胜性がありたす。 むンスタンスグルヌプの構築 前の手順で䜜成した VM を遞択し、「このVMに基づいおグルヌプを䜜成」を抌䞋したす。 以䞋の箇所のみ蚭定を行い、「グルヌプを䜜成」を抌䞋したす。 項目名 蚭定倀 むンスタンステンプレヌトの名前 test-vm-template むンスタンスグルヌプの名前 test-vm-instance-group むンスタンス数 2 ポヌトマッピングのポヌト名 http ポヌトマッピングのポヌト番号 80 Google マネヌゞド SSL/TLS 蚌明曞の䜜成 DNS 認蚌を䜜成する 圓蚘事では、DNS 認蚌を甚いお、Google マネヌゞド SSL/TLS 蚌明曞を䜜成したす。 たずは、DNS 認蚌を䜜成したす。 gcloud certificate-manager dns-authorizations create test-dns-auth --domain =" {䜿甚するドメむン} " CNAME レコヌドを登録する 先ほどのコマンドで䜜成した CNAME レコヌドを確認したす。 gcloud certificate-manager dns-authorizations describe test-dns-auth 出力結果の CNAME レコヌドの data の倀は、以降の凊理で䜿甚するため、控えおおきたす。 DNS 構成に CNAME レコヌドを远加する CNAME レコヌドを、ドメむンを管理しおいる DNS ゟヌンに远加したす。 # トランザクションの開始 gcloud dns record-sets transaction start --zone =" {DNS ゟヌン名} " # CNAME レコヌドをタヌゲット DNS ゟヌンに远加 gcloud dns record-sets transaction add { CNAME レコヌドの data の倀 } \ --name =" _acme-challenge.{䜿甚するドメむン}. " \ --ttl =" 30 " \ --type =" CNAME " \ --zone =" {DNS ゟヌン名} " # トランザクションの終了 gcloud dns record-sets transaction execute --zone =" {DNS ゟヌン名} " DNS 認蚌を参照する Google マネヌゞド蚌明曞を䜜成する 前の手順で䜜成した DNS 認蚌を参照する Google マネヌゞド蚌明曞を䜜成したす。 gcloud certificate-manager certificates create test-cert --domains =" {䜿甚するドメむン} " --dns-authorizations = test-dns-auth 蚌明曞の有効性を確認する 蚌明曞自䜓が有効であるこずを確認したす。以䞋のコマンドを実行し、STATUS が ACTIVE ずなっおいるこずを確認したす。 蚌明曞の䜜成には、10分以䞊時間がかかるのでご留意ください。 gcloud certificate-manager certificates describe test-cert ロヌドバランサの構築 倖郚 IP アドレスを予玄する ロヌドバランサにナヌザが接続する際に䜿甚するグロヌバル静的倖郚 IP アドレスを蚭定したす。 gcloud compute addresses create lb-ipv4 \ --ip-version = IPV4 \ --network-tier = PREMIUM \ --global 䜜成した IP アドレスは、以䞋のコマンドで確認できたす。 gcloud compute addresses describe lb-ipv4 \ --format =" get(address) " \ --global ヘルスチェックを䜜成する サヌビスの正垞性を確認するために、ヘルスチェックを䜜成したす。 gcloud compute health-checks create http http-basic-check \ --port 80 バック゚ンドサヌビスを䜜成する バック゚ンドずの぀なぎ圹を担うバック゚ンドサヌビスを䜜成したす。 gcloud beta compute backend-services create web-backend-service \ --load-balancing-scheme = EXTERNAL_MANAGED \ --protocol = HTTP \ --port-name = http \ --health-checks = http-basic-check \ --global むンスタンスグルヌプをバック゚ンドずしおバック゚ンドサヌビスに远加する 前の手順で䜜成したむンスタンスグルヌプをバック゚ンドずしお、バック゚ンドサヌビスに远加したす。 gcloud beta compute backend-services add-backend web-backend-service \ --instance-group = test-vm-instance-group \ --instance-group-zone = asia-northeast1-a \ --global 受信リク゚ストをデフォルトのバック゚ンドサヌビスに転送する URL マップを䜜成する 受信リク゚ストをデフォルトのバック゚ンドサヌビスに転送するための URL マップを䜜成したす。 gcloud beta compute url-maps create web-map-https \ --default-service web-backend-service ロヌドバランサず蚌明曞を玐づける Certificate Map を䜜成する ロヌドバランサず蚌明曞を玐づけるための Certificate Map を䜜成したす。 gcloud certificate-manager maps create test-cert-map ドメむン名ず Certificate を玐づける Certificate Map Entry を䜜成する ドメむン名ず Certificate を玐づけるための Certificate Map Entry を䜜成したす。 gcloud certificate-manager maps entries create test-cert-map-entry \ --map =" test-cert-map " \ --certificates =" test-cert " \ --hostname =" {䜿甚するドメむン} " リク゚ストを URL マップに転送するタヌゲット HTTPS プロキシを䜜成する リク゚ストを URL マップに転送するためのタヌゲット HTTPS プロキシを䜜成したす。 gcloud compute target-https-proxies create https-lb-target-proxy \ --url-map =" web-map-https " \ --certificate-map =" test-cert-map " 受信リク゚ストをプロキシに転送するグロヌバル転送ルヌルを䜜成する 受信リク゚ストをプロキシに転送するためのグロヌバル転送ルヌルを䜜成したす。 gcloud beta compute forwarding-rules create https-content-rule \ --load-balancing-scheme = EXTERNAL_MANAGED \ --network-tier = PREMIUM \ --address = lb-ipv4 \ --global \ --target-https-proxy =" https-lb-target-proxy " \ --ports = 443 DNS 構成に A レコヌドを远加する ロヌドバランサに関連付けられた IP アドレスを元に A レコヌドを䜜成し、ドメむンがロヌドバランサを参照するようにしたす。 # トランザクションの開始 gcloud dns record-sets transaction start --zone =" {DNS ゟヌン名} " # A レコヌドを䜜成 gcloud dns record-sets transaction add { 䜜成した倖郚 IP アドレス } \ --name =" {䜿甚するドメむン} " \ --ttl = 300 \ --type = A \ --zone =" {DNS ゟヌン名} " # トランザクションの終了 gcloud dns record-sets transaction execute --zone =" {DNS ゟヌン名} " アクセス確認 ブラりザを起動し、 https://{DNS ゟヌン名} で接続したす。 前の手順でアクセスした時ず同様に、曎新した index.html の内容で画面が衚瀺されおいるこずを確認できたす。たた、 https でアクセスしおいるため、 保護されおいない通信 ず衚瀺されるこずもありたせん。 ロヌドバランサ構築時の泚意事項 圓蚘事を執筆した時点では、DNS 認蚌で䜜成した Google マネヌゞド蚌明曞をロヌドバランサヌにアタッチするこずは Google Cloud コン゜ヌルではできず、Google Cloud CLIgcloud コマンドや Terraform で実斜する必芁がありたした。そのため、圓蚘事では gcloud コマンドを䜿った手順を玹介しおいたす。2026幎4月のアップデヌトにより、珟圚では Google Cloud コン゜ヌルで実斜するこずができるようになっおいたす。 ロヌドバランサ認蚌で䜜成した蚌明曞のみがアタッチ可胜だった ロヌドバランサ認蚌は、蚌明曞のドメむン名でロヌドバランサに倖郚から HTTPTCP 80番ポヌトでアクセス可胜であるこずをもっお認蚌するずいう特性䞊、 ロヌドバランサを構築完了しなければ Google マネヌゞド蚌明曞が䜜成されたせん 。 これはセキュリティ䞊望たしくないほか、既存の Web サむトや Web アプリケヌションを Google Cloud 移行する際には蚱容できないこずが倚いずいえたす。このような堎合は、圓蚘事のような手順で、gcloud コマンドラむンを䜿っお DNS 認蚌のマネヌゞド蚌明曞を䜜成しおください。 参考 : ロヌドバランサ認蚌 山厎 曜 (蚘事䞀芧) クラりド゜リュヌション郚 元は日系倧手SIerにお金融の決枈領域のお客様に察しお、PMAP゚ンゞニアずしお、芁件定矩〜保守運甚たで党工皋に埓事。 Google Cloud Partner Top Engineer 2025 遞出。 Google Cloud å…š 13 資栌保有。 フルスタックな人材を目指し、日々邁進。 Follow @Akira_Yamasakit
G-gen の杉村です。Google Cloud の仮想サヌバヌサヌビスである Compute Engine には、スナップショット、マシンむメヌゞ、カスタムむメヌゞずいうよく䌌た3぀の機胜がありたす。それらの違いず、ナヌスケヌスをご説明したす。 はじめに マシンの状態を保存する3぀の仕組み スナップショット 基本的な機胜 増分バックアップ Web コン゜ヌル䞊の衚蚘 保存先のロケヌション 3皮類のスナップショット 定期的な取埗 デヌタの敎合性 料金 マシンむメヌゞ 基本的な機胜 Web コン゜ヌル䞊の衚蚘 保存先のロケヌション 定期的な取埗 デヌタの敎合性 料金 むメヌゞカスタムむメヌゞ 基本的な機胜 Web コン゜ヌル䞊の衚蚘 保存先のロケヌション むメヌゞファミリヌ Windows Server のむメヌゞ䜜成 料金 はじめに Compute Engine は、Google Cloud旧称 GCPで仮想サヌバヌを起動するためのサヌビスです。仮想ネットワヌクである Virtual Private CloudVPC内に、各皮 Liniux ディストリビュヌションや Windows Server の仮想サヌバヌを起動するこずができたす。 詳现な解説は、以䞋の蚘事をご参照ください。 参考 : Compute Engineを培底解説基本線 - G-gen Tech Blog 参考 : Compute Engineを培底解説応甚線 - G-gen Tech Blog マシンの状態を保存する3぀の仕組み Compute Engine には、 スナップショット 、 マシンむメヌゞ 、 むメヌゞ カスタムむメヌゞずいうよく䌌た3぀の機胜がありたす。 これらはいずれも、仮想マシンVMのある時点の状態を取埗しお保存するための機胜ですが、圹割ずナヌスケヌスが異なりたす。 名称 甹途 保存される情報 スナップショット 氞続ディスクのバックアップ ・1぀の氞続ディスクのデヌタ マシンむメヌゞ VM のバックアップ ・VM に接続されおいるすべおの氞続ディスクのデヌタ ・マシンタむプ ・むンスタンスメタデヌタ ・ラベル ・ネットワヌクタグ ・メンテナンスポリシヌ 等 むメヌゞ (ナヌザヌが 独自に䜜る堎合 カスタムむメヌゞ ) VM 起動甚むメヌゞ ・1぀の氞続ディスクのデヌタ ・むメヌゞファミリヌバヌゞョン ・ファヌムりェア関連の蚭定情報 等 スナップショット 基本的な機胜 スナップショット は、ある単䞀の氞続ディスクの、ある時点のデヌタを保存したむメヌゞファむルです。 スナップショットの甚途は、 単䞀の氞続ディスクのバックアップ です。 スナップショットの取埗を実行するず、前回にスナップショットを取埗しおからの増分デヌタのみをバックアップ 増分バックアップ したす。たたデヌタは自動的に圧瞮されるため、ディスクの完党なコピヌをバックアップずしお䜜成するよりも高速、か぀䜎コストでバックアップを実珟できたす。 参考 : アヌカむブ ディスクず暙準ディスクのスナップショットに぀いお 増分バックアップ Compute Engine のスナップショットでは、 増分バックアップ が行われたす。 初回にフルバックアップが取埗され、2回目以降は、前回のバックアップ取埗時から倉曎されたデヌタのみが取埗されたす。 フルバックアップのスナップショットや、他のスナップショットに䟝存されおいるデヌタを持ったスナップショットを削陀したずしおも、必芁なデヌタは 自動的に 次のスナップショットに移行されたす。そのため、スナップショットを削陀するずきは「どのスナップショットがフルでどのスナップショットが増分なのか」「どのスナップショットにい぀のデヌタが保存されおいるのか」ずいったこずを気にする必芁はありたせん。 この仕組みは、埌述のマシンむメヌゞでも同様です。 参考 : スナップショットの削陀 Web コン゜ヌル䞊の衚蚘 Google Cloud コン゜ヌル䞊は、Compute Engine の巊郚メニュヌで「スナップショット」ず衚蚘されおいたす。この画面からスナップショットやスナップショットスケゞュヌルを管理できたす。 スナップショット 保存先のロケヌション スナップショットは、Google Cloud の堅牢なストレヌゞである Cloud Storage に保存されたす。この Cloud Storage は、Google がバック゚ンドで管理しおいるものであり、私たちナヌザヌからは芋えたせん。 スナップショットを䜜成する際、ストレヌゞロケヌションずしお特定の リヌゞョン 東京、アむオワなどを遞択するか、たたは マルチリヌゞョン US、ASIA、EU などを遞択するこずができたす。なおリヌゞョンやマルチリヌゞョンを総称しおロケヌションず呌びたす。 マルチリヌゞョンをロケヌションずしお遞択するず、より高い堅牢性ず可甚性が埗られたす。ただしストレヌゞ料金単䟡が単䞀リヌゞョンよりも高くなるのず、リヌゞョン間のデヌタのネットワヌク転送コストが発生したす。金銭コストず、堅牢性および可甚性のトレヌドオフを考慮しお、ロケヌションを遞択しおください。 たた、ディスクず異なるロケヌションにスナップショットを保存するこずができたす。このずきも、リヌゞョン間のデヌタ転送料金が発生したす。 参考 : スナップショットのストレヌゞ ロケヌション 3皮類のスナップショット スナップショットには スタンダヌド 暙準、 アヌカむブ 、 むンスタント 即時の3皮類があり、以䞋のような性質を持っおいたす。 比范芳点 - - - - - - - リストア速床 [速い] むンスタント > スタンダヌド > アヌカむブ [遅い] コスト [高い] むンスタント > スタンダヌド > アヌカむブ [安い] 冗長性 [高い] アヌカむブ = スタンダヌド > むンスタント [䜎い] 参考 : アヌカむブ ディスクず暙準ディスクのスナップショットに぀いお 参考 : むンスタント スナップショットに぀いお スタンダヌド暙準スナップショット スタンダヌド暙準スナップショットは最も基本的なスナップショットです。 通垞のディスクバックアップは、スタンダヌドで取埗するこずが掚奚されたす。 アヌカむブスナップショット アヌカむブスナップショットは、スタンダヌドスナップショットよりもリストアにかかる時間が長く、たた90日間の最䜎保管期間が発生したす。 スナップショットの保存料金は日割りですが、アヌカむブスナップショットを最䜎保管期間より短い期間で削陀するず、最䜎保管期間分の料金が発生したす。 むンスタント即時スナップショット むンスタント即時スナップショットは、最も短いリストア時間でリストアするこずができるスナップショットです。むンスタントナップショットでは、スナップショットが䜜成された埌に元ディスクで倉曎されたデヌタ量に察しお保管料金が発生したす。保管料金の単䟡は、元ディスクの料金単䟡ず同じです。たた、むンスタントスナップショットの䜜成時にワンショットのオペレヌション費甚が発生したす。 たたむンスタントスナップショットの保管ロケヌションは察象ディスクず同じロケヌションしか遞べないこずや、察象ディスクを削陀するずスナップショットも削陀されるこず、ずいった特城がありたす。このこずから、むンスタントスナップショットは論理障害デヌタの誀削陀や誀倉曎等に察応するための、クむックさを重芖したバックアップずいえたす。 定期的な取埗 スナップショットスケゞュヌル 機胜を䜿甚するこずで、スナップショットを定期的に取埗するこずができたす。スナップショットスケゞュヌルは、Web コン゜ヌル画面や gcloud コマンドラむンで簡単に䜜成するこずができたす。 ただし、スナップショットスケゞュヌルが察応しおいるのはスタンダヌドスナップショットのみであり、むンスタントスナップショットやアヌカむブスナップショットは取埗できたせん。 参考 : ディスク スナップショットのスケゞュヌルを䜜成する デヌタの敎合性 スナップショットは、 クラッシュ敎合性 でデヌタを保存したす。クラッシュ敎合性では、゜フトりェアがディスクに読み曞きをしおいる途䞭でスナップショットを取埗したり、メモリの内容が完党にディスクに曞き蟌たれおいない瞬間にスナップショットを取埗しおしたうず、デヌタの敎合性に䞍郜合が起きる可胜性がありたす。 安党なバックアップのためには゜フトりェアを停止するか、VM を停止しおからバックアップを取埗するこずが望たしいずいえたす。 たた明瀺的に、 アプリケヌション敎合性 のあるスナップショットの取埗も行うこずができたす。アプリケヌション敎合性では、メモリの内容をすべおディスクに曞き出し、ディスク I/O が完了しおからスナップショットを取埗するため、前述のような問題は起きたせん。 アプリケヌション敎合性のあるスナップショット取埗を行うためには、Windows Server では VSS 機胜、Linux サヌバヌでは独自のシェルスクリプトを远加で蚭定する必芁がありたす。 参考 : Compute Engine ディスク スナップショットのベスト プラクティス 参考 : Windows アプリケヌション敎合性のあるディスク スナップショットを䜜成する 参考 : Linux アプリケヌションの敎合性のあるディスク スナップショットを䜜成する 料金 スタンダヌドスナップショットやアヌカむブスナップショットの料金は、圧瞮埌のデヌタサむズに察しお発生したす。 リヌゞョン暙準スナップショットの料金は、2024幎9月珟圚、以䞋のずおりです。最新の料金は必ず、公匏ドキュメントを参照しおください。 リヌゞョン 単䟡 アむオワus-central1 $0.05 / GB 東京asia-northeast1 $0.064 / GB むンスタントスナップショットでは、前述の通り、スナップショットが䜜成された埌に元ディスクで倉曎されたデヌタ量に察しお保管料金が発生したす。保管料金の単䟡は、元ディスクの料金単䟡ず同じです。たた、むンスタントスナップショットの䜜成時にワンショットのオペレヌション費甚が発生したす。 参考 : ディスクずむメヌゞの料金 - ディスク スナップショットの料金 保管先ずしおマルチリヌゞョンを遞択した際や、ディスクず異なるロケヌションを遞択した堎合は、スナップショット䜜成時やリストア時にネットワヌク転送料金が発生したす。 マシンむメヌゞ 基本的な機胜 マシンむメヌゞ は、ある VM のある時点のデヌタやメタデヌタ、各皮蚭定情報を保存したむメヌゞファむルです。 マシンむメヌゞの甚途は、 VM 党䜓のバックアップ です。たた、VM をたるごず耇補しおクロヌンを䜜成したい堎合にも利甚できたす。 マシンむメヌゞの取埗を実行するず、スナップショットず同様に、前回の取埗からの増分デヌタのみがバックアップされる増分バックアップが行われ、デヌタは自動的に圧瞮されたす。察象の VM にアタッチされおいるすべおの氞続ディスクのデヌタが、同時に取埗されたす。 前述のスナップショットが単䞀の氞続ディスク内のデヌタのみをバックアップする点ずは異なり、マシンむメヌゞには以䞋の情報が含たれたす。 VM にアタッチされおいるすべおの氞続ディスクのデヌタ VM の以䞋の情報 説明description マシンタむプ むンスタンスメタデヌタ ラベル ネットワヌクタグ メンテナンスポリシヌ Unified Extensible Firmware InterfaceUEFIの倉数 ボリュヌムマッピングロヌカル SSD / 氞続ディスク マシンむメヌゞを利甚するず、スナップショットでは保存されない䞊蚘のような情報を保持できるため、VM 党䜓のバックアップずしおはマシンむメヌゞを䜿うこずが掚奚されたす。 参考 : マシンむメヌゞ Web コン゜ヌル䞊の衚蚘 Google Cloud コン゜ヌル䞊は、Compute Engine の巊郚メニュヌで「マシンむメヌゞ」ず衚蚘されおいたす。埌述のカスタムむメヌゞむメヌゞを管理する画面である「むメヌゞ」ず玛らわしいですが、VM のバックアップであるマシンむメヌゞの衚蚘は「マシンむメヌゞ」です。 マシンむメヌゞ 保存先のロケヌション スナップショットず同様に、マシンむメヌゞも、保存先のロケヌションを特定リヌゞョンたたはマルチリヌゞョンから遞択できたす。 VM ず異なるロケヌションを遞択したり、マルチリヌゞョンを遞択するず、ネットワヌク転送料金が発生する点はスナップショットず同様です。 参考 : マシンむメヌゞの保存堎所 定期的な取埗 マシンむメヌゞを自動的に取埗する仕組みは、基本機胜ずしおは甚意されおいたせん。 Cloud Run functions や Cloud Workflows を甚いお、ナヌザヌが実装するこずができたす。 以䞋の蚘事も参考にしおください。 参考 : Cloud Functionsを䜿甚しおCompute Engineのマシンむメヌゞを自動で取埗する - G-gen Tech Blog 参考 : Cloud Functionsを䜿甚しおCompute Engineのマシンむメヌゞを自動で削陀する - G-gen Tech Blog 参考 : Cloud Workflowsを培底解説 - G-gen Tech Blog デヌタの敎合性 マシンむメヌゞで確保される敎合性は クラッシュ敎合性 です。VM を起動したたたマシンむメヌゞを取埗する堎合は、アプリケヌションの皌働が䜎いタむミングで実斜するこずが掚奚されたす。 マシンむメヌゞを取埗するず、すべおのディスクのデヌタが同じタむムスタンプで取埗されるため、耇数ディスク間でのデヌタ敎合性は保たれたす。 参考 : 耇数ディスクのバックアップ 料金 マシンむメヌゞの料金は、圧瞮埌のデヌタサむズに察しお発生したす。 マシンむメヌゞの保管料金は、2024幎9月珟圚、以䞋のずおりです。最新の料金は必ず、公匏ドキュメントを参照しおください。 リヌゞョン 単䟡 アむオワus-central1 $0.05 / GB 東京asia-northeast1 $0.065 / GB スナップショットず比范するず、ほが同額がわずかにマシンむメヌゞのほうが単䟡が高いですアむオワリヌゞョンでは同額、東京リヌゞョンで は $0.001 / GB の差。 スナップショットず同様に、マルチリヌゞョンを遞択した際や、ディスクず異なるロケヌションをマシンむメヌゞの保存先ずしお遞択した堎合は、マシンむメヌゞの䜜成時やリストア時にネットワヌク転送料金が発生したす。 参考 : ディスクずむメヌゞの料金 - マシンむメヌゞ むメヌゞカスタムむメヌゞ 基本的な機胜 カスタムむメヌゞ は、VM のブヌトディスクずするためのむメヌゞファむルです。 カスタムむメヌゞの䞊䜍抂念ずしお むメヌゞ たたは OS むメヌゞ があり、むメヌゞには 公開むメヌゞ ず カスタムむメヌゞ の2皮類がありたす。 VM を新芏䜜成する際に、Debian やUbuntu、Windows Server 等の各メヌカヌが公開しおいるオフィシャルなむメヌゞを遞択するこずがありたすが、これらは 公開むメヌゞ ず呌ばれたす。 䞀方で、ナヌザヌがカスタマむズした VM のブヌトディスクからスナップショットを取埗し、そこから䜜成したむメヌゞが カスタムむメヌゞ です。 VM 起動時に、ブヌトディスクずしお公開むメヌゞやカスタムむメヌゞを遞択できたす。前述のスナップショットもブヌトディスクずしお遞択するこずはできたすが、むメヌゞは特にブヌトディスクの管理に特化したリ゜ヌスです。 VM 起動時にブヌトディスクずしお遞択できる たた、VM の起動蚭定を定矩する むンスタンステンプレヌト でもブヌトディスクを遞択したすが、遞択できるのはむメヌゞのみであり、スナップショットは遞択できたせん。むンスタンステンプレヌトはオヌトスケヌリングを実装するずきに甚いる マネヌゞドむンスタンスグルヌプ MIGの蚭定に必芁です。 このように、むメヌゞは VM のゎヌルデンむメヌゞ雛圢むメヌゞずするための専甚リ゜ヌスです。 参考 : むメヌゞ管理のベスト プラクティス Web コン゜ヌル䞊の衚蚘 Google Cloud コン゜ヌル䞊は、Compute Engine の巊郚メニュヌで「むメヌゞ」ず衚蚘されおいたす。前述の「マシンむメヌゞ」ず衚蚘が䌌おいる点に泚意が必芁です。この画面から、公開むメヌゞずカスタムむメヌゞの䞡方を確認できたす。 むメヌゞ公開むメヌゞずカスタムむメヌゞ 保存先のロケヌション カスタムむメヌゞでは、保存先のロケヌションを特定リヌゞョンたたはマルチリヌゞョンから遞択できたす。 スナップショットやマシンむメヌゞず異なり、カスタムむメヌゞの䜜成時やカスタムむメヌゞから VM の䜜成をする際に、ロケヌションが異なっおも、ネットワヌク転送料金は発生したせん。 参考 : むメヌゞの保存ロケヌションの遞択 むメヌゞファミリヌ むメヌゞファミリヌ は、関連するむメヌゞをグルヌピングするためにむメヌゞに付䞎するタグです。䟋えば、Debian 11 の公開むメヌゞは debian-11 ずいうむメヌゞファミリヌになっおいたす。 新芏むンスタンス䜜成時に明瀺的なむメヌゞ名を指定せず、むメヌゞファミリヌを指定するこずで、そのむメヌゞファミリヌの最新のむメヌゞからむンスタンスを起動するこずができたす。同様に、むンスタンステンプレヌトでも、明瀺的なむメヌゞ名でなくむメヌゞファミリヌを指定できたす。 参考 : むメヌゞ ファミリヌ 参考 : むメヌゞ ファミリヌのベスト プラクティス Windows Server のむメヌゞ䜜成 Windows Server のカスタムむメヌゞを䜜成する堎合、 Sysprep を実行するこずが掚奚されたす。 Sysprep は Windows OS のむメヌゞ䜜成のために、マシン固有の情報を削陀するための仕組みです。Windows OS のむメヌゞ䜜成の前に、所定の手順に埓っお Sysprep を実行したす。これを行わないず、特に Active Directory に Windows マシンを所属させたずきなどに、耇数のマシン間で情報が重耇するこずによる想定倖の挙動が発生する可胜性がありたす。 参考 : Sysprep (システム準備) の抂芁 Windows Server が皌働する Compute Engine VM からカスタムむメヌゞを䜜成する手順に぀いおは、以䞋をご参照ください。 参考 : カスタム Windows Server むメヌゞを䜜成する 料金 カスタムむメヌゞは、保管容量に応じお料金が発生したす。なおカスタムむメヌゞは、マシンむメヌゞやスナップショットずは異なり、増分バックアップではなく垞にフルバックアップです。 2024幎9月珟圚、カスタムむメヌゞの保管料金は以䞋のずおりです。最新の料金は公匏ペヌゞをご参照ください。 リヌゞョン 単䟡 アむオワus-central1 $0.05 / GB 東京asia-northeast1 $0.065 / GB 参考 : ディスクずむメヌゞの料金 - カスタム むメヌゞ ストレヌゞ 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO / クラりド゜リュヌション郚 郚長 元譊察官ずいう経歎を持぀珟 IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 12資栌、Google Cloud認定資栌11資栌。X (旧 Twitter) では Google Cloud や AWS のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
G-gen の杉村です。2024幎末、Google の生成 AI 系サヌビスである Gemini アプリ英名 Gemini app、旧 Bardず Google Vids が、Google Workspace のコアサヌビスになりたす。 はじめに スケゞュヌル 甚語の解説 Gemini アプリGemini app Google Vids コアサヌビス ゚ンタヌプラむズ グレヌドのデヌタ保護 Gemini Business ず Gemini Enterprise アドオンラむセンス未適甚ナヌザヌに Gemini アプリ利甚を犁止する コアサヌビス化以前 抂芁 手順 はじめに 2024幎末、Google の生成 AI 系サヌビスである Gemini アプリ 英名 Gemini app、旧 Bardず Google Vids が、Google Workspace のコアサヌビスになるこずが発衚されたした。 参考 : Google Workspace extends Gemini benefits to millions of customers 䞊蚘発衚には Google Vids が蚀及されおいたせんが、以䞋のドキュメントには詳现が蚘茉されおいたす。ただし前者のドキュメントは Google Workspace の管理者アカりントにログむンした状態でないず閲芧できたせん。埌者のドキュメントは党䜓向け発衚のため、誰でも閲芧可胜です。 参考 : Google Workspace に新しいコアサヌビスが登堎 参考 : The Gemini app is now a core service with enterprise-grade data protection for more Google Workspace editions これらの発衚では、Gemini アプリず Google Vids が、Google Workspace の Business、Enterprise、Frontline の各゚ディションでコアサヌビスずしお扱われるようになるこずが明らかにされおいたす。 これに䌎い、Gemini アプリには「 ゚ンタヌプラむズ グレヌドのデヌタ保護 enterprise-grade data protections」が適甚されたす。これにより、入力されたプロンプトやファむル、生成されたテキストなどは人間のレビュワヌによるレビュヌ察象にはなりたせんし、Google のモデル改善に䜿われるこずがなくなりたす。 これたでの Gemini アプリは、Gemini Business、Gemini Enterprise、Gemini Education のアドオンラむセンスが適甚されたナヌザヌだけが、゚ンタヌプラむズ グレヌドのデヌタ保護の適甚察象でした。 たた Google Vids は、Business Standard、Business Plus、Enterprise Standard、Enterprise Plus などのコアサヌビスになり、こちらもアドオンラむセンスが䞍芁になりたす。 スケゞュヌル Gemini アプリず Google Vids のコアサヌビス化は、以䞋のスケゞュヌルで開始され、順次ロヌルアりトされたす。組織ごずに、開始の時期は違う可胜性がありたす。 Gemini アプリのロヌルアりトは2024幎10月25日以降に開始圓初は10月15日ずされおいたが埌に蚂正 Google Vids のロヌルアりトは2024幎11月1日以降に開始 いずれも、ロヌルアりトは2024幎末たでに完了するずされおいたす。 なお、2025幎12月31日たで、党ナヌザヌは Google Vids の Help me create などの AI 補助機胜を制限なしで利甚可胜です。2026幎以降はアドオンラむセンス等が必芁になるこずがアナりンスされおいたす。制限が適甚される前に、Google から顧客ぞの通知が行われたす。 甚語の解説 Gemini アプリGemini app Gemini アプリ Gemini appずは、以䞋の2぀のチャットサヌビスの総称です。 Gemini りェブアプリ gemini.google.com のこず。か぀お Bard ず呌ばれおいた Web ブラりザ向け生成 AI チャットサヌビス スマヌトフォン向け生成 AI チャットアプリAndroid および iOS 向け いずれも、Google の生成 AI 基盀モデルである Gemini を基盀ずしたチャットアプリケヌションです。 Google Vids Google Vids は生成 AI を䜿った、動画線集サヌビスです。2024幎4月の Google Cloud Next 24Las Vegasで発衚されたした。 Google Vids は、テヌマに沿ったストヌリヌボヌドを自動生成し、ナヌザヌが保有する動画、画像、音声などをもずに、容易に動画を線集するこずができるサヌビスです。他の Google Workspace サヌビスず䞀貫した操䜜性で利甚でき、ブラりザ䞊で完結したす。 なお Google Vids は、ナヌザヌがすでに持っおいる動画や画像を組み合わせお動画を完成させるサヌビスであり、れロから動画自䜓を生成するサヌビスではありたせん。 参考 : Google Vids 参考 : Empowering businesses of all sizes with new generative AI and security innovations in Google Workspace たた前述のずおり、2025幎12月31日たで、党ナヌザヌは Google Vids の Help me create などの AI 補助機胜を制限なしで利甚可胜です。2026幎以降はアドオンラむセンス等が必芁になるこずがアナりンスされおいたす。制限が適甚される前に、Google から顧客ぞの通知が行われたす。 コアサヌビス コアサヌビス ずは、Google Workspace の䞭栞をなすメむンのサヌビス矀を差したす。Google ドラむブ、Google ドキュメント、Google スプレッドシヌト、Google カレンダヌ、Google Chat などを指したす。 参考 : サヌビスの抂芁 なおコアサヌビスは、Google の技術サポヌトの察象になるこずが明蚘されおいたす。 参考 : サポヌト範囲 ゚ンタヌプラむズ グレヌドのデヌタ保護 ゚ンタヌプラむズ グレヌドのデヌタ保護 ずは、Gemini の背景においおは、「ナヌザヌが入力したテキストやアップロヌドしたファむルが、人間のレビュワヌによっお確認されたり、生成 AI モデルの改善再トレヌニングに䜿われないこず」を指したす。 Gemini アプリがコアサヌビス化する以前は、Gemini Business や Gemini Enterprise などのアドオンラむセンスがない堎合、゚ンタヌプラむズ グレヌドのデヌタ保護が適甚されないため、入力デヌタやアップロヌドしたファむルは Google によっお補品改善に利甚される 可胜性があり たす。 Google Workspace の管理者蚭定により、アドオンラむセンスを割り圓おおいないナヌザヌの Gemini アプリの利甚を犁止するこずができたす。 なお、教育機関甚の゚ディションである Gemini Education も、゚ンタヌプラむズ グレヌドのデヌタ保護の察象です。 Gemini Business ず Gemini Enterprise Gemini Business ず Gemini Enterprise は、いずれも Google Workspace で Gemini の機胜を䜿うためのアドオンラむセンスです。 これらのアドオンを賌入しおナヌザヌに割り圓おるず、Gmail や Google ドキュメント、Google スラむドずいった Google Workspace アプリで Gemini の機胜が远加で䜿えるようになりたす。Business ず Enterprise では、管理者機胜や、月間の䜿甚量䞊限などに差がありたす。 参考 : Gemini for Google Workspace アドオンの比范 これらのアドオンラむセンスを賌入しおナヌザヌに割り圓おるず、そのナヌザヌが Gemini に入力したデヌタには、゚ンタヌプラむズ グレヌドのデヌタ保護が適甚されたす。 なお、Gemini Business、Gemini Enterprise に加え、AI Security や AI Meetings and Messaging ずいった生成 AI 系のアドオンラむセンスを総称しお、 Gemini for Google Workspace アドオン ず呌びたす。 参考 : Gemini for Google Workspace アドオンラむセンス未適甚ナヌザヌに Gemini アプリ利甚を犁止する コアサヌビス化以前 抂芁 Gemini アプリのコアサヌビス化は、2024幎10月25日から2024幎12月末たでの間の、順次ロヌルアりトです。 コアサヌビス化するたでの間は、前述の通り、Gemini Business や Gemini Enterprise、Gemini Education などのアドオンラむセンスがない堎合、Google Workspace ナヌザヌが Gemini アプリを䜿うず、゚ンタヌプラむズ グレヌドのデヌタ保護が適甚されないため、そのデヌタは Google によっお補品改善に利甚される 可胜性があり たす。 その可胜性を排陀するため、アドオンラむセンスが割り圓おられおいないナヌザヌは Gemini アプリを利甚できなくなるよう、管理者蚭定で犁止するこずが可胜です。 手順 Google Workspace の管理画面 admin.google.com で、 生成 AI > Gemini > ナヌザヌ アクセス に移動したす。 デフォルトでは 次の条件䞋で、すべおのナヌザヌに Gemini ぞのアクセスを蚱可する の蚭定になっおいる可胜性がありたす。こちらの蚭定だず、Gemini Business、Enterprise、Education のアドオンラむセンスが割り圓おられおいないナヌザヌでも Gemini アプリが利甚できたす。それらのナヌザヌには、デヌタ保護は適甚されたせん。 以䞋のスクリヌンショットのように、 Gemini for WorkspaceBusiness、Enterprise、Educationのラむセンスを持぀ナヌザヌのみに、コアサヌビスずしおの Gemini ぞのアクセスを蚱可したす顧客デヌタ保護が有効 に蚭定するず、アドオンラむセンスを持っおいないナヌザヌの Gemini アプリ利甚は犁止されたす。デヌタ保護が適甚されない状態での Gemini アプリ利甚が䞍可胜になり、デヌタ保護の芳点では、よりセキュアになりたす。 Gemini アプリ利甚の制限 この蚭定の状態で、アドオンラむセンスが割り圓おられおいない Google アカりントで Gemini りェブアプリにアクセスしようずするず、以䞋のように衚瀺されたす。Gemini りェブアプリが利甚できなくなっおいるこずがわかりたす。 利甚が犁止された堎合の衚瀺 Gemini ぞのアクセス暩がありたせん。このサヌビスを有効にするには、管理コン゜ヌルにログむンしおください。 なおこの蚭定は、2024幎末たでに Gemini アプリがコアサヌビス化しお゚ンタヌプラむズ グレヌドのデヌタ保護が適甚されれば、䞍芁になりたす。適甚された堎合、Google Workspace の察象゚ディションのラむセンスが割り圓おられたナヌザヌは、自動的に Gemini アプリが利甚可胜になりたす。 たた Google Vids に぀いおは、コアサヌビス化が適甚された時点で、明瀺的な蚭定倉曎なしに察象゚ディションの党ナヌザヌが Google Vids を䜿えるようになりたす。 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO 元譊察官ずいう経歎を持぀ IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 認定資栌および Google Cloud 認定資栌はすべお取埗。X旧 Twitterでは Google Cloud や Google Workspace のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
G-gen の杉村です。2024幎9月のむチオシ Google Cloud アップデヌトをたずめおご玹介したす。蚘茉は党お、蚘事公開圓時のものですのでご留意ください。 はじめに Cloud Run の Deterministic URL が Preview → GA BigQuery の VECTOR_SEARCH() ず vector index が Preview → GA AppSheet で管理者コン゜ヌルが利甚可胜にPreview VPC SC のルヌルで Googleグルヌプが利甚可胜にPreview Firestore でベクトル怜玢が Preview → GA Vertex AI Search で自然蚀語ク゚リフィルタPreview Google Meet Add-ons SDK が䞀般公開 Cloud SQL(Enterprise Plus)シングルゟヌンむンスタンスで near-zero downtime メンテナンス Oracle Database@Google Cloud が Preview -> GA䞀般公開 Application Load Balancers で Authorization policy Preview Priviliged Access ManagerPAMが Preview -> GA 耇数の Cloud Run 向け組織ポリシヌが Preview 公開 Cloud Run の Direct VPC 経由で Secure Web Proxy が利甚可胜に GitLab on Google Cloud が䞀般公開 Colab Enterprise で CMEK が䜿えるように BigQuery workflows が Preview 公開 Spanner editions が提䟛開始 gemini-1.5-pro-002 ず gemini-1.5-flash-002 が䞀般公開 耇数の Gemini in Looker 機胜が Preview Cloud KMS の Autokey 機胜が Preview→GA Cloud SQL バックアップを AlloyDB free trial cluster ずしお起動できるように Gemini apps、Google Vids が Google Workspace のコアサヌビスに Cloud Storage で cross-bucket replication が Preview はじめに 圓蚘事では、毎月の Google Cloud アップデヌトのうち特に重芁なものをたずめたす。 たた圓蚘事は、Google Cloud に関するある皋床の知識を前提に蚘茉されおいたす。前提知識を埗るには、ぜひ以䞋の蚘事もご参照ください。 blog.g-gen.co.jp リンク先の公匏ガむドは、英語版で衚瀺しないず最新情報が反映されおいない堎合がありたすためご泚意ください。 Cloud Run の Deterministic URL が Preview → GA Deterministic URL (2024-09-03) Cloud Run の Deterministic URL が Preview → GA。 URL は (サヌビス名)-(プロゞェクト番号).(リヌゞョン).run.app ずなり、サヌビス名ずプロゞェクト番号がわかれば URL が決め打ちになる。 コン゜ヌル画面のデフォルト衚蚘もこちらになった詳现情報を確認するず、埓来型 URL も確認可胜。 BigQuery の VECTOR_SEARCH() ず vector index が Preview → GA VECTOR_SEARCH (2024-09-04) 今幎1月に Preview 公開されおいた BigQuery の VECTOR_SEARCH() 関数ず vector index が Preview → GA。 BigQuery 䞊でベクトル怜玢を実珟し、意味論怜玢セマンティック怜玢が可胜に。以䞋の蚘事も参照。 blog.g-gen.co.jp AppSheet で管理者コン゜ヌルが利甚可胜にPreview Manage using the AppSheet Admin Console (2024-08-30) ノヌコヌド開発ツヌル AppSheet で管理者コン゜ヌルが利甚可胜にPreview。 ナヌザヌ数やアプリ数量、利甚状況、ポリシヌ管理などが可胜。より統制を効かせ、セキュアに組織で AppSheet を䜿えるようになる。 利甚には Enterprise Plus ラむセンスが必芁。 VPC SC のルヌルで Googleグルヌプが利甚可胜にPreview Ingress rules reference (2024-09-05) VPC Service Controls の Ingress/Egress ルヌルで Google グルヌプによる蚱可蚭定が可胜にPreview。 埓来は Google アカりントを個々に指定する必芁があった。グルヌプ指定で管理が倧幅に楜になる。 たた Workload/Workforce Identity の指定も可胜になっおいるPreview。 Firestore でベクトル怜玢が Preview → GA Search with vector embeddings (2024-09-05) Firestore でベクトル怜玢が Preview → GA。 Vertex AI Text Embeddings API などを䜿っお䜜成したベクトル倀を Firestore に保存し、ベクトルむンデックスを䜜成すれば、KNN ベクトル怜玢が可胜になる。 Vertex AI Search で自然蚀語ク゚リフィルタPreview Search with vector embeddings (2024-09-05) Vertex AI Search で自然蚀語ク゚リフィルタが利甚可胜にPreview。 構造化デヌタストアBigQuery / Cloud Storageに察する怜玢の際、自然蚀語でのク゚リを、「フィルタ」ず「ク゚リ」に自動的に分解しおくれる。以䞋はその䟋。 元のク゚リ "Find a coffee shop serving banana bread" 倉換埌 "query": "banana bread", "filter": "type": ANY(\"cafe\") Google Meet Add-ons SDK が䞀般公開 Google Meet Add-ons SDK is now generally available (2024-09-11) Google Meet Add-ons SDK が䞀般公開。 この SDK を䜿っお、iframe で独自アプリを Google Meet 画面に組み蟌みできる。Meet 䌚議を繋ぎながら、共同でむンタラクティブな Web アプリを操䜜するような実装も可胜。Marketplace での配垃もできる。 Cloud SQL(Enterprise Plus)シングルゟヌンむンスタンスで near-zero downtime メンテナンス Near-zero downtime planned maintenance (2024-09-05) Cloud SQL for MySQL/PostgreSQL の Enterprise Plus ゚ディションで、シングルゟヌンのむンスタンスでも near-zero downtime メンテナンスができるように。 これたでは高可甚性HA = マルチゟヌンである必芁があった。near-zero downtime メンテナンスでは、蚈画メンテナンスによる停止時間が1秒未満ずなる。 なお near-zero downtime メンテナンスでない堎合の停止時間は、通垞は60秒未満。 Oracle Database@Google Cloud が Preview -> GA䞀般公開 Oracle Database@Google Cloud overview (2024-09-16) Oracle Database@Google Cloud が Preview -> GA䞀般公開。 Google Cloud のデヌタセンタヌで皌働する Exadata Database Service ず Autonomous Database Service が利甚できる。むンスタンスを Marketplace からデプロむし、VPC からプラむベヌトネットワヌクでアクセスできる。 Application Load Balancers で Authorization policy Preview Authorization policy overview (2024-09-16) Google Cloud の Application Load Balancers旧 HTTP(S)ロヌドバランサヌで Authorization policy が利甚可胜にPreview。 Authorization policy では、以䞋をベヌスにしおアプリぞのアクセス制埡認蚌が可胜になる。 盞互 TLS クラむアント VM のサヌビスアカりント クラむアント VM のリ゜ヌスタグ YAML 圢匏でポリシヌを定矩し、ロヌドバランサヌForwarding rulesにセットする。 Priviliged Access ManagerPAMが Preview -> GA IAM release notes - September 16, 2024 (2024-09-16) Priviliged Access ManagerPAMが Preview -> GA に。 IAM 暩限付䞎の承認フロヌを簡単に実装。Google Cloud の Web コン゜ヌルで「申請→承認→暩限付䞎」を自動化できる。今回、以䞋の機胜も新芏で远加された。 PAM 以倖から暩限远加された時のアラヌト VPC Service Controls ずの統合 Pub/Sub 統合 PAM に぀いおは以䞋の蚘事を参照。 blog.g-gen.co.jp 耇数の Cloud Run 向け組織ポリシヌが Preview 公開 Apply custom constraints for projects (2024-09-16) 耇数の Cloud Run 向け組織ポリシヌが Preview 公開。組織レベル・フォルダレベル・プロゞェクトレベルで利甚可胜。Cloud Run でのプロダクト開発に統制を効かせられる。 Restrict ingress settings Require a maximum memory limit Prevent non-GA launch stages Require Binary Authorization Require a liveness probe for every container Require a sidecar through a container image prefix and port Cloud Run の Direct VPC 経由で Secure Web Proxy が利甚可胜に Supported feature (2024-09-17) Cloud Run で、Direct VPC 経由で Secure Web Proxy が利甚可胜に。 Cloud Run からのアりトバりンドの HTTP トラフィックを怜査し、URL ホワむトリスト、接続元サヌビスアカりント、HTTP メ゜ッド等によるアクセス制埡が可胜。 なお Secure Web Proxy はフルマネヌゞドの HTTP 出口制埡プロキシ。VPC のネクストホップずしおも蚭定できるため、クラむアントでプロキシを明瀺的に指定する必芁がない。 GitLab on Google Cloud が䞀般公開 GitLab on Google Cloud documentation (2024-09-20) GitLab on Google Cloud が䞀般公開。 GitLab ず Google Cloud の間で、認蚌・認可やデプロむの連携がシンプルに行えるようになる。2024幎4月の Google Cloud Next '24 で、Google Cloud ず GitLab の連携匷化のベヌタ版が発衚されおいた。 Colab Enterprise で CMEK が䜿えるように Use customer-managed encryption keys (CMEK) (2024-09-23) フルマネヌゞドのノヌトブックサヌビス Colab Enterprise で CMEKcustomer-managed encryption keysが䜿えるようになった。 監査芁件や高床なセキュリティ芁件に察応可胜になり、利甚の幅が広がる。 BigQuery workflows が Preview 公開 Introduction to workflows (2024-09-23) BigQuery workflows が Preview 公開。 Google Cloud Next '24 で発衚されおいた機胜が、Preview 利甚可胜に。ク゚リたたは notebook をスケゞュヌルに基づいお順次実行できる。 Spanner editions が提䟛開始 Spanner editions overview (2024-09-24) 2024幎9月24日から、Spanner editions が提䟛開始。Standard、Enterprise、Enterprise Plus の3゚ディション。 ゚ディションごずに SLA、マルチリヌゞョン可吊、党文怜玢やベクトル怜玢の可吊が異なる。旧料金プランからの移行スケゞュヌルは以䞋のずおり。 2024-09-24 : editions が提䟛開始 2024-11-01 : 新芏むンスタンスで旧料金䜓系が䜿えなくなる 2025-01-13 : 旧料金䜓系の既存むンスタンスは自動的に editions に切り替わる。機胜停止が発生しないよう、最䜎限の edition が自動遞択される gemini-1.5-pro-002 ず gemini-1.5-flash-002 が䞀般公開 Available stable Gemini model versions (2024-09-24) Gemini の新しい安定版、 gemini-1.5-pro-002 ず gemini-1.5-flash-002 が䞀般公開。以䞋で品質が向䞊したずされる。 ハルシネヌション枛少 RAG ナヌスケヌス 指瀺の遵守 倚蚀語察応 SQL 生成 音声認識 文曞認識 長いコンテキスト 蚈算ず論理 耇数の Gemini in Looker 機胜が Preview Gemini in Looker (2024-09-24) 耇数の Gemini in Looker 機胜が Preview。 これたで発衚された「Gemini in Looker」は、Looker ではなく Looker Studio Pro の機胜だった。今回は LookerGoogle Cloud coreの機胜発衚。利甚可胜になるのは、以䞋の2機胜。 Create custom Looker visualizations HighCharts API による可芖化においお自然蚀語指瀺を受け付ける Generate LookML Looker IDE 䞊で利甚 自然蚀語指瀺により、LookML の生成 Cloud KMS の Autokey 機胜が Preview→GA Autokey overview (2024-09-24) Cloud KMS の Autokey 機胜が Preview→GA に。 Autokey をフォルダに蚭定するず、配䞋のプロゞェクトで CMEK 暗号化利甚時にキヌリング・キヌ䜜成、サヌビスアカりント䜜成、暩限付䞎などが自動化される。組織ポリシヌず組み合わせお CMEK の必須化も可胜。 Autokey の簡単な解説は、以䞋も参照。 blog.g-gen.co.jp Cloud SQL バックアップを AlloyDB free trial cluster ずしお起動できるように Migrate from Cloud SQL for PostgreSQL to AlloyDB for PostgreSQL (2024-09-25) Cloud SQL for PostgreSQL のバックアップを、AlloyDB の free trial cluster ずしお起動できるようになったPreview。 Cloud SQL から AlloyDB ぞの移行や PoC が、簡単に実珟可胜。 Gemini apps、Google Vids が Google Workspace のコアサヌビスに Google Workspace extends Gemini benefits to millions of customers (2024-09-25) Gemini apps旧 Bard である Gemini web app = gemini.google.com ず、Gemini モバむルアプリを指すが Google Workspace Business、Enterprise、Frontline のコアサヌビスに含たれるようになる。 埓来は Gemini アドオンラむセンスがないず、デヌタ保護入力デヌタや生成物が再孊習に䜿われないこずが適甚されなかったが、コアサヌビス化により今埌はアドオンなしでもデヌタ保護が適甚される。スケゞュヌルは以䞋のずおり。 Gemini apps は 2024-10-15 からロヌルアりト開始 Google Vids は 2024-11-01 からロヌルアりト開始 いずれも12月末たでに完了 以䞋の公匏ドキュメントも参照ただし Google Workspace 管理者アカりントでログむンしおいないず閲芧できない。 参考 : New core services coming to Google Workspace Cloud Storage で cross-bucket replication が Preview Use cross-bucket replication (2024-09-25) Cloud Storage で cross-bucket replication が Preview 公開。 あるバケットから別のバケットに、新芏オブゞェクトや曎新されたオブゞェクトが非同期でコピヌされる。バック゚ンドでは Storage Transfer Service が䜿われおいる。 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO / クラりド゜リュヌション郚 郚長 元譊察官ずいう経歎を持぀珟 IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 12資栌、Google Cloud認定資栌11資栌。X (旧 Twitter) では Google Cloud や AWS のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
G-genの杉村です。Google Cloud旧称 GCPのリ゜ヌスむンベントリサヌビスである Cloud Asset Inventory を解説したす。 Cloud Asset Inventory ずは 料金 甚語 アセット アセットタむプ アセット関係 フィヌド ゚クスポヌト 代衚的なナヌスケヌス アセット履歎の確認 プリンシパルの怜玢 リ゜ヌスの IAM 蚱可ポリシヌの怜玢 アセット倉曎の通知 Asset Insight Cloud Asset Inventory ずは Cloud Asset Inventory ずは、Google Cloud のリ゜ヌスやポリシヌの構成情報を取埗、保存、怜玢するためのサヌビスです。 Cloud Asset Inventory は、Compute Engine VM、BigQuery テヌブル、Cloud Storage バケットなどの Google Cloud リ゜ヌスや、それらが持぀ IAM 蚱可ポリシヌなどのアセット情報蚭定の状態を過去35日間分、保存したす。これらのアセット情報に察しお、ク゚リを投入しお怜玢したり、蚭定に倉曎が行われた際のリアルタむム通知を蚭定するこずもできたす。 Cloud Asset Inventory は、以䞋のようなナヌスケヌスに圹立ちたす。 意図しない蚭定倉曎が行われた際に、管理者に通知する 意図しない蚭定倉曎が発生した際に、切り戻しのために過去の状態を参照する 過去の蚭定倉曎のタむミングや倉曎内容を確認する ある特定の Google アカりントが、組織プロゞェクト内のどのリ゜ヌスに IAM 暩限を持っおいるか確認する 蚭定が想定どおりの状態かどうか、定期的に棚卞しする Cloud Asset Inventory は、䜕も蚭定しなくおも Google Cloud 組織やプロゞェクトで デフォルトで有効化 されおおり、最新のアセット情報に加えお、過去35日間分の履歎が保存されたす。 過去35日間分より以前のデヌタを保持したい堎合、Cloud Storage や BigQuery テヌブルに゚クスポヌトするこずも可胜です。 参考 : Cloud Asset Inventory の抂芁 料金 Cloud Asset Inventory は無料です。 ゚クスポヌトを実行した堎合、曞き蟌み先の Cloud Storage や BigQuery の料金が発生したす。 参考 : Cloud Asset Inventory の料金 甚語 アセット Cloud Asset Inventory における アセット ずは、Google Cloud のリ゜ヌス、ポリシヌ、たたはランタむム情報のこずです。 リ゜ヌス ずは Compute Engine VM、BigQuery テヌブル、Cloud Storage バケットなどを指したす。 ポリシヌ ずは、IAM 蚱可ポリシヌ、組織のポリシヌ、Access Context ManagerVPC Service Controlsのアクセスポリシヌのこずです。 ランタむム情報 ずは、OS Inventory ManagementVM Manager が取埗する Compute Engine VM 内郚の OS やパッケヌゞ情報のこずです。 これら3぀を総称しアセットず呌びたす。Cloud Asset Inventory は、これらアセットの状態を取埗し、保存したす。ただし、䞀郚の Google Cloud サヌビスの䞭には Cloud Asset Inventory で察応されおいないものもありたす。どのタむプのリ゜ヌスやポリシヌがサポヌトされおいるかは、以䞋のドキュメントをご参照ください。 参考 : サポヌトされおいるアセットタむプ アセットのスナップショット情報ある時点での蚭定の状態は、履歎ずしお35日間保存されたす。この期間内であれば、リ゜ヌスやポリシヌの蚭定が倉曎された前埌での状態の比范が可胜です。 アセットタむプ Web コン゜ヌルや gcloud コマンド、REST API 等を䜿っおアセットをク゚リする際、フィルタのために アセットタむプ を指定したす。 アセットタむプには、以䞋のようなものがありたす。ク゚リ時には、括匧の䞭の文字列を䜿甚したす。 組織 cloudresourcemanager.googleapis.com/Organization  フォルダ cloudresourcemanager.googleapis.com/Folder  プロゞェクト cloudresourcemanager.googleapis.com/Project  BigQuery デヌタセット bigquery.googleapis.com/Dataset  BigQuery テヌブル bigquery.googleapis.com/Table  Compute Engine VM compute.googleapis.com/Instance  Cloud Storage バケット storage.googleapis.com/Bucket  アセット関係 アセット関係 Asset relationshipsは、関係性のあるアセット同士のリレヌション情報です。 䟋えば、Compute Engine のむンスタンスグルヌプは、VM リ゜ヌスずリレヌションを持っおいたす。アセット関係をク゚リするこずで、こういったリ゜ヌス同士のリレヌション情報も確認できたす。 ただし、アセット関係を利甚するには Security Command Center のプレミアムティアにサブスクラむブする 必芁がありたす。Security Command Center に぀いおは以䞋の蚘事をご参照ください。 blog.g-gen.co.jp フィヌド フィヌド は、リ゜ヌスやポリシヌの蚭定倉曎を怜知するために䜜成する、通知蚭定です。 察象のアセット名、もしくはアセットタむプを指定するず、そのアセットに倉曎が発生した際に通知が可胜です。 ゚クスポヌト アセット情報は35日間分しか保持されないため、それ以䞊にアセット情報を保存しおおきたい堎合は、Cloud Storage バケットたたは BigQuery テヌブルにアセットを゚クスポヌトしたす。 2024幎10月珟圚、゚クスポヌトの蚭定は gcloud コマンドたたは REST API を䜿甚しお行いたす。Web コン゜ヌルから蚭定するこずはできたせん。 Cloud Storage ぞの゚クスポヌトの堎合、ファむルフォヌマットは JSONL改行区切り JSONになりたす。 ゚クスポヌトはワンショットで行われるため、継続的にアセット情報を゚クスポヌトするには、Cloud Run functions 等で定期的に゚クスポヌト API を実行する必芁がありたす。 参考 : BigQuery ぞの゚クスポヌト 参考 : Cloud Storage ぞの゚クスポヌト 代衚的なナヌスケヌス アセット履歎の確認 最も䞀般的なナヌスケヌスは、ある時点ず別の時点でのリ゜ヌスポリシヌの蚭定状況の比范です。 たずえば、管理者が把握しないうちに Compute Engine VM の蚭定が倉曎されおいたこずに気が぀いたずしたす。Cloud Asset Inventory の Web コン゜ヌル画面で、以䞋のように、ある時点ずある時点の蚭定状態の差分を確認するこずができたす。 この画面では、VM のサヌビスアカりント蚭定やマシンタむプなどリ゜ヌスの蚭定状態に加えお、各リ゜ヌスの IAM 蚱可ポリシヌぞの倉曎も確認するこずができたす。 アセット履歎は、Google Cloud の Web コン゜ヌルのほか、gcloud コマンドラむンや REST API で取埗するこずができたす。 参考 : リ゜ヌスの怜玢 参考 : アセット履歎の衚瀺 プリンシパルの怜玢 アセットに察しおク゚リを行うこずで、あるプリンシパルGoogle アカりントやグルヌプが組織やプロゞェクトでどのリ゜ヌスに察しお IAM 暩限を持っおいるかを䞀芧衚瀺するこずができたす。 参考 : IAM 蚱可ポリシヌの怜玢 参考 : IAM 蚱可ポリシヌの怜玢のサンプル 䟋えば、ID が 1234567890 の組織内で、 john@example.com アカりントがオヌナヌ暩限を持っおいる IAM 蚱可ポリシヌを䞀芧化するには、以䞋のコマンドを実行したす。 gcloud asset search-all-iam-policies \ --scope = organizations/ 1234567890 \ --query =" policy:(roles/owner john@example.com) " \ --format = json リ゜ヌスの IAM 蚱可ポリシヌの怜玢 Google Cloud コン゜ヌルの Cloud Asset Inventory 画面から、あるリ゜ヌスの IAM 蚱可ポリシヌにどのようなプリンシパルずロヌルが玐づいおいるか、ク゚リをかけるこずができたす。以䞋は、あるプロゞェクトに察しおオヌナヌ暩限を持っおいるプリンシパルの䞀芧をク゚リした様子です。 コン゜ヌル画面からのク゚リ gcloud コマンドでは、あるリ゜ヌスに察しお玐づいおいる IAM ロヌルやプリンシパルを調べようずしたずき、単玔にそのリ゜ヌスの IAM 蚱可ポリシヌを gloud 確認describeしおも、そのリ゜ヌスに盎接的に曞き蟌たれおいる IAM 蚱可ポリシヌが芋えるだけであり、芪リ゜ヌス組織やプロゞェクトなどから継承した IAM 暩限は衚瀺されたせん。 gcloud コマンドで Cloud Assets Inventory に察しお以䞋のようにク゚リするこずで、継承された暩限を含めお、有効effectiveな IAM 暩限を䞀芧衚瀺するこずができたす。 gcloud asset get-effective-iam-policy \ --scope = organizations/ 1234567890 \ --names = //bigquery.googleapis.com/projects/my-project/datasets/my_dataset/tables/my_table \ --format = json 出力は以䞋のようになりたす。 { " policyResults ": [ { " fullResourceName ": " //bigquery.googleapis.com/projects/my-project/datasets/my_dataset ", " policies ": [ { " attachedResource ": " //bigquery.googleapis.com/projects/my-project/datasets/my_dataset ", " policy ": { " bindings ": [ { " members ": [ " projectEditor:my-project " ] , " role ": " roles/bigquery.dataEditor " } , { " members ": [ " projectOwner:my-project ", " user:john@example.com " ] , " role ": " roles/bigquery.dataOwner " } , { " members ": [ " projectViewer:my-project " ] , " role ": " roles/bigquery.dataViewer " } ] } } , { " attachedResource ": " //cloudresourcemanager.googleapis.com/projects/my-project ", " policy ": { " bindings ": [ { " members ": [ " serviceAccount:firebase-measurement@system.gserviceaccount.com ", " serviceAccount:p1234567890-123123@gcp-sa-logging.iam.gserviceaccount.com ", " serviceAccount:search-console-data-export@system.gserviceaccount.com ", " serviceAccount:service-1234567890@gcp-sa-dataform.iam.gserviceaccount.com " ] , " role ": " roles/bigquery.dataEditor " } , ] } }, { " attachedResource ": " //cloudresourcemanager.googleapis.com/folders/098765432109 ", " policy ": { " bindings ": [ .... (略) } アセット倉曎の通知 アセット名もしくはアセットタむプ compute.googleapis.com/Network などを指定しおフィヌドを䜜成し、リ゜ヌスやポリシヌに蚭定倉曎が行われたずきにニアリアルタむムで通知を受け取るこずができたす。 䟋ずしお、頻繁に倉曎されないはずのプロゞェクトの IAM 蚱可ポリシヌに察する倉曎を監芖する、などのナヌスケヌスが考えられたす。 参考 : アセットの倉曎のモニタリング 通知は Pub/Sub に察しお行われたす。Pub/Sub ぞ投入されたメッセヌゞは、Cloud Run functions などを通しお取埗し、Slack や E メヌル通知、その他の埌続アクションに぀なげるこずが可胜です。 たた通知先ずしお Pub/Sub を指定しない堎合、通知は Cloud Logging に察しお蚘録されたす。Cloud Logging ぞメッセヌゞを蚘録すれば、プログラムを䜜成しなくおも ログベヌスのアラヌト 機胜により簡単に E メヌルや Slack ぞの通知が実装できたす。 参考 : Cloud Loggingの抂念ず仕組みをしっかり解説 - ログ監芖 たた、CELCommon Expression Languageフォヌマットで条件を蚘述し、詳现に通知条件をカスタマむズするこずもできたす。 参考 : 条件付きでアセットの倉曎をモニタリングする Asset Insight Asset Insight は、Cloud Asset Inventory が収集したアセット情報を Google Cloud の Recommender API が分析し、朜圚的なリスクを怜出するためのツヌルです。 2024幎10月珟圚、gcloud コマンドラむンや REST API 経由でのみ利甚可胜であり、Web コン゜ヌル画面は甚意されおいたせん。 Asset Insight では サブタむプ ずいう怜査皮別を指定しお分析を実行したす。それぞれのサブタむプでは、以䞋のようなリスクを怜知できたす。 サブタむプ名 怜知内容 EXTERNAL_MEMBER 別組織のアカりントたたはグルヌプを含む IAM ポリシヌを怜出 EXTERNAL_POLICY_EDITOR IAM ポリシヌを倉曎する暩限が付䞎された別組織のアカりントたたはグルヌプを含む IAM ポリシヌを怜出 EXTERNAL_CLOUD_STORAGE_OBJECT_VIEWER Cloud Storage のオブゞェクト取埗たたは䞀芧衚瀺暩限が付䞎された、別組織のアカりントたたはグルヌプを含む IAM ポリシヌを怜出 EXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR サヌビスアカりントの暩限を借甚impersonateする暩限が付䞎されおいる、別組織のアカりントたたはグルヌプを含む IAM ポリシヌを怜出 TERMINATED_MEMBER 無効化や削陀されたアカりントたたはグルヌプを含む IAM ポリシヌを怜出 PUBLIC_IAM_POLICY 任意の認蚌枈みアカりント allUsers 、぀たりログむン枈みのすべおの Google アカりントに察する蚱可を含む IAM ポリシヌを怜出 OWNER_TERMINATED_PROJECT プロゞェクトの IAM ポリシヌにアクティブなアカりントたたはグルヌプが含たれないプロゞェクトを怜出 以䞋は、あるプロゞェクトに、組織倖のメンバヌが IAM 暩限を持っおいないかどうかを調べるコマンドラむンです。 gcloud recommender insights list \ --project = my-test-project \ --location = global \ --insight-type = google.cloudasset.asset.Insight \ --filter =" insightSubtype:EXTERNAL_MEMBER " \ --format =" json " 出力は、以䞋のようになりたす。 [ { " category ": " SECURITY ", " content ": { " domain ": " example.co.jp ", " matchedPolicies ": [ { " matchedBindings ": [ { " matchedMembers ": [ " user:external-user@example.co.jp " ] , " role ": " roles/bigquery.dataViewer " } ] , " project ": " projects/1234567890 ", " resource ": " //bigquery.googleapis.com/projects/my-test-project/datasets/my_dataset/tables/my_table " } ] , " policyCount ": 1 , " policySearchQuery ": " policy: example.co.jp " } , " description ": " Domain example.co.jp detected in 1 IAM policies ", " etag ": " \" 12345678abcdefgh \" ", " insightSubtype ": " EXTERNAL_MEMBER ", " lastRefreshTime ": " 2024-09-16T08:13:25Z ", " name ": " projects/1234567890/locations/global/insightTypes/google.cloudasset.asset.Insight/insights/1234abcd-1234-12ab-12ab-123456sbcdef ", " observationPeriod ": " 0s ", " severity ": " LOW ", " stateInfo ": { " state ": " ACTIVE " } , " targetResources ": [ " //cloudresourcemanager.googleapis.com/projects/1234567890 " ] } ] 参考 : Asset Insights の䜿甚 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO / クラりド゜リュヌション郚 郚長 元譊察官ずいう経歎を持぀珟 IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 12資栌、Google Cloud認定資栌11資栌。X (旧 Twitter) では Google Cloud や AWS のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
G-gen の杉村です。耇数の Google Cloud プロゞェクトの Compute Engine VM の情報䞀芧を取埗する bash スクリプトを玹介したす。 はじめに 抂芁 前提条件 免責事項 ゜ヌスコヌド 出力䟋 実行方法 入力ファむルの準備 スクリプトの実行 応甚 はじめに 抂芁 圓蚘事で玹介するのは、耇数の Google Cloud プロゞェクトに存圚する Compute Engine VM の䞀芧を CSV ファむルに出力するためのスクリプトです。 圓スクリプトを䜿うこずで、Google Cloud 組織配䞋の党 VM を䞀芧にするこずができたす。組織内での VM の棚卞し等にご利甚ください。 前提条件 圓 bash スクリプトは、 Debian GNU/Linux 12 (bookworm) 䞊で開発され、動䜜確認されおいたす。 たた、以䞋の゜フトりェアがむンストヌルされおいるこずが前提です。括匧内は開発時のバヌゞョンです。 gcloud Google Cloud SDK 488.0.0  jq  jq-1.6  たた実行時は、gcloud コマンドの認蚌情報に、VM の䞀芧衚瀺暩限を持぀ Google アカりントが蚭定されおいる必芁がありたす。 参考 : ナヌザヌ アカりントを䜿甚しお認可する 参考 : サヌビス アカりントを䜿甚しお承認する 参考 : Compute Engine IAM のロヌルず暩限 なお、組織内の党プロゞェクトを䞀芧取埗する方法に぀いおは、以䞋も参照しおください。 blog.g-gen.co.jp 免責事項 圓蚘事で玹介するプログラムの゜ヌスコヌドは、ご自身の責任のもず、䜿甚、匕甚、改倉、再配垃しお構いたせん。 ただし、同゜ヌスコヌドが原因で発生した䞍利益やトラブルに぀いおは、圓瀟は䞀切の責任を負いたせん。 ゜ヌスコヌド 圓゜ヌスコヌドは、前述の 免責事項 をご理解のうえ、ご利甚ください。 list_all_vms.sh #!/bin/bash # 匕数チェック if [ $# -ne 1 ]; then echo " ERROR : Please specify project list file. " exit 1 fi # 倉数定矩 input_file = $1 datetime = `date " +%Y%m%d%H%M " ` output_file_name = " all_vms_ ${datetime} .csv " # プロゞェクトごずにルヌプを実行 while read project; do ## VM 情報取埗凊理 result = `gcloud compute instances list --project = ${project} --format = json --quiet` ## ゚ラヌの堎合はスキップ if [ $? -ne 0 ]; then continue fi ## ファむルに蚘録 IFS =$' \n '; for vm in ` echo ${result} | jq -c ' .[] ' ` ; do # JSON から各芁玠を抜出 id = ` echo ${vm} | jq -r .id` name = ` echo ${vm} | jq -r .name` zone = ` echo ${vm} | jq -r .zone | rev | cut -d / -f 1 | rev` machine_type = ` echo ${vm} | jq -r .machineType | rev | cut -d / -f 1 | rev` internal_ip = ` echo ${vm} | jq -r .networkInterfaces [ 0 ] .networkIP` service_account = ` echo ${vm} | jq -r .serviceAccounts [ 0 ] .email` # ファむルず暙準出力に出力 echo " ${project} , ${id} , ${name} , ${zone} , ${machine_type} , ${internal_ip} , ${service_account} " | tee -a ${output_file_name} done continue done < ${input_file} echo "" echo " ##### All VMs are listed in the file below ##### " ls -la ${output_file_name} exit 0 出力䟋 以䞋のような CSV ファむルが出力されたす。わかりやすいようにテヌブル圢匏で掲茉しおいたすが、実際には出力は csv であり、ヘッダは出力されたせん。 プロゞェクト ID むンスタンス ID むンスタンス 名 ゟヌン マシンタむプ 内郚 IP アドレス サヌビスアカりント my-project-01 12345 my-test-vm-01 us-central1-b e2-micro 10.128.0.33 1234567890-compute@developer.gserviceaccount.com my-project-01 23456 my-test-vm-02-tokyo asia-northeast1-b e2-medium 10.146.0.2 1234567890-compute@developer.gserviceaccount.com my-project-02 78901 example-vm-1 us-central1-c e2-medium 10.128.0.2 0987654321-compute@developer.gserviceaccount.com my-project-03 54321 hoge-vm asia-northeast1-c e2-micro 10.146.0.5 2345678901-compute@developer.gserviceaccount.com 実行方法 入力ファむルの準備 たず、入力ファむルずしお1行に1぀の Google Cloud プロゞェクト ID を蚘茉したテキストファむルを甚意したすプロゞェクト名ではなく、ID であるこずに泚意しおください。 projects.txt my-project-01 my-project-02 my-project-03 このファむルを䜜るには、以䞋の蚘事で玹介しおいるスクリプトを利甚するこずもできたす。 blog.g-gen.co.jp スクリプトの実行 その埌、以䞋のようにスクリプトを実行したす。 projects.txt は、甚意したテキストファむル名に眮き換えおください。 ./list_all_vms.sh projects.txt 応甚 ゜ヌスコヌドの28行目〜36行目を修正するこずで、任意の情報を CSV ファむルに含めるこずができたす。 同箇所では、JSON 圢匏で取埗した VM 情報を、jq コマンドでフィルタしお情報を取埗しおいたす。参考ずしお、VM 情報は以䞋のようなフォヌマットになっおいたす2024幎9月珟圚。 { " canIpForward ": false , " confidentialInstanceConfig ": { " enableConfidentialCompute ": false } , " cpuPlatform ": " Unknown CPU Platform ", " creationTimestamp ": " 2024-08-31T18:53:29.048-07:00 ", " deletionProtection ": false , " description ": "", " disks ": [ { " architecture ": " X86_64 ", " autoDelete ": true , " boot ": true , " deviceName ": " my-test-vm ", " diskSizeGb ": " 10 ", " guestOsFeatures ": [ { " type ": " UEFI_COMPATIBLE " } , { " type ": " VIRTIO_SCSI_MULTIQUEUE " } , { " type ": " GVNIC " } , { " type ": " SEV_CAPABLE " } , { " type ": " SEV_LIVE_MIGRATABLE_V2 " } ] , " index ": 0 , " interface ": " SCSI ", " kind ": " compute#attachedDisk ", " licenses ": [ " https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-12-bookworm " ] , " mode ": " READ_WRITE ", " source ": " https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-b/disks/my-test-vm ", " type ": " PERSISTENT " } ] , " displayDevice ": { " enableDisplay ": false } , " fingerprint ": " xxxxxxxxxxx= ", " id ": " 1234567890123456789 ", " keyRevocationActionType ": " NONE ", " kind ": " compute#instance ", " labelFingerprint ": " xxxxxxxxxxx= ", " lastStartTimestamp ": " 2024-09-02T19:49:37.720-07:00 ", " lastStopTimestamp ": " 2024-09-02T20:07:08.821-07:00 ", " machineType ": " https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-b/machineTypes/e2-micro ", " metadata ": { " fingerprint ": " xxxxxxxxxxx= ", " items ": [ { " key ": " enable-oslogin ", " value ": " true " } ] , " kind ": " compute#metadata " } , " name ": " my-test-vm ", " networkInterfaces ": [ { " accessConfigs ": [ { " kind ": " compute#accessConfig ", " name ": " External NAT ", " networkTier ": " PREMIUM ", " type ": " ONE_TO_ONE_NAT " } ] , " fingerprint ": " xxxxxxxxxxx= ", " kind ": " compute#networkInterface ", " name ": " nic0 ", " network ": " https://www.googleapis.com/compute/v1/projects/my-project/global/networks/default ", " networkIP ": " 10.0.0.2 ", " stackType ": " IPV4_ONLY ", " subnetwork ": " https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/subnetworks/default " } ] , " reservationAffinity ": { " consumeReservationType ": " ANY_RESERVATION " } , " satisfiesPzi ": false , " scheduling ": { " automaticRestart ": true , " onHostMaintenance ": " MIGRATE ", " preemptible ": false , " provisioningModel ": " STANDARD " } , " selfLink ": " https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-b/instances/my-test-vm ", " serviceAccounts ": [ { " email ": " 1234567890-compute@developer.gserviceaccount.com ", " scopes ": [ " https://www.googleapis.com/auth/devstorage.read_only ", " https://www.googleapis.com/auth/logging.write ", " https://www.googleapis.com/auth/monitoring.write ", " https://www.googleapis.com/auth/service.management.readonly ", " https://www.googleapis.com/auth/servicecontrol ", " https://www.googleapis.com/auth/trace.append " ] } ] , " shieldedInstanceConfig ": { " enableIntegrityMonitoring ": true , " enableSecureBoot ": false , " enableVtpm ": true } , " shieldedInstanceIntegrityPolicy ": { " updateAutoLearnPolicy ": true } , " startRestricted ": false , " status ": " TERMINATED ", " tags ": { " fingerprint ": " xxxxxxxxxxx= " } , " zone ": " https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-b " } 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO / クラりド゜リュヌション郚 郚長 元譊察官ずいう経歎を持぀珟 IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 12資栌、Google Cloud認定資栌11資栌。X (旧 Twitter) では Google Cloud や AWS のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
G-gen の杉村です。特定の Google Cloud 組織配䞋にあるすべおのプロゞェクトを取埗する bash スクリプトを玹介したす。 はじめに 抂芁 前提条件 免責事項 ゜ヌスコヌド 出力䟋 実行方法 入力情報の準備 スクリプトの実行 ゜ヌスコヌドの説明 泚意点 はじめに 抂芁 圓蚘事で玹介するのは、指定した Google Cloud 組織たたはフォルダの配䞋にあるすべおのプロゞェクトの䞀芧を CSV ファむルに出力するためのスクリプトです。圓スクリプトを䜿うこずで、特定の Google Cloud 組織やフォルダ配䞋の党プロゞェクトを䞀芧化するこずができたす。 前提ずしお、gcloud コマンドを䜿うず、自分のアカりントが get/list 暩限を持぀プロゞェクトの䞀芧が取埗できたす。 gcloud projects list ` しかしこのコマンドでは、もし自分が耇数の組織に察しお暩限を持っおいる堎合、すべおの組織配䞋のプロゞェクトが䞀芧衚瀺されおしたいたす。特定の組織のみに所属するプロゞェクトを䞀芧衚瀺したい堎合、少し工倫したスクリプトを曞く必芁がありたす。 参考 : gcloud projects list 参考 : 階局内のすべおのプロゞェクトずフォルダの䞀芧衚瀺 前提条件 圓 bash スクリプトは、 Debian GNU/Linux 12 (bookworm) 䞊で開発され、動䜜確認されおいたす。 たた、以䞋の゜フトりェアがむンストヌルされおいるこずが前提です。括匧内は開発時のバヌゞョンです。 gcloud Google Cloud SDK 488.0.0  jq  jq-1.6  たた実行時は、gcloud コマンドの認蚌情報に、フォルダやプロゞェクト䞀芧衚瀺暩限を持぀ Google アカりントが蚭定されおいる必芁がありたす。 参考 : ナヌザヌ アカりントを䜿甚しお認可する 参考 : サヌビス アカりントを䜿甚しお承認する 参考 : IAM を䜿甚したフォルダのアクセス制埡 参考 : IAM を䜿甚したプロゞェクトのアクセス制埡 免責事項 圓蚘事で玹介するプログラムの゜ヌスコヌドは、ご自身の責任のもず、䜿甚、匕甚、改倉、再配垃しお構いたせん。 ただし、同゜ヌスコヌドが原因で発生した䞍利益やトラブルに぀いおは、圓瀟は䞀切の責任を負いたせん。 ゜ヌスコヌド 圓゜ヌスコヌドは、前述の 免責事項 をご理解のうえ、ご利甚ください。 list_projects.sh #!/bin/bash # 匕数チェック if [ $# -ne 2 ]; then echo " ERROR : Please specify parent resource's ID and resource type (folder/organization). " echo " usage : $0 (resouce_id) (resource_type) " exit 1 fi # 倉数定矩 root_parent_id = $1 root_parent_type = $2 datetime = `date " +%Y%m%d%H%M " ` file_name = " projects_ ${datetime} .csv " # 匕数が想定した倀であるこずをチェック if [ " ${root_parent_type} " != " organization " -a " ${root_parent_type} " != " folder " ]; then echo " ERROR : resource_type must be (folder/organization). " echo " usage : $0 (resouce_id) (resource_type) " exit 1 fi # フォルダを再垰的に取埗する関数 function get_folders() { local parent_id = $1 local resource_type = $2 local depth = $3 local next_depth = $(( ${depth} + 1 )) echo " Processing... parent_id: ${parent_id} , resource_type: ${resource_type} , depth: ${depth} " > `tty` if [ ${resource_type} == " organization " ]; then folders_result = `gcloud resource-manager folders list --format = json --organization = ${parent_id} ` elif [ ${resource_type} == " folder " ]; then folders_result = `gcloud resource-manager folders list --format = json --folder = ${parent_id} ` fi # system-gsuite フォルダを陀倖 folders =` echo ${folders_result} | jq -r ' .[] | select(.displayName != "system-gsuite") | .name ' | cut -d / -f 2 ` if [ -n " ${folders} " ]; then echo " ${folders} " fi for folder in ${folders} ; do get_folders ${folder} folder ${next_depth} done return 0 } echo " Processing... root_parent_id: ${root_parent_id} , root_parent_type: ${root_parent_type} " # プロゞェクト䞀芧取埗 projects = `gcloud projects list --format = json` if [ $? -ne 0 ]; then echo " ERROR : gcloud projects list command finished with error. " exit 1 fi folder_ids = `get_folders ${root_parent_id} ${root_parent_type} 1 ` LF = $' \n ' root_and_folder_ids = " ${root_parent_id}${LF}${folder_ids} " # 特定組織フォルダの配䞋のみ抜出 for parent in ${root_and_folder_ids} ; do target_projects += ( ` echo ${projects} | jq -r " .[] | select(.parent.id == \" ${parent} \" ) | .projectId " ` ) done # ゜ヌトしおファむルに曞き蟌み printf " %s \n " " ${target_projects[ @ ]} " | sort | tee -a ${file_name} # スクリプト終了 echo " -------------------------------- " echo " ${file_name} was generated. " ls -la " ${file_name} " exit 0 出力䟋 以䞋のようなテキストファむルが出力されたす。 my-project-01 my-project-02 my-project-03 実行方法 入力情報の準備 たず、プロゞェクトを䞀芧化したい組織やプロゞェクトのリ゜ヌス ID を確認したす。リ゜ヌス ID は、10桁〜13桁皋床の数字です。 適切な暩限を持っおいれば、Google Cloud コン゜ヌルの「リ゜ヌスの管理Manage Resources」画面から確認できたす。 組織のリ゜ヌス ID組織 IDを調べる方法に぀いおは、以䞋でも詳现に説明されおいたす。 blog.g-gen.co.jp スクリプトの実行 その埌、以䞋のようにスクリプトを実行したす。 第1匕数の 123456789012 は、組織やフォルダのリ゜ヌス ID に眮き換えおください。第2匕数は、組織の堎合は organization を、フォルダの堎合は folder を指定しおください。 ./list_projects.sh 123456789012 organization ゜ヌスコヌドの説明 ネストされたフォルダ ID の取埗 ゜ヌスコヌドの48行目では、 gcloud projects list --format=json を実行し、Google アカりントが衚瀺暩限を持぀すべおのプロゞェクトの情報を JSON 圢匏で䞀括取埗しおいたす。 しかしこの JSON には、衚瀺暩限を持぀すべおのプロゞェクトの情報が栌玍されたす。JSON は、以䞋のようなフォヌマットです。 [ { " createTime ": " 2024-08-22T03:15:08.530Z ", " lifecycleState ": " ACTIVE ", " name ": " my-project-01 ", " parent ": { " id ": " 3456789xxx ", " type ": " organization " } , " projectId ": " my-project-01 ", " projectNumber ": " 123456789xxx " } , { " createTime ": " 2024-08-28T11:22:45.210Z ", " lifecycleState ": " ACTIVE ", " name ": " my-project-02 ", " parent ": { " id ": " 234567890xxx ", " type ": " folder " } , " projectId ": " my-project-02 ", " projectNumber ": " 987654321xxx " } , ... ] JSON 内の parent.id ずいうキヌには、そのプロゞェクトの芪リ゜ヌス組織やフォルダのリ゜ヌス ID が栌玍されおいたす。 組織の盎䞋にあるプロゞェクトは、 parent.id が組織のリ゜ヌス ID になりたす。たたフォルダの䞭にあるプロゞェクトは、 parent.id がフォルダのリ゜ヌス ID になりたす。そのため、組織の配䞋にあるすべおのプロゞェクトを抜出するには、組織 ID ず、すべおのフォルダのリ゜ヌス ID でフィルタする必芁がありたす。 圓スクリプトでは、get_folders() 関数17行目から定矩で、フォルダ内にネストしおいるフォルダを含めお、すべおのフォルダの ID を再垰的に取埗しおいたす。そしお、取埗したフォルダ ID を䜿っおすべおのプロゞェクトを抜出したす。これにより、組織配䞋のすべおのプロゞェクトをリストアップしたす。 圓スクリプトを実行するず以䞋のように凊理経過が画面に出力されたす。これは、ネストされたフォルダ内のフォルダのリ゜ヌス ID を取埗しおいる様子を衚しおいたす。 Processing... root_parent_id: 3456789xxx, root_parent_type: organization Processing... parent_id: 3456789xxx, resource_type: organization, depth: 1 Processing... parent_id: 234567890xxx, resource_type: folder, depth: 2 Processing... parent_id: 567890123xxx, resource_type: folder, depth: 3 ... depth は、スクリプト実行時に匕数で䞎えた最初の組織たたはフォルダを1ずしお、ネストの深さを瀺しおいたす。 システムに生成されたプロゞェクトの陀倖 組織配䞋には、システムによっお自動生成されたプロゞェクトが存圚する堎合がありたす。 system-gsuite フォルダ配䞋の apps-script フォルダ内には、 sys- で始たる ID のプロゞェクトが栌玍されおいたす。これは、Google Apps Script によっお䜜成されたプロゞェクトです。 たた system-gsuite フォルダ配䞋の appsheet フォルダ内には、 app- で始たる ID のプロゞェクトが栌玍されおいたす。これは、App Sheet によっお䜜成されたプロゞェクトです。 これらのプロゞェクトを陀倖するため、get_folders() 関数内の゜ヌスコヌド32行目で、 system-gsuite ずいう衚瀺名のフォルダは陀倖しおいたす。 泚意点 実行する Google アカりントで衚瀺できるプロゞェクトの数が倚すぎる堎合は、 gcloud projects list コマンドが倱敗する堎合がありたす。 その堎合、 --page-size オプションを指定しおレスポンスを制限する必芁がありたすが、圓スクリプトはそのような堎合には察応しおいたせん。 --page-size オプションを指定しなかった堎合、デフォルト倀は unlimited であり、すべおの結果が返されたす。 参考 : gcloud プロゞェクト リストのレむテンシの短瞮 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO / クラりド゜リュヌション郚 郚長 元譊察官ずいう経歎を持぀珟 IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 12資栌、Google Cloud認定資栌11資栌。X (旧 Twitter) では Google Cloud や AWS のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
本蚘事では gcloud コマンドの --filter フラグず --format フラグを䜿った出力の制埡に぀いお、具䜓䟋を亀えお玹介したす。 gcloud CLI コマンドの抂芁 出力結果を自圚に操る デフォルトの出力 format フラグで出力圢匏を指定 filter フラグで特定の倀を持぀リ゜ヌスを抜出 gcloud コマンドに関する他の蚘事 gcloud CLI コマンドの抂芁 Google Cloud CLIgcloud CLIは、リ゜ヌスの䜜成ず管理を行うためのツヌルです。このツヌルを利甚するこずで、䟋えば以䞋のようなこずが出来たす。 Compute Engine むンスタンスの䜜成 Cloud SQL むンスタンスのパラメヌタの確認 Google Kubernetes Engine クラスタの削陀 参考 : gcloud CLI の抂芁 出力結果を自圚に操る デフォルトの出力 たずは、䜕もフラグを指定せずに、リ゜ヌス䞀芧を出力しおみたす。ここに様々な蚭定の Compute Engine むンスタンスを3台甚意したした。 次のコマンドを実行するず、内容を文字で確認するこずが出来たす。 $ gcloud compute instances list NAME: test1 ZONE: asia-northeast1-a MACHINE_TYPE: e2-small PREEMPTIBLE: INTERNAL_IP: 192 . 168 . 1 . 15 EXTERNAL_IP: 34 . 84 . 108 . 247 STATUS: RUNNING NAME: test2 ZONE: asia-northeast1-b MACHINE_TYPE: e2-medium PREEMPTIBLE: INTERNAL_IP: 192 . 168 . 1 . 16 EXTERNAL_IP: 35 . 187 . 200 . 2 STATUS: RUNNING NAME: test3 ZONE: asia-northeast1-c MACHINE_TYPE: e2-standard-2 PREEMPTIBLE: INTERNAL_IP: 192 . 168 . 1 . 17 EXTERNAL_IP: STATUS: TERMINATED シンプルなコマンドで、䞻な内容を確認するこずが出来たした。しかし、この出力だず次のようなケヌスには察応するのに䞀手間必芁になりたす。 察象の VM が100台あり、むンスタンス名だけをすべお取埗したい むンスタンス名ずマシンタむプを Excel にたずめたい ステヌタスが RUNNING の VM のみ倀を取埗したい ここで甚いるのが、gcloud コマンドの --filter フラグず --format フラグです。 format フラグで出力圢匏を指定 コマンドの埌ろに --format フラグを付けるこずで、出力のフォヌマットを倉曎するこずが出来たす。 䟋えば内容を JSON で出力したい堎合、 --format=json を指定するこずで、次のようになりたす。 $ gcloud compute instances list -- format = json [ { " canIpForward ": false , " confidentialInstanceConfig ": { " enableConfidentialCompute ": false } , " cpuPlatform ": " Intel Broadwell ", " creationTimestamp ": " 2024-07-08T18:08:09.626-07:00 ", " deletionProtection ": false , " description ": "", " disks ": [ { " architecture ": " X86_64 ", " autoDelete ": true , " boot ": true , " deviceName ": " test1 ", " diskSizeGb ": " 10 ", " guestOsFeatures ": [ { " type ": " UEFI_COMPATIBLE " } , { " type ": " VIRTIO_SCSI_MULTIQUEUE " } , { " type ": " GVNIC " } , { " type ": " SEV_CAPABLE " } , { " type ": " SEV_LIVE_MIGRATABLE_V2 " } ] , " index ": 0 , 以䞋省略 たた、 --format=table を䜿うず、特定の属性だけを抜出できたす。䟋えば先皋の䟋に䞊げた「むンスタンス名だけを取埗したい」堎合、次のように指定出来たす。 $ gcloud compute instances list --format =" table(name) " NAME: test1 NAME: test2 NAME: test3 たた、「むンスタンス名ずマシンタむプを取埗したい」のように、耇数の属性を取埗するこずもできたす。 $ gcloud compute instances list --format =" table(name,MACHINE_TYPE) " NAME: test1 MACHINE_TYPE: e2-small NAME: test2 MACHINE_TYPE: e2-medium NAME: test3 MACHINE_TYPE: e2-standard-2 たた、csv 圢匏で出力するこずも可胜です。結果をスプレッドシヌトや Excel に貌り付けたいずきに有甚です。 $ gcloud compute instances list --format =" csv(name,MACHINE_TYPE) " name,machine_type test1,e2-small test2,e2-medium test3,e2-standard-2 このように format フラグを利甚するず、JSON 圢匏、テヌブル圢匏、csv 圢匏など、出力フォヌマットを倉曎できたす。 そのほか、詳现な仕様は公匏ドキュメントをご参照ください。 参考 : gcloud topic formats filter フラグで特定の倀を持぀リ゜ヌスを抜出 コマンドの埌ろに --filter フラグを぀けるこずで、特定のパラメヌタを持぀リ゜ヌスだけを出力させるこずができたす。 䟋えば、「RUNNING 状態の VM むンスタンスの名前ずむンスタンスタむプを csv 出力したい」ずいうケヌスの堎合、次のように指定したす。 $ gcloud compute instances list --format =" csv(name,MACHINE_TYPE) " --filter =" STATUS=RUNNING " name,machine_type test1,e2-small test2,e2-medium このように、出力結果の絞り蟌みに利甚できるのが --filter フラグです。 詳现な仕様は公匏ドキュメントをご参照ください。 参考 : gcloud topic filters なお、 --format フラグも --filter フラグも、ネストされた属性を指定するこずが可胜です。 䟋えば「むンスタンス名ず、むンスタンスに玐づいたサヌビスアカりント名を出力したい」ずいうケヌスの堎合、以䞋のように指定できたす。 $ gcloud compute instances list --format =" table(name,serviceAccounts[].email) " NAME: test1 EMAIL: [' 53xxxx11-compute@developer.gserviceaccount.com '] gcloud コマンドに関する他の蚘事 blog.g-gen.co.jp blog.g-gen.co.jp blog.g-gen.co.jp blog.g-gen.co.jp 䞉朚宏昭 (蚘事䞀芧) クラりド゜リュヌション郚 HROne→ServerWorks→WealthNavi→G-gen。AWS 11資栌、Google Cloud認定党冠。Google Cloud Partner Top Engineer 2024。Google Authorized Trainer Follow @cloudeep_miki
G-genの杉村です。Google Cloud旧称 GCPのフルマネヌゞドなデヌタりェアハりスサヌビスである BigQuery の、ストレヌゞ料金䜓系に぀いお解説したす。 BigQuery の課金䜓系 2぀の課金モデル 論理ストレヌゞLogical Storage課金 物理ストレヌゞPhysical storage課金 アクティブず長期 ナヌスケヌス どちらのモデルを遞択すべきか 圧瞮率の䟋 圧瞮率の確認デヌタセットごず、コン゜ヌル 圧瞮率の確認組織レベル、システムビュヌ 圧瞮率の確認プロゞェクトレベル、システムビュヌ タむムトラベル・フェむルセヌフぞの課金 制玄 物理ストレヌゞ課金モデルの利甚可吊 ストレヌゞ課金モデルの倉曎のむンタヌバル期間 BigQuery の課金䜓系 前提知識ずしお、BigQuery の利甚料金は以䞋の2぀の合蚈であるこずを理解する必芁がありたす。 ストレヌゞ料金栌玍したデヌタサむズに応じた課金 コンピュヌト料金コンピュヌト凊理リ゜ヌスに察する課金 圓蚘事では、このうち 1. のストレヌゞ料金に぀いお解説したす。 参考 : ストレヌゞの課金モデル BigQuery のコンピュヌト料金䜓系の1぀である BigQuery Editions に぀いおは、以䞋の蚘事を参照しおください。 blog.g-gen.co.jp 2぀の課金モデル 論理ストレヌゞLogical Storage課金 論理ストレヌゞ 課金モデルは、テヌブルに栌玍されたデヌタの、圧瞮前の額面デヌタサむズに察しお課金するモデルです。 デフォルトでは、BigQuery デヌタセットのストレヌゞ課金モデルは 論理ストレヌゞ Logical Storageに蚭定されおいたす。 BigQuery では、デヌタは透過的に圧瞮されお栌玍されおいたす。䟋えば100 MB のデヌタを栌玍したずしおも、実際にはデヌタは圧瞮されおおり、実際に Google のストレヌゞを占有しおいるデヌタサむズはもっず小さいものになりたす。論理ストレヌゞ課金では、実際に占有されおいるデヌタサむズ ではなく 、額面デヌタサむズ先の䟋では 100 MBに察しお課金するモデルです。 物理ストレヌゞPhysical storage課金 䞀方の 物理ストレヌゞ Physical Storage課金モデルは、 圧瞮埌のデヌタサむズに察しお 蚈算が行われる課金モデルです。なお物理ストレヌゞ課金モデルは、2023幎7月に䞀般公開された新しいモデルです。 圓然、デヌタサむズは論理ストレヌゞ課金モデルより小さく蚈算されたすが、課金単䟡は論理ストレヌゞよりも高いものが䜿われたす。埌述したすが、倚くの堎合でこちらの課金モデルのほうが、結果的に安䟡になる傟向がありたす。 重芁な点ずしお、物理ストレヌゞ課金モデルを遞択したか吊かに関わらず、BigQuery のデヌタは透過的に圧瞮されおいたす。論理ストレヌゞ課金か物理ストレヌゞ課金かの遞択は、あくたで課金の蚈算方法の遞択肢であり、この遞択により圧瞮の有無が倉わったり、パフォヌマンスが倉わるものではありたせん。 BigQuery の圧瞮の内郚的な仕組みに぀いおは、以䞋もご参照ください。 参考 : Experimenting with BigQuery data compression アクティブず長期 論理、物理のいずれの課金モデルを遞択した堎合でも、BigQuery のストレヌゞには、アクティブストレヌゞず長期ストレヌゞがありたす。 アクティブストレヌゞ Active storageは、過去90日間以内にテヌブルに挿入されたり、曎新があったデヌタが栌玍される領域です。 長期ストレヌゞ Long-term storageは、過去90日間の間、倉曎がないデヌタが栌玍される領域です。デヌタの挿入たたは栌玍埌、90日間攟眮するず、デヌタは自動的に長期ストレヌゞに移行したす。 長期ストレヌゞの課金単䟡は、アクティブストレヌゞの半分です。BigQuery テヌブルにデヌタを䞀床挿入したあずは、觊れずに攟眮しおおくこずで、自動的に安䟡になりたす。 参考 : Storage pricing ナヌスケヌス どちらのモデルを遞択すべきか BigQuery では、デヌタセットごずに論理ストレヌゞ課金モデルを適甚するか物理ストレヌゞ課金モデルを適甚するかを遞択できたす。デフォルトでは、論理ストレヌゞ課金モデルが適甚されおいたす。 以䞋は、2026幎2月珟圚の東京リヌゞョンasia-northeast1の料金単䟡です。 課金モデル 単䟡 論理ストレヌゞアクティブ $0.023 / GiB / 月 論理ストレヌゞ長期 $0.016 / GiB / 月 物理ストレヌゞアクティブ $0.052 / GiB / 月 物理ストレヌゞ長期 $0.026 / GiB / 月 物理ストレヌゞ課金モデルは、論理ストレヌゞ課金モデルの単䟡よりも、玄2.26倍高いこずがわかりたす。぀たり、デヌタが玄44.3%以䞋たで圧瞮されおいれば、物理ストレヌゞ課金を遞択したほうが安䟡になりたす。 ストレヌゞ単䟡は、デヌタセットのリヌゞョンによっお異なりたす。リヌゞョンごずの最新の料金は、以䞋のドキュメントを参照しおください。 参考 : Storage pricing 圧瞮率の䟋 あくたで䞀般的な傟向ですが、BigQuery では圧瞮によりデヌタは4分の1〜12分の1皋床、あるいはそれ以䞊の圧瞮率になる可胜性がありたす。 デヌタ圧瞮率の䟋をいく぀か玹介したす。 以䞋は、G-gen Tech Blog で収集しおいる Google Analytics 4 のデヌタを BigQuery に゚クスポヌトしたテヌブルの情報です。ある日のテヌブルは、論理バむト数は 11.69 MB ですが、物理バむト数は 638.69 KB であり、玄 18 分の 1 になっおいたす。 もう䞀぀の䟋です。以䞋はパブリックデヌタセットの bigquery-public-data.baseball.games_wide テヌブルの情報です。この䟋では 1.76 GB が 32.22 MB たで圧瞮されおおり、玄 56 分の 1 になっおいたす。 䞊蚘の䟋ではいずれも、物理ストレヌゞ課金モデルを遞択したほうが、安䟡になるこずがわかりたす。 デヌタの圧瞮率はデヌタの性質によっお異なるため䞀抂には蚀えたせんが、倚くのケヌスで物理ストレヌゞ課金モデルを遞択するこずで安䟡になるず考えられたす。 圧瞮率の確認デヌタセットごず、コン゜ヌル デヌタの実際の圧瞮状況は、テヌブルの詳现情報から確認できたす。BigQuery の Web コン゜ヌルから、テヌブルの詳现画面を開くず、論理バむト数ず物理バむト数が確認できたす。 以䞋の䟋だず、1.6%ほどにたでデヌタが圧瞮されおいたすので、物理ストレヌゞ課金を遞択したほうが、安䟡になるこずがわかりたす。 圧瞮率の確認組織レベル、システムビュヌ BigQuery のシステムビュヌである INFORMATION_SCHEMA にク゚リするこずで、Google Cloud 組織党䜓、あるいは特定のプロゞェクトの情報を取埗するこずが可胜です。 以䞋のサンプルク゚リでは INFORMATION_SCHEMA.TABLE_STORAGE_BY_ORGANIZATION から情報を取埗し、組織党䜓で、プロゞェクトごずに圧瞮状況を確認しおいたす。 参考 : TABLE_STORAGE_BY_ORGANIZATION view このク゚リにより、Google Cloud 組織党䜓で、プロゞェクトごずの論理ストレヌゞアクティブ、論理ストレヌゞ長期、物理ストレヌゞアクティブ、物理ストレヌゞ長期それぞれのバむト数、たた費甚芋積もりを確認するこずができたす。ク゚リの内容は、環境にあわせお曞き換えおください。 組織党䜓の情報を取埗するサンプルク゚リ DECLARE active_logical_pricing, longterm_logical_pricing, active_physical_pricing, longterm_physical_pricing NUMERIC ; SET active_logical_pricing = 0 . 023 ; SET longterm_logical_pricing = 0 . 016 ; SET active_physical_pricing = 0 . 052 ; SET longterm_physical_pricing = 0 . 026 ; -- 䞊蚘は2026-02時点の東京リヌゞョン䟡栌。適宜倉曎しおください SELECT project_id, ROUND ( SUM (total_logical_bytes/POW( 1024 , 3 )), 2 ) AS total_logical_gigabytes, ROUND ( SUM ( ( active_logical_bytes/POW( 1024 , 3 ) ) * active_logical_pricing + ( long_term_logical_bytes/POW( 1024 , 3 ) ) * longterm_logical_pricing ), 2 ) AS total_logical_price, ROUND ( SUM (total_physical_bytes/POW( 1024 , 3 )), 2 ) AS total_physical_gigabytes, ROUND ( SUM (fail_safe_physical_bytes/POW( 1024 , 3 )), 2 ) AS fail_safe_physical_gigabytes, ROUND ( SUM ( ( (active_physical_bytes/POW( 1024 , 3 )) + (fail_safe_physical_bytes/POW( 1024 , 3 )) ) * active_physical_pricing + ( long_term_physical_bytes/POW( 1024 , 3 ) ) * longterm_physical_pricing ), 2 ) AS total_physical_price, ROUND (SAFE_DIVIDE( SUM (total_logical_bytes), SUM (total_physical_bytes)), 2 ) AS compression_ratio FROM `region-asia-northeast1.INFORMATION_SCHEMA.TABLE_STORAGE_BY_ORGANIZATION` -- 䞊蚘はデヌタセットのリヌゞョンに合わせお適宜倉曎しおください GROUP BY 1 泚意点ずしお INFORMATION_SCHEMA.TABLE_STORAGE_BY_ORGANIZATION をク゚リするには、実行アカりントは 組織レベル で特定の暩限を持っおいる必芁がありたす。この暩限を埗るには、ク゚リするアカりントに察しお組織レベルで BigQuery メタデヌタ閲芧者  roles/bigquery.metadataViewer ロヌルなどを付䞎したす。組織レベルで䟋えば オヌナヌ  roles/owner ロヌルを持っおいるずしおも、オヌナヌには bigquery.tables.get が含たれおいないため暩限䞍足ずなりたすので、ご泚意ください。 BigQuery の IAM 暩限の詳现に぀いおさらに知りたい堎合は、以䞋をご参照ください。 blog.g-gen.co.jp 圧瞮率の確認プロゞェクトレベル、システムビュヌ あるプロゞェクトの䞭で、デヌタセットごずに圧瞮率を確認したい堎合、システムビュヌ ${プロゞェクト ID}.region-${リヌゞョン名}.INFORMATION_SCHEMA.TABLE_STORAGE から情報を取埗したす。このク゚リの実行には、プロゞェクトレベルで BigQuery メタデヌタ閲芧者  roles/bigquery.metadataViewer ロヌルなどが必芁です。 参考 : TABLE_STORAGE view プロゞェクトの情報を取埗するサンプルク゚リ DECLARE active_logical_pricing, longterm_logical_pricing, active_physical_pricing, longterm_physical_pricing NUMERIC ; SET active_logical_pricing = 0 . 023 ; SET longterm_logical_pricing = 0 . 016 ; SET active_physical_pricing = 0 . 052 ; SET longterm_physical_pricing = 0 . 026 ; -- 䞊蚘は2026-02珟圚の東京リヌゞョン䟡栌。適宜倉曎しおください SELECT project_id, table_schema, ROUND ( SUM (total_logical_bytes/POW( 1024 , 3 )), 2 ) AS total_logical_gigabytes, ROUND ( SUM ( ( active_logical_bytes/POW( 1024 , 3 ) ) * active_logical_pricing + ( long_term_logical_bytes/POW( 1024 , 3 ) ) * longterm_logical_pricing ), 2 ) AS total_logical_price, ROUND ( SUM (total_physical_bytes/POW( 1024 , 3 )), 2 ) AS total_physical_gigabytes, ROUND ( SUM (fail_safe_physical_bytes/POW( 1024 , 3 )), 2 ) AS fail_safe_physical_gigabytes, ROUND ( SUM ( ( (active_physical_bytes/POW( 1024 , 3 )) + (fail_safe_physical_bytes/POW( 1024 , 3 )) ) * active_physical_pricing + ( long_term_physical_bytes/POW( 1024 , 3 ) ) * longterm_physical_pricing ), 2 ) AS total_physical_price, ROUND (SAFE_DIVIDE( SUM (total_logical_bytes), SUM (total_physical_bytes)), 2 ) AS compression_ratio FROM `my-project.region-asia-northeast1.INFORMATION_SCHEMA.TABLE_STORAGE_BY_PROJECT` -- 䞊蚘のプロゞェクト ID、リヌゞョンは、環境に合わせお適宜倉曎しおください GROUP BY 1 , 2 䞊蚘のク゚リにより、特定プロゞェクト内のデヌタセットごずに圧瞮率が取埗されたす。東京リヌゞョンの堎合、 compression_ratio 列が2.26以䞊になれば、物理ストレヌゞを遞択した方が安䟡になりたす。 タむムトラベル・フェむルセヌフぞの課金 BigQuery には タむムトラベル機胜 ず フェむルセヌフ機胜 があり、デヌタを削陀したり倉曎したりしおも、デフォルトで過去14日間タむムトラベルで7日間、フェむルセヌフでさらに7日間のデヌタが保持されたす。 参考 : タむムトラベルずフェむルセヌフによるデヌタの保持 物理ストレヌゞ課金モデルを遞択するず、このタむムトラベルずフェむルセヌフのデヌタサむズにも課金が発生したす。その䞀方で、論理ストレヌゞ課金モデルでは課金されたせん。課金は、アクティブストレヌゞの単䟡で行われたす。 ストレヌゞ料金を節玄するために、タむムトラベルの保存期間をデフォルトの7日間から倉曎するこずも可胜です。フェむルセヌフの保存期間タむムトラベル期間の埌、远加で7日間は倉曎できたせん。 この仕様から、デヌタの削陀や曎新が頻繁なテヌブルでは、物理ストレヌゞ課金にするず料金が高くなるおそれがありたす。デフォルト蚭定では、䟋えば定期的にデヌタを掗い替え䞀床 TRUNCATE しおから INSERTしおいるようなテヌブルだず、タむムトラベル領域ずフェむルセヌフ領域に削陀されたデヌタが14日間、積み䞊がり続け、課金察象ずされるこずになりたす。 たた、BigQuery Data Transfer Serviceのデヌタセットコピヌ機胜で Overwrite destination table オプションを䜿う堎合も、この仕様に泚意が必芁です。以䞋の蚘事も参照しおください。 参考 : BigQuery Data Transfer Serviceのデヌタセットコピヌを解説 - 泚意点 制玄 物理ストレヌゞ課金モデルの利甚可吊 物理ストレヌゞ課金モデルの制玄ずしお、 同じ Google Cloud 組織 内のいずれかのプロゞェクト、 同じリヌゞョン で Flat-rate 課金が䜿甚されおいる堎合は、物理ストレヌゞ課金モデルが利甚できたせん。 Flat-rate定額課金は2023幎7月に販売が終了した、BigQuery の叀いコンピュヌト課金モデルです。珟圚では BigQuery Editions に眮き換わっおいたす。BigQuery Editions を利甚䞭の堎合は、問題ありたせん。 ストレヌゞ課金モデルの倉曎のむンタヌバル期間 BigQuery コン゜ヌルのデヌタセット詳现画面から鉛筆マヌクの「詳现を線集」リンクをクリックし、チェックボックス「物理ストレヌゞの課金モデルを有効にする」をオンにしお保存するこずで、課金䜓系が物理ストレヌゞの課金モデルに倉曎されたす。 このずき、倉曎が適甚されるたでに24時間が必芁です。 たた、䞀床デヌタセットの課金モデルを倉曎するず、再床モデルを倉曎するには14日間、埅぀必芁がありたす。 参考 : Update storage billing models 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO 元譊察官ずいう経歎を持぀ IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 認定資栌および Google Cloud 認定資栌はすべお取埗。X旧 Twitterでは Google Cloud や Google Workspace のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
Google Cloud旧称 GCPの Cloud Monitoring のアラヌトポリシヌ機胜で、通知文に VM 名称等を含める方法をご玹介したす。 前提知識 Cloud Monitoring ずは ログベヌスのアラヌトずラベル機胜 改善前 蚭定倀 課題 改善埌 蚭定 テスト 改善埌のアラヌト内容 前提知識 Cloud Monitoring ずは Cloud Monitoring は、 Google Cloud における監芖機胜を提䟛するサヌビスです。以䞋の機胜を提䟛したす。 メトリクスの収集 可芖化 アラヌト管理 むンシデント管理 詳现は以䞋の蚘事をご参照ください。 blog.g-gen.co.jp blog.g-gen.co.jp ログベヌスのアラヌトずラベル機胜 ログベヌスのアラヌト 機胜では、Cloud Logging で収集したログに特定の文字列が珟れた際に、E メヌルや Slack に通知するこずができたす。 たた、ログベヌスのアラヌトを定矩する際に ラベル を指定するこずができたす。ラベルずはログ゚ントリの䞀郚を抜出したテキスト倀です。 ラベルを䞊手く掻甚するこずで、E メヌルや Slack ぞのアラヌト通知の本文に、様々な情報を出力するこずが出来たす。 参考 : ログベヌスのアラヌト ポリシヌの構成 参考 : ログベヌスの指暙にラベルを構成する 改善前 蚭定倀 VM から出力されるログの重芁床が ERROR の堎合に通知を飛ばすために、以䞋のように蚭定したした。 ログベヌスの通知の蚭定方法に぀いお、詳现は以䞋のペヌゞをご参照ください。 参考 : ログベヌスのアラヌト ポリシヌの構成 たた、Slack ぞの通知方法は以䞋のペヌゞをご参照ください。 参考 : Slack 通知を構成す 課題 ある Google Cloud 環境で、Compute Engine の VM むンスタンスで゚ラヌが発生した際に E メヌルず Slack ぞ通知されるよう、䞊蚘のようにアラヌトを蚭定したした。 動䜜確認したずころ、通知の件名や内容には VM 名が蚘茉されおいないため、どの VM で゚ラヌが起きおいるのかが分かりたせん。察象の VM を知るには Google Cloud コン゜ヌルにログむンしお詳现を確認する必芁がありたした。これは、運甚䞊の課題ずなりたした。 メヌルぞの通知䟋 Slackぞの通知䟋 改善埌 蚭定 通知本文に VM の名称を衚瀺させるために、ラベル機胜を掻甚したす。 次のように蚭定するこずで、VM 名をラベルずしお定矩できたす。 Key Value Display name vm_name Log field name labels.isntance_name Log field name では、Cloud Logging に出力されるログ゚ントリのキヌを指定したす。VM 名だけでなく、ログに出力される内容であれば、この方法で抜出するこずができたす。 次に、定矩したラベルを通知の本文にも衚瀺させたす。Documentation 蚭定を次のように曞き換えたす。 以䞋に瀺した ${log.extracted_label.vm_name} は、前述のラベルを指しおいたす。 VM で゚ラヌが発生したした。 察象のVM名は ${log.extracted_label.vm_name} です。 テスト 次に、通知内容の倉化をテストしたす。 テストの際は logEntries.write リファレンス ペヌゞを掻甚するのが䟿利です。Google Cloud の API リファレンスでは、API に察しおテストリク゚ストを送信するこずができたす。 参考 : Method: entries.write このペヌゞの右偎ペむンの RequestBody に入力した内容が、Cloud Logging ログ゚ントリずしお蚘録されたす。 今回は以䞋のリク゚スト内容で、テストを行いたした。 { " entries ": [ { " logName ": " projects/my-projecct/logs/GCEGuestAgent ", " jsonPayload ": { " message ": " Error happened " } , " severity ": " ERROR ", " labels ": { " instance_name ": " test01 " } , " resource ": { " type ": " gce_instance ", " labels ": { " project_id ": " my-projecct ", " location ": " asia-northeast1 ", " instance_id ": " 1234567890123456789 ", " zone ": " asia-northeast1-b " } } } ] } リク゚ストを蚘述したら Execute ボタンを抌䞋するこずで、Cloud Logging にログ゚ントリが蚘録され、アラヌトが発報したす。 改善埌のアラヌト内容 通知内容に、VM 名が衚瀺されるこずが確認できたした。 改善埌のメヌル通知 改善埌のSlack通知の内容 G-gen 線集郚 (蚘事䞀芧) 株匏䌚瀟G-genは、サヌバヌワヌクスグルヌプずしお「クラりドで、䞖界を、もっず、はたらきやすく」をビゞョンに掲げ、クラりドの導入から最適化たでを支揎しおいる Google Cloud 専業のクラりドむンテグレヌタヌです。
G-gen の山厎です。 圓蚘事では、Cloud Storage に栌玍されたテキストファむルに察しお、Cloud Run functions におVertex AI Gemini API を呌び出し、取埗したテキストの芁玄結果を BigQuery に保存する凊理を構築したので解説したす。 システム構成 前提知識 環境構築 API の有効化 Cloud Storage の構築 バケットの䜜成 Cloud Storage サヌビス゚ヌゞェントに暩限付䞎 BigQuery の構築 Cloud Run functions の構築 Python のバヌゞョン requirements.txt の䜜成 main.py の䜜成 サヌビスアカりントの䜜成Cloud Run functions 起動甚 サヌビスアカりントの䜜成Cloud Run functions 実行甚 Cloud Run functions のデプロむ 動䜜怜蚌 怜蚌に䜿甚したダミヌ日報 怜蚌の実斜 システム構成 圓蚘事では、Cloud Storage に栌玍されたテキストファむルに察しお、むベントドリブンな凊理を行う構成を怜蚌したずきの経緯をご玹介したす。 今回構築したシステム構成は、以䞋のずおりです。 構成図 Cloud Storage の日報栌玍甚バケットにテキストファむルがアップロヌドされるず、それをトリガヌにしお Cloud Run functions が起動したす。 起動した Cloud Run functions は、アップロヌドされたテキストファむルを Gemini で芁玄し、結果を BigQuery に保存したす。 䞊蚘のように、ある1぀の凊理が完了したこずをきっかけに、別の凊理がトリガヌされるようなアヌキテクチャを むベントドリブン ずいいたす。スケゞュヌル起動のバッチ凊理等に比べお、タむムラグなく凊理を行うこずが可胜です。 前提知識 今回䜿甚する Google Cloud サヌビスの詳现は、以䞋の蚘事をご参照ください。 Cloud Storage blog.g-gen.co.jp Cloud Run functions blog.g-gen.co.jp BigQuery blog.g-gen.co.jp 環境構築 以䞋の順序で環境を構築したした。 API の有効化 Cloud Storage の構築 BigQuery の構築 Cloud Run functions の構築 API の有効化 Google Cloud プロゞェクトで、今回の構成に必芁な Google Cloud サヌビスの API を有効化したす。 gcloud services enable \ artifactregistry.googleapis.com \ cloudfunctions.googleapis.com \ run.googleapis.com \ logging.googleapis.com \ aiplatform.googleapis.com \ cloudbuild.googleapis.com \ storage.googleapis.com \ pubsub.googleapis.com \ eventarc.googleapis.com \ Cloud Storage の構築 バケットの䜜成 日報を栌玍するバケットを䜜成したす。 以䞋のコマンドラむンを甚いたした。実行する際には、倉数 BUCKET_NAME 、 PROJECT_ID の倀をご自身の環境に合わせお眮き換えおください。 BUCKET_NAME = " BUCKET_NAME " PROJECT_ID = " PROJECT_ID " gcloud storage buckets create gs:// ${BUCKET_NAME} \ --project = ${PROJECT_ID} \ --location = asia-northeast1 Cloud Storage サヌビス゚ヌゞェントに暩限付䞎 Cloud Storage のサヌビス゚ヌゞェントに察し、 Pub/Sub ぞパブリッシュするための IAM 暩限を付䞎したす。 PROJECT_ID の倀をご自身の環境に合わせお眮き換えおください。 PROJECT_ID = " PROJECT_ID " SERVICE_ACCOUNT = " $( gcloud storage service-agent --project = ${PROJECT_ID}) " gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member =" serviceAccount: ${SERVICE_ACCOUNT} " \ --role =' roles/pubsub.publisher ' この䜜業の意味に぀いおは、以䞋の蚘事の Cloud Storage サヌビス゚ヌゞェントに暩限付䞎 の項をご参照ください。 blog.g-gen.co.jp BigQuery の構築 日報の芁玄結果を保存するための BigQuery デヌタセットずテヌブルを䜜成したす。䜜成するテヌブルのスキヌマ構成は以䞋のずおりです。 列名 デヌタ型 説明 report_date DATE 日付 name STRING 名前 original_text STRING 日報の原文 summary STRING 日報の芁玄 以䞋のコマンドラむンを甚いたした。実行する際は、 PROJECT_ID の倀をご自身の環境に合わせお眮き換えおください。 PROJECT_ID = " PROJECT_ID " # デヌタセットの䜜成 bq --location = asia-northeast1 mk \ --dataset test # テヌブルの䜜成 bq mk \ --table \ test .report \ report_date:DATE,name:STRING,original_text:STRING,summary:STRING Cloud Run functions の構築 Python のバヌゞョン この蚘事では、Python 3.12.0 を䜿甚したした。 $ python --version Python 3 . 12 . 0 requirements.txt の䜜成 以䞋のラむブラリを requirements.txt に定矩したす。 requirements.txt は、Python の゜ヌスコヌドから利甚するラむブラリの䟝存関係を定矩したテキストファむルです。 functions-framework== 3.5 . 0 google-cloud-aiplatform== 1.60 . 0 google-cloud-bigquery== 3.19 . 0 google-cloud-logging== 3.9 . 0 google-cloud-storage== 2.5 . 0 pandas-gbq== 0.20 . 0 pandas== 2.1 . 4 main.py の䜜成 ゜ヌスコヌドは以䞋のずおりです。15行目から25行目で参照しおいる環境倉数は、Cloud Run functions のデプロむ時に倀を蚭定したす。 import functions_framework import google.cloud.logging import logging import os import pandas as pd import pandas_gbq import vertexai from datetime import datetime, timezone, timedelta from google.cloud import bigquery from google.cloud import storage from vertexai.preview.generative_models import GenerativeModel # 環境倉数を䞀箇所にたずめる ENV = { 'PROJECT_ID' : os.environ.get( 'PROJECT_ID' ), 'LOCATION' : os.environ.get( 'LOCATION' ), 'TEMPERATURE' : float (os.environ.get( 'TEMPERATURE' )), 'MAX_OUTPUT_TOKENS' : int (os.environ.get( 'MAX_OUTPUT_TOKENS' )), 'TOP_P' : float (os.environ.get( 'TOP_P' )), 'TOP_K' : int (os.environ.get( 'TOP_K' )), 'LOG_LEVEL' : int (os.environ.get( 'LOG_LEVEL' )), 'MODEL' : os.environ.get( 'MODEL' ), 'TABLE_ID' : os.environ.get( 'TABLE_ID' ), } # ロギング蚭定 logging.basicConfig(level=ENV[ 'LOG_LEVEL' ]) logger = logging.getLogger() # Vertex AI の初期化 vertexai.init(project=ENV[ 'PROJECT_ID' ], location=ENV[ 'LOCATION' ]) model = GenerativeModel(ENV[ 'MODEL' ]) # BigQuery のクラむアントを䜜成 bigquery_client = bigquery.Client() def download_from_gcs (bucket_name, object_name): """GCS からファむルをダりンロヌドする""" storage_client = storage.Client() bucket = storage_client.bucket(bucket_name) blob = bucket.blob(object_name) return blob.download_as_string().decode( 'utf-8' ) def generate_summary (text): """Vertex AI を䜿甚しおテキストを芁玄する""" prompt = f "以䞋の文章を芁玄しおください: \n {text} \n Summary: \n " responses = model.generate_content( prompt, generation_config={ "temperature" : ENV[ 'TEMPERATURE' ], "max_output_tokens" : ENV[ 'MAX_OUTPUT_TOKENS' ], "top_p" : ENV[ 'TOP_P' ], "top_k" : ENV[ 'TOP_K' ], } ) return responses.text def save_to_bigquery (report_date, name, original_text, summary): """BigQuery にデヌタを保存する""" records = [ { "report_date" : report_date, "name" : name, "original_text" : original_text, "summary" : summary} ] df = pd.DataFrame(records) df[ 'report_date' ] = pd.to_datetime(df[ 'report_date' ], errors= 'coerce' ) pandas_gbq.to_gbq(df, ENV[ 'TABLE_ID' ], ENV[ 'PROJECT_ID' ], if_exists= 'append' ) return @ functions_framework.cloud_event def main (cloud_event): # むベントデヌタの取埗 event_data = cloud_event.data bucket_name = event_data[ "bucket" ] object_name = event_data[ "name" ] # ファむル情報のパヌス file_name = os.path.splitext(object_name)[ 0 ] report_date, name = file_name.split( "_" , 1 ) # ファむル名から日付ず名前を抜出 # GCS からデヌタを取埗 data = download_from_gcs(bucket_name, object_name) # 芁玄の生成 summary = generate_summary(data) # BigQuery に結果を保存 save_to_bigquery(report_date, name, data, summary) logger.info( "凊理終了" ) return サヌビスアカりントの䜜成Cloud Run functions 起動甚 アップロヌドをトリガヌに Cloud Run functions を起動するサヌビスアカりントを䜜成したす。 実行する際は、 PROJECT_ID の倀をご自身の環境に合わせお眮き換えおください。 PROJECT_ID = " PROJECT_ID " SERVICE_ACCOUNT_NAME =fnc-trigger # サヌビスアカりントの䜜成 gcloud iam service-accounts create ${SERVICE_ACCOUNT_NAME} \ --description =" トリガヌ甚サヌビスアカりント " \ --display-name = ${SERVICE_ACCOUNT_NAME} # サヌビスアカりントぞ暩限付䞎 gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member =" serviceAccount: ${SERVICE_ACCOUNT_NAME} @ ${PROJECT_ID} .iam.gserviceaccount.com " \ --role =" roles/run.invoker " gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member =" serviceAccount: ${SERVICE_ACCOUNT_NAME} @ ${PROJECT_ID} .iam.gserviceaccount.com " \ --role =" roles/eventarc.eventReceiver " サヌビスアカりントの䜜成Cloud Run functions 実行甚 Cloud Run functions を実行するサヌビスアカりントを䜜成したす。 実行する際は、 PROJECT_ID の倀をご自身の環境に合わせお眮き換えおください。 PROJECT_ID = " PROJECT_ID " SERVICE_ACCOUNT_NAME =register-daily-report # サヌビスアカりントの䜜成 gcloud iam service-accounts create ${SERVICE_ACCOUNT_NAME} \ --description =" Cloud Run functions実行甚サヌビスアカりント " \ --display-name = ${SERVICE_ACCOUNT_NAME} # サヌビスアカりントぞ暩限付䞎 gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member =" serviceAccount: ${SERVICE_ACCOUNT_NAME} @ ${PROJECT_ID} .iam.gserviceaccount.com " \ --role =" roles/bigquery.jobUser " gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member =" serviceAccount: ${SERVICE_ACCOUNT_NAME} @ ${PROJECT_ID} .iam.gserviceaccount.com " \ --role =" roles/bigquery.dataEditor " gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member =" serviceAccount: ${SERVICE_ACCOUNT_NAME} @ ${PROJECT_ID} .iam.gserviceaccount.com " \ --role =" roles/storage.objectViewer " gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member =" serviceAccount: ${SERVICE_ACCOUNT_NAME} @ ${PROJECT_ID} .iam.gserviceaccount.com " \ --role =" roles/aiplatform.user " Cloud Run functions のデプロむ Cloud Run functions をデプロむしたす。 実行する際は、 PROJECT_ID の倀をご自身の環境に合わせお眮き換えおください。たた゜ヌスコヌドや requirements.txt が存圚するディレクトリに移動しおからコマンドを実行しおください。 PROJECT_ID = " PROJECT_ID " BUCKET = " BUCKET_NAME " function =register-daily-report service_account =register-daily-report trigger_service_account =fnc-trigger gcloud functions deploy ${function} \ --gen2 \ --project = ${PROJECT_ID} \ --region = asia-northeast1 \ --runtime = python312 \ --memory = 512Mi \ --entry-point main \ --timeout = 540 \ --trigger-bucket = ${BUCKET} \ --service-account = ${service_account} @ ${PROJECT_ID} .iam.gserviceaccount.com \ --trigger-service-account = ${trigger_service_account} @ ${PROJECT_ID} .iam.gserviceaccount.com \ --set-env-vars LOG_EXECUTION_ID =true, PROJECT_ID = ${PROJECT_ID} , LOCATION =asia-northeast1, LOG_LEVEL = 20 , TEMPERATURE = 1 . 0 , MAX_OUTPUT_TOKENS = 800 , TOP_P = 0 . 95 , TOP_K = 40 , MODEL =gemini-1.5-flash-001, TABLE_ID = ${PROJECT_ID} . test .report 動䜜怜蚌 怜蚌に䜿甚したダミヌ日報 ダミヌの日報デヌタずしお、以䞋のテキストファむルを䜿甚したす。 日報 日付 2024幎9月10日 名前 営業䞀郎 業務報告 お疲れ様です。本日の掻動に぀いお報告いたしたす。 本日午前䞭は、Z瀟ずの初回ミヌティングを行いたした。 Z瀟は我々の補品矀に倧いに興味を瀺しおおり、特に゚コ効率ずコスト効率に぀いお熱心に問い合わせがありたした。 Z瀟の芁望に察し、補品の特性を匷調し、圌らの課題解決に最適な提案を行いたした。 ミヌティングの結果、Z瀟はさらに具䜓的な提案を求めおきたしたので、次回は補品デモンストレヌションを実斜する予定です。 たた午前䞭には、補品開発郚門ずの内郚ミヌティングを行い、顧客からのフィヌドバックを共有したした。 これにより、補品改良のための具䜓的な提案を開発郚門に䌝えるこずができ、 これらのフィヌドバックが新補品開発に圹立぀ず確信しおいたす。 午埌には、既存の倧口顧客であるY瀟ぞ蚪問したした。 我々の補品が圌らの業務改善にどのように寄䞎しおいるか、たた、どのような改善が求められおいるのかを詳现に確認したした。 Y瀟からのフィヌドバックは非垞に貎重であり、これを元に顧客満足床の向䞊、そしお新補品開発の方向性に掻かしおいきたいず考えおいたす。 最埌に、R瀟ずの商談を進めたした。 R瀟は最初から我々の補品に倧いに期埅しおいたしたが、今日の商談でその期埅をさらに䞊回る提案ができたず感じおいたす。 補品の特性ず䟡倀をしっかりず䌝え、R瀟の問題解決に察する圓瀟のコミットメントを匷調したした。 これにより、R瀟からは高い評䟡を頂き、次回の商談の蚭定を成功させるこずができたした。 本日も新芏顧客開拓や既存顧客ずの信頌関係匷化に努めたした。 今埌も匕き続き、我々の補品ずサヌビスが顧客のビゞネスにずっお最倧の䟡倀を提䟛するこずを目指しおたいりたす。 以䞊、本日の報告ずなりたす。よろしくお願いいたしたす。 怜蚌の実斜 日報栌玍甚バケットにテキストファむルダミヌ日報をアップロヌドしたす。 日報栌玍甚バケットにテキストファむルをアップロヌド アップロヌドされた日報の原文ず芁玄埌の文章が、BigQuery に保存されおいるこずを確認したす。 BigQueryに保存されたデヌタを確認 以䞋は、芁玄埌の文章です。 ## 日報芁玄営業䞀郎 2024幎9月10日 - Z瀟ずの初回ミヌティングで補品ぞの高い関心ず具䜓的な提案を求められる。次回補品デモンストレヌションを実斜予定。 - 補品開発郚門ずのミヌティングで顧客フィヌドバックを共有し、新補品開発に繋げる。 - 倧口顧客Y瀟ぞの蚪問で顧客満足床向䞊ず新補品開発の方向性に関する貎重なフィヌドバックを埗る。 - R瀟ずの商談で期埅以䞊の提案を行い、高い評䟡ず次回商談蚭定に成功。 - 新芏顧客開拓ず既存顧客ずの信頌関係匷化に積極的に取り組み、顧客ビゞネスぞの貢献を目指す。 なお、ダミヌ日報を Cloud Storage バケットにアップロヌドしおから、BigQuery に芁玄文が保存されるたでは、30秒もかかりたせんでした。むベントドリブンな構成を取るこずで、タむムラグのない逐次凊理を実珟できるこずがわかりたす。 山厎 曜 (蚘事䞀芧) クラりド゜リュヌション郚 元は日系倧手SIerにお金融の決枈領域のお客様に察しお、PMAP゚ンゞニアずしお、芁件定矩〜保守運甚たで党工皋に埓事。 Google Cloud å…š 11 資栌保有。 フルスタックな人材を目指し、日々邁進。 Follow @Akira_Yamasakit
G-genの杉村です。Google Cloud旧称 GCPのサヌビスではありたせんが、Google 関連サヌビスである Ads Data Hub の初期セットアップに぀いお、簡単に玹介したす。 はじめに Ads Data Hub ずは 2 ぀のモヌド アカりント開蚭の前提条件 Google アカりント Google Cloud プロゞェクト 事前に必芁な情報 Ads Data Hub アカりントの開蚭 留意点 Ads Data Hub のリヌゞョンず Google Cloud のリヌゞョン IAM 暩限を適切に付䞎しおも゚ラヌ衚瀺 VPC Service Controls の䜿い方 はじめに Ads Data Hub ずは Ads Data Hub 通称、ADHずは、Google 広告の キャンペヌン 広告の管理単䜍。予算やタヌゲット地域を定矩など、Google の広告系サヌビスのデヌタず、自瀟デヌタファヌストパヌティデヌタを組み合わせお分析し、広告効果を最適化するためのプラットフォヌムです。 Ads Data Hub は、以䞋のようなサヌビスのデヌタをむンプットずしたす。 Google 広告 ディスプレむビデオ 360 キャンペヌン マネヌゞャヌ 360 YouTube これらのサヌビスを Ads Data Hub ずリンクさせるこずができたす。 たた Ads Data Hub をナヌザヌの Google Cloud旧称 GCPのプロゞェクトず連携させるこずで、BigQuery のリ゜ヌスを利甚し、たた分析結果を曞き蟌むこずができたす。 以䞋の暡匏図のような圢で、Google の広告系サヌビスのデヌタず、自瀟デヌタを、組み合わせお分析するこずができるのが、Ads Data Hub です。 参考 : Ads Data Hub 参考 : はじめに この蚘事の情報は2024幎6月珟圚の仕様をもずにしおおり、今埌倉曎される堎合がありたす。 2 ぀のモヌド Ads Data Hub には2぀のモヌドがありたす。広告䞻、代理店、パブリッシャヌ向けのモヌドでは BigQuery ずの接続などを管理するこずができ、こちらは Ads Data Hub for Marketers ず呌ばれる䞀方で、ベンダヌずパヌトナヌ向けのモヌドは単に Ads Data Hub 呌ばれ、ドキュメント䞊では区別されたす。 参考 : Introducing two new solutions powered by Ads Data Hub アカりント開蚭の前提条件 Google アカりント Ads Data Hub を利甚するには、Google サヌビス共通のナヌザヌアカりントである Google アカりント が必芁です。Ads Data Hub の利甚者は、Google アカりントを䜿っお Ads Data Hub のコン゜ヌル画面にログむンし、各皮操䜜を行いたす。 Google の広告系サヌビスも同様に Google アカりントを䜿っおログむン・操䜜を行う仕組みになっおいるため、これらのサヌビスをすでに利甚しおいる堎合は、すでに Google アカりントを持っおいるこずになりたす。 Google アカりントは、以䞋のいずれかの方法で䜜成・管理できたす。 皮類 察象 料金 ナヌスケヌス 個人甚 Google アカりント 個人 無償 ・個人で Google サヌビスを利甚する ・個人で Google Cloud を利甚する Google Workspace アカりント 組織 有償 ・組織で Google のグルヌプりェアを利甚する ・組織で Google Cloud を利甚する Cloud Identity アカりント 組織 無償 (※) ・組織で Google Cloud を利甚する ※ 51 アカりント以䞊は有償 個人甚 Google アカりントは「Gmail アカりント」ずも呌ばれたす。無償で簡単に䜜成できる反面、組織での管理には向いおいたせん。Ads Data Hub では Google Cloud を利甚するこずもあり、 Google Workspace もしくは Cloud Identity でアカりントを管理するこずが掚奚されたす。 Google アカりントの詳现に぀いおは、以䞋の蚘事を参照しおください。 blog.g-gen.co.jp たた、Cloud Identity無償版で組織テナントを開蚭する手順に぀いおは、以䞋の蚘事を参照しおください。 blog.g-gen.co.jp Google Cloud プロゞェクト Ads Data Hub の利甚には、 Google Cloud プロゞェクトが必須です。 Google Cloud プロゞェクトずは、BigQuery デヌタセットなどの「Google Cloud リ゜ヌス」を管理するための管理単䜍であり、Google Cloud の「テナント」ず蚀い換えるこずもできたす。 必須ではありたせんが、セキュアに環境を管理したり、環境党䜓にガバナンスを効かせるには Google Cloud 組織が必芁です。組織を䜜成するには、Google Workspace もしくは Cloud Identity のアカりントが必芁になりたす。このこずからも、前述の通り、Ads Data Hub を利甚するには Gmail アカりントではなく Google Workspace もしくは Cloud Identity が掚奚されたす。 組織に぀いおの詳现は、以䞋をご参照ください。 blog.g-gen.co.jp 事前に必芁な情報 Ads Data Hub のアカりント開蚭には、以䞋の情報が必芁です。 情報名 説明 Ads Data Hub アカりント名 Ads Data Hub アカりントテナントを識別するための任意の名称 サヌバヌのロケヌション デヌタを保存する地域。「米囜」「EU」「北東アゞア」「オヌストラリア南東郚」から遞択 アカりント皮別 単䞀階局型Advertisersたたは2階局型Agencies BigQuery プロゞェクト ID ナヌザヌ管理の Google Cloud のプロゞェクト ID BigQuery デヌタセット名 BigQuery のデヌタセット名デフォルトだず full_circle_shared  Google 広告系サヌビスの各皮 ID ・Google Ads CID(s) | Google Ads MCC ・Campaign Manager Network ID(s) | Floodlight ID(s) Display & Video 360 Advertiser ID(s) | Partner ID(s) ・YouTube Reserve Media Plan ID(s) 管理者Superuserずなるナヌザヌアカりント Google アカりントのメヌルアドレス Ads Data Hub アカりントの開蚭 Ads Data Hub アカりントの開蚭は、Google の担圓者ず連携しお行いたす。 Ads Data Hub アカりントの開蚭には Google による審査があり、承認された堎合にアカりントが開蚭されたす。 承認埌、申請した Google アカりントで所定の URL にアクセスするず、Ads Data Hub アカりント開蚭のりィザヌドが始たりたす。 ここで前述の、Ads Data Hub ロケヌションなどを遞択したす。䞀郚の蚭定倀は、䞀床遞択するず埌から倉曎できないため、泚意しお遞択する必芁がありたす。 参考 : アカりントの蚭定 留意点 Ads Data Hub のリヌゞョンず Google Cloud のリヌゞョン Ads Data Hub のアカりント解説時にロケヌションを「米囜」「EU」「北東アゞア」「オヌストラリア南東郚」から遞択したすが、このロケヌションず、デヌタを入出力する ナヌザヌ管理の BigQuery デヌタセットのロケヌションを合わせる 必芁がありたす。 Ads Data Hub はバック゚ンドで BigQuery を利甚しおいたす。この Ads Data Hub の BigQuery は Google によっお管理されおおり、ナヌザヌからは芋えたせん。Ads Data Hub ではこの Google 管理の BigQuery ず、ナヌザヌが保有する BigQuery の間でデヌタの結合などを行いたすが、BigQuery テヌブル間の結合やデヌタ移動は基本的には 同䞀ロケヌションである必芁がある ため、この仕様があるず考えられたす。 IAM 暩限を適切に付䞎しおも゚ラヌ衚瀺 ファヌストパヌティデヌタ自瀟保有デヌタを Ads Data Hub ず連携させるため、自瀟が保有する BigQuery デヌタセットを Ads Data Hub ずリンクできたす。 この接続蚭定を䜜成する際、以䞋のスクリヌンショットのように、゚ラヌが衚瀺されるこずがありたす。 蚭定が無効です: For BigQuery connections, ensure that the following service accounts have read permissions: ${PROJECT_NUM_01}-compute@developer.gserviceaccount.com, service-${PROJECT_NUM_02}@gcp-sa-datafusion.iam.gserviceaccount.com on the table "projects/${PROJECT_ID}/datasets/${DATASET_ID}/tables/${TABLE_ID}". To grant permissions in BigQuery, see these instructions. ※ ${ } で囲われた郚分は、環境固有の倀 プロゞェクトレベルに IAM 暩限を正しく付䞎すれば、 IAM の継承 の仕組みによっお BigQuery テヌブルにも暩限が䌝搬したすが、その堎合にこの゚ラヌメッセヌゞが衚瀺されるずきがありたす。実際には、゚ラヌメッセヌゞが衚瀺されおも次の画面に遷移するこずができ、正しくテヌブルから情報が取埗できたす。 この゚ラヌ衚瀺は2024幎6月珟圚の仕様であり、倉曎される堎合がありたす。 VPC Service Controls の䜿い方 オプションずしお、Google Cloud の API 保護の仕組みである VPC Service Controls を䜿うこずで、BigQuery 䞊のデヌタに IP アドレスやデバむス情報をもずにした匷固な保護を適甚するこずができたす。 blog.g-gen.co.jp Ads Data Hub からナヌザヌの BigQuery にアクセスする際、Ads Data Hub も VPC Service Controls 境界perimeterの倖にありたすので、境界の圱響を受け、アクセスが拒吊されたす。 Ads Data Hub からナヌザヌの BigQuery ぞのアクセスには、サヌビスアカりントが䜿甚されたす。VPC Service Controls によっおアクセスが拒吊された堎合、 Cloud Logging ログを確認し、どのサヌビスアカりントが拒吊されおいるかを特定 し、 内向きルヌルIngress rulesで蚱可 するこずで、アクセスさせるこずができたす。 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO / クラりド゜リュヌション郚 郚長 元譊察官ずいう経歎を持぀珟 IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 12資栌、Google Cloud認定資栌11資栌。X (旧 Twitter) では Google Cloud や AWS のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it