# Deploying to Cloud Functions

## Before you begin

* Enable the Cloud Functions API:
    
    Enable the Cloud Functions API
    
* Grant the **Cloud Functions Developer** role to the Cloud Build service account:
    
    1. Open the **Cloud Build Settings** page:
        
        Open the Cloud Build Settings page
        
    2. Set the status of the **Cloud Functions Developer** role to **Enabled**.
        
* To run the `gcloud` commands in this page, install the Google Cloud CLI.
    
* Keep your application source code that you want to build and deploy to Cloud Functions handy. Your source code needs to be stored in a repository, such as Cloud Source Repositories, GitHub, or Bitbucket.
    

## Configuring the deployment

Cloud Build enables you to use any publicly available container image to execute your tasks. You can do this by specifying the image in a build `step` in the Cloud Build config file.

Cloud Functions provides the `gcloud functions deploy` command, which deploys your function from the directory containing your function code. You can use the `cloud-sdk` image as a build step in your config file to invoke `gcloud` commands within the image. Arguments passed to this build step are passed to Google Cloud CLI directly, allowing you to run any `gcloud` command in this image.

To deploy an application to Cloud Functions, use the following steps:

1. In your project root directory, create the Cloud Build configuration file named `cloudbuild.yaml` or `cloudbuild.json`.
    
2. In the config file:
    
    * Add a `name` field and specify the `gcloud` build step.
        
    * Add `functions deploy` to the `args` field to invoke the `gcloud functions deploy` command. For available configuration options, see `gcloud functions deploy` reference.
        
    * `--source=.` implies that the source code is in the current working directory.
        
    
    [YAML](https://cloud.google.com/build/docs/deploying-builds/deploy-functions#yaml)[JSON](https://cloud.google.com/build/docs/deploying-builds/deploy-functions#json)
    
    ```plaintext
    steps:
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      args:
      - gcloud
      - functions
      - deploy
      - FUNCTION_NAME
      - --region=FUNCTION_REGION
      - --source=.
      - --trigger-http
      - --runtime=RUNTIME
    ```
    
    Replace the placeholder values in the config file above with the following:
    
    * `FUNCTION_NAME` is the name of the Cloud Functions you are deploying. If you're updating an existing function, this value must match the name of the function you're updating.
        
    * `FUNCTION_REGION` is the region to which you're deploying Cloud Functions. For a list of supported regions, see Cloud Functions locations.
        
    * `--trigger-http` is the trigger type for this function, in this case an HTTP request (webhook).
        
    * `RUNTIME` is the runtime in which to run the function.
        
    
    For more information on using `gcloud functions deploy`, see the Cloud Functions documentation.
    
3. Start the build using the config file created in the previous step:
    
    ```plaintext
     gcloud builds submit --region=REGION --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    ```
    
    Replace the placeholder values in the config file above with the following:
    
    * `CONFIG_FILE_PATH` is the path to the build config file.
        
    * `SOURCE_DIRECTORY` is the path or URL to the source code.
        
    * `REGION` is one of the supported build regions.
        
    
    If you don't specify a `CONFIG_FILE_PATH` and `SOURCE_DIRECTORY` in the `gcloud builds submit` command, Cloud Build assumes that the config file and the source code are in the current working directory.
    

## Continuous deployment

You can automate the deployment of your software to Cloud Functions by creating Cloud Build triggers. You can configure your triggers to build and deploy images whenever you update your source code.

To automate your deployment to Cloud Functions:

1. In your repository root, add a config file with steps to invoke the `gcloud functions deploy` command:
    
    YAMLJSON
    
    ```plaintext
    steps:
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      args:
      - gcloud
      - functions
      - deploy
      - FUNCTION_NAME
      - --region=FUNCTION_REGION
      - --source=.
      - --trigger-http
      - --runtime=RUNTIME
    ```
    
    Replace the placeholder values in the config file above with the following:
    
    * `FUNCTION_NAME` is the name of the Cloud Functions you are deploying. If you're updating an existing function, this value must match the name of the function you're updating.
        
    * `FUNCTION_REGION` is the region to which you're deploying Cloud Functions. For a list of supported regions, see Cloud Functions locations.
        
    * `--trigger-http` is the trigger type for this function, in this case an HTTP request (webhook).
        
    * `RUNTIME` is the runtime in which to run the function.
        
2. Create a build trigger with the config file created in the previous step:
    
    1. Open the **Triggers** page in the Google Cloud console:
        
        Open Triggers page
        
    2. Select your project from the project selector drop-down menu at the top of the page.
        
    3. Click **Create Trigger**.
        
    4. In the **Name** field, enter a name for your trigger.
        
    5. Under **Region**, select the [region](https://cloud.google.com/build/docs/locations) for your trigger.
        
        **Note:** The region for your trigger must match the region of the function you're deploying to.
        
    6. Under **Event**, select the repository event to start your trigger.
        
    7. Under **Source**, select your repository and the branch or tag name that will start your trigger. For more information on specifying which branches to autobuild, see Creating a build trigger.
        
    8. Under **Configuration**, select **Cloud Build configuration file (YAML or JSON)**.
        
    9. In the **Cloud Build configuration file location** field, type `cloudbuild.yaml` after the `/`.
        
    10. Click **Create** to save your build trigger.
        

Anytime you push new code to your repository, you will automatically trigger a build and deploy on Cloud Functions.
