Interview Q&A All Levels Aws

AWS Interview Questions & Answers (2026)

50+ AWS interview questions and answers covering EC2, S3, IAM, VPC, ALB, RDS, Lambda, EBS, EKS, and more — Basic to Advanced.

April 26, 2025 17 min read 50 Questions DB
Level:

Ans:

Cloud computing delivers computing resources (servers, storage, networking, software) over the internet on-demand with pay-as-you-go pricing.

ModelFull FormWho manages infra?Example
IaaSInfrastructure as a ServiceYou manage OS, apps; Provider manages hardwareAWS EC2, Azure VMs
PaaSPlatform as a ServiceProvider manages OS + runtime; You manage appsAWS Elastic Beanstalk, Heroku
SaaSSoftware as a ServiceProvider manages everythingGmail, Salesforce, Office 365
IaaS → Rent servers (you install everything)
PaaS → Rent a platform (you just deploy code)
SaaS → Use ready-made software (nothing to manage)

Ans:

ConceptDefinition
RegionA geographic area (e.g., us-east-1, ap-south-1). Contains 2–6 AZs.
Availability Zone (AZ)An isolated data center within a region (e.g., us-east-1a, us-east-1b). Has independent power, networking, cooling.

Why it matters:

  • Deploy across multiple AZs → survive data center failure
  • Deploy across multiple Regions → survive regional disaster
Region: us-east-1 (N. Virginia)
  ├── AZ: us-east-1a
  ├── AZ: us-east-1b
  └── AZ: us-east-1c

Ans:

FeatureSecurity GroupNetwork ACL
LevelInstance (EC2) levelSubnet level
StateStateful (return traffic auto-allowed)Stateless (must allow inbound AND outbound explicitly)
RulesAllow onlyAllow and Deny
Rule evaluationAll rules evaluatedRules evaluated in order (lowest number first)
Applies toSpecific EC2 instancesAll resources in the subnet
Example:
Security Group:Allow port 80 inbound → response traffic on port 80 auto-allowed outbound
NACL:Allow port 80 inbound → must also explicitly allow ephemeral ports (1024-65535) outbound

Ans:

ConceptDefinitionWhen to use
IAM PolicyJSON document defining permissions (Allow/Deny actions on resources)Attach to users, groups, or roles
IAM RoleAn identity that can be assumed by a service, user, or application. Has policies attached.When an AWS service (EC2, Lambda) needs to access other AWS services

Example flow:

EC2 instance → assumes IAM Role "S3ReadRole"
IAM Role has policy: { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "*" }
EC2 can now read S3 without hardcoded credentials
# Check what role an EC2 has
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/

Ans:

ClassUse CaseAccessCost
S3 StandardFrequently accessed dataInstantHighest storage cost
S3 Standard-IA (Infrequent Access)Accessed monthly, but needs fast retrievalInstantLower storage, retrieval fee
S3 One Zone-IAInfrequent, non-critical dataInstantCheapest IA, single AZ
S3 Glacier InstantArchives accessed a few times a yearMillisecondsVery low storage
S3 Glacier FlexibleLong-term archiveMinutes to hoursVery low
S3 Glacier Deep ArchiveRegulatory/compliance archiveUp to 12 hoursLowest cost
# Move objects between classes using lifecycle rules
aws s3api put-bucket-lifecycle-configuration \
  --bucket my-bucket \
  --lifecycle-configuration file://lifecycle.json

Ans:

Architecture:

Internet → ALB → Target Group → Auto Scaling Group → EC2 instances

How it works:

  1. ALB distributes traffic across healthy EC2 instances in the Target Group
  2. Auto Scaling Group monitors CloudWatch metrics (CPU, request count)
  3. When CPU > 70% for 5 minutes → Scale Out: launch new EC2s, register them with ALB
  4. When CPU < 30% for 10 minutes → Scale In: terminate EC2s, deregister from ALB

Real Scenario:

E-commerce site during a flash sale:
- Normal: 2 EC2 instances
- Sale starts → CPU spikes to 90%
- ASG triggers scale-out → launches 4 more instances
- ALB starts routing traffic to new instances (health check passes)
- Sale ends → CPU drops → ASG scales back to 2 instances
# Create scaling policy
aws autoscaling put-scaling-policy \
  --auto-scaling-group-name my-asg \
  --policy-name scale-out \
  --scaling-adjustment 2 \
  --adjustment-type ChangeInCapacity

Ans:

# Option 1: AWS Secrets Manager (recommended)
# Store secret
aws secretsmanager create-secret \
  --name prod/db-password \
  --secret-string '{"password":"myS3cret"}'

# Retrieve in pipeline script
SECRET=$(aws secretsmanager get-secret-value \
  --secret-id prod/db-password \
  --query SecretString --output text)

# Option 2: AWS SSM Parameter Store (cheaper)
aws ssm put-parameter \
  --name /myapp/db-password \
  --value "myS3cret" \
  --type SecureString

# Retrieve
aws ssm get-parameter \
  --name /myapp/db-password \
  --with-decryption \
  --query Parameter.Value --output text

# Option 3: Jenkins Credentials Manager
# Store in Jenkins → Manage Credentials → use in pipeline:
# withCredentials([string(credentialsId: 'db-pass', variable: 'DB_PASS')]) {}

Best Practices:

  • Never hardcode secrets in Jenkinsfile, .env, or Dockerfile
  • Use IAM roles (not access keys) for EC2/ECS/Lambda
  • Rotate secrets regularly via Secrets Manager rotation
  • Audit secret access with CloudTrail

Ans:

FeatureECS (Elastic Container Service)EKS (Elastic Kubernetes Service)
OrchestratorAWS proprietaryKubernetes (open-source)
Learning curveLowerHigher
PortabilityAWS onlyPortable (runs on any K8s)
Control planeFully managed (free)Managed, but costs ~$0.10/hr
Launch typesEC2 or FargateEC2, Fargate, or on-prem
Config formatTask Definitions (JSON)YAML manifests
Use caseSimple containers, AWS-native teamsComplex apps, multi-cloud, K8s expertise
# ECS: Deploy a task
aws ecs run-task --cluster my-cluster --task-definition my-task

# EKS: Standard kubectl
kubectl apply -f deployment.yaml

Ans:

# Step 1: Check instance status in AWS Console
# EC2 → Instances → Status Checks (System reachability, Instance reachability)

# Step 2: Check System Log
# EC2 → Actions → Monitor → Get System Log

# Step 3: Try to connect
ssh -i key.pem ec2-user@<public-ip>

# Step 4: If SSH fails, check Security Group allows port 22
aws ec2 describe-security-groups --group-ids sg-xxxxx

# Step 5: Check if instance has public IP / Elastic IP
aws ec2 describe-instances --instance-ids i-xxxxx

# Step 6: Check CloudWatch metrics
# CPU, Network In/Out, StatusCheckFailed

# Step 7: Check application logs (if accessible via SSM Session Manager)
sudo journalctl -xe
sudo tail -f /var/log/messages

# Step 8: If truly stuck — stop/start (not reboot) to move to new host
aws ec2 stop-instances --instance-ids i-xxxxx
aws ec2 start-instances --instance-ids i-xxxxx

# Step 9: If OS is corrupt, detach EBS, attach to another instance, inspect

Ans:

Internet
    │
Route 53 (DNS with health checks)
    │
CloudFront (CDN + DDoS protection via WAF)
    │
Application Load Balancer (Multi-AZ)
    │
Auto Scaling Group
    ├── EC2 in AZ-a (Private Subnet)
    └── EC2 in AZ-b (Private Subnet)
    │
RDS Multi-AZ (Primary in AZ-a, Standby in AZ-b)
    │
ElastiCache (Redis cluster mode)
    │
S3 (Static assets, backups)

Key components:

  • Route 53 with failover routing for DNS-level HA
  • ALB across minimum 2 AZs
  • ASG with min=2 instances across AZs
  • RDS Multi-AZ — automatic failover in 60-120 seconds
  • ElastiCache cluster for session/cache HA
  • VPC with public subnets (ALB) and private subnets (EC2, RDS)
  • NAT Gateway in each AZ for private subnet internet access
  • CloudWatch + SNS for alerting

Ans:

# Step 1: Check Target Group health in ALB console
# ALB → Target Groups → Targets → Check health status & reason

# Step 2: Check the health check configuration
# Protocol, Port, Path, Healthy/Unhealthy thresholds, Timeout

# Step 3: SSH to EC2 and test the health check endpoint locally
curl http://localhost:80/health

# Step 4: Check application logs
tail -f /var/log/app/application.log
journalctl -u myapp -f

# Step 5: Check if the app is listening on the expected port
ss -tulnp | grep :80
netstat -tulnp | grep :80

# Step 6: Check Security Group allows ALB to reach EC2
# ALB SG → EC2 SG: allow inbound on app port (e.g., 8080)

# Step 7: Check EC2 disk/memory (app may be crashing)
df -h
free -m
top

# Step 8: Restart the application service
sudo systemctl restart myapp

Ans:

# Immediate Actions:

# Step 1: Enable Storage Autoscaling (if not already on)
# AWS Console → RDS → Modify → Storage Autoscaling → Enable
# Or via CLI:
aws rds modify-db-instance \
  --db-instance-identifier mydb \
  --max-allocated-storage 200 \
  --apply-immediately

# Step 2: Manually increase allocated storage (no downtime for most engines)
aws rds modify-db-instance \
  --db-instance-identifier mydb \
  --allocated-storage 200 \
  --apply-immediately

# Step 3: Identify storage hogs on the DB side
# Connect to RDS and run:
# MySQL:
SELECT table_schema, SUM(data_length + index_length)/1024/1024 AS 'Size (MB)'
FROM information_schema.TABLES
GROUP BY table_schema
ORDER BY 2 DESC;

# Step 4: Purge old data or move to archive table
# Step 5: Set up CloudWatch alarm on FreeStorageSpace metric

Ans:

Account A → CloudWatch Logs → Kinesis Data Firehose ──┐
Account B → CloudWatch Logs → Kinesis Data Firehose ──┤→ Central S3 / OpenSearch
Account C → CloudWatch Logs → Kinesis Data Firehose ──┘
                                                        ↓
                                                    Grafana / Kibana

Implementation steps:

  1. Enable CloudWatch Logs on all services in each account
  2. Create a Kinesis Data Firehose in a central logging account
  3. Use cross-account IAM roles to allow accounts to put logs to Firehose
  4. Firehose delivers to S3 (long-term) and OpenSearch (search/query)
  5. Use AWS Organizations + CloudTrail organization trail for audit logs
  6. Set up Grafana or Kibana dashboards for visualization
# Create organization CloudTrail (all accounts → central S3)
aws cloudtrail create-trail \
  --name org-trail \
  --s3-bucket-name central-audit-logs \
  --is-organization-trail \
  --is-multi-region-trail

Ans:

# Step 1: Check current timeout setting
aws lambda get-function-configuration \
  --function-name my-function \
  --query 'Timeout'

# Step 2: Increase timeout (max 15 minutes)
aws lambda update-function-configuration \
  --function-name my-function \
  --timeout 300

# Step 3: Check CloudWatch Logs for WHERE it's timing out
aws logs filter-log-events \
  --log-group-name /aws/lambda/my-function \
  --filter-pattern "Task timed out"

# Step 4: Check for cold start issues
# Add X-Ray tracing:
aws lambda update-function-configuration \
  --function-name my-function \
  --tracing-config Mode=Active

# Step 5: Common causes and fixes:
# - DB connection pool exhaustion → use RDS Proxy
# - External API calls slow → add timeouts, caching
# - Large payload → increase memory (also increases CPU)
# - VPC cold start → enable Provisioned Concurrency
# - Recursive calls → add exit conditions

# Step 6: Increase memory (improves CPU allocation)
aws lambda update-function-configuration \
  --function-name my-function \
  --memory-size 512

Ans:

# From inside the EC2 instance:

# Check attached IAM role
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/

# Get credentials for the role
ROLE_NAME=$(curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/)
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/$ROLE_NAME

# Test specific permissions
aws sts get-caller-identity          # Who am I?
aws s3 ls s3://my-bucket/            # Can I access S3?
aws ec2 describe-instances           # Can I describe EC2?

# From AWS CLI (on your laptop):
aws ec2 describe-instances \
  --query 'Reservations[].Instances[].IamInstanceProfile'

# Check effective permissions
aws iam simulate-principal-policy \
  --policy-source-arn arn:aws:iam::123456789:role/MyRole \
  --action-names s3:GetObject \
  --resource-arns arn:aws:s3:::my-bucket/*

Ans:

# From inside EC2:

# List block devices and sizes
lsblk
# Output shows: NAME, SIZE, TYPE, MOUNTPOINT

# Check filesystem and usage
df -hT

# Check disk details
sudo fdisk -l

# Using AWS CLI (from your laptop or EC2 with IAM role):
aws ec2 describe-volumes \
  --filters Name=attachment.instance-id,Values=i-1234567890abcdef0

# Check which volume is attached to which device
aws ec2 describe-instances \
  --instance-ids i-1234567890abcdef0 \
  --query 'Reservations[].Instances[].BlockDeviceMappings'

Ans:

# Step 1: Modify EBS volume size in AWS Console or CLI (no downtime)
aws ec2 modify-volume \
  --volume-id vol-xxxxxxxx \
  --size 100

# Step 2: Wait for modification to complete
aws ec2 describe-volumes-modifications \
  --volume-ids vol-xxxxxxxx

# Step 3: SSH into EC2 and extend the partition/filesystem
# Check current state
lsblk

# Grow partition (for nvme/xvd devices)
sudo growpart /dev/xvda 1
# or
sudo growpart /dev/nvme0n1 1

# Step 4: Resize the filesystem
# For ext4:
sudo resize2fs /dev/xvda1

# For xfs (Amazon Linux 2 default):
sudo xfs_growfs /

# Step 5: Verify
df -h
lsblk

Ans:

# Method 1: AWS CLI
aws ec2 create-snapshot \
  --volume-id vol-xxxxxxxx \
  --description "My backup snapshot $(date +%Y-%m-%d)"

# Method 2: AWS Console
# EC2 → Volumes → Select volume → Actions → Create Snapshot

# Automate snapshots with DLM (Data Lifecycle Manager):
aws dlm create-lifecycle-policy \
  --description "Daily EBS Snapshots" \
  --state ENABLED \
  --execution-role-arn arn:aws:iam::xxxx:role/AWSDataLifecycleManagerDefaultRole \
  --policy-details file://policy.json

# List snapshots
aws ec2 describe-snapshots \
  --owner-ids self \
  --query 'Snapshots[*].{ID:SnapshotId,Size:VolumeSize,Date:StartTime}'

Ans:

# Step 1: Attach volume to EC2 from AWS Console/CLI
aws ec2 attach-volume \
  --volume-id vol-xxxxxxxx \
  --instance-id i-xxxxxxxx \
  --device /dev/sdf

# Step 2: Verify attachment inside EC2
lsblk
# New device appears (e.g., xvdf or nvme1n1)

# Step 3: Check if it has a filesystem
sudo file -s /dev/xvdf
# If output: "/dev/xvdf: data" → no filesystem, format it:
sudo mkfs -t ext4 /dev/xvdf

# Step 4: Create mount point and mount
sudo mkdir -p /data
sudo mount /dev/xvdf /data

# Step 5: Make mount persistent across reboots
# Get UUID
sudo blkid /dev/xvdf

# Add to /etc/fstab
echo "UUID=xxxx-xxxx  /data  ext4  defaults,nofail  0  2" | sudo tee -a /etc/fstab

# Verify fstab
sudo mount -a
df -h

Ans:

# Step 1: Identify the filesystem
df -h
mount | grep "ro,"   # Look for read-only mounts

# Step 2: Check system logs for errors
dmesg | grep -i "remount\|read-only\|error\|ext4"
journalctl -xe | grep -i "filesystem\|read-only"

# Step 3: Try remounting read-write
sudo mount -o remount,rw /

# Step 4: Check for filesystem errors
# Unmount first (use liveCD/rescue mode for root fs):
sudo umount /dev/xvdf
sudo fsck -y /dev/xvdf    # Check and auto-fix errors
sudo mount /dev/xvdf /data

# Step 5: For EBS — check AWS CloudWatch for I/O errors
# EBS volume may have failed → create new from snapshot

# Step 6: Check /etc/fstab for incorrect options
cat /etc/fstab

# Root cause: filesystem errors cause kernel to remount as read-only to prevent corruption

Ans:

# Prevention is key. Recovery options depend on what you had enabled:

# Option 1: S3 Versioning (best protection)
# If versioning was enabled, deleted objects have delete markers
# List delete markers:
aws s3api list-object-versions \
  --bucket my-deleted-bucket \
  --query 'DeleteMarkers[*]'

# Remove delete markers to restore:
aws s3api delete-object \
  --bucket my-bucket \
  --key myfile.txt \
  --version-id <delete-marker-version-id>

# Option 2: S3 Replication backup
# If cross-region/cross-account replication was configured,
# copy objects back from the destination bucket

# Option 3: Restore from backup
aws s3 sync s3://backup-bucket/ s3://recreated-bucket/

# Option 4: If no versioning/backup existed → data is permanently lost

# Best Practice to prevent this:
# - Enable versioning
# - Enable MFA Delete
# - Enable S3 Replication
# - Set bucket policy to deny DeleteBucket

Ans:

# Step 1: Enable CloudWatch Logs for each service:
# EC2: Install CloudWatch Agent
sudo yum install amazon-cloudwatch-agent
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

# Lambda: Auto-logs to /aws/lambda/<function-name>

# ALB/ELB: Enable access logs
aws elbv2 modify-load-balancer-attributes \
  --load-balancer-arn arn:aws:elasticloadbalancing:... \
  --attributes Key=access_logs.s3.enabled,Value=true \
               Key=access_logs.s3.bucket,Value=my-alb-logs

# Step 2: Create Log Groups with retention
aws logs put-retention-policy \
  --log-group-name /myapp/production \
  --retention-in-days 30

# Step 3: Subscribe logs to Kinesis or Lambda for aggregation
# Step 4: Use CloudWatch Insights for querying
aws logs start-query \
  --log-group-name /myapp/production \
  --start-time $(date -d "1 hour ago" +%s) \
  --end-time $(date +%s) \
  --query-string 'fields @timestamp, @message | filter @message like /ERROR/'

Ans:

# Method 1: AWS Console
# ALB → Target Groups → Select TG → Targets tab → Check Status column

# Method 2: AWS CLI
aws elbv2 describe-target-health \
  --target-group-arn arn:aws:elasticloadbalancing:region:account:targetgroup/...

# Method 3: From inside EC2 — test health check endpoint locally
curl http://localhost:80/health
curl http://localhost:8080/

# Method 4: Check registration status
aws elbv2 describe-target-health \
  --target-group-arn <arn> \
  --query 'TargetHealthDescriptions[*].{ID:Target.Id,Port:Target.Port,Health:TargetHealth.State,Reason:TargetHealth.Reason}'

# Common unhealthy reasons:
# - Target.FailedHealthChecks: App not responding on health check port/path
# - Target.NotRegistered: Not in target group
# - Target.NotInUse: Target group not attached to ALB

Ans:

Route 53 is AWS’s highly available DNS (Domain Name System) and domain registration service.

Key features:

  • DNS resolution — Translates domain names to IP addresses
  • Domain registration — Buy and manage domains
  • Health checks — Monitor endpoints, failover automatically
  • Routing policies:
PolicyUse Case
SimpleSingle resource
WeightedA/B testing, traffic split
LatencyRoute to lowest-latency region
FailoverPrimary/secondary DR
GeolocationRoute by user’s country/continent
Multi-valueMultiple healthy records
# Create a simple A record
aws route53 change-resource-record-sets \
  --hosted-zone-id ZONEID \
  --change-batch '{"Changes":[{"Action":"CREATE","ResourceRecordSet":{"Name":"app.example.com","Type":"A","TTL":300,"ResourceRecords":[{"Value":"1.2.3.4"}]}}]}'

Ans:

User Data is a script that runs automatically when an EC2 instance launches for the first time. It’s used to bootstrap instances — install software, configure services, pull code.

#!/bin/bash
# Example User Data script
yum update -y
yum install -y nginx
systemctl start nginx
systemctl enable nginx
echo "<h1>Hello from EC2</h1>" > /var/www/html/index.html

Key points:

  • Runs as root at launch
  • Only runs once (on first boot, unless configured otherwise)
  • Maximum size: 16KB
  • Logs go to: /var/log/cloud-init-output.log
# View user data from inside EC2
curl http://169.254.169.254/latest/user-data

# Debug user data execution
cat /var/log/cloud-init-output.log

Ans:

SSL termination is the process of decrypting HTTPS traffic at the load balancer (or reverse proxy) level, so backend servers receive plain HTTP traffic.

Client ──HTTPS──► ALB (SSL Termination) ──HTTP──► EC2/Container

When to use SSL termination:

  • At ALB/ELB — reduces CPU load on backend EC2 instances
  • Certificates managed centrally (AWS ACM) — easier rotation
  • Backend services don’t need SSL knowledge

When NOT to terminate (End-to-End Encryption):

  • Compliance requirements (PCI-DSS, HIPAA) mandating encryption in transit
  • Financial/medical data requiring encryption all the way to the application
# Configure HTTPS listener on ALB with ACM certificate
aws elbv2 create-listener \
  --load-balancer-arn <alb-arn> \
  --protocol HTTPS \
  --port 443 \
  --certificates CertificateArn=arn:aws:acm:region:account:certificate/xxx \
  --default-actions Type=forward,TargetGroupArn=<tg-arn>

Ans:

FeatureALB (Layer 7)NLB (Layer 4)
OSI LayerLayer 7 (HTTP/HTTPS)Layer 4 (TCP/UDP/TLS)
RoutingBy path, host, headers, query stringBy IP and port
PerformanceModerateExtreme (millions of req/sec)
Static IPNo (use with NLB for static)Yes (1 static IP per AZ)
WebSocketsYesYes
Use casesMicroservices, REST APIs, web appsGaming, IoT, real-time, TCP apps
SSL terminationYesYes (TLS listener)
Health checksHTTP/HTTPSTCP/HTTP/HTTPS

Rule of thumb:

  • HTTP/HTTPS web traffic → ALB
  • TCP performance-critical → NLB
  • Both needed → ALB behind NLB

Ans:

NACL (Network Access Control List) is a stateless firewall at the subnet level in a VPC.

VPC
└── Subnet (has NACL)
    └── EC2 instance (has Security Group)

Key characteristics:

  • Applied to all resources in a subnet
  • Stateless — must explicitly allow both inbound AND outbound
  • Rules evaluated by rule number (lowest first; first match wins)
  • Has explicit Deny rules (unlike Security Groups)
  • Rule number 100 evaluated before 200, etc.
# Default NACL: Allow all inbound and outbound
# Custom NACL: Deny all by default

# Example: Allow HTTP inbound and deny a specific IP
Rule 100: Allow TCP port 80 inbound from 0.0.0.0/0
Rule 200: Deny ALL from 1.2.3.4/32
Rule *:   Deny ALL (implicit)

Ans:

No. By default, AWS allows 5 Elastic IPs per region per account. This limit can be increased by submitting a service quota increase request.

# List Elastic IPs
aws ec2 describe-addresses

# Allocate a new Elastic IP
aws ec2 allocate-address --domain vpc

# Associate with an EC2 instance
aws ec2 associate-address \
  --instance-id i-xxxxxxxx \
  --allocation-id eipalloc-xxxxxxxx

# Release (to avoid charges when not associated)
aws ec2 release-address --allocation-id eipalloc-xxxxxxxx

Important: Elastic IPs are free when associated with a running instance. You’re charged when it’s allocated but not associated.

Ans:

# 1. Right-size EC2 instances (use AWS Compute Optimizer)
aws compute-optimizer get-ec2-instance-recommendations

# 2. Use Reserved Instances or Savings Plans (up to 72% savings)
# For predictable workloads → purchase 1 or 3-year RI

# 3. Use Spot Instances for non-critical/batch workloads
aws ec2 request-spot-instances \
  --spot-price "0.05" \
  --instance-count 2 \
  --type one-time \
  --launch-specification file://spec.json

# 4. Auto-stop idle EC2 instances
# Use AWS Instance Scheduler or CloudWatch Events

# 5. Delete unused EBS volumes
aws ec2 describe-volumes --filters Name=status,Values=available
# Volumes in 'available' state → not attached → costing money

# 6. Remove unused Elastic IPs
aws ec2 describe-addresses --query 'Addresses[?!InstanceId]'

# 7. Use S3 lifecycle policies to move old data to Glacier
# 8. Enable S3 Intelligent-Tiering
# 9. Review NAT Gateway data transfer costs
# 10. Use AWS Cost Explorer + Budgets for ongoing monitoring
aws budgets create-budget --account-id ACCOUNT_ID --budget file://budget.json

Add More Questions to This Guide

Know questions that should be here? Share them and help the community!

Open Google Form