AWS Cheat Sheet Work in progress - All contributions are welcome
aws ec2 describe-volumes
Describing filtered volumes:
aws ec2 describe-volumes --filters Name=status,Values=creating | available | in-use | deleting | deleted | error
e.g, describing all deleted volumes:
aws ec2 describe-volumes --filters Name=status,Values=deleted
Filters can be applied to the attachment status:
aws ec2 describe-volumes --filters Name=attachment.status,Values=attaching | attached | detaching | detached
e.g: describing all volumes with the status "attaching":
aws ec2 describe-volumes --filters Name=attachment.status,Values=attaching
This is the generic form. Use --profile <your_profile_name>
, if you have multiple AWS profiles or accounts.
aws ec2 describe-volumes --filters Name:'tag:Name',Values: ['some_values'] --profile <your_profile_name>
aws ec2 describe-volumes --filters Name=status,Values=in-use --profile <your_profile_name>
aws ec2 describe-volumes --filters Name=status,Values=available |grep VolumeId|awk '{print $2}' | tr '\n|,|"' ' '
With "profile":
aws ec2 describe-volumes --filters Name=status,Values=available --profile <your_profile_name>|grep VolumeId|awk '{print $2}' | tr '\n|,|"' ' '
aws ec2 delete-volume --region <region> --volume-id <volume_id>
for x in $(aws ec2 describe-volumes --filters Name=status,Values=available --profile <your_profile_name>|grep VolumeId|awk '{print $2}' | tr ',|"' ' '); do aws ec2 delete-volume --region <region> --volume-id $x; done
With "profile":
for x in $(aws ec2 describe-volumes --filters Name=status,Values=available --profile <your_profile_name>|grep VolumeId|awk '{print $2}' | tr ',|"' ' '); do aws ec2 delete-volume --region <region> --volume-id $x --profile <your_profile_name>; done
aws ec2 create-snapshot --volume-id <vol-id>
aws ec2 create-snapshot --volume-id <vol-id> --description "snapshot-$(date +'%Y-%m-%d_%H-%M-%S')"
aws ec2 create-image --instance-id <instance_id> --name "image-$(date +'%Y-%m-%d_%H-%M-%S')" --description "image-$(date +'%Y-%m-%d_%H-%M-%S')"
aws ec2 create-image --instance-id <instance_id> --name "image-$(date +'%Y-%m-%d_%H-%M-%S')" --description "image-$(date +'%Y-%m-%d_%H-%M-%S')" --no-reboot
You are free to change the AMI name image-$(date +'%Y-%m-%d_%H-%M-%S')
to a name of your choice.
aws ec2 describe-images
aws ec2 describe-images --image-ids <image_id> --profile <profile> --region <region>
e.g:
aws ec2 describe-images --image-ids ami-e24dfa9f --profile terraform --region eu-west-3
aws ec2 describe-images --owners amazon
e.g: Describing Windows AMIs that are backed by Amazon EBS.
aws ec2 describe-images --filters "Name=platform,Values=windows" "Name=root-device-type,Values=ebs"
e.g: Describing Ubuntu AMIs
aws ec2 describe-images --filters "Name=name,Values=ubuntu*"
sid=Sid$(date +%Y%m%d%H%M%S); aws lambda add-permission --statement-id $sid --action 'lambda:InvokeFunction' --principal events.amazonaws.com --source-arn arn:aws:events:<region>:<arn>:rule/AWSLambdaBasicExecutionRole --function-name function:<awsents> --region <region>
aws iam list-users
aws iam list-policies
aws iam list-groups
aws iam get-group --group-name <group_name>
aws iam get-policy --policy-arn arn:aws:iam::aws:policy/<policy_name>
aws iam list-access-keys
aws iam list-access-keys
aws iam list-access-keys --user-name <user_name>
aws iam list-ssh-public-keys --user-name <user_name>
aws s3api list-buckets
Or
aws s3 ls
e.g
aws s3 ls --profile eon01
aws s3api list-buckets --query 'Buckets[].Name'
aws s3api get-bucket-location --bucket <bucket_name>
e.g
aws s3api get-bucket-location --bucket practicalaws.com
aws s3 ls s3://<bucket_name> --region <region>
e.g
aws s3 ls s3://practicalaws.com
aws s3 ls s3://practicalaws.com --region eu-west-1
aws s3 ls s3://practicalaws.com --region eu-west-1 --profile eon01
aws s3 sync <local_path> s3://<bucket_name>
e.g
aws s3 sync . s3://practicalaws.com --region eu-west-1
aws s3 cp <file_name> s3://<bucket_name>
Or:
aws s3 cp <file_name> s3://<bucket_name>/<folder_name>/
To copy all files from a filder, look at "Copying Folders". Or use the following example, where I copy the content of the folder "images (contains images) in the remote folder "images".
cd images
aws s3 cp . s3://saltstackfordevops.com/images --recursive --region us-east-2
aws s3 cp <folder_name>/ s3://<bucket_name>/ --recursive
To exclude files:
aws s3 cp <folder_name>/ s3://<bucket_name>/ --recursive --exclude "<file_name_or_a_wildcard>"
e.g: To only include a certain type of files (PNG) and exclude others (JPG)
aws s3 cp practicalaws.com/ s3://practicalaws-backup/ --recursive --exclude "*.jpg" --include "*.png"
e.g: To exclude a folder
aws s3 cp practicalaws.com/ s3://practicalaws-backup/ --recursive --exclude ".git/*"
aws s3 rm s3://<bucket_name>/<object_name>
e.g
aws s3 rm s3://practicalaws.com/temp.txt
aws s3 rb s3://<bucket_name> --force
If the bucket is not empty, use --force.
e.g
aws s3 rb s3://practicalaws.com --force
aws s3 rm s3://<bucket_name>/<key_name> --recursive
e.g
In order to remove tempfiles/file1.txt and tempfiles/file2.txt from practicalaws.com bucket, use:
aws s3 rm s3://practicalaws.com/tempfiles --recursive
Remove all objects using:
aws s3 rm s3://practicalaws.com/tempfiles
aws ec2 create-vpc --cidr-block <cidr_block> --regiosn <region>
e.g
aws ec2 create-vpc --cidr-block 10.0.0.0/16 --region eu-west-1
aws ec2 modify-vpc-attribute --vpc-id <vpc_id> --enable-dns-hostnames "{\"Value\":true}" --region <region>
aws ec2 create-subnet --vpc-id <vpc_id> --cidr-block <cidr_block> --availability-zone <availability_zone> --region <region>
aws ec2 modify-subnet-attribute --subnet-id <subnet_id> --map-public-ip-on-launch --region <region>
aws ec2 create-internet-gateway --region <region>
aws ec2 attach-internet-gateway --internet-gateway-id <igw_id> --vpc-id <vpc_id> --region <region>
Allocate Elastic IP
aws ec2 allocate-address --domain vpc --region <region>
then use the AllocationId to create the NAT Gateway for the public zone in
aws ec2 create-nat-gateway --subnet-id <subnet_id> --allocation-id <allocation_id> --region <region>
Create the Route Table:
aws ec2 create-route-table --vpc-id <vpc_id> --region <region>
then create a route for an Internet Gateway.
Now, use the outputted Route Table ID:
aws ec2 create-route --route-table-id <route_table_id> --destination-cidr-block 0.0.0.0/0 --gateway-id <igw_id> --region <region>
Finally, associate the public subnet with the Route Table
aws ec2 associate-route-table --route-table-id <route_table_id> --subnet-id <subnet_id> --region <region>
Create the Route Table
aws ec2 create-route-table --vpc-id <vpc_id> --region <region>
then create a route that points to a NAT Gateway
aws ec2 create-route --route-table-id <route_table_id> --destination-cidr-block 0.0.0.0/0 --nat-gateway-id <net_gateway_id> --region <region>
Finally, associate the subnet
aws ec2 associate-route-table --route-table-id <route_table_id> --subnet-id <subnet_id> --region <region>
In some cases, you need to setup this first:
aws configure set preview.cloudfront true
Then:
aws cloudfront list-distributions
To invalidate index and error HTML files from the distribution with the ID Z2W2LX9VBMAPRX:
aws cloudfront create-invalidation --distribution-id Z2W2LX9VBMAPRX --paths /index.html /error.html
To invalidate everything in the distribution:
aws cloudfront create-invalidation --distribution-id Z2W2LX9VBMAPRX --paths '/*'