DEV Community

丁久
丁久

Posted on • Originally published at dingjiu1989-hue.github.io

Cloud CLI Tools: aws-cli, gcloud, az, s5cmd, Cloud Comparisons

This article was originally published on AI Study Room. For the full version with working code examples and related articles, visit the original post.

Cloud CLI Tools: aws-cli, gcloud, az, s5cmd, Cloud Comparisons

Introduction

Cloud provider CLIs are essential for infrastructure management, automation, and day-to-day operations. Each major cloud provider has its own CLI with unique features and syntax. This article covers the primary CLIs (aws-cli, gcloud, az) plus s5cmd for high-performance S3 operations, with practical examples and productivity patterns.

AWS CLI

The most mature cloud CLI, now at version 2:

# Installation

curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"

sudo installer -pkg AWSCLIV2.pkg -target /

# Or via brew

brew install awscli

# Configuration

aws configure

aws configure set region us-west-2

aws configure set cli_pager ""

# Profile management

aws configure --profile production

aws s3 ls --profile production

export AWS_PROFILE=production

# Common operations

aws s3 ls s3://my-bucket/ --recursive --human-readable

aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,InstanceType,State.Name]" --output table

aws s3 sync ./dist s3://my-website/ --delete --exact-timestamps

aws logs tail /aws/lambda/my-function --follow

aws ecs update-service --cluster prod --service api --force-new-deployment

# With JMESPath filtering

aws ec2 describe-instances \

  --filters "Name=instance-state-name,Values=running" \

  --query "Reservations[*].Instances[?Tags[?Key=='Environment' && Value=='production']].[InstanceId,PrivateIpAddress,InstanceType]" \

  --output json
Enter fullscreen mode Exit fullscreen mode

Productivity aliases:

# ~/.zshrc

alias awsp="export AWS_PROFILE=$(aws configure list-profiles | fzf)"

alias aws-whoami="aws sts get-caller-identity"

alias s3ls="aws s3 ls"

alias s3sync="aws s3 sync"

alias ec2ls="aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,InstanceType,State.Name,LaunchTime]' --output table"

alias logs-tail="aws logs tail --follow"
Enter fullscreen mode Exit fullscreen mode

gcloud (Google Cloud CLI)

# Installation

brew install --cask google-cloud-sdk

# Or via curl

curl https://sdk.cloud.google.com | bash

exec -l $SHELL

# Authentication

gcloud auth login

gcloud auth application-default login

gcloud config set project my-project

gcloud config set compute/region us-central1

# Common operations

gcloud compute instances list

gcloud container clusters get-credentials prod-cluster --region us-central1

gcloud builds submit --tag gcr.io/my-project/my-service

gcloud run deploy my-service --image gcr.io/my-project/my-service --platform managed

gcloud logging read "resource.type=cloud_run_revision AND severity>=ERROR" --limit 50

gcloud sql instances describe my-db

# Configuration management

gcloud config configurations create dev

gcloud config configurations activate prod

gcloud config list
Enter fullscreen mode Exit fullscreen mode

Azure CLI (az)

# Installation

brew install azure-cli

# Authentication

az login

az account set --subscription "my-subscription"

# Common operations

az vm list --output table

az aks get-credentials --resource-group my-rg --name my-cluster

az acr build --registry myregistry --image myapp:latest .

az webapp log tail --name my-app --resource-group my-rg

az sql db show --resource-group my-rg --server my-server --name my-db

az group list --query "[].{Name:name, Location:location}" --output table

# JMESPath queries

az vm list --query "[?tags.Environment=='production'].{Name:name, Size:hardwareProfile.vmSize}" --output table
Enter fullscreen mode Exit fullscreen mode

s5cmd

A high-performance S3 CLI written in Go:

# Installation

brew install s5cmd

# Configuration (reuses AWS CLI credentials)

# Just set AWS_PROFILE or AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY

# Speed comparison

# Copy 10,000 files:

time aws s3 cp --recursive s3://bucket/prefix/ ./local/  # ~60 seconds

time s5cmd cp "s3://bucket/prefix/*" ./local/             # ~8 seconds

# Operations

s5cmd ls s3://my-bucket/

s5cmd cp s3://bucket/key.gz ./

s5cmd mv s3://bucket/old-key s3://bucket/new-key

s5cmd rm s3://bucket/old-prefix/*

# Batch operations from file

echo "s3://bucket/logs/2026-01-01.log" > files.txt

echo "s3://bucket/logs/2026-01-02.log" >> files.txt

s5cmd cp files.txt ./logs/

# Run commands in parallel

s5cmd --numworkers 64 cp s3://large-bucket/* ./downloads/

# Dry run

s5cmd --dry-run cp s3://bucket/* ./local/
Enter fullscreen mode Exit fullscreen mode

Multi-Cloud Tools

# Cloud-specific environment management

# aws-vault — secure AWS credential management

brew install aws-vault

aws-vault add prod

aws-vault exec prod -- aws s3 ls

# AWS SSO helper

aws sso login --profile prod

export AWS_PROFILE=prod

# Cloud comparison commands

echo "=== AWS ==="

aws sts get-caller-identity

echo "=== GCP
Enter fullscreen mode Exit fullscreen mode

Read the full article on AI Study Room for complete code examples, comparison tables, and related resources.

Found this useful? Check out more developer guides and tool comparisons on AI Study Room.

Top comments (0)