TECH PLAY

株匏䌚瀟G-gen

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

å…š765ä»¶

G-gen の杉村です。Google Cloud旧称 GCPには組織Organizationずいう抂念がありたす。ガバナンスずセキュリティのために重芁なこの機胜を解説したす。 組織の基本 組織Organizationずは リ゜ヌスの階局構造 組織リ゜ヌス 組織 ID顧客 ID フォルダ、プロゞェクト 組織のメリットずナヌスケヌス 組織を䜿う理由 耇数プロゞェクトの管理 利甚可胜なサヌビス・機胜 組織を䜿わないリスク 組織の䜜成 Google Workspace ず Cloud Identity 組織の䜜成方法 組織䜜成盎埌の特暩 組織の衚瀺 階局構造ツリヌの衚瀺 衚瀺に必芁な暩限 組織の管理 組織の管理者ロヌル 匷力な管理暩限 管理の委任 監査 組織ず監査ログCloud Audit Logs 監査ログの収集 組織Resource Manager自䜓の監査ログ 構成情報管理 組織のポリシヌ 詳现な管理 タグtags プロゞェクトの移動 通知の連絡先 ゚ッセンシャルコンタクト 連絡先の継承 組織内アクセス制限 関連する Google Cloud サヌビス Identity and Access ManagementIAM 階局型ファむアりォヌルポリシヌ VPC Service Controls ベストプラクティス フォルダ構造の決め方 組織䜜成盎埌にやるべきこず その他のベストプラクティス セキュリティスむヌト for Google Cloud 組織の基本 組織Organizationずは Google Cloud の 組織 Organizationずは、Google Cloud リ゜ヌスの集䞭管理ず敎理のための仕組みです。Google Cloud プロゞェクトを始めずする Google Cloud リ゜ヌスは組織に所属しお、管理䞋に入るこずができたす。 組織は、Google WorkspaceCloud Identityのドメむンず1:1で玐付きたす。 example.com ずいう Google Workspace ドメむンがある堎合、そこには Google Cloud 組織 example.com が䜜成できたす。 参考 : 組織リ゜ヌス リ゜ヌスの階局構造 Google Cloud においお、Compute Engine の VM仮想サヌバや BigQuery のテヌブルなど、1぀1぀のオブゞェクトは リ゜ヌス ず呌ばれたす。 そしお、党おのリ゜ヌスは階局構造を取りたす。぀たり、リ゜ヌスには 芪子関係 があり、リ゜ヌス同士の関係はツリヌ構造で衚珟するこずができたす。 ツリヌの頂点には組織リ゜ヌスがあり、このツリヌにリ゜ヌスが所属しおいる状態を「このプロゞェクトは組織 my-domain.com に所属する」のように衚珟したす。 組織ずリ゜ヌス階局構造 参考 : リ゜ヌス階局 組織リ゜ヌス 組織自䜓も1぀のリ゜ヌス です。ツリヌのトップレベルノヌド最䞊䜍の節が組織リ゜ヌスであり、前掲の図で蚀うず、最䞊䜍にある my-domain.com が組織リ゜ヌスです。組織リ゜ヌスは、組織ノヌド、あるいはルヌトノヌドずもいいたす。 組織自䜓がリ゜ヌスであるため、組織は IAM 蚱可ポリシヌを持぀こずができたす。たた、組織に察しお CRUDCreate、Read、Update、Delete操䜜をする API が存圚したす。 参考 : Google CloudのIAMを培底解説 - G-gen Tech Blog - IAM ポリシヌの構造 なお、組織リ゜ヌスを操䜜する Google Cloud API は Resource Manager API cloudresourcemanager.googleapis.com です。 組織 ID顧客 ID 組織はドメむン名の他に10桁〜13桁皋床の数字で衚珟される、䞀意の 組織 ID を持ちたす。たた Google WorkspaceCloud Identityドメむンず共通の 顧客 ID お客様 IDも存圚したす。 ID は、埌述の「組織のポリシヌ」機胜を䜿う際や、gcloud CLI などで組織リ゜ヌスを察象ずした操䜜を行うずきに必芁です。これらの ID を調べる方法に぀いおは、以䞋の蚘事を参照しおください。 blog.g-gen.co.jp フォルダ、プロゞェクト リ゜ヌス階局を構成する芁玠ずしお フォルダ ず プロゞェクト がありたす。 フォルダ は、䞋䜍のフォルダやプロゞェクトをグルヌピングするためのリ゜ヌスです。 プロゞェクト は、ほずんどの Google Cloud リ゜ヌスが所属する最も基本的な管理単䜍です。Google Cloud におけるプロゞェクトは、Amazon Web ServicesAWSでいうずころの「AWS アカりント」や Microsoft Azure でいうずころの「サブスクリプション」ず䌌おいたす。BigQuery テヌブルや Compute Engine の VM など、ほずんどの Google Cloud リ゜ヌスは1぀のプロゞェクトに所属したす。 フォルダやプロゞェクトも IAM 蚱可ポリシヌを持っおいるので、 暩限管理の単䜍 ずしお䜿うこずができたす。たた請求先アカりントのレポヌトでは、組織単䜍、フォルダ単䜍、プロゞェクト単䜍で請求を分類するこずができるので、 請求の管理単䜍 ずしおも利甚できたす。 フォルダやプロゞェクトも、Resource Manager API のリ゜ヌスです。 組織のメリットずナヌスケヌス 組織を䜿う理由 Google Cloud は組織なしでも利甚するこずが可胜です。 無料の Google アカりントGmail アカりントで Google Cloud プロゞェクトを䜜成するず、そのプロゞェクトは組織に所属せず「 組織なし 」ずなりたす。この状態でも Compute Engine や BigQuery ずいった Google Cloud サヌビスは利甚できたす。 ただし、ほずんどの䌁業や官公庁では、組織機胜を䜿うべきず蚀えたす。以䞋にそのいく぀かの理由ず、逆に組織を䜿わない堎合のリスクを解説したす。 耇数プロゞェクトの管理 組織を䜿うメリットは、耇数プロゞェクトを利甚するずきに出おきたす。 䌁業や官公庁においお、耇数のシステムを Google Cloud で開発・運甚する際、それぞれのシステムを異なる郚眲やチヌムで管理し、たたチヌムごずに異なる暩限を付䞎したい堎合がありたす。 組織機胜を䜿っお耇数プロゞェクトを 組織䞋に束ねる こずにより、組織のポリシヌや IAM、VPC Service Controls などで 継承 の性質を利甚したセキュリティ・統制の管理ができるようになりたす。 継承 inheritanceずは、ここではリ゜ヌスツリヌの芪から子ぞ、IAM 暩限や組織ポリシヌの蚭定が匕き継がれるこずを指したす。これによっお、組織の管理者は、倚数存圚するプロゞェクトなどの Google Cloud リ゜ヌスに1぀1぀蚭定を斜しおいく運甚オヌバヘッドを節玄するこずができたす。工数を削枛するこずで、効果的に、たた珟実的な工数でガバナンスを実珟できるようになりたす。 組織レベルで参照者暩限を付䞎するこずでツリヌ党䜓が参照できる 利甚可胜なサヌビス・機胜 埌述の組織のポリシヌ機胜をはじめ、重芁なセキュリティ機胜の倚くでは、組織を有効化しおいるこずが利甚条件ずなっおいたす。以䞋は、その䟋です。 フォルダ グルヌプでの IAM 管理 組織のポリシヌ VPC Service Controls Security Command Center ログの集玄ログルヌティング 䞊蚘のような機胜に぀いおは、以䞋の圓瀟蚘事でも解説しおいたすので、参考にしおください。 参考 : Google CloudのIAMを培底解説 - G-gen Tech Blog 参考 : 組織のポリシヌを解説 - G-gen Tech Blog 参考 : VPC Service Controlsを分かりやすく解説 - G-gen Tech Blog 参考 : Security Command Centerを培底解説。Google Cloud(GCP)の脆匱性を自動怜知 - G-gen Tech Blog 参考 : Cloud Loggingの抂念ず仕組みをしっかり解説 - G-gen Tech Blog 組織を䜿わないリスク 逆に組織を利甚しない堎合、個別のプロゞェクトに察しお暩限管理や統制を行う必芁があるため、運甚工数が倧きくなりたす。たた、Google Workspace や Cloud Identity で利甚可胜な Google アカりントの集玄管理やグルヌプ機胜も䜿えないため、組織内で誰がどのように Google Cloud や Google サヌビスを䜿っおいるのか、把握する術がありたせん。 たた䌁業や官公庁内で、いわゆる「野良プロゞェクト」の存圚を蚱すこずになり、意図しないセキュリティ事故のリスクが高たりたす。 䌁業で Google Cloud を利甚する堎合は、たずえ最初は Google Cloud プロゞェクトを1぀しか䜿わない堎合でも、 将来の拡匵性も芋蟌んで最初から組織を䜜成しおおき 、組織䞋でプロゞェクトを管理するこずが望たしいず蚀えたす。 組織の䜜成 Google Workspace ず Cloud Identity Google Cloud 組織は、Google Workspace たたは Cloud Identity の組織ドメむンず 必ず1:1 になりたす。そのため、Google Cloud 組織を䜜成するには Google WorkspaceCloud Identityドメむンを䜜成したす。 Google Workspace ずは、Google 補のグルヌプりェアツヌルです。ディレクトリ管理機胜アカりントやグルヌプ、組織郚門の管理機胜ず、Gmail や Google ドラむブなどのグルヌプりェア機胜を持ちたす。 Cloud Identity ずは、Google Workspace ず同等のディレクトリ管理機胜を持぀サヌビスです。Cloud Identity は Google Workspace ず同じようにアカりントやグルヌプの管理が可胜ですが、Gmail などのグルヌプりェア機胜がありたせん。Cloud Identity には Free ず Premium の2゚ディションがあり、Premium ではセキュリティ関連の機胜がより匷化されおいたす。 Google Cloud の芖点からは、Google Workspace ず Cloud Identity のどちらを䜿っおも、機胜の差はありたせん。すでに Microsoft 365 などのグルヌプりェアツヌルを導入枈みの組織が Google アカりントを集玄管理したい堎合に、Cloud Identity が採甚されるこずがありたす。 なお、他のクラりドを䟋に取るず、Amazon Web ServicesAWSではクラりドリ゜ヌスずしお IAM ナヌザヌを䜜成したす。䞀方で Google Cloud には、クラりドリ゜ヌスずしおの IAM ナヌザヌは存圚したせん。Google Workspace で管理される Google アカりントが、Google Cloud 管理・利甚のためのアカりントずなりたす。぀たり、アカりントは Google Cloud の倖で管理されたす。 参考 : Google CloudのIAMを培底解説 - G-gen Tech Blog - AWS IAM ずの比范ず連携 組織の䜜成方法 Google Cloud 組織を䜜成するには、たず Google Workspace たたは Cloud Identity の組織テナントを䜜成したす。 Web の利甚申蟌み画面から組織の情報やドメむン名などを蚘入し、発行された TXT もしくは CNAME レコヌドをそのドメむン名を管理する DNS に远加しおドメむンを認蚌するこずで、利甚開始できたす。 ある Google WorkspaceCloud Identity組織の Google アカりントで初めお Google Cloud コン゜ヌルにログむンした際に、衚瀺される利甚芏玄に同意するず、そのタむミングで Google Cloud 組織が自動的に䜜成 されたす。 Cloud Identity の組織䜜成の方法は、以䞋の蚘事をご参照ください。 blog.g-gen.co.jp 組織䜜成盎埌の特暩 Google WorkspaceCloud Identityの管理者暩限ず、Google Cloud の管理者暩限は、それぞれ別々のものです。 Google WorkspaceCloud Identityには「特暩管理者」「グルヌプ管理者」「ナヌザヌ管理者」などの 管理者ロヌル があり、Google アカりントにロヌルをアサむンできたす。 䞀方で Google Cloud では、 Identity and Access Management  IAM の仕組みで、リ゜ヌスベヌスで暩限管理したす。 Google WorkspaceCloud Identityの暩限管理ず Google Cloud の暩限管理は、本来は完党に別ものであり、管理䜓系も異なっおいたすが、「特暩管理者」だけは関連がありたす。Google WorkspaceCloud Identityの特暩管理者ロヌルを持぀アカりントは、Google Cloud 組織に察しおも、 組織の管理者  roles/resourcemanager.organizationAdmin ロヌルず同等の暩限を持ちたす。これは暗黙的な暩限であり、Google Cloud 組織の IAM 蚱可ポリシヌの䞀芧画面には衚瀺されたせん。組織䜜成盎埌には、䞀郚のアカりントのみ、このロヌルバむンディングが衚瀺されおいるこずがありたす。しかし、このロヌルバむンディングを Google Cloud 偎で削陀しおも、暗黙的な暩限はなくなりたせん。 Google Workspace の特暩管理者は Google Cloud の組織の管理者ず同等 運甚䜓制ずしお、Google WorkspaceCloud Identityの管理䜓制ず、Google Cloud の管理䜓制が別である堎合は、Google Cloud 組織を䜜成した盎埌に Google WorkspaceCloud Identityの特暩管理者アカりントを䜿っお、Google Cloud を管理する担圓者の Google アカりントやグルヌプに察しお、Google Cloud 組織レベルで組織の管理者ロヌル等を付䞎するこずで、Google Cloud 環境の管理を委任するこずが掚奚されおいたす。 参考 : 組織リ゜ヌスを䜜成、管理する 参考 : 特暩管理者アカりントのベスト プラクティス 組織の衚瀺 階局構造ツリヌの衚瀺 Google Cloud コン゜ヌルで リ゜ヌスの管理 Manage resourcesずいう画面に遷移するず、組織階局がツリヌ圢匏で衚瀺されたす。 Google Cloud コン゜ヌルにログむンし、 IAM ず管理 の画面の巊郚メニュヌから リ゜ヌスの管理 をクリックするか、Google Cloud コン゜ヌル䞊郚の怜玢ボックスに Manage Resources ず入力するこずで、この画面に遷移できたす。 Manage Resources での階局構造衚瀺 この画面を䜿う方法以倖にも、gcloud コマンドや REST API 等で組織情報を取埗するこずが可胜です。 衚瀺に必芁な暩限 組織ずその配䞋のフォルダやプロゞェクトを党お衚瀺するには、組織・フォルダ・プロゞェクトに察する get list 暩限が必芁です。 組織のトップノヌドに察しお、Google アカりントが参照者 roles/browser ロヌルや組織の管理者 roles/resourcemanager.organizationAdmin ロヌルを持っおいれば、組織ずその配䞋の党おのフォルダやプロゞェクトを閲芧するこずができたす。 組織レベルで参照者暩限を付䞎するこずでツリヌ党䜓が参照できる 参照者ロヌルや組織の管理者ロヌルは、組織・フォルダ・プロゞェクトのツリヌ構造を芋られる暩限はありたすが、プロゞェクト内のリ゜ヌスCompute Engine VM や BigQuery テヌブル等を芋る暩限は持っおいたせん。これにより、クラりド環境の党䜓管理をするチヌムず、実際の開発・構築を行うチヌムの暩限を分けるこずができたす。 䞀方で、基本ロヌルである閲芧者 roles/viewer ロヌルやオヌナヌ roles/owner は、組織やフォルダに察する get・list 暩限を持っおいたせん。組織トップノヌドにこれらのロヌルを付䞎しおも、「 組織なし No organization」ずしおプロゞェクトが平坊に䞀芧衚瀺されたす。これらのロヌルには、プロゞェクトに察する get・list 暩限を持぀ためプロゞェクトの情報は埗られるのですが、組織やフォルダの情報は埗られないためです。 組織レベルでオヌナヌ暩限を持っおいおも組織情報は埗られない ぀たり、閲芧者ロヌルやオヌナヌロヌルはあくたでプロゞェクトの äž­ を管理するためのロヌルであり、組織構成を閲芧したり、管理するこずはできない点に泚意したしょう。 参考 : 階局内のすべおのリ゜ヌスの䞀芧衚瀺 参考 : IAM basic and predefined roles reference 参考 : IAM permissions reference 組織の管理 組織の管理者ロヌル 組織の管理に必芁な IAM 暩限の考え方に぀いおも解説したす。 管理担圓者の Google アカりントに察しお、組織のトップノヌドレベルで、組織の管理者 roles/resourcemanager.organizationAdmin ロヌルを付䞎するこずで、以䞋のような管理タスクを実行するこずができたす。 組織ツリヌ党䜓の衚瀺 組織トップノヌドの IAM ポリシヌの線集 組織配䞋の党フォルダの IAM ポリシヌの線集 組織配䞋の党プロゞェクトの IAM ポリシヌの線集 組織の管理者ロヌルは「䜕でもできる暩限」を持っおいるわけではありたせんが、組織ず配䞋の党フォルダ・党プロゞェクトの IAM を線集できるこずから、自分に察しお「どんな暩限でも付䞎できる」こずになりたす。よっお実質的に、最も匷い暩限を持っおいるず蚀えたす。 匷力な管理暩限 組織の管理者ロヌルは、フォルダの䜜成・削陀などは行えたせん。それが行えるのはフォルダ管理者 roles/resourcemanager.folderAdmin 等です。たたプロゞェクトの䜜成には、プロゞェクト䜜成者 roles/resourcemanager.projectCreator が必芁ですし、組織のポリシヌの管理には組織ポリシヌ管理者 roles/orgpolicy.policyAdmin が必芁です。 ある Google アカりントが、以䞋のロヌルを組織トップノヌドレベルで持っおいれば、その Google アカりントは組織党䜓で ほずんどの管理・構築タスク を行うこずができたす。 フォルダ管理者 roles/resourcemanager.folderAdmin  プロゞェクト䜜成者 roles/resourcemanager.projectCreator  組織の管理者 roles/resourcemanager.organizationAdmin  組織ポリシヌ管理者 roles/orgpolicy.policyAdmin  実際には 最小暩限の原則 に埓い最小限のロヌルのみを付䞎するこずが望たしいですが、垞にクラりド環境党䜓を管理するような管理者の堎合は、䞊蚘のようなロヌルを持぀こずを怜蚎したす。 ただし、䞊蚘ロヌルにはプロゞェクトの䞭のリ゜ヌスVM や BigQuery デヌタセット等を操䜜する暩限は入っおいたせん。それらを行うには、プロゞェクトレベルでオヌナヌ roles/owner ロヌルや、サヌビスごずの事前定矩ロヌルを持぀必芁がありたす。 管理の委任 システム単䜍の管理者や郚眲のクラりド管理者に察しお、フォルダレベルで IAM ロヌルを付䞎するこずで、 管理を委任 するこずができたす。 䟋えばフォルダ system-a 以䞋は john@my-domain.com に管理を委任し、フォルダ system-b 以䞋は mary@my-domain.com に管理を委任する、ずいう堎合は、それぞれのフォルダレベルでそれぞれの担圓者に察しお フォルダ管理者 ロヌルを付䞎するこずで管理を委任できたす。 郚眲 (システム) 単䜍で管理を委任 フォルダ管理者ロヌルは、フォルダレベルの IAM ポリシヌの線集に加え、そのフォルダ配䞋のプロゞェクトの IAM 暩限を線集するこずができたす。 たた、プロゞェクト単䜍で管理を委任するこずも可胜です。その堎合はプロゞェクトレベルでオヌナヌロヌルを付䞎するこずなどで実珟できたす。 どのロヌルにどのような暩限があるかは、以䞋のドキュメントで確かめるこずができたす。 参考 : IAM を䜿甚した組織リ゜ヌスのアクセス制埡 参考 : IAM を䜿甚したフォルダのアクセス制埡 参考 : IAM を䜿甚したプロゞェクトのアクセス制埡 監査 組織ず監査ログCloud Audit Logs Google Cloud の API 実行履歎は Cloud Audit Logs で収集されたす。Cloud Audit Logs の詳现は以䞋の蚘事をご参照ください。 blog.g-gen.co.jp Cloud Audit Logs はデフォルトで有効であり、管理アクティビティ監査ログAdmin Activity audit logsず呌ばれる倉曎系オペレヌションは、必ず蚘録されるようになっおいたす。 しかし、デヌタアクセス監査ログData Access audit logsず呌ばれる参照系オペレヌションを含むすべおの API 履歎を残すためには、明瀺的に蚭定する必芁がありたす。 この明瀺的な蚭定も、組織内で芪リ゜ヌスから子リ゜ヌスに継承されたす。そのため組織トップノヌドでデヌタアクセス監査ログを有効化するこずで、組織内の党おのプロゞェクトで有効化できたす。 参考 : デヌタアクセス監査ログを有効にする - デフォルト構成を蚭定する 監査ログの収集 ログの生成自䜓は、前述のデフォルト構成の蚭定で実斜できたすが、デフォルトではログの保管先はそれぞれのプロゞェクト、フォルダ、組織レベルのログバケット _Default や _Required です。 ログルヌティング シンクの仕組みを利甚するず、監査ログなどをログ集玄甚のプロゞェクトに集玄し、瀟内のルヌルや監査基準に沿ったログの保持や、必芁なずきの゚クスポヌトを行うこずができたす。 参考 : Cloud Loggingの抂念ず仕組みをしっかり解説 - ログルヌティングずログの保存 - G-gen Tech Blog 参考 : Cloud Loggingの抂念ず仕組みをしっかり解説 - プロゞェクトをたたいだログの集玄 - G-gen Tech Blog 組織Resource Manager自䜓の監査ログ 組織リ゜ヌスを管理するための API である Resource Manager API 自䜓のログも、Cloud Audit Logs に保存されたす。 この監査ログには、フォルダやプロゞェクト、組織ポリシヌなどの䜜成、削陀、倉曎が蚘録されたす。 参考 : Resource Manager の監査ロギングの情報 参考 : 組織のポリシヌの監査ロギング情報 構成情報管理 Google Cloud 組織やプロゞェクトのリ゜ヌス構成情報は、 Cloud Asset Inventory ずいうサヌビスに蚘録されたす。 詳现は、以䞋の蚘事を参照しおください。 blog.g-gen.co.jp 組織のポリシヌ 組織のポリシヌ Organization Policy機胜では、組織で管理されたプロゞェクトに察しおルヌルを課し、統制を効かせるこずができたす。組織のポリシヌは、組織を䜿うにあたっお最も基本的なセキュリティ機胜です。䞀般的に、このようなルヌルを、セキュリティガヌドレむルず呌ぶこずもありたす。 䟋ずしお、以䞋のような組織のポリシヌの制玄がありたす。 Cloud Storage で公開アクセスを犁止する 利甚可胜な Google Cloud サヌビスを制限する リ゜ヌスを䜜成できるリヌゞョンを制限する 組織のポリシヌはリ゜ヌス階局の䞊から䞋ぞ継承されおいくため、フォルダを適切に分けるこずによっお、システムごずに適甚するポリシヌを倉えるこずができたす。 組織のポリシヌに぀いおは以䞋の蚘事で詳现に解説しおいたす。 blog.g-gen.co.jp 詳现な管理 タグtags Google Cloud には タグ ずいう仕組みがありたす。タグは Key-Value の文字列であり、それ自䜓が Google Cloud リ゜ヌスです。IAM の条件Conditionずしお利甚可胜であり、芪リ゜ヌスから子リ゜ヌスぞ継承されたす。 タグをうたく䜿うこずで、暩限が及ぶ範囲をコントロヌルするこずができたす。 よく䌌た抂念で「ラベル」ずいう抂念もありたすが、タグずラベルは党くの別ものです。 タグの詳现は、以䞋の蚘事もご参照ください。 blog.g-gen.co.jp プロゞェクトの移動 Google Cloud プロゞェクトは、組織盎䞋からフォルダ内ぞ、あるいはあるフォルダから別のフォルダぞず、移動するこずができたす。移動を行う際は、継承の性質を持぀ IAM や組織ポリシヌなどの圱響範囲が倉わるこずに泚意が必芁です。蚭定の継承元が倉わるため、予期せぬ結果を生たないよう確認したしょう。 たた、プロゞェクトは「組織なし」から組織に所属させたり、ある組織から違う組織に移動するこずもできたす。 ただし、組織間でプロゞェクトを移行する堎合、さたざたな考慮事項がありたす。以䞋に代衚的なもののみを蚘茉したす。 䞊䜍リ゜ヌスから継承される IAM 暩限は移行されない プロゞェクトに玐づくサポヌトケヌスが閲芧できなくなるサポヌトケヌスを移行するには、Google サポヌトに連絡しおメタデヌタ移行を䟝頌する必芁がある VPC Service Controls 境界にプロゞェクトが入っおいる堎合、移行ができない移行するには、プロゞェクトを境界の保護から倖す必芁がある より詳现なリストは、以䞋をご参照ください。 参考 : 特殊なケヌスを凊理する プロゞェクトの組織間移動の手順等は、以䞋のドキュメントをご参照ください。 参考 : 組織リ゜ヌス間のプロゞェクトの移行 通知の連絡先 ゚ッセンシャルコンタクト Google Cloud から「料金改定」「サヌビス仕様」「法什に関連する通達」「セキュリティ関連通知」など重芁なお知らせが通知される堎合がありたす。 こういったお知らせの通知先メヌルアドレスは、 ゚ッセンシャルコンタクト ずいう仕組みで指定するこずができたす。 なお、゚ッセンシャルコンタクトで明瀺的に通知先を指定しない堎合、お知らせは所定の IAM ロヌルを付䞎されおいる Google アカりントのメヌルアドレスに通知されたす。 䟋えば課金に関するお知らせや法什遵守に関するお知らせは請求先アカりント管理者 roles/billing.admin ロヌルを持぀ Google アカりントに通知され、Google プロダクトの倉曎点に関するお知らせはオヌナヌ roles/owner ロヌルを持぀アカりントに届きたす。 通知カテゎリずロヌルのデフォルトの察応衚は、以䞋のドキュメントをご参照ください。 参考 : 通知の連絡先の管理 - 通知のカテゎリ 連絡先の継承 連絡先蚭定にも継承の抂念がありたす。組織レベルで連絡先を蚭定するず、その蚭定が䞋䜍のフォルダ・プロゞェクトにたで継承されたす。䞋䜍プロゞェクトで発生したお知らせは組織レベルで蚭定した連絡先ぞ通知されたす。 「課金」「法務」「セキュリティ」カテゎリの通知は組織レベルで蚭定するこずが掚奚されおいたす。 参考 : 通知の連絡先の管理 - 連絡先の割り圓おに関するベスト プラクティス 組織内アクセス制限 組織内アクセス制限 organization restrictionsは、指定された Google Cloud 組織以倖の組織ぞのアクセスを制限する機胜です。 圓機胜は、䌁業や官公庁のネットワヌクで HTTP プロキシサヌバを利甚しおおり、そのプロキシサヌバ以倖にはむンタヌネットに出る手段がないこずが前提になりたす。プロキシサヌバにおいお、Google Cloud に向けた HTTP リク゚ストの HTTP ヘッダに特定の Key-Value を匷制的に远加するこずで、そこで指定された組織 ID 以倖の組織にアクセスできなくさせたす。 詳现は以䞋の公匏ドキュメントをご参照ください。 参考 : 組織内アクセス制限の抂芁 たた実際の利甚方法に぀いおは、以䞋の圓瀟蚘事もご参照ください。 blog.g-gen.co.jp 関連する Google Cloud サヌビス Identity and Access ManagementIAM 組織ず最も関連が匷い Google Cloud サヌビスずしお、 Identity and Access Management IAMが挙げられたす。 IAM は Google Cloud の認蚌・認可を担う仕組みであり、Google Cloud におけるセキュリティの最も基本的な芁玠です。 IAM 暩限はリ゜ヌスに察しお蚭定されたす。䞊䜍リ゜ヌスに察しお蚭定された暩限は、䞋䜍リ゜ヌスに 継承 されたす。組織トップノヌドに蚭定された暩限は最䞋䜍レベルのリ゜ヌスである VM や BigQuery テヌブル等にたで継承されたす。この仕組みを䜿っお、プロゞェクトをフォルダ分けしたうえで、フォルダ単䜍で暩限を付䞎するなどしお、暩限管理の運甚を効率化し、よりセキュアに運甚できるようになりたす。 IAM の仕組みに぀いおは、以䞋の蚘事を参照しおください。 blog.g-gen.co.jp 階局型ファむアりォヌルポリシヌ Google Cloud の VPC にはファむアりォヌルの仕組みがありたす。ファむアりォヌルは通垞、プロゞェクトの VPC ネットワヌクのレベルで管理したすが、 階局型ファむアりォヌルポリシヌ を䜿うず、組織の䞊䜍から䞋䜍に向けおファむアりォヌルのルヌルを継承させるこずができたす。 䟋えば、組織ルヌトもしくは䞊䜍フォルダで「TCP ポヌト 22 番は 拒吊」ずいうポリシヌを䜜れば、䞋䜍のプロゞェクトの VPC ファむアりォヌルルヌルで蚱可したずしおも、パケットは拒吊されたす。 ファむアりォヌルポリシヌの詳现に぀いおは、以䞋の蚘事を参照しおください。 blog.g-gen.co.jp VPC Service Controls VPC Service Controls は、Google Cloud サヌビスの API を保護する仕組みです。 接続元 IP アドレスやデバむス情報等のコンテキストに基づいお、Google Cloud プロゞェクトぞのアクセスを制埡できたす。 VPC Service Controls の蚭定自䜓の管理暩限は、アクセスポリシヌずいうリ゜ヌスにより、フォルダもしくはプロゞェクトの範囲に限定できたす。これによりフォルダやプロゞェクトの管理者に、VPC Service Controls の蚭定暩限を委任するこずができたす。 VPC Service Controls の詳现に぀いおは、以䞋の蚘事を参照しおください。 blog.g-gen.co.jp ベストプラクティス フォルダ構造の決め方 組織配䞋ではフォルダを䜿っお Google Cloud プロゞェクトを敎理するこずができたすが、どのようなフォルダ構成ずすべきかは悩みの皮です。しかしながら、どのような環境でも通甚するような 絶察の答えはありたせん 。 「IAM」「組織のポリシヌ」「階局型ファむアりォヌル」など、継承によっお圱響範囲が決たる機胜を考慮に入れ、どの単䜍でたずめお管理したいか、ずいう芳点でフォルダ構成を決めたす。 䞀䟋ずしお、以䞋の図は 組織  環境別フォルダ  システム別フォルダ  機胜別プロゞェクト ずいう構成になっおいたす。 組織環境別フォルダシステム別フォルダ機胜別プロゞェクト この䌚瀟、あるいは官公庁では、クラりドを暪断管理する CCoE チヌムが存圚し、本番環境には本番環境のための統制を、開発環境には開発環境のための統制を、ずいうように環境別に異なったセキュリティポリシヌを割り圓おるために、このような構成になっおいたす。 別のパタヌンでは、以䞋のような構成も取るこずができたす。以䞋の䟋は 組織  システム別フォルダ  環境別フォルダ  機胜別プロゞェクト ずいう構成になっおいたす。 組織システム別フォルダ環境別フォルダ機胜別プロゞェクト この環境では、それぞれのシステムはそれぞれの郚門が管理しおいお、あるシステムでは「本番環境」「開発環境」の2面しか甚意されおいないが、別の郚門の別のシステムでは「本番」「UAT」「テスト」「開発」の4面構成であり、セキュリティポリシヌも異なる...ずいうように、システムごずに統制の蚭蚈が倧きく異なりたす。そのため、システム別フォルダ以䞋においお、担圓郚眲に IAM 暩限を䞎えお、裁量を持たせおいたす。 䞊蚘の䟋でも分かるように、組織の構成を蚭蚈する際は、クラりド環境がどのような運甚䜓制でどのように統制されるか、ずいう芳点を持぀必芁がありたす。 組織䜜成盎埌にやるべきこず 組織䜜成盎埌には、組織トップノヌドの IAM 蚱可ポリシヌにおいお、以䞋のロヌルバむンディングが存圚したす。 プリンシパル ロヌル (組織のドメむン名) プロゞェクト䜜成者 roles/resourcemanager.projectCreator  (組織のドメむン名) 請求先アカりント䜜成者 roles/billing.creator  (組織のドメむン名) ずは、その 組織のドメむンの Google アカりント党員に 暩限が䞎えられおいるこずを意味したす。組織レベルの IAM 画面では、以䞋のように衚瀺されたす。 ドメむンの党アカりントに察しおプロゞェクト䜜成者が割り圓おられおいる この状態だず、組織の すべおのアカりント がプロゞェクトを䜜成したり、請求先アカりントを䜜成できたす。この状態では、クラりド管理者が気づかないうちに「野良アカりント」が䜜成できおしたいたす。クラりド環境を集䞭管理するのであれば、この IAM ロヌルバむンディングは削陀するべきずいえたす。 以䞋のように My First Project ずいうプロゞェクトが乱立しおいる状態を芋たこずがあるでしょうか。 My First Project が乱立 前掲のように組織のアカりントの党員がプロゞェクト䜜成暩限を持っおいる堎合、Google Cloud 画面に初めおアクセスした際や、チュヌトリアルのドキュメントからコン゜ヌル画面に遷移した際に、My First Project ずいう名称のプロゞェクトが自動的に䜜成されおしたいたす。前述の、プロゞェクト䜜成者ロヌルの割り圓おが削陀しおあれば、この状況は起こりたせん。 以䞋の蚘事もご参照ください。 blog.g-gen.co.jp その他のベストプラクティス 以䞋の公匏ドキュメントで、Google Cloud 組織のベストプラクティスが玹介されおいたす。 組織の構成、アカりント管理、ネットワヌクセキュリティ、ロギング、請求などに関しお重芁な芳点が瀺唆されおいたすので、ぜひご確認ください。 参考 : ゚ンタヌプラむズ䌁業のベスト プラクティス たた䞊蚘のドキュメントで蚀及されおいる Google Cloud の機胜の倚くが、圓瀟蚘事によっお解説されおいたす。蚘事を芋぀けるために、以䞋のリンク集もご掻甚ください。 参考 : Google Cloud サヌビスカット孊習コンテンツ集 セキュリティスむヌト for Google Cloud 組織リ゜ヌス構成や組織のポリシヌを含む、Google Cloud の掚奚セキュリティ蚭定を提䟛する G-gen のサヌビスである「セキュリティスむヌト for Google Cloud」に぀いお、以䞋の蚘事をぜひご参照ください。 blog.g-gen.co.jp 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO 元譊察官ずいう経歎を持぀ IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 認定資栌および Google Cloud 認定資栌はすべお取埗。X旧 Twitterでは Google Cloud や Google Workspace のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
G-gen の䜐藀です。圓蚘事では Google のアむデンティティ管理サヌビスである Cloud Identity (Free Edition) の登録から組織䜜成たでの手順に぀いお玹介したす。 抂芁 Cloud Identity ずは 2぀の゚ディション Cloud Identity のナヌスケヌス 登録手順 前提 Cloud Identity Free Edition の初期登録の流れ Admin Console ぞのログむン ドメむン所有暩の蚌明 Google Cloud Console ログむン  組織遞択 トラブルシュヌティング 電話番号が䜿えない ドメむンの所有暩蚌明で゚ラヌ 抂芁 Cloud Identity ずは Cloud Identity は、Google が提䟛するアむデンティティ管理サヌビスです。Google アカりントを集䞭管理し、認蚌・認可、アクセス暩限管理などを行うこずができたす。二段階認蚌、パスワヌドポリシヌ、アカりントロックなどのセキュリティ機胜が提䟛されおいたす。 Google のアカりント管理サヌビスには他に Google Workspace がありたすが、Cloud Identity は Google Workspace から Gmail やカレンダヌなどのグルヌプりェア機胜を取り陀いたサヌビスであり、アカりント管理に特化したものず考えればよいでしょう。 参考 : Cloud Identity ずは 2぀の゚ディション Cloud Identity には Free ず Premium の 2 ぀の゚ディションがありたす。 Free Edition は最倧50人たでのナヌザヌ登録が可胜であり、それ以䞊のナヌザヌ远加には有償版である Premium Edition が必芁です。たた Free ゚ディションのたたでも、Google に申請するこずで䞊限数が緩和される堎合がありたす。䞊限緩和には Google の審査が入りたすので、必ず䞊限緩和が可胜であるずは限らない点にご留意ください。 参考 : Cloud Identity Free Edition ナヌザヌの䞊限数 Free Edition にはほずんどの基本的な機胜が揃っおいたすが、デバむス管理や DLP (Data Loss Prevention) など䞀郚の高床な機胜は Premium Edition でのみ䜿うこずができたす。 参考 : Cloud Identity の機胜ず゚ディションの比范 Cloud Identity のナヌスケヌス Cloud Identity の最も倚いナヌスケヌスは「 Google Cloud を利甚する。それにあたり開発・運甚のための Google アカりントを集䞭管理する。たた Google Cloud プロゞェクトぞの統制を行うために組織機胜を利甚する」ずいうものです。 Google Cloud には「 組織 (Organization)」ずいう機胜があり、䌁業や官公庁が Google Cloud を利甚するにあたりほが必須ず蚀っおいいほど重芁な機胜です。しかし組織の機胜の利甚には Google Workspace 組織たたは Cloud Identity 組織が必須です。そのため、その䌁業・官公庁で Google Workspace のグルヌプりェア機胜が䞍芁である堎合、Cloud Identity を利甚するこずになりたす。 圓蚘事ではそのようなケヌスのために、Cloud Identity Free Edition を新芏登録しお利甚開始するための手順を蚘述したす。 なお Google Cloud の 組織 (Organization) に぀いおは以䞋の蚘事もご参照ください。 blog.g-gen.co.jp 登録手順 参考 : Cloud Identity に申し蟌む 前提 実際に登録を行う前に、以䞋をご準備ください。 SMS が受信可胜 もしくは 音声電話を受電可胜な 電話番号 組織に登録する ドメむン名 .tk など䞀郚のドメむン名は利甚䞍可です 手順の䞭で、ドメむンを管理するゟヌンに DNS レコヌドを登録したす。DNS の管理を他郚眲や業者に委蚗しおいる堎合は、情報連携の準備をしおおきたす Cloud Identity Free Edition の初期登録の流れ 次の登録ペヌゞにアクセスしたす。 Cloud Identity Free に登録する ビゞネス名、埓業員の数 を指定し、次ぞ を抌䞋 Google からの連絡受信甚の連絡先を入力し、次ぞ を抌䞋 ご利甚のドメむン名 を入力し、次ぞ を抌䞋 ご利甚のドメむン名 を確認し、次ぞ を抌䞋 任意で遞択したす ログむン情報 を入力し、ロボットによる操䜜でないこずを確認したら、同意しおアカりントを䜜成 を抌䞋 ※ここで入力したログむン情報を埌ほどの Admin Console ログむン画面で䜿甚したす。 以䞊で Cloud Identity アカりントの䜜成は完了です。 䞊蚘画面の続行ボタンを抌䞋するずこの埌の「Admin Console ぞのログむン」画面に遷移したす。 Admin Console ぞのログむン 先皋䜜成した管理者アカりント情報・パスワヌドを入力し、 次ぞ を抌䞋 Sign in - Google Accounts 本人確認の実斜 登録した電話番号にSMSが届きたす。 理解したした を抌䞋 次ぞ を抌䞋 ドメむン所有暩の蚌明 Cloud Identity の蚭定画面が衚瀺されるので、先皋登録したドメむンを遞択し、 保護 を抌䞋 衚瀺されたポップアップの内容を確認し、 ドメむンを保護 を抌䞋 DNS レコヌドたたは DNS 蚭定を探す ドメむン所有暩を蚌明するためのTXTレコヌドが衚瀺されるので、 コピヌ を抌䞋 TXT レコヌドは、ドメむン取埗事業者の管理画面、もしくはドメむン管理を委任しおいる DNS サヌバで蚭定する必芁がありたす。 再床、 ドメむンを保護 を抌䞋 Google が TXT レコヌドを確認できるずドメむンの所有暩の確認が終わりたす。確認プロセスは通垞は数分で終わりたすが、ドメむンを取埗したばかりである等の理由で数日かかるケヌスもありたす。本蚘事末尟の「トラブルシュヌティング」にも関連の事象を蚘茉したしたので、ご確認ください。 Google Cloud Console ログむン  組織遞択 以䞋のペヌゞにアクセス https://console.cloud.google.com/ 管理者アカりント情報・パスワヌドを入力し、 次ぞ を抌䞋 利甚芏玄にチェックを入れ、 同意しお続行 を抌䞋 Google Cloud を初めお䜿甚し、ただプロゞェクトを䜜成しおいない堎合は、Google Cloud Console にログむンしお利甚芏玄に同意するず、組織リ゜ヌスが䜜成されたす。 ※反映たでに時間がかかりたす。 䞊蚘画面に反映されたら、ナビゲヌションメニュヌから IAMず管理 を遞択し、 IAM から䜜成された組織が確認可胜です。 以䞊で、Cloud Identity Free Edition の登録から組織䜜成たで完了です。 トラブルシュヌティング 電話番号が䜿えない 管理者アカりントで初めおログむンする際に本人確認のための電話番号を入力したすが、この際に「この電話番号は、既に䜕床も確認に䜿甚されおいるため無効です。」ずいう旚のメッセヌゞが衚瀺され、匟かれおしたうケヌスがありたす。 特に、耇数の Cloud Identity (Google Workspace) 組織を数日〜数ヶ月などの短期間で䜜成した際に、この珟象が発生したす。 これは、同䞀の電話番号でスパム的に倚数の組織が䜜成されおしたうこずを防ぐため、Google が機械的に電話番号をチェックしおいるこずに起因しおいたす。 これたで Google のアカりントサヌビス (Google Workspace、Cloud Identity、無償の Gmail アカりント等) で䜿甚した実瞟がある電話番号は、機械的に拒吊されおしたうため、同じ電話番号を利甚する堎合は期間を空けおから利甚する必芁がありたす。どうしおも短期間のうちに耇数の組織を䜜成する必芁がある堎合は、最初の䞀回の認蚌時のみ、別の電話番号を甚意する必芁がありたす。 ドメむンの所有暩蚌明で゚ラヌ ドメむン所有暩の蚌明の手順䞭に、以䞋のメッセヌゞが衚瀺される堎合がありたす。 珟圚、ドメむンの所有暩を蚌明するこずができたせん 珟圚、ドメむンの所有暩を蚌明するこずができたせん。ドメむンホストで情報が曎新されるたでにしばらくかかる可胜性がありたす。曎新がすぐに行われない堎合は、所有暩の蚌明をもう䞀床お詊しください。 これは、ドメむンを取埗したばかりであったり、ドメむン登録事業者の Web UI から DNS レコヌドを登録したために実際の DNS サヌバに情報が反映がされおいない堎合等に衚瀺されるこずがあるメッセヌゞです。 この衚瀺がされた堎合は、時間を眮いお再床、管理画面を確認しおください。前述のようにドメむンや DNS 偎が原因であれば自動的に解消されたすが、最長 48 時間ほどかかる堎合もありたす。それ以倖の理由の堎合、DNS レコヌドが正しく登録できないこずが原因の堎合もありたすので、蚭定倀を十分確認しおください。 参考 : ドメむン所有暩の確認が倱敗する 䜐藀 亜由矎 (蚘事䞀芧) ビゞネス掚進郚 Google Cloud Authorized Trainer フロント゚ンド゚ンゞニアからキャリアをスタヌト。Webアプリ開発や瀟内新卒向け技術研修担圓を経お2023幎に G-gen ぞ Join。Google Cloud を通じお、䞖界がもっずはたらきやすくなりたすように♡ Follow @_satoayu_
Google Cloud旧称 GCPの 孊習に圹立぀オンラむンコンテンツ を、サヌビスカットや分野別でたずめたした。Google Cloud 初孊者の方の基本的な孊習のほか、資栌取埗にもお圹立おください。 はじめに Google Cloud 党般 課金・コスト削枛 アヌキテクチャ・ベストプラクティス セキュリティ・統制 セキュリティネットワヌク コンピュヌティング サヌバヌレス ネットワヌク ストレヌゞ デヌタベヌス デヌタ分析 生成 AI、Gemini AI/ML機械孊習 開発・IaC 監芖・運甚・SRE その他・Google プロダクト Google Workspace Google Cloud 認定資栌 はじめに 圓ペヌゞでは Google Cloud旧称 GCPの基瀎孊習や詊隓察策に圹立぀オンラむンコンテンツを、サヌビス名別や分野別でたずめたした。 「サヌビスカット」ずは Compute Engine、Cloud Storage、BigQuery など、Google Cloud サヌビスごずに分類されおいるこずを意味しおいたす。ただし、孊習に圹立぀堎合は、サヌビスを暪断したコンテンツを玹介しおいる堎合もありたす。 たた各コンテンツには、圓瀟の䞻芳ではありたすが [初玚] [侭箚] [侊箚] のレベルを付蚘しおありたす。 レベル名 察象者 説明 初玚 初めおそのサヌビスを孊ぶ人 抜象的、あるいは比范的理解が容易。Google Cloud 初孊者向け 侭箚 初めおそのサヌビスを孊ぶ人もしくはある皋床そのサヌビスを知っおいる人 初玚ず䞊玚の䞭間皋床 侊箚 ある皋床そのサヌビスを知っおいる人 IT 知識やそのサヌビスに関する知識がある皋床求められる Google Cloud 党般 サヌビス名 タむトル・リンク 皮類 レベル 党般 プロダクト別 参考セッション 公匏情報 初玚〜䞊玚 党般 Solution Design Pattern 公匏情報 初玚〜䞊玚 党般 Google Cloudの利甚に必芁なGoogleアカりントを培底解説 公匏情報 初玚 党般 Google Cloud䞻芁サヌビスを50文字で解説 G-gen Tech Blog 初玚 党般 Google CloudずGCP、どっちが正しい G-gen Tech Blog 初玚 党般 Google Cloud旧GCP無料で䜿っおみたクラりド初心者もかんたんに開蚭、始め方倧解説前線説明線 G-gen Tech Blog 初玚 党般 gcloud CLIのむンストヌル方法Windows 線 G-gen Tech Blog 初玚 党般 Preview版のサヌビスを䜿うずはどういうこずなのか G-gen Tech Blog 初玚 党般 Google Cloudの根幹を成すGoogle Cloud APIsずは䜕か G-gen Tech Blog 侭箚 党般 Google Cloudで理解する疎結合アヌキテクチャずメッセヌゞングサヌビス G-gen Tech Blog 侊箚 党般 Google Cloudにおける負荷テスト G-gen Tech Blog 初玚 党般 クラりドず英語 G-gen Tech Blog 初玚 課金・コスト削枛 サヌビス名 タむトル・リンク 皮類 レベル Cloud Billing (課金) クラりド料金の芋積もり方法を解説 G-gen Tech Blog 初玚 Cloud Billing (課金) Google Cloudの請求の仕組みを分かりやすく解説しおみた G-gen Tech Blog 初玚 Cloud Billing (課金) 予算アラヌトの蚭定方法 G-gen Tech Blog 初玚 BigQuery BigQuery のコスト削枛方法たずめ G-gen Tech Blog 侭箚 Compute Engine (GCE) 確玄利甚割匕(Compute Engine)を解説。AWSずの違いも確認 G-gen Tech Blog 侭箚 Compute Engine (GCE) Compute Engineの継続利甚割匕を蚈算䟋を䜿っお解説 G-gen Tech Blog 侭箚 アヌキテクチャ・ベストプラクティス サヌビス名 タむトル・リンク 皮類 レベル アヌキ・ベスプラ Google Cloud(旧GCP)利甚しおみたいけど最初に察応すべきこずは初期蚭定のベストプラクティスを解説 G-gen Tech Blog 初玚 アヌキ・ベスプラ Googleのクラりド導入フレヌムワヌクを翻蚳しお玹介 G-gen Tech Blog 初玚 アヌキ・ベスプラ Google Cloudで理解するサヌバヌレス・アヌキテクチャ G-gen Tech Blog 初玚 アヌキ・ベスプラ セキュリティスむヌト for Google Cloudを培底解説 G-gen Tech Blog 初玚 アヌキ・ベスプラ メダリオンアヌキテクチャ2.0ずGoogle CloudのAI゚ヌゞェント掻甚 G-gen Tech Blog 侭箚 セキュリティ・統制 サヌビス名 タむトル・リンク 皮類 レベル Identity and Access Management (IAM) Google CloudのIAMを培底解説 G-gen Tech Blog 初玚 Identity and Access Management (IAM) Privileged Access ManagerPAMを解説 G-gen Tech Blog 初玚 Resource Manager Google Cloudの組織(Organization)を培底解説 G-gen Tech Blog 初玚 Resource Manager 組織のポリシヌを解説 G-gen Tech Blog 初玚 Resource Manager タグずラベルの違いTags / Labels G-gen Tech Blog 初玚 Cloud Asset Inventory Cloud Asset Inventoryを培底解説 G-gen Tech Blog 初玚 Cloud Audit Logs Cloud Audit Logsを解説。Google Cloudの蚌跡管理 G-gen Tech Blog 侭箚 VPC Service Controls VPC Service Controlsを分かりやすく解説 G-gen Tech Blog 侭箚 Chrome Enterprise Premium旧称 BeyondCorp Enterprise Chrome Enterprise Premium旧称 BeyondCorp Enterpriseを培底解説 G-gen Tech Blog 侭箚 Security Command Center (SCC) Security Command Centerを培底解説。Google Cloud(GCP)の脆匱性を自動怜知 G-gen Tech Blog 侭箚 Cloud KMS Cloud KMSを培底解説 G-gen Tech Blog 侭箚 セキュリティネットワヌク サヌビス名 タむトル・リンク 皮類 レベル Cloud Next Generation Firewall (Cloud NGFW) Cloud Next Generation Firewall(Cloud NGFW)を培底解説 G-gen Tech Blog 侭箚 Cloud Armor Cloud Armorを培底解説。GoogleのフルマネヌゞドWAF G-gen Tech Blog 侭箚 Cloud IDS Google CloudのCloud IDSを培底解説 G-gen Tech Blog 侭箚 Identity-Aware Proxy (Cloud IAP) 螏み台サヌバはもういらない。IAP(Identity-Aware Proxy)の䟿利な䜿い方 G-gen Tech Blog 侭箚 reCAPTCHA reCAPTCHAの料金䜓系を解説 G-gen Tech Blog 初玚 コンピュヌティング サヌビス名 タむトル・リンク 皮類 レベル コンピュヌト党般 Google CloudのComputingプロダクトを解説 G-gen Tech Blog 初玚 Compute Engine (GCE) Compute Engineを培底解説基本線 G-gen Tech Blog 初玚 Compute Engine (GCE) Compute Engineを培底解説応甚線 G-gen Tech Blog 侭箚 Compute Engine (GCE) VMむンスタンスの自動起動・終了をスケゞュヌリングする蚭定方法 G-gen Tech Blog 初玚 Compute Engine (GCE) Compute Engine の SSH 接続方法に぀いおのたずめ G-gen Tech Blog 侭箚 Compute Engine (GCE) VM Managerを培底解説 G-gen Tech Blog 侭箚 Compute Engine (GCE) Windows Serverを完党日本語化しおみた G-gen Tech Blog 初玚 App Engine Google App Engine (GAE) を培底解説 G-gen Tech Blog 初玚 Kubernetes Kubernetes の基本を解説 G-gen Tech Blog 侭箚 Google Kubernetes Engine (GKE) Google Kubernetes EngineGKEを培底解説 G-gen Tech Blog 侭箚 Migrate for Compute Engine Migrate for Compute Engineを解説 G-gen Tech Blog 侭箚 Managed Service for Microsoft Active Directory Managed Service for Microsoft Active Directoryを培底解説 G-gen Tech Blog 侭箚 Google Cloud VMware EngineGCVE Google Cloud VMware EngineGCVEを培底解説 G-gen Tech Blog 侭箚 サヌバヌレス サヌビス名 タむトル・リンク 皮類 レベル Cloud Run 入門Cloud Runのススメ G-gen Tech Blog 初玚 Cloud Run Cloud Run を培底解説 G-gen Tech Blog 侭箚 Cloud Run Cloud Run jobs を培底解説 G-gen Tech Blog 侭箚 Cloud Run Cloud Run worker poolsを培底解説 G-gen Tech Blog 侭箚 Cloud Run Cloud Run等における構造化ロギング G-gen Tech Blog 侭箚 Cloud Run functions Cloud Run functionsを培底解説 G-gen Tech Blog 侭箚 Cloud Run functions Cloud Run functionsでSlackのスラッシュコマンドを䜜っおみた G-gen Tech Blog 侭箚 ネットワヌク サヌビス名 タむトル・リンク 皮類 レベル Virtual Private Cloud (VPC) Google Cloud(旧GCP)のVPC基本機胜を孊ぶVPC・サブネット・NAT・ピアリング・AWSずの違い G-gen Tech Blog 初玚 Virtual Private Cloud (VPC) Google CloudのVPCを培底解説(基本線) G-gen Tech Blog 初玚 Virtual Private Cloud (VPC) Google CloudのVPCを培底解説(応甚線) G-gen Tech Blog 侭箚 Virtual Private Cloud (VPC) 限定公開の Google アクセスの仕組みず手順をきっちり解説 G-gen Tech Blog 侊箚 Virtual Private Cloud (VPC) Private Service Connect機胜解説。Google Cloud APIにプラむベヌト接続 G-gen Tech Blog 侊箚 Virtual Private Cloud (VPC) Private Service Connect でマネヌゞドサヌビスを公開する G-gen Tech Blog 侭箚 Cloud VPN 高可甚性Cloud VPNを解説。オンプレミスずGoogle CloudをVPNで接続 G-gen Tech Blog 侭箚 Cloud Load Balancing External Application Load Balancer (倖郚アプリケヌションロヌドバランサ) を培底解説 G-gen Tech Blog 侭箚 Cloud Interconnect Cloud Interconnect の基本を解説 G-gen Tech Blog 初玚 Cross-Cloud Interconnect Cross-Cloud Interconnectを培底解説 G-gen Tech Blog 初玚 Network Connectivity Center Network Connectivity Centerを培底解説 G-gen Tech Blog 初玚 Network Intelligence Center Network Intelligence Centerを培底解説 G-gen Tech Blog 初玚 ストレヌゞ サヌビス名 タむトル・リンク 皮類 レベル Cloud Storage (GCS) Cloud Storage(GCS)を培底解説 G-gen Tech Blog 初玚 Cloud Storage (GCS) Cloud Storage を gcloud storage コマンドで操䜜基本線 G-gen Tech Blog 初玚 Filestore Filestoreを培底解説。Google Cloudのマネヌゞドなファむルサヌバ G-gen Tech Blog 初玚 デヌタベヌス サヌビス名 タむトル・リンク 皮類 レベル Cloud SQL Cloud SQLを培底解説 G-gen Tech Blog 初玚 Cloud Spanner Cloud Spanner を培底解説 G-gen Tech Blog 侭箚 AlloyDB for PostgreSQL AlloyDB for PostgreSQLを培底解説 G-gen Tech Blog 初玚 Cloud Bigtable Bigtableを培底解説 G-gen Tech Blog 初玚 デヌタ分析 サヌビス名 タむトル・リンク 皮類 レベル BigQuery BigQueryを培底解説(基本線) G-gen Tech Blog 初玚 BigQuery BigQueryを培底解説(応甚線) G-gen Tech Blog 侭箚 BigQuery Gemini in BigQueryを培底解説 G-gen Tech Blog 初玚 BigQuery BigQuery Editionsを培底解説 G-gen Tech Blog 侭箚 BigQuery BigQueryのストレヌゞ料金を解説 G-gen Tech Blog 侭箚 BigQuery BigQueryのアクセス制埡ず暩限蚭蚈を解説 G-gen Tech Blog 侭箚 BigQuery BigQueryのパヌティションずクラスタリングに぀いおの解説 G-gen Tech Blog 侭箚 BigQuery BigQuery Data Transfer Serviceを䜿っおAmazon S3のデヌタをBigQueryに取り蟌む方法 G-gen Tech Blog 侭箚 BigQuery BigQueryの倖郚テヌブルでスプレッドシヌトのデヌタをク゚リする G-gen Tech Blog 初玚 BigQuery / Connected Sheets コネクテッドシヌトで始めるデヌタ分析Googleスプレッドシヌト+BigQuery G-gen Tech Blog 初玚 BigQuery Omni BigQuery OmniでAmazon S3のデヌタをク゚リしおみた G-gen Tech Blog 侭箚 Dataplex Dataplexを培底解説 G-gen Tech Blog 侭箚 Dataplex Catalog Dataplex Catalogを培底解説 G-gen Tech Blog 侭箚 Looker / Looker Studio GoogleのBIツヌル、LookerずLooker Studioを比范しおみた G-gen Tech Blog 初玚 Looker Looker のデヌタガバナンス機胜を解説 G-gen Tech Blog 侭箚 Looker Studio Pro Looker Studio Pro を培底解説 G-gen Tech Blog 初玚 Dataform Dataformを培底解説 G-gen Tech Blog 侭箚 Cloud Composer Cloud Composer (メゞャヌバヌゞョン2)を培底解説 G-gen Tech Blog 侭箚 Dataflow Dataflowを培底解説 G-gen Tech Blog 侭箚 生成 AI、Gemini サヌビス名 タむトル・リンク 皮類 レベル 生成 AI 党般 生成AIのよくある誀解を敎理しおAIの業務掻甚を掚進する G-gen Tech Blog 初玚 Gemini、NotebookLM Googleの生成AIサヌビスを敎理。Geminiアプリ、Gemini Enterprise、NotebookLM等を比范 G-gen Tech Blog 初玚 Gemini å…šGeminiプロダクトを培底解説 G-gen Tech Blog 初玚 Gemini Gemini Proを䜿っおみた。Googleの最新生成AIモデル G-gen Tech Blog 初玚 Gemini Gemini CLIを解説 G-gen Tech Blog 初玚 Gemini 生成AI「Gemini」をクラりドむンテグレヌタヌ瀟員が掻甚した事䟋 G-gen Tech Blog 初玚 Gemini Enterprise Gemini Enterpriseを培底解説 G-gen Tech Blog 初玚 NotebookLM NotebookLM in Pro旧称NotebookLM Plusを䜿っおみた G-gen Tech Blog 初玚 NotebookLM NotebookLM無償版・Pro・Enterpriseの違い G-gen Tech Blog 初玚 Vertex AI (Generative AI) Google AI Studio vs Vertex AI。違いや遞び方を解説 G-gen Tech Blog 初玚 Vertex AI (Generative AI) Generative AI on Vertex AIを培底解説 G-gen Tech Blog 初玚 Vertex AI Search Vertex AI Searchを培底解説 G-gen Tech Blog 侭箚 Vertex AI Search 生成AIのRAG構成を倧手3瀟AWS、Azure、Google Cloudで培底比范しおみた G-gen Tech Blog 初玚 Vertex AI Search 生成AIのAI゚ヌゞェントを倧手3瀟AWS、Azure、Google Cloudで培底比范しおみた G-gen Tech Blog 初玚 Model Armor Model Armorを培底解説 G-gen Tech Blog 侭箚 Agent Development KitADK ナレッゞ怜玢・回答AI゚ヌゞェントG-gen Tech AgentをADKで開発した事䟋 G-gen Tech Blog 侭箚 Agent Development KitADK ADKのLLM AgentずWorkflow Agents、Toolsを解説 G-gen Tech Blog 侭箚 AI/ML機械孊習 サヌビス名 タむトル・リンク 皮類 レベル Vertex AI Vertex AIを培底解説 G-gen Tech Blog 侭箚 Vertex AI Pipelines Vertex AI Pipelinesを解説 G-gen Tech Blog 侭箚 BigQuery ML BigQuery MLを培底解説 G-gen Tech Blog 侭箚 Document AI Document AIを培底解説 G-gen Tech Blog 侭箚 開発・IaC サヌビス名 タむトル・リンク 皮類 レベル Terraform TerraformをGoogle Cloudで䜿っおみた G-gen Tech Blog 初玚 Cloud Workstations Cloud Workstationsを培底解説 G-gen Tech Blog 侭箚 Colab / Colab Enterprise Colab、Colab Pro+、Colab Enterpriseを比范しお解説 G-gen Tech Blog 初玚 Colab Enterprise / Vertex AI Workbench Colab EnterpriseずVertex AI Workbenchを培底解説 G-gen Tech Blog 侭箚 Cloud Shell ゚ディタ、Gemini Code Assist Gemini Code Assistを䜿っおChromebookで開発環境を敎えおみた G-gen Tech Blog 初玚 監芖・運甚・SRE サヌビス名 タむトル・リンク 皮類 レベル Cloud Monitoring Cloud Monitoringを培底解説 G-gen Tech Blog 初玚 Cloud Logging Cloud Loggingの抂念ず仕組みをしっかり解説 G-gen Tech Blog 初玚 Cloud Logging Cloud Loggingのク゚リ蚀語の構文を培底解説 G-gen Tech Blog 初玚 Cloud Scheduler Cloud Scheduler を培底解説 G-gen Tech Blog 侭箚 Cloud Workflows Cloud Workflowsを培底解説 G-gen Tech Blog 侭箚 Personalized Service Health Personalized Service Healthを培底解説 G-gen Tech Blog 初玚 Gemini Cloud Assist Investigations Gemini Cloud Assist Investigationsを解説。AI゚ヌゞェントでトラブルシュヌティング G-gen Tech Blog 初玚 その他・Google プロダクト サヌビス名 タむトル・リンク 皮類 レベル Firebase Firebase を培底解説 G-gen Tech Blog 侭箚 AppSheet AppSheet のはじめ方 G-gen Tech Blog 初玚 Google Maps Platform Google Maps Platform の基本を解説 G-gen Tech Blog 初玚 Google Workspace サヌビス名 タむトル・リンク 皮類 レベル Cloud Identity Cloud Identityの登録・組織䜜成手順 G-gen Tech Blog 初玚 Google Workspace Google Workspace を培底解説 G-gen Tech Blog 初玚 Google Workspace Google Workspace 各プラン比范どのプランがオススメ G-gen Tech Blog 初玚 Google Workspace Google Workspace レポヌトず監査ログを解説プランによっお䜕が違う G-gen Tech Blog 侭箚 Google Workspace Geminiりェブアプリのカスタマむズ機胜「Gems」を培底解説 G-gen Tech Blog 初玚 Google Workspace Google Workspaceの新機胜をいち早く䜿う方法 G-gen Tech Blog 初玚 Google Workspace (Google Vids) Google VidsのAI機胜で動画を䜜成しおみた G-gen Tech Blog 初玚 Google Workspace (Google Workspace Studio) Google Workspace Studioを培底解説 G-gen Tech Blog 初玚 Google Cloud 認定資栌 サヌビス名 タむトル・リンク 皮類 レベル 認定資栌 Google Cloud 認定資栌の䞀芧を解説。党郚で䜕個ある難易床は G-gen Tech Blog 初玚 認定資栌 Cloud Digital Leader詊隓を非゚ンゞニアが受隓しおみた G-gen Tech Blog 初玚 認定資栌 Cloud Digital Leader詊隓察策マニュアル G-gen Tech Blog 初玚 認定資栌 Associate Cloud Engineer詊隓察策マニュアル G-gen Tech Blog 初玚 認定資栌 Associate Data Practitioner詊隓察策マニュアル G-gen Tech Blog 初玚 認定資栌 Associate Google Workspace Administrator詊隓察策マニュアル G-gen Tech Blog 初玚 認定資栌 Professional Cloud Architect詊隓察策マニュアル G-gen Tech Blog 侭箚 認定資栌 Professional Cloud Developer詊隓察策マニュアル G-gen Tech Blog 侭箚 認定資栌 Professional Data Engineer詊隓察策マニュアル G-gen Tech Blog 侭箚 認定資栌 Professional Cloud DevOps Engineer詊隓察策マニュアル G-gen Tech Blog 侭箚 認定資栌 Professional Cloud Security Engineer詊隓察策マニュアル G-gen Tech Blog 侭箚 認定資栌 Professional Cloud Network Engineer詊隓察策マニュアル G-gen Tech Blog 侭箚 認定資栌 Professional Google Workspace Administrator詊隓察策マニュアル G-gen Tech Blog 侭箚 認定資栌 Professional Cloud Database Engineer詊隓察策マニュアル G-gen Tech Blog 侭箚 認定資栌 Professional Machine Learning Engineer詊隓察策マニュアル G-gen Tech Blog 侭箚 認定資栌 Professional Security Operations Engineer詊隓察策マニュアル G-gen Tech Blog 侭箚 認定資栌 Professional ChromeOS Administrator詊隓察策マニュアル G-gen Tech Blog 初玚 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO 元譊察官ずいう経歎を持぀ IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 認定資栌および Google Cloud 認定資栌はすべお取埗。X旧 Twitterでは Google Cloud や Google Workspace のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
G-gen の堂原です。本蚘事では、Looker Studio においお、Google Sheets を゜ヌスずする BigQuery 倖郚テヌブルに接続しようずするず発生する Permission denied ゚ラヌの察凊法を玹介したす。 はじめに 事象 : 倖郚テヌブルぞの接続で゚ラヌ 察凊法 サマリ 各リ゜ヌスの関係性 デヌタの認蚌情報 手順 はじめに Google Cloud (旧称 GCP) が提䟛する BI ツヌルである Looker Studio では、デヌタ゜ヌスずしお BigQuery が遞択可胜です。BigQuery のテヌブルやビュヌのデヌタを取り蟌み、簡単にダッシュボヌドを䜜成するこずができたす。 たた BigQuery には 倖郚テヌブル ずいう機胜があり、Google Drive 内の Google Sheets など、BigQuery の倖に保存されたデヌタを盎接参照する仮想的なテヌブルを䜜成するこずができたす。 事象 : 倖郚テヌブルぞの接続で゚ラヌ Looker Studio においお、Google Sheets を゜ヌスずする BigQuery 倖郚テヌブルに接続しおみたした。 やりたいこずを図にするず、以䞋のようになりたす。 Looker Studio から BigQuery 倖郚テヌブル経由で Sheets のデヌタを取埗 Looker Studio では BigQuery 甚のコネクタが甚意されおいたす。BigQuery ぞの暩限を持぀ Google アカりントで Looker Studio にログむンしおいれば、簡単に接続蚭定ができたす。 䟋えば䜜成䞭のレポヌトであれば、䞋図の「デヌタを远加」から蚭定が可胜です。 デヌタの远加 倖郚テヌブルに぀いおも、デヌタ゜ヌスずしお远加する凊理たでは問題なく進みたした。 しかし、いざ远加したデヌタ゜ヌスを甚いおグラフ等を䜜成しようずするず、以䞋の゚ラヌが衚瀺されたした。 デヌタセットの接続゚ラヌ ゚ラヌ詳现 ゚ラヌメッセヌゞは以䞋の通りであり、どうやら Google Drive に察する暩限が無いようです。 BigQuery error: Access Denied: BigQuery BigQuery: Permission denied while getting Drive credentials. 察凊法 サマリ 本゚ラヌですが「 デヌタの認蚌情報 」蚭定を「 サヌビス アカりント 」にしお、Google Sheets ぞの閲芧者暩限を サヌビスアカりントに付䞎 するこずで解決したした。 意味合いずしおは「レポヌトからデヌタ゜ヌスぞの認蚌をサヌビスアカりントに行わせる」「さらにそのサヌビスアカりントが BigQuery 倖郚テヌブルず、さらにそのデヌタ゜ヌスである Sheets の䞡方に察しお暩限を持぀ようにする」ずいうこずになりたす。 各リ゜ヌスの関係性 今回登堎する各リ゜ヌスの関係性は以䞋の図のようになりたす。 各リ゜ヌスの関係性 デヌタの認蚌情報 Looker Studio のレポヌトからデヌタ゜ヌスぞ認蚌する際に デヌタ゜ヌスの認蚌情報 ずしお次の 3 ぀の遞択肢が存圚したす。 オヌナヌの認蚌情報 サヌビス アカりントの認蚌情報 閲芧者の認蚌情報 これらはデヌタ゜ヌスのデヌタにアクセスするずきに、誰の䜕の暩限に䟝存するかを指定する蚭定ずなりたす。 「オヌナヌの認蚌情報」たたは「サヌビス アカりントの認蚌情報」であれば、レポヌトは共有されれば誰でも閲芧するこずが可胜です。 䞀方で「閲芧者の認蚌情報」だず、たずえレポヌトを共有されたずしおも、デヌタ゜ヌスそのものぞのアクセス暩が無い人はデヌタを閲芧するこずができたせん。 手順 次のような手順で蚭定するこず可胜です。 Google Cloud プロゞェクトにサヌビス アカりント䜜成 BigQuery にアクセスさせるため、以䞋のロヌルをサヌビス アカりントに付䞎 参照  BigQuery ゞョブナヌザヌ BigQuery デヌタ閲芧者 Looker Studio サヌビス ゚ヌゞェントに、サヌビス アカりントに察する「サヌビス アカりント トヌクン䜜成者」ロヌルを付䞎 Looker Studio サヌビス ゚ヌゞェントの確認方法は こちら のペヌゞの「Looker Studio サヌビス ゚ヌゞェントを取埗する」に蚘茉ありたす。 Google Sheets の共有蚭定にお、サヌビス アカりントのメヌルアドレスに察しお「閲芧者」暩限を付䞎 Google Sheetsの共有蚭定 Looker Studio にお、該圓デヌタセットの「デヌタの認蚌情報」をサヌビス アカりントに倉曎する デヌタの認蚌情報 堂原 竜垌 (蚘事䞀芧) クラりド゜リュヌション郚。2023幎4月より、G-genにゞョむン。 Google Cloud Partner Top Engineer 2023に遞出。䌑みの日はだいたいゲヌムをしおいるか、時々自転車で遠出をしおいたす。 Follow @matayuuuu
G-gen の堂原です。 Artifact Registry に溜たった、タグなしの Docker むメヌゞ ダむゞェストを䞀括で削陀する Python プログラムを玹介したす。 はじめに ゜ヌスコヌドの解説 凊理の流れ ゜ヌスコヌド クラむアントラむブラリ Python Client for Artifact Registry API 珟圚は「delete_docker_image」が存圚しない parent の蚘茉方法 はじめに Google Cloud (旧称 GCP) の Artifact Registry では、同じタグのむメヌゞがプッシュされるず、叀いむメヌゞ ダむゞェストはタグが倖されタグなしの状態ずなり保管されたす。 このむメヌゞ ダむゞェストは勝手に消えないため、気づくずタグなしむメヌゞ ダむゞェストだらけになるこずもあるかず思いたす。 珟圚こういったむメヌゞ ダむゞェストを自動で削陀するような機胜は、プレビュヌ版ずしおは䞀郚のナヌザには提䟛されおいるものの、䞀般公開されおいたせん。 ドキュメント  そこで今回は、 䜜成されおから䞀ヶ月以䞊経過したタグなし Docker むメヌゞ ダむゞェストを䞀括削陀する Python プログラム を玹介したす。 本蚘事では実斜しおいたせんが、本コヌドを Cloud Functions にデプロむしお、Cloud Scheduler で定期実行するなどずいった運甚が考えられたす。 ゜ヌスコヌドの解説 凊理の流れ 本プログラムの凊理の流れは以䞋のようになりたす。 list_tags 関数でタグ情報䞀芧を取埗する タグが付いおいる党おのむメヌゞ ダむゞェスト名を取埗 list_versions 関数で党おのむメヌゞ ダむゞェスト情報を取埗 タグが付いおいないむメヌゞ ダむゞェストを刀断 むメヌゞ ダむゞェストの䜜成日を確認 基準時間よりも叀ければ、 delete_version 関数で削陀 ゜ヌスコヌド 以䞋が゜ヌスコヌドの党容ずなりたす。 #!/usr/bin/env python from google.cloud import artifactregistry_v1 from datetime import datetime, timedelta project_id = "${プロゞェクトID}" location = "${Artifact Registryリポゞトリのリヌゞョン}" repository = "${リポゞトリ名}" package = "${むメヌゞ名}" def main (): client = artifactregistry_v1.ArtifactRegistryClient() # 察象のむメヌゞに存圚する党おのタグ情報を取埗 response = client.list_tags( parent=f "projects/{project_id}/locations/{location}/repositories/{repository}/packages/{package}" ) # タグが付いおいる党おのむメヌゞ ダむゞェストを取埗 tag_list = [] for tag in response: tag_list.append(tag.version) # 察象のむメヌゞに存圚する党おのダむゞェスト情報を取埗 response = client.list_versions( parent=f "projects/{project_id}/locations/{location}/repositories/{repository}/packages/{package}" ) # 基準ずなる時間を取埗 now = datetime.utcnow() cutoff_time = now - timedelta(days= 30 ) for version in response: # タグが付いおいるかを刀断tag_list[] に存圚するかどうか if version.name not in tag_list: create_time = version.create_time.replace(tzinfo= None ) # 基準時間よりも前に䜜成されたか刀断→削陀 if create_time < cutoff_time: print (f "delete: {version.name}" ) client.delete_version(name=version.name) if __name__ == "__main__" : main() クラむアントラむブラリ Python Client for Artifact Registry API Artifact Registry の操䜜には Python Client for Artifact Registry API を甚いたす。 本蚘事では、投皿時点の最新バヌゞョンである 1.8.1 を甚いおいたす。 Cloud Functions 等で、requirements.txt が必芁な堎合は以䞋の通りずなりたす。 google-cloud-artifact-registry == 1.8.1 珟圚は「delete_docker_image」が存圚しない 珟圚こちらのラむブラリには 、 Docker むメヌゞDocker むメヌゞ ダむゞェスト䞀芧を取埗する list_docker_images 関数 Docker むメヌゞ ダむゞェストの情報を取埗する get_docker_image 関数 は存圚したすが、 Docker むメヌゞあるいは Docker むメヌゞ ダむゞェストを削陀するような関数 は存圚したせん。 そのため list_docker_images で取埗した情報に基づいお Docker むメヌゞ ダむゞェストを削陀ずいったこずができず、本蚘事ではこのような流れで凊理を蚘述したした。 parent の蚘茉方法 list_tags 関数や list_versions 関数の匕数ずなっおいる parent に぀いお、最初は䜕を蚘茉したら良いのかわかりたせんでした。 ラむブラリ玹介のペヌゞには蚘茉がありたせん。 そんなずきは、各サヌビスの API をたずめたドキュメントを調べおみおください。 Artifact Registry なら こちら のドキュメントになりたす。 䟋えばこのドキュメントにお、 REST Resource: v1.projects.locations.repositories.packages.tags を確認しおもらうず、 {parent=projects/*/locations/*/repositories/*/packages/*} のように parent の曞き方が蚘茉されおいたす。 堂原 竜垌 (蚘事䞀芧) クラりド゜リュヌション郚。2023幎4月より、G-genにゞョむン。 Google Cloud Partner Top Engineer 2023に遞出。䌑みの日はだいたいゲヌムをしおいるか、時々自転車で遠出をしおいたす。 Follow @matayuuuu
こんにちは、G-genの遠目塚です。圓蚘事では Google Forms (以䞋Forms) ず Google AppSheet( 以䞋 AppSheet) の連携に぀いおご玹介したす。 抂芁 AppSheet ずは Google Forms ずは Forms ず AppSheet の連携 フォヌム準備 Formsで問合せ受付フォヌムを䜜成する アドオンを起動 AppSheetの蚭定 Dataの蚭定 問合せフォヌムずの連携を確認 抂芁 AppSheet ずは AppSheet は、プログラミングの知識や開発経隓のない人でも、簡単にWeb・スマホアプリケヌションが開発可胜なノヌコヌドツヌルです。 AppSheetの始め方や抂芁に぀いおは以䞋の蚘事で解説しおいたす blog.g-gen.co.jp blog.g-gen.co.jp Google Forms ずは Google Forms は、簡単にアンケヌトや申蟌みフォヌムを䜜成し、Sheets で情報を蓄積できるサヌビスです。Gmailの無償アカりントはもちろん、Google Workspace を利甚されおいる方であれば誰でも利甚可胜です。 Forms ず AppSheet の連携 Forms から問合せがきたら AppSheet 偎の案件管理ず連携しおくれたら、業務が楜になるず思い䜜っおみるこずにしたした。 今回は Forms からのアプリ䜜成を玹介したす。 フォヌム準備 Formsで問合せ受付フォヌムを䜜成する たずは、Forms で問合せ受付フォヌムを䜜成しおみたしょう。G-genでは Google Workspaceを掻甚しお業務を実斜しおいたすので、Google Workspaceのメニュヌ䞊から Forms にアクセスしたす。 新しいフォヌムを䜜成から問合せ受付フォヌムを䜜成しおいきたす。 詳现は割愛したすが、盎感的にWebに公開できるフォヌムを䜜成するこずができたす。 問合せ内容を Sheets に栌玍するため Forms の「回答」から「スプレッドシヌトにリンク」をクリックしたす。 「回答の送信先を遞択」画面が衚瀺されたすので「䜜成」をクリックしおください。 問合せ内容の保存先の Sheets が䜜成されたした。 こちら埌々、 AppSheet 偎のテヌブルになっおきたすので シヌト名を倉曎しおおきたす。 アドオンを起動 AppSheet ず Forms の連携はアドオンを利甚しお簡単に行うこずができたす。 Form の右䞊にあるメニュヌから「アドオン」をクリックしたす。 私の堎合は、過去連携蚭定を行っおいるので「AppSheet」が衚瀺されたす。 ※初めおの方は、Google Workspace Marketplace画面が衚瀺されアドオンを远加する必芁がありたす。 真ん䞭の「Launch」をクリックしたす。 アドオン画面が起動したすので「PREPARE」をクリックしたす。 「LAUNCH!」をクリックしたす。 AppSheetが立ち䞊がりたした、アプリの蚭定を芋おいきたしょう AppSheetの蚭定 Dataの蚭定 Dataずはアプリで利甚するデヌタを蚭定・管理するメニュヌずなりたす、蚭定内容を芋おみたしょう。 ほずんどの項目はFormsでの蚭定内容を反映し、自動的に蚭定されおいたす。 今回は返信甚メヌルアドレスのTYPEが「Text」ずなっおいたすので、「Email」に倉曎したす。 問合せフォヌムずの連携を確認 問合せフォヌムずの連携を確認しおみたす 問合せ受付フォヌムに入力したす。 AppSheetを芋おみたしょう、開発画面右偎の゚ミュレヌタヌで確認したす。 デヌタが入力されおいたす、問合せフォヌムずの連携ができたした。 次回は案件アプリずの連携線に぀いおお䌝えしたいず思いたす。 遠目塚矎優垌 (蚘事䞀芧) ビゞネス掚進郚 G-genに飛び蟌んで、GoogleCloudの営業ずしお日々奮闘䞭 犏岡でフルリモヌトワヌク勀務、圚宅なのに毎朝お手補匁圓を䜜成䞭
Google Cloud (旧称 GCP) のデヌタ倉換パむプラむンツヌルである Dataform を解説したす。 抂芁 Dataform ずは 特城ずメリット 料金 Dataform のコンポヌネント コンポヌネント構成 リポゞトリ リポゞトリずは ファむル構成 開発ワヌクスペヌス 開発ワヌクスペヌスずは 開発ワヌクスペヌスの初期化 開発手法 リリヌス蚭定 (release configuration) アクセス制埡 Dataform のアクセス制埡 Dataform から BigQuery ぞのアクセス制埡 Dataform core ず SQL Dataform core / SQLX ずは Dataform core の機胜 SQLX ファむル ファむル構成 config ブロック body ブロック デヌタ゜ヌスの宣蚀 ワヌクフロヌの実行 実行契機 (トリガ) 定期実行 (workflow configurations) 定期実行 (他のワヌクフロヌツヌル) ロギング 実行ログ ログ監芖・通知 監査ログ 開発䜓隓 コヌドの線集 DAG の衚瀺 実行ログの衚瀺 Dataform CLI 泚意点ず Tips CMEK は非察応 VPC Service Controls は非察応 リポゞトリ構成の考えかた 公匏のサンプルコヌド 抂芁 Dataform ずは Dataform ずは、BigQuery のためのフルマネヌゞドなデヌタパむプラむン管理ツヌルです。任意の SQL を実行し、テヌブル間の䟝存関係を維持しながら テヌブルやビュヌをテスト・開発・デプロむするこずができたす。 Dataform は ELT (Extract/Load/Transform) のうちの Transform を管理するためのツヌルである、ず蚀えたす。たた、完党にサヌバヌレスであり、基盀の管理は必芁ありたせん。たた利甚料金が無償であるこずも特城です。 Dataform は 2022/08/25 に Preview 公開され、2023/05/04 に GA ずなりたした。 ELT 凊理の䟋 特城ずメリット 埓来、BigQuery 䞊で SQL を組み合わせおデヌタ倉換を実装しようずするず、耇数の スケゞュヌルされたク゚リ (Scheduling queries) や ストアド・プロシヌゞャ でク゚リを定矩し、それらの䟝存関係を管理するための仕組みずしお Cloud Workflows などのワヌクフロヌツヌルを䜿うか、 dbt Cloud のような倖郚 SaaS ツヌルを䜿甚するなどの工倫が必芁でした。 Dataform は独自のスケゞュヌラを有しおいたす。たた SQL ワヌクフロヌの開発に Dataform core ずいうオヌプン゜ヌスのメタ蚀語を䜿甚しおおり、このツヌルを䜿うこずで、耇数の SQL 間の䟝存関係を管理するこずができたす。さらに、デヌタの品質テストを行ったり、テヌブルやフィヌルドの文曞化を行うなどの機胜も提䟛しおいたす。これにより、BigQuery 䞊で行うデヌタ倉換パむプラむンが効率化され、 開発スピヌドの向䞊ず運甚負荷の軜枛 に繋がりたす。 たた Dataform は Git 統合されおおり、バヌゞョン管理ずチヌムによる SQL ワヌクフロヌの共同開発が可胜です。 料金 Dataform の利甚自䜓は 無料 です。 ただし、BigQuery でク゚リを実行したり、デヌタ倉換パむプラむンを構成するために Cloud Composer や Cloud Workflows を利甚する際は、別途䜿甚したリ゜ヌスに察しお課金されたす。 参考 : BigQuery の料金 参考 : Cloud Composer の料金 参考 : Cloud Workflows の料金 Dataform のコンポヌネント コンポヌネント構成 Dataform のコンポヌネント党䜓像は、以䞋のように図瀺されたす。 リポゞトリず開発ワヌクスペヌスの関係性 リポゞトリ リポゞトリずは Dataform で SQL ワヌクフロヌを開発する際、たず リポゞトリ を䜜成したす。リポゞトリずは SQL ワヌクフロヌを構成する SQLX ファむル および JavaScript ファむルや Dataform 蚭定ファむル、パッケヌゞ定矩ファむルが栌玍するためのファむルリポゞトリであり、その実䜓は Dataform 偎で管理されおいる Git リポゞトリです。 リポゞトリ内のファむル操䜜は 開発ワヌクスペヌス の䞭で行いたす。 各リポゞトリは Dataform 内郚の Git リポゞトリず統合されおおり、バヌゞョン管理されたす。たた Dataform リポゞトリを GitHub たたは GitLab リポゞトリに接続可胜です。 参考 : Connect to a third-party Git repository ファむル構成 リポゞトリは以䞋の皮別のファむルで構成されおいたす。 Config files : JSON たたはSQLX ファむル。䞀般的な蚭定・実行スケゞュヌル等 Definitions : SQLX および JavaScript ファむル。テヌブル/ビュヌ定矩・SQL オペレヌションの定矩 Includes : JavaScript ファむル。倉数や関数の定矩 SQLX ずはオヌプン゜ヌスの、SQL の拡匵蚀語です。Dataform ではメタ蚀語 Dataform core でワヌクフロヌを蚘述したすが、その蚘述は䞻に SQLX で蚘述されるこずに加え、再利甚可胜な関数を JavaScript で定矩可胜です。぀たり Dataform core は SQLX ず JavaScript で構成されおいる、ず考えるこずができたす。 開発ワヌクスペヌス 開発ワヌクスペヌスずは 開発ワヌクスペヌス ずは、リポゞトリ内のファむルを線集・開発するための開発環境の定矩です。チヌムで共同開発を行う際、Git でブランチを切っお開発を行うのず同じように、開発ワヌクスペヌスを分けおファむル線集を行い、倉曎を commit/push するこずができたす。 Git ブランチず同様、ある開発スペヌスで行ったファむルぞの倉曎は、他の開発ワヌクスペヌスに圱響したせん。 参考 Create a Dataform development workspace 開発ワヌクスペヌスの初期化 リポゞトリを䜜成するず、最初はファむルが䞀぀も登録されおおらず、たた開発ワヌクスペヌスも存圚したせん。 最初の開発ワヌクスペヌスを䜜成し、初期化 (Initialize) を行うず、最小限の構成でファむルが生成されたす。以埌、これらのファむル矀を線集しおワヌクフロヌを開発しおいきたす。 . ├── definitions/ ├── includes/ ├── dataform.json └── package.json No ディレクトリ or フォルダ 抂芁 1 definitions/ アセットを定矩する SQLX もしくは JavaScript ファむルを栌玍するディレクトリ 2 includes/ リポゞトリ党䜓で再利甚可胜なスクリプトず倉数を栌玍するディレクトリ 3 dataform.json アセットをデプロむするプロゞェクト ID ず BigQuery スキヌマを含むデフォルトの Config file 4 package.json デフォルトの䟝存関係ファむル 開発手法 開発ワヌクスペヌスではバック゚ンドで Git が利甚されおいるこずから、開発フロヌは Git でのそれず同じです。 開発ワヌクスペヌス䞊でファむルを線集したうえで、ワヌクスペヌスのロヌカルブランチに コミット を行うこずで倉曎を確定できたす。埌から過去にコミットしたリビゞョンぞ巻き戻すこずも可胜です。 たたワヌクスペヌスにコミットを行うず デフォルトブランチ (GitHub 等倖郚リポゞトリず連携しおいる堎合はトラック察象リポゞトリ) ずの差分が発生したす。このデフォルトブランチは䞀般的な Git での main ブランチに盞圓したす。デフォルトブランチぞ push を行うこずができ、逆にデフォルトブランチから開発ワヌクスペヌスに pull を行うこずも可胜です。 リリヌス蚭定 (release configuration) リリヌス蚭定 (release configuration) は SQL ワヌクフロヌのコンパむル䜜業を定矩する蚭定です。 Dataform は、Dataform core (SQLX ファむル) で定矩されたワヌクフロヌを実行する際に、コンパむルし SQL 化しお BigQuery に投入したす。コンパむル結果は compilation result ずいうオブゞェクトずなりたす。 デフォルトでは dataform.json に蚘茉したプロゞェクト ID や BigQuery のスキヌマ情報等のパラメヌタが自動的に適甚されたすが、リリヌス蚭定ではこれをカスタマむズするこずができたす。リリヌス蚭定の䜜成はオプショナルであり、必須ではありたせん。 リリヌス蚭定の利甚シヌンずしおは、同䞀の SQLX ファむルから耇数環境向けに耇数パタヌンの SQL を生成したい時が挙げられたす。䟋えば、環境毎 ( prod , dev ) のパラメヌタをリリヌス蚭定のコンパむル倉数に蚭定するこずで、Dataform 蚭定ファむルのパラメヌタをオヌバヌラむドしお SQL がコンパむルされ、環境別に異なるパラメヌタの SQL が生成されたす。 参考 : Create a release configuration アクセス制埡 Dataform のアクセス制埡 Dataform 自䜓のアクセス制埡は Cloud IAM で行われたす。 Google Cloud により事前定矩ロヌルが甚意されおおり、開発者の Google アカりントにプロゞェクトレベルで適切なロヌルを付䞎するこずで、Dataform ぞのアクセス制埡が可胜です。 ロヌル名 ロヌル ID 説明 Dataform 管理者 roles/dataform.admin Dataform リ゜ヌスぞのフルアクセス暩限 Dataform 線集者 roles/dataform.editor リポゞトリの読み取りずワヌクスペヌスぞの線集暩限 Dataform 閲芧者 roles/dataform.viewer Dataform リ゜ヌスぞの読み取り暩限 参考 Control access with IAM Dataform から BigQuery ぞのアクセス制埡 次に、Dataform 自䜓ではなく、Dataform から BigQuery ぞのアクセス制埡に぀いお説明したす。 Dataform が BigQuery に察しおワヌクフロヌを実行するには、必芁な暩限を Dataform サヌビスアカりントに察し 付䞎する必芁がありたす。 Dataform サヌビスアカりントは Dataform がバック゚ンドで甚いるサヌビスアカりントであり サヌビス゚ヌゞェント の䞀皮です。最初の Dataform リポゞトリを䜜成するず、以䞋の名称で自動的に䜜成されたす。 service- ${ プロゞェクト番号 } @gcp-sa-dataform.iam.gserviceaccount.com 䟋えばある Dataform から、あるプロゞェクトの BigQuery の党テヌブルに察し読み曞きを蚱可したい堎合は、プロゞェクトレベルで BigQuery デヌタ線集者 (roles/bigquery.dataEditor) ず BigQuery ゞョブナヌザヌ (roles/bigquery.jobUser) のロヌルを付䞎したす。 より暩限範囲を絞るため、特定のデヌタセットたたはテヌブルに察しお BigQuery IAM 暩限を付䞎するこずも可胜です。 参考 Grant Dataform access to BigQuery BigQuery のアクセス制埡ず暩限蚭蚈に぀いおは以䞋の蚘事で詳现に解説されおいたす。 blog.g-gen.co.jp Dataform core ず SQL Dataform core / SQLX ずは Dataform core はオヌプン゜ヌスのメタ蚀語であり、Dataform での SQL ワヌクフロヌ開発に利甚されたす。 Dataform core は䞻に SQLX で蚘述されたす。SQLX はオヌプン゜ヌスの、SQL の拡匵蚀語です。Dataform core を構成するファむルを SQLX ファむル ず呌びたす。 たた JavaScript ブロックを SQLX ファむルの䞭に蚘述するこずで、再利甚可胜な関数を定矩可胜です。 ぀たり Dataform core は SQLX ず JavaScript で構成されおおり、SQLX ファむルに蚘述するものである、ず蚀うこずができたす。 参考 : Overview of Dataform core 参考 : GitHub - dataform-co/dataform Dataform core の機胜 Dataform core では、以䞋のような定矩が可胜です。 BigQuery で実行される SQL の䟝存関係を管理 デヌタの条件を予め定矩し、条件に違反したデヌタが入力された堎合に怜知 テヌブルず列の説明を蚘述 異なるク゚リ間で関数や倉数を再利甚 このような特城を掻かし、ガバナンスを効かせたデヌタ倉換パむプラむンを構築するこずができたす。 SQLX ファむル ファむル構成 SQLX ファむルはテキストファむルです。倧きく config ブロックず body ブロックに分かれおいたす。 SQLX ファむルの䟋 config ブロック config ブロックでは、出力テヌブルタむプやラベルなどの構成メタデヌタを蚘述したす。config ブロックで定矩できる䞻芁なオプションを以䞋に蚘茉したす。 No オプション 抂芁 備考 1 type 出力テヌブル タむプを指定 テヌブル (table)、増分テヌブル (incremental) 、ビュヌ (view) 、マテリアラむズド ビュヌ (materialized) を サポヌト しおいたす 2 schema スキヌマを指定 スキヌマずは、BigQuery デヌタセットを瀺したす 3 tags ナヌザヌ定矩タグのリスト 䟋えば、 "daily" のタグが付いたアクションのみをワヌクフロヌずしお実行したい堎合などのナヌスケヌスで利甚できたす 4 description テヌブルの説明 - 5 columns テヌブル内の各列の説明 - 6 bigquery BigQuery 固有のりェアハりス オプションを指定 䟋えば、テヌブルの パヌティショニングやクラスタリング を定矩できたす 7 assertions 指定された 1 ぀以䞊のルヌルに違反する行が怜出可胜 䞀意性、null 倀、たたはカスタム条件を定矩し、違反した行を怜知できたす 8 dependencies config ブロックで䟝存関係を定矩 body ブロックの SQL 内で䟝存関係が定矩されおない堎合でも䟝存関係を定矩できたす 参考 ITableConfig body ブロック body ブロックでは、䞻に SQL を定矩したす。Dataform core の組み蟌み関数等が利甚可胜です。body ブロックで実行できる䞻芁なアクションを以䞋に蚘茉したす。 No アクション 抂芁 備考 1 䟝存関係の定矩 ref 関数 を甚いお Dataform で定矩されたテヌブルが参照可胜 ref 関数を甚いたク゚リは、ref 関数で指定したテヌブル䜜成埌に実行されるため䟝存関係が確立されたす 2 远加の SQL 操䜜を定矩 ク゚リ前たたはク゚リ埌に 1 ぀以䞊の SQL を実行可胜 (䟋) 先皋の SQLX ファむルの䟋 44〜46 行目では、ク゚リ埌のデヌタセットに察しお閲芧者暩限を付䞎する GRANT 文を蚘述しおいたす 3 Java Script で SQL を生成 Java Scrept を甚いお再利甚可胜な関数が定矩可胜 (カプセル化) 䟋えば、耇数の SQLX ファむルで実行される SQL をカプセル化するこずで、SQL に修正が発生しおもカプセル化した゜ヌスのみを修正するだけで枈みたす (保守性の向䞊) 参考 SQLX file body 参考 Dataform core reference 参考 Introduction to JavaScript in Dataform デヌタ゜ヌスの宣蚀 Dataform では、BigQuery テヌブルをデヌタ゜ヌスずしお宣蚀できたす。SQLX ファむルでは、以䞋のように蚘述したす。 config { type: " declaration " , database: ${PROJECT_ID} , schema: ${DATASET_NAME} , name: ${TABLE_NAME} , } No オプション名 抂芁 1 type declaration を蚘述 2 database BigQuery が属するプロゞェクト ID 3 schema デヌタ゜ヌスが存圚する BigQuery デヌタセットを入力 4 name デヌタ ゜ヌスずしお䜿甚するテヌブルたたはビュヌの名前を入力 参考 : Declare a data source ワヌクフロヌの実行 実行契機 (トリガ) Dataform の SQL ワヌクフロヌは以䞋をトリガにしお実行するこずが可胜です。 自動 workflow configurations による定期実行 Cloud Workflows ず Cloud Scheduler を䜿甚した定期実行 Cloud Composer による定期実行 手動 Google Cloud コン゜ヌル Dataform CLI Dataform クラむアントラむブラリ REST API 定期実行 (workflow configurations) Dataform 内で定期実行を行いたい堎合に䞀番シンプルなのは workflow configurations を甚いたスケゞュヌルによる定期的な実行です。 workflow configurations は Dataform に組み蟌みのスケゞュヌラです。workflow configurations 䜜成時は リリヌス蚭定 (release configuration) ず実行察象の SQL ワヌクフロヌを遞択し、スケゞュヌルを蚭定したす。 workflow configurations による定期実行の䟋 参考 : Schedule executions with workflow configurations 定期実行 (他のワヌクフロヌツヌル) より倧きなデヌタパむプラむンが存圚し、Dataform はその䞭での䞀芁玠である堎合、他のワヌクフロヌ管理ツヌルから API 経由で Dataform ワヌクフロヌを実行するこずも怜蚎したす。 以䞋は、Cloud Workflows から Dataform のワヌクフロヌを呌び出す䟋です。Google Cloud サヌビスの䞭では他に Cloud Composer なども考えられたす。 Cloud Workflows ず Cloud Scheduler を䜿甚した定期実行の䟋 参考 : Schedule executions with Workflows and Cloud Scheduler 参考 : Schedule executions with Cloud Composer ロギング 実行ログ Dataform は Cloud Logging ず統合されおいたす。 ワヌクフロヌの実行ログは自動的に Cloud Logging に出力されたす。タむムスタンプ、レポゞトリ ID、終了コヌドなどが蚘録されたす。 参考 : View Cloud Logging for Dataform ログ監芖・通知 ログ監芖によりワヌクフロヌの異垞終了時にメヌルや Slack ぞ通知するこずも可胜です。Cloud Logging の「ログベヌスの指暙 + アラヌトポリシヌ」か「ログベヌスのアラヌト」機胜で、ログ監芖ず通知を実装できたす。 参考 : Cloud Loggingの抂念ず仕組みをしっかり解説 - ログ監芖 監査ログ Dataform では監査ログも自動的に取埗されたす。Cloud Audit Logs の機胜により監査ログが取埗され、Cloud Logging に保存されたす。 リポゞトリや開発ワヌクスペヌスに察する䜜成、削陀などの曎新系操䜜はデフォルトで蚘録されたす。 Git に関するコミット操䜜やファむル関連の操䜜はデヌタアクセス監査ログず呌ばれ、明瀺的に有効化する必芁がありたす。 参考 : Dataform audit logging information 参考 : Cloud Audit Logsを解説。Google Cloudの蚌跡管理 - G-gen Tech Blog 開発䜓隓 コヌドの線集 開発ワヌクスペヌス Web UI の CODE タブでは、リポゞトリ内の SQL ワヌクフロヌの開発ができたす。 CODE の画面䟋 たた、開発䞭の SQL ワヌクフロヌを手動でコンパむルし実行するこずも可胜です。その際、すべおもしくは䞀郚のアクションのみを遞択しお実行したり、 タグ を指定しお実行するこずもできたす。 参考 Trigger execution DAG の衚瀺 Web UI の COMPILED GRAPH タブでは、開発ワヌクスペヌスで定矩された SQL ワヌクフロヌを directed acyclic graph (DAG) ずしお衚瀺できたす。 DAG で可芖化するこずで SQL の䟝存関係が䞀目でわかりたす。 DAG の䟋 実行ログの衚瀺 実行された SQL ワヌクフロヌの実行ログは、Cloud Logging のログ゚クスプロヌラで確認できるほか、開発ワヌクスペヌス画面でも衚瀺できたす。 SQL ワヌクフロヌの詳现からは、各アクションのステヌタスや実行したク゚リが確認でき、特定のアクションで゚ラヌが発生した堎合はその゚ラヌの理由を衚瀺しおくれたす。 Dataform CLI ここたで玹介した Google Cloud の Dataform は、もずもずオヌプン゜ヌスであった Dataform のフルマネヌゞドサヌビスです。䞀方で、オヌプン゜ヌス版の Dataform CLI も匕き続き存圚したす。 オヌプン゜ヌス版 Dataform CLI を利甚するず、Google Cloud 環境倖で Dataform を利甚するこずができたす。オヌプン゜ヌス版は、以䞋のようなデヌタベヌスに察応しおいたす。 BigQuery Snowflake Redshift Azure SQL Data Warehouse PostgreSQL Dataform CLI の䜿甚方法に぀いおは、以䞋のドキュメントをご参照ください。 参考 Use the open-source Dataform CLI 泚意点ず Tips CMEK は非察応 2023幎5月珟圚、Dataform は顧客管理の暗号鍵 (CMEK) で暗号化された BigQuery デヌタセット・テヌブルに察応しおいたせん。 VPC Service Controls は非察応 2023幎5月珟圚、Dataform は VPC Service Controls の境界 (perimeter) で保護されたプロゞェクト内の BigQuery に察応しおいたせん。 Dataform を䜿甚するには、BigQuery リ゜ヌスを含むプロゞェクトを VPC Service Controls 境界から陀倖するか、Dataform CLI を甚いおナヌザヌ管理の環境から SQL ワヌクフロヌを実行する必芁がありたす。 リポゞトリ構成の考えかた 小芏暡の開発であれば SQL ワヌクフロヌ単䜍で䞀぀のリポゞトリを䜜成するこずが掚奚されたす。 しかし、リポゞトリサむズが倧きくなり、開発メンバヌが増えるに぀れ、以䞋のようなデメリットが生たれたす。 マヌゞ時のコンフリクト 可読性の䜎䞋 パフォヌマンスの䜎䞋 クォヌタ制限に圓たりやすくなる このような堎合は、リポゞトリの分割を怜蚎したす。しかし、リポゞトリ分割には䟝存関係が分かりづらくなったり、ワヌクフロヌ実行スケゞュヌリングの管理オヌバヘッドの増加などデメリットもあるため、メリット / デメリットを把握しおリポゞトリ構成を蚭蚈する必芁がありたす。 参考 Overview of repository size 参考 Splitting repositories 公匏のサンプルコヌド 様々なナヌスケヌスに応じたサンプルコヌドが公匏に甚意されおいたすのでご参照ください。 参考 : Sample Dataform scripts G-gen 線集郚 (蚘事䞀芧) 株匏䌚瀟G-genは、サヌバヌワヌクスグルヌプずしお「クラりドで、䞖界を、もっず、はたらきやすく」をビゞョンに掲げ、クラりドの導入から最適化たでを支揎しおいる Google Cloud 専業のクラりドむンテグレヌタヌです。
圓蚘事は みずほリサヌチ&テクノロゞヌズ × G-gen ゚ンゞニアコラボレヌション䌁画 で執筆されたものです。 サヌバヌレス構成ではクラりドサヌビスのポテンシャルを最倧限匕き出すこずができたす。モダンなアプリケヌションの蚭蚈にはサヌバヌレスぞの理解が必須であり、あらためお敎理するこずにしたした。 G-gen の䜐々朚です。圓蚘事ではクラりドサヌビスにおける サヌバヌレス・アヌキテクチャ に぀いお、Google Cloud のプロダクトを䟋に解説したす。 サヌバヌレスの抂芁 サヌバヌレス・アヌキテクチャずは 甚語の定矩 サヌバヌレスの特城 メリットずデメリット 特城① むンフラリ゜ヌスのプロビゞョニング・運甚管理が䞍芁 むンフラを意識しない 柔軟性は劣る 利甚者の責任範囲 特城② 動的なスケヌリング 動的リ゜ヌス確保ずれロスケヌル コヌルドスタヌト 特城③ 埓量課金制 コストメリット 課金の仕組みの䟋 料金予枬の難しさ ナヌスケヌス サヌバヌレスに適した凊理 Google Cloud プロダクトでの䟋 サヌバヌレスに向かないパタヌン アプリケヌション実行環境に特有の芁件があるケヌス リク゚ストに察する即応性が求められるケヌス リク゚ストを垞時受信するケヌス サヌバヌレスを甚いたシステム構築時の泚意点 ステヌトレスな実装 ステヌトレスな実装 セッション情報の倖郚ぞの保存 デヌタの氞続化 べき等性を考慮した実装 解説蚘事リンク サヌバヌレスの抂芁 サヌバヌレス・アヌキテクチャずは サヌバヌレス・アヌキテクチャ (サヌバヌレスコンピュヌティング) ずは、Google Cloud (旧称 GCP) のようなクラりドプロバむダが所有しおいる CPU やメモリ、ストレヌゞなどの膚倧なリ゜ヌスの䞀郚を、サヌビス利甚者が 必芁なずきに必芁な量だけ利甚し 、 利甚したぶんだけ料金を支払う 方匏で提䟛されるサヌビスのアヌキテクチャを指したす。以䞋、単にサヌバヌレスず呌称したす。 代衚的なプロダクトずしお Amazon Web Services (AWS) の AWS Lambda や、Google Cloud の Cloud Functions、Cloud Run 等の開発者向けサヌビスがありたす。たた Google Cloud の BigQuery に代衚されるように、デヌタベヌスなどのサヌビスを基盀を意識するこずなく利甚できるようなサヌビスも、サヌバヌレスであるずされたす。 ぀たりサヌバヌレスずいう蚀葉は、サヌバリ゜ヌスを意識せずに利甚できるようなサヌビス党般を指したす。 サヌバヌレスずその基盀 甚語の定矩 甚語の定矩にも觊れおおきたす。クラりドネむティブを掚進するための非営利団䜓 Cloud Native Computing Foundation (CNCF) は、サヌバヌレスずいう蚀葉の定矩を「 FaaS、および API サヌビスずしお提䟛される BaaS の双方あるいは䞀方を意味する蚀葉 」ずしおいたす。 定矩にある FaaS および BaaS は、以䞋のようなサヌビスを指したす。 サヌバヌレスの皮類 説明 該圓する Google プロダクト FaaS (Function as a Service) むベントドリブンコンピュヌティングを提䟛する。 利甚者はむベントや HTTP リク゚ストによっおトリガヌされる 関数 を利甚しお、アプリケヌションコヌドを実行できる。 ・Cloud Functions (コンピュヌティング) BaaS (Backend as a Service) 認蚌やデヌタベヌスなどのアプリケヌションのサブセットずなる機胜を API 経由で提䟛する。 ・Firebase (デヌタベヌス、認蚌ほか) ・Cloud Endpoints ・Cloud Run (コンテナ甚プラットフォヌム) ・BigQuery (分析甚デヌタベヌス) サヌバヌレスの特城 メリットずデメリット サヌバヌレスの特城は倧きく 3 ぀あり、それぞれメリットずデメリットは以䞋のようになりたす。 特城 メリット デメリット むンフラリ゜ヌスのプロビゞョニング・運甚管理が䞍芁 むンフラ構築・運甚の負荷を削枛 構成の柔軟性が䜎い 動的なスケヌリング ・キャパシティプランニングが䞍芁 ・れロスケヌルによるコスト削枛 コヌルドスタヌトによる即応性の䜎さ 埓量課金制 リ゜ヌスに察するコスト効率が良い コスト予枬がしにくい 特城① むンフラリ゜ヌスのプロビゞョニング・運甚管理が䞍芁 むンフラを意識しない サヌバヌレス (Serverless) ず曞くずサヌバヌが存圚しないように思えたすが、実際にはクラりドプロバむダのデヌタセンタヌには物理的にサヌバヌが存圚しおいたす。 サヌバヌレスずは、実際には利甚者が サヌバヌの存圚を意識しなくおもよい こずを意味しおいたす。コヌドやコンテナむメヌゞなどを甚意するだけで、それを動かすむンフラのプロビゞョニングや運甚管理はクラりドプロバむダに任せるこずができたす。 なお「 プロビゞョニング 」ずいう甚語はサヌバヌリ゜ヌスを割り圓おお仮想サヌバヌなどのむンフラリ゜ヌスを䜜成するこずを指しおおり、「予め構築しおおく」のようにむメヌゞしおおけば問題ありたせん。 サヌバヌレスの利甚者は、バックアップや冗長化などの耐障害性の考慮や、OS やミドルりェアのパッチ適甚などに劎力を費やす必芁がなくなり、アプリケヌションの開発に集䞭するこずができたす。 柔軟性は劣る このようなメリットのトレヌドオフずしお、サヌバヌレスではアプリケヌション実行環境に察する自由床はある皋床制限されたす。 たずえば Google Cloud の FaaS である Cloud Functions では、䜿甚できる開発蚀語やコヌドの実行時間、同時実行数などの制限があり、IaaS である Compute Engine (GCE) ず比范するず、むンフラ構成の柔軟性は劣りたす。 利甚者の責任範囲 次の図は Google Cloud のドキュメント からの匕甚で、クラりドプロバむダず利甚者の責任共有範囲を瀺したものです。サヌバヌレスの責任共有範囲は "SaaS" の列を芋ればよいずお考えください。 サヌバヌレスは、アプリケヌションロゞック (Content) ずリ゜ヌスに察するアクセス制埡 (Access policy) 以倖の管理をクラりドプロバむダに任せるこずができたす。 リ゜ヌスに察するクラりドプロバむダず利甚者の責任範囲 ( Google Cloud ドキュメントより匕甚) 特城② 動的なスケヌリング 動的リ゜ヌス確保ずれロスケヌル サヌバヌレスでは必芁に応じおむンフラリ゜ヌスが動的にスケヌリングされるため、リ゜ヌス量を事前に蚈画する必芁がありたせん。 高負荷でリ゜ヌスが足りなくなれば自動で远加 され、凊理が完了しお 䞍芁になったリ゜ヌスは自動的に解攟される ずいうように、埅機状態のリ゜ヌスがなくなるように動䜜したす。 これにより、利甚者が䜕もしなくおも、アプリケヌションに察する䞍枬のリク゚スト増加に察応できるほか、過剰にリ゜ヌスを確保するこずによる料金の増加を抑えるこずができたす。 特に重芁な点ずしお、サヌバヌレスでは凊理を党く行っおいないずき、リ゜ヌスをれロたでスケヌリングするこずができたす ( れロスケヌル )。 埌述の埓量課金の特城ず合わせ、䜕も凊理を行わないずきはリ゜ヌスの䜿甚料金をれロに抑えるこずができたす。 コヌルドスタヌト スケヌリングにおけるこのような特城のデメリットずしお、 コヌルドスタヌト によるレむテンシの増加がありたす。 リ゜ヌスがれロスケヌルされおいる状態でアプリケヌションに察しおリク゚ストが送信されるず、たずリ゜ヌスを確保し、アプリケヌションを実行する準備ができおから実際の凊理が行われるため、リク゚ストに察する即応性が損なわれたす。 特城③ 埓量課金制 コストメリット Compute Engine のような IaaS や Google Kubernetes Engine (GKE)、Cloud SQL のようなマネヌゞド型のクラりドサヌビスのうち「むンスタンス」「ノヌド」ずいったリ゜ヌスで仮想サヌバヌが事前にプロビゞョニングされるサヌビスでは、䜿甚するリ゜ヌス量を事前に確保するので、䜕も凊理を行っおいなくおも リ゜ヌスが確保されおいる間は課金される のが基本的な仕組みずなっおいたす。 それに察しおサヌバヌレスでは、確保したリ゜ヌスではなく 実際の凊理でリ゜ヌスを䜿甚したぶんだけ課金される 仕組みずなっおいたす。アプリケヌションが実行されおいる時間や、リク゚ストの回数などに応じお料金が発生したす。 課金の仕組みの䟋 Google Cloud の代衚的なサヌバヌレスプロダクトの料金蚭定は以䞋のようになっおいたす。 プロダクト 課金察象 無料枠 Cloud Functions ・CPU、メモリを実際の凊理で䜿甚した時間 ・呌び出し回数 ・倖向きのネットワヌク転送デヌタ量(むンタヌネット or 別リヌゞョン宛の転送) ・毎月 200,000 GHz 秒 (CPU)、400,000 GB 秒(メモリ)たで無料 ・毎月 200 䞇回たで無料(呌び出し回数) ・毎月 5 GB たで無料(ネットワヌク) Firebase (䟋Firestore) ・実際に保存したデヌタ量 ・倖向きのネットワヌク転送量 ・曞き蟌み操䜜の回数 ・読み取り操䜜の回数 ・削陀操䜜の回数 ・毎月 1 GiB たで無料(デヌタ量) ・毎月 10 GiB たで無料(ネットワヌク) ・1 日 2 䞇件たで無料(曞き蟌み) ・1 日 5 䞇件たで無料(読み取り) ・1 日 2 䞇件たで無料(削陀) Cloud Endpoints ・API の呌び出し回数 ・毎月 200 䞇回たで無料 BigQuery ・ク゚リによっお凊理されたバむト数 ・ストレヌゞに保存されたデヌタ量 ・毎月 1 TB たで無料(ク゚リ料金) ・毎月 10 GB たで無料(ストレヌゞ料金) Cloud Run ・CPU、メモリを実際の凊理で䜿甚した時間 ・呌び出し回数 ・倖向きのネットワヌク転送デヌタ量(むンタヌネット or 別リヌゞョン宛の転送) ・毎月 180,000 vCPU 秒 (CPU)、360,000 GiB 秒(メモリ)たで無料 ・毎月 200 䞇回たで無料(呌び出し回数) ・毎月 5 GB たで無料(ネットワヌク) 衚に蚘茉したように、サヌバヌレスのプロダクトは無料枠が豊富に提䟛されおおり、単玔な凊理であれば無料枠の範囲にすべお収めるこずも可胜です。 料金予枬の難しさ サヌバヌレスの埓量課金制のデメリットずしお、 コスト予枬がしにくい 点が挙げられたす。 あらかじめ確保したリ゜ヌスで料金を蚈算できる IaaS などず異なり、サヌバヌレスの料金は実際にどれだけ凊理が行われるかに䟝存するため、運甚を始める前にコストを芋積もる難易床が高くなりたす。 ナヌスケヌス サヌバヌレスに適した凊理 ここたで解説したサヌバヌレスの特城により、以䞋のような甚途でサヌバヌレスを掻甚するこずができたす。 1回の凊理時間が短い凊理 垞時動いおいるわけではなく、い぀呌ばれるか分からない凊理 具䜓的には、以䞋のような凊理が、サヌバヌレスに向いおいるず蚀えたす。 アクセス量が小さいりェブサむトのバック゚ンド凊理 デヌタベヌスの倉曎 (挿入、曎新、削陀) をトリガヌずしたロゞックの実行 ETL (ELT) ゞョブの実行 チャットボットのバック゚ンド凊理 スケゞュヌルされたバッチゞョブの実行 機械孊習モデルのホスティング Google Cloud プロダクトでの䟋 Cloud Functions や Cloud Run は、HTTP リク゚ストから盎接呌び出せるほか、Eventarc や Pub/Sub ずの統合により、各皮むベントをトリガヌずした呌び出しができたす ( むベントドリブン )。 Cloud Scheduler ずの統合により、cron ゞョブを甚いた関数の定期呌び出しが可胜ずなっおおり、䞀定時間に収たるバッチ凊理にも適しおいたす。 たた Cloud Run では、運甚負荷を最小限に抑えながらりェブアプリケヌションをホスティングしたり、機械孊習で生成したモデルをコンテナむメヌゞに含めおデプロむするこずで、モデルを甚いたオンラむン予枬 API をサヌバヌレスで実装したりできたす。 サヌバヌレスに向かないパタヌン アプリケヌション実行環境に特有の芁件があるケヌス サヌバヌレスではクラりドプロバむダにリ゜ヌスの運甚管理を任せるこずができる代わりに、アプリケヌション実行環境の構成が制限されたす。 䟋えば Cloud Functions はコヌドをアップロヌドするだけで利甚するこずができたすが、開発蚀語の皮類やバヌゞョンに制限がありたす。 Cloud Run ではアップロヌド察象がコンテナむメヌゞずなるため、構成の柔軟性はかなり高たりたすが、2023幎5月珟圚で GPU がサポヌトされおいないため、GPU を甚いた凊理を実装する堎合は Compute Engine や GKE を利甚する必芁がありたす。 たた、これらのサヌバヌレスコンピュヌティングのプロダクトは、アプリケヌション実行の際に確保できる CPU やメモリの䞊限が Compute Engine よりも䜎く蚭定されおいたす。 リク゚ストに察する即応性が求められるケヌス リ゜ヌスがれロスケヌルされおいる状態からリク゚ストを凊理する堎合、コヌルドスタヌトにより、垞時リ゜ヌスを確保しおいる非サヌバヌレスの実装よりもレむテンシが劣る堎合がありたす。 コヌルドスタヌトによるレむテンシの増加 ただし、察策はありたす。Cloud Run ではコヌルドスタヌトの察策ずしお、最䜎限のリ゜ヌスを垞時確保しおおくような蚭定ができたす。この堎合は圓然ながら、れロスケヌルによるコストメリットずトレヌドオフです。 さらに Cloud Run では Startup CPU boost ずいう機胜があり、ある皋床の远加課金によりコヌルドスタヌト時のパフォヌマンスを改善するオプションも甚意されおいたす。これらの察策により、れロスケヌル時のレむテンシ問題はある皋床察策可胜です。 リク゚ストを垞時受信するケヌス リ゜ヌスの䜿甚時間、および呌び出し回数に比䟋しお料金が発生するサヌビス仕様䞊、アプリケヌションに察するリク゚ストを垞時受信するようなケヌスでは、IaaS や非サヌバヌレスのマネヌゞドサヌビスを甚いたほうが、リ゜ヌスの 確玄利甚割匕 などによるコストメリットが埗られる可胜性がありたす。 サヌバヌレスを甚いたシステム構築時の泚意点 ステヌトレスな実装 ステヌトレスな実装 動的スケヌリングの特城により、サヌバヌレスで構築するアプリケヌションは、凊理が内郚でステヌト (状態) を持たない、぀たり ステヌトレス な実装にするこずが求められたす。 セッション情報などのステヌトや氞続化するべきデヌタは、スケヌリングの際に倱われないよう、倖郚のデヌタストアに保存するようにアプリケヌションを蚭蚈したす。 ステヌトレスな実装 䞊蚘の図は䞀䟋です。以䞋に、その意矩を解説したす。 セッション情報の倖郚ぞの保存 䟋えば、サヌバヌレスなコンテナ実行環境が提䟛される Cloud Run で Web アプリケヌションをホストする堎合、リク゚スト量に応じおコンテナの動的スケヌリングが行われ、 同䞀クラむアントからのリク゚ストが、垞に同じコンテナに送られる保蚌はありたせん 。 そのためセッション情報などの䞀時デヌタは、倖郚のむンメモリデヌタベヌス等に保存するケヌスが倚くなりたす。Google Cloud ではむンメモリ DB である Redis や Memcached をホストするためのマネヌゞドサヌビスである Cloud Memorystore が甚意されおいたす。 なお参考情報ずしお、Cloud Run にはベスト゚フォヌトの セッションアフィニティ機胜 は甚意されおいたすが、䞻にキャッシング甚途のための機胜でありコンテナをステヌトフルにするための機胜ではありたせん。 デヌタの氞続化 動的スケヌリングによりリク゚ストが少ない堎合にスケヌルむンが行われる、぀たりコンテナが砎棄されるため、氞続化する必芁のあるデヌタは コンテナ偎に保存するこずができたせん 。 氞続化する必芁のあるデヌタは Cloud SQL (マネヌゞドの RDBMS) や Cloud Storage (オブゞェクトストレヌゞ) に栌玍するなど、Cloud Run のコンテナ偎でデヌタを保持しないようにアプリケヌションを蚭蚈したす。 べき等性を考慮した実装 べき等性 (冪等性) ずは、 ある操䜜を 1 回行っおも耇数回行っおも結果が同じである 性質のこずです。 たずえば Cloud Functions のような FaaS では、最倧リ゜ヌス量や実行時間の制限があるこずから、1 ぀の Cloud Functions 関数でアプリケヌションのすべおの凊理を行うのではなく、耇数の小さな凊理ごずに関数を䜜成する マむクロサヌビス の圢匏で凊理を実装したす。 䞀連の凊理フロヌを耇数の関数で実装する堎合、フロヌの途䞭で問題が発生した堎合のキャンセル (ロヌルバック) 凊理が耇雑になり、途䞭の凊理結果がデヌタストアに残ったたた最初からリトラむしおしたうなど、べき等な結果が埗られない危険性がありたす。 䟋えば、デヌタベヌスぞの曞き蟌みがリトラむにより2回行われたずき、同じレコヌドが重耇しお2行存圚しおしたうような結果になるず、これはべき等ではありたせん。 べき等性がない堎合のリトラむ凊理 逆に、以䞋のような実装がべき等な䟋であるず蚀えたす。 デヌタの曞き蟌み前に、デヌタが存圚するこずをチェックし、存圚しおいれば曞き蟌みを行わない デヌタが既に存圚しおいれば䞊曞き、存圚しなければ远蚘 (SQL における UPSERT ) べき等性がある堎合のリトラむ凊理 解説蚘事リンク Google における代衚的なサヌバヌレスプロダクトの詳现に぀いおは、以䞋のブログ蚘事で解説しおいたす。 BigQueryを徹底解説!(基本編) - G-gen Tech Blog Cloud Functionsを徹底解説!(基本編) - G-gen Tech Blog Cloud Run を徹底解説! - G-gen Tech Blog Firebase を徹底解説! - G-gen Tech Blog 䜐々朚 駿倪 (蚘事䞀芧) G-gen 最北端、北海道圚䜏のクラりド゜リュヌション郚゚ンゞニア。 2022 幎 6 月に G-gen にゞョむン。Google Cloud All Certifications Engineer。 奜きな Google Cloud プロダクトは Cloud Run。最近は Dataflow を勉匷䞭。 Follow @sasashun0805
G-gen の䜐々朚です。圓蚘事では、Google Cloud (旧称 GCP) のサヌバヌレスコンテナサヌビスである Cloud Run の セッションアフィニティ 機胜に぀いお解説したす。 セッションアフィニティを䜿甚するこずで、同じナヌザヌからのリク゚ストを特定のコンテナむンスタンスにルヌティングするこずができたす。 前提知識Cloud Run ずは Cloud Run におけるセッションアフィニティ ナヌスケヌス 泚意点 セッションアフィニティはベスト゚フォヌト リビゞョンのトラフィック分割ずの䜵甚 プログラムから Cloud Run を呌び出す堎合 蚭定方法 Cloud Run 前提知識Cloud Run ずは Cloud Run はサヌバヌレスな環境でコンテナを実行できるサヌビスです。 セッションアフィニティは、Cloud Run のうち、HTTP リク゚ストをトリガヌずしおコンテナアプリケヌションを実行する Cloud Run services に関する機胜ずなりたす。 Cloud Run services の詳现に぀いおは以䞋の蚘事で解説しおいたす。 blog.g-gen.co.jp Cloud Run におけるセッションアフィニティ Cloud Run でコンテナむンスタンスが耇数起動しおいるずき、クラむアントからのリク゚ストはいずれかのむンスタンスにルヌティングされたす。セッションアフィニティ機胜により、クラむアントごずのリク゚ストを同じコンテナむンスタンスにルヌティングするこずができたす。 セッションアフィニティを有効にするず、Cloud Run はクラむアントからのリク゚ストに察する応答にセッションアフィニティ Cookie を远加したす。Cloud Run はこの Cookie を䜿甚しおクラむアントを識別し、以降のリク゚ストを同じコンテナむンスタンスにルヌティングしたす。 参考 Setting session affinityドキュメント Cloud Run services のセッションアフィニティ ナヌスケヌス セッションアフィニティがベスト゚フォヌトである (埌述) ずいう仕様䞊、䜿甚できる堎面はいくぶん限定的なものになりたす。埓来の「ロヌドバランサによる Web/AP サヌバぞのセッションアフィニティ (スティッキヌセッション)」のむメヌゞずは、少し違った䜿い方になりたす。 以䞋のようなナヌスケヌスが想定されたす。 Cloud Run の背埌にある Cloud SQL からナヌザヌデヌタを読み出すようなケヌスを考えおみたす。Cloud SQL から読み出したデヌタはキャッシュずしおコンテナむンスタンスに保持しお、セッションアフィニティを有効にするこずで、同じナヌザヌがアクセスしおきたずきはコンテナむンスタンスに保持されたキャッシュを利甚するこずができたす。 このケヌスでは、ク゚リを省略するこずでレスポンス速床の向䞊が芋蟌めるほか、デヌタベヌスぞの䜙蚈な接続を枛らし、Cloud SQL むンスタンスのスペックを䜎めに抑えるこずができたす。元のデヌタは Cloud SQL のデヌタベヌスで氞続化されおいるため、たずえセッションアフィニティが解陀されたずしおも、再床ク゚リが行われるだけでデヌタが倱われるこずはありたせん。 たた Google Cloud の公匏ブログでは、ダッシュボヌドのバック゚ンドずしお Cloud Run を䜿甚しおいる堎合に、デヌタベヌスに察するク゚リ結果をコンテナむンスタンスにキャッシュし、セッションアフィニティでナヌザヌごずのク゚リのキャッシュを有効掻甚するこずでダッシュボヌドの応答性を高める䟋が玹介されおいたす。 参考 Cloud Run のセッション アフィニティで応答性を向䞊プレビュヌ版公開時の公匏ブログ 泚意点 セッションアフィニティはベスト゚フォヌト セッションアフィニティ Cookie の 有効期限TTLは 30 日 に蚭定されおいたすが、Cloud Run の自動スケヌリングの仕様により、 クラむアントがアフィニティを持っおいるかどうかにかかわらず、コンテナむンスタンスはスケヌルむンのタむミングで削陀されおしたいたす。 これは「Cloud Run のセッションアフィニティはベスト゚フォヌトである」のように衚珟されたす。 したがっお、通垞は Cloud Run の倖郚で氞続化するようなデヌタをコンテナむンスタンスに保持し、セッションアフィニティを䜿甚しおナヌザヌを同䞀むンスタンスにルヌティングする、ずいった䜿い方は掚奚されたせん。 たずえば、ショッピングカヌトのデヌタをコンテナむンスタンスに保持するような堎合、リク゚ストの枛少によっおコンテナむンスタンスがスケヌルむンしたタむミングで、そのむンスタンスに接続しおいたナヌザのショッピングカヌトの情報が倱われおしたいたす。 たた、むンスタンスあたりの同時接続数の䞊限に圓たっおいる堎合や、CPU 䜿甚率が高くなっおいる堎合でも、アフィニティが解陀されおしたう可胜性がありたす。 リビゞョンのトラフィック分割ずの䜵甚 Cloud Run services では、サヌビスをデプロむしたり構成を倉曎したりするず、 リビゞョン版 が䜜成されたす。最新のリビゞョンにリク゚ストを党おルヌティングするだけではなく、耇数のリビゞョンに察しおトラフィックを分割するこずができたす。 Cloud Run のセッションアフィニティは リビゞョン単䜍 で有効/無効にするこずができ、トラフィック分割ず䜵甚した堎合、 セッションアフィニティが優先 されたす。 たずえば、「リビゞョン A ずリビゞョン B にトラフィックを 50 % ず぀分割し、リビゞョン A のみセッションアフィニティを有効にしおいる」堎合を考えたす。リビゞョン A にルヌティングされたリク゚ストは Cookie によっおその埌もリビゞョン A にルヌティングされ、リビゞョン B にルヌティングされたリク゚ストは Cookie がないため次回も A・B ランダムにルヌティングされたす。したがっお、リク゚ストは埐々にリビゞョン A にシフトされおいくこずになりたす。 たた、リビゞョン A・B の䞡方でセッションアフィニティを䜿甚した堎合、あるナヌザヌをリビゞョン A のみ、別のナヌザヌをリビゞョン B のみにルヌティングさせるこずが可胜です。 しかしセッションアフィニティはあくたでもベスト゚フォヌトであり、コンテナむンスタンスがスケヌルむンで削陀されるなどした堎合、次のリク゚ストが同䞀のリビゞョンにルヌティングされる保蚌はありたせん。 プログラムから Cloud Run を呌び出す堎合 Web ブラりザから Cloud Run にアクセスする堎合は Cookie は透過的に凊理されたす。䞀般的な Web ブラりザでは、同じドメむンのサむトにアクセスする際は、Cookie を付䞎しおリク゚ストするためです。 しかしそのような仕様のないプログラムから Cloud Run を呌び出す堎合、初回のリク゚ストに察する応答に付䞎された Cookie を埌続のリク゚ストに明瀺的に远加する必芁がある点に泚意したしょう。 蚭定方法 セッションアフィニティは Cloud Run services のサヌビス䜜成時、もしくは曎新時に有効化 / 無効化するこずができたす。 参考 セッション アフィニティを蚭定するドキュメント 䜐々朚 駿倪 (蚘事䞀芧) G-gen 最北端、北海道圚䜏のクラりド゜リュヌション郚゚ンゞニア。 2022 幎 6 月に G-gen にゞョむン。Google Cloud All Certifications Engineer。 奜きな Google Cloud プロダクトは Cloud Run。最近は Dataflow を勉匷䞭。 Follow @sasashun0805
G-gen の杉村です。圓蚘事では、AWS Lambda のサヌバヌレス関数から Google Cloud の Cloud Storage にファむルをアップロヌドする方法をご玹介したす。認蚌・認可には Workload Identity を利甚したす。 はじめに 怜蚌の抂芁 留意事項 構成 AWS から Google Cloud ぞの認蚌 Workload Identity の抂芁 構築の流れ [A] IAM ロヌル䜜成・暩限付䞎 [G] Cloud Storage バケット䜜成 [G] サヌビスアカりント䜜成 [G] サヌビスアカりントぞの暩限付䞎 [G] Workload Identity Pool 䜜成 [G] Workload Identity Pool にサヌビスアカりントを接続 [L] デプロむパッケヌゞ䜜成 サンプルコヌド パッケヌゞング [A] Lambda 関数デプロむ [A] S3 バケット䜜成・動䜜テスト はじめに 怜蚌の抂芁 圓蚘事では、Amazon Web ServicesAWSの AWS Lambda 関数から、Google Cloud の Cloud Storage バケットにファむルをアップロヌドする方法をご玹介したす。 AWS Lambda 関数はサヌバヌレスプラットフォヌムであり、Python や Node.js のような各皮蚀語のプログラムを動䜜させるこずができたす。プログラムに Google Cloud のクラむアントラむブラリCloud SDKを組み蟌めば、Google Cloud の API ぞリク゚ストを送信しお、Cloud Storage 等にデヌタを投入するこずが可胜です。 留意事項 圓蚘事では簡易化のため、IAM 暩限の割り圓おに関する考慮を最小限にしおいたす。実際には最小暩限の原則に基づき、適切な暩限蚭定をしおください。 たたサンプルコヌドでは䟋倖凊理やロギングに関する考慮を省略しおいたす。実際には適切な考慮が必芁です。 構成 圓蚘事では、以䞋のような構成で怜蚌を行いたす。 怜蚌環境 Amazon Web Services (AWS) Amazon S3 バケット AWS Lambda 関数Python IAM ロヌル Google Cloud Cloud Storage バケット Workload Identity Pool サヌビスアカりント AWS から Google Cloud ぞの認蚌 クロスクラりドのデヌタ移送では、認蚌ず認可がポむントになりたす。 Google Cloud API ぞリク゚ストを行うには、Google アカりントたたはサヌビスアカりントの認蚌情報が必芁です。たず思い぀く方法は「Google Cloud でサヌビスアカりントを䜜成する。サヌビスアカりントキヌ秘密鍵を発行する。これを AWS Secrets Manager に保存する。キヌを Lambda プログラムから参照しお、Google Cloud ぞの認蚌に甚いる」ずいった方法でしょう。 参考 : Google での認蚌方法 - サヌビス アカりント 参考 : Authentication - google-api-core documentation - Service Accounts しかしこれには、キヌロヌテヌションの手間や、キヌ挏掩の危険性が぀きたずいたす。 圓蚘事では Workload Identity を䜿うこずで、サヌビスアカりントキヌを発行するこずなく、AWS から Google Cloud ぞ認蚌する方法を怜蚌したす。 Workload Identity の抂芁 Workload Identity では信頌する察象の AWS アカりントず IAM ロヌル名等を指定するこずで、AWS の IAM プリンシパルが Google Cloud サヌビスアカりントの暩限を借甚するこずを蚱可したす。 参考 : Workload Identity 連携 参考 : AWS たたは Azure ずの Workload Identity 連携を構成する Google Cloud 偎では、サヌビスアカりントに必芁な IAM 暩限を付䞎しおおきたす。AWS の IAM ロヌル等は、そのサヌビスアカりントから暩限を借甚しお、Google Cloud API ぞリク゚ストを実行できたす。 Workload Identity の抂芁 なお「暩限の借甚」ずは、実際には OAuth 2.0 仕様に埓ったトヌクン亀換を指したす。䞀時的なトヌクンが Google Cloud から AWS ぞ払い出されるこずで、これを甚いお AWS 環境から Google Cloud API ぞのリク゚ストが可胜になりたす。 構築の流れ 以䞋の流れで䞊蚘環境を構築したす。 [AWS] IAM ロヌルを䜜成・暩限付䞎 [Google Cloud] Cloud Storage バケットを䜜成 [Google Cloud] サヌビスアカりントを䜜成・暩限付䞎 [Google Cloud] Workload Identity Pool を䜜成 [Google Cloud] Workload Identity Pool にサヌビスアカりントを接続 [ロヌカル] デプロむパッケヌゞを䜜成 [AWS] Lambda 関数をデプロむ [AWS] S3 バケット䜜成 [AWS] 動䜜テスト 以降では、芋出しの [G] は Google Cloud 偎での䜜業を、 [A] は AWS 偎での䜜業を、 [L] はロヌカル環境での䜜業を意味したす。 [A] IAM ロヌル䜜成・暩限付䞎 たずは、Lambda 関数にアタッチするための IAM ロヌルを䜜成したす。Google Cloud 偎の蚭定で、信頌する察象の IAM ロヌルずしお名称が必芁なため、先に䜜成したす。 AWS マネゞメントコン゜ヌルの IAM の画面に遷移し、巊郚メニュヌから ロヌル を遞択したす。 ボタン「ロヌルを䜜成」を抌䞋したす。 「信頌された゚ンティティタむプ」ずしお「AWS のサヌビス」を、ナヌスケヌスずしお「Lambda」を遞択し、ボタン「次ぞ」を抌䞋したす。 ロヌルの䜜成 次のステップ 蚱可を远加 では、付䞎する IAM ポリシヌずしお以䞋を远加したす。 AWSLambdaBasicExecutionRole AmazonS3ReadOnlyAccess 埌者の AmazonS3ReadOnlyAccess に぀いおは、AWS アカりント内の党おのバケットの党オブゞェクトに読取アクセスができおしたう匷力な暩限です。実際のプロゞェクトでは、察象バケットを絞った独自の IAM ポリシヌを䜜成するこずを掚奚したす。 次のステップではロヌル名を s3-to-gcs-role ずし、最䞋郚のボタン「ロヌルを䜜成」を抌䞋したす。 [G] Cloud Storage バケット䜜成 Google Cloud コン゜ヌルで Cloud Storage 画面ぞ遷移し、Cloud Storage バケットを䜜成したすCloud Storage > バケット > ボタン「䜜成」。 今回のバケット名は my-target-bucket-01 ずしたす。 CREATE ボタンから䜜成 [G] サヌビスアカりント䜜成 次に IAM ず管理 画面の巊郚メニュヌから サヌビス アカりント を遞択しお画面遷移し、サヌビスアカりントを䜜成したす。IAM ず管理 > サヌビス アカりント > ボタン「サヌビス アカりントを䜜成」 今回のサヌビスアカりント名は s3-to-gcs ずしたす。割り圓おられるメヌルアドレスは s3-to-gcs@(your-pj-name).iam.gserviceaccount.com ずなりたした。 なおりィザヌドの䞭で以䞋のように「このサヌビス アカりントにプロゞェクトぞのアクセスを蚱可する」ずいうプロセスがありたすが、ここでは䜕の暩限も぀けなくおも構いたせん。次のステップで、暩限を付䞎したす。 サヌビスアカりントの䜜成画面 [G] サヌビスアカりントぞの暩限付䞎 再び Cloud Storage 画面ぞ遷移し、先皋䜜成したサヌビスアカりントに、察象の Cloud Storage バケットぞのオブゞェクト管理暩限を付䞎したす。 バケット䞀芧画面から先皋のバケット名を遞択したあず、 暩限 タブぞ移動したす。画面䞭皋にあるボタン「アクセス暩を付䞎」をクリックしたす。 バケットぞのアクセス暩を付䞎 新しいプリンシパル に先ほど䜜成したサヌビスアカりントのメヌルアドレスを、ロヌルずしお Storage オブゞェクト管理者 を割り圓おたす。 IAM ロヌルの割り圓お なお必芁な凊理がアップロヌドだけであれば Storage オブゞェクト䜜成者 でも構いたせん。この暩限の堎合、オブゞェクトの読み取りダりンロヌドや削陀、䞊曞きはできたせん。なお、Cloud Storage のおいおは、䞊曞き凊理は「䞀床削陀しおから再床曞き蟌み」ずいう凊理ず同等です。 [G] Workload Identity Pool 䜜成 IAM ず管理 画面の巊郚メニュヌから Workload Identity 連携 を遞択したす。 ボタン「プヌルを䜜成」を抌䞋し、新しい Workload Identity プヌル を䜜成したす。Workload Identity プヌルずは、Workload Identity 蚭定の管理単䜍です。 䜜成画面を遷移するず以䞋の順で入力するこずになりたす。今回は以䞋のような倀を入力したした。各名称は任意ですので、実際の環境では適切な名称を付けおください。 蚭定名 倀 名前 my-aws-environment プヌル ID my-aws-environment プロバむダの遞択 AWS プロバむダ名 my-aws-account プロバむダ ID my-aws-account AWS アカりント ID (自分の AWS アカりント ID を入力) なお最埌に「プロバむダ属性を構成する」がありたすが、ここは䜕も手を加えずにボタン「保存」を抌䞋したす。 プロバむダ属性は今回は線集しない ここで詳现な属性マッピングを構成するこずもできたすが、デフォルトのたたで通垞の甚途には足りたす。詳现は以䞋のドキュメントをご参照ください。 参考 : AWS たたは Azure ずの Workload Identity 連携を構成する ‐ 属性のマッピングず条件を定矩する [G] Workload Identity Pool にサヌビスアカりントを接続 Workload Identity プヌル䜜成が完了するず、プヌルの詳现画面に遷移したす。 䞊郚のボタン「アクセスを蚱可」を抌䞋し、このプヌルずリンクさせるサヌビスアカりントを遞択したす。 先皋䜜成したサヌビスアカりント s3-to-gcs を遞択したす。 プリンシパルサヌビス アカりントにアクセスできる IDの遞択 では、デフォルトでは プヌル内のすべおの ID が遞択されおいたす。この状態だず、先皋指定した AWS アカりント ID 内の党おのプリンシパルIAM ナヌザヌや IAM ロヌル等がサヌビスアカりント暩限を借甚できるようになりたす。 フィルタに䞀臎する ID のみ を遞択し、属性名ずしお aws_role を遞択、属性倀に arn:aws:sts::(AWS Account ID):assumed-role/(IAM ロヌル名) を入力するこずで、特定の IAM ロヌルだけを蚱可するこずもできたす。 サヌビスアカりントを接続 ボタン「保存」を抌䞋するず、構成ファむルのダりンロヌドができたす。このファむルは単なる蚭定ファむルであり、機密デヌタは含たれおいたせん。このファむルをデプロむパッケヌゞに入れるこずになりたす。プロバむダずしお先皋の my-aws-account を遞択しお、ボタン「構成をダりンロヌド」を抌䞋し、ロヌカル環境にダりンロヌドしおください。 [L] デプロむパッケヌゞ䜜成 サンプルコヌド Lambda 関数の゜ヌスコヌドは以䞋を䜿いたす。繰り返しになりたすが、以䞋はあくたでサンプルコヌドであり、実際には䟋倖凊理やロギング、セキュアなコヌディングに関する考慮をしたうえでご利甚ください。 import boto3 from google.cloud import storage def get_from_s3 (s3_bucket_name, s3_object_name): # クラむアント生成等 s3 = boto3.client( 's3' ) s3_object_path=f "my_s3_path/{s3_object_name}" tmp_file_path=f "/tmp/{s3_object_name}" # ファむルを Lambda の䞀時領域にダりンロヌド s3.download_file(s3_bucket_name, s3_object_path, tmp_file_path) print (f "{s3_bucket_name}/{s3_object_path} was downloaded to {tmp_file_path}." ) return tmp_file_path def upload_to_gcs (tmp_file_path, gcs_bucket_name): # クラむアント生成等 gcs = storage.Client() file_name=tmp_file_path.split( '/' )[- 1 ] gcs_object_path=f "my_gcs_path/{file_name}" bucket = gcs.bucket(gcs_bucket_name) blob = bucket.blob(gcs_object_path) # オブゞェクトを Cloud Storage バケットにアップロヌド blob.upload_from_filename(tmp_file_path) print (f "{tmp_file_path} was uploaded to {gcs_bucket_name}/{gcs_object_path}." ) return None def lambda_handler (event, context): # event から各皮情報を取埗 s3_bucket_name=event[ 's3_bucket_name' ] s3_object_name=event[ 's3_object_name' ] gcs_bucket_name=event[ 'gcs_bucket_name' ] # オブゞェクトを S3 バケットから取埗 tmp_file_path=get_from_s3( s3_bucket_name=s3_bucket_name, s3_object_name=s3_object_name ) # オブゞェクトを Cloud Storage バケットにアップロヌド upload_to_gcs( tmp_file_path=tmp_file_path, gcs_bucket_name=gcs_bucket_name ) return { 'statusCode' : 200 } この Lambda 関数の゜ヌスコヌドは、以䞋のような凊理を行いたす。 event ずしお s3_bucket_name s3_object_path gcs_bucket_name を受け取る s3_bucket_name : ファむル取埗元の S3 バケット s3_object_name : 取埗察象の S3 オブゞェクト名 gcs_bucket_name : アップロヌド先の Cloud Storage バケット名 Amazon S3 バケットの my_s3_path/ パスからオブゞェクトを Lambda 内の /tmp にダりンロヌド /tmp にダりンロヌドしたオブゞェクトを Cloud Storage の my_gcs_path/ パスにアップロヌド クラむアントラむブラリの詳现な䜿甚方法に぀いおは、以䞋の公匏ドキュメントを参照しおください。 参考 : Boto3 documentation - S3 参考 : google-cloud-storage - Class Blob パッケヌゞング ロヌカル環境で、新芏ディレクトリを䜜成しおそのディレクトリに移動したあず、䞊蚘゜ヌスコヌドを lambda_function.py ずしお配眮したす。 たた先皋ダりンロヌドした Workload Identity Pool の構成ファむルも同じディレクトリに配眮したす。 Lambda では、Google Cloud クラむアントラむブラリのような倖郚ラむブラリはデプロむパッケヌゞに含たせる必芁があるため、以䞋のコマンドでディレクトリ内に展開したす。 pip install google-cloud-storage -t . pip コマンドの -t オプションは、指定ディレクトリに Python パッケヌゞをダりンロヌドできるオプションです。 -t . によりカレントディレクトリに、䟝存関係を含む各皮モゞュヌルが展開されたす。 次に以䞋のコマンドで1段階䞊䜍のディレクトリに zip ファむルを䜜成したす。 zip -r ../function.zip . [A] Lambda 関数デプロむ 以䞋のコマンドで䜜成した zip パッケヌゞを Lambda 関数ずしおデプロむしたす。 aws lambda create-function コマンドを甚いたす。 Lambda 関数には環境倉数を持たせるこずができたす。Workload Identity 構成ファむル名ず、Google Cloud プロゞェクト ID を環境倉数ずしお持たせたす。以䞋コマンドの最初の3行はご自身の環境の倀に眮き換えおください。 AWS_ACCOUNT_ID = " 123456789012 " CONFIG_FILE_NAME = " clientLibraryConfig-my-aws-account.json " GOOGLE_CLOUD_PROJECT_ID = " my-project-id " aws lambda create-function \ --function-name s3-to-gcs \ --zip-file fileb://../function.zip \ --handler lambda_function.lambda_handler \ --role arn:aws:iam:: ${AWS_ACCOUNT_ID} :role/s3-to-gcs-role \ --runtime python3. 10 \ --region ap-northeast-1 \ --environment " Variables={GOOGLE_APPLICATION_CREDENTIALS= ${CONFIG_FILE_NAME} ,GOOGLE_CLOUD_PROJECT= ${GOOGLE_CLOUD_PROJECT_ID} } " \ --timeout 120 䞀床デプロむしたあずの関数は、以䞋のコマンドで修正できたす。もちろん、コン゜ヌル画面から修正するこずもできたす。 参考 : aws lambda update-function-configuration 参考 : aws lambda update-function-code [A] S3 バケット䜜成・動䜜テスト Lambda の Web コン゜ヌル画面でデプロむした関数を遞択し、 テスト タブから今回の関数の動䜜確認を行うこずができたす。 事前に適圓な S3 バケットを䜜成し、 my_s3_path フォルダ配䞋に test.txt を配眮したす。 その埌、以䞋の JSON を むベント JSON に入力し、右䞊のボタン「テスト」を抌䞋しお動䜜テストを実行しおください。JSON の倀は自環境のものに眮き換えたす。 { "s3_bucket_name": "my-test-bucket", "s3_object_name": "test.txt", "gcs_bucket_name": "my-target-bucket-01" } むベント JSON を指定しおテストを実行 画面䞊に暙準出力や暙準゚ラヌ出力が衚瀺されたす。実際に Cloud Storage バケットの䞭身も確認しおください。 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO 元譊察官ずいう経歎を持぀ IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 認定資栌および Google Cloud 認定資栌はすべお取埗。X旧 Twitterでは Google Cloud や Google Workspace のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
圓蚘事では、Google Workspace の Enterprise、Education Standard、Education Plus ゚ディションで䜿えるセキュリティセンタヌの機胜を玹介したす。 抂芁 Google Workspace ずは セキュリティセンタヌずは 利甚の前提 利甚可胜な゚ディション 暩限 セキュリティセンタヌの機胜 セキュリティダッシュボヌド 調査ツヌル セキュリティの状況ペヌゞ 類䌌機胜ずの比范 抂芁 Google Workspace ずは Google Workspace は、Google が提䟛するクラりド型グルヌプりェアサヌビスです。Gmail や Google カレンダヌ、Google ドラむブなど様々なアプリケヌションがパッケヌゞングされおいたす。 詳现は以䞋の蚘事をご参照ください。 blog.g-gen.co.jp セキュリティセンタヌずは Google Workspace の セキュリティセンタヌ は「組織のアカりント蚭定の可芖化」「ナヌザヌのアクティビティ調査」「朜圚的な脅嚁ぞの察凊」などに圹立぀ツヌル矀です。 機胜には倧きく分けお以䞋の 3 ぀がありたす。各機胜の説明は埌述したす。 セキュリティダッシュボヌド 調査ツヌル セキュリティの状況ペヌゞ セキュリティセンタヌの各機胜は Google Workspace の Admin コン゜ヌル で [ セキュリティ ] > [ セキュリティ センタヌ ] ぞ遷移するこずで利甚できたす。 セキュリティ センタヌの衚瀺 利甚の前提 利甚可胜な゚ディション セキュリティセンタヌは以䞋の゚ディションで利甚可胜です。 Enterprise の党゚ディション Enterprise Essentials Enterprise Standard Enterprise Plus Education の以䞋の゚ディション Education Standard Education Plus ただし、調査ツヌル䜿甚時には、デヌタ゜ヌスによっおサポヌトされおいる゚ディションが異なるため泚意しおください。 䟋えば、 ナヌザヌのログむベント ず ドラむブのログむベント で比范した堎合、Enterprise Standard ゚ディションのナヌザヌは「ナヌザヌのログむベント」は衚瀺できたすが「ドラむブのログむベント」は衚瀺できたせん。他にもプレミアム゚ディションEnterprise Plus, Education Plusは、調査ツヌルの高床な機胜を䜿甚できたす。 デヌタ゜ヌス 利甚可胜な゚ディション ナヌザヌのログむベント Enterprise Plus, Education Plus, Cloud Identity Premium, Enterprise Standard, Education Standard ドラむブのログむベント Enterprise Plus, Education Plus デヌタ゜ヌスごずに、どの゚ディションが察応しおいるのかは ドキュメント に蚘茉されおいたす。 参考 セキュリティ センタヌに぀いお / Google Workspace の各゚ディションの比范 暩限 セキュリティセンタヌを䜿甚するためには、閲芧に䜿う Google アカりントに セキュリティ センタヌの暩限 が必芁です。 セキュリティ センタヌの暩限の䞭でも、以䞋のように「ダッシュボヌド」や「セキュリティの状況」など機胜ごずにより厳密に暩限を制限するこずもできたす。 セキュリティ センタヌの暩限 最も匷い管理者ロヌルである「 特暩管理者ロヌル 」にも、セキュリティ センタヌの管理者暩限が含たれおいたす。しかし、ナヌザヌに業務䞊必芁ずなる最小の暩限だけを䞎えるべきであるずいう「 最小暩限の原則 」に埓い、セキュリティ センタヌを䜿うナヌザヌに特暩管理者ロヌルを付䞎するのではなく、セキュリティ センタヌの暩限の䞭から必芁な暩限を遞択した カスタムロヌル を䜜成し付䞎するこずが掚奚されおいたす。 参考 セキュリティ センタヌの管理者暩限 セキュリティセンタヌの機胜 セキュリティダッシュボヌド セキュリティ ダッシュボヌド は、倖郚ずのファむル共有状況や䞍審なナヌザヌからのログむン詊行の回数などセキュリティに関する情報を時系列でダッシュボヌドずしお確認できる機胜です。 衚瀺方法は、Admin コン゜ヌルの [ セキュリティ ] > [ セキュリティ センタヌ ] > [ ダッシュボヌド ] です。 セキュリティの状況 ダッシュボヌドはカスタムが可胜で、䞊び替えや䞍芁なレポヌトを削陀するこずができたす。 ダッシュボヌドで閲芧できるデヌタは、最倧で珟圚の日付から 180 日間のデヌタです。 ダッシュボヌドに䜿甚できるレポヌトは ドキュメント をご参照ください。 調査ツヌル 調査ツヌル は、Gmail や デヌタポヌタル、デバむスのログに加え、組織のデヌタに Google のスタッフがアクセスした際の操䜜ログである「アクセスの透過性に関するログむベント」など様々なデヌタ゜ヌスのログから調査できるツヌルです。 遞択できるデヌタ゜ヌスの詳现に぀いおは ドキュメント をご参照ください。 たた、調査ツヌルで管理者が行った操䜜は 管理ログむベント で確認できたす。 衚瀺方法は、Admin コン゜ヌルの [ セキュリティ ] > [ セキュリティ センタヌ ] > [ 調査ツヌル ] です。 調査ツヌル 前述の通り、遞択できるデヌタ゜ヌスぱディションによっお異なるため泚意しおください。たた、プレミアム゚ディションEnterprise Plus, Education Plusは、調査ツヌルの高床な機胜を䜿甚できたす。高床な機胜の䞀䟋は以䞋の通りです。 調査の保存や共有、削陀 調査のコピヌを䜜成 怜玢結果を属性別にグルヌプ化 なお、 暩限 の項にあるように、調査ツヌルのデヌタ゜ヌスごずに暩限を割り圓おるこずができたす。そのため、調査に必芁なデヌタ゜ヌスぞのアクセスが蚱可されおいるのか確認が必芁です。 参考 セキュリティ調査ツヌルのプレミアム機胜 セキュリティの状況ペヌゞ セキュリティの状況ペヌゞ は、掚奚のセキュリティ蚭定やおすすめのセキュリティ察策に぀いおアドバむスを埗られる機胜です。 通垞であれば、カレンダヌやドラむブ、Gmail など各サヌビスのセキュリティに関わる蚭定を個別で蚭定、確認するずころを、セキュリティの状況のペヌゞから䞀芧で確認できたす。 衚瀺方法は、Admin コン゜ヌルの [ セキュリティ ] > [ セキュリティ センタヌ ] > [ セキュリティの状況 ] です。 セキュリティの状況 類䌌機胜ずの比范 Gmail のログは、調査ツヌル以倖にも、 メヌルログ怜玢 で確認できたす。しかし、怜玢可胜な属性や期間が異なりたす。 メヌルログ怜玢 メヌルログ怜玢は、送受信者や件名のいずれかで怜玢できたすが、30 日以䞊前のログは受信者ずメッセヌゞ ID の情報がないず怜玢できたせん。 30 日以䞊前のメヌルログを怜玢 それに察しお調査ツヌルでは、DKIM や SPF ドメむン、䜍眮情報や添付ファむルなど様々な属性から怜玢できたす。それぞれ怜玢可胜な属性に぀いおは各ドキュメントをご参照ください。 参考 メヌルログ怜玢を䜿甚しおメヌルを怜玢する / 調査ツヌルで Gmail のログむベントを怜玢する G-gen 線集郚 (蚘事䞀芧) 株匏䌚瀟G-genは、サヌバヌワヌクスグルヌプずしお「クラりドで、䞖界を、もっず、はたらきやすく」をビゞョンに掲げ、クラりドの導入から最適化たでを支揎しおいる Google Cloud 専業のクラりドむンテグレヌタヌです。
G-gen の堂原です。 ChatGPT (GPT-4) を䜿っおほが頭を䜿うこずなく、Cloud Functions を䜜成しおみたので、その過皋を玹介したす。 はじめに 事前準備 事前準備も ChatGPT を䜿甚 Cloud Functions コヌド生成 䞀発で Python コヌド生成 ゚ラヌ修正も可胜 動䜜確認 さいごに はじめに 今や知らない人はいないであろう、OpenAI 瀟が公開しおいる AI チャットサヌビスである ChatGPT。察話胜力もさるこずながら、コヌド生成胜力の高さも泚目されおいたす。 G-gen では ChatGPT の利甚が䌚瀟で補助されおいるこずもあり、早速䜿っおみたした。 prtimes.jp 圓蚘事では ChatGPT を䜿っお、以䞋のような仕様の Cloud Functions を䜜成、デプロむしおみたした。 蚀語は Python。 Google Cloud Storage (GCS) に CSV ファむルがアップロヌドされたこずをトリガヌに実行される。 GCS から、アップロヌド CSV ファむルを読み取る。 読み取ったデヌタは BigQuery のテヌブルに保存する。 事前準備 今回、事前準備ずしお以䞋のこずを実斜したした。 サンプルの CSV ファむル生成 GCS バケット䜜成 BigQuery デヌタセット䜜成 BigQuery テヌブル䜜成 生成されたコヌド的には䞍芁でしたが今回は事前に甚意したした。 事前準備も ChatGPT を䜿甚 サンプルずなる CSV ファむルず、それに察応するテヌブル䜜成に぀いおも ChatGPT におたかせしたした。 [ 質問文 ] Please create a sample CSV file. するず以䞋のような CSV を出力しおくれたした。 id,name,category,price 1,Wireless Mouse,Electronics,25.99 2,Bluetooth Keyboard,Electronics,49.99 3,32GB USB Flash Drive,Electronics,15.99 4,Portable Charger,Electronics,29.99 5,Water Bottle,Sports,12.99 6,Yoga Mat,Sports,21.99 7,Dumbbell Set,Sports,59.99 8,Running Shoes,Sports,89.99 続けお、䞊蚘 CSV に察応する BigQuery テヌブルを䜜成しおもらいたす。 [ 質問文 ] Please tell me the query to create a BigQuery table for this CSV file. するず以䞋のようなク゚リを出力しおくれたした。 CREATE TABLE your_dataset.products ( id INT64, name STRING, category STRING, price FLOAT64 ); ちなみにコン゜ヌルでどうやっおこのク゚リを実行するかも解説しおくれおたす。 BigQuery テヌブルの䜜成方法に぀いおの回答文 Cloud Functions コヌド生成 䞀発で Python コヌド生成 では、本呜であるコヌド生成を実行しおもらいたす。 [ 質問文 ] I would like to deploy a function on Google Cloud Functions that retrieves CSV files from Google Cloud Storage and stores their data in BigQuery. Please provide me with the corresponding code and a requirements.txt file. するず以䞋のようなコヌド、requirements.txt 及び Cloud Functions をデプロむする gcloud コマンドを出力しおくれたした。 requirements.txt google-cloud-storage==1.42.3 google-cloud-bigquery==2.28.1 main.py import os import tempfile from google.cloud import storage from google.cloud import bigquery def csv_to_bigquery (event, context): """Triggered by a change to a Cloud Storage bucket. Args: event (dict): Event payload. context (google.cloud.functions.Context): Metadata for the event. """ bucket_name = event[ 'bucket' ] file_name = event[ 'name' ] dataset_id = os.environ.get( 'BIGQUERY_DATASET_ID' ) table_id = os.environ.get( 'BIGQUERY_TABLE_ID' ) # Create BigQuery client bigquery_client = bigquery.Client() # Create Storage client storage_client = storage.Client() bucket = storage_client.get_bucket(bucket_name) blob = storage.Blob(file_name, bucket) # Download the CSV file to a temporary file with tempfile.NamedTemporaryFile(mode= 'wb' , delete= True ) as temp_csv: blob.download_to_file(temp_csv) temp_csv.flush() # Load CSV into BigQuery dataset_ref = bigquery_client.dataset(dataset_id) table_ref = dataset_ref.table(table_id) job_config = bigquery.LoadJobConfig() job_config.source_format = bigquery.SourceFormat.CSV job_config.autodetect = True with open (temp_csv.name, "rb" ) as source_file: job = bigquery_client.load_table_from_file(source_file, table_ref, job_config=job_config) job.result() # Wait for the job to complete print (f "Loaded {job.output_rows} rows into {dataset_id}:{table_id} from {file_name}." ) gcloud コマンド gcloud functions deploy csv_to_bigquery \ --runtime python310 \ --trigger-resource YOUR_TRIGGER_BUCKET_NAME \ --trigger-event google.storage.object.finalize \ --set-env-vars BIGQUERY_DATASET_ID=YOUR_DATASET_ID,BIGQUERY_TABLE_ID=YOUR_TABLE_ID requirements.txt ず main.py をカレントディレクトリに蚭眮し、 YOUR_TRIGGER_BUCKET_NAME 、 YOUR_DATASET_ID 及び YOUR_TABLE_ID に適切な倀を蚭定しおコマンドを実行したす。 ゚ラヌ修正も可胜 しかし、コマンドを実行するず google-cloud-bigquery のバヌゞョン゚ラヌが衚瀺されおしたいたした。 そこで゚ラヌ文をそのたた蚘茉しお、察凊法を聞いおみたす。 [ 質問文 ] I encounterd the following error: """ ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed: Collecting google-cloud-storage==1.42.3 Downloading google_cloud_storage-1.42.3-py2.py3-none-any.whl (105 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 106.0/106.0 kB 3.0 MB/s eta 0:00:00 ERROR: Ignored the following versions that require a different python version: 2.10.0 Requires-Python >=3.6, <3.10; 2.11.0 Requires-Python >=3.6, <3.10; 2.12.0 Requires-Python >=3.6, <3.10; 2.13.0 Requires-Python >=3.6, <3.10; 2.13.1 Requires-Python >=3.6, <3.10; 2.14.0 Requires-Python >=3.6, <3.10; 2.15.0 Requires-Python >=3.6, <3.10; 2.16.0 Requires-Python >=3.6, <3.10; 2.16.1 Requires-Python >=3.6, <3.10; 2.17.0 Requires-Python >=3.6, <3.10; 2.18.0 Requires-Python >=3.6, <3.10; 2.19.0 Requires-Python >=3.6, <3.10; 2.20.0 Requires-Python >=3.6, <3.10; 2.21.0 Requires-Python >=3.6, <3.10; 2.22.0 Requires-Python >=3.6, <3.10; 2.22.1 Requires-Python >=3.6, <3.10; 2.23.0 Requires-Python >=3.6, <3.10; 2.23.1 Requires-Python >=3.6, <3.10; 2.23.2 Requires-Python >=3.6, <3.10; 2.23.3 Requires-Python >=3.6, <3.10; 2.24.0 Requires-Python >=3.6, <3.10; 2.24.1 Requires-Python >=3.6, <3.10; 2.25.0 Requires-Python >=3.6, <3.10; 2.25.1 Requires-Python >=3.6, <3.10; 2.25.2 Requires-Python >=3.6, <3.10; 2.26.0 Requires-Python >=3.6, <3.10; 2.27.0 Requires-Python >=3.6, <3.10; 2.27.1 Requires-Python >=3.6, <3.10; 2.28.0 Requires-Python >=3.6, <3.10; 2.28.1 Requires-Python >=3.6, <3.10; 2.29.0 Requires-Python >=3.6, <3.10; 2.6.2 Requires-Python >=3.6, <3.9; 2.7.0 Requires-Python >=3.6, <3.10; 2.8.0 Requires-Python >=3.6, <3.10; 2.9.0 Requires-Python >=3.6, <3.10 ERROR: Could not find a version that satisfies the requirement google-cloud-bigquery==2.28.1 (from versions: 0.20.0, 0.21.0, 0.22.0, 0.22.1, 0.23.0, 0.24.0, 0.25.0, 0.26.0, 0.27.0, 0.28.0, 0.29.0, 0.30.0, 0.31.0, 0.32.0, 1.0.0, 1.1.0, 1.2.0, 1.3.0, 1.4.0, 1.5.0, 1.5.1, 1.5.2, 1.6.0, 1.6.1, 1.6.2, 1.7.0, 1.7.2, 1.8.0, 1.8.1, 1.8.2, 1.9.0, 1.9.1, 1.10.0, 1.10.1, 1.11.1, 1.11.2, 1.11.3, 1.11.4, 1.12.0, 1.12.1, 1.12.2, 1.13.0, 1.13.1, 1.14.0, 1.14.1, 1.15.0, 1.15.1, 1.16.0, 1.16.1, 1.17.0, 1.17.1, 1.18.0, 1.18.1, 1.19.0, 1.19.1, 1.20.0, 1.21.0, 1.22.0, 1.23.0, 1.23.1, 1.24.0, 1.25.0, 1.26.0, 1.26.1, 1.27.2, 1.28.0, 1.28.1, 1.28.2, 1.28.3, 2.0.0, 2.1.0, 2.2.0, 2.3.1, 2.4.0, 2.5.0, 2.6.0, 2.6.1, 2.30.0, 2.30.1, 2.31.0, 2.32.0, 2.33.0, 2.34.0, 2.34.1, 2.34.2, 2.34.3, 2.34.4, 3.0.0b1, 3.0.0, 3.0.1, 3.1.0, 3.2.0, 3.3.0, 3.3.1, 3.3.2, 3.3.3, 3.3.5, 3.3.6, 3.4.0, 3.4.1, 3.4.2, 3.5.0, 3.6.0, 3.7.0, 3.8.0, 3.9.0, 3.10.0) ERROR: No matching distribution found for google-cloud-bigquery==2.28.1; Error ID: 656dd225 """ How can I resolve this issue? するず requirements.txt を次のように修正しおくださいず返信されたした。 requirements.txt google-cloud-storage==1.43.0 google-cloud-bigquery==3.10.0 ずいうこずで、䞊蚘の通り修正し gcloud コマンドを再実行するず、今床はちゃんずデプロむするこずができたした。 動䜜確認 事前準備で ChatGPT に䜜っおもらった CSV ファむルをトリガヌ指定した GCS バケットにアップロヌドしおみたす。 するず数分もしないうちに BigQuery テヌブルにデヌタが远加されたした。 BigQuery テヌブルに栌玍されたデヌタ さいごに コヌドに関しおも䞀回ぐらいぱラヌ修正が必芁になるのかなず思っおいたのですが、たさかの䞀発成功でした。 今回は怜蚌ずしおシンプルなコヌドを生成しおもらいたした。 このコヌドをもずに自身で機胜を远加しおいっおも良いですし、远加したい機胜をそのたたたた ChatGPT にお願いするのも良いず思いたす。 最近日本でも公開された Google の AI チャットサヌビスである「Bard」ですが コヌド生成機胜が぀い先週実装された ずいうこずで、そちらのほうも近日怜蚌しおみたいず思いたす。 堂原 竜垌 (蚘事䞀芧) デヌタアナリティクス準備宀。2023幎4月より、G-genにゞョむン。 Google Cloud Partner Top Engineer 2023, 2024に遞出 (2024幎はRookie of the yearにも遞出)。䌑みの日はだいたいゲヌムをしおいるか、時々自転車で遠出をしおいたす。 Follow @matayuuuu
G-gen の杉村です。Google Cloud (旧称 GCP) の PostgreSQL 互換のフルマネヌゞドサヌビスである AlloyDB for PostgreSQL に぀いお解説したす。 抂芁 AlloyDB ずは サヌビスの䜍眮づけ PostgreSQL ずの互換性 料金 無料トラむアル アヌキテクチャ クラスタ プラむマリむンスタンス 読み取りプヌルむンスタンス ネットワヌク クロスリヌゞョンレプリケヌション 可甚性 スタンバむむンスタンス 読み取りワヌクロヌドの可甚性 可甚性 SLA 灜害察策 (DR) スケヌラビリティ 分析OLAP AlloyDB カラムナ゚ンゞンずは 自動カラムナ化 手動でのカラムストア管理 BigQuery からの連携ク゚リ バックアップ・リストア バックアップの皮類 継続バックアップずそのリストア オンデマンドバックアップ・自動バックアップずそのリストア 接続 クラむアント ネットワヌク 認蚌・認可 AlloyDB Auth proxy AlloyDB Auth proxy ずは パブリック IP を䜿った接続 通信芁件 Cloud Run における Auth proxy 利甚 マネヌゞドコネクションプヌル デヌタのむンポヌト・゚クスポヌト むンポヌト ゚クスポヌト 移行ツヌル AI 機胜 自然蚀語によるク゚リ モデル゚ンドポむント管理 AI 支揎によるトラブルシュヌティング セキュリティ・監査 暗号化 監査ログ クラスタ管理オペレヌションの監査ログ DB オペレヌションの監査ログ 運甚ずモニタリング モニタリング むンスタンスの停止・起動・再起動 チュヌニング Query Insights adaptive autovacuum むンデックスアドバむザ Cloud SQL からの移行 AlloyDB Omni 抂芁 AlloyDB ずは AlloyDB for PostgreSQL は、Google Cloud が提䟛する高性胜な PostgreSQL 互換のフルマネヌゞドサヌビスです。様々なアプリケヌションから高性胜なオペレヌショナルデヌタベヌスずしお利甚できたす。 Cloud SQL ず同じく DBaaSDB as a Serviceずしお分類するこずができたすが、AlloyDB はパフォヌマンス・可甚性・スケヌラビリティの面で通垞の PostgreSQL よりも優れおおり、特に厳しい非機胜芁件がある゚ンタヌプラむズシステムに察応できるデヌタベヌスずしお䜍眮づけられおいたす。 参考 : AlloyDB の抂芁 AlloyDB はストレヌゞ機構などに独自の技術が䜿甚されおおり、その性胜は暙準の PostgreSQL ず比范しおトランザクション凊理では「4倍以䞊高速」、分析凊理では「最倧100倍高速」ず公称されおいたす。たたバックアップ、パッチ適甚、ストレヌゞの拡匵など倚くの運甚タスクが自動化されおおり、運甚の容易さも特城です。可甚性 SLA は 99.99% です。 参考 : AlloyDB for PostgreSQL の仕組み: デヌタベヌス察応のむンテリゞェントなストレヌゞ 参考 : AlloyDB Service Level Agreement (SLA) サヌビスの䜍眮づけ Google Cloud のフルマネヌゞドのデヌタベヌスサヌビスずしおは、他に Cloud SQL がありたすが、AlloyDB は特に高いパフォヌマンスが求められるシステムに察応できるデヌタベヌスずしお䜍眮づけられおいたす。 このサヌビス展開は、Amazon Web ServicesAWSにおいお、Amazon RDS ず Amazon Aurora が別個に存圚するのず䌌おいたす。Google Cloud サヌビスずしおの䜍眮づけは、Amazon RDS が Cloud SQL、Amazon Aurora が AlloyDB にそれぞれ察応しおいるず考えお良いでしょう。 なお名前に for PostgreSQL ず冠しおはいたすが、他の DB ゚ンゞン版の AlloyDB の提䟛は今のずころありたせん。 Cloud SQL に぀いおの詳现は、以䞋の蚘事を参照しおください。 blog.g-gen.co.jp PostgreSQL ずの互換性 2026幎1月珟圚では、PostgreSQL 14、15、16、17、18 ずの互換性を持った AlloyDB クラスタを構築できたす。 参考 : Create a cluster and its primary instance - Create a new cluster and primary instance AlloyDB は PostgreSQL ずの「100% 互換」を謳っおいたす。AlloyDB のデヌタベヌスぞの接続には、psql コマンドラむンなどの PostgreSQL 甚クラむアントを甚いるこずができたす。たた AlloyDB は、PostgreSQL の各皮パラメヌタや拡匵機胜extensionに察応しおいたす。 通垞の PostgreSQL では postgresql.conf 等で蚭定する各皮パラメヌタは、AlloyDB では デヌタベヌスフラグ ず呌ばれる蚭定倀ずしお管理され、Web コン゜ヌルや gcloud コマンドで管理したす。 既存の PostgreSQL デヌタベヌスから AlloyDB ぞの移行を怜蚎する際、パラメヌタや拡匵機胜が AlloyDB でも利甚可胜なのか、以䞋の公匏ドキュメントで確認する必芁がありたす。 参考 : Supported database flags 参考 : Supported database extensions 料金 AlloyDB は、利甚した分だけ料金が発生する埓量課金です。以䞋の軞で課金されたす。 割り圓おた CPU/Memory 利甚したストレヌゞ (バックアップ甚含む) ネットワヌク (他リヌゞョンぞの egress のみ) AlloyDB には「プラむマリむンスタンス」ず「読み取りプヌルノヌド」が存圚し、それぞれスペックCPU、Memoryを指定できたす。むンスタンスが存圚した時間に応じ、時間単䜍で課金が発生したす。 たたストレヌゞはデヌタベヌスに必芁な分のサむズが自動的に割り圓おられ、自動でスケヌルアップ・ダりンしたす。利甚したデヌタサむズ分だけの課金が発生したす。 以䞋は、N2 たたは C4A マシンタむプにおける 2 vCPU / 16 GB のプラむマリむンスタンス + スタンバむむンスタンスずいう構成で、ストレヌゞ利甚が 100 GB の堎合の利甚料金の詊算です2026幎1月珟圚、東京リヌゞョン。 vCPU: $0.08458 * 2 vCPU * 730h * 2 VMs = $246.9736 /月 Memory: $0.01434 * 16 GB RAM * 730h * 2 VMs = $334.9824 /月 Storage: $0.000526 * 100 GB * 730h = $38.398 /月 → 蚈 $620.354 /月 䞊蚘に加えお、バックアップストレヌゞにも課金が発生したす。 最新の料金は、以䞋の公匏ペヌゞをご参照ください。 参考 : AlloyDB for PostgreSQL pricing 無料トラむアル AlloyDB では 無料トラむアルクラスタ free trial clustersを䜜成可胜です。 無料トラむアルクラスタでは 8 vCPU ず最倧 1 TB のストレヌゞを利甚でき、30日間の詊甚が可胜です。SLA は適甚されず、バックアップも取埗できたせんが、有償版ずほずんど同等の機胜を䜿うこずができたす。 無料期間䞭の30日が経過した埌は、デヌタベヌスぞのリク゚ストが受け付けられなくなり、そこから15日埌にはデヌタも削陀されたす。無料クラスタは、有償クラスタにアップグレヌドするこずが可胜です。 無料トラむアルクラスタの䜜成には、有効な請求先アカりントず玐づけられた Google Cloud プロゞェクトが必芁です。 参考 : AlloyDB 無料トラむアル クラスタの抂芁 アヌキテクチャ クラスタ AlloyDB for PostgreSQL の基本の管理単䜍は クラスタ です。クラスタの党䜓像は以䞋の図の通りです。 クラスタの党䜓像 参考 : AlloyDB の抂芁 プラむマリむンスタンス クラスタは プラむマリむンスタンス を持ちたす。プラむマリむンスタンスはクラスタに1぀だけですが「高可甚性」蚭定にするず、フェむルオヌバ甚のレプリカスタンバむむンスタンスを持぀こずができたす。 クラむアントは読取・曞蟌アクセスをこのプラむマリむンスタンスに向けお行いたす。そのための単䞀の IP アドレスが発行されたす。IP アドレスはフェむルオヌバしおも倉わりたせん。 プラむマリむンスタンスのスタンバむむンスタンスが存圚するクラスタを「高可甚性High availableクラスタ」ず呌び、単䞀のプラむマリむンスタンスしか持たないクラスタを「基本Basicクラスタ」ず呌びたす。なおサヌビスリリヌス圓初は高可甚性クラスタのみでしたが、2023幎9月21日のアップデヌトにより、基本クラスタが䜜成可胜になりたした。 参考 : AlloyDB の抂芁 - ノヌドずむンスタンス 読み取りプヌルむンスタンス 読み取りプヌルむンスタンス Read pool instanceは、読取専甚アクセスを提䟛するノヌドの 集合䜓 です。぀たり読み取りプヌルむンスタンスずいう語は単䞀のノヌドを指すのではなく、読取専甚ノヌドのグルヌプを指したす。 読み取りプヌルむンスタンスには読取甚の IP アドレスが発行され、その IP アドレスぞのアクセスは読み取りプヌルむンスタンスのいずれかのノヌドに割り振られたす。ノヌドの数を増枛するこずで、読取ワヌクロヌドを負荷分散するこずが可胜です。 プラむマリむンスタンスは必須ですが、読み取りプヌルむンスタンスの䜜成は任意です。䜜成するず利甚料金が発生する代わりに、分析的な甚途を含む読取ワヌクロヌドを分散させるこずができたす。 参考 : AlloyDB の抂芁 - ノヌドずむンスタンス たた、AlloyDB の読み取りプヌルむンスタンスには、オヌトスケヌリングを蚭定できたす。CPU 䜿甚率たたはスケゞュヌルに基づいお、読み取りプヌルむンスタンス内のノヌド数を自動的に増枛できたす。 参考 : Scale an instance - Autoscale a read pool instance ネットワヌク AlloyDB のクラスタはナヌザが管理する VPCVirtual Private Cloudネットワヌクの䞭ではなく、Google Cloud が管理する VPC ネットワヌクの䞭に䜜成されたす。 ナヌザの VPC ではなく Google Cloud が管理するマネヌゞドな VPC であるずいう点がポむントです。これは、 プラむベヌトサヌビスアクセス ずいう仕組みであり、クラスタが配眮される Google Cloud 管理の VPC を サヌビスプロデュヌサヌのネットワヌク ず呌びたす。これは Cloud SQL や Cloud Memorystore などず同じ仕組みです。 サヌビスプロデュヌサヌのネットワヌクずナヌザの VPC ネットワヌクは、VPC ネットワヌクピアリングで接続するこずになりたす。 AlloyDB のネットワヌク構成 参考 : プラむベヌト IP の抂芁 参考 : プラむベヌト サヌビス アクセスの抂芁 なお AlloyDB ぞは、プラむベヌトサヌビスアクセスを䜿う接続方法の他に、パブリック IP アドレスを䜿甚しお接続する方法や、Private Service Connect を甚いお接続する方法もありたす。 参考 : パブリック IP を䜿甚しお接続する 参考 : Private Service Connect の抂芁 クロスリヌゞョンレプリケヌション AlloyDB ではオプションずしお、 クロスリヌゞョンレプリケヌション を利甚可胜です。クロスリヌゞョンレプリケヌションを有効化するず、メむンのクラスタプラむマリクラスタずは別のリヌゞョンにセカンダリクラスタが䜜成され、非同期でデヌタがレプリケヌションされたす。 セカンダリクラスタは読み取り専甚のクラスタであり、手動でプラむマリに昇栌させるこずができたす。 クロスリヌゞョンレプリケヌションは灜害察策目的のほか、ナヌザやアプリケヌションに近いリヌゞョンに読み取り専甚のセカンダリクラスタを眮くこずで、読み取りレむテンシの改善にも甚いるこずができたす。 参考 : クロスリヌゞョン レプリケヌションの抂芁 可甚性 スタンバむむンスタンス 前述の通り、プラむマリむンスタンスは任意でフェむルオヌバ甚レプリカ スタンバむむンスタンス を持぀こずができたす。 アクティブ系のプラむマリむンスタンスに異垞が怜知されるず、自動的にスタンバむむンスタンスにフェむルオヌバが発生したす。 フェむルオヌバしおも、読取・曞蟌甚の IP アドレスは倉わりたせんので、アプリケヌションからは䞀定時間のダりンタむムのあず、蚭定倉曎なしで再床コネクションを匵るこずができたす。 たたフェむルオヌバをテストするため、手動でフェむルオヌバを発生させるこずも可胜です。 読み取りワヌクロヌドの可甚性 読み取りプヌルむンスタンスには耇数のノヌドを含むこずができたす。 読み取り専甚 IP アドレスが䞀぀払い出され、この単䞀の IP アドレスにアクセスすれば、いずれかのノヌドに割り振られたす。読み取りプヌルむンスタンスに耇数のノヌドを䜜成するこずで、読取専甚ワヌクロヌドの可甚性を高めるこずが可胜です。 可甚性 SLA AlloyDB for PostgreSQL の可甚性 SLA は 99.99% です。 所定の蚈算方法に埓った月間皌働率がこれを䞋回った堎合、Financial Credits が還元されたす芁申請。 なお SLA が適甚されるには、クラスタが「 Multi-zone instance 」である必芁がありたす。これは「プラむマリむンスタンスの高可甚性蚭定が有効化されおいる」たたは「最䜎2ノヌドの読み取りプヌルむンスタンスを持っおいる」状態を指したす。 参考 : AlloyDB Service Level Agreement (SLA) 灜害察策 (DR) 前述のクロスリヌゞョン・レプリケヌションを甚いるこずで、リヌゞョンをたたいだ灜害察策Disaster Recoveryを実珟できたす。 クロスリヌゞョン・レプリケヌションを有効化するず、別リヌゞョンのセカンダリクラスタ読み取り専甚にデヌタが非同期でレプリケヌションされたす。プラむマリクラスタのリヌゞョンがダりンした際には、セカンダリクラスタを読み曞き甚のプラむマリクラスタに 昇栌 させるこずができたす。 参考 : クロスリヌゞョン レプリケヌションを䜿甚する - セカンダリ クラスタをプロモヌトする スケヌラビリティ AlloyDB のスケヌラビリティの抂念を敎理するず、倧たかに以䞋のようになりたす。 察象 垂盎スケヌル 氎平スケヌル プラむマリむンスタンス 可 (マシンタむプ倉曎) 䞍可 読み取りプヌルむンスタンス 可 (マシンタむプ倉曎) 可 (ノヌド数倉曎) プラむマリむンスタンスは読み曞きを叞る単䞀のむンスタンスのため、氎平にスケヌルするこずはできたせんが、スペック倉曎による垂盎スケヌルは可胜です。 読み取りプヌルむンスタンスは読み取り専甚のノヌド集団ですので、ノヌド数を増やしお氎平にスケヌルするこずも、スペックを䞊げお垂盎にスケヌルするこずも可胜です。たた、CPU 䜿甚率やスケゞュヌルに基づいたオヌトスケヌリングも可胜です。 参考 : Scale an instance 分析OLAP AlloyDB カラムナ゚ンゞンずは AlloyDB は業務甚デヌタベヌスずしお OLTP Online Transaction Processing凊理に向いたデヌタベヌスです。しかし AlloyDB カラムナ゚ンゞン を搭茉しおおり、分析的凊理 OLAP 、Online Analytical Processingも高速に行うこずができたす。 なおこのように OLTP ず OLAP の䞡方のワヌクロヌドを凊理できる特性を持぀デヌタベヌスを、 HTAP Hybrid Transaction Analytical Processingデヌタベヌスず呌ぶこずもありたす。 カラムナ ずは「列指向」を意味しおおり BigQuery を始めずする倚くの分析甚デヌタベヌスが列指向デヌタベヌスです。AlloyDB ではカラムナ゚ンゞンにより、テヌブルの特定デヌタを列志向でメモリ䞊に保持するこずで、集蚈等の分析的なク゚リを高速に凊理できたす。 カラムナ゚ンゞンはデヌタベヌスフラグAlloyDB の蚭定パラメヌタである google_columnar_engine.enabled を on にするこずで有効化されたすむンスタンス再起動が発生。デフォルトだずむンスタンスのメモリの30%が割り圓おられたすが、この倀もデヌタベヌスフラグで蚭定可胜です。 カラムナ゚ンゞンによりメモリ䞊に保持される領域はカラムストアcolumn storeず呌ばれたす。カラムストアには特定の型のデヌタしか入りたせんが、䞀般的な型はサポヌトされおいたす。詳现は以䞋のドキュメントをご参照ください。 参考 : AlloyDB カラム型゚ンゞンに぀いお 自動カラムナ化 カラムナ゚ンゞンでは、 自動カラムナ化 auto-columnarizationが利甚可胜です。 自動カラムナ化は、アプリケヌションのワヌクロヌドを自動で分析しお、割り圓お容量も考慮し぀぀カラムストアに入れるべき列を決定したす。 新芏むンスタンスでは自動カラムナ化はデフォルトで有効で、1 時間に䞀床、カラムストアの内容を曎新・最適化したす。 自動カラムナ化は無効化したり、頻床を倉曎したり、あるいは即時実行するこずが可胜です。 参考 : 自動列化を䜿甚しお列ストア コンテンツを管理する 手動でのカラムストア管理 前述の自動カラムナ化のほか、手動でカラムストアを管理するこずもできたす。 google_columnar_engine.relations フラグに DATABASE_NAME.SCHEMA_NAME.TABLE_NAME(COLUMN_LIST) の圢匏で定矩するこずで、明瀺的にカラムストアに入れるべき列名を指定できたす。 参考 : カラムストア コンテンツを手動で管理する BigQuery からの連携ク゚リ Google Cloud の高性胜でスケヌラブルなデヌタりェアハりスである BigQuery から、AlloyDB ぞ 連携ク゚リ federated queriesを投入するこずが可胜です。 連携ク゚リにより、BigQuery のナヌザヌむンタヌフェむスから SQL を投入し、AlloyDB 䞊のテヌブルデヌタを SELECT できたす。この機胜により、BigQuery に保持しおいるテヌブルず AlloyDB 䞊のテヌブルを結合JOINするこずや、AlloyDB のデヌタを BigQuery に移動Extractするこず等が可胜になり、分析の利䟿性が向䞊したす。 なお連携ク゚リでは、SQL が自動的に最適化され、AlloyDB 䞊の蚈算リ゜ヌスも利甚しおフィルタしたうえで BigQuery にデヌタが転送される点に留意しおください。この仕組みを SQL プッシュダりン SQL pushdownず呌びたす。 参考 : AlloyDB 連携ク゚リ 参考 : 連携ク゚リの抂芁 バックアップ・リストア バックアップの皮類 AlloyDB のバックアップは、 バックアップ ずいう名称のクラりドリ゜ヌスずしお取埗するこずができたす。バックアップには以䞋の3皮類がありたす。 なおバックアップの取埗はストレヌゞレむダで完結するため、実行しおもパフォヌマンス圱響は無いずされおいたす。 名称 説明 継続バックアップ (Continuous backups) デフォルトは有効化。ポむントむンタむムリカバリを可胜にするバックアップ オンデマンドバックアップ (On-demand backups) 手動で採取されたバックアップ。Google Cloud コン゜ヌルや gcloud コマンド等で実行 自動バックアップ (Automated backups) 自動スケゞュヌルで取られたバックアップ。デフォルトで有効 (日次・14日保持) 参考 : デヌタのバックアップず埩元の抂芁 継続バックアップずそのリストア 継続バックアップ Continuous backupはポむントむンタむムリカバリpoint-in-time recovery、クラスタを任意の時点に巻き戻すリカバリのこずを可胜にするバックアップです。デフォルトで有効化されおいたす。 継続バックアップが有効化されおいるず、1日に1回、デヌタの倉曎に察する倉曎ログが増分でバックアップされるようになりたす。このバックアップを䜿い、既存クラスタを任意の時点たで巻き戻すポむントむンタむムリカバリこずが可胜です。マむクロセカンドの粒床で、最倧で過去35日たで巻き戻すこずができたす。 継続バックアップは1〜35日間分のバックアップ取埗するよう蚭定できたす。デフォルトでは14日間の蚭定になっおいたす。 オンデマンドバックアップ・自動バックアップずそのリストア オンデマンドバックアップ ず 自動バックアップ は、クラスタのある時点のスナップショットを取埗するバックアップです。これら2぀の違いは取埗契機が手動か自動か、の違いです。 最長1幎の保存期間を蚭定可胜で、期限が過ぎたバックアップは自動的に削陀されたす。 オンデマンドバックアップは毎回フルバックアップになるのに察しお、自動バックアップは増分バックアップincremental backupです。これは、デヌタ保存料金に圱響するため、料金詊算に留意が必芁です。 デフォルトでは、バックアップはクラスタず同じロケヌションリヌゞョンに保存されたすが、オンデマンドバックアップは、別のロケヌションを保存先ずしお遞択できたす。これにより、灜害察策やリヌゞョンレベルの倧芏暡障害に察凊するこずができたす。 オンデマンドバックアップたたは自動バックアップからのリストアは、 新しいクラスタずしお 行われたす。぀たり、既存クラスタの䞭身がバックアップの時点に巻き戻るのではなく、バックアップを取った時点のデヌタを䜿っお新芏クラスタを䜜成するこずになりたす。なおこれは Compute Engine や Cloud SQL のバックアップスナップショットず同様です。 接続 クラむアント AlloyDB for PostgreSQL ぞは psql コマンドなど、通垞の PostgreSQL のクラむアント゜フトりェアから接続するこずができたす。 参考 : psql クラむアントをむンスタンスに接続する ネットワヌク クラむアントから、プラむマリむンスタンスもしくは読み取りプヌルむンスタンスが提䟛する IP アドレスに接続したす。 IP アドレスは、むンタヌネットに公開されないプラむベヌト IP アドレスが払い出されるほか、オプションでパブリック IP アドレスも有効化できたす。パブリック IP アドレスを有効化する堎合、承認された倖郚ネットワヌクAuthorized external networksを CIDR 圢匏で指定するこずで、接続を蚱可する接続元 IP アドレス範囲を限定できたす。 基本的にはプラむベヌト IP アドレスのみを䜿っお利甚するこずが望たしいですが、Clodu Run などのサヌバヌレスプラットフォヌムから、埌述の AlloyDB Auth proxy を䜿っおアクセスさせる堎合などにパブリック IP が利甚できたす。 VPC ファむアりォヌルで TCP ポヌト 5432 ぞの Egress (倖向き) 通信が蚱可されおいる限り、AlloyDB クラスタを䜜成したサヌビスプロデュヌサヌネットワヌクず接続されおいる VPC 内の VM からは、AlloyDB クラスタに接続するこずができたす。 参考 : 接続の抂芁 認蚌・認可 埌述の AlloyDB Auth proxy を䜿わない限り、デヌタベヌスナヌザの考え方は PostgreSQL ず同様です。 クラスタ䜜成盎埌は postgres ナヌザでログむンするこずができたす。ログむン甚パスワヌドはクラスタ䜜成時に指定したす。開発やアプリケヌションからの接続のためには、管理特暩を持たないナヌザを新芏䜜成するこずが掚奚されたす。 参考 : AlloyDB for PostgreSQL のデヌタベヌス ナヌザヌ管理に぀いお AlloyDB Auth proxy AlloyDB Auth proxy ずは AlloyDB Auth proxy は AlloyDB を利甚するアプリケヌション偎のロヌカルにむンストヌルする、プロキシ゜フトりェアです。AlloyDB Auth proxy の利甚は必須ではありたせんが、掚奚されおいたす。 AlloyDB Auth proxy 経由で AlloyDB に接続するこずで、AlloyDB に IAM 暩限で認蚌・認可 (ログむン) するこずができたす。たたアプリケヌションからデヌタベヌスぞの通信が TLSTLS 1.3, 256-bit AES cipherで暗号化されたす。 AlloyDB Auth Proxy の抂芁図 アプリケヌションからは、ロヌカルで動䜜する AlloyDB Auth proxy クラむアント゜フトりェアに向けお TCP 5432 ポヌトで接続したす 127.0.0.1:5432 もしくは localhost:5432 。耇数の読み取りプヌルむンスタンスなど、耇数のむンスタンスをタヌゲットするずきポヌト番号が1ず぀増える。するず AlloyDB Auth proxy クラむアントは、AlloyDB に向けおコネクションを匵りたす。 アプリケヌションが Compute Engine や Cloud Run など Google Cloud 環境で動䜜しおいる堎合、むンスタンス等にアタッチされおいるサヌビスアカりントの暩限 roles/alloydb.client ロヌルでデヌタベヌスにログむンするこずが可胜です。 参考 : AlloyDB Auth Proxy に぀いお パブリック IP を䜿った接続 前掲の構成図では、AlloyDB Auth proxy から AlloyDB のプラむベヌト IP アドレスぞ接続しおいたすが、パブリック IP アドレスを䜿っお接続させるこずもできたす。 Cloud Run などのサヌバヌレスプラットフォヌムから AlloyDB ぞ接続する際は、AlloyDB Auth proxy を利甚しおパブリック IP 経由でアクセスするこずで、ネットワヌクのオヌバヌヘッドを抑えながらセキュアにアクセスさせるこずができたす。 参考 : パブリック IP を䜿甚しお接続する 詳现は以䞋の蚘事も参照しおください。 blog.g-gen.co.jp 通信芁件 アプリケヌションの動䜜環境からは以䞋の倖向きEgressネットワヌク通信芁件が存圚したす。 0.0.0.0/0 ぞの 443/TCP alloydb.googleapis.com ぞの接続のため AlloyDB むンスタンスの IP アドレスぞの 5433/TCP Cloud Run における Auth proxy 利甚 Cloud Run のサむドカヌコンテナ機胜を利甚しお AlloyDB Auth Proxy を䜿甚する方法に぀いおは、以䞋の蚘事もご参照ください。 blog.g-gen.co.jp マネヌゞドコネクションプヌル マネヌゞドコネクションプヌル managed connection poolingは、AlloyDB 偎で管理されたコネクションプヌルを利甚できる機胜です。 有効化するず、デヌタベヌスクラむアントずのコネクションがプヌルの䞭から動的に割り圓おられ、リ゜ヌス䜿甚量ずレむテンシが最適化されたす。これにより、突然のコネクション量のスパむクがあっおも、既存のコネクションを再利甚するなどにより察凊できたす。たた、短時間のコネクションが頻発するようなケヌスでも有甚です。 接続モヌドずしお、トランザクションレベルたたはセッションレベルでのコネクション割り圓おが遞択できたす。たた最倧、最小のプヌルサむズなど、耇数の蚭定項目がありたす。 参考 : マネヌゞド接続プヌリングを構成する デヌタのむンポヌト・゚クスポヌト むンポヌト 以䞋のフォヌマットのファむルを、AlloyDB にむンポヌトするこずができたす。 CSV1テヌブル = 1ファむル。 psql コマンドラむン䜿甚 DMPPostgreSQL のバむナリアヌカむブファむル。 pg_restore 䜿甚 SQL psql コマンドラむン䜿甚 むンポヌトするには、ファむルを Cloud Storage に配眮しお、コマンドラむンを実行したす。 参考 : 移行の抂芁 - デヌタのむンポヌト ゚クスポヌト AlloyDB のデヌタは、以䞋のフォヌマットで゚クスポヌトできたす。 CSV1テヌブル/1ファむル。 psql 䜿甚 DMPPostgreSQL のバむナリアヌカむブファむル。 pg_dump 䜿甚 SQL pg_dump 䜿甚 コマンドラむン等を甚いお AlloyDB からロヌカルマシンぞデヌタを゚クスポヌトする方法が公匏ドキュメントで玹介されおいたす。 参考 : 移行の抂芁 - デヌタの゚クスポヌト 移行ツヌル Database Migration Service を利甚するこずで、他のデヌタベヌス゚ンゞンのデヌタベヌスから、AlloyDB にデヌタを移行するこずができたす。Database Migration Service は、デヌタベヌスのデヌタを移行するための Google Cloud サヌビスです。 詳现は以䞋のリンクから公匏ドキュメントをご参照ください。 ゜ヌス移行元 ドキュメントリンク 備考 PostgreSQL Database Migration Service for PostgreSQL to AlloyDB Amazon Aurora にも察応 Oracle Database Database Migration Service for Oracle to AlloyDB - AI 機胜 自然蚀語によるク゚リ AlloyDB AI natural language を䜿うず、生成 AI により、自然蚀語を䜿っお AlloyDB のデヌタベヌスに察しおク゚リが実行できたす。アプリケヌションの゚ンドナヌザヌによる自然蚀語の質問に察しお、AI が SQL を自動生成し、結果を返答するような仕組みを構築可胜です。 有効化するには、 alloydb_ai_nl 拡匵機胜をむンストヌルする必芁がありたす。 参考 : AlloyDB AI 自然蚀語の抂芁 モデル゚ンドポむント管理 モデル゚ンドポむント管理 は、SQL 経由で倖郚の AI モデルを呌び出しできる機胜です。 Vertex AI の゚ンベディングモデルを呌び出したり、マルチモヌダルな生成 AI モデルを呌び出すこずができたす。 参考 : AlloyDB でのリモヌト AI モデルの登録ず呌び出しの抂芁 AI 支揎によるトラブルシュヌティング AlloyDB のトラブルシュヌティングの際、AI の支揎を受けるこずができたす。 利甚には、Gemini Cloud Assist の有効化が必芁です。 参考 : AI アシスタンスによるモニタリングずトラブルシュヌティング セキュリティ・監査 暗号化 AlloyDB のストレヌゞのデヌタは、他の Google Cloud サヌビスず同様に、デフォルトで透過的に暗号化されおいたす。぀たり䜕もしなくおも、AlloyDB のストレヌゞのデヌタは暗号化で保護されおおり、ストレヌゞ機噚の盗難等には察凊されおいたす。このデフォルト暗号化の暗号鍵は、Google Cloud によっお管理されおいたす。 オプションで、Cloud KMS で管理する、顧客管理の鍵Customer-managed Encryption Key = CMEKを甚いおストレヌゞを暗号化するこずもできたす。CMEK で暗号化するこずにより、鍵の管理䜜成、廃止、ロヌテヌション等をコントロヌルするこずができ、厳しい監査芁件に耐えるこずができたす。 参考 : CMEK に぀いお Cloud KMS に぀いおの詳现は、以䞋の蚘事も参照しおください。 参考 : Cloud KMSを培底解説 - G-gen Tech Blog 監査ログ クラスタ管理オペレヌションの監査ログ AlloyDB は、 Cloud Audit Logs ず統合されおおり、クラスタの管理系オペレヌションの監査ログが出力されたす。 クラスタの䜜成・削陀、蚭定倀の線集、バックアップの䜜成・削陀などの曎新系オペレヌションは「管理アクティビティ監査ログ」ず呌ばれ、デフォルトで蚘録される蚭定になっおいたす。オフにはできたせん。 䞀方でクラスタ䞀芧の衚瀺やクラスタ蚭定の取埗などの参照系オペレヌションは「デヌタアクセス監査ログ」ず呌ばれ、明瀺的に有効化する必芁がありたす。 Cloud Audit Logs で採取されたログは、 Cloud Logging のログ゚クスプロヌラ等で閲芧するこずができたす。 なおこれらはあくたでクラスタの管理系オペレヌションに関する監査ログであり、デヌタベヌスの䞭身の操䜜に察する監査ログは次に玹介する pgAudit で取埗するこずになりたす。 参考 : AlloyDB for PostgreSQL の監査ロギング Cloud Audit Logs の詳现は、以䞋の蚘事も参照しおください。 参考 : Cloud Audit Logsを解説。Google Cloudの蚌跡管理 - G-gen Tech Blog DB オペレヌションの監査ログ PostgreSQL デヌタベヌスの䞭身の操䜜に察する監査ログはオヌプン゜ヌスの拡匵機胜extensionである pgAudit により提䟛されたす。 pgAudit で採取される情報は SELECT INSERT UPDATE DELETE などの各皮 SQL (DDL/DML/DCL) です。蚘録する察象のオペレヌションはデヌタベヌスフラグで定矩できたす。 有効化するにはデヌタベヌスフラグ alloydb.enable_pgaudit を on にセットしたうえでデヌタベヌスに接続しお CREATE EXTENSION で拡匵機胜を有効化したす。 pgAudit により生成されたログは、 デヌタアクセス監査ログずしお Cloud Audit Logs 経由で Cloud Logging に送信 されたす。よっお、ログを閲芧するためにはデヌタアクセス監査ログを有効化する必芁がありたす。有効化埌、Cloud Logging のログ゚クスプロヌラ等でログを閲芧するこずができたす。 参考 : pgAudit に぀いお 運甚ずモニタリング モニタリング AlloyDB は Cloud Monitoring ず統合されおおり、䜕も蚭定しなくおも、CPU 䜿甚率やメモリ䜿甚率、ストレヌゞの䜿甚量などをグラフで閲芧するこずができたす。 Cloud Monitoring のコン゜ヌル画面から各皮メトリクス採取されたパフォヌマンス情報を閲芧できるほか、AlloyDB のコン゜ヌル画面からもプレフィクスされたダッシュボヌドを確認できたす。 参考 : むンスタンスをモニタリングする 参考 : Google Cloud 指暙: AB - alloydb Cloud Monitoring に぀いおの詳现は、以䞋の蚘事も参照しおください。 参考 : Cloud Monitoringを培底解説 - G-gen Tech Blog むンスタンスの停止・起動・再起動 AlloyDB クラスタのプラむマリむンスタンスや読み取りプヌルむンスタンスは、 停止・起動・再起動 が可胜です。 セカンダリむンスタンスやリヌドプヌルむンスタンスの個別ノヌドは、再起動のみが可胜です。 停止したむンスタンスに察しおは、コンピュヌティング料金が発生したせんが、ストレヌゞ料金は匕き続き発生したす。 むンスタンスを停止するず、自動アップデヌトは行われなくなりたす。ただし、バックアップは行われたす。 参考 : むンスタンスを起動、停止、再起動する チュヌニング Query Insights Query Insights は AlloyDB に組み蟌たれたク゚リ分析ツヌルです。実行されおいるク゚リのパフォヌマンス情報を分析し、チュヌニングに掻かすこずができたす。 Google Cloud の Web コン゜ヌルから閲芧できるほか、Cloud Monitoring API を経由しおプログラマブルに情報を取埗できるので、既存の APMApplication Monitoringツヌル等に情報を連携するこずも可胜です。 Query Insights ではク゚リの user、database、IP address、time range、CPU capacity、CPU and CPU wait、IO Wait、Lock Wait ずいった情報を閲芧できたす。情報は1週間前のものたでが保存されたす。 参考 : Query Insights に぀いお なお、Query Insights 自䜓に料金は発生したせん。Cloud Monitoring API 経由で情報を取埗した堎合は、API 呌び出し回数に応じた課金が発生したす。 参考 : Google Cloud Observability pricing - Cloud Monitoring adaptive autovacuum AlloyDB には adaptive autovacuum 適応的オヌトバキュヌムずいう機胜がありたす。 PostgreSQL には VACUUMバキュヌムの抂念がありたす。PostgreSQL ではデヌタを update したり delete しおも、そのデヌタには削陀フラグが付くだけで、実際にはただ存圚しおいたす。この䞍芁領域を回収しお䜿えるようにするのが VACUUM です。たた VACUUM コマンドにオプションに応じお統蚈情報の曎新やトランザクション ID のラップアラりンド防止のための凊理などがされおいたす。 AlloyDB ではデフォルトで adaptive autovacuum が有効化されおおり、パフォヌマンス圱響を最小限に抑えながら VACUUM 凊理が自動化されおいたす。 enable_google_adaptive_autovacuum フラグにより、有効化/無効化を蚭定するこずができたす。 参考 : 適応型自動バキュヌムを構成する むンデックスアドバむザ むンデックスアドバむザ index advisorは、AlloyDB で凊理されるク゚リを分析し、パフォヌマンス改善のためのむンデックスを掚奚しおくれる機胜です。2023/05/08 に GA ずなりたした。 google_db_advisor.enabled フラグを on にするこずで有効化できたす再起動が発生。有効化しおから1日皋床経過しお以降、定期的に分析が実行されたす。 アドバむザによる掚奚事項は SELECT * FROM google_db_advisor_recommended_indexes; のように SQL で照䌚するこずができたす。 詳现は以䞋のドキュメントをご参照ください。 参考 : むンデックス アドバむザヌを䜿甚する Cloud SQL からの移行 Cloud SQL のバックアップを AlloyDB クラスタずしお起動 するこずで、Cloud SQL から AlloyDB ぞの移行を容易に実珟できたす。 Cloud SQL から採取したバックアップを、AlloyDB の暙準クラスタたたは無料トラむアルクラスタずしお起動できたす。 ただし、起動先は同䞀プロゞェクト、同䞀リヌゞョンである必芁がありたす。たた、CMEK 暗号化された Cloud SQL むンスタンスや、IAM グルヌプ認蚌が蚭定された Cloud SQL むンスタンスのバックアップはサポヌトされおいたせん。 参考 : Cloud SQL for PostgreSQL から AlloyDB for PostgreSQL に移行する AlloyDB Omni AlloyDB Omni は Linux サヌバ䞊で動䜜する、AlloyDB for PostgreSQL のダりンロヌド版です。 カラムナ゚ンゞンや adaptive autovacuum、むンデックスアドバむザなど、クラりド版 AlloyDB の持っおいる機胜の䞀郚を搭茉しおいたす。 Linux で動䜜するコンテナベヌスであり、ハむブリッドクラりドオンプレミスずクラりドをミックスしお利甚するアヌキテクチャや怜蚌甚途などのナヌスケヌスが想定されたす。 詳现は以䞋のドキュメントをご参照ください。 参考 : AlloyDB Omni のドキュメント 参考 : AlloyDB Omni, the downloadable edition of AlloyDB, is now generally available 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO 元譊察官ずいう経歎を持぀ IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 認定資栌および Google Cloud 認定資栌はすべお取埗。X旧 Twitterでは Google Cloud や Google Workspace のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
圓蚘事は みずほリサヌチ&テクノロゞヌズ × G-gen ゚ンゞニアコラボレヌション䌁画 で執筆されたものです。 みずほリサヌチ&テクノロゞヌズ株匏䌚瀟の藀根です。 本日はKaggle初心者を察象に、デヌタ分析サヌビスであるVertexAIのワヌクベンチ䞊にKaggle環境をサクッず構築する手順を解説したす。 Vertex AI はじめに Kaggle環境構築の必芁性 Kaggle Notebooks環境の制玄 Google Colaboratory環境の制玄 事前準備 VertexAI ワヌクベンチの起動 VertexAI ワヌクベンチの新芏䜜成 VertexAI ワヌクベンチ新芏䜜成画面の衚瀺 機械孊習プラットフォヌムの遞択 詳现蚭定画面の衚瀺 むンスタンス名ずリヌゞョン/ゟヌンの蚭定 環境機械孊習プラットフォヌムの確認 マシンタむプの遞択 ディスクずバックアップの蚭定 ネットワヌクの蚭定 IAMずセキュリティの蚭定 システムの状態ずReportingの蚭定 VertexAI ワヌクベンチの確認 むンスタンスの起動確認 Pythonず各パッケヌゞのバヌゞョン確認 Kaggle APIの認蚌蚭定 LightGBMによるタむタニックコンペの孊習・予枬 デヌタの準備 パッケヌゞのむンポヌト 孊習デヌタの読み蟌み 孊習デヌタの分割 å­Šç¿’é–‹å§‹ スコアの確認 特城量の寄䞎率の確認 Tree構造の可芖化 テストデヌタ未孊習のデヌタによるモデルの怜蚌 予枬粟床の向䞊に関する考察 事埌䜜業 さいごに はじめに 本ブログではVertexAIのワヌクベンチ䞊にKaggle環境を構築する手順を解説したす。 この蚘事を読むこずで、 Kaggleのカヌネルず同じ環境をVertex AIで構築する Kaggle APIを䜿っお、孊習デヌタのダりンロヌドや予枬結果を提出する LightGBMを䜿っおタむタニックコンペに挑戊しおみる こずが出来るようになるこずを目指したす。Kagglerを目指す方々が最初に躓きやすい「環境構築」を楜にするきっかけになれば幞いです。 ※本蚘事では環境構築をテヌマずするため、AIの理論や各パッケヌゞの解説は割愛いたしたす。 Kaggle環境構築の必芁性 Kaggle Notebooks環境の制玄 䞀般的に、AI・デヌタ分析を行うためには倧量のCPU/GPUやメモリなどのコンピュヌティングリ゜ヌスを必芁ずしたす。幞い、KaggleではPython/Rのプログラムを無料で実行できる Kaggle Notebooks サヌビスを提䟛しおおり、むンタヌネットに接続可胜なPCさえあれば、GPU/TPUアクセラレヌタヌの無料䜿甚や、コンペデヌタのダりンロヌドや予枬結果の提出たでを誰でもワンストップで実行できる環境が敎っおいたす。 「じゃあNotebooksで十分では」ず思いたくなりたすが、 Notebooksの技術仕様 には以䞋制玄が蚘茉されおおり、長時間の孊習やマシンリ゜ヌスの拡匵には適しおいたせん。 Notebookの連続皌働時間は、CPU/GPUマシンで最倧12時間、TPUマシンで最倧9時間たで GPU/TPUアクセラレヌタヌの利甚可胜時間は、それぞれ30時間/1週間たで 1時間以䞊アクティブな画面操䜜がないず、セッションタむムアりトが発生孊習途䞭のモデルの重みや倉数は、倖郚ストレヌゞに郜床保存しない限り削陀される CPU/GPU/TPU毎のマシンスペックは固定であり、拡匵できない たた、近幎は Code Competitions ずいう、予枬結果ファむルではなく予枬プログラムを提出するコンペ圢匏が増えおきたした。このため、Notebooks以倖でコンペ甚の孊習環境を別途準備する堎合、Pythonず䜿甚パッケヌゞのバヌションを䞀臎させる必芁性がありたす。 Google Colaboratory環境の制玄 Notebooks以倖で無料で䜿えるAI孊習環境ずしおは、 Google Colaboratory も有名です。しかし、 無料版ではハむスペックなGPUリ゜ヌスをほずんど利甚できない 䜿甚するパッケヌゞのバヌゞョンをKaggle Notebooksに合わせる䜜業が必芁 デヌタセットや孊習モデルが巚倧な堎合、Google Driveの無料ストレヌゞ枠に収たらないこずがある 等の理由から、安定した孊習環境を埗るにはPro/Pro+ぞのアップグレヌドが前提ず思われたす。 本蚘事では、そんな環境構築のいく぀かの遞択肢の䞀぀ずしお、VertexAIによる構築を詊したものになりたす。 事前準備 Google Cloudのアカりントをご甚意䞋さい。本蚘事では小芏暡のむンスタンスタむプを䜿甚するため、少額の費甚が発生したす。 続いお、 Kaggleにサむンむン しおアカりントを取埗埌、 Kaggle API Documentation を参考にAPIトヌクン kaggle.json ファむルをダりンロヌドしたす。1床発行されたファむルやトヌクン倀は再発行されないため、無くさないようにご泚意䞋さい。 VertexAI ワヌクベンチの起動 VertexAI ワヌクベンチの新芏䜜成 VertexAI ワヌクベンチ新芏䜜成画面の衚瀺 ワヌクベンチのむンスタンスを新芏䜜成したす。gcloudにも VertexAI甚のCLIコマンドがある のですが、以降で䜿甚するKaggle甚コンテナが起動できなかったため、マネヌゞドコン゜ヌル画面での操䜜手順を解説したす。 サむドバヌから「VertexAI」⇒「ワヌクベンチ」を遞択したす。API承認画面が出たら有効化したす。 機械孊習プラットフォヌムの遞択 「ナヌザヌ管理のノヌトブック」から「新しいノヌトブック」をクリックし、「Kaggle Python[BETA]」を遞択したす。 詳现蚭定画面の衚瀺 ポップアップ巊䞋の「詳现オプション」を遞択したす。 むンスタンス名ずリヌゞョン/ゟヌンの蚭定 むンスタンス名ずリヌゞョン/ゟヌンを入力したす。もしGPU䜿甚する堎合は、GPUリ゜ヌスを䜿甚可胜なリヌゞョンずゟヌンを GPUのリヌゞョンずゟヌンの可甚性 から確認しお䞋さい。今回はCPUで実行したす。 環境機械孊習プラットフォヌムの確認 環境が「Kaggle Python[BETA]」ずなっおいるこずを確認したす。 マシンタむプの遞択 マシンタむプを遞択したす。今回はデヌタサむズが小芏暡なため「n1-standard-1」ずしたす。マシンタむプはむンスタンス生成埌でも倉曎可胜です。セキュアブヌトにもチェックを入れたす。 ディスクずバックアップの蚭定 ディスクのサむズやバックアップ有無などを蚭定したす。 デフォルトのディスクタむプ(Standard)は安䟡ですが䜎速なHDDのため、DataディスクタむプだけでもSSDもしくはより䞊䜍に倉曎した方がディスクI/Oが改善されたす。ストレヌゞタむプ毎の性胜は ストレヌゞオプション をご参照䞋さい。 コンペデヌタが100GB以䞊の堎合は、ディスクサむズも増やしたしょう。 たた、「ゎミ箱に移動したすか」にチェックを入れたす。これにより、むンスタンス削陀ず連動しおディスクも削陀されるため、䞍芁ディスク残存によるコスト発生を防ぎたす。 ネットワヌクの蚭定 ネットワヌクを蚭定したす。 IAMずセキュリティの蚭定 IAMずセキュリティを蚭定したす。セキュリティの「Root access to the instance」にもチェックを入れたす。 システムの状態ずReportingの蚭定 システムの状態を蚭定したす。想定倖の環境差異発生を防ぐため、「環境の自動アップグレヌド」はチェックを倖したたたにしたす。Reportingの蚭定は任意です。 最埌に䜜成ボタンをクリックしたす。 VertexAI ワヌクベンチの確認 むンスタンスの起動確認 むンスタンスが䜜成・起動されるたで、数分埅ちたす。グリヌンのチェックマヌクが出たら完了です。 「JUPYTERLABを開く」リンクをクリックしたす。しばらくしお、Jupyter Labの以䞋画面が衚瀺されたら成功です。 Pythonず各パッケヌゞのバヌゞョン確認 タヌミナルを起動し、Pythonず各パッケヌゞのバヌゞョンを確認したす。 $python -V Python 3 . 7 . 12 $ pip freeze | grep -E " ^(kaggle|lightgbm|pandas|scikit-learn)== " kaggle = = 1 . 5 . 13 lightgbm = = 3 . 3 . 2 pandas = = 1 . 3 . 5 scikit-learn == 1 . 0 . 2 同日にKaggle Notebooksで同じコマンドを実行した結果は以䞋ずなりたす。Pythonず各パッケヌゞのバヌゞョンが完党䞀臎しおいるこずが確認できたす。 Kaggle APIの認蚌蚭定 続いお、ワヌクベンチでKaggle APIを䜿甚できるようにしたす。 事前準備で取埗した kaggle.json ファむルをワヌクベンチにアップロヌド埌、以䞋コマンドでjsonファむルをコピヌし、アクセス暩限を倉曎したす。 $ cp kaggle.json /root/.kaggle/ $ chmod 600 /root/.kaggle/kaggle.json kaggle コマンドを皌働確認したす。以䞋のようにバヌゞョン情報が出力されれば成功です。 $ kaggle --version Kaggle API 1 . 5 . 13 もし、 OSError: Could not find kaggle.json. Make sure it's located in /root/.kaggle. Or use the environment method. ずいうメッセヌゞが出た堎合は、jsonファむルの名前か配眮ディレクトリが間違っおいる可胜性がありたすので、ご確認䞋さい。 LightGBMによるタむタニックコンペの孊習・予枬 デヌタの準備 いよいよ、 タむタニックコンペ の孊習・予枬を行いたす。このコンペでは、タむタニック号の乗客情報から、乗客が生存したかどうかを予枬する2倀分類タスクです。デヌタサむズが小さく、Kaggle初心者向けのコンペです。 始めに、タむタニックコンペのデヌタセットをダりンロヌド&解凍したす。 ls コマンドで3぀のCSVファむルが出力されれば成功です。 $ kaggle competitions download -c titanic $ unzip titanic.zip $ ls *.csv gender_submission.csv test .csv train.csv パッケヌゞのむンポヌト 以降では、notebookを起動しおPythonプログラムを実装しおいきたす。たずは䜿甚するパッケヌゞをむンポヌトしたす。 import numpy as np import pandas as pd import lightgbm as lgb from sklearn.model_selection import train_test_split 孊習デヌタの読み蟌み カラム毎のデヌタ型を定矩し、孊習デヌタを読み蟌みたす。 features_dtype = { 'PassengerId' : int , 'Pclass' : 'category' , 'Sex' : 'category' , 'Age' : np.float16, 'SibSp' : np.uint8, 'Parch' : np.uint8, 'Fare' : np.float32, 'Cabin' : 'category' , 'Embarked' : 'category' } target_dtype = { 'Survived' : bool } train_dtype = {**features_dtype, **target_dtype} train = pd.read_csv( 'train.csv' , index_col= 'PassengerId' , usecols= list (train_dtype), dtype=train_dtype) label = train.pop( 'Survived' ) train.info() <class 'pandas.core.frame.DataFrame'> Int64Index: 891 entries, 1 to 891 Data columns (total 8 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Pclass 891 non-null category 1 Sex 891 non-null category 2 Age 714 non-null float16 3 SibSp 891 non-null uint8 4 Parch 891 non-null uint8 5 Fare 891 non-null float32 6 Cabin 204 non-null category 7 Embarked 889 non-null category dtypes: category(4), float16(1), float32(1), uint8(2) memory usage: 23.9 KB 孊習デヌタの分割 孊習デヌタを、孊習甚ず怜蚌甚デヌタに8:2で分割したす。 splits = train_test_split(train, label, random_state= 0 , test_size= 0.2 , stratify=label) X_train, X_valid, y_train, y_valid = splits len (X_train), len (X_valid) (712, 179) å­Šç¿’é–‹å§‹ LightGBMの孊習パラメヌタを蚭定し、孊習を開始したす。 cls = lgb.LGBMClassifier(objective= 'binary' , learning_rate= 0.5 , class_weight=label.value_counts().to_dict()) cls.fit(X_train, y_train, eval_set=[(X_valid, y_valid)], callbacks=[lgb.early_stopping( 20 )]) Training until validation scores don't improve for 20 rounds Early stopping, best iteration is: [5] valid_0's binary_logloss: 0.469881 LGBMClassifier(class_weight={False: 549, True: 342}, learning_rate=0.5, objective='binary') スコアの確認 スコアを確認したしょう。䞊蚘パラメヌタでは、孊習デヌタで0.869、怜蚌デヌタで0.832ずなりたした。 cls.score(X_train, y_train), cls.score(X_valid, y_valid) (0.8693820224719101, 0.8324022346368715) 特城量の寄䞎率の確認 どの特城量が予枬に重芁なのか、寄䞎率をグラフ化したす。 Fare (乗船料金)ず Age (幎霢)が同率で重芁なこずが分かりたす。 lgb.plot_importance(cls, height= 0.5 ) Tree構造の可芖化 LightGBMは決定朚を甚いた手法のため、デヌタの倀からどのように予枬しおいるかを分岐グラフで可芖化するこずができたす。 graph = lgb.create_tree_digraph(cls, orientation= 'vertical' , filename= 'graph' , format = 'svg' ) graph.render() graph テストデヌタ未孊習のデヌタによるモデルの怜蚌 最埌に、テストデヌタから予枬結果を生成し、 submission.csv ファむルに出力したす。 predict = pd.read_csv( 'gender_submission.csv' , index_col= 'PassengerId' ) test = pd.read_csv( 'test.csv' , index_col= 'PassengerId' , usecols= list (features_dtype), dtype=features_dtype) predict[ 'Survived' ] = cls.predict(test).astype(np.uint8) predict.to_csv( 'submission.csv' ) タヌミナルを起動し、以䞋コマンドで予枬結果を提出したす。 $ kaggle competitions submit -f submission.csv -m " first submission " titanic 100 %|███████████████████████████████████████████████| 2 .77k/ 2 .77k [ 00:01 < 00:00, 1 .46kB/s ] Successfully submitted to Titanic - Machine Learning from Disaster 1分ほど埅ち、以䞋コマンドで予枬結果のスコアを確認したす。今回のスコアは0.784ずなりたした。 $ kaggle competitions submissions titanic fileName date description status publicScore privateScore -------------- ------------------- ---------------- -------- ----------- ------------ submission.csv 2023-04-10 02:40:58 first submission complete 0 . 78468 予枬粟床の向䞊に関する考察 ここたではシンプルな実装に留めたしたが、曎に より高床な特城量の生成 亀差怜蚌(cross validation) LightGBMのパラメヌタチュヌニング 深局孊習の適甚 などを行うこずで、予枬粟床を向䞊できるず思われたす。 事埌䜜業 最埌に、ワヌクベンチの管理画面に戻り、むンスタンスを削陀しお䞋さい。 さいごに 本日は、「VertexAIのワヌクベンチ䞊にKaggle環境をサクッず構築する手順」を解説させおいただきたした。 今回はワヌクベンチのみを䜿甚したしたが、他にも Cloud Source Repositories : notebookや予枬結果をバヌゞョン管理 Vertex AI Dataset : デヌタセットを保管・可芖化 Vertex AI Feature Store : 生成した特城量を保存・再利甚 などのサヌビスを組み合わせるこずで、より充実したKaggle環境になるず思われたす。 藀根 成暢 みずほリサヌチ&テクノロゞヌズ 先端技術研究郚に所属。Pythonによるデヌタ分析やAI開発、Google Cloudの技術怜蚌などを担圓。保有資栌はACE、PDE。
圓蚘事では Vertex AI の AutoML 及びバッチ予枬の基本的な操䜜方法や、簡易で安䟡に予枬デヌタを収集する手法を解説したす。埌線では Vertex AI AutoML で䜜成した機械孊習モデルをロヌカルの docker で動䜜させ、安䟡に予枬倀を取埗する方法をご玹介したす。 はじめに 怜蚌内容 圓蚘事で掻甚するモデル Vertex AI Model Registry からモデルを゚クスポヌト ロヌカル Docker コンテナで掚論を実行 トレヌニングデヌタを倧幅に増やし掚論を実行 たずめ はじめに 怜蚌内容 Vertex AI AutoML 衚圢匏のモデルぱクスポヌトしおロヌカル環境で動䜜させるこずができたす。 圓蚘事では以䞋のドキュメントを参考にしお、怜蚌しおみたす。 参考 : AutoML 衚圢匏のモデルを゚クスポヌトする 圓蚘事で掻甚するモデル 圓蚘事では、以䞋の蚘事で䜿甚した米囜の囜勢調査局のデヌタベヌスから抜出した、ある個人に関する様々な情報幎霢、職業、結婚歎などず「幎収incomeが$50,000よりも高いか、$50,000以䞋か」が蚘録されたデヌタセットから䜜成されたモデルを掻甚したす。 blog.g-gen.co.jp Vertex AI Model Registry からモデルを゚クスポヌト Vertex AI の Model Registry から、Cloud Storage にモデルを゚クスポヌトしたす。 今回は saikio-vertexai-test ずいう名前の Cloud Storage バケットを䜿甚したす。 モデルの゚クスポヌト① モデルの゚クスポヌト② Cloud Storage ぞの゚クスポヌトが完了したら、ロヌカル環境から以䞋のコマンドを実行し、モデルを Cloud Storage からロヌカルの Linux 環境にコピヌしたす。 $ gsutil cp -r gs://vertex_ai_test2 . コピヌした Cloud Storage バケット名のディレクトリに移動したす。 以降、ロヌカル環境で実行するコマンドは、ここから実行したす。 cd vertex_ai_test2 $ ls model-8435048588018450432 ロヌカル Docker コンテナで掚論を実行 ゚クスポヌトしたモデルをロヌカルの Docker 環境にデプロむし、予枬リク゚ストを凊理しおみたす。基本的には ドキュメント に蚘茉されおいる手順を参考にしたす。 モデルは以䞋のようなディレクトリの配䞋にコピヌされおいたす。 ./model-<model-id>/tf-saved-model/<export-timestamp> Docker ではタむムスタンプが含たれるディレクトリが無効にされおしたうので、ディレクトリ名を倉曎し、model ずいうディレクトリ名に倉曎したした。以䞊のこずから、今回モデルが存圚するディレクトリは ~/vertex_ai_test2/model-8435048588018450432/tf-saved-model/model ずしおいたす。 次に、Google Cloud が提䟛する、 Vertex AI のモデルを実行するためのモデルサヌバヌのコンテナむメヌゞを䜿甚しお、モデルをデプロむしたす。 先述のドキュメント通りにコマンドを実行した堎合、 asia-docker.pkg.dev/vertex-ai/automl-tabular/prediction-server-v1 からモデルサヌバヌの Docker むメヌゞを pull したすが、このむメヌゞを䜿甚しおデプロむした堎合、予枬リク゚ストに察しお゚ラヌが返り、リク゚ストを正垞に凊理するこずができたせんでした。 そこで、この Issue を参考に asia-docker.pkg.dev/vertex-ai/automl-tabular/prediction-server:20230123_0325_RC00 のむメヌゞを pull し、コンテナを実行したす。 ここでは、コンテナに serene_cerf ずいう名前を぀けおいたす。 $ docker run -dit --name serene_cerf \ -v `pwd`/model-8435048588018450432/tf-saved-model/model:/models/default \ -p 8080:8080 \ asia-docker.pkg.dev/vertex-ai/automl-tabular/prediction-server:20230123_0325_RC00 docker皌働状況 以䞋のコマンドを実行しお、1぀だけのテストデヌタを䜜成したす。 cd ~/vertex_ai_test2; sudo vim request.json 䜜成したデヌタをvertex_ai_test2フォルダ内に配眮したす。 vertex_ai_test2フォルダ内で以䞋のコマンドを実行し、予枬倀を確認したす。ロヌカルで動䜜する Docker コンテナに察しお掚論を実行させおいたす。 curl -X POST --data @request.json http://localhost:8080/predict {"predictions": [{"scores": [0.0018795928917825222, 0.9981204271316528], "classes": ["<=50K", ">50K"]}]} 無事、予枬倀が算出され 99.8%以䞊の確率で、幎収50K以䞊であるこず が確認できたした。 トレヌニングデヌタを倧幅に増やし掚論を実行 䞊蚘では、デヌタが1぀のみでしたがこれを曎に300行ず増加させお、予枬させおみたす。 前線 のトレヌニングデヌタで䜿甚した『pred_data.csv』を甚意したす。 pred_data.csv(テストデヌタ) 以䞋のpythonプログラム(AutoML_pred.py)にお、pred_data.csvを読み蟌たせ、予枬倀を算出しおみたす。 AutoML_pred.pyずpred_data.csvは同じ階局で実行。 import os import csv import subprocess, json import sys, traceback from loguru import logger # out_put for log logger.add( "./AutoML_pred_log/my_error.log" , rotation= "100MB" , retention= "1 year" ) # key_columns data_key = [ 'age' , 'workclass' , 'fnlwgt' , 'education' , 'education.num' , 'marital.status' , 'occupation' , 'relationship' , 'race' , 'sex' , 'capital.gain' , 'capital.loss' , 'hours.per.week' , 'native.country' ] #デヌタから予枬倀を出力し、埗られたデヌタをcsv圢匏で出力 def Data_Predict (): # predict data(data for csv_type) MyPath = 'pred_data.csv' # read pred_data.csv with open (MyPath, "r" , encoding= "utf-8" ) as f: reader = csv.reader(f) rows = [ dict ( zip (data_key, row)) for row in reader] try : # delete 1 row del rows[ 0 ] # all predictionaled data on making model out_put = list () for i in range ( len (rows)): # setting data for curl command curl_data = { "instances" : [rows[i]]} # curl command for request cmd = "cd ~/vertex_ai_test2;curl -H {} -X POST --data '{}' http://localhost:8080/predict" .format( '"content-type: application/json"' , json.dumps(curl_data)) # shell=True,setting string from standard output result = subprocess.run(cmd, shell= True , capture_output= True , text= True ).stdout my_data = json.loads(result) # dictionary data set mm = dict () # key of [income_<=50K_value] key1 = 'income_{}_value' .format(my_data[ "predictions" ][ 0 ][ "classes" ][ 0 ]) # value of [income_<=50K_value] val1 = my_data[ "predictions" ][ 0 ][ "scores" ][ 0 ] # key of [income_>50K_value] key2 = 'income_{}_value' .format(my_data[ "predictions" ][ 0 ][ "classes" ][ 1 ]) # value of [income_>50K_value] val2 = my_data[ "predictions" ][ 0 ][ "scores" ][ 1 ] mm[key1] = val1 mm[key2] = val2 # 予枬倀を蓄積 out_put.append(mm) except Exception as e: logger.warning( "exceptions2 : {} : {}" .format(e, traceback.format_exc())) # csv出力 with open ( 'out_put.csv' , 'w' , encoding= 'utf-8' , newline= "" ) as f: writer = csv.DictWriter(f, fieldnames=[key1,key2]) writer.writeheader() writer.writerows(out_put) if __name__ == '__main__' : Data_Predict() プログラム簡易説明: pred_data.csv(テストデヌタ)を䞀行ず぀読み蟌たせ、ロヌカルのDockerコンテナ内のモデルにcurlコマンドにおリク゚ストし、その結果をcsvに蚘茉しおいく。 (黄色の列が)予枬倀算出結果 䞊蚘のプログラムを掻甚するこずで、より倚くの予枬倀を算出するこずができたした。 たずめ 今回は、ロヌカルの Docker コンテナで機械孊習モデルを動䜜させ、非垞に安䟡に予枬倀を算出する方法をご玹介したした。 Google Cloud の Cloud Run や Vertex AI であれば、デヌタ量が倚くなればその分課金が発生したすが、今回の堎合手軜にそしお安䟡にモデルの予枬倀を取埗できたす。 G-gen 線集郚 (蚘事䞀芧) 株匏䌚瀟G-genは、サヌバヌワヌクスグルヌプずしお「クラりドで、䞖界を、もっず、はたらきやすく」をビゞョンに掲げ、クラりドの導入から最適化たでを支揎しおいる Google Cloud 専業のクラりドむンテグレヌタヌです。
「クラりドリフト」は自瀟で所有するシステムやデヌタなどをクラりドに移行するこずを指したす。リフトシフトずいう蚀葉も䞀般的になる䞭、この蚘事ではその前半であるクラりドリフトにフォヌカスしたす。クラりドリフトの基瀎知識やメリット、泚目される背景や方法論を玹介したすので、クラりド化掚進のヒントにしおください。 クラりドリフトずは クラりドリフトが掚進される理由 クラりドリフトの手順 クラりドリフトの泚意点 1. 䞀時的な察応にずどたる 2. 保守や運甚の業務は匕き続き存圚 3. 移行ができないケヌスもある たずめ クラりドリフトずは クラりドリフトずは、自瀟所有 (オンプレミス) の情報システムを、最小限の構成倉曎でクラりド (IaaS) ぞ移行するこずを意味したす。 クラりド移行の方法論が語られる際に「リフトシフト (Lift & Shift)」ずいう蚀葉が䜿われるこずがありたす。これは、たずは最小限の構成倉曎でシステムをたずクラりドぞ移行 (=リフト、雲の䞊ぞシステムをそのたた持ち䞊げるむメヌゞ) しおから、その埌にクラりドに適したアヌキテクチャにブラッシュアップしおいく (=シフト、暪滑りしおクラりドに最適化しおいくむメヌゞ) ずいう、段階を螏んでシステムをクラりド化しおいく方法論です。 クラりドリフトはリフトシフトにおける前半の段階を指しおおり、䌁業 IT のクラりド化の第䞀歩です。 クラりドリフトが掚進される理由 経枈産業省の「DXレポヌト」では、DX化が進たない日本の状況が2025幎ごろには経枈的損倱ずいった深刻な圢で顕圚化するずの予想があり、これは2025幎の厖問題ず呌ばれおいたす。 たた近幎では、歎史あるシステムの倚くがサポヌト終了を予定しおおり、この点からも、倚くの䌁業がクラりド化に乗り出しおいたす。 参考 DXレポヌト経枈産業省 たた総務省がたずめた「什和2幎版 情報通信癜曞」によるず、䌁業がクラりドを利甚しおいる理由ずしお最も倚いのは「資産、保守䜓制を瀟内に持぀必芁がないから45.9」です。 次いで、「堎所、機噚を遞ばずに利甚できるから43.3」、「安定運甚、可甚性が高くなるから36.8」ずいった理由が䞊んでいたす。 ※参考 什和2幎版 情報通信癜曞総務省 クラりドリフトの手順 クラりドリフトでは、オンプレミスの情報システム資産を IaaS ぞ移行したす。移行の手順などは、以䞋の蚘事でも玹介しおいたすのでご参照ください。 blog.g-gen.co.jp クラりドリフトの泚意点 1. 䞀時的な察応にずどたる クラりドリフトでは、自瀟で所有しおいたシステムなどを、構成や内容の倉曎なしにクラりド䞊に移行させたす。このため、これたで利甚しおいたシステムやアプリケヌションなどのサポヌトが終了したうリスクは残りたす。 クラりドリフトはあくたで、業務をクラりド化するための䞀時的な察応であるず考えるべきでしょう。 2. 保守や運甚の業務は匕き続き存圚 クラりドリフト前にはどのような保守・運甚業務が必芁になるのか可芖化するこずが必芁䞍可欠です。 クラりドリフトでは IaaS を利甚したす。物理機噚の保守・運甚は無くなる䞀方で、匕き続き仮想サヌバやミドルりェア、アプリケヌションの保守・運甚はナヌザ偎で行う必芁がありたす。 3. 移行ができないケヌスもある 業皮やシステム、補品によっおは、クラりド移行が適さないケヌスも存圚したす。たた、クラりド移行自䜓はできおも、移行に倧きなコストがかかったり、移行埌の運甚が非垞に難しくなったりするケヌスも懞念点です。無理にクラりドに移行しないこずや堎合によっおはシステム自䜓を廃棄する、ずいった遞択肢も柔軟に怜蚎したしょう。 特に゜フトりェアのラむセンスは、クラりド (IaaS) 䞊での利甚に制限がある堎合がありたす。代衚ずしお Microsoft や Oracle のラむセンスがありたす。必ずメヌカや代理店に確認したしょう。 たずめ DX化における最初のステップずしお、クラりドリフトを効果的に掻甚したしょう。クラりド移行の際は、G-genが運甚代行・䌎走をお手䌝いしたす。新芏・既存どちらのGoogle Cloud環境に぀いおも、お客様の環境に合ったハむブリッドクラりド・マルチクラりドを実珟したした。豊富な実瞟にもずづく技術サポヌトを安䟡な利甚環境ずセットで提䟛いたしたす。 お問い合わせはこちら G-gen 線集郚 (蚘事䞀芧) 株匏䌚瀟G-genは、サヌバヌワヌクスグルヌプずしお「クラりドで、䞖界を、もっず、はたらきやすく」をビゞョンに掲げ、2021幎よりクラりドの導入から最適化たでを支揎しおいるGoogle Cloud専業のクラりドむンテグレヌタヌです。
圓蚘事では、Terraform ず Ansible を組み合わせお、Google Cloud旧称 GCPのネットワヌクリ゜ヌスの䜜成をしたす。 サヌビスの抂芁 Terraform ずは Ansible ずは Terraform ず Ansible の違い 怜蚌の背景 前提 構成 むンスタンス情報 ディレクトリ構成 Playbook の解説 Terraform のむンストヌル Ansible のむンストヌル ADC の蚭定ず Terraform の初期化 構文チェック リ゜ヌスの䜜成 リ゜ヌスの削陀 サヌビスの抂芁 Terraform ずは Terraform は、 Infrastructure as Code (IaC) を実珟するオヌプン゜ヌスのツヌルです。䜿甚方法に぀いおは以䞋の蚘事をご参照ください。 blog.g-gen.co.jp Ansible ずは Ansible は、Red Hat 瀟が開発するオヌプン゜ヌスの構成管理ツヌルです。サヌバヌの蚭定や゜フトりェアのデプロむ、パッケヌゞのむンストヌル等のタスクを自動化できたす。たたサヌバヌだけでなく、Cisco や Juniper ずいったネットワヌク機噚の管理にも䜿うこずができたす。 代衚的な構成管理ツヌルには、Ansible の他に Puppet や Chef がありたすが、Ansible は管理察象の機噚ぞ゚ヌゞェントのむンストヌルが䞍芁です。䟋えば管理察象機噚が Linux の堎合、Ansible サヌバヌから SSH できる環境であれば実行可胜です。 Ansible では、゜フトりェアのむンストヌルや蚭定ずいった特定のアクションを タスク ずいい、YAML 圢匏で蚘述したす。タスクが曞かれたファむルを Playbook ず呌びたす。 埌述する ansible-playbook コマンドで Playbook を実行するこずで、蚘茉されたタスクが凊理されおいきたす。 Terraform ず Ansible の違い Terraform ず Ansible は共に構成管理ツヌルですが、埗意ずする領域が異なりたす。 Terraform はむンフラ局の構成管理を埗意ずするのに察し、Ansible は OS やミドルりェア局の構成管理を埗意ずしたす。 Red Hat 瀟が䞡者の違いに関する ドキュメント を公開しおいたすので、そちらもご参照ください。 怜蚌の背景 圓蚘事で䜜成するリ゜ヌスはネットワヌクリ゜ヌスのため、本来であれば Terraform のみで完結したす。 しかし、今埌 Ansible で゜フトりェアの蚭定ファむル管理に぀いおも怜蚌したいため、その前段ずしおネットワヌクリ゜ヌスのみを Terraform ず Ansible を組み合わせお䜜成しおみたした。 前提 構成 構成は以䞋の通りです。構成図内の ansible-server の䜜成は圓蚘事では觊れたせん。今回は VPC リ゜ヌスのみを䜜成したすが、Ansible の ダむナミックむンベントリ を機胜を䜿うこずで、Terraform で䜜成したむンスタンスの OS レむダ以䞊の゜フトりェアの蚭定等の管理をするこずもできたす。ダむナミックむンベントリを Google Cloud 環境で䜿うには、 google.cloud.gcp_compute inventory のプラグむンが必芁です。 構成図 むンスタンス情報 GCE むンスタンス ansible-server の OS 情報は以䞋の通りです。 fujioka@ansible-server:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.2 LTS Release: 22.04 Codename: jammy fujioka@ansible-server:~$ ディレクトリ構成 ディレクトリ構成は以䞋の通りです。 fujioka@ansible-server:~$ tree . └── ansible-playbook ├── apply.yml ├── destroy.yml └── terraform └── main.tf 2 directories, 3 files fujioka@ansible-server:~$ 各ファむルの䞭身は以䞋の通りです。 apply.ymlAnsible リ゜ヌス䜜成甚 Playbook - hosts: localhost tasks: - name: create and update resources by terraform community.general.terraform: project_path: 'terraform/' state: present destroy.ymlAnsible リ゜ヌス砎棄甚 Playbook - hosts: localhost connection: local gather_facts: no tasks: - name: destroy resources by terraform terraform: project_path: 'terraform/' state: absent main.tfTerraform ファむル ${PROJECT_ID} は自身のプロゞェクト ID に眮き換えたす # difine provider provider "google" { project = "${PROJECT_ID}" region = "asia-northeast1" zone = "asia-northeast1-a" } terraform { required_version = "~> 1.2" required_providers { google = ">= 4.32.0" } } # create vpc resource "google_compute_network" "vpc" { name = "vpc" auto_create_subnetworks = "false" routing_mode = "GLOBAL" } # create subnet resource "google_compute_subnetwork" "subnet" { name = "subnet" ip_cidr_range = "10.0.10.0/24" network = google_compute_network.vpc.name } Playbook の解説 圓蚘事では apply.yml ず destroy.yml の 2 ぀の Playbook を䜿甚したす。ここでは以䞋の Ansible リ゜ヌス䜜成甚 Playbook である apply.yml に぀いお簡単に解説したす。 # Ansible リ゜ヌス䜜成甚 Playbook - hosts: localhost tasks: - name: create and update resources by terraform community.general.terraform: project_path: 'terraform/' state: present hosts 察象のホスト Ansible サヌバヌ自身の terraform/ 配䞋にあるファむルを実行するため localhost ずしおいたす。 tasks hosts に蚘茉のホストが実行する凊理 name タスクの名前 ansible-playbook apply.yml で Playbook を実行するず TASK [create and update resources by terraform] のようにタスク名が衚瀺されたす。 community.general.terraform モゞュヌル名 Ansible で Terraform を実行するための モゞュヌル です。 project_path Terraform ディレクトリのルヌトのパス state タヌゲットの状態を定矩 present は Terraform で定矩されたリ゜ヌスを䜜成したす。 absent の堎合はリ゜ヌスを削陀したす。 community.general.terraform モゞュヌルでは デフォルト は present です。 参考 Playbook の抂芁 Terraform のむンストヌル ドキュメント に埓い、Terraform をむンストヌルしたす。 $ sudo apt-get update && sudo apt-get install -y gnupg software-properties-common $ wget -O- https://apt.releases.hashicorp.com/gpg | \ gpg --dearmor | \ sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg $ gpg --no-default-keyring \ --keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg \ --fingerprint $ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \ https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \ sudo tee /etc/apt/sources.list.d/hashicorp.list $ sudo apt update $ sudo apt-get install terraform むンストヌル埌のバヌゞョンは以䞋の通りです。 fujioka@ansible-server:~$ terraform --version Terraform v1.4.4 on linux_amd64 fujioka@ansible-server:~$ Ansible のむンストヌル ドキュメント に埓い、Ansible をむンストヌルしたす。 $ sudo apt update $ sudo apt install software-properties-common $ sudo add-apt-repository --yes --update ppa:ansible/ansible $ sudo apt install ansible むンストヌル埌のバヌゞョンは以䞋の通りです。 fujioka@ansible-server:~$ ansible --version ansible [core 2.14.4] config file = /etc/ansible/ansible.cfg configured module search path = ['/home/fujioka/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3/dist-packages/ansible ansible collection location = /home/fujioka/.ansible/collections:/usr/share/ansible/collections executable location = /usr/bin/ansible python version = 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0] (/usr/bin/python3) jinja version = 3.0.3 libyaml = True fujioka@ansible-server:~$ ADC の蚭定ず Terraform の初期化 Google Cloud 環境に察しお Terraform が実行できるよう、アプリケヌションのデフォルト認蚌情報ADCを蚭定したす。 fujioka@ansible-server:~/ansible-playbook$ gcloud auth application-default login You are running on a Google Compute Engine virtual machine. The service credentials associated with this virtual machine will automatically be used by Application Default Credentials, so it is not necessary to use this command. If you decide to proceed anyway, your user credentials may be visible to others with access to this virtual machine. Are you sure you want to authenticate with your personal account? Do you want to continue (Y/n)? Go to the following link in your browser: ~ Credentials saved to file: [/home/fujioka/.config/gcloud/application_default_credentials.json] These credentials will be used by any library that requests Application Default Credentials (ADC). ~ fujioka@ansible-server:~/ansible-playbook$ 参考 アプリケヌションのデフォルト認蚌情報を蚭定する / Terraform を䜿甚しお環境を䜜成する ~/ansible-playbook/terraform に移動をし、Terraform の初期化をしたす。 fujioka@ansible-server:~/ansible-playbook/terraform$ terraform init Initializing the backend... ~ Terraform has been successfully initialized! ~ fujioka@ansible-server:~/ansible-playbook/terraform$ 構文チェック ansible-playbook コマンドに --syntax-check を぀けるこずで Playbook の構文チェックができたす。 ~/ansible-playbook に移動をし、実行したす。 fujioka@ansible-server:~/ansible-playbook$ ansible-playbook apply.yml --syntax-check [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' playbook: apply.yml fujioka@ansible-server:~/ansible-playbook$ リ゜ヌスの䜜成 ansible-playbook apply.yml コマンドで Playbook を実行したす。 fujioka@ansible-server:~/ansible-playbook$ ansible-playbook apply.yml [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' PLAY [localhost] *************************************************************** TASK [Gathering Facts] ********************************************************* ok: [localhost] TASK [create and update resources by terraform] ******************************** changed: [localhost] PLAY RECAP ********************************************************************* localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 fujioka@ansible-server:~/ansible-playbook$ Terraform で蚘述したリ゜ヌスである、VPC ずサブネットが䜜成されおいたす。 䜜成リ゜ヌス terraform.tfstate にリ゜ヌスの状態が蚘茉されおいたす。䞀郚省略 / 䌏せ字 fujioka@ansible-server:~/ansible-playbook$ cat terraform/terraform.tfstate { "version": 4, "terraform_version": "1.4.4", "serial": 10, "lineage": "xxxx", "outputs": {}, "resources": [ { "mode": "managed", "type": "google_compute_network", "name": "vpc", "provider": "provider[\"registry.terraform.io/hashicorp/google\"]", ~ { "mode": "managed", "type": "google_compute_subnetwork", "name": "subnet", "provider": "provider[\"registry.terraform.io/hashicorp/google\"]", ~ fujioka@ansible-server:~/ansible-playbook$ リ゜ヌスの削陀 ansible-playbook destroy.yml コマンドで Playbook を実行したす。これで䜜成したリ゜ヌスが砎棄されたす。 fujioka@ansible-server:~/ansible-playbook$ ansible-playbook destroy.yml [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' PLAY [localhost] *************************************************************** TASK [destroy resources by terraform] ****************************************** changed: [localhost] PLAY RECAP ********************************************************************* localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 fujioka@ansible-server:~/ansible-playbook$ terraform.tfstate 䞊も曎新されおいたす。䞀郚䌏せ字 fujioka@ansible-server:~/ansible-playbook$ cat terraform/terraform.tfstate { "version": 4, "terraform_version": "1.4.4", "serial": 13, "lineage": "xxxx", "outputs": {}, "resources": [], "check_results": null } fujioka@ansible-server:~/ansible-playbook$ G-gen 線集郚 (蚘事䞀芧) 株匏䌚瀟G-genは、サヌバヌワヌクスグルヌプずしお「クラりドで、䞖界を、もっず、はたらきやすく」をビゞョンに掲げ、クラりドの導入から最適化たでを支揎しおいる Google Cloud 専業のクラりドむンテグレヌタヌです。
本蚘事では、Google Cloud のデヌタ分析系プロダクトのアップデヌトを取り䞊げ、倉曎点やその背景を考察し、プロダクトや機胜に぀いおの理解を深めたす。 新料金䜓系 BigQuery Editions BigQuery ML における掚論での Vision API 等の呌び出し機胜匷化 リリヌス抂芁 圓リリヌスのポむント CREATE TABLE AS SELECT 文による S3→BQ 移送時のデヌタフィルタリング機胜がプレビュヌ リリヌス抂芁 BigQuery Omni ずは BigLake ずは 圓リリヌスのポむント BigQuery のク゚リで再垰凊理が曞ける WITH RECURSIVE 句が GA リリヌス抂芁 再垰凊理ずは 圓リリヌスのポむント 倧文字ず小文字を区別しない照合のサポヌトを含む倚数の関数が GA リリヌス抂芁 照合順序ずは 圓リリヌスのポむント 新料金䜓系 BigQuery Editions BigQuery ナヌザであればおなじみであったオンデマンドプランスキャンしたデヌタ量に応じた課金モデル。コンピュヌトに盞圓するスロットは 2000 スロットたで䜿い攟題による埓量料金モデルから BigQuery Editions ず呌ばれる料金䜓系に䞻軞が倉わり、埓来の BigQuery Reservation (flat-rate) を眮き換えるこずになりたした。 BigQuery Editions は定額制ずいうわけではなく、新機胜である BigQuery Autoscaler 機胜により、費甚を柔軟化・最適化するこずができたす。 埓来のオンデマンドプランは残りたすが 単䟡が 25% 䞊がりたす。そのため、総じお「BigQuery がいきなり倀䞊げした」ず勘違いされそうですが、そうではありたせん。詳现に぀いおは匊瀟ブログで培底解説されおいたすので、そちらを参照ください。 blog.g-gen.co.jp 新料金プランの仕様を螏たえお適切な移行を行うこずで、ほずんどのケヌスで料金削枛が期埅できたす。逆に、倉曎内容を知らずに攟眮しおおくず、い぀の間にか倀䞊げされおいたずいうこずが起きたす。倉曎ポむントをしっかりず理解した䞊で、適切な察策を怜蚎・実斜するこずを匷く掚奚したす。 BigQuery ML における掚論での Vision API 等の呌び出し機胜匷化 リリヌス抂芁 BigQuery ML から Cloud Vision API、Cloud Natural Language API、Cloud Translation API の呌び出しが可胜になりたした。 参考 : Cloud AI service table-valued functions overview その他にも、ONNX、XGBoost、TensorFlow Lite 圢匏のモデルむンポヌトが可胜になりたした。埓来は TensorFlow のモデルだけでしたが、PyTorch や schikit-learn 等のメゞャヌなフレヌクワヌクのモデルもむンポヌトできるようになったため、より䜿い勝手が良くなったず蚀えたす。たた、Vertex AI にホストしたリモヌトモデルの呌び出しも可胜です。 圓リリヌスのポむント やはり、BigQuery の オブゞェクトテヌブル の存圚が倧きいです。 構造化デヌタだけでなく、非構造化デヌタに察しおも BigQuery のフルマネヌゞドのサヌバレス環境ず、コンピュヌティング胜力が掻甚できたす。単に掚論するだけでなく、もずもず入っおいる構造化デヌタず、非構造化デヌタの掚論結果を組み合わせお、機械孊習モデルを構築ずいったこずが可胜になりたす。 以䞋は画像デヌタに察する掚論結果から新たにテヌブルを䜜成する䟋です。 CREATE TABLE my_dataset.my_inference_results AS -- ③ BQ の別テヌブルに保存 SELECT uri, content_type, vision_feature FROM ML.PREDICT( -- ② 画像の特城量から掚論結果を取埗 MODEL my_dataset.vision_model, -- 任意のモデルを指定 SELECT ML.DECODE_IMAGE(data) AS vision_input -- ① 画像ファむルのパスから特城量生成 FROM my_dataset.object_table -- オブゞェクトテヌブルを指定 ); 「ML.DECODE_IMAGE(data)」関数を䜿っお、画像デヌタ GCS ぞのファむルパスを特城量「vision_input」に倉換 「ML.PREDICT」であらかじめ甚意した画像モデルに察しお特城量を入力しお、掚論を実行 掚論結果を別テヌブルに保存 デヌタの移動や耇雑なプログラミングをするこずなく、䞀瞬にしお異なるフォヌマットのデヌタを統合し、埌の分析に掻かせる点がポむントです。 CREATE TABLE AS SELECT 文による S3→BQ 移送時のデヌタフィルタリング機胜がプレビュヌ CREATE TABLE AS SELECT 文による Amazon S3 および Azure Blob Storage ファむルデヌタのフィルタリング結果曞き蟌み機胜がプレビュヌになりたした。 March 10, 2023  これによっお、より柔軟にマルチクラりド間のデヌタ移送を実珟できたす。 リリヌス抂芁 本リリヌスの抂芁は以䞋の通りです。 S3Blob Storage→ BigQuery ぞの転送前にデヌタを絞り蟌む機胜 S3 や Blob Storage を参照する BigLake テヌブルを䜜成する必芁がある クラりド間の転送に䌎う料金はかからない 泚意点は以䞋の通りです。 BigQuery Omni リヌゞョンのスロットが必芁になる BigQuery Omni の最倧ク゚リ結果サむズは非圧瞮で 20GiB。これを超えるず゚ラヌになる 5MB 未満の耇数ファむルのロヌドは非掚奚なるべく倧きなファむルを S3 や Blob Storage に眮く BigQuery Omni ずは BigQuery Omni は、Google Cloud、AWS、Azure などの耇数のクラりドプロバむダヌにたたがるデヌタを、BigQuery のむンタヌフェヌスで統䞀的に分析できるマルチクラりドデヌタりェアハりスです。これにより、デヌタを異なるクラりド間で移動させずにク゚リを実行でき、分析を効率化できたす。 詳现に぀いおは圓瀟ブログを参照しおください。 blog.g-gen.co.jp BigLake ずは BQ 管理のストレヌゞや GCS のファむル、S3 や Blob Storage ずいった別クラりドたで含めた異なるデヌタ゜ヌスを統合的に扱える抜象化レむダヌです。 BigLakeの抂芁 DataprocApache Spark や DataflowApache Beamずいった倖郚ツヌルを間に挟んで、BigQuery からデヌタ゜ヌスにアクセスするこずができたす。 たた、 BigLake メタデヌタ キャッシュ察応テヌブル を䜿うこずで、GCS のファむルぞのク゚リパフォヌマンスが向䞊したす。 圓リリヌスのポむント BigQuery Omni はわざわざファむルを移動するこずなく、BigQuery から盎接デヌタ゜ヌスにアクセスできるので、少ないコストで BigQuery のパワヌを利甚するこずができたす。 メむンのクラりドはAWSだが、BigQuery に関しおは䜿っおみたいずいうケヌスで有効です。 今回のアップデヌトによっお、䟋えば日次で増える S3 の Big Lake に察しお増加分だけ絞り蟌んで移送ずいったこずが可胜です。 必芁なデヌタだけ持っおこれるため、転送料やク゚リ料が削枛でき、デヌタパむプラむンも短くなりたす。 デヌタパむプラむンが長くなればなるほど、凊理の䟝存関係を定矩するこずや可甚性を担保するこずの難易床があがるため、今回のアップデヌトはそういった問題を緩和するこずに繋がるでしょう。 BigQuery のク゚リで再垰凊理が曞ける WITH RECURSIVE 句が GA リリヌス抂芁 BigQuery のク゚リで再垰凊理が曞ける機胜が GA になりたした。 参考 : BigQuery release notes 参考 : WITH clause 再垰凊理ずは 再垰凊理ずは、ある凊理が自分自身を繰り返し呌び出すこずで、階局的なデヌタ構造や繰り返しのパタヌンを効率的に凊理するプログラミング手法です。デヌタベヌスのク゚リにおいおは、階局的なデヌタやグラフ構造を扱う際に再垰凊理が甚いられたす。 圓リリヌスのポむント WITH RECURSIVE 句が GA になるこずで、BigQuery ナヌザヌは階局的なデヌタ構造やグラフデヌタを効率的に凊理できるようになりたす。たた、再垰凊理を利甚するこずで、埓来は耇数のク゚リや倖郚プログラムを甚いお実珟しおいた凊理を、1぀のク゚リで完結させるこずが可胜になりたす。これにより、デヌタ凊理の効率化やパフォヌマンス向䞊が期埅できたす。ただし、再垰凊理を適切に蚭蚈・実装しないず、ク゚リ料金が倧幅に増加したり、無限ルヌプに陥る可胜性があるため、泚意が必芁です。 倧文字ず小文字を区別しない照合のサポヌトを含む倚数の関数が GA リリヌス抂芁 倧文字ず小文字を区別しない照合のサポヌトを含む倚数の関数が GA になりたした。 参考 : BigQuery release notes 照合の詳现な仕様に぀いおは こちら を参照しおください。 以䞋の機胜に察しお有効です。 MIN、MAX、COUNT with DISTINCT、PERCENTILE_DISC によるりィンドり関数 WINDOWS 句内の ORDER BY および PARTITION BY 制限付きの LIKE 挔算子 ビュヌ 制限付きのマテリアラむズドビュヌ 制限付きのテヌブル関数 BigQuery BI ゚ンゞン 照合順序ずは 照合順序ずは、文字列デヌタの比范や゜ヌトを行う際に䜿甚される、文字の倧小関係や等䟡性を決定するルヌルです。照合順序には、倧文字ず小文字を区別するものず、区別しないものがありたす。 照合順序を明瀺的に指定しない堎合、デフォルトの挙動は以䞋のようになりたす。 SELECT * FROM UNNEST([ ' B ' , ' b ' , ' a ' , ' A ' , ' C ' , ' c ' ]) AS character ORDER BY character デフォルトの゜ヌト順倧文字小文字が区別される。先に倧文字、次に少文字 半角倧文字のあずに半角小文字が䞊びたす。 次に、照合順序を明瀺的に指定した堎合の順序です。 SELECT * FROM UNNEST([ ' B ' , COLLATE( ' b ' , ' und:ci ' ), ' a ' , ' A ' , ' C ' , ' c ' ]) AS character ORDER BY character 照合順序を明瀺的に指定した堎合の゜ヌト順倧文字少文字が混圚 倧文字ず少文字を区別しないため、䞡者は等䟡だず芋なされ、アルファベット順で䞊んだあずは、もずもずの配列のむンデックス順で゜ヌトされおいたす。 照合がサポヌトされおいるデヌタ型は以䞋の通りです。 通垞の STRING 型 STRUCT構造䜓 内の STRING 項目 ARRAY配列 内の STRING 芁玠 照合は、デヌタセットやテヌブル、列単䜍で定矩できたす。 -- デヌタセットレベルでの定矩 CREATE SCHEMA (...) DEFAULT COLLATE ' und:ci ' -- テヌブルレベルでの定矩 CREATE TABLE (...) DEFAULT COLLATE ' und:ci ' -- 列レベルでの定矩 CREATE TABLE ( case_insensitive_column STRING COLLATE ' und:ci ' ) 圓リリヌスのポむント 今回のリリヌスによっお、BigQuery ナヌザヌは文字列デヌタの比范や゜ヌトを、倧文字ず小文字の違いを気にせずに行えるようになりたす。これたで独自の関数や前凊理を入れお凊理しおいたこずが BigQuery の暙準機胜だけで実珟できたす。 G-gen 線集郚 (蚘事䞀芧) 株匏䌚瀟G-genは、サヌバヌワヌクスグルヌプずしお「クラりドで、䞖界を、もっず、はたらきやすく」をビゞョンに掲げ、クラりドの導入から最適化たでを支揎しおいる Google Cloud 専業のクラりドむンテグレヌタヌです。
圓蚘事は みずほリサヌチ&テクノロゞヌズ × G-gen ゚ンゞニアコラボレヌション䌁画 で執筆されたものです。 組織内アクセス制限は、承認された Google Cloud 組織ぞのみアクセスを蚱可する Resource Manager の機胜の 1 ぀です。圓蚘事では組織内アクセス制限機胜の解説ず、怜蚌を行いたす。 抂芁 組織内アクセス制限 ずは 䜿甚時の考慮点 サポヌト察象のサヌビス Google 所有のリ゜ヌスぞのアクセス Cloud Shell の䜿甚 䞋り倖向きプロキシの構成 類䌌機胜 怜蚌の準備 アヌキテクチャ 前提条件 Squid ず SSL Bump SSL Bump による SSL/TLS 埩号 泚意点 怜蚌環境の構築 事前準備 Squid のむンストヌル 自己眲名 SSL 蚌明曞の䜜成 蚌明曞を Windows の信頌されたルヌト蚌明曞機関にむンポヌト SSL Bump の蚭定 クラむアントの蚭定 怜蚌 補足 抂芁 組織内アクセス制限 ずは 組織内アクセス制限 (Organization restrictions) は、ナヌザヌがアクセスできる Google Cloud 組織を制限する機胜です。この機胜を䜿うこずで、フィッシングやむンサむダヌ攻撃などにより、組織内からデヌタが匕き出され、別の Google Cloud 組織に持ち出されおしたうこず等を防ぐこずが出来たす。 圓機胜を䜿うには、組織内ネットワヌクの HTTP プロキシでナヌザヌのリク゚ストに X-Goog-Allowed-Resources ずいう HTTP ヘッダを远加し、ヘッダの倀ずしおアクセスを蚱可する Google Cloud 組織の ID を蚭定したす。 Google Cloud API ぞのリク゚ストにこのヘッダが存圚するず ヘッダの倀で蚱可されおいない組織ぞのアクセスは拒吊 されたす。 ぀たり、圓機胜を䜿甚するには、組織 (䌚瀟や官公庁) で HTTP プロキシを䜿っおおり、それ以倖にむンタヌネットぞの抜け道が無いこずが前提ずなりたす。 画像は 公匏 より匕甚 䜿甚時の考慮点 組織内アクセス制限を䜿甚する際の考慮点を 4 点玹介したす。蚘茉の項目以倖にも、既存環境を考慮した䞊で導入する必芁がありたす。 サポヌト察象のサヌビス サポヌトされおいるサヌビスは ドキュメント にある通りです。 組織内アクセス制限は、Google Cloud コン゜ヌルから発信されるこのサヌビスぞのリク゚ストでのみ郚分的にサポヌトされおいたす。 ず蚘茉のあるサヌビスもありたす。 ほずんどの Google Cloud サヌビスが察象になっおはいたすが、念の為自分の環境で䜿われおいる Google Cloud サヌビスが察象ずなっおいるか、確認したしょう。 Google 所有のリ゜ヌスぞのアクセス BigQuery や Compute Engine以䞋 GCE等で䜿う Google の公開リ゜ヌスは、Google 所有の Google Cloud 組織でホストされおいたす。それらを䜿甚する堎合には、組織 ID の 433637338589 を組織内アクセス制限ヘッダに远加したす。 Google 所有の Google Cloud 組織組織 ID 433637338589 を远加しないでコン゜ヌルから GCE の [むンスタンスを䜜成] をクリックするず以䞋の゚ラヌずなりたした。 これは GCE の公開 OS むメヌゞが、前述の Google Cloud 組織で管理されおいるためです。 Access denied by organization restriction. Please contact your administrator for additional information on this feature. 組織内アクセス制限゚ラヌ 参考 Google 所有のリ゜ヌスぞのアクセスを有効にする Cloud Shell の䜿甚 Cloud Shell の実態は Google Cloud が所有する GCE むンスタンス䞊の Docker コンテナです。そのため Cloud Shell から gcloud コマンド等を利甚するず、その API コヌルは組織ネットワヌクの HTTP プロキシを通りたせん。぀たり組織内アクセス制限機胜によるヘッダは付䞎されず、制限は発生したせん。 以䞊を螏たえ、圓機胜を甚いお Google Cloud 組織ぞのアクセスを制埡したい堎合、 Cloud Shell の無効化 が必須 ずなりたす。Cloud Shell は Google Workspace / Cloud Identity の管理画面から無効にするこずができたす。 䞊蚘の挙動を簡単に怜蚌しおみたす。 組織内アクセス制限適甚時の Cloud Shell の䜿甚 図にあるようにナヌザヌ A が組織 A ず B を䜿甚できる暩限がある堎合でも、Web コン゜ヌルからは組織 A のみが衚瀺され、組織 B ぞの操䜜ができたせん。しかし Cloud Shell 経由で操䜜するず、Google Cloud API ぞの API コヌルは瀟内のプロキシサヌバを経由しないため、ヘッダが远加されず、制限がかかりたせん。 Cloud Shell から組織の䞀芧衚瀺 gcloud organizations list をするず組織 B も衚瀺がされ、暩限に埓っおリ゜ヌスの䜜成も可胜 です。 参考 Cloud Shell の仕組み 䞋り倖向きプロキシの構成 組織内アクセス制限を䜿甚するにあたり、ヘッダの付䞎を Google Cloud 以倖のタヌゲットに远加しないようにするこずも可胜です。タヌゲットに入れるべきドメむンは ドキュメント にある通りです。 入れるべきタヌゲットには *.google.com も含たれおおり、これは組織内アクセス制限を䜿うためには䞀般の Google 怜玢のリク゚ストぞもヘッダの付䞎が必芁であるこずを意味し、プロキシの凊理量にも圱響があるため、利甚時には怜蚎が必芁です。 類䌌機胜 圓蚘事で玹介する組織内アクセス制限は、Google Cloud 組織の ID を䜿甚し、利甚できる Google Cloud の組織を制限したすが、類䌌機胜ずしおナヌザヌアカりントを䜿甚しお Google サヌビスの利甚を制限する機胜もありたす。この機胜を䜿うこずで、特定のドメむンから組織の Google サヌビスの利甚を蚱可し、䞀般ナヌザヌ向けのアカりント䟋 〜@gmail.com や別ドメむンからの利甚を防ぐこずができたす。 詳现は ドキュメント をご参照ください。 怜蚌の準備 アヌキテクチャ 圓蚘事で構築する構成は以䞋の通りです。 Amazon Web Services (AWS) 環境を䌚瀟や官公庁の組織ネットワヌクに芋立おたす。Amazon EC2 で HTTP プロキシに芋立おた Squid サヌバヌを構築したす。 Squid で組織内アクセス制限ヘッダを付䞎するこずで、クラむアントからの操䜜を 組織 A のみに制限 したす。 構成図 前提条件 むンスタンス情報は以䞋の通りです。AWS の VPC や EC2、セキュリティグルヌプの蚭定は圓蚘事では觊れたせん。 むンスタンス名 OS プラむベヌト IP アドレス パブリック IP アドレス windows-client Windows10 - xxx.xxx.xxx.6 proxy-server Amazon Linux 2 172.31.15.234 xxx.xxx.xxx.66 windows-client 情報 # proxy-server 情報 [ec2-user@ip-172-31-15-234 ~]$ cat /etc/os-release NAME="Amazon Linux" VERSION="2" ID="amzn" ID_LIKE="centos rhel fedora" VERSION_ID="2" PRETTY_NAME="Amazon Linux 2" ANSI_COLOR="0;33" CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2" HOME_URL="https://amazonlinux.com/" [ec2-user@ip-172-31-15-234 ~]$ Squid ず SSL Bump SSL Bump による SSL/TLS 埩号 圓蚘事では AWS 環境に構築した EC2 むンスタンスに Squid ず SSL Bump をセットアップし、瀟内 HTTP プロキシサヌバずしお芋立おお怜蚌を行いたす。 SSL Bump は、HTTPS 通信をクラむアントず Squid で終端したす。Squid で埩号し、再床暗号化するこずで、通垞時はリク゚スト先の URL はドメむンたでしか確認できない HTTPS 通信の䞭身を芋るこずができたす。これは、MITM 攻撃Man-In-The-Middle䞭間者攻撃ず同じ手法です。 SSL Bump を䜿うこずでリク゚ストに HTTP ヘッダを远加できたす。蚭定ファむルsquid.confの request_header_add で远加するヘッダが構成されたすが、ヘッダを Google Cloud 以倖のタヌゲットに远加しないようにするこずもできたす。そのためには、 ドキュメント に蚘茉のリク゚ストにのみヘッダを远加するよう構成したす。 泚意点 Squid で SSL Bump を䜿うには、 configure options パラメヌタの倀に --with-openssl ず --enable-ssl-crtd のオプションが必芁です。 ディストリビュヌションによっお、 むンストヌルされるデフォルトオプションが異なる ため、必芁なオプションがない堎合には゜ヌスからビルドしなければなりたせん。 䟋ずしお、GCE の OS を CentOS ず Debian のそれぞれで Squid をむンストヌルした時のパラメヌタ倀を比べたす。 # CentOS の堎合 [fujioka@centos ~]$ cat /etc/os-release NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7" [fujioka@centos ~]$ [fujioka@centos ~]$ sudo yum install squid ... [fujioka@centos ~]$ [fujioka@centos ~]$ squid -v Squid Cache: Version 3.5.20 Service Name: squid configure options: '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--disable-strict-error-checking' '--exec_prefix=/usr' '--libexecdir=/usr/lib64/squid' '--localstatedir=/var' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--with-logdir=$(localstatedir)/log/squid' '--with-pidfile=$(localstatedir)/run/squid.pid' '--disable-dependency-tracking' '--enable-eui' '--enable-follow-x-forwarded-for' '--enable-auth' '--enable-auth-basic=DB,LDAP,MSNT-multi-domain,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB,SMB_LM,getpwnam' '--enable-auth-ntlm=smb_lm,fake' '--enable-auth-digest=file,LDAP,eDirectory' '--enable-auth-negotiate=kerberos' '--enable-external-acl-helpers=file_userip,LDAP_group,time_quota,session,unix_group,wbinfo_group,kerberos_ldap_group' '--enable-cache-digests' '--enable-cachemgr-hostname=localhost' '--enable-delay-pools' '--enable-epoll' '--enable-ident-lookups' '--enable-linux-netfilter' '--enable-removal-policies=heap,lru' '--enable-snmp' '--enable-ssl-crtd' '--enable-storeio=aufs,diskd,rock,ufs' '--enable-wccpv2' '--enable-esi' '--enable-ecap' '--with-aio' '--with-default-user=squid' '--with-dl' '--with-openssl' '--with-pthreads' '--disable-arch-native' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fpie' 'LDFLAGS=-Wl,-z,relro -pie -Wl,-z,relro -Wl,-z,now' 'CXXFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fpie' 'PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig' [fujioka@centos ~]$ # Debian の堎合 fujioka@debian:~$ cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 11 (bullseye)" NAME="Debian GNU/Linux" VERSION_ID="11" VERSION="11 (bullseye)" VERSION_CODENAME=bullseye ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/" fujioka@debian:~$ fujioka@debian:~$ sudo apt install squid ... fujioka@debian:~$ fujioka@debian:~$ sudo squid -v Squid Cache: Version 4.13 Service Name: squid Debian linux configure options: '--build=x86_64-linux-gnu' '--prefix=/usr' '--includedir=${prefix}/include' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--sysconfdir=/etc' '--localstatedir=/var' '--disable-option-checking' '--disable-silent-rules' '--libdir=${prefix}/lib/x86_64-linux-gnu' '--runstatedir=/run' '--disable-maintainer-mode' '--disable-dependency-tracking' 'BUILDCXXFLAGS=-g -O2 -ffile-prefix-map=/build/squid-Nhk3MN/squid-4.13=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-z,relro -Wl,-z,now ' 'BUILDCXX=g++' '--with-build-environment=default' '--enable-build-info=Debian linux' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--libexecdir=/usr/lib/squid' '--mandir=/usr/share/man' '--enable-inline' '--disable-arch-native' '--enable-async-io=8' '--enable-storeio=ufs,aufs,diskd,rock' '--enable-removal-policies=lru,heap' '--enable-delay-pools' '--enable-cache-digests' '--enable-icap-client' '--enable-follow-x-forwarded-for' '--enable-auth-basic=DB,fake,getpwnam,LDAP,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB' '--enable-auth-digest=file,LDAP' '--enable-auth-negotiate=kerberos,wrapper' '--enable-auth-ntlm=fake,SMB_LM' '--enable-external-acl-helpers=file_userip,kerberos_ldap_group,LDAP_group,session,SQL_session,time_quota,unix_group,wbinfo_group' '--enable-security-cert-validators=fake' '--enable-storeid-rewrite-helpers=file' '--enable-url-rewrite-helpers=fake' '--enable-eui' '--enable-esi' '--enable-icmp' '--enable-zph-qos' '--enable-ecap' '--disable-translation' '--with-swapdir=/var/spool/squid' '--with-logdir=/var/log/squid' '--with-pidfile=/run/squid.pid' '--with-filedescriptors=65536' '--with-large-files' '--with-default-user=proxy' '--enable-linux-netfilter' '--with-systemd' '--with-gnutls' 'build_alias=x86_64-linux-gnu' 'CFLAGS=-g -O2 -ffile-prefix-map=/build/squid-Nhk3MN/squid-4.13=. -fstack-protector-strong -Wformat -Werror=format-security -Wall' 'LDFLAGS=-Wl,-z,relro -Wl,-z,now ' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2' 'CXXFLAGS=-g -O2 -ffile-prefix-map=/build/squid-Nhk3MN/squid-4.13=. -fstack-protector-strong -Wformat -Werror=format-security' fujioka@debian:~$ 比范するず、 --with-openssl ず --enable-ssl-crtd のオプションが CentOS ではデフォルトで入っおいるこずがわかりたす。圓蚘事で構築する Amazon Linux 2 の EC2 ではデフォルトで必芁なオプションが入っおいたす。 怜蚌環境の構築 事前準備 ドキュメント に埓っおヘッダを䜜成したす。 前述の Google 所有のリ゜ヌスぞのアクセス にある通り、Google の組織 ID 433637338589 も远加したす。ヘッダの䜜成は Cloud Shell から実行したした。 # 䜜成されたヘッダ fujioka@cloudshell:~ (xxxx)$ cat authorized_orgs.json { "resources": ["organizations/<組織 A の ID>", "organizations/433637338589"], "options": "strict" } fujioka@cloudshell:~ (xxxx)$ 次に、䜜成したヘッダを base64 ゚ンコヌドしたす。゚ンコヌド結果は、埌述の SSL Bump の蚭定 で䜿甚したす。 # ゚ンコヌド fujioka@cloudshell:~ (xxxx)$ cat authorized_orgs.json | basenc --base64url -w0 ewxxxxxxxxxxxxx fujioka@cloudshell:~ (xxxx)$ Squid のむンストヌル proxy-server むンスタンスに Squid をむンストヌルしたす。むンストヌルされたバヌゞョンは 3.5.20 です。 # パッケヌゞのアップデヌト [ec2-user@ip-172-31-15-234 ~]$ sudo -i [root@ip-172-31-15-234 ~]# [root@ip-172-31-15-234 ~]# yum update [root@ip-172-31-15-234 ~]# # むンストヌル [root@ip-172-31-15-234 ~]# yum install squid [root@ip-172-31-15-234 ~]# # バヌゞョン確認 [root@ip-172-31-15-234 ~]# squid -v Squid Cache: Version 3.5.20 Service Name: squid configure options: '--build=x86_64-koji-linux-gnu' '--host=x86_64-koji-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--disable-strict-error-checking' '--exec_prefix=/usr' '--libexecdir=/usr/lib64/squid' '--localstatedir=/var' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--with-logdir=$(localstatedir)/log/squid' '--with-pidfile=$(localstatedir)/run/squid.pid' '--disable-dependency-tracking' '--enable-eui' '--enable-follow-x-forwarded-for' '--enable-auth' '--enable-auth-basic=DB,LDAP,MSNT-multi-domain,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB,SMB_LM,getpwnam' '--enable-auth-ntlm=smb_lm,fake' '--enable-auth-digest=file,LDAP,eDirectory' '--enable-auth-negotiate=kerberos' '--enable-external-acl-helpers=file_userip,LDAP_group,time_quota,session,unix_group,wbinfo_group,kerberos_ldap_group' '--enable-cache-digests' '--enable-cachemgr-hostname=localhost' '--enable-delay-pools' '--enable-epoll' '--enable-ident-lookups' '--enable-linux-netfilter' '--enable-removal-policies=heap,lru' '--enable-snmp' '--enable-ssl-crtd' '--enable-storeio=aufs,diskd,rock,ufs' '--enable-wccpv2' '--enable-esi' '--enable-ecap' '--with-aio' '--with-default-user=squid' '--with-dl' '--with-openssl' '--with-pthreads' '--disable-arch-native' 'build_alias=x86_64-koji-linux-gnu' 'host_alias=x86_64-koji-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fpie' 'LDFLAGS=-Wl,-z,relro -pie -Wl,-z,relro -Wl,-z,now' 'CXXFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fpie' 'PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig' [root@ip-172-31-15-234 ~]# # 起動 [root@ip-172-31-15-234 ~]# systemctl start squid [root@ip-172-31-15-234 ~]# [root@ip-172-31-15-234 ~]# systemctl status squid ● squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled; vendor preset: disabled) Active: active (running) since Sun 2023-03-19 00:42:48 UTC; 5s ago ... [root@ip-172-31-15-234 ~]# # 自動起動蚭定 [root@ip-172-31-15-234 ~]# systemctl enable squid Created symlink from /etc/systemd/system/multi-user.target.wants/squid.service to /usr/lib/systemd/system/squid.service. [root@ip-172-31-15-234 ~]# [root@ip-172-31-15-234 ~]# systemctl is-enabled squid enabled [root@ip-172-31-15-234 ~]# 自己眲名 SSL 蚌明曞の䜜成 proxy-server むンスタンスで自己眲名 SSL 蚌明曞を䜜成したす。 # Squid ディレクトリぞ移動 [root@ip-172-31-15-234 ~]# cd /etc/squid/ [root@ip-172-31-15-234 squid]# # 自己眲名 SSL 蚌明曞を䜜成蚌明曞の有効期間は 30 日で蚭定 [root@ip-172-31-15-234 squid]# openssl req -new -newkey rsa:2048 -days 30 -nodes -x509 -keyout bump.key -out bump.crt ... ----- Country Name (2 letter code) [XX]:JP State or Province Name (full name) []: Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:SQUID Email Address []: [root@ip-172-31-15-234 squid]# # 蚌明曞ファむルbump.crtず秘密鍵ファむルbump.keyが䜜成される [root@ip-172-31-15-234 squid]# ls -l total 56 -rw-r--r-- 1 root root 1261 Mar 19 00:47 bump.crt -rw-r--r-- 1 root root 1704 Mar 19 00:47 bump.key ... [root@ip-172-31-15-234 squid]# # 蚌明曞をクラむアントにむンポヌトできるように DER 圢匏に倉換 [root@ip-172-31-15-234 squid]# openssl x509 -in bump.crt -outform DER -out bump.der [root@ip-172-31-15-234 squid]# # bump.der が䜜成される [root@ip-172-31-15-234 squid]# ls -l total 60 -rw-r--r-- 1 root root 1261 Mar 19 00:47 bump.crt -rw-r--r-- 1 root root 891 Mar 19 00:51 bump.der -rw-r--r-- 1 root root 1704 Mar 19 00:47 bump.key ... [root@ip-172-31-15-234 squid]# 蚌明曞を Windows の信頌されたルヌト蚌明曞機関にむンポヌト proxy-server で䜜成した bump.der を windows-client に scp コマンド等で転送し、任意の堎所に眮きたす。 windows-client の゚クスプロヌラヌ windows-client で蚌明曞をむンポヌトしたす。 [蚌明曞 - ロヌカルコンピュヌタヌ] > [信頌されたルヌト蚌明機関] を右クリックし、 [すべおのタスク] > [むンポヌト] をクリックしたす。 蚌明曞のむンポヌト① りィザヌドに埓っお蚭定をし、[完了] をクリックしたす。 蚌明曞のむンポヌト② むンポヌトが成功するず、 正しくむンポヌトされたした。 ず衚瀺され、proxy-server で䜜成した自己眲名SSL 蚌明曞が衚瀺されたす。 蚌明曞のむンポヌト③ SSL Bump の蚭定 proxy-server で SSL Bump の蚭定をしたす。 # Diffie-Hellman アルゎリズムの蚭定ファむルを生成 [root@ip-172-31-15-234 squid]# openssl dhparam -outform PEM -out /etc/squid/bump_dhparam.pem 2048 [root@ip-172-31-15-234 squid]# # bump_dhparam.pem が䜜成される [root@ip-172-31-15-234 squid]# ls -l total 64 -rw-r--r-- 1 root root 1261 Mar 19 00:47 bump.crt -rw-r--r-- 1 root root 891 Mar 19 00:51 bump.der -rw-r--r-- 1 root root 424 Mar 19 01:00 bump_dhparam.pem -rw-r--r-- 1 root root 1704 Mar 19 00:47 bump.key ... [root@ip-172-31-15-234 squid]# # ファむルのパヌミッション蚭定 [root@ip-172-31-15-234 squid]# chown squid:squid /etc/squid/bump* [root@ip-172-31-15-234 squid]# [root@ip-172-31-15-234 squid]# chmod 400 /etc/squid/bump* [root@ip-172-31-15-234 squid]# [root@ip-172-31-15-234 squid]# ls -l total 64 -r-------- 1 squid squid 1261 Mar 19 00:47 bump.crt -r-------- 1 squid squid 891 Mar 19 00:51 bump.der -r-------- 1 squid squid 424 Mar 19 01:00 bump_dhparam.pem -r-------- 1 squid squid 1704 Mar 19 00:47 bump.key ... [root@ip-172-31-15-234 squid]# # サヌビス停止 [root@ip-172-31-15-234 squid]# systemctl stop squid [root@ip-172-31-15-234 squid]# systemctl status squid ● squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled) Active: inactive (dead) since Sun 2023-03-19 01:14:22 UTC; 10s ago ... [root@ip-172-31-15-234 squid]# # 蚌明曞デヌタベヌス甚ディレクトリの䜜成ず初期化 [root@ip-172-31-15-234 squid]# mkdir /var/lib/squid [root@ip-172-31-15-234 squid]# [root@ip-172-31-15-234 squid]# /usr/lib64/squid/ssl_crtd -c -s /var/lib/squid/ssl_db Initialization SSL db... Done [root@ip-172-31-15-234 squid]# Squid の蚭定ファむルsquid.confを SSL Bump 甚に倉曎したす。怜蚌甚のため、Basic 認蚌等の蚭定はしおいない簡易的な蚭定です。 # 差分squid.conf.default には倉曎前の内容が蚘茉されおいるため差分で衚瀺 [root@ip-172-31-15-234 squid]# diff -u -B squid.conf.default squid.conf --- squid.conf.default 2023-02-13 20:53:51.000000000 +0000 +++ squid.conf 2023-03-31 04:48:08.831966864 +0000 @@ -11,7 +11,7 @@ acl localnet src fc00::/7 # RFC 4193 local private network range acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines -acl SSL_ports port 443 +acl SSL_ports port 443 3128 # 3128 ポヌト远加 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https @@ -24,6 +24,8 @@ acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT +acl client src xxx.xxx.xxx.6/32 # windows-client +http_access allow client # 蚱可 # # Recommended minimum Access Permission configuration: # @@ -56,7 +58,12 @@ http_access deny all # Squid normally listens to port 3128 -http_port 3128 +# http_port 3128 # コメントアりト +# 以䞋1行远加 +http_port 3128 tcpkeepalive=60,30,3 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=20MB cert=/etc/squid/bump.crt key=/etc/squid/bump.key cipher=HIGH:MEDIUM:!LOW:!RC4:!SEED:!IDEA:!3DES:!MD5:!EXP:!PSK:!DSS options=NO_TLSv1,NO_SSLv3,NO_SSLv2,SINGLE_DH_USE,SINGLE_ECDH_USE tls-dh=prime256v1:/etc/squid/bump_dhparam.pem + +# 以䞋1行远加組織 A ず Google Cloud 所有組織 のみに制限 +request_header_add X-Goog-Allowed-Resources ewxxxxxxxxxxxxx all # Uncomment and adjust the following to add a disk cache directory. #cache_dir ufs /var/spool/squid 100 16 256 @@ -71,3 +78,8 @@ refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320 + +# 以䞋3行远加 +sslcrtd_program /usr/lib64/squid/ssl_crtd -s /var/lib/squid/ssl_db -M 20MB +sslproxy_cert_error allow all +ssl_bump stare all [root@ip-172-31-15-234 squid]# # 倉曎埌の squid.conf å…šæ–‡ [root@ip-172-31-15-234 squid]# cat squid.conf # # Recommended minimum configuration: # # Example rule allowing access from your local networks. # Adapt to list your (internal) IP networks from where browsing # should be allowed acl localnet src 10.0.0.0/8 # RFC1918 possible internal network acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/16 # RFC1918 possible internal network acl localnet src fc00::/7 # RFC 4193 local private network range acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines acl SSL_ports port 443 3128 # 3128 ポヌト远加 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT acl client src xxx.xxx.xxx.6/32 # windows-client http_access allow client # 蚱可 # # Recommended minimum Access Permission configuration: # # Deny requests to certain unsafe ports http_access deny !Safe_ports # Deny CONNECT to other than secure SSL ports http_access deny CONNECT !SSL_ports # Only allow cachemgr access from localhost http_access allow localhost manager http_access deny manager # We strongly recommend the following be uncommented to protect innocent # web applications running on the proxy server who think the only # one who can access services on "localhost" is a local user #http_access deny to_localhost # # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # # Example rule allowing access from your local networks. # Adapt localnet in the ACL section to list your (internal) IP networks # from where browsing should be allowed http_access allow localnet http_access allow localhost # And finally deny all other access to this proxy http_access deny all # Squid normally listens to port 3128 # http_port 3128 # コメントアりト # 以䞋1行远加 http_port 3128 tcpkeepalive=60,30,3 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=20MB cert=/etc/squid/bump.crt key=/etc/squid/bump.key cipher=HIGH:MEDIUM:!LOW:!RC4:!SEED:!IDEA:!3DES:!MD5:!EXP:!PSK:!DSS options=NO_TLSv1,NO_SSLv3,NO_SSLv2,SINGLE_DH_USE,SINGLE_ECDH_USE tls-dh=prime256v1:/etc/squid/bump_dhparam.pem # 以䞋1行远加組織 A ず Google Cloud 所有組織 のみに制限 request_header_add X-Goog-Allowed-Resources ewxxxxxxxxxxxxx all # Uncomment and adjust the following to add a disk cache directory. #cache_dir ufs /var/spool/squid 100 16 256 # Leave coredumps in the first cache dir coredump_dir /var/spool/squid # # Add any of your own refresh_pattern entries above these. # refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320 # 以䞋3行远加 sslcrtd_program /usr/lib64/squid/ssl_crtd -s /var/lib/squid/ssl_db -M 20MB sslproxy_cert_error allow all ssl_bump stare all [root@ip-172-31-15-234 squid]# 蚭定を適甚したす。 # 再起動 [root@ip-172-31-15-234 squid]# systemctl restart squid [root@ip-172-31-15-234 squid]# [root@ip-172-31-15-234 squid]# systemctl status squid ● squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2023-03-19 02:17:42 UTC; 5s ago ... [root@ip-172-31-15-234 squid]# クラむアントの蚭定 windows-client でプロキシの蚭定をしたす。 アドレス には proxy-client の IP アドレスを、 ポヌト は 3128 を蚭定したす。 クラむアントのプロキシ蚭定 怜蚌 windows-client から Google Cloud コン゜ヌルを衚瀺させたす。 ブラりザは Google Chromeバヌゞョン: 111.0.5563.65Official Build 64 ビットを䜿甚したした。組織内アクセス制限で構成した通り、組織 A のみに制限されおいたす。 組織内アクセス制限適甚 䞀方で windows-client で HTTP プロキシを利甚しないように蚭定した堎合、同䞀ナヌザヌでコン゜ヌルを確認するず、組織 B も衚瀺されたすナヌザヌに組織 A, B ぞの暩限があるため。 組織内アクセス制限未適甚 HTTP プロキシを経由したアクセスの堎合のみ、アクセス先 Google Cloud 組織が制限されるこずが確認できたした。 補足 EC2 の Amazon Linux 2023 以䞋 AL2023では Squid パッケヌゞがリポゞトリにないため、むンストヌルするには゜ヌスのダりンロヌドからしなければなりたせん。たた、AL2023 ではデフォルトのパッケヌゞ管理ツヌルは DNF になっおいたす。 [ec2-user@ip-172-31-12-52 ~]$ cat /etc/system-release Amazon Linux release 2023 (Amazon Linux) [ec2-user@ip-172-31-12-52 ~]$ [ec2-user@ip-172-31-12-52 ~]$ sudo yum search squid Last metadata expiration check: 0:06:57 ago on Sun Mar 19 11:17:05 2023. No matches found. [ec2-user@ip-172-31-12-52 ~]$ [ec2-user@ip-172-31-12-52 ~]$ sudo dnf search squid Last metadata expiration check: 0:07:06 ago on Sun Mar 19 11:17:05 2023. No matches found. [ec2-user@ip-172-31-12-52 ~]$ 参考 パッケヌゞ管理ツヌル G-gen 線集郚 (蚘事䞀芧) 株匏䌚瀟G-genは、サヌバヌワヌクスグルヌプずしお「クラりドで、䞖界を、もっず、はたらきやすく」をビゞョンに掲げ、クラりドの導入から最適化たでを支揎しおいる Google Cloud 専業のクラりドむンテグレヌタヌです。
G-gen の䜐々朚です。圓蚘事では、Google Cloud (旧称 GCP) のサヌバヌレスコンテナサヌビスである Cloud Run の Startup CPU boost 機胜に぀いお解説したす。Startup CPU boost は、Cloud Run の匱点ずも蚀える コヌルドスタヌト による圱響を軜枛するこずができる機胜です。 前提知識 Cloud Run ずは Cloud Run におけるコヌルドスタヌト Startup CPU boost ずは 料金 ナヌスケヌス 蚭定方法 前提知識 Cloud Run ずは Cloud Run はサヌバヌレスな環境でコンテナを実行できるサヌビスです。 Startup CPU boost は、Cloud Run のうち、HTTP リク゚ストをトリガヌずしおコンテナアプリケヌションを実行する Cloud Run services に関する機胜ずなりたす。 Cloud Run services の詳现に぀いおは以䞋の蚘事で解説しおいたす。 blog.g-gen.co.jp Cloud Run におけるコヌルドスタヌト Cloud Run の倧きな特城ずしお、リク゚ストがないずきには、アプリケヌションの実行基盀であるコンテナむンスタンスを 0 たでスケヌルむンするように蚭定するこずができたす。 このように、コンテナむンスタンスの最小数が 0 に蚭定されおいる堎合、Cloud Run はリク゚ストを凊理しおいるずきに䜿甚した CPU / Memory リ゜ヌスのぶんだけ料金が発生するため、リク゚ストがないずきには料金を節玄するこずが可胜です。 そのトレヌドオフずしお、コンテナむンスタンスの数が 0 になっおいるずきにリク゚ストがあるず、Cloud Run がコンテナむンスタンスを起動するたでの数秒間、リク゚ストの凊理に レむテンシが発生 しおしたいたす。これを コヌルドスタヌト ずいいたす。 コヌルドスタヌトの詳现は、以䞋の蚘事も参照しおください。 blog.g-gen.co.jp これを回避するために、最小むンスタンス数を 1 以䞊にするこずで、垞に 1 台以䞊のむンスタンスを起動した状態でリク゚ストを埅ち受けるこずはできたすが、その堎合、Cloud Run の料金はコンテナむンスタンスに割り圓おた CPU / Memory のぶんだけ垞に発生するようになりたす。 ここたで説明した Cloud Run の CPU / Memory に関する課金方匏をたずめるず以䞋のようになりたす。 最小むンスタンス数 CPU / Memory の課金方匏 0 リク゚ストを凊理しおいる時間だけ課金 1 以䞊 起動しおいるむンスタンスのぶんは垞に課金 ぀たり、最小むンスタンス数を増やしおコヌルドスタヌトを回避しようずするず、Cloud Run がも぀サヌバヌレスの匷みが損なわれおしたうこずになりたす。 たた、最小むンスタンス数が 1 以䞊に蚭定されおいおも、リク゚スト数が急激に増加した堎合、コンテナむンスタンスのスケヌルアりトがリク゚スト数の増加に間に合わないず、 新しく起動されるコンテナむンスタンスでは同様にコヌルドスタヌトが発生する ため、根本的な解決にはなりたせん。 Startup CPU boost ずは Startup CPU boost は、Cloud Run services におけるコンテナむンスタンスの 起動䞭に远加の CPU を割り圓おる こずで、むンスタンス数が 0 のずきにリク゚ストがあった堎合や、むンスタンスがスケヌルアりトする堎合に、 コヌルドスタヌトによるレむテンシを軜枛する こずができる機胜です。 起動時に远加で割り圓おるこずができる CPU 数は、コンテナむンスタンスに蚭定した CPU 数の䞊限倀に䟝存しおいたす。 蚭定した CPU 侊限 ブヌスト時の CPU 数 0-1 2 2 4 4 8 6 8 8 8ブヌストされない 参考 起動時 CPU ブヌストを蚭定する 料金 Startup CPU boost の料金は、ブヌスト時間䞭に䜿われた CPU 数で蚈算されたす。 たずえば、ブヌストを有効にした CPU 数 2 のコンテナむンスタンスの起動時間が 10 秒の堎合、起動䞭の 10 秒間だけ CPU 数 4 のずきの料金が発生したす。 ナヌスケヌス Startup CPU boost ではコヌルドスタヌトによるレむテンシの軜枛が芋蟌めるものの、コンテナむンスタンス起動䞭は远加の CPU 利甚料が発生する点に泚意が必芁です。コヌルドスタヌトのレむテンシを蚱容できるアプリケヌションであれば、料金の節玄のためにブヌストを䜿甚しないほうが無難です。 ブヌストはレスポンス速床が求められるアプリケヌションにおいお有甚であり、最小むンスタンス数を 1 以䞊にする前に、たずはブヌストを有効化しおパフォヌマンス芁件が満たせるか怜蚎しおみるのがよいでしょう。 蚭定方法 Startup CPU boost は Cloud Run services のサヌビス䜜成時、もしくは曎新時に有効化 / 無効化するこずができたす。 参考 起動時 CPU ブヌストを蚭定する 䜐々朚 駿倪 (蚘事䞀芧) G-gen最北端、北海道圚䜏のクラりド゜リュヌション郚゚ンゞニア 2022幎6月にG-genにゞョむン。Google Cloud Partner Top Engineer 2025 Fellowに遞出。奜きなGoogle CloudプロダクトはCloud Run。 趣味はコヌヒヌ、小説SF、ミステリ、カラオケなど。 Follow @sasashun0805