CINXE.COM

Background processing with PHP  |  Google Cloud

<!doctype html> <html lang="en" dir="ltr"> <head> <meta name="google-signin-client-id" content="721724668570-nbkv1cfusk7kk4eni4pjvepaus73b13t.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/webhistory"> <meta property="og:site_name" content="Google Cloud"> <meta property="og:type" content="website"><meta name="theme-color" content="#039be5"><meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/_pwa/cloud/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//www.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.googleapis.com" crossorigin> <link rel="preconnect" href="//apis.google.com" crossorigin> <link rel="preconnect" href="//www.google-analytics.com" crossorigin><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Google+Sans:400,500,700|Google+Sans+Text:400,400italic,500,500italic,700,700italic|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"> <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined&display=block"><link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/cloud/css/app.css"> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/cloud/images/favicons/onecloud/favicon.ico"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/cloud/images/favicons/onecloud/super_cloud.png"><link rel="canonical" href="https://cloud.google.com/php/getting-started/background-processing"><link rel="search" type="application/opensearchdescription+xml" title="Google Cloud" href="https://cloud.google.com/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://cloud.google.com/php/getting-started/background-processing" /><link rel="alternate" hreflang="x-default" href="https://cloud.google.com/php/getting-started/background-processing" /><link rel="alternate" hreflang="zh-Hans" href="https://cloud.google.com/php/getting-started/background-processing?hl=zh-cn" /><link rel="alternate" hreflang="fr" href="https://cloud.google.com/php/getting-started/background-processing?hl=fr" /><link rel="alternate" hreflang="de" href="https://cloud.google.com/php/getting-started/background-processing?hl=de" /><link rel="alternate" hreflang="id" href="https://cloud.google.com/php/getting-started/background-processing?hl=id" /><link rel="alternate" hreflang="it" href="https://cloud.google.com/php/getting-started/background-processing?hl=it" /><link rel="alternate" hreflang="ja" href="https://cloud.google.com/php/getting-started/background-processing?hl=ja" /><link rel="alternate" hreflang="ko" href="https://cloud.google.com/php/getting-started/background-processing?hl=ko" /><link rel="alternate" hreflang="pt-BR" href="https://cloud.google.com/php/getting-started/background-processing?hl=pt-br" /><link rel="alternate" hreflang="es-419" href="https://cloud.google.com/php/getting-started/background-processing?hl=es-419" /><title>Background processing with PHP &nbsp;|&nbsp; Google Cloud</title> <meta property="og:title" content="Background processing with PHP &nbsp;|&nbsp; Google Cloud"><meta name="description" content="This tutorial shows how to do background processing with App Engine, Cloud Run, Firestore, and Pub/Sub."> <meta property="og:description" content="This tutorial shows how to do background processing with App Engine, Cloud Run, Firestore, and Pub/Sub."><meta property="og:url" content="https://cloud.google.com/php/getting-started/background-processing"><meta property="og:image" content="https://cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="630"><meta property="og:locale" content="en"><meta name="twitter:card" content="summary_large_image"><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "headline": "Background processing with PHP" } </script><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "name": "PHP", "item": "https://cloud.google.com/php" },{ "@type": "ListItem", "position": 2, "name": "Documentation", "item": "https://cloud.google.com/php/docs" },{ "@type": "ListItem", "position": 3, "name": "Background processing with PHP", "item": "https://cloud.google.com/php/getting-started/background-processing" }] } </script> <meta name="gtm_var" data-key="docType" data-value="tutorial"> <link rel="stylesheet" href="/extras.css"></head> <body class="" template="page" theme="cloud-theme" type="article" layout="docs" free-trial display-toc pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <section class="devsite-wrapper"> <devsite-cookie-notification-bar></devsite-cookie-notification-bar><cloudx-track userCountry="SG"></cloudx-track> <cloudx-utils-init></cloudx-utils-init> <devsite-header keep-tabs-visible> <div class="devsite-header--inner nocontent"> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"> <button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="googleCloud" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <img src="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/cloud/images/cloud-logo.svg" class="devsite-site-logo" alt="Google Cloud"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item devsite-has-google-wordmark"> </li> </ul> </span> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> <cloudx-tabs-nav class="upper-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Upper tabs"> <tab class="devsite-active"> <a href="https://cloud.google.com/docs" track-metadata-eventdetail="https://cloud.google.com/docs" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - docs-home" track-metadata-module="primary nav" aria-label="Documentation, selected" data-category="Site-Wide Custom Events" data-label="Tab: Documentation" track-name="docs-home" track-link-column-type="single-column" > Documentation </a> </tab> <tab class="devsite-dropdown devsite-clickable "> <a href="https://cloud.google.com/docs/tech-area-overviews" track-metadata-eventdetail="https://cloud.google.com/docs/tech-area-overviews" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - technology-areas" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Technology areas" track-name="technology-areas" track-link-column-type="single-column" > Technology areas </a> <a href="#" role="button" aria-haspopup="true" aria-expanded="false" aria-label="Dropdown menu for Technology areas" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/tech-area-overviews" track-metadata-position="nav - technology-areas" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Technology areas" track-name="technology-areas" track-link-column-type="single-column" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></a> <div class="devsite-tabs-dropdown" aria-label="submenu" hidden> <button class="devsite-tabs-close-button material-icons button-flat gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close dropdown menu" aria-label="Close dropdown menu" track-type="nav" track-name="close" track-metadata-eventdetail="#" track-metadata-position="nav - technology-areas" track-metadata-module="tertiary nav">close</button> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/ai-ml" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/ai-ml" track-metadata-position="nav - technology-areas" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> AI and ML </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/application-development" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/application-development" track-metadata-position="nav - technology-areas" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Application development </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/application-hosting" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/application-hosting" track-metadata-position="nav - technology-areas" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Application hosting </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/compute-area" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/compute-area" track-metadata-position="nav - technology-areas" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Compute </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/data" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/data" track-metadata-position="nav - technology-areas" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Data analytics and pipelines </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/databases" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/databases" track-metadata-position="nav - technology-areas" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Databases </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/dhm-cloud" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/dhm-cloud" track-metadata-position="nav - technology-areas" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Distributed, hybrid, and multicloud </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/generative-ai" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/generative-ai" track-metadata-position="nav - technology-areas" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Generative AI </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/industry" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/industry" track-metadata-position="nav - technology-areas" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Industry solutions </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/networking" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/networking" track-metadata-position="nav - technology-areas" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Networking </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/observability" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/observability" track-metadata-position="nav - technology-areas" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Observability and monitoring </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/security" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/security" track-metadata-position="nav - technology-areas" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Security </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/storage" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/storage" track-metadata-position="nav - technology-areas" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Storage </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown devsite-clickable "> <a href="https://cloud.google.com/docs/cross-product-overviews" track-metadata-eventdetail="https://cloud.google.com/docs/cross-product-overviews" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - crossproduct" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Cross-product tools" track-name="crossproduct" track-link-column-type="single-column" > Cross-product tools </a> <a href="#" role="button" aria-haspopup="true" aria-expanded="false" aria-label="Dropdown menu for Cross-product tools" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/cross-product-overviews" track-metadata-position="nav - crossproduct" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Cross-product tools" track-name="crossproduct" track-link-column-type="single-column" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></a> <div class="devsite-tabs-dropdown" aria-label="submenu" hidden> <button class="devsite-tabs-close-button material-icons button-flat gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close dropdown menu" aria-label="Close dropdown menu" track-type="nav" track-name="close" track-metadata-eventdetail="#" track-metadata-position="nav - crossproduct" track-metadata-module="tertiary nav">close</button> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/access-resources" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/access-resources" track-metadata-position="nav - crossproduct" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Access and resources management </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/costs-usage" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/costs-usage" track-metadata-position="nav - crossproduct" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Costs and usage management </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/devtools" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/devtools" track-metadata-position="nav - crossproduct" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Google Cloud SDK, languages, frameworks, and tools </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/iac" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/iac" track-metadata-position="nav - crossproduct" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Infrastructure as code </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/docs/migration" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/docs/migration" track-metadata-position="nav - crossproduct" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Migration </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown devsite-clickable "> <a href="https://cloud.google.com/" track-metadata-eventdetail="https://cloud.google.com/" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - related-sites" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Related sites" track-name="related-sites" track-link-column-type="single-column" > Related sites </a> <a href="#" role="button" aria-haspopup="true" aria-expanded="false" aria-label="Dropdown menu for Related sites" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/" track-metadata-position="nav - related-sites" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Related sites" track-name="related-sites" track-link-column-type="single-column" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></a> <div class="devsite-tabs-dropdown" aria-label="submenu" hidden> <button class="devsite-tabs-close-button material-icons button-flat gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close dropdown menu" aria-label="Close dropdown menu" track-type="nav" track-name="close" track-metadata-eventdetail="#" track-metadata-position="nav - related-sites" track-metadata-module="tertiary nav">close</button> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://cloud.google.com/" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/" track-metadata-position="nav - related-sites" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Google Cloud Home </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/free" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/free" track-metadata-position="nav - related-sites" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Free Trial and Free Tier </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/architecture" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/architecture" track-metadata-position="nav - related-sites" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Architecture Center </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/blog" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/blog" track-metadata-position="nav - related-sites" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Blog </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/contact" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/contact" track-metadata-position="nav - related-sites" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Contact Sales </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/developers" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/developers" track-metadata-position="nav - related-sites" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Google Cloud Developer Center </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/" track-type="nav" track-metadata-eventdetail="https://developers.google.com/" track-metadata-position="nav - related-sites" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Google Developer Center </div> </a> </li> <li class="devsite-nav-item"> <a href="https://console.cloud.google.com/marketplace" track-type="nav" track-metadata-eventdetail="https://console.cloud.google.com/marketplace" track-metadata-position="nav - related-sites" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Google Cloud Marketplace </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/marketplace/docs" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/marketplace/docs" track-metadata-position="nav - related-sites" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Google Cloud Marketplace Documentation </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.cloudskillsboost.google/paths" track-type="nav" track-metadata-eventdetail="https://www.cloudskillsboost.google/paths" track-metadata-position="nav - related-sites" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Google Cloud Skills Boost </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/solutions" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/solutions" track-metadata-position="nav - related-sites" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Google Cloud Solution Center </div> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/support-hub" track-type="nav" track-metadata-eventdetail="https://cloud.google.com/support-hub" track-metadata-position="nav - related-sites" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Google Cloud Support </div> </a> </li> <li class="devsite-nav-item"> <a href="https://www.youtube.com/@googlecloudtech" track-type="nav" track-metadata-eventdetail="https://www.youtube.com/@googlecloudtech" track-metadata-position="nav - related-sites" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Google Cloud Tech Youtube Channel </div> </a> </li> </ul> </div> </div> </div> </tab> </nav> </cloudx-tabs-nav> </div> <devsite-search enable-signin enable-search enable-suggestions project-name="PHP" tenant-name="Google Cloud" project-scope="/php/docs" url-scoped="https://cloud.google.com/s/results/php/docs" > <form class="devsite-search-form" action="https://cloud.google.com/s/results" method="GET"> <div class="devsite-search-container"> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-expanded="false" aria-haspopup="listbox" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="combobox" type="text" value="" > <div class="devsite-search-image material-icons" aria-hidden="true"> </div> <div class="devsite-search-shortcut-icon-container" aria-hidden="true"> <kbd class="devsite-search-shortcut-icon">/</kbd> </div> </div> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> <devsite-user enable-profiles fp-auth id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> <div class="devsite-collapsible-section "> <div class="devsite-header-background"> <div class="devsite-product-id-row" hidden> <div class="devsite-product-description-row"> </div> </div> <div class="devsite-doc-set-nav-row"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> <a href="https://cloud.google.com/php" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Lower Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="PHP" > PHP </a> </li> </ul> <cloudx-tabs-nav class="lower-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Lower tabs"> <tab > <a href="https://cloud.google.com/php/docs" track-metadata-eventdetail="https://cloud.google.com/php/docs" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - overview" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Overview" track-name="overview" > Overview </a> </tab> <tab class="devsite-active"> <a href="https://cloud.google.com/php/getting-started" track-metadata-eventdetail="https://cloud.google.com/php/getting-started" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - guides" track-metadata-module="primary nav" aria-label="Guides, selected" data-category="Site-Wide Custom Events" data-label="Tab: Guides" track-name="guides" > Guides </a> </tab> <tab > <a href="https://cloud.google.com/php/docs/reference" track-metadata-eventdetail="https://cloud.google.com/php/docs/reference" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - reference" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Reference" track-name="reference" > Reference </a> </tab> <tab > <a href="https://cloud.google.com/docs/samples/?language=php" track-metadata-eventdetail="https://cloud.google.com/docs/samples/?language=php" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - samples" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Samples" track-name="samples" > Samples </a> </tab> </nav> </cloudx-tabs-nav> <div class="devsite-product-button-row"> <a href="https://cloud.google.com/contact" class="cta-button-secondary button " data-overflow-wrapper="tab" track-name="sales" track-type="contact" data-overflow-container="left" track-metadata-eventDetail="nav" track-metadata-position="nav" data-overflow="devsite-tabs-wrapper" >Contact Us</a> <a href="//console.cloud.google.com/freetrial" class="cloud-free-trial-button cta-button-primary button-primary button cloud-button cloud-button--primary " referrerpolicy="no-referrer-when-downgrade" track-type="freeTrial" track-metadata-position="nav" track-metadata-eventDetail="nav" data-overflow-class="devsite-header-link devsite-top-button button cloud-free-trial-button cloud-free-trial-enabled cloud-button cloud-button--primary" data-overflow="devsite-top-logo-row" data-overflow-container="right" track-name="gcpCta" >Start free</a> </div> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars > <div class="devsite-book-nav-filter" > <span class="filter-list-icon material-icons" aria-hidden="true"></span> <input type="text" placeholder="Filter" aria-label="Type to filter" role="searchbox"> <span class="filter-clear-button hidden" data-title="Clear filter" aria-label="Clear filter" role="button" tabindex="0"></span> </div> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"> <button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="googleCloud" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <img src="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/cloud/images/cloud-logo.svg" class="devsite-site-logo" alt="Google Cloud"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item devsite-has-google-wordmark"> </li> </ul> </span> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> <li class="devsite-nav-item"> <a href="/docs" class="devsite-nav-title gc-analytics-event devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Documentation" track-name="docs-home" track-link-column-type="single-column" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Documentation" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Documentation </span> </a> <ul class="devsite-nav-responsive-tabs"> <li class="devsite-nav-item"> <a href="/php/docs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Overview" track-name="overview" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Overview" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Overview </span> </a> </li> <li class="devsite-nav-item"> <a href="/php/getting-started" class="devsite-nav-title gc-analytics-event devsite-nav-has-children devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Guides" track-name="guides" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Guides" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip menu="_book"> Guides </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="_book"> </span> </a> </li> <li class="devsite-nav-item"> <a href="/php/docs/reference" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Reference" track-name="reference" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Reference" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Reference </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/samples/?language=php" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Samples" track-name="samples" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Samples" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Samples </span> </a> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/docs/tech-area-overviews" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Technology areas" track-name="technology-areas" track-link-column-type="single-column" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Technology areas" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Technology areas </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Technology areas" track-name="technology-areas" track-link-column-type="single-column" > <span class="devsite-nav-text" tooltip menu="Technology areas"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Technology areas"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/docs/cross-product-overviews" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Cross-product tools" track-name="crossproduct" track-link-column-type="single-column" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Cross-product tools" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Cross-product tools </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Cross-product tools" track-name="crossproduct" track-link-column-type="single-column" > <span class="devsite-nav-text" tooltip menu="Cross-product tools"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Cross-product tools"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Related sites" track-name="related-sites" track-link-column-type="single-column" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Related sites" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Related sites </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Related sites" track-name="related-sites" track-link-column-type="single-column" > <span class="devsite-nav-text" tooltip menu="Related sites"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Related sites"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="//console.cloud.google.com/" class="devsite-nav-title gc-analytics-event " track-metadata-eventDetail="nav" track-name="console" track-metadata-position="nav" track-type="globalNav" referrerpolicy="no-referrer-when-downgrade" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Console" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Console </span> </a> </li> <li class="devsite-nav-item"> <a href="/contact" class="cta-button-secondary button" data-overflow-wrapper="tab" track-name="sales" track-type="contact" data-overflow-container="left" track-metadata-eventDetail="nav" track-metadata-position="nav" data-overflow="devsite-tabs-wrapper" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Contact Us" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Contact Us </span> </a> </li> <li class="devsite-nav-item"> <a href="//console.cloud.google.com/freetrial" class="cloud-free-trial-button cta-button-primary button-primary button cloud-button cloud-button--primary" referrerpolicy="no-referrer-when-downgrade" track-type="freeTrial" track-metadata-position="nav" track-metadata-eventDetail="nav" data-overflow-class="devsite-header-link devsite-top-button button cloud-free-trial-button cloud-free-trial-enabled cloud-button cloud-button--primary" data-overflow="devsite-top-logo-row" data-overflow-container="right" track-name="gcpCta" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Start free" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Start free </span> </a> </li> </ul> </div> <div class="devsite-mobile-nav-bottom"> <ul class="devsite-nav-list" menu="_book"> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Getting started</span> </div></li> <li class="devsite-nav-item"><a href="/php/getting-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /php/getting-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/php/getting-started" ><span class="devsite-nav-text" tooltip>Getting started with PHP</span></a></li> <li class="devsite-nav-item"><a href="/php/docs/supported-php-versions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /php/docs/supported-php-versions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/php/docs/supported-php-versions" ><span class="devsite-nav-text" tooltip>Supported PHP versions</span></a></li> <li class="devsite-nav-item"><a href="/php/getting-started/troubleshooting" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /php/getting-started/troubleshooting" track-type="bookNav" track-name="click" track-metadata-eventdetail="/php/getting-started/troubleshooting" ><span class="devsite-nav-text" tooltip>Troubleshooting</span></a></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Start by use case</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/appengine/docs/standard/php-gen2/create-app" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /appengine/docs/standard/php-gen2/create-app" track-type="bookNav" track-name="click" track-metadata-eventdetail="/appengine/docs/standard/php-gen2/create-app" ><span class="devsite-nav-text" tooltip>Deploying apps to the App Engine standard environment</span></a></li><li class="devsite-nav-item"><a href="/appengine/docs/flexible/php/quickstart" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /appengine/docs/flexible/php/quickstart" track-type="bookNav" track-name="click" track-metadata-eventdetail="/appengine/docs/flexible/php/quickstart" ><span class="devsite-nav-text" tooltip>Deploying apps to the App Engine flexible environment</span></a></li><li class="devsite-nav-item"><a href="/php/getting-started/getting-started-on-compute-engine" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /php/getting-started/getting-started-on-compute-engine" track-type="bookNav" track-name="click" track-metadata-eventdetail="/php/getting-started/getting-started-on-compute-engine" ><span class="devsite-nav-text" tooltip>Deploying apps to Compute Engine</span></a></li><li class="devsite-nav-item"><a href="/run/docs/quickstarts/build-and-deploy/deploy-php-service" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /run/docs/quickstarts/build-and-deploy/deploy-php-service" track-type="bookNav" track-name="click" track-metadata-eventdetail="/run/docs/quickstarts/build-and-deploy/deploy-php-service" ><span class="devsite-nav-text" tooltip>Deploying apps to Cloud Run</span></a></li><li class="devsite-nav-item"><a href="/kubernetes-engine/docs/quickstarts/deploying-a-language-specific-app" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /kubernetes-engine/docs/quickstarts/deploying-a-language-specific-app" track-type="bookNav" track-name="click" track-metadata-eventdetail="/kubernetes-engine/docs/quickstarts/deploying-a-language-specific-app" ><span class="devsite-nav-text" tooltip>Deploying apps to Kubernetes Engine</span></a></li><li class="devsite-nav-item"><a href="/run/docs/quickstarts/build-and-deploy/deploy-php-service" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /run/docs/quickstarts/build-and-deploy/deploy-php-service" track-type="bookNav" track-name="click" track-metadata-eventdetail="/run/docs/quickstarts/build-and-deploy/deploy-php-service" ><span class="devsite-nav-text" tooltip>Deploy a PHP service to Cloud Run</span></a></li><li class="devsite-nav-item"><a href="/functions/docs/create-deploy-http-php" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /functions/docs/create-deploy-http-php" track-type="bookNav" track-name="click" track-metadata-eventdetail="/functions/docs/create-deploy-http-php" ><span class="devsite-nav-text" tooltip>Create and deploy a HTTP Cloud Function by using PHP</span></a></li><li class="devsite-nav-item"><a href="/php/getting-started/authenticate-users" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /php/getting-started/authenticate-users" track-type="bookNav" track-name="click" track-metadata-eventdetail="/php/getting-started/authenticate-users" ><span class="devsite-nav-text" tooltip>Authenticating users</span></a></li><li class="devsite-nav-item"><a href="/php/getting-started/session-handling-with-firestore" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /php/getting-started/session-handling-with-firestore" track-type="bookNav" track-name="click" track-metadata-eventdetail="/php/getting-started/session-handling-with-firestore" ><span class="devsite-nav-text" tooltip>Handling sessions with Cloud Firestore</span></a></li><li class="devsite-nav-item"><a href="/php/grpc" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /php/grpc" track-type="bookNav" track-name="click" track-metadata-eventdetail="/php/grpc" ><span class="devsite-nav-text" tooltip>Installing gRPC for PHP</span></a></li><li class="devsite-nav-item"><a href="/php/getting-started/background-processing" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /php/getting-started/background-processing" track-type="bookNav" track-name="click" track-metadata-eventdetail="/php/getting-started/background-processing" ><span class="devsite-nav-text" tooltip>Background processing</span></a></li><li class="devsite-nav-item"><a href="/bigquery/bigquery-api-quickstart" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /bigquery/bigquery-api-quickstart" track-type="bookNav" track-name="click" track-metadata-eventdetail="/bigquery/bigquery-api-quickstart" ><span class="devsite-nav-text" tooltip>Analyzing big data with BigQuery</span></a></li><li class="devsite-nav-item"><a href="/endpoints/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /endpoints/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/endpoints/docs" ><span class="devsite-nav-text" tooltip>Managing an API with Endpoints</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Start by framework</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/php/tutorials/wordpress-app-engine-flexible" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /php/tutorials/wordpress-app-engine-flexible" track-type="bookNav" track-name="click" track-metadata-eventdetail="/php/tutorials/wordpress-app-engine-flexible" ><span class="devsite-nav-text" tooltip>WordPress on App Engine flexible environment</span></a></li></ul></div></li> <li class="devsite-nav-item"><a href="/architecture?text=php" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /architecture?text=php" track-type="bookNav" track-name="click" track-metadata-eventdetail="/architecture?text=php" ><span class="devsite-nav-text" tooltip>Official tutorials and solutions</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>App development</span> </div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Running apps</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/choosing-a-compute-option" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/choosing-a-compute-option" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/choosing-a-compute-option" ><span class="devsite-nav-text" tooltip>Choosing a computing option</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>App Engine</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/appengine/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /appengine/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/appengine/docs" ><span class="devsite-nav-text" tooltip>App Engine documentation</span></a></li><li class="devsite-nav-item"><a href="/appengine/docs/standard/php-gen2/create-app" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /appengine/docs/standard/php-gen2/create-app" track-type="bookNav" track-name="click" track-metadata-eventdetail="/appengine/docs/standard/php-gen2/create-app" ><span class="devsite-nav-text" tooltip>Deploying apps to App Engine standard environment</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Deploying apps to App Engine flexible environment</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/php/getting-started/hello-world" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /php/getting-started/hello-world" track-type="bookNav" track-name="click" track-metadata-eventdetail="/php/getting-started/hello-world" ><span class="devsite-nav-text" tooltip>Deploying a Hello World app</span></a></li><li class="devsite-nav-item"><a href="/php/getting-started/tutorial-app" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /php/getting-started/tutorial-app" track-type="bookNav" track-name="click" track-metadata-eventdetail="/php/getting-started/tutorial-app" ><span class="devsite-nav-text" tooltip>Deploying a complex app</span></a></li></ul></div></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Compute Engine</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/compute/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /compute/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/compute/docs" ><span class="devsite-nav-text" tooltip>Compute Engine documentation</span></a></li><li class="devsite-nav-item"><a href="/php/getting-started/getting-started-on-compute-engine" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /php/getting-started/getting-started-on-compute-engine" track-type="bookNav" track-name="click" track-metadata-eventdetail="/php/getting-started/getting-started-on-compute-engine" ><span class="devsite-nav-text" tooltip>Deploying apps to Compute Engine</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Google Kubernetes Engine</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/kubernetes-engine/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /kubernetes-engine/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/kubernetes-engine/docs" ><span class="devsite-nav-text" tooltip>Google Kubernetes Engine documentation</span></a></li><li class="devsite-nav-item"><a href="/kubernetes-engine/docs/quickstarts/deploying-a-language-specific-app" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /kubernetes-engine/docs/quickstarts/deploying-a-language-specific-app" track-type="bookNav" track-name="click" track-metadata-eventdetail="/kubernetes-engine/docs/quickstarts/deploying-a-language-specific-app" ><span class="devsite-nav-text" tooltip>Deploying apps to Google Kubernetes Engine</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Cloud Run</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/run/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /run/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/run/docs" ><span class="devsite-nav-text" tooltip>Cloud Run documentation</span></a></li><li class="devsite-nav-item"><a href="/run/docs/quickstarts/prebuilt-deploy" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /run/docs/quickstarts/prebuilt-deploy" track-type="bookNav" track-name="click" track-metadata-eventdetail="/run/docs/quickstarts/prebuilt-deploy" ><span class="devsite-nav-text" tooltip>Deploying apps to Cloud Run</span></a></li><li class="devsite-nav-item"><a href="/run/docs/quickstarts/prebuilt-deploy-gke" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /run/docs/quickstarts/prebuilt-deploy-gke" track-type="bookNav" track-name="click" track-metadata-eventdetail="/run/docs/quickstarts/prebuilt-deploy-gke" ><span class="devsite-nav-text" tooltip>Deploying apps to Cloud Run on GKE</span></a></li></ul></div></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Storing data</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/storing-your-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/storing-your-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/storing-your-data" ><span class="devsite-nav-text" tooltip>Choosing a storage option</span></a></li><li class="devsite-nav-item"><a href="/storage/docs/reference/libraries#client-libraries-install-php" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /storage/docs/reference/libraries#client-libraries-install-php" track-type="bookNav" track-name="click" track-metadata-eventdetail="/storage/docs/reference/libraries#client-libraries-install-php" ><span class="devsite-nav-text" tooltip>Cloud Storage</span></a></li><li class="devsite-nav-item"><a href="/spanner/docs/reference/libraries#client-libraries-install-php" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /spanner/docs/reference/libraries#client-libraries-install-php" track-type="bookNav" track-name="click" track-metadata-eventdetail="/spanner/docs/reference/libraries#client-libraries-install-php" ><span class="devsite-nav-text" tooltip>Cloud Spanner</span></a></li><li class="devsite-nav-item"><a href="/sql/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /sql/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/sql/docs" ><span class="devsite-nav-text" tooltip>Cloud SQL</span></a></li><li class="devsite-nav-item"><a href="/datastore/docs/reference/libraries#client-libraries-install-php" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /datastore/docs/reference/libraries#client-libraries-install-php" track-type="bookNav" track-name="click" track-metadata-eventdetail="/datastore/docs/reference/libraries#client-libraries-install-php" ><span class="devsite-nav-text" tooltip>Cloud Datastore</span></a></li><li class="devsite-nav-item"><a href="/firestore/docs/quickstart" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /firestore/docs/quickstart" track-type="bookNav" track-name="click" track-metadata-eventdetail="/firestore/docs/quickstart" ><span class="devsite-nav-text" tooltip>Cloud Firestore</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Logging and debugging</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/php/docs/stackdriver" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /php/docs/stackdriver" track-type="bookNav" track-name="click" track-metadata-eventdetail="/php/docs/stackdriver" ><span class="devsite-nav-text" tooltip>Google Cloud Observability</span></a></li><li class="devsite-nav-item"><a href="/debugger/docs/setup/php" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /debugger/docs/setup/php" track-type="bookNav" track-name="click" track-metadata-eventdetail="/debugger/docs/setup/php" ><span class="devsite-nav-text" tooltip>Debugging PHP apps</span></a></li><li class="devsite-nav-item"><a href="/error-reporting/docs/setup/php" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /error-reporting/docs/setup/php" track-type="bookNav" track-name="click" track-metadata-eventdetail="/error-reporting/docs/setup/php" ><span class="devsite-nav-text" tooltip>Reporting errors in PHP apps</span></a></li><li class="devsite-nav-item"><a href="/logging/docs/setup/php" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /logging/docs/setup/php" track-type="bookNav" track-name="click" track-metadata-eventdetail="/logging/docs/setup/php" ><span class="devsite-nav-text" tooltip>Logging in PHP apps</span></a></li><li class="devsite-nav-item"><a href="/monitoring/docs/reference/libraries#client-libraries-install-php" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /monitoring/docs/reference/libraries#client-libraries-install-php" track-type="bookNav" track-name="click" track-metadata-eventdetail="/monitoring/docs/reference/libraries#client-libraries-install-php" ><span class="devsite-nav-text" tooltip>Monitoring PHP apps</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Developer tools</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/products/tools" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /products/tools" track-type="bookNav" track-name="click" track-metadata-eventdetail="/products/tools" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/sdk/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /sdk/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/sdk/docs" ><span class="devsite-nav-text" tooltip>gcloud CLI</span></a></li><li class="devsite-nav-item"><a href="/code/docs/intellij" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /code/docs/intellij" track-type="bookNav" track-name="click" track-metadata-eventdetail="/code/docs/intellij" ><span class="devsite-nav-text" tooltip>Cloud Code for IntelliJ</span></a></li><li class="devsite-nav-item"><a href="/code/docs/vscode" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /code/docs/vscode" track-type="bookNav" track-name="click" track-metadata-eventdetail="/code/docs/vscode" ><span class="devsite-nav-text" tooltip>Cloud Code for VS Code</span></a></li><li class="devsite-nav-item"><a href="/artifact-registry/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /artifact-registry/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/artifact-registry/docs" ><span class="devsite-nav-text" tooltip>Artifact Registry</span></a></li><li class="devsite-nav-item"><a href="/build/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /build/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/build/docs" ><span class="devsite-nav-text" tooltip>Cloud Build</span></a></li><li class="devsite-nav-item"><a href="/source-repositories/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /source-repositories/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/source-repositories/docs" ><span class="devsite-nav-text" tooltip>Cloud Source Repositories</span></a></li><li class="devsite-nav-item"><a href="/apis/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /apis/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/apis/docs" ><span class="devsite-nav-text" tooltip>Cloud APIs</span></a></li><li class="devsite-nav-item"><a href="/shell/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /shell/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/shell/docs" ><span class="devsite-nav-text" tooltip>Cloud Shell</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Authentication</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/authentication" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication" ><span class="devsite-nav-text" tooltip>Authentication methods</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Ways to authenticate</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/authentication/client-libraries" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/client-libraries" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/client-libraries" ><span class="devsite-nav-text" tooltip>Authenticate for using client libraries</span></a></li><li class="devsite-nav-item"><a href="/docs/authentication/gcloud" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/gcloud" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/gcloud" ><span class="devsite-nav-text" tooltip>Authenticate for using the gcloud CLI</span></a></li><li class="devsite-nav-item"><a href="/docs/authentication/rest" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/rest" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/rest" ><span class="devsite-nav-text" tooltip>Authenticate for using REST</span></a></li><li class="devsite-nav-item"><a href="/docs/authentication/use-service-account-impersonation" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/use-service-account-impersonation" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/use-service-account-impersonation" ><span class="devsite-nav-text" tooltip>Authenticate by using service account impersonation</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Application Default Credentials</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/authentication/provide-credentials-adc" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/provide-credentials-adc" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/provide-credentials-adc" ><span class="devsite-nav-text" tooltip>Set up Application Default Credentials</span></a></li><li class="devsite-nav-item"><a href="/docs/authentication/application-default-credentials" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/application-default-credentials" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/application-default-credentials" ><span class="devsite-nav-text" tooltip>How Application Default Credentials works</span></a></li><li class="devsite-nav-item"><a href="/docs/authentication/troubleshoot-adc" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/troubleshoot-adc" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/troubleshoot-adc" ><span class="devsite-nav-text" tooltip>Troubleshoot your ADC setup</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>API keys</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/authentication/api-keys-use" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/api-keys-use" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/api-keys-use" ><span class="devsite-nav-text" tooltip>Use API keys to access APIs</span></a></li><li class="devsite-nav-item"><a href="/docs/authentication/api-keys" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/api-keys" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/api-keys" ><span class="devsite-nav-text" tooltip>Manage API keys</span></a></li><li class="devsite-nav-item"><a href="/docs/authentication/api-keys-best-practices" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/api-keys-best-practices" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/api-keys-best-practices" ><span class="devsite-nav-text" tooltip>Best practices for managing API keys</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/docs/authentication/get-id-token" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/get-id-token" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/get-id-token" ><span class="devsite-nav-text" tooltip>Get an ID token</span></a></li><li class="devsite-nav-item"><a href="/docs/authentication/token-types" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/token-types" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/token-types" ><span class="devsite-nav-text" tooltip>Token types</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Big data and machine learning</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Big data</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/products/big-data" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /products/big-data" track-type="bookNav" track-name="click" track-metadata-eventdetail="/products/big-data" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/bigquery/docs/quickstarts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /bigquery/docs/quickstarts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/bigquery/docs/quickstarts" ><span class="devsite-nav-text" tooltip>BigQuery</span></a></li><li class="devsite-nav-item"><a href="/composer/docs/quickstart" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /composer/docs/quickstart" track-type="bookNav" track-name="click" track-metadata-eventdetail="/composer/docs/quickstart" ><span class="devsite-nav-text" tooltip>Cloud Composer</span></a></li><li class="devsite-nav-item"><a href="/dataflow/docs/quickstarts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /dataflow/docs/quickstarts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/dataflow/docs/quickstarts" ><span class="devsite-nav-text" tooltip>Dataflow</span></a></li><li class="devsite-nav-item"><a href="/dataproc/docs/quickstarts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /dataproc/docs/quickstarts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/dataproc/docs/quickstarts" ><span class="devsite-nav-text" tooltip>Dataproc</span></a></li><li class="devsite-nav-item"><a href="/datalab/docs/quickstarts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /datalab/docs/quickstarts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/datalab/docs/quickstarts" ><span class="devsite-nav-text" tooltip>Datalab</span></a></li><li class="devsite-nav-item"><a href="/pubsub/docs/quickstarts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /pubsub/docs/quickstarts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/pubsub/docs/quickstarts" ><span class="devsite-nav-text" tooltip>Pub/Sub</span></a></li><li class="devsite-nav-item"><a href="/hadoop" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /hadoop" track-type="bookNav" track-name="click" track-metadata-eventdetail="/hadoop" ><span class="devsite-nav-text" tooltip>Hadoop on Google Cloud</span></a></li><li class="devsite-nav-item"><a href="/architecture?category=bigdataandanalytics" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /architecture?category=bigdataandanalytics" track-type="bookNav" track-name="click" track-metadata-eventdetail="/architecture?category=bigdataandanalytics" ><span class="devsite-nav-text" tooltip>Big data solutions</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Machine learning</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/products/machine-learning" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /products/machine-learning" track-type="bookNav" track-name="click" track-metadata-eventdetail="/products/machine-learning" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/ml-engine/docs/tensorflow/getting-started-keras" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /ml-engine/docs/tensorflow/getting-started-keras" track-type="bookNav" track-name="click" track-metadata-eventdetail="/ml-engine/docs/tensorflow/getting-started-keras" ><span class="devsite-nav-text" tooltip>AI Platform training and prediction</span></a></li><li class="devsite-nav-item devsite-nav-beta"><a href="/data-labeling/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /data-labeling/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/data-labeling/docs" ><span class="devsite-nav-text" tooltip>AI Platform Data Labeling Service</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-beta"><a href="/ai-platform/deep-learning-containers/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /ai-platform/deep-learning-containers/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/ai-platform/deep-learning-containers/docs" ><span class="devsite-nav-text" tooltip>AI Platform Deep Learning Containers</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-beta"><a href="/ai-platform/notebooks/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /ai-platform/notebooks/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/ai-platform/notebooks/docs" ><span class="devsite-nav-text" tooltip>AI Platform Notebooks</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/natural-language/docs/quickstarts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /natural-language/docs/quickstarts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/natural-language/docs/quickstarts" ><span class="devsite-nav-text" tooltip>AutoML Natural Language API</span></a></li><li class="devsite-nav-item"><a href="/vision/docs/quickstarts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /vision/docs/quickstarts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/vision/docs/quickstarts" ><span class="devsite-nav-text" tooltip>AutoML Vision API</span></a></li><li class="devsite-nav-item"><a href="/talent-solution/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /talent-solution/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/talent-solution/docs" ><span class="devsite-nav-text" tooltip>Cloud Talent Solution</span></a></li><li class="devsite-nav-item devsite-nav-beta"><a href="/tpu/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /tpu/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/tpu/docs" ><span class="devsite-nav-text" tooltip>Cloud TPU</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/translate/docs/quickstarts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /translate/docs/quickstarts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/translate/docs/quickstarts" ><span class="devsite-nav-text" tooltip>Cloud Translation API</span></a></li><li class="devsite-nav-item"><a href="/dialogflow/docs/quickstarts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /dialogflow/docs/quickstarts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/dialogflow/docs/quickstarts" ><span class="devsite-nav-text" tooltip>Dialogflow</span></a></li><li class="devsite-nav-item"><a href="/architecture?category=aiandmachinelearning" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /architecture?category=aiandmachinelearning" track-type="bookNav" track-name="click" track-metadata-eventdetail="/architecture?category=aiandmachinelearning" ><span class="devsite-nav-text" tooltip>Machine learning solutions</span></a></li><li class="devsite-nav-item"><a href="/speech-to-text/docs/quickstart" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /speech-to-text/docs/quickstart" track-type="bookNav" track-name="click" track-metadata-eventdetail="/speech-to-text/docs/quickstart" ><span class="devsite-nav-text" tooltip>Speech-to-Text API</span></a></li><li class="devsite-nav-item devsite-nav-beta"><a href="/text-to-speech/docs/quickstart-protocol" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /text-to-speech/docs/quickstart-protocol" track-type="bookNav" track-name="click" track-metadata-eventdetail="/text-to-speech/docs/quickstart-protocol" ><span class="devsite-nav-text" tooltip>Text-to-Speech API</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/video-intelligence/docs/quickstarts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /video-intelligence/docs/quickstarts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/video-intelligence/docs/quickstarts" ><span class="devsite-nav-text" tooltip>Video Intelligence API</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>IoT</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/iot/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /iot/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/iot/docs" ><span class="devsite-nav-text" tooltip>Cloud IoT Core</span></a></li></ul></div></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Infrastructure and operations</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Compute and containers</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/hosting-options" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /hosting-options" track-type="bookNav" track-name="click" track-metadata-eventdetail="/hosting-options" ><span class="devsite-nav-text" tooltip>Choosing a hosting option</span></a></li><li class="devsite-nav-item"><a href="/compute/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /compute/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/compute/docs" ><span class="devsite-nav-text" tooltip>Compute Engine</span></a></li><li class="devsite-nav-item"><a href="/kubernetes-engine/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /kubernetes-engine/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/kubernetes-engine/docs" ><span class="devsite-nav-text" tooltip>Google Kubernetes Engine</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Networking</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/products/networking" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /products/networking" track-type="bookNav" track-name="click" track-metadata-eventdetail="/products/networking" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>VPC network</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/vpc/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /vpc/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/vpc/docs" ><span class="devsite-nav-text" tooltip>VPC networks</span></a></li><li class="devsite-nav-item"><a href="/compute/docs/ip-addresses" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /compute/docs/ip-addresses" track-type="bookNav" track-name="click" track-metadata-eventdetail="/compute/docs/ip-addresses" ><span class="devsite-nav-text" tooltip>External IP addresses</span></a></li><li class="devsite-nav-item"><a href="/vpc/docs/firewalls" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /vpc/docs/firewalls" track-type="bookNav" track-name="click" track-metadata-eventdetail="/vpc/docs/firewalls" ><span class="devsite-nav-text" tooltip>Firewall rules</span></a></li><li class="devsite-nav-item"><a href="/vpc/docs/routes" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /vpc/docs/routes" track-type="bookNav" track-name="click" track-metadata-eventdetail="/vpc/docs/routes" ><span class="devsite-nav-text" tooltip>Routes</span></a></li><li class="devsite-nav-item"><a href="/vpc/docs/vpc-peering" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /vpc/docs/vpc-peering" track-type="bookNav" track-name="click" track-metadata-eventdetail="/vpc/docs/vpc-peering" ><span class="devsite-nav-text" tooltip>VPC Network Peering</span></a></li><li class="devsite-nav-item"><a href="/vpc/docs/shared-vpc" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /vpc/docs/shared-vpc" track-type="bookNav" track-name="click" track-metadata-eventdetail="/vpc/docs/shared-vpc" ><span class="devsite-nav-text" tooltip>Shared VPC overview</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Network services</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/load-balancing/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /load-balancing/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/load-balancing/docs" ><span class="devsite-nav-text" tooltip>Load balancing</span></a></li><li class="devsite-nav-item devsite-nav-alpha"><a href="/network-tiers/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /network-tiers/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/network-tiers/docs" ><span class="devsite-nav-text" tooltip>Network service tiers</span><span class="devsite-nav-icon material-icons" data-icon="alpha" data-title="Alpha" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/dns/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /dns/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/dns/docs" ><span class="devsite-nav-text" tooltip>Cloud DNS</span></a></li><li class="devsite-nav-item"><a href="/cdn/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /cdn/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/cdn/docs" ><span class="devsite-nav-text" tooltip>Cloud CDN</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Hybrid connectivity</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/network-connectivity/docs/vpn" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /network-connectivity/docs/vpn" track-type="bookNav" track-name="click" track-metadata-eventdetail="/network-connectivity/docs/vpn" ><span class="devsite-nav-text" tooltip>Cloud VPN</span></a></li><li class="devsite-nav-item"><a href="/network-connectivity/docs/interconnect" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /network-connectivity/docs/interconnect" track-type="bookNav" track-name="click" track-metadata-eventdetail="/network-connectivity/docs/interconnect" ><span class="devsite-nav-text" tooltip>Cloud Interconnect</span></a></li><li class="devsite-nav-item"><a href="/network-connectivity/docs/router" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /network-connectivity/docs/router" track-type="bookNav" track-name="click" track-metadata-eventdetail="/network-connectivity/docs/router" ><span class="devsite-nav-text" tooltip>Cloud Router</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Network security</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/armor/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /armor/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/armor/docs" ><span class="devsite-nav-text" tooltip>Google Cloud Armor</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>External peering</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/network-connectivity/docs/direct-peering" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /network-connectivity/docs/direct-peering" track-type="bookNav" track-name="click" track-metadata-eventdetail="/network-connectivity/docs/direct-peering" ><span class="devsite-nav-text" tooltip>Direct Peering</span></a></li><li class="devsite-nav-item"><a href="/network-connectivity/docs/carrier-peering" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /network-connectivity/docs/carrier-peering" track-type="bookNav" track-name="click" track-metadata-eventdetail="/network-connectivity/docs/carrier-peering" ><span class="devsite-nav-text" tooltip>Carrier Peering</span></a></li><li class="devsite-nav-item"><a href="/network-connectivity/docs/cdn-interconnect" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /network-connectivity/docs/cdn-interconnect" track-type="bookNav" track-name="click" track-metadata-eventdetail="/network-connectivity/docs/cdn-interconnect" ><span class="devsite-nav-text" tooltip>CDN Interconnect</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/architecture?category=networking" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /architecture?category=networking" track-type="bookNav" track-name="click" track-metadata-eventdetail="/architecture?category=networking" ><span class="devsite-nav-text" tooltip>Networking solutions</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Operations</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/endpoints/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /endpoints/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/endpoints/docs" ><span class="devsite-nav-text" tooltip>Cloud Endpoints</span></a></li><li class="devsite-nav-item"><a href="/security-scanner/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /security-scanner/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/security-scanner/docs" ><span class="devsite-nav-text" tooltip>Cloud Security Scanner</span></a></li><li class="devsite-nav-item"><a href="/debugger/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /debugger/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/debugger/docs" ><span class="devsite-nav-text" tooltip>Cloud Debugger</span></a></li><li class="devsite-nav-item"><a href="/error-reporting/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /error-reporting/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/error-reporting/docs" ><span class="devsite-nav-text" tooltip>Error Reporting</span></a></li><li class="devsite-nav-item"><a href="/logging/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /logging/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/logging/docs" ><span class="devsite-nav-text" tooltip>Cloud Logging</span></a></li><li class="devsite-nav-item"><a href="/monitoring/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /monitoring/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/monitoring/docs" ><span class="devsite-nav-text" tooltip>Cloud Monitoring</span></a></li><li class="devsite-nav-item"><a href="/profiler/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /profiler/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/profiler/docs" ><span class="devsite-nav-text" tooltip>Cloud Profiler</span></a></li><li class="devsite-nav-item"><a href="/trace/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /trace/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/trace/docs" ><span class="devsite-nav-text" tooltip>Cloud Trace</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Identity and security</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Authentication</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/authentication" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication" ><span class="devsite-nav-text" tooltip>Authentication methods</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Ways to authenticate</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/authentication/client-libraries" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/client-libraries" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/client-libraries" ><span class="devsite-nav-text" tooltip>Authenticate for using client libraries</span></a></li><li class="devsite-nav-item"><a href="/docs/authentication/gcloud" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/gcloud" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/gcloud" ><span class="devsite-nav-text" tooltip>Authenticate for using the gcloud CLI</span></a></li><li class="devsite-nav-item"><a href="/docs/authentication/rest" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/rest" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/rest" ><span class="devsite-nav-text" tooltip>Authenticate for using REST</span></a></li><li class="devsite-nav-item"><a href="/docs/authentication/use-service-account-impersonation" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/use-service-account-impersonation" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/use-service-account-impersonation" ><span class="devsite-nav-text" tooltip>Authenticate by using service account impersonation</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Application Default Credentials</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/authentication/provide-credentials-adc" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/provide-credentials-adc" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/provide-credentials-adc" ><span class="devsite-nav-text" tooltip>Set up Application Default Credentials</span></a></li><li class="devsite-nav-item"><a href="/docs/authentication/application-default-credentials" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/application-default-credentials" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/application-default-credentials" ><span class="devsite-nav-text" tooltip>How Application Default Credentials works</span></a></li><li class="devsite-nav-item"><a href="/docs/authentication/troubleshoot-adc" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/troubleshoot-adc" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/troubleshoot-adc" ><span class="devsite-nav-text" tooltip>Troubleshoot your ADC setup</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>API keys</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/authentication/api-keys-use" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/api-keys-use" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/api-keys-use" ><span class="devsite-nav-text" tooltip>Use API keys to access APIs</span></a></li><li class="devsite-nav-item"><a href="/docs/authentication/api-keys" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/api-keys" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/api-keys" ><span class="devsite-nav-text" tooltip>Manage API keys</span></a></li><li class="devsite-nav-item"><a href="/docs/authentication/api-keys-best-practices" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/api-keys-best-practices" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/api-keys-best-practices" ><span class="devsite-nav-text" tooltip>Best practices for managing API keys</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/docs/authentication/get-id-token" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/get-id-token" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/get-id-token" ><span class="devsite-nav-text" tooltip>Get an ID token</span></a></li><li class="devsite-nav-item"><a href="/docs/authentication/token-types" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/authentication/token-types" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/authentication/token-types" ><span class="devsite-nav-text" tooltip>Token types</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/iam/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /iam/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/iam/docs" ><span class="devsite-nav-text" tooltip>Identity and Access Management</span></a></li><li class="devsite-nav-item"><a href="/iap/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /iap/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/iap/docs" ><span class="devsite-nav-text" tooltip>Identity-Aware Proxy</span></a></li><li class="devsite-nav-item"><a href="/kms/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /kms/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/kms/docs" ><span class="devsite-nav-text" tooltip>Cloud Key Management Service</span></a></li><li class="devsite-nav-item"><a href="/security-command-center/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /security-command-center/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/security-command-center/docs" ><span class="devsite-nav-text" tooltip>Cloud Security Command Center</span></a></li><li class="devsite-nav-item"><a href="/security-scanner/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /security-scanner/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/security-scanner/docs" ><span class="devsite-nav-text" tooltip>Cloud Security Scanner</span></a></li><li class="devsite-nav-item devsite-nav-beta"><a href="/binary-authorization/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /binary-authorization/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/binary-authorization/docs" ><span class="devsite-nav-text" tooltip>Binary Authorization</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/dlp/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /dlp/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/dlp/docs" ><span class="devsite-nav-text" tooltip>Cloud Data Loss Prevention</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Shielded Cloud</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/security/shielded-cloud/shielded-vm" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /security/shielded-cloud/shielded-vm" track-type="bookNav" track-name="click" track-metadata-eventdetail="/security/shielded-cloud/shielded-vm" ><span class="devsite-nav-text" tooltip>Shielded VM</span></a></li><li class="devsite-nav-item"><a href="/security/shielded-cloud/creating-shielded-images" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /security/shielded-cloud/creating-shielded-images" track-type="bookNav" track-name="click" track-metadata-eventdetail="/security/shielded-cloud/creating-shielded-images" ><span class="devsite-nav-text" tooltip>Creating custom shielded images</span></a></li><li class="devsite-nav-item"><a href="/security/shielded-cloud/retrieving-endorsement-key" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /security/shielded-cloud/retrieving-endorsement-key" track-type="bookNav" track-name="click" track-metadata-eventdetail="/security/shielded-cloud/retrieving-endorsement-key" ><span class="devsite-nav-text" tooltip>Retrieving endorsement key information</span></a></li><li class="devsite-nav-item"><a href="/security/shielded-cloud/automating-responses-integrity-failures" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /security/shielded-cloud/automating-responses-integrity-failures" track-type="bookNav" track-name="click" track-metadata-eventdetail="/security/shielded-cloud/automating-responses-integrity-failures" ><span class="devsite-nav-text" tooltip>Automating responses to integrity validation failures</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/security/data-loss-prevention/preventing-data-exfiltration" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /security/data-loss-prevention/preventing-data-exfiltration" track-type="bookNav" track-name="click" track-metadata-eventdetail="/security/data-loss-prevention/preventing-data-exfiltration" ><span class="devsite-nav-text" tooltip>Preventing data exfiltration</span></a></li><li class="devsite-nav-item"><a href="/security/compromised-credentials" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /security/compromised-credentials" track-type="bookNav" track-name="click" track-metadata-eventdetail="/security/compromised-credentials" ><span class="devsite-nav-text" tooltip>Handling compromised Google Cloud credentials</span></a></li><li class="devsite-nav-item"><a href="/security/data-loss-prevention/revoking-user-access" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /security/data-loss-prevention/revoking-user-access" track-type="bookNav" track-name="click" track-metadata-eventdetail="/security/data-loss-prevention/revoking-user-access" ><span class="devsite-nav-text" tooltip>Best practices for revoking access</span></a></li><li class="devsite-nav-item"><a href="/security/key-management-deep-dive" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /security/key-management-deep-dive" track-type="bookNav" track-name="click" track-metadata-eventdetail="/security/key-management-deep-dive" ><span class="devsite-nav-text" tooltip>Cloud Key Management Service deep dive</span></a></li><li class="devsite-nav-item"><a href="/solutions/securing-gcp-account-security-keys" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /solutions/securing-gcp-account-security-keys" track-type="bookNav" track-name="click" track-metadata-eventdetail="/solutions/securing-gcp-account-security-keys" ><span class="devsite-nav-text" tooltip>Securing your account with security keys</span></a></li><li class="devsite-nav-item"><a href="/solutions/connecting-securely" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /solutions/connecting-securely" track-type="bookNav" track-name="click" track-metadata-eventdetail="/solutions/connecting-securely" ><span class="devsite-nav-text" tooltip>Securely connecting to VM instances</span></a></li><li class="devsite-nav-item"><a href="/resource-manager/docs/organization-policy/develop-apps-constrained-environment" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /resource-manager/docs/organization-policy/develop-apps-constrained-environment" track-type="bookNav" track-name="click" track-metadata-eventdetail="/resource-manager/docs/organization-policy/develop-apps-constrained-environment" ><span class="devsite-nav-text" tooltip>Develop applications in a constrained environment</span></a></li><li class="devsite-nav-item"><a href="/security/security-design" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /security/security-design" track-type="bookNav" track-name="click" track-metadata-eventdetail="/security/security-design" ><span class="devsite-nav-text" tooltip>Google infrastructure security</span></a></li><li class="devsite-nav-item"><a href="/security/beyondprod" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /security/beyondprod" track-type="bookNav" track-name="click" track-metadata-eventdetail="/security/beyondprod" ><span class="devsite-nav-text" tooltip>BeyondProd: Cloud-native security</span></a></li><li class="devsite-nav-item"><a href="/security/binary-authorization-for-borg" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /security/binary-authorization-for-borg" track-type="bookNav" track-name="click" track-metadata-eventdetail="/security/binary-authorization-for-borg" ><span class="devsite-nav-text" tooltip>Binary Authorization for Borg</span></a></li><li class="devsite-nav-item"><a href="/security" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /security" track-type="bookNav" track-name="click" track-metadata-eventdetail="/security" ><span class="devsite-nav-text" tooltip>Google Cloud security overview</span></a></li><li class="devsite-nav-item"><a href="/docs/tutorials#security" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/tutorials#security" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/tutorials#security" ><span class="devsite-nav-text" tooltip>Security solutions</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Resource management</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/deployment-manager/overview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /deployment-manager/overview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/deployment-manager/overview" ><span class="devsite-nav-text" tooltip>Cloud Deployment Manager</span></a></li><li class="devsite-nav-item"><a href="/marketplace/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /marketplace/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/marketplace/docs" ><span class="devsite-nav-text" tooltip>Google Cloud Marketplace</span></a></li><li class="devsite-nav-item"><a href="/resource-manager/docs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /resource-manager/docs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/resource-manager/docs" ><span class="devsite-nav-text" tooltip>Resource Manager</span></a></li><li class="devsite-nav-item"><a href="/docs/tutorials#resource" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/tutorials#resource" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/tutorials#resource" ><span class="devsite-nav-text" tooltip>Resource management solutions</span></a></li></ul></div></li></ul></div></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Other supported languages</span> </div></li> <li class="devsite-nav-item"><a href="/dotnet" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /dotnet" track-type="bookNav" track-name="click" track-metadata-eventdetail="/dotnet" ><span class="devsite-nav-text" tooltip>C#</span></a></li> <li class="devsite-nav-item"><a href="/go" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /go" track-type="bookNav" track-name="click" track-metadata-eventdetail="/go" ><span class="devsite-nav-text" tooltip>Go</span></a></li> <li class="devsite-nav-item"><a href="/java" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /java" track-type="bookNav" track-name="click" track-metadata-eventdetail="/java" ><span class="devsite-nav-text" tooltip>Java</span></a></li> <li class="devsite-nav-item"><a href="/nodejs" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /nodejs" track-type="bookNav" track-name="click" track-metadata-eventdetail="/nodejs" ><span class="devsite-nav-text" tooltip>Node.js</span></a></li> <li class="devsite-nav-item"><a href="/python" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /python" track-type="bookNav" track-name="click" track-metadata-eventdetail="/python" ><span class="devsite-nav-text" tooltip>Python</span></a></li> <li class="devsite-nav-item"><a href="/ruby" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /ruby" track-type="bookNav" track-name="click" track-metadata-eventdetail="/ruby" ><span class="devsite-nav-text" tooltip>Ruby</span></a></li> </ul> <ul class="devsite-nav-list" menu="Technology areas" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/docs/ai-ml" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: AI and ML" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > AI and ML </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/application-development" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Application development" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Application development </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/application-hosting" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Application hosting" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Application hosting </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/compute-area" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Compute" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Compute </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/data" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Data analytics and pipelines" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Data analytics and pipelines </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/databases" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Databases" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Databases </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/dhm-cloud" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Distributed, hybrid, and multicloud" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Distributed, hybrid, and multicloud </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/generative-ai" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Generative AI" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Generative AI </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/industry" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Industry solutions" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Industry solutions </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/networking" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Networking" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Networking </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/observability" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Observability and monitoring" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Observability and monitoring </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/security" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Security" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Security </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/storage" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Storage" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Storage </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Cross-product tools" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/docs/access-resources" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Access and resources management" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Access and resources management </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/costs-usage" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Costs and usage management" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Costs and usage management </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/devtools" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Cloud SDK, languages, frameworks, and tools" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Cloud SDK, languages, frameworks, and tools </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/iac" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Infrastructure as code" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Infrastructure as code </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/migration" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Migration" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Migration </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Related sites" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Cloud Home" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Cloud Home </span> </a> </li> <li class="devsite-nav-item"> <a href="/free" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Free Trial and Free Tier" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Free Trial and Free Tier </span> </a> </li> <li class="devsite-nav-item"> <a href="/architecture" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Architecture Center" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Architecture Center </span> </a> </li> <li class="devsite-nav-item"> <a href="https://cloud.google.com/blog" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Blog" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Blog </span> </a> </li> <li class="devsite-nav-item"> <a href="/contact" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Contact Sales" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Contact Sales </span> </a> </li> <li class="devsite-nav-item"> <a href="/developers" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Cloud Developer Center" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Cloud Developer Center </span> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Developer Center" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Developer Center </span> </a> </li> <li class="devsite-nav-item"> <a href="https://console.cloud.google.com/marketplace" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Cloud Marketplace" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Cloud Marketplace </span> </a> </li> <li class="devsite-nav-item"> <a href="/marketplace/docs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Cloud Marketplace Documentation" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Cloud Marketplace Documentation </span> </a> </li> <li class="devsite-nav-item"> <a href="https://www.cloudskillsboost.google/paths" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Cloud Skills Boost" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Cloud Skills Boost </span> </a> </li> <li class="devsite-nav-item"> <a href="/solutions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Cloud Solution Center" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Cloud Solution Center </span> </a> </li> <li class="devsite-nav-item"> <a href="/support-hub" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Cloud Support" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Cloud Support </span> </a> </li> <li class="devsite-nav-item"> <a href="https://www.youtube.com/@googlecloudtech" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Cloud Tech Youtube Channel" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Cloud Tech Youtube Channel </span> </a> </li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" class="devsite-main-content" has-book-nav has-sidebar > <div class="devsite-sidebar"> <div class="devsite-sidebar-content"> <devsite-toc class="devsite-nav" role="navigation" aria-label="On this page" depth="2" scrollbars ></devsite-toc> <devsite-recommendations-sidebar class="nocontent devsite-nav"> </devsite-recommendations-sidebar> </div> </div> <devsite-content> <article class="devsite-article"> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://cloud.google.com/" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Google Cloud" > Home </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://cloud.google.com/php" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="PHP" > PHP </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://cloud.google.com/php/docs" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="3" track-type="globalNav" track-name="breadcrumb" track-metadata-position="3" track-metadata-eventdetail="PHP" > Documentation </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://cloud.google.com/php/getting-started" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="4" track-type="globalNav" track-name="breadcrumb" track-metadata-position="4" track-metadata-eventdetail="" > Guides </a> </li> </ul> <devsite-thumb-rating position="header"> </devsite-thumb-rating> </div> <devsite-feedback position="header" project-name="PHP" product-id="1632431" bucket="documentation" context="" version="t-devsite-webserver-20241114-r00-rc02.464922260396498922" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="header" class="nocontent" project-icon="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/cloud/images/favicons/onecloud/super_cloud.png" > <button> Send feedback </button> </devsite-feedback> <h1 class="devsite-page-title" tabindex="-1"> Background processing with PHP </h1> <devsite-feature-tooltip ack-key="AckCollectionsBookmarkTooltipDismiss" analytics-category="Site-Wide Custom Events" analytics-action-show="Callout Profile displayed" analytics-action-close="Callout Profile dismissed" analytics-label="Create Collection Callout" class="devsite-page-bookmark-tooltip nocontent" dismiss-button="true" id="devsite-collections-dropdown" dismiss-button-text="Dismiss" close-button-text="Got it"> <devsite-bookmark></devsite-bookmark> <span slot="popout-heading"> Stay organized with collections </span> <span slot="popout-contents"> Save and categorize content based on your preferences. </span> </devsite-feature-tooltip> <div class="devsite-page-title-meta"><devsite-view-release-notes></devsite-view-release-notes></div> <devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded > </devsite-toc> <div class="devsite-article-body clearfix "> <div class="tutorial tutorial-lesson"> <hr class="cloud-divider"> <section id="overview"> <p>Many apps need to do background processing outside of the context of a web request. This tutorial creates a web app that lets users input text to translate, and then displays a list of previous translations. The translation is done in a background process to avoid blocking the user&#39;s request.</p> <p>The following diagram illustrates the translation request process.</p> <!-- https://docs.google.com/presentation/d/1Dak0f2PonCIxO98pP5MfTqDzqG3biZ324YtxpVwZ-tg/edit#slide=id.g583fc73f07_0_121 --> <p><img src="/static/languages/images/background-event-architecture-gae-with-cloud-run.svg" alt="Diagram of architecture."></p> <p>Here is the sequence of events for how the tutorial app works:</p> <ol> <li>Visit the web page to see a list of previous translations, stored in Firestore.</li> <li>Request a translation of text by entering an HTML form.</li> <li>The translation request is published to Pub/Sub.</li> <li>A Cloud Run app receives the Pub/Sub message.</li> <li>The Cloud Run app uses Cloud Translation to translate the text.</li> <li>The Cloud Run app stores the result in Firestore.</li> </ol> <p>This tutorial is intended for anyone who is interested in learning about background processing with Google Cloud. No prior experience is required with Pub/Sub, Firestore, App Engine, or Cloud Run. However, to understand all of the code, some experience with PHP, JavaScript, and HTML is helpful.</p> </section> <section id="objectives"> <h2 id="objectives" data-text="Objectives" tabindex="-1">Objectives</h2> <ul> <li>Understand and deploy Cloud Run services.</li> <li>Understand and deploy an App Engine app.</li> <li>Try the app.</li> </ul> </section> <section id="costs"> <h2 id="costs" data-text="Costs" tabindex="-1">Costs</h2> <p> In this document, you use the following billable components of Google Cloud: </p> <ul> <li><a href="/run/pricing" track-type="php" track-name="internalLink" track-metadata-position="body">Cloud Run</a></li> <li><a href="/appengine/pricing" track-type="php" track-name="internalLink" track-metadata-position="body">App Engine</a></li> <li><a href="/firestore/pricing" track-type="php" track-name="internalLink" track-metadata-position="body">Firestore</a></li> <li><a href="/pubsub/pricing" track-type="php" track-name="internalLink" track-metadata-position="body">Pub/Sub</a></li> <li><a href="/translate/pricing" track-type="php" track-name="internalLink" track-metadata-position="body">Cloud Translation</a></li> </ul> <p> To generate a cost estimate based on your projected usage, use the <a href="/products/calculator" track-type="commonIncludes" track-name="pricingCalculator">pricing calculator</a>. <cloudx-free-trial-eligible-content> <slot slot="eligible"> New Google Cloud users might be eligible for a <a href="/free" track-type="freeTrial" track-name="consoleLink" track-metadata-position="prerequisites" track-metadata-end-goal="signUp" target="_blank">free trial</a>. </slot> <slot slot="ineligible"> </slot> </cloudx-free-trial-eligible-content> </p> <p>When you finish the tasks that are described in this document, you can avoid continued billing by deleting the resources that you created. For more information, see <a href="#clean-up" track-type="tutorial" track-name="internalLink" track-metadata-position="body">Clean up</a>.</p> </section> <section id="prerequisites"> <h2 id="before-you-begin" data-text="Before you begin" tabindex="-1">Before you begin</h2> <ol> <cloudx-free-trial-eligible-content> <slot slot="eligible"> <li> Sign in to your Google Cloud account. If you're new to Google Cloud, <a href="https://console.cloud.google.com/freetrial" target="console" track-type="commonIncludes" track-name="createAnAccount" track-metadata-position="prereqs" track-metadata-eventdetail="https://console.cloud.google.com/freetrial" track-metadata-link-destination="https://console.cloud.google.com/freetrial"> create an account</a> to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads. </li> <li> <p>In the Google Cloud console, on the project selector page, select or create a Google Cloud project.</p> <aside class="note"><b>Note</b>: If you don't plan to keep the resources that you create in this procedure, create a project instead of selecting an existing project. After you finish these steps, you can delete the project, removing all resources associated with the project.</aside> <p><a href="https://console.cloud.google.com/projectselector2/home/dashboard" target="console" track-type="commonIncludes" track-name="consoleLink" track-metadata-end-goal="createProject" class="button button-primary">Go to project selector</a></p> </li> <li> <p> <a href="/billing/docs/how-to/verify-billing-enabled#confirm_billing_is_enabled_on_a_project" target="_blank" track-type="commonIncludes" track-name="supportLink" track-metadata-end-goal="enableBilling" >Make sure that billing is enabled for your Google Cloud project</a>. </p> </li> <li> <p> Enable the Firestore, Cloud Run, Pub/Sub, and Cloud Translation APIs. </p><p><a href="https://console.cloud.google.com/flows/enableapi?apiid=firestore.googleapis.com,run.googleapis.com,pubsub.googleapis.com,translate.googleapis.com" target="console" track-type="commonIncludes" track-name="consoleLink" track-metadata-end-goal="enableAPI" class="button button-primary">Enable the APIs</a></p> </li> <style> .henhouse-text { font-size:85%; padding:2px 4px; line-height:1; } </style> </slot> <slot slot="ineligible"> <li> <p>In the Google Cloud console, on the project selector page, select or create a Google Cloud project.</p> <aside class="note"><b>Note</b>: If you don't plan to keep the resources that you create in this procedure, create a project instead of selecting an existing project. After you finish these steps, you can delete the project, removing all resources associated with the project.</aside> <p><a href="https://console.cloud.google.com/projectselector2/home/dashboard" target="console" track-type="commonIncludes" track-name="consoleLink" track-metadata-end-goal="createProject" class="button button-primary">Go to project selector</a></p> </li> <li> <p> <a href="/billing/docs/how-to/verify-billing-enabled#confirm_billing_is_enabled_on_a_project" target="_blank" track-type="commonIncludes" track-name="supportLink" track-metadata-end-goal="enableBilling" >Make sure that billing is enabled for your Google Cloud project</a>. </p> </li> <li> <p> Enable the Firestore, Cloud Run, Pub/Sub, and Cloud Translation APIs. </p><p><a href="https://console.cloud.google.com/flows/enableapi?apiid=firestore.googleapis.com,run.googleapis.com,pubsub.googleapis.com,translate.googleapis.com" target="console" track-type="commonIncludes" track-name="consoleLink" track-metadata-end-goal="enableAPI" class="button button-primary">Enable the APIs</a></p> </li> <style> .henhouse-text { font-size:85%; padding:2px 4px; line-height:1; } </style> </slot> </cloudx-free-trial-eligible-content> <li> <p> In the Google Cloud console, open the app in <a href="/shell">Cloud Shell</a>. </p> <p> <a href="/console/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/getting-started-php&working_dir=background-processing" target="console" track-name="internalLink" track-type="php" track-metadata-position="body" class="button button-primary" > Go to Cloud Shell </a> </p> <p> Cloud Shell provides command-line access to your cloud resources directly from the browser. Open Cloud Shell in your browser and click <strong>Proceed</strong> to download the sample code and change into the app directory. </p> </li> <li> In Cloud Shell, configure the <code translate="no" dir="ltr">gcloud</code> tool to use your Google Cloud project: <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash"><span class="devsite-syntax-c1"># Configure gcloud for your project</span> gcloud<span class="devsite-syntax-w"> </span>config<span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">set</span><span class="devsite-syntax-w"> </span>project<span class="devsite-syntax-w"> </span><var translate="no">YOUR_PROJECT_ID</var></pre></devsite-code> </li> </ol> </section> <div id="tutorial-content"> <section class="tutorial-content"> <!-- TODO: If needed, define this block in the .md file. --> <h2 id="understanding_the_backend" data-text="Understanding the Cloud Run backend" tabindex="-1">Understanding the Cloud Run backend</h2> <p>You define a single PHP function <code translate="no" dir="ltr">translateString</code>, and configure your Cloud Run service to respond to a Pub/Sub message by invoking this function.</p> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/getting-started-php/background-processing/backend/index.php/HEAD/getting_started_background_translate" data-code-snippet="true" data-github-includecode-link="https://github.com/GoogleCloudPlatform/getting-started-php/blob/HEAD/background-processing/backend/index.php" data-github-path="GoogleCloudPlatform/getting-started-php/background-processing/backend/index.php" data-git-revision="HEAD" data-region-tag="getting_started_background_translate" dir="ltr" is-upgraded syntax="PHP"><code translate="no" dir="ltr"><span class="devsite-syntax-x">use Google\Cloud\Firestore\FirestoreClient;</span> <span class="devsite-syntax-x">use Google\Cloud\Firestore\Transaction;</span> <span class="devsite-syntax-x">use Google\Cloud\Translate\TranslateClient;</span> <span class="devsite-syntax-x">/**</span> <span class="devsite-syntax-x"> * @param array $data {</span> <span class="devsite-syntax-x"> * The PubSub message data containing text and target language.</span> <span class="devsite-syntax-x"> *</span> <span class="devsite-syntax-x"> * @type string $text</span> <span class="devsite-syntax-x"> * The full text to translate.</span> <span class="devsite-syntax-x"> * @type string $language</span> <span class="devsite-syntax-x"> * The target language for the translation.</span> <span class="devsite-syntax-x"> * }</span> <span class="devsite-syntax-x"> */</span> <span class="devsite-syntax-x">function translateString(array $data)</span> <span class="devsite-syntax-x">{</span> <span class="devsite-syntax-x"> if (empty($data['language']) || empty($data['text'])) {</span> <span class="devsite-syntax-x"> throw new Exception('Error parsing translation data');</span> <span class="devsite-syntax-x"> }</span> <span class="devsite-syntax-x"> $firestore = new FirestoreClient();</span> <span class="devsite-syntax-x"> $translate = new TranslateClient();</span> <span class="devsite-syntax-x"> $translation = [</span> <span class="devsite-syntax-x"> 'original' =&gt; $data['text'],</span> <span class="devsite-syntax-x"> 'lang' =&gt; $data['language'],</span> <span class="devsite-syntax-x"> ];</span> <span class="devsite-syntax-x"> $docId = sprintf('%s:%s', $data['language'], base64_encode($data['text']));</span> <span class="devsite-syntax-x"> $docRef = $firestore-&gt;collection('translations')-&gt;document($docId);</span> <span class="devsite-syntax-x"> $firestore-&gt;runTransaction(</span> <span class="devsite-syntax-x"> function (Transaction $transaction) use ($translate, $translation, $docRef) {</span> <span class="devsite-syntax-x"> $snapshot = $transaction-&gt;snapshot($docRef);</span> <span class="devsite-syntax-x"> if ($snapshot-&gt;exists()) {</span> <span class="devsite-syntax-x"> return; // Do nothing if the document already exists</span> <span class="devsite-syntax-x"> }</span> <span class="devsite-syntax-x"> $result = $translate-&gt;translate($translation['original'], [</span> <span class="devsite-syntax-x"> 'target' =&gt; $translation['lang'],</span> <span class="devsite-syntax-x"> ]);</span> <span class="devsite-syntax-x"> $transaction-&gt;set($docRef, $translation + [</span> <span class="devsite-syntax-x"> 'translated' =&gt; $result['text'],</span> <span class="devsite-syntax-x"> 'originalLang' =&gt; $result['source'],</span> <span class="devsite-syntax-x"> ]);</span> <span class="devsite-syntax-x"> }</span> <span class="devsite-syntax-x"> );</span> <span class="devsite-syntax-x"> echo "Done.";</span> <span class="devsite-syntax-x">}</span></code></pre></devsite-code> </div> <ol> <li><p>The function must import several dependencies in order to connect with Firestore and Translation.</p> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/getting-started-php/background-processing/backend/index.php/HEAD/getting_started_background_translate_setup" data-code-snippet="true" data-github-includecode-link="https://github.com/GoogleCloudPlatform/getting-started-php/blob/HEAD/background-processing/backend/index.php" data-github-path="GoogleCloudPlatform/getting-started-php/background-processing/backend/index.php" data-git-revision="HEAD" data-region-tag="getting_started_background_translate_setup" dir="ltr" is-upgraded syntax="PHP"><code translate="no" dir="ltr"><span class="devsite-syntax-x">use Google\Cloud\Firestore\FirestoreClient;</span> <span class="devsite-syntax-x">use Google\Cloud\Firestore\Transaction;</span> <span class="devsite-syntax-x">use Google\Cloud\Translate\TranslateClient;</span> </code></pre></devsite-code> </div> </li> <li><p>Cloud Run starts by initializing the Firestore and Pub/Sub clients. Then, it parses the Pub/Sub message data to get the text to translate and the desired target language.</p> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/getting-started-php/background-processing/backend/index.php/HEAD/getting_started_background_translate_init" data-code-snippet="true" data-github-includecode-link="https://github.com/GoogleCloudPlatform/getting-started-php/blob/HEAD/background-processing/backend/index.php" data-github-path="GoogleCloudPlatform/getting-started-php/background-processing/backend/index.php" data-git-revision="HEAD" data-region-tag="getting_started_background_translate_init" dir="ltr" is-upgraded syntax="PHP"><code translate="no" dir="ltr"><span class="devsite-syntax-x">$firestore = new FirestoreClient();</span> <span class="devsite-syntax-x">$translate = new TranslateClient();</span> <span class="devsite-syntax-x">$translation = [</span> <span class="devsite-syntax-x"> 'original' =&gt; $data['text'],</span> <span class="devsite-syntax-x"> 'lang' =&gt; $data['language'],</span> <span class="devsite-syntax-x">];</span></code></pre></devsite-code> </div> </li> <li><p>The Translation API is used to translate the string to the desired language.</p> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/getting-started-php/background-processing/backend/index.php/HEAD/getting_started_background_translate_string" data-code-snippet="true" data-github-includecode-link="https://github.com/GoogleCloudPlatform/getting-started-php/blob/HEAD/background-processing/backend/index.php" data-github-path="GoogleCloudPlatform/getting-started-php/background-processing/backend/index.php" data-git-revision="HEAD" data-region-tag="getting_started_background_translate_string" dir="ltr" is-upgraded syntax="PHP"><code translate="no" dir="ltr"><span class="devsite-syntax-x">$result = $translate-&gt;translate($translation['original'], [</span> <span class="devsite-syntax-x"> 'target' =&gt; $translation['lang'],</span> <span class="devsite-syntax-x">]);</span></code></pre></devsite-code> </div> </li> <li><p>The function comes up with a unique name for the translation request to make sure we don&#39;t store any duplicate translations. Then, it translates in a Firestore transaction to make sure concurrent executions don&#39;t accidentally run the same translation twice.</p> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/getting-started-php/background-processing/backend/index.php/HEAD/getting_started_background_translate_transaction" data-code-snippet="true" data-github-includecode-link="https://github.com/GoogleCloudPlatform/getting-started-php/blob/HEAD/background-processing/backend/index.php" data-github-path="GoogleCloudPlatform/getting-started-php/background-processing/backend/index.php" data-git-revision="HEAD" data-region-tag="getting_started_background_translate_transaction" dir="ltr" is-upgraded syntax="PHP"><code translate="no" dir="ltr"><span class="devsite-syntax-x">$docId = sprintf('%s:%s', $data['language'], base64_encode($data['text']));</span> <span class="devsite-syntax-x">$docRef = $firestore-&gt;collection('translations')-&gt;document($docId);</span> <span class="devsite-syntax-x">$firestore-&gt;runTransaction(</span> <span class="devsite-syntax-x"> function (Transaction $transaction) use ($translate, $translation, $docRef) {</span> <span class="devsite-syntax-x"> $snapshot = $transaction-&gt;snapshot($docRef);</span> <span class="devsite-syntax-x"> if ($snapshot-&gt;exists()) {</span> <span class="devsite-syntax-x"> return; // Do nothing if the document already exists</span> <span class="devsite-syntax-x"> }</span> <span class="devsite-syntax-x"> $result = $translate-&gt;translate($translation['original'], [</span> <span class="devsite-syntax-x"> 'target' =&gt; $translation['lang'],</span> <span class="devsite-syntax-x"> ]);</span> <span class="devsite-syntax-x"> $transaction-&gt;set($docRef, $translation + [</span> <span class="devsite-syntax-x"> 'translated' =&gt; $result['text'],</span> <span class="devsite-syntax-x"> 'originalLang' =&gt; $result['source'],</span> <span class="devsite-syntax-x"> ]);</span> <span class="devsite-syntax-x"> }</span> <span class="devsite-syntax-x">);</span></code></pre></devsite-code> </div> </li> </ol> <h2 id="building_and_deploying_the_backend" data-text="Building and Deploying the Cloud Run backend" tabindex="-1">Building and Deploying the Cloud Run backend</h2> <ul> <li><p>Build the Cloud Run app in the <code translate="no" dir="ltr">backend</code> directory:</p> <div></div><devsite-code><pre class="devsite-click-to-copy notranslate" dir="ltr" is-upgraded syntax="Bash">gcloud<span class="devsite-syntax-w"> </span>builds<span class="devsite-syntax-w"> </span>submit<span class="devsite-syntax-w"> </span>backend/<span class="devsite-syntax-w"> </span><span class="devsite-syntax-se">\</span> <span class="devsite-syntax-w"> </span>--tag<span class="devsite-syntax-w"> </span>gcr.io/<var translate="no">PROJECT_ID</var>/background-function</pre></devsite-code></li> <li><p>Deploy the Cloud Run app using the image tag from the previous step:</p> <div></div><devsite-code><pre class="devsite-click-to-copy notranslate" dir="ltr" is-upgraded syntax="Bash">gcloud<span class="devsite-syntax-w"> </span>run<span class="devsite-syntax-w"> </span>deploy<span class="devsite-syntax-w"> </span>background-processing-function<span class="devsite-syntax-w"> </span>--platform<span class="devsite-syntax-w"> </span>managed<span class="devsite-syntax-w"> </span><span class="devsite-syntax-se">\</span> <span class="devsite-syntax-w"> </span>--image<span class="devsite-syntax-w"> </span>gcr.io/<var translate="no">PROJECT_ID</var>/background-function<span class="devsite-syntax-w"> </span>--region<span class="devsite-syntax-w"> </span><var translate="no">REGION</var></pre></devsite-code> <p>Where <code translate="no" dir="ltr"><var translate="no">REGION</var></code> is a <a href="https://cloud.google.com/compute/docs/regions-zones/">Google Cloud region</a>.</p></li> <li><p>When your deployment finishes, you will see a URL for your deployed app in the command output. For example:</p> <div></div><devsite-code><pre translate="no" dir="ltr" is-upgraded>Service [background-processing-function] revision [default-00002-vav] has been deployed and is serving 100 percent of traffic at https://default-c457u4v2ma-uc.a.run.app</pre></devsite-code> <p>Copy this URL for the next step.</p></li> </ul> <h2 id="setting_up_the_subscription" data-text="Setting up the Pub/Sub subscription" tabindex="-1">Setting up the Pub/Sub subscription</h2> <p>Your Cloud Run app will receive messages from Pub/Sub whenever a message is published to the topic <code translate="no" dir="ltr">translate</code>.</p> <p>A built-in authentication check ensures the Pub/Sub message contains a valid authorization token from a service account which has permission to invoke your Cloud Run backend.</p> <p>The next steps walk you through setting up the Pub/Sub topic, subscription, and service account for making authentiated calls to your Cloud Run backend. Read more about this integration in <a href="https://cloud.google.com/run/docs/triggering/pubsub-push">Authenticating service-to-service</a>.</p> <ol> <li><p>Create the topic <code translate="no" dir="ltr">translate</code> for publishing new translation requests:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="PHP"><code translate="no" dir="ltr"><span class="devsite-syntax-x">gcloud pubsub topics create translate</span> </code></pre></devsite-code></li> <li><p>Enable your project to create Pub/Sub authentication tokens:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash">gcloud<span class="devsite-syntax-w"> </span>projects<span class="devsite-syntax-w"> </span>add-iam-policy-binding<span class="devsite-syntax-w"> </span><var translate="no">PROJECT_ID</var><span class="devsite-syntax-w"> </span><span class="devsite-syntax-se">\</span> <span class="devsite-syntax-w"> </span>--member<span class="devsite-syntax-o">=</span>serviceAccount:service-<var translate="no">PROJECT_NUMBER</var>@gcp-sa-pubsub.iam.gserviceaccount.com<span class="devsite-syntax-w"> </span><span class="devsite-syntax-se">\</span> <span class="devsite-syntax-w"> </span>--role<span class="devsite-syntax-o">=</span>roles/iam.serviceAccountTokenCreator</pre></devsite-code> <p>Where <code translate="no" dir="ltr"><var translate="no">PROJECT_NUMBER</var></code> is your Google Cloud project number, which can be found by running <code translate="no" dir="ltr">gcloud projects describe <var translate="no">PROJECT_ID</var> | grep projectNumber</code>.</p></li> <li><p>Create or select a <a href="/iam/docs/understanding-service-accounts">service account</a> to represent the Pub/Sub subscription identity.</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash">gcloud<span class="devsite-syntax-w"> </span>iam<span class="devsite-syntax-w"> </span>service-accounts<span class="devsite-syntax-w"> </span>create<span class="devsite-syntax-w"> </span>cloud-run-pubsub-invoker<span class="devsite-syntax-w"> </span><span class="devsite-syntax-se">\</span> <span class="devsite-syntax-w"> </span>--display-name<span class="devsite-syntax-w"> </span><span class="devsite-syntax-s2">"Cloud Run Pub/Sub Invoker"</span></pre></devsite-code> <p><strong>Note</strong>: You can use <code translate="no" dir="ltr">cloud-run-pubsub-invoker</code> or replace with a name unique within your Google Cloud project.</p></li> <li><p>Give the invoker service account permission to invoke your <code translate="no" dir="ltr">background-processing-function</code> service:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash">gcloud<span class="devsite-syntax-w"> </span>run<span class="devsite-syntax-w"> </span>services<span class="devsite-syntax-w"> </span>add-iam-policy-binding<span class="devsite-syntax-w"> </span>background-processing-function<span class="devsite-syntax-w"> </span><span class="devsite-syntax-se">\</span> <span class="devsite-syntax-w"> </span>--member<span class="devsite-syntax-o">=</span>serviceAccount:cloud-run-pubsub-invoker@<var translate="no">PROJECT_ID</var>.iam.gserviceaccount.com<span class="devsite-syntax-w"> </span><span class="devsite-syntax-se">\</span> <span class="devsite-syntax-w"> </span>--role<span class="devsite-syntax-o">=</span>roles/run.invoker<span class="devsite-syntax-w"> </span>--platform<span class="devsite-syntax-w"> </span>managed<span class="devsite-syntax-w"> </span>--region<span class="devsite-syntax-w"> </span><var translate="no">REGION</var></pre></devsite-code> <p>It can take several minutes for the Identity and Access Management changes to propagate. In the meantime you might see <code translate="no" dir="ltr">HTTP 403</code> errors in the service logs.</p></li> <li><p>Create a Pub/Sub subscription with the service account:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash">gcloud<span class="devsite-syntax-w"> </span>pubsub<span class="devsite-syntax-w"> </span>subscriptions<span class="devsite-syntax-w"> </span>create<span class="devsite-syntax-w"> </span>run-translate-string<span class="devsite-syntax-w"> </span>--topic<span class="devsite-syntax-w"> </span>translate<span class="devsite-syntax-w"> </span><span class="devsite-syntax-se">\</span> <span class="devsite-syntax-w"> </span>--push-endpoint<span class="devsite-syntax-o">=</span><var translate="no">CLOUD_RUN_URL</var><span class="devsite-syntax-w"> </span><span class="devsite-syntax-se">\</span> <span class="devsite-syntax-w"> </span>--push-auth-service-account<span class="devsite-syntax-o">=</span>cloud-run-pubsub-invoker@<var translate="no">PROJECT_ID</var>.iam.gserviceaccount.com</pre></devsite-code> <p>Where <code translate="no" dir="ltr"><var translate="no">CLOUD_RUN_URL</var></code> is the HTTPS URL you copied after <a href="#building_and_deploying_the_backend">building and deploying your backend</a>.</p> <p>The <code translate="no" dir="ltr">--push-account-service-account</code> flag activates the Pub/Sub push functionality for <a href="/pubsub/docs/push#authentication_and_authorization">Authentication and authorization</a>.</p> <p>Your Cloud Run service domain is automatically registered for use with Pub/Sub subscriptions.</p></li> </ol> <h2 id="understanding-the-app" data-text="Understanding the app" tabindex="-1">Understanding the app</h2> <p> There are two main components for the web app: </p> <ul> <li> A PHP HTTP server to handle web requests. The server has the following two endpoints: <ul> <li> <code translate="no" dir="ltr">/</code>: Lists all of the existing translations and shows a form users can submit to request new translations. </li> <li> <code translate="no" dir="ltr">/request-translation</code>: Form submissions are sent to this endpoint, which publishes the request to Pub/Sub to be translated asynchronously. </li> </ul> </li> <li> An HTML template that is filled in with the existing translations by the PHP server. </li> </ul> <h3 id="the-http-server" data-text=" The HTTP server " tabindex="-1"> The HTTP server </h3> <ul> <li><p>In the <code translate="no" dir="ltr">app</code> directory, <code translate="no" dir="ltr">index.php</code> starts by setting up the <a href="https://lumen.laravel.com/" track-type="php" track-name="internalLink" track-metadata-position=" body" class="external">Lumen</a> app and registering HTTP handlers:</p> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/getting-started-php/background-processing/app/index.php/HEAD/getting_started_background_app_main" data-code-snippet="true" data-github-includecode-link="https://github.com/GoogleCloudPlatform/getting-started-php/blob/HEAD/background-processing/app/index.php" data-github-path="GoogleCloudPlatform/getting-started-php/background-processing/app/index.php" data-git-revision="HEAD" data-region-tag="getting_started_background_app_main" dir="ltr" is-upgraded syntax="PHP"><code translate="no" dir="ltr"><span class="devsite-syntax-x">$app = new Laravel\Lumen\Application(__DIR__);</span> <span class="devsite-syntax-x">$app-&gt;router-&gt;group([</span> <span class="devsite-syntax-x">], function ($router) {</span> <span class="devsite-syntax-x"> require __DIR__ . '/routes/web.php';</span> <span class="devsite-syntax-x">});</span> <span class="devsite-syntax-x">$app-&gt;run();</span></code></pre></devsite-code> </div> </li> <li><p>The index handler (<code translate="no" dir="ltr">/</code>) gets all existing translations from Firestore and renders a template with the list:</p> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/getting-started-php/background-processing/app/routes/web.php/HEAD/getting_started_background_app_list" data-code-snippet="true" data-github-includecode-link="https://github.com/GoogleCloudPlatform/getting-started-php/blob/HEAD/background-processing/app/routes/web.php" data-github-path="GoogleCloudPlatform/getting-started-php/background-processing/app/routes/web.php" data-git-revision="HEAD" data-region-tag="getting_started_background_app_list" dir="ltr" is-upgraded syntax="PHP"><code translate="no" dir="ltr"><span class="devsite-syntax-x">/**</span> <span class="devsite-syntax-x"> * Homepage listing all requested translations and their results.</span> <span class="devsite-syntax-x"> */</span> <span class="devsite-syntax-x">$router-&gt;get('/', function (Request $request) use ($projectId) {</span> <span class="devsite-syntax-x"> $firestore = new FirestoreClient([</span> <span class="devsite-syntax-x"> 'projectId' =&gt; $projectId,</span> <span class="devsite-syntax-x"> ]);</span> <span class="devsite-syntax-x"> $translations = $firestore-&gt;collection('translations')-&gt;documents();</span> <span class="devsite-syntax-x"> return view('home', ['translations' =&gt; $translations]);</span> <span class="devsite-syntax-x">});</span></code></pre></devsite-code> </div> </li> <li><p>The request translation handler, registered at <code translate="no" dir="ltr">/request-translation</code>, parses the HTML form submission, validates the request, and publishes a message to Pub/Sub:</p> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/getting-started-php/background-processing/app/routes/web.php/HEAD/getting_started_background_app_request" data-code-snippet="true" data-github-includecode-link="https://github.com/GoogleCloudPlatform/getting-started-php/blob/HEAD/background-processing/app/routes/web.php" data-github-path="GoogleCloudPlatform/getting-started-php/background-processing/app/routes/web.php" data-git-revision="HEAD" data-region-tag="getting_started_background_app_request" dir="ltr" is-upgraded syntax="PHP"><code translate="no" dir="ltr"><span class="devsite-syntax-x">/**</span> <span class="devsite-syntax-x"> * Endpoint which publishes a PubSub request for a new translation.</span> <span class="devsite-syntax-x"> */</span> <span class="devsite-syntax-x">$router-&gt;post('/request-translation', function (Request $request) use ($projectId) {</span> <span class="devsite-syntax-x"> $acceptableLanguages = ['de', 'en', 'es', 'fr', 'ja', 'sw'];</span> <span class="devsite-syntax-x"> if (!in_array($lang = $request-&gt;get('lang'), $acceptableLanguages)) {</span> <span class="devsite-syntax-x"> throw new Exception('Unsupported Language: ' . $lang);</span> <span class="devsite-syntax-x"> }</span> <span class="devsite-syntax-x"> if (!$text = $request-&gt;get('v')) {</span> <span class="devsite-syntax-x"> throw new Exception('No text to translate');</span> <span class="devsite-syntax-x"> }</span> <span class="devsite-syntax-x"> $pubsub = new PubSubClient([</span> <span class="devsite-syntax-x"> 'projectId' =&gt; $projectId,</span> <span class="devsite-syntax-x"> ]);</span> <span class="devsite-syntax-x"> $topic = $pubsub-&gt;topic('translate');</span> <span class="devsite-syntax-x"> $topic-&gt;publish(['data' =&gt; json_encode([</span> <span class="devsite-syntax-x"> 'language' =&gt; $lang,</span> <span class="devsite-syntax-x"> 'text' =&gt; $text,</span> <span class="devsite-syntax-x"> ])]);</span> <span class="devsite-syntax-x"> return '';</span> <span class="devsite-syntax-x">});</span></code></pre></devsite-code> </div> </li> </ul> <h3 id="the-html-template" data-text=" The HTML template " tabindex="-1"> The HTML template </h3> <p> The HTML template is the basis for the HTML page shown to the user so they can see previous translations and request new ones. The template is filled in by the HTTP server with the list of existing translations. </p> <ul> <li> The <code translate="no" dir="ltr">&lt;head&gt;</code> element of the HTML template includes metadata, style sheets, and JavaScript for the page: <!-- TODO: Define this block in the .md file. --> <p> The page pulls in <a href="https://getmdl.io/" track-type="php" track-name="externalLink" track-metadata-position="body" class="external">Material Design Lite (MDL)</a> CSS and JavaScript assets. MDL lets you add a <a href="https://material.io/design/" track-type="php" track-name="externalLink" track-metadata-position="body" class="external">Material Design</a> look and feel to your websites. </p> <p> The page uses <a href="https://jquery.com/" track-type="php" track-name="externalLink" track-metadata-position="body" class="external">JQuery</a> to wait for the document to finish loading and set a form submission handler. Whenever the request translation form is submitted, the page does minimal form validation to check that the value isn't empty, and then sends an asynchronous request to the <code translate="no" dir="ltr">/request-translation</code> endpoint. </p> <p> Finally, an <a href="https://getmdl.io/components/#snackbar-section" track-type="php" track-name="externalLink" track-metadata-position="body" class="external">MDL snackbar</a> appears to indicate if the request was successful or if it encountered an error. </p> </li> <li> The HTML body of the page uses an <a href="https://getmdl.io/components/index.html#layout-section" track-type="php" track-name="externalLink" track-metadata-position="body" class="external">MDL layout</a> and several <a href="https://getmdl.io/components/index.html" track-type="php" track-name="externalLink" track-metadata-position="body" class="external">MDL components</a> to display a list of translations and a form to request additional translations: <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/getting-started-php/background-processing/app/resources/views/home.php/HEAD/getting_started_background_html" data-code-snippet="true" data-github-includecode-link="https://github.com/GoogleCloudPlatform/getting-started-php/blob/HEAD/background-processing/app/resources/views/home.php" data-github-path="GoogleCloudPlatform/getting-started-php/background-processing/app/resources/views/home.php" data-git-revision="HEAD" data-region-tag="getting_started_background_html" dir="ltr" is-upgraded syntax="PHP"><code translate="no" dir="ltr">&lt;<span class="devsite-syntax-x">body</span>&gt; <span class="devsite-syntax-x"> &lt;div class="mdl-layout mdl-js-layout mdl-layout--fixed-header"&gt;</span> <span class="devsite-syntax-x"> &lt;header class="mdl-layout__header"&gt;</span> <span class="devsite-syntax-x"> &lt;div class="mdl-layout__header-row"&gt;</span> <span class="devsite-syntax-x"> &lt;!-- Title --&gt;</span> <span class="devsite-syntax-x"> &lt;span class="mdl-layout-title"&gt;Translate with Background Processing&lt;/span&gt;</span> <span class="devsite-syntax-x"> &lt;/div&gt;</span> <span class="devsite-syntax-x"> &lt;/header&gt;</span> <span class="devsite-syntax-x"> &lt;main class="mdl-layout__content"&gt;</span> <span class="devsite-syntax-x"> &lt;div class="page-content"&gt;</span> <span class="devsite-syntax-x"> &lt;div class="mdl-grid"&gt;</span> <span class="devsite-syntax-x"> &lt;div class="mdl-cell mdl-cell--1-col"&gt;&lt;/div&gt;</span> <span class="devsite-syntax-x"> &lt;div class="mdl-cell mdl-cell--3-col"&gt;</span> <span class="devsite-syntax-x"> &lt;form id="translate-form" class="translate-form"&gt;</span> <span class="devsite-syntax-x"> &lt;div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label"&gt;</span> <span class="devsite-syntax-x"> &lt;input class="mdl-textfield__input" type="text" id="v" name="v"&gt;</span> <span class="devsite-syntax-x"> &lt;label class="mdl-textfield__label" for="v"&gt;Text to translate...&lt;/label&gt;</span> <span class="devsite-syntax-x"> &lt;/div&gt;</span> <span class="devsite-syntax-x"> &lt;select class="mdl-textfield__input lang" name="lang"&gt;</span> <span class="devsite-syntax-x"> &lt;option value="de"&gt;de&lt;/option&gt;</span> <span class="devsite-syntax-x"> &lt;option value="en"&gt;en&lt;/option&gt;</span> <span class="devsite-syntax-x"> &lt;option value="es"&gt;es&lt;/option&gt;</span> <span class="devsite-syntax-x"> &lt;option value="fr"&gt;fr&lt;/option&gt;</span> <span class="devsite-syntax-x"> &lt;option value="ja"&gt;ja&lt;/option&gt;</span> <span class="devsite-syntax-x"> &lt;option value="sw"&gt;sw&lt;/option&gt;</span> <span class="devsite-syntax-x"> &lt;/select&gt;</span> <span class="devsite-syntax-x"> &lt;button class="mdl-button mdl-js-button mdl-button--raised mdl-button--accent" type="submit"</span> <span class="devsite-syntax-x"> name="submit"&gt;Submit&lt;/button&gt;</span> <span class="devsite-syntax-x"> &lt;/form&gt;</span> <span class="devsite-syntax-x"> &lt;/div&gt;</span> <span class="devsite-syntax-x"> &lt;div class="mdl-cell mdl-cell--8-col"&gt;</span> <span class="devsite-syntax-x"> &lt;table class="mdl-data-table mdl-js-data-table mdl-shadow--2dp"&gt;</span> <span class="devsite-syntax-x"> &lt;thead&gt;</span> <span class="devsite-syntax-x"> &lt;tr&gt;</span> <span class="devsite-syntax-x"> &lt;th class="mdl-data-table__cell--non-numeric"&gt;&lt;strong&gt;Original&lt;/strong&gt;&lt;/th&gt;</span> <span class="devsite-syntax-x"> &lt;th class="mdl-data-table__cell--non-numeric"&gt;&lt;strong&gt;Translation&lt;/strong&gt;&lt;/th&gt;</span> <span class="devsite-syntax-x"> &lt;/tr&gt;</span> <span class="devsite-syntax-x"> &lt;/thead&gt;</span> <span class="devsite-syntax-x"> &lt;tbody&gt;</span> <span class="devsite-syntax-x"> &lt;?php foreach ($translations as $translation): ?&gt;</span> <span class="devsite-syntax-x"> &lt;tr&gt;</span> <span class="devsite-syntax-x"> &lt;td class="mdl-data-table__cell--non-numeric"&gt;</span> <span class="devsite-syntax-x"> &lt;span class="mdl-chip mdl-color--primary"&gt;</span> <span class="devsite-syntax-x"> &lt;span class="mdl-chip__text mdl-color-text--white"&gt;&lt;?= $translation['originalLang'] ?&gt;&lt;/span&gt;</span> <span class="devsite-syntax-x"> &lt;/span&gt;</span> <span class="devsite-syntax-x"> &lt;?= $translation['original'] ?&gt;</span> <span class="devsite-syntax-x"> &lt;/td&gt;</span> <span class="devsite-syntax-x"> &lt;td class="mdl-data-table__cell--non-numeric"&gt;</span> <span class="devsite-syntax-x"> &lt;span class="mdl-chip mdl-color--accent"&gt;</span> <span class="devsite-syntax-x"> &lt;span class="mdl-chip__text mdl-color-text--white"&gt;&lt;?= $translation['lang'] ?&gt;&lt;/span&gt;</span> <span class="devsite-syntax-x"> &lt;/span&gt;</span> <span class="devsite-syntax-x"> &lt;?= $translation['translated'] ?&gt;</span> <span class="devsite-syntax-x"> &lt;/td&gt;</span> <span class="devsite-syntax-x"> &lt;/tr&gt;</span> <span class="devsite-syntax-x"> &lt;?php endforeach ?&gt;</span> <span class="devsite-syntax-x"> &lt;/tbody&gt;</span> <span class="devsite-syntax-x"> &lt;/table&gt;</span> <span class="devsite-syntax-x"> &lt;br/&gt;</span> <span class="devsite-syntax-x"> &lt;button class="mdl-button mdl-js-button mdl-button--raised" type="button" onClick="window.location.reload();"&gt;Refresh&lt;/button&gt;</span> <span class="devsite-syntax-x"> &lt;/div&gt;</span> <span class="devsite-syntax-x"> &lt;/div&gt;</span> <span class="devsite-syntax-x"> &lt;/div&gt;</span> <span class="devsite-syntax-x"> &lt;div aria-live="assertive" aria-atomic="true" aria-relevant="text" class="mdl-snackbar mdl-js-snackbar" id="snackbar"&gt;</span> <span class="devsite-syntax-x"> &lt;div class="mdl-snackbar__text mdl-color-text--black"&gt;&lt;/div&gt;</span> <span class="devsite-syntax-x"> &lt;button type="button" class="mdl-snackbar__action"&gt;&lt;/button&gt;</span> <span class="devsite-syntax-x"> &lt;/div&gt;</span> <span class="devsite-syntax-x"> &lt;/main&gt;</span> <span class="devsite-syntax-x"> &lt;/div&gt;</span> &lt;<span class="devsite-syntax-x">/body</span>&gt; &lt;<span class="devsite-syntax-x">/html</span>&gt; </code></pre></devsite-code> </div> </li> </ul> <h2 id="running_the_app_in" data-text="Running the app in Cloud Shell" tabindex="-1">Running the app in Cloud Shell</h2> <p>Before trying to deploy the web app, install the dependencies and run it locally.</p> <ol> <li><p>First, install the dependencies with <a href="https://getcomposer.org" track-type="php" track-name="externalLink" track-metadata-position="body" class="external">Composer</a>. The <a href="/php/grpc">gRPC extension for PHP</a> is required, and is pre-installed on Cloud Shell.</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="PHP"><code translate="no" dir="ltr"><span class="devsite-syntax-x">composer install -d app</span> </code></pre></devsite-code></li> <li><p>Next, run the PHP built-in web server to serve your app:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="PHP"><code translate="no" dir="ltr"><span class="devsite-syntax-x">APP_DEBUG=true php -S localhost:8080 -t app</span> </code></pre></devsite-code> <p>The <code translate="no" dir="ltr">APP_DEBUG=true</code> flag will display any exceptions that occur.</p></li> <li><p>In Cloud Shell, click <b>Web preview</b> <svg id="p6n-devshell-icon-webpreview_cache7" width="18px" height="18px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fit="" preserveAspectRatio="xMidYMid meet" focusable="false"> <path d="M20 4c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2 V6c0-1.1.9-2 2-2h16zm0 14V8H4v10h16zm-8-9l7 4-7 4-7-4 7-4zm0 5.9c1 0 1.9-.8 1.9-1.9 0-1.1-.8-1.9-1.9-1.9-1.1 0-1.9.8-1.9 1.9 0 1.1.9 1.9 1.9 1.9z"></path></svg>, and select <b>Preview on port 8080</b>. This opens a new window with your running app.</p></li> </ol> <h2 id="deploying-the-web-app" data-text="Deploying the web app" tabindex="-1">Deploying the web app</h2> <p> You can use the <a href="/appengine/docs/standard/php" track-type="php" track-name="internalLink" track-metadata-position="body">App Engine standard environment</a> to build and deploy an app that runs reliably under heavy load and with large amounts of data. </p> <p>This tutorial uses the App Engine standard environment to deploy the HTTP frontend.</p> <p>The <code translate="no" dir="ltr">app.yaml</code> configures the App Engine app:</p> <div class="github-docwidget-gitinclude-code"> <div></div><devsite-code><pre suppresswarning="suppresswarning" translate="no" class="devsite-click-to-copy" track-metadata-position="GoogleCloudPlatform/getting-started-php/background-processing/app/app.yaml/HEAD/" data-code-snippet="true" data-github-includecode-link="https://github.com/GoogleCloudPlatform/getting-started-php/blob/HEAD/background-processing/app/app.yaml" data-github-path="GoogleCloudPlatform/getting-started-php/background-processing/app/app.yaml" data-git-revision="HEAD" dir="ltr" is-upgraded syntax="YAML"><code translate="no" dir="ltr"><span class="devsite-syntax-nt">runtime</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain">php73</span> <span class="devsite-syntax-nt">env_variables</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nt">APP_DEBUG</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain">true</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nt">LOG_CHANNEL</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain">stderr</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nt">APP_STORAGE</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain">/tmp</span> </code></pre></devsite-code> </div> <ul> <li> From the same directory as the <code translate="no" dir="ltr">app.yaml</code> file, deploy your app to the App Engine standard environment: <div></div><devsite-code><pre translate="no" dir="ltr" is-upgraded>gcloud app deploy</pre></devsite-code> </li> </ul> <h2 id="testing-the-app" data-text="Testing the app" tabindex="-1">Testing the app</h2> <p> After you've deployed the Cloud Run function and App Engine app, try requesting a translation. </p> <ol> <li> <p> To view the app in your browser,enter the following URL:</p> <p><code translate="no" dir="ltr">https://<var translate="no">PROJECT_ID</var>.<var translate="no">REGION_ID</var>.r.appspot.com</code></p> <p>Replace the following:</p> <ul> <li><code translate="no" dir="ltr"><var translate="no">PROJECT_ID</var></code>: Your Google Cloud project ID</li> <li><code translate="no" dir="ltr"><var translate="no">REGION_ID</var></code>: A <a href="/appengine/docs/standard/python/how-requests-are-routed#region-id" track-type="productDocs" track-name="internalLink" track-metadata-position="body">code that App Engine assigns to your app</a></li> </ul> <p> There is a page with an empty list of translations and a form to request new translations. </p> </li> <li> In the <b>Text to translate</b> field, enter some text to translate, for example, <code translate="no" dir="ltr">Hello, World</code>. </li> <li> Select a language from the drop-down list that you want to translate the text to. </li> <li> Click <b>Submit</b>. </li> <li> To refresh the page, click <b>Refresh</b> <i class="material-icons" aria-hidden="true" translate="no">refresh</i>. There is a new row in the translation list. If you don't see a translation, wait a few more seconds and try again. If you still don't see a translation, see the next section about debugging the app. </li> </ol> <h2 id="debugging_the_app" data-text="Debugging the app" tabindex="-1">Debugging the app</h2> <p>If you cannot connect to your App Engine app or don&#39;t see new translations, check the following:</p> <ol> <li>Check that the <code translate="no" dir="ltr">gcloud</code> deploy commands successfully completed and didn&#39;t output any errors. If there were errors (for example, <code translate="no" dir="ltr">message=Build failed</code>), fix them, and try <a href="#building_and_deploying_the_backend">building and deploying the Cloud Run app</a> and <a href="#deploying_the_web_app">deploying the App Engine app</a> again.</li> <li><p>In the Google Cloud console, go to the Logs Explorer page.</p> <p><a href="https://console.cloud.google.com/logs/query" class="button button-primary">Go to Logs Explorer page</a> </p> <ol> <li>In the <strong>Recently selected resources</strong> drop-down list, click <strong>GAE Application</strong>, and then click <strong>All module_id</strong>. You see a list of requests from when you visited your app. If you don&#39;t see a list of requests, confirm you selected <strong>All module_id</strong> from the drop-down list. If you see error messages printed to the Google Cloud console, check that your app&#39;s code matches <a href="#understanding_the_web_app">the code in the section about understanding the web app</a>.</li> <li>In the <strong>Recently selected resources</strong> drop-down list, click <strong>Cloud Run Revision</strong>, and then click <strong>All logs</strong>. You should see a POST request sent to your deployed app&#39;s URL. If not, check that the Cloud Run and App Engine app are using the same Pub/Sub topic, and that a Pub/Sub subscription exists to push to your Cloud Run endpoint.</li> </ol></li> </ol> </section> </div> <section id="cleanup"> <h2 id="clean-up" data-text="Clean up" tabindex="-1">Clean up</h2> <p> To avoid incurring charges to your Google Cloud account for the resources used in this tutorial, either delete the project that contains the resources, or keep the project and delete the individual resources. </p> <h3 id="delete-the-google-cloud-project" data-text="Delete the Google Cloud project" tabindex="-1">Delete the Google Cloud project</h3> <ol> <aside class="caution"> <strong>Caution</strong>: Deleting a project has the following effects: <ul> <li> <strong>Everything in the project is deleted.</strong> If you used an existing project for the tasks in this document, when you delete it, you also delete any other work you've done in the project. </li> <li> <strong>Custom project IDs are lost.</strong> When you created this project, you might have created a custom project ID that you want to use in the future. To preserve the URLs that use the project ID, such as an <code translate="no" dir="ltr">appspot.com</code> URL, delete selected resources inside the project instead of deleting the whole project. </li> </ul> </aside> <li> In the Google Cloud console, go to the <b>Manage resources</b> page. <p><a href="https://console.cloud.google.com/iam-admin/projects" target="console" track-type="commonIncludes" track-name="consoleLink" track-metadata-end-goal="deleteProject" class="button button-primary">Go to Manage resources</a></p> </li> <li> In the project list, select the project that you want to delete, and then click <b>Delete</b>. </li> <li> In the dialog, type the project ID, and then click <b>Shut down</b> to delete the project. </li> </ol> <h3 id="delete_the_tutorial_resources" data-text="Delete the tutorial resources" tabindex="-1">Delete the tutorial resources</h3> <ol> <li><p>Delete the App Engine app you created in this tutorial:</p> <p> <ol> <li> In the Google Cloud console, go to the <b>Versions</b> page for App Engine. <p><a href="https://console.cloud.google.com/appengine/versions" target="console" track-type="commonIncludes" track-name="consoleLink" track-metadata-end-goal="deleteAppVersion" class="button button-primary">Go to Versions</a></p> </li> <li> Select the checkbox for the non-default app version that you want to delete. <aside class="note"><strong>Note:</strong> The only way you can delete the default version of your App Engine app is by deleting your project. However, you can <a href="https://console.cloud.google.com/appengine/versions" target="console" track-type="tasks" track-name="consoleLink">stop the default version in the Google Cloud console</a>. This action shuts down all instances associated with the version. You can restart these instances later if needed.</p> <p>In the App Engine standard environment, you can stop the default version only if your app has manual or basic scaling. </p></aside> </li> <li> To delete the app version, click <span class="material-icons notranslate" aria-hidden="true" translate="no">delete</span> <b>Delete</b>. </li> </ol></p></li> <li><p>Delete the Cloud Run service you deployed in this tutorial:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash">gcloud<span class="devsite-syntax-w"> </span>run<span class="devsite-syntax-w"> </span>services<span class="devsite-syntax-w"> </span>delete<span class="devsite-syntax-w"> </span>background-processing-function</pre></devsite-code> <p>You can also delete Cloud Run services from the <a href="https://console.cloud.google.com/run">Google Cloud console</a>.</p></li> <li><p>Delete other Google Cloud resources created in this tutorial:</p> <ul> <li><a href="/pubsub/docs/admin#pubsub-delete-topic-gcloud">Delete the Pub/Sub topic <code translate="no" dir="ltr">translate</code></a></li> <li><a href="/pubsub/docs/admin#delete_subscription">Delete the Pub/Sub subscription <code translate="no" dir="ltr">run-translate-string</code></a></li> <li><a href="/container-registry/docs/managing#deleting_images">Delete the container image</a> named <code translate="no" dir="ltr">gcr.io/<var translate="no">PROJECT_ID</var>/background-processing</code> from Container Registry.</li> <li><a href="/iam/docs/creating-managing-service-accounts#iam-service-accounts-delete-gcloud">Delete the invoker service account <code translate="no" dir="ltr">cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com</code></a></li> </ul></li> </ol> </section> <section id="whatsnext"> <h2 id="whats-next" data-text="What's next" tabindex="-1">What's next</h2> <ul> <li><a href="/appengine/docs/standard/php7" track-type="php" track-name="internalLink" track-metadata-position="body">Learn more about App Engine</a>.</li> <li><a href="/php/getting-started/session-handling-with-firestore" track-type="php" track-name="internalLink" track-metadata-position="body">Handle sessions with Firestore</a>.</li> <li><a href="/php/tutorials/getting-started-on-compute-engine" track-type="php" track-name="internalLink" track-metadata-position="body">Deploy an app to Compute Engine</a>.</li> <li><a href="/kubernetes-engine/docs/quickstarts/deploy-app-container-image" track-type="php" track-name="internalLink" track-metadata-position="body">Deploy an app to Google Kubernetes Engine</a>.</li> <li><a href="/php/getting-started/authenticate-users" track-type="php" track-name="internalLink" track-metadata-position="body">Authenticate users with IAP</a>.</li> </ul> </section> <section id="freetrial"> </section> </div> <devsite-hats-survey class="nocontent" hats-id="mwETRvWii0eU5NUYprb0Y9z5GVbc" listnr-id="83405"></devsite-hats-survey> </div> <devsite-thumb-rating position="footer"> </devsite-thumb-rating> <devsite-feedback position="footer" project-name="PHP" product-id="1632431" bucket="documentation" context="" version="t-devsite-webserver-20241114-r00-rc02.464922260396498922" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="footer" class="nocontent" project-icon="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/cloud/images/favicons/onecloud/super_cloud.png" > <button> Send feedback </button> </devsite-feedback> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://developers.google.com/site-policies">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p> <p>Last updated 2024-11-26 UTC.</p> </devsite-content-footer> <devsite-notification > </devsite-notification> <div class="devsite-content-data"> <template class="devsite-thumb-rating-feedback"> <devsite-feedback position="thumb-rating" project-name="PHP" product-id="1632431" bucket="documentation" context="" version="t-devsite-webserver-20241114-r00-rc02.464922260396498922" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="thumb-rating" class="nocontent" project-icon="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/cloud/images/favicons/onecloud/super_cloud.png" > <button> Need to tell us more? </button> </devsite-feedback> </template> <template class="devsite-content-data-template"> [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-11-26 UTC."],[],[]] </template> </div> </devsite-content> </main> <devsite-footer-promos class="devsite-footer"> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Why Google</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/why-google-cloud/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" track-type="footer link"track-metadata-eventDetail="cloud.google.com/why-google-cloud/"track-metadata-child_headline="why google"track-metadata-module="footer"track-name="choosing google cloud"track-metadata-position="footer"> Choosing Google Cloud </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/trust-center/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" track-metadata-eventDetail="cloud.google.com/security/"track-metadata-module="footer"track-metadata-child_headline="why google"track-metadata-position="footer"track-name="trust and security"track-type="footer link"> Trust and security </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/solutions/modern-infrastructure/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" track-name="modern infrastructure cloud"track-metadata-child_headline="why google"track-metadata-module="footer"track-metadata-position="footer"track-type="footer link"track-metadata-eventDetail="cloud.google.com/solutions/modern-infrastructure/"> Modern Infrastructure Cloud </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/multicloud/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" track-metadata-child_headline="why google"track-metadata-module="footer"track-type="footer link"track-metadata-position="footer"track-metadata-eventDetail="cloud.google.com/multicloud/"track-name="multicloud"> Multicloud </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/infrastructure/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" track-metadata-position="footer"track-name="global infrastructure"track-type="footer link"track-metadata-child_headline="why google"track-metadata-eventDetail="cloud.google.com/infrastructure/"track-metadata-module="footer"> Global infrastructure </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/customers/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 6)" track-metadata-child_headline="why google"track-metadata-position="footer"track-name="customers and case studies"track-metadata-eventDetail="cloud.google.com/customers/"track-type="footer link"track-metadata-module="footer"> Customers and case studies </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/analyst-reports/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 7)" track-type="footer link"track-metadata-eventDetail="cloud.google.com/analyst-reports/"track-metadata-position="footer"track-name="analyst reports"track-metadata-module="footer"track-metadata-child_headline="why google"> Analyst reports </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/whitepapers/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 8)" track-metadata-module="footer"track-name="whitepapers"track-metadata-eventDetail="cloud.google.com/whitepapers/"track-metadata-position="footer"track-type="footer link"track-metadata-child_headline="why google"> Whitepapers </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//cloud.google.com/blog/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 9)" track-metadata-module="footer"track-metadata-position="footer"track-name="blog"track-metadata-eventDetail="cloud.google.com/blog/"track-metadata-child_headline="engage"track-type="footer link"> Blog </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Products and pricing</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/pricing/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" track-name="google cloud pricing"track-metadata-module="footer"track-metadata-eventDetail="cloud.google.com/pricing/"track-metadata-position="footer"track-metadata-child_headline="products and pricing"track-type="footer link"> Google Cloud pricing </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//workspace.google.com/pricing.html" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" track-type="footer link"track-name="google workspace pricing"track-metadata-position="footer"target="_blank"track-metadata-eventDetail="workspace.google.com/pricing.html"track-metadata-module="footer"track-metadata-child_headline="products and pricing"> Google Workspace pricing </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/products/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" track-name="see all products"track-metadata-module="footer"track-type="footer link"track-metadata-eventDetail="cloud.google.com/products/"track-metadata-position="footer"track-metadata-child_headline="products and pricing"> See all products </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Solutions</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/solutions/infrastructure-modernization/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" track-metadata-eventDetail="cloud.google.com/solutions/infrastructure-modernization/"track-metadata-child_headline="solutions"track-name="infrastructure modernization"track-metadata-module="footer"track-metadata-position="footer"track-type="footer link"> Infrastructure modernization </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/solutions/databases/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" track-metadata-child_headline="solutions"track-metadata-position="footer"track-type="footer link"track-metadata-module="footer"track-name="databases"track-metadata-eventDetail="cloud.google.com/solutions/databases"> Databases </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/solutions/application-modernization/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" track-metadata-eventDetail="cloud.google.com/solutions/application-modernization/"track-name="application development"track-type="footer link"track-metadata-position="footer"track-metadata-child_headline="solutions"track-metadata-module="footer"> Application modernization </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/solutions/smart-analytics/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" track-metadata-eventDetail="cloud.google.com/solutions/smart-analytics/"track-metadata-module="footer"track-name="smart analytics"track-type="footer link"track-metadata-child_headline="solutions"track-metadata-position="footer"> Smart analytics </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/solutions/ai/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" track-type="footer link"track-metadata-position="footer"track-metadata-module="footer"track-name="artificial intelligence"track-metadata-eventDetail="cloud.google.com/solutions/ai/"track-metadata-child_headline="solutions"> Artificial Intelligence </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/solutions/security/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 6)" track-metadata-child_headline="solutions"track-metadata-module="footer"track-name="security"track-metadata-eventDetail="cloud.google.com/solutions/security/"track-metadata-position="footer"track-type="footer link"> Security </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://workspace.google.com/enterprise/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 7)" track-metadata-position="footer"track-metadata-module="footer"track-name="productivity and work transformation"track-metadata-child_headline="solutions"track-metadata-eventDetail="workspace.google.com/enterprise/"target="_blank"track-type="footer link"> Productivity & work transformation </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/solutions/#industry-solutions" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 8)" track-metadata-position="footer"track-type="footer link"track-name="industry solutions"track-metadata-eventDetail="cloud.google.com/solutions/#industry-solutions"track-metadata-module="footer"track-metadata-child_headline="solutions"> Industry solutions </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/solutions/devops/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 9)" track-metadata-position="footer"track-metadata-child_headline="solutions"track-metadata-eventDetail="cloud.google.com/solutions/devops/"track-name="devops solutions"track-metadata-module="footer"track-type="footer link"> DevOps solutions </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/solutions/#section-14" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 10)" track-name="small business solutions"track-metadata-module="footer"track-metadata-child_headline="solutions"track-type="footer link"track-metadata-eventDetail="cloud.google.com/solutions/#section-14"track-metadata-position="footer"> Small business solutions </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/solutions/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 11)" track-metadata-module="footer"track-type="footer link"track-metadata-eventDetail="cloud.google.com/solutions/"track-metadata-position="footer"track-name="see all solutions"track-metadata-child_headline="solutions"> See all solutions </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Resources</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/affiliate-program/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" track-metadata-position="footer"track-metadata-eventDetail="cloud.google.com/affiliate-program/"track-metadata-child_headline="resources"track-type="footer link"track-name="google cloud affiliate program"track-metadata-module="footer"> Google Cloud Affiliate Program </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/docs/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" track-metadata-position="footer"track-metadata-child_headline="resources"track-metadata-eventDetail="cloud.google.com/docs/"track-metadata-module="footer"track-name="google cloud documentation"track-type="footer link"> Google Cloud documentation </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/docs/get-started/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" track-metadata-position="footer"track-name="google cloud quickstarts"track-metadata-child_headline="resources"track-metadata-eventDetail="cloud.google.com/docs/get-started/"track-type="footer link"track-metadata-module="footer"> Google Cloud quickstarts </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/marketplace/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" track-type="footer link"track-name="google cloud marketplace"track-metadata-child_headline="resources"track-metadata-eventDetail="cloud.google.com/marketplace/"track-metadata-module="footer"track-metadata-position="footer"> Google Cloud Marketplace </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/discover/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" track-metadata-eventDetail="learn/"track-metadata-child_headline="resources"track-metadata-module="footer"track-metadata-position="footer"track-type="footer link"track-name="learn about cloud computing"> Learn about cloud computing </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/support-hub/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 6)" track-type="footer link"track-name="support"track-metadata-child_headline="resources"track-metadata-position="footer"track-metadata-eventDetail="cloud.google.com/support-hub/"track-metadata-module="footer"> Support </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/docs/samples" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 7)" track-metadata-module="footer"track-type="footer link"track-metadata-eventDetail="cloud.google.com/docs/samples"track-metadata-position="footer"track-name="code samples"track-metadata-child_headline="resources"> Code samples </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/architecture/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 8)" track-type="footer link"track-metadata-eventDetail="cloud.google.com/architecture/"track-metadata-child_headline="resources"track-metadata-module="footer"track-name="cloud architecture center"track-metadata-position="footer"> Cloud Architecture Center </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/learn/training/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 9)" track-metadata-child_headline="resources"track-metadata-module="footer"track-type="footer link"track-metadata-position="footer"track-name="training"track-metadata-eventDetail="cloud.google.com/training/"> Training </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/learn/certification/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 10)" track-name="certifications"track-type="footer link"track-metadata-child_headline="resources"track-metadata-module="footer"track-metadata-position="footer"track-metadata-eventDetail="cloud.google.com/certification"> Certifications </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//developers.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 11)" track-name="google developers"target="_blank"track-metadata-eventDetail="developers.google.com"track-metadata-position="footer"track-type="footer link"track-metadata-child_headline="resources"track-metadata-module="footer"> Google for Developers </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/startup/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 12)" track-metadata-child_headline="resources"track-metadata-position="footer"track-metadata-module="footer"track-name="google cloud for startups"track-metadata-eventDetail="cloud.google.com/startup/"track-type="footer link"> Google Cloud for Startups </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//status.cloud.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 13)" track-type="footer link"track-metadata-position="footer"track-metadata-child_headline="resources"track-name="system status"track-metadata-eventDetail="status.cloud.google.com"track-metadata-module="footer"target="_blank"> System status </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/release-notes" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 14)" track-metadata-child_headline="resources"track-metadata-eventDetail="cloud.google.com/release-notes/"track-name="release notes"track-metadata-position="footer"track-metadata-module="footer"track-type="footer link"> Release Notes </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Engage</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/contact/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" track-metadata-child_headline="engage"track-type="footer link"track-metadata-eventDetail="cloud.google.com/contact/"track-metadata-position="footer"track-metadata-module="footer"track-name="contact sales"> Contact sales </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//cloud.google.com/find-a-partner" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" track-name="find a partner"track-metadata-module="footer"track-metadata-position="footer"track-type="footer link"track-metadata-child_headline="engage"target="_blank"track-metadata-eventDetail="cloud.google.com/find-a-partner"> Find a Partner </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/partners/become-a-partner/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" track-name="become a partner"track-metadata-child_headline="engage"track-metadata-eventDetail="cloud.google.com/partners/become-a-partner/"track-type="footer link"track-metadata-position="footer"track-metadata-module="footer"> Become a Partner </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/events/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" track-type="footer link"track-metadata-module="footer"track-name="events"track-metadata-eventDetail="cloud.withgoogle.com/events"track-metadata-child_headline="engage"track-metadata-position="footer"> Events </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/podcasts/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" track-metadata-eventDetail="cloud.google.com/podcasts/"track-type="footer link"track-metadata-module="footer"track-name="podcasts"rel="noopener"target="_blank"track-metadata-child_headline="engage"track-metadata-position="footer"> Podcasts </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/developers/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 6)" track-name="developer center"track-metadata-eventDetail="cloud.google.com/developers/"track-metadata-position="footer"track-type="footer link"track-metadata-module="footer"track-metadata-child_headline="engage"> Developer Center </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://www.googlecloudpresscorner.com/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 7)" track-metadata-position="footer"track-metadata-child_headline="engage"rel="noopener"track-name="press corner"track-type="footer link"target="_blank"track-metadata-eventDetail="www.googlecloudpresscorner.com"track-metadata-module="footer"> Press Corner </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//www.youtube.com/googlecloud" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 8)" track-metadata-module="footer"rel="noopener"track-type="footer link"target="_blank"track-name="google cloud on youtube"track-metadata-child_headline="engage"track-metadata-position="footer"track-metadata-eventDetail="www.youtube.com/googlecloud"> Google Cloud on YouTube </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//www.youtube.com/googlecloudplatform" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 9)" track-metadata-child_headline="engage"track-metadata-module="footer"track-metadata-position="footer"rel="noopener"track-name="google cloud tech on youtube"track-type="footer link"target="_blank"track-metadata-eventDetail="www.youtube.com/googlecloudplatform"> Google Cloud Tech on YouTube </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//x.com/googlecloud" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 10)" target="_blank"track-metadata-child_headline="engage"track-name="follow on x"track-metadata-position="footer"track-metadata-eventDetail="x.com/googlecloud"track-metadata-module="footer"rel="noopener"track-type="footer link"> Follow on X </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//userresearch.google.com/?reserved=1&amp;utm_source=website&amp;Q_Language=en&amp;utm_medium=own_srch&amp;utm_campaign=CloudWebFooter&amp;utm_term=0&amp;utm_content=0&amp;productTag=clou&amp;campaignDate=jul19&amp;pType=devel&amp;referral_code=jk212693" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 11)" track-metadata-child_headline="engage"target="_blank"track-metadata-eventDetail="userresearch.google.com/?reserved=1&amp;utm_source=website&amp;Q_Language=en&amp;utm_medium=own_srch&amp;utm_campaign=CloudWebFooter&amp;utm_term=0&amp;utm_content=0&amp;productTag=clou&amp;campaignDate=jul19&amp;pType=devel&amp;referral_code=jk212693"track-name="join user research"track-type="footer link"track-metadata-module="footer"track-metadata-position="footer"> Join User Research </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//careers.google.com/cloud" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 12)" track-metadata-child_headline="engage"track-metadata-position="footer"track-metadata-eventDetail="careers.google.com/cloud"track-name="we are hiring join google cloud"track-type="footer link"target="_blank"track-metadata-module="footer"> We're hiring. Join Google Cloud! </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://www.googlecloudcommunity.com/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 13)" track-metadata-eventDetail="www.googlecloudcommunity.com"track-metadata-position="footer"track-type="footer link"rel="noopener"track-metadata-module="footer"track-name="google cloud community"track-metadata-child_headline="engage"target="_blank"> Google Cloud Community </a> </li> </ul> </li> </ul> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//about.google/" data-category="Site-Wide Custom Events" data-label="Footer About Google link" track-metadata-eventDetail="//about.google/" track-type="footer link" track-metadata-position="footer" track-metadata-module="utility footer" target="_blank" track-name="about google" > About Google </a> </li> <li class="devsite-footer-utility-item devsite-footer-privacy-link"> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link" track-metadata-module="utility footer" track-metadata-eventDetail="//policies.google.com/privacy" track-name="privacy" target="_blank" track-metadata-position="footer" track-type="footer link" > Privacy </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//www.google.com/intl/en/policies/terms/regional.html" data-category="Site-Wide Custom Events" data-label="Footer Site terms link" track-metadata-position="footer" track-name="site terms" target="_blank" track-metadata-module="utility footer" track-metadata-eventDetail="//www.google.com/intl/en/policies/terms/regional.html" track-type="footer link" > Site terms </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="/product-terms/" data-category="Site-Wide Custom Events" data-label="Footer Google Cloud terms link" track-metadata-module="utility footer" track-metadata-eventDetail="/product-terms/" track-type="footer link" track-metadata-position="footer" track-name="google cloud terms" > Google Cloud terms </a> </li> <li class="devsite-footer-utility-item glue-cookie-notification-bar-control"> <a class="devsite-footer-utility-link gc-analytics-event" href="#" data-category="Site-Wide Custom Events" data-label="Footer Manage cookies link" track-metadata-eventDetail="#" track-metadata-position="footer" track-name="Manage cookies" track-type="footer link" aria-hidden="true" track-metadata-module="utility footer" > Manage cookies </a> </li> <li class="devsite-footer-utility-item devsite-footer-carbon-button"> <a class="devsite-footer-utility-link gc-analytics-event" href="/sustainability" data-category="Site-Wide Custom Events" data-label="Footer Our third decade of climate action: join us link" track-type="footer link" track-metadata-position="footer" track-metadata-eventDetail="/sustainability/" track-metadata-module="utility footer" track-name="Our third decade of climate action: join us" > Our third decade of climate action: join us </a> </li> <li class="devsite-footer-utility-item devsite-footer-utility-button"> <span class="devsite-footer-utility-description">Sign up for the Google Cloud newsletter</span> <a class="devsite-footer-utility-link gc-analytics-event" href="/newsletter/" data-category="Site-Wide Custom Events" data-label="Footer Subscribe link" track-name="subscribe" track-metadata-eventDetail="/newsletter/" track-metadata-module="utility footer" track-metadata-position="footer" track-type="footer link" > Subscribe </a> </li> </ul> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip ></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics> <script type="application/json" analytics>[]</script> <script type="application/json" tag-management>{&#34;at&#34;: &#34;True&#34;, &#34;ga4&#34;: [], &#34;ga4p&#34;: [], &#34;gtm&#34;: [{&#34;id&#34;: &#34;GTM-5CVQBG&#34;, &#34;purpose&#34;: 1}], &#34;parameters&#34;: {&#34;internalUser&#34;: &#34;False&#34;, &#34;language&#34;: {&#34;machineTranslated&#34;: &#34;False&#34;, &#34;requested&#34;: &#34;en&#34;, &#34;served&#34;: &#34;en&#34;}, &#34;pageType&#34;: &#34;article&#34;, &#34;projectName&#34;: &#34;PHP&#34;, &#34;signedIn&#34;: &#34;False&#34;, &#34;tenant&#34;: &#34;cloud&#34;, &#34;recommendations&#34;: {&#34;sourcePage&#34;: &#34;&#34;, &#34;sourceType&#34;: 0, &#34;sourceRank&#34;: 0, &#34;sourceIdenticalDescriptions&#34;: 0, &#34;sourceTitleWords&#34;: 0, &#34;sourceDescriptionWords&#34;: 0, &#34;experiment&#34;: &#34;&#34;}, &#34;experiment&#34;: {&#34;ids&#34;: &#34;&#34;}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <cloudx-user></cloudx-user> <cloudx-free-trial-eligible-store freeTrialEligible='true'></cloudx-free-trial-eligible-store> <cloudx-pricing-socket></cloudx-pricing-socket> <cloudx-experiments type="TestAACodivertedExperiment" path="/virtual/TestAACodivertedExperiment/configureExperiment" location="SG" variant="variant2" ></cloudx-experiments> <cloudx-experiment-ids userCountry="SG" devsiteExperimentIdList="[39300004, 39300012, 39300022, 39300118, 39300196, 39300251, 39300317, 39300320, 39300325, 39300345, 39300354, 39300363, 39300374, 39300412, 39300421, 39300436, 39300471, 39300488, 39300496, 39300498]"> </cloudx-experiment-ids> <script nonce="CBofa3e3UXFFziARUbr4LDF/iCBono"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/cloud/js/app_loader.js', '[2,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/cloud","https://cloud-dot-devsite-v2-prod.appspot.com",null,null,["/_pwa/cloud/manifest.json","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/cloud/images/favicons/onecloud/favicon.ico","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/cloud/images/cloud-logo.svg","https://fonts.googleapis.com/css?family=Google+Sans:400,500,700|Google+Sans+Text:400,400italic,500,500italic,700,700italic|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,116,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyAP-jjEJBzmIyKR4F-3XITp8yM9T1gEEI8","AIzaSyB6xiKGDR5O3Ak2okS4rLkauxGUG7XP0hg","cloud.google.com","AIzaSyAQk0fBONSGUqCNznf6Krs82Ap1-NV6J4o","AIzaSyCCxcqdrZ_7QMeLCRY20bh_SXdAYqy70KY",null,null,null,["Profiles__enable_release_notes_notifications","Experiments__reqs_query_experiments","Concierge__enable_pushui","Cloud__enable_free_trial_server_call","MiscFeatureFlags__enable_variable_operator","MiscFeatureFlags__enable_firebase_utm","MiscFeatureFlags__enable_explain_this_code","TpcFeatures__enable_mirror_tenant_redirects","CloudShell__cloud_shell_button","Analytics__enable_clearcut_logging","BookNav__enable_tenant_cache_key","Search__enable_ai_search_summaries","MiscFeatureFlags__enable_project_variables","MiscFeatureFlags__enable_view_transitions","Cloud__enable_cloudx_experiment_ids","EngEduTelemetry__enable_engedu_telemetry","MiscFeatureFlags__developers_footer_dark_image","Search__enable_ai_eligibility_checks","Profiles__require_profile_eligibility_for_signin","Profiles__enable_complete_playlist_endpoint","Cloud__enable_cloud_dlp_service","TpcFeatures__enable_required_headers","Cloud__enable_legacy_calculator_redirect","DevPro__enable_cloud_innovators_plus","Cloud__enable_cloudx_ping","Search__scope_to_project_tenant","MiscFeatureFlags__emergency_css","Profiles__enable_profile_collections","DevPro__enable_developer_subscriptions","Search__enable_ai_search_summaries_restricted","MiscFeatureFlags__developers_footer_image","Search__enable_page_map","Cloud__enable_llm_concierge_chat","Cloud__enable_cloud_facet_chat","Search__enable_dynamic_content_confidential_banner","Profiles__enable_page_saving","Cloud__enable_cloud_shell_fte_user_flow","Profiles__enable_public_developer_profiles","Concierge__enable_concierge_restricted","CloudShell__cloud_code_overflow_menu","Profiles__enable_developer_profiles_callout","Profiles__enable_awarding_url","Profiles__enable_completecodelab_endpoint","Profiles__enable_dashboard_curated_recommendations","Cloud__enable_cloud_shell","Profiles__enable_recognition_badges","Search__enable_suggestions_from_borg"],null,null,"AIzaSyBLEMok-5suZ67qRPzx0qUtbnLmyT_kCVE","https://developerscontentserving-pa.clients6.google.com","AIzaSyCM4QpTRSqP5qI4Dvjt4OAScIN8sOUlO-k","https://developerscontentsearch-pa.clients6.google.com",1,4,1,"https://developerprofiles-pa.clients6.google.com",[2,"cloud","Google Cloud","cloud.google.com",null,"cloud-dot-devsite-v2-prod.appspot.com",null,null,[1,1,null,null,null,null,null,null,null,null,null,[1],null,null,null,null,null,1,[1],[null,null,null,[1,20],"/terms/recommendations"],[1],null,[1],[1,null,1],[1,1,null,null,1,null,["/vertex-ai/"]]],null,[22,null,null,null,null,null,"/images/cloud-logo.svg","/images/favicons/onecloud/apple-icon.png",null,null,null,null,1,1,1,[6,5],[],null,null,[[],[],[],[],[],[],[],[]],null,1,null,null,null,null,[]],[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[6,1,14,15,22,23,29,37],null,[[null,null,null,null,null,null,[1,[["docType","Choose a content type",[["ApiReference",null,null,null,null,null,null,null,null,"API reference"],["Sample",null,null,null,null,null,null,null,null,"Code sample"],["ReferenceArchitecture",null,null,null,null,null,null,null,null,"Reference architecture"],["Tutorial",null,null,null,null,null,null,null,null,"Tutorial"]]],["category","Choose a topic",[["AiAndMachineLearning",null,null,null,null,null,null,null,null,"Artificial intelligence and machine learning (AI/ML)"],["ApplicationDevelopment",null,null,null,null,null,null,null,null,"Application development"],["BigDataAndAnalytics",null,null,null,null,null,null,null,null,"Big data and analytics"],["Compute",null,null,null,null,null,null,null,null,"Compute"],["Containers",null,null,null,null,null,null,null,null,"Containers"],["Databases",null,null,null,null,null,null,null,null,"Databases"],["HybridCloud",null,null,null,null,null,null,null,null,"Hybrid and multicloud"],["LoggingAndMonitoring",null,null,null,null,null,null,null,null,"Logging and monitoring"],["Migrations",null,null,null,null,null,null,null,null,"Migrations"],["Networking",null,null,null,null,null,null,null,null,"Networking"],["SecurityAndCompliance",null,null,null,null,null,null,null,null,"Security and compliance"],["Serverless",null,null,null,null,null,null,null,null,"Serverless"],["Storage",null,null,null,null,null,null,null,null,"Storage"]]]]]],[1],null,1],[[null,null,null,null,null,["GTM-5CVQBG"],null,null,null,null,null,[["GTM-5CVQBG",2]],1],null,null,null,null,null,1],"mwETRvWii0eU5NUYprb0Y9z5GVbc",4,null,null,null,null,null,null,null,null,null,null,null,null,null,"cloud.devsite.google"],null,"pk_live_5170syrHvgGVmSx9sBrnWtA5luvk9BwnVcvIi7HizpwauFG96WedXsuXh790rtij9AmGllqPtMLfhe2RSwD6Pn38V00uBCydV4m"]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10