Many users develop impressive applications using Google Cloud’s products and services. And when an app is ready, Google Cloud can also be used to deploy it. In this section of the course, we’ll explore Google Cloud methods for development in the cloud, which includes Cloud Source Repositories, Cloud Functions, and Terraform. After that, we’ll look at deployment with infrastructure as code. Let’s begin by looking at development in the cloud. Many Google Cloud customers use Git repositories to store, version, and manage their source code trees. That means they either run their own Git instances, which is a great option if total control is required, or they use a hosted-Git provider, which means less work if total control isn’t required. But what if there were a third option, where you could keep code private to a Google Cloud project and use IAM permissions to protect it, but not have to maintain the Git instance yourself? Well, that third option is available with Cloud Source Repositories. Cloud Source Repositories provides full-featured Git repositories hosted on Google Cloud that support the collaborative development of any application or service, including those that run on App Engine and Compute Engine. With Cloud Source Repositories, you can have any number of private Git repositories. This allows code associated with a cloud project to be organized the way you choose. It also allows Google Cloud diagnostics tools, like Debugger and Error Reporting, to use the code from Git repositories to track down issues to specific errors in deployed code without slowing down your users. If your code is already in GitHub or BitBucket repositories, it can be migrated into your cloud project and used just like any other repository, including browsing and diagnostics. Many applications contain event-driven parts. For example, maybe you have an application that lets users upload images. When that event takes place, the image might need to be processed in a few different ways, like converting a thumbnail into different sizes, and storing each new file in a repository. You could integrate this function into your application, but then you’d have to provide compute resources for it–whether it happens once a millisecond or once a day. With Cloud Functions, you could write a single-purpose function that completes the necessary image manipulations and then arrange for it to automatically run whenever a new image is uploaded. Cloud Functions is a lightweight, event-based, asynchronous compute solution that allows you to create small, single-purpose functions that respond to cloud events, without the need to manage a server or a runtime environment. You can use these functions to construct application workflows from individual business logic tasks. You can also use Cloud Functions to connect and extend cloud services. You’re billed to the nearest 100 milliseconds, but only while your code is running. Cloud Functions supports writing source code in a number of programming languages. These include Node.js, Python, Go, Java, .Net Core, Ruby, and PHP. For more information about the supported specific versions, refer to the runtimes documentation. Events from Cloud Storage and Pub/Sub can trigger Cloud Functions asynchronously, or you can use HTTP invocation for synchronous execution.