mcpField
M
mastering-aws-cli

mastering-aws-cli

github.com/spillwavesolutionsCloud & DevOps92.6k installsUpdated 43w ago
Repository

About mastering-aws-cli

mastering-aws-cli is a reference skill for experienced developers managing AWS services with AWS CLI v2. It combines command examples, service navigation, configuration guidance, and operational patterns for scripting and troubleshooting.

Key features

  1. 01AWS CLI v2 command reference
  2. 02Service decision trees and guides
  3. 03Profiles, SSO, and credentials
  4. 04JMESPath filtering and output options
  5. 05Waiters, aliases, and command skeletons
  6. 06Security and troubleshooting practices

Use cases

  1. 01Managing AWS services from a terminal
  2. 02Filtering resource output in scripts
  3. 03Configuring profiles and SSO access
  4. 04Diagnosing common CLI errors

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/spillwavesolutions/mastering-aws-cli --skill mastering-aws-cli

After installing, type/mastering-aws-cliin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

.gitignore
README.md
references/
advanced-patterns.md
eks.md
bastion-tunneling.md
ecr.md
dynamodb.md
github-cicd.md
aurora.md
ecs.md
lambda.md
kinesis.md
msk.md
glue.md
s3.md
iam-security.md
private-parameters.md
vpc-networking.md
setup.md

Details

From the project README

AWS CLI v2 Quick Reference

A unified tool to manage AWS services from the terminal. This guide focuses on CLI v2 features, practical examples, and advanced patterns for experienced developers.

Quick Start

# Verify installation and version
aws --version

# Interactive configuration
aws configure                    # Access keys + region + output format
aws configure sso               # IAM Identity Center (SSO) - recommended

# Verify identity
aws sts get-caller-identity     # Shows Account, UserId, ARN

# Enable auto-prompt for command discovery
aws dynamodb --cli-auto-prompt

Power User Tips

# See all waiter commands for a service
aws ec2 wait help

# Generate command skeleton (fill in the blanks)
aws lambda create-function --generate-cli-skeleton > create-fn.json

# Create CLI alias for common commands
aws configure set cli_alias.whoami "sts get-caller-identity"
aws whoami  # Now works!

# Disable pager for scripting
export AWS_PAGER=""

See Advanced Patterns for JMESPath mastery and automation tricks.

Global Options

FlagDescription
--profile NAMEUse named profile from ~/.aws/credentials
--region REGIONOverride default region (e.g., us-east-1)
--output FORMATOutput: json (default), text, table, yaml, yaml-stream
--query EXPRFilter output using JMESPath expressions
--no-paginateDisable auto-pagination (first page only)
--dry-runCheck permissions without executing (EC2, etc.)
--debugVerbose HTTP/API debug logging
--cli-auto-promptInteractive parameter completion
--no-cli-pagerDisable output paging

Decision Trees

Compute & Containers
Need compute?
├── Serverless functions ────────────► Lambda (references/lambda.md)
├── Docker containers
│   ├── Managed orchestration ───────► ECS (references/ecs.md)
│   ├── Kubernetes ──────────────────► EKS (references/eks.md)
│   └── Container registry ──────────► ECR (references/ecr.md)
└── Virtual machines ────────────────► EC2 (use aws ec2 commands)
Data & Storage
Need data storage?
├── Object/blob storage ─────────────► S3 (references/s3.md)
├── NoSQL (key-value/document) ──────► DynamoDB (references/dynamodb.md)
├── Relational SQL ──────────────────► Aurora/RDS (references/aurora.md)
├── Data catalog & ETL ──────────────► Glue (references/glue.md)
└── Data warehouse ──────────────────► Redshift (aws redshift commands)
Streaming & Messaging
Need streaming/messaging?
├── Kafka-compatible ────────────────► MSK (references/msk.md)
├── Real-time streams ───────────────► Kinesis (references/kinesis.md)
├── Message queues ──────────────────► SQS (aws sqs commands)
└── Pub/Sub notifications ───────────► SNS (aws sns commands)
Security & Access
Need security/access management?
├── Users, roles, policies ──────────► IAM (references/iam-security.md)
├── Secrets & credentials ───────────► Secrets Manager/SSM (references/private-parameters.md)
├── Private network access ──────────► VPC (references/vpc-networking.md)
└── Secure tunneling ────────────────► SSM/Bastion (references/bastion-tunneling.md)

Reference File Navigation

ReferenceDescriptionKey Triggers
SetupInstallation, configuration, profiles, SSOinstall, configure, sso, profile
IAM & SecurityRoles, policies, STS, MFA, cross-accountiam, role, policy, sts, assume-role
LambdaFunctions, layers, aliases, URLs, eventslambda, serverless, function
ECSClusters, tasks, services, Fargateecs, fargate, task, container
EKSClusters, node groups, kubeconfig, IRSAeks, kubernetes, kubectl, k8s
ECRRepositories, auth, scanning, lifecycleecr, docker, registry, image
S3Buckets, objects, sync, presign, lifecycles3, bucket, upload, sync
DynamoDBTables, items, queries, streams, backupsdynamodb, ddb, nosql
Aurora/RDSClusters, serverless v2, cloning, blue-greenrds, aurora, mysql, postgresql
GlueCatalog, crawlers, ETL jobs, workflowsglue, etl, catalog, crawler
MSKKafka clusters, serverless, configurationmsk, kafka, streaming
KinesisData streams, Firehose, consumerskinesis, stream, firehose
Secrets & ParamsParameter Store, Secrets Manager, rotationssm, secrets, parameter, rotation
VPC & NetworkingVPCs, subnets, security groups, endpointsvpc, subnet, security-group, endpoint
Bastion & TunnelingSSM Session Manager, port forwardingbastion, tunnel, ssm, ssh
GitHub CI/CDOIDC, GitHub Actions, CodeBuildgithub, actions, oidc, cicd
Advanced PatternsJMESPath, waiters, skeletons, aliasesjmespath, query, waiter, alias

Environment Variables

VariablePurposeExample
AWS_ACCESS_KEY_IDAccess key for authenticationAKIAIOSFODNN7EXAMPLE
AWS_SECRET_ACCESS_KEYSecret key for authenticationwJalrXUtnFEMI/...
AWS_SESSION_TOKENSession token (temporary credentials)For STS assume-role
AWS_PROFILENamed profile to useproduction
AWS_REGIONAWS region for requestsus-west-2
AWS_DEFAULT_OUTPUTDefault output formatjson, text, table
AWS_PAGERPager program (empty to disable)""
AWS_CONFIG_FILECustom config file path~/.aws/config
AWS_SHARED_CREDENTIALS_FILECustom credentials file path~/.aws/credentials
AWS_CA_BUNDLECustom CA certificate bundle/path/to/cert.pem
AWS_RETRY_MODERetry modestandard, adaptive

Credential Precedence

The CLI resolves credentials in this order (first match wins):

  1. Command-line options (--profile, explicit credentials)
  2. Environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
  3. Web identity token (EKS IRSA, OIDC)
  4. SSO credentials (IAM Identity Center)
  5. Credentials file (~/.aws/credentials)
  6. Config file (~/.aws/config with credential_process)
  7. Container credentials (ECS task role)
  8. Instance metadata (EC2 instance profile, IMDSv2)

Common Patterns

Profile Switching
# Use specific profile for one command
aws s3 ls --profile production

# Set default profile for session
export AWS_PROFILE=production

# List configured profiles
aws configure list-profiles
Output Filtering with JMESPath
# Get specific fields
aws ec2 describe-instances \
    --query 'Reservations[*].Instances[*].[InstanceId,State.Name]' \
    --output table

# Filter running instances
aws ec2 describe-instances \
    --query 'Reservations[*].Instances[?State.Name==`running`].InstanceId' \
    --output text
Wait for Resource State
# Wait for instance to be running
aws ec2 wait instance-running --instance-ids i-1234567890abcdef0

# Wait for Lambda function update
aws lambda wait function-updated --function-name my-function

Best Practices

CategoryRecommendation
SecurityUse aws configure sso over long-lived access keys
SecurityUse IAM roles for compute (EC2/Lambda/ECS) instead of embedded keys
SecurityEnable MFA for sensitive operations
ScriptingUse --output json or --output text for parsing
ScriptingUse --query to filter data and reduce output
SafetyUse --dry-run before destructive operations
PerformanceUse --page-size to control memory on large lists
RegionsExplicitly set region in scripts to avoid surprises
CostUse lifecycle policies (S3/ECR) for automatic cleanup
DebuggingUse --debug to see raw HTTP requests/responses

Common Errors Quick Reference

ErrorCauseFix
ExpiredTokenSession credentials expiredRun aws sso login or aws sts get-session-token
AccessDeniedMissing IAM permissionsCheck IAM policy; use --debug to see required action
InvalidClientTokenIdInvalid access keyVerify AWS_ACCESS_KEY_ID or run aws configure
UnauthorizedAccessWrong region or accountCheck --region flag and aws sts get-caller-identity
ThrottlingExceptionAPI rate limit exceededAdd retry logic with exponential backoff
NoCredentialProvidersNo credentials foundCheck credential chain; run aws configure list

For detailed troubleshooting, see Setup.

When Not to Use

  • AWS SDK code — For boto3, AWS SDK for JavaScript, etc., use programming documentation
  • CloudFormation/Terraform — This skill covers CLI commands, not IaC templates
  • Console UI steps — CLI-focused; use AWS documentation for console walkthroughs
  • Pricing/billing — Use AWS pricing calculator or Cost Explorer documentation

Quick Command Reference

# Identity & Access
aws sts get-caller-identity
# → {"Account": "123456789012", "UserId": "AIDAEXAMPLE", "Arn": "arn:aws:iam::123456789012:user/dev"}

aws sts assume-role --role-arn arn:aws:iam::123456789012:role/Admin --role-session-name mysession
# → {"Credentials": {"AccessKeyId": "ASIA...", "SecretAccessKey": "...", "SessionToken": "..."}}

# S3
aws s3 ls
# → 2024-01-15 bucket-name-1
# → 2024-02-20 bucket-name-2

aws s3 sync ./local s3://bucket/prefix --delete

# Lambda
aws lambda invoke --function-name fn response.json
# → {"StatusCode": 200, "ExecutedVersion": "$LATEST"}

aws lambda update-function-code --function-name fn --zip-file fileb://code.zip
# → {"FunctionName": "fn", "LastModified": "2024-12-28T...", "State": "Active"}

# ECS
aws ecs list-clusters
# → {"clusterArns": ["arn:aws:ecs:us-east-1:123456789012:cluster/prod"]}

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

# EKS
aws eks update-kubeconfig --name my-cluster
# → Added new context arn:aws:eks:us-east-1:123456789012:cluster/my-cluster

aws eks list-clusters
# → {"clusters": ["my-cluster", "dev-cluster"]}

# Secrets
aws secretsmanager get-secret-value --secret-id prod/api/key --query SecretString --output text
# → sk_live_xxxxxxxxxxxxx

aws ssm get-parameter --name /app/prod/db/host --with-decryption --query Parameter.Value --output text
# → db.example.com

# Debugging
aws ssm start-session --target i-0123456789abcdef0
# → Starting session with SessionId: user-0a1b2c3d4e5f67890

Comments

Markdown supported