Platform Tips and Tricks
AWS
Deleting a Versioned Bucket
You cannot delete a bucket with versioned objects in it until all of the versions are removed, so first you have to delete the versions.
# set the bucket
export bucket_name="<some-bucket>"
# delete the versions.
aws s3api delete-objects \
--bucket "${bucket_name}" \
--delete "$(aws s3api list-object-versions \
--bucket "${bucket_name}" \
--output=json \
--query='{Objects: Versions[].{Key:Key,VersionId:VersionId}}')"
# delete the bucket.
aws s3 rb "s3://${bucket_name}"
# unset
unset $bucket_name
Scope - Universal vs. Account Global vs. Regional vs. AZ Resources
As you plan the addition of a new resource, or refactor code for an existing one, carefully consider the scope of the resource.
Example: IAM Roles are global to an AWS account, so they do not need to be created again in a new region. S3 buckets are regional so you would want to create a given bucket in a new region.
Category | Terraform Resource(s) | Scope | Notes |
---|---|---|---|
ACM | aws_acm_certificate * |
region | |
ALB/ELB/LB | aws_alb , aws_elb , aws_lb * |
region | |
AutoScaling Group (ASG) | aws_autoscaling * |
region | |
CloudFront | aws_cloudfront * |
global | |
CloudTrail | aws_cloudtrail * |
global | |
CloudWatch Dashboard | aws_cloudwatch_dashboard |
global | |
CloudWatch Event | aws_cloudwatch_event * |
region | |
CloudWatch Log Destination | aws_cloudwatch_log_destination * |
region | |
CloudWatch Log Group | aws_cloudwatch_log_group |
region | |
CloudWatch Metric Alarm | aws_cloudwatch_metric_alarm |
region | |
Config | aws_config * |
region | |
RDS | aws_db * |
region | |
DynamoDB | aws_dynamodb * |
region | |
ElastiCache | aws_elasticache * |
region | |
EC2 | az | See AWS: EC2 | |
Flow Log | aws_flow_log * |
region | |
IAM | aws_iam * |
global | |
Internet Gateway | aws_internet_gateway |
region | |
Kinesis | aws_kinesis * |
region | |
KMS | aws_kms * |
region | |
Lambda | aws_lambda * |
region | |
Network ACL | aws_network_acl *, aws_default_network_acl |
region | |
Pinpoint App | aws_pinpoint_app |
region | A.K.A. “Pinpoint Project” |
Pinpoint SMS Channel | aws_pinpoint_sms_channel |
region | |
Redshift | aws_reshift * |
region | |
Route53 | aws_route53 * |
global | |
Route53 Public Zone | aws_route53_zone |
universal | Public DNS zones must be universally unique |
Route Table | aws_route_table * |
region | |
S3 Account Public Access Block | aws_s3_account_public_access_block |
global | |
S3 Bucket Resource | aws_s3_bucket * |
region | Buckets are regional, but the names are universal |
S3 Bucket Name | n/a | universal | Buckets names are universally unique! |
Security Group | aws_security_group |
region | |
SES | aws_ses * |
region | |
SNS | aws_sns * |
region | |
SQS | aws_sqs * |
region | |
Subnet | aws_subnet |
az | |
VPC | aws_vpc * |
region | |
WAF Regional | aws_wafregional * |
region |
This is not guaranteed accurate! Update incorrect information and add specific resources that have differing scope.
Note that “universal” is simplified. Items marked “universal” must be unique per-partition.
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resources.html provides some of the above info for EC2 resources, but if you find a wholistic list add it here!