Google SDK (CLI for GCP) installation and few CLI examples

This image has an empty alt attribute; its file name is image-1.png

Intro

Google as most of the cloud providers today, offers a simple Cloud shell solution with all required tools to connect to their platform securely using APIs. However, If you still want to have it in your laptop along with other development tools, you can always install Google Cloud SDK (especially if it’s for educational purpose).

Cloud SDK includes the gcloud, gsutil and bq command-line tool including few components that aren’t installed by default.  GCloud is the main command line used to manage cloud resources and enabling services.

Requirement

Whether on windows or Linux, the basic installation and use of Cloud SDK will require 2 elements:

  Note: To access the GCP APIs using a specific language (like C++, ruby etc), you can download the Cloud Client Libraries.

I. Cloud SDK Installation

  • Windows

    1- Download and execute the following Cloud SDK installer(current version: 355)
    2- Follow the on-screen instructions (the installer is also used to upgrade existing installations) . 
    This image has an empty alt attribute; its file name is image-3.png
      

    3- Run the version command to confirm that Cloud SDK was installed correctly.
         

    C:Usersbrokedba gcloud --version
    Google Cloud SDK 355.0.0
    bq   2.0.71
    core 2021.08.27
    gsutil 4.67
    
    C:Usersbrokedba> where gcloud
     > C:Program Files (x86)Cloud SDKgoogle-cloud-sdkbingcloud
     > C:Program Files (x86)Cloud SDKgoogle-cloud-sdkbingcloud.cmd
    
    
  • Note: The installation can also be done through PowerShell in one liner command (gcloud,bq,gsutil commands can run from either Command Prompt or PowerShell).

    PS C:Usersbrokedba> (New-Object Net.WebClient).DownloadFile("https://dl.google.com/dl/cloudsdk/channels/rapid/GoogleCloudSDKInstaller.exe", "$env:TempGoogleCloudSDKInstaller.exe")
    
    
  • Linux
    There is either an all-in-one install using packages or using interactive shell script. Let’s start with the script
  • brokedba~$ curl -sL https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-355.0.0-linux-x86_64.tar.gz| sudo tar -xz && sudo bash ./google-cloud-sdk/install.sh

    -- Workflow Modify profile to update your $PATH and enable shell command completion?

    Do you want to continue (Y/n)?  y

    The Google Cloud SDK installer will now prompt you to update an rc file to bring the Google Cloud CLIs into your environment.

    Enter a path to an rc file to update, or leave blank to use [/home/brokedba/.bashrc]:

    brokedba~$ gcloud --version Google Cloud SDK 355.0.0 bq 2.0.71 core 2021.08.27 gsutil 4.67

    Ubuntu
    Option A

    We can use apt-get and install it as a package:

    1. Add the Cloud SDK distribution URI as a package source

    brokedba~$ echo "deb https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

    2. Import the GCP public key 

    brokedba~$ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

    3. Update and install the Cloud SDK

    brokedba~$ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

    Option B

    If you are fine with just the core components (gcloud,gsutil,bq, gsutil, kubectl, anthoscli, ..) you can install snap package which also handles the Autoupdate.

    brokedba~$ snap install google-cloud-sdk --classic

    ► REDHAT, Fedora, CENTOS, OLinux

    # RHEL/OL/CENTOS (7,8+), Fedora 24+  
    # – Create a DNF repo with CLoud SDK information 
    [@localhost]$ sudo tee -a /etc/yum.repos.d/google-cloud-sdk.repo << EOM 
    name=Google Cloud SDK
    baseurl=https://packages.cloud.google.com/yum/repos/cloud-sdk-el8-x86_64
    enabled=1
    gpgcheck=1
    repo_gpgcheck=0
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
           https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOM
    
    # Install CLOUD SDK rpm package 
    [r@localhost]# sudo yum install google-cloud-sdk

II. Initialize gcloud

Once your GCP Free Tier account is created and Cloud SDK installed. All you need is run gcloud init command to:

1- Authorize Cloud SDK to access the GCP platform using your user account
2- Set a new configuration including proper parameters like current project and default GCE region/zone etc..

This image has an empty alt attribute; its file name is image-4.png

If you don’t want browser’s auto launch for authorization you can use --console-only or --no-launch-browser 

    • The interactive workflow will ask you to hit the displayed link on a browser after entering your user credentials

This image has an empty alt attribute; its file name is image-6.png

    • When you click allow, a code will be provided which you will past on your terminal to complete the authorizationThis image has an empty alt attribute; its file name is image-7.png
    • Once authenticated, you will be asked to create a project if none exists in your account. project_id is globally unique
    • Part 2
       Enter verification code: 4/1AX4XfWhnJLpVgMtjxxxx..
        You are logged in as: [bdba@gmail.com].
        This account has no projects. Would you like to create one? (Y/n)?  y   
        Enter a Project ID. Note that a Project ID CANNOT be changed later.Project IDs 
        must be 6-30 characters in length and start with a lowercase letter. 
         brokedba2000
        Waiting for [operations/cp.9218677272527086685] to finish...done.     
       Your current project has been set to: [brokedba2000]. 
    • If you have an error while creating the project because of error “Callers must accept Terms of Service” make sure you accepted the terms in the console.

      This image has an empty alt attribute; its file name is image-8.png

    • You can now verify your default configuration after the initialization
      $ gcloud config list
      [compute]
      region = us-east1
      zone = us-east1-b
      [core]
      account = bdba@gmail.com
      disable_usage_reporting = True
      project = brokedba2000
      Your active configuration is: [default]

    III.Test your first API request

    Command structure: is based on the below components

    gcloud <--global flags> [service|product] <group|area> <command> <--flags> <parameters >
    
    group may be             access-approval | access-context-manager |
                             active-directory | ai | ai-platform | anthos |
                             api-gateway | apigee | app | artifacts | asset |
                             assured | auth | bigtable | billing | builds |
                             cloud-shell | components | composer | compute |
                             config | container | data-catalog |
                             database-migration | dataflow | dataproc | datastore |
                             debug | deployment-manager | dns | domains |
                             emulators | endpoints | essential-contacts | eventarc|
                             filestore | firebase | firestore | functions | game |
                             healthcare | iam | iap | identity | iot | kms |
                             logging | memcache | metastore | ml | ml-engine |
                             monitoring | network-management | network-security |
                             notebooks | org-policies | organizations |
                             policy-intelligence | policy-troubleshoot | privateca|
                             projects | pubsub | recaptcha | recommender | redis |
                             resource-manager | resource-settings | run | scc |
                             scheduler | secrets | service-directory | services |
                             source | spanner | sql | tasks | topic | workflows |
                             workspace-add-ons
    command may be         cheat-sheet | docker | feedback | help | info | init| 
                             survey | version
    Optional flags           --account | --billing-project | –configuration | –project |  
                             --flatten | --format | –filters | –quiet | --flags-file ..
                                        

    Topics: 
    `gcloud topic` provides supplementary help for topics not directly associated with individual commands.

    $ gcloud topic [TOPIC_NAME]
    Available commands for gcloud topic:
          accessibility           Reference for `Accessibility` features.
          arg-files               Supplementary help for arg-files to be used with
                                  *gcloud firebase test*.
          cli-trees               CLI trees supplementary help.
          client-certificate      Client certificate authorization supplementary
                                  help.
          command-conventions     gcloud command conventions supplementary help.
          configurations          Supplementary help for named configurations.
          datetimes               Date/time input format supplementary help.
          escaping                List/dictionary-type argument escaping
                                  supplementary help.
          filters                 Resource filters supplementary help.
          flags-file              --flags-file=YAML_FILE supplementary help.
          formats                 Resource formats supplementary help.
          gcloudignore            Reference for `.gcloudignore` files.
          projections             Resource projections supplementary help.
          resource-keys           Resource keys supplementary help.
          startup                 Supplementary help for gcloud startup options.
          uninstall               Supplementary help for uninstalling Cloud SDK.[core]
    
  • Result related flags  :

    1- “formats”: Will format gcloud output into Json, yaml, Table,raw value, or cvs including projections.
    2- “–filter”: Allows to pick the list of rows to return in the output in combination with formats.
    Example > list projects that were created after Jan 1st 2021 and only show 3 specific columns

  • $ gcloud projects list --format="table(projectNumber,projectId,createTime)"     --filter="createTime>2021-01-01"
    PROJECT_NUMBER  PROJECT_ID      CREATE_TIME
    260799562386    brokedba2000  2021-09-06T22:57:41.421Z
    
  • Command versions
    gcloud
    has different versions for its set of commands “alpha” and “beta”. Alpha means that the feature is typically not ready for production and might still be actively developed. Beta on the other hand is normally a completed feature, that is being tested to be production ready.
  • Examples 

    There are few requests that you can run to practice with gcloud. Below commands are good examples to start with.

  • list GCP regions in the US by selecting 3 fields on a tabular format and filtering the content on a specific pattern “us-

    $ gcloud compute regions list  --format="table[box](Name,CPUS,status)"    --filter="name~us-"

    +-----------------------------+ ¦     NAME    ¦ CPUS ¦ STATUS ¦ ------------------------------- ¦ us-central1 ¦ 0/8  ¦ UP     ¦ ¦ us-east1    ¦ 0/8  ¦ UP     ¦ ¦ us-east4    ¦ 0/8  ¦ UP     ¦ ¦ us-west1    ¦ 0/8  ¦ UP     ¦ ¦ us-west2    ¦ 0/8  ¦ UP     ¦ ¦ us-west3    ¦ 0/8  ¦ UP     ¦ ¦ us-west4    ¦ 0/8  ¦ UP     ¦ +-----------------------------+

  • Create a new project and assign it to the current configuration
  • $ gcloud projects create My-new-project --name="MY new LAB"  --labels=type=lab
    $ gcloud config set project My-new-project     
    -- Check project
    $ gcloud compute project-info describe –project My-new-project
    

  • Create and list Current vms in the current project :

    $ gcloud compute instances create myvm2 --machine-type=f1-micro --image-family debian-10 --image-project debian-cloud $ gcloud compute instances list  --filter="zone~ us-east1 OR -machineType:f1-micro" NAME   ZONE        MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS myvm   us-east1-b  f1-micro                   10.142.0.2   34.139.111.13  RUNNING|

  • Create and list a bucket in google storage :
  • $ gsutil mb -l us-east1 gs://omarlittle
    $ gsutil ls gs://omarlittle/**
    ..
  • Note: You can also display help on popular commands within a service or group/area which
  • $ gcloud help compute instances create

    NAME     gcloud compute instances create - create Compute Engine virtual machine    instances …


    Enable APIs or install components
 


    Not all APIs are enabled by default and not all CLOUD SDK components are installed by default . Manual enabling is necessary.

    -- APIs
    $ gcloud services list available
    $ gcloud services enable  compute.googleapis.com 
    -- components 
    $ gcloud components list
    $ gcloud components update
    $ gcloud components install COMPONENT_ID 
    

Conclusion:

In this tutorial we learned how to install and configure CLOUD SDK. We also described the command syntax and tried few requests using gcloud and gsutil. Feel free to consult Gcloud  Command Reference for more details and examples on gcloud requests.

Thanks for reading