Backend
{ export S3_BUCKET=terraform-state-$(tr -dc a-z0-9 </dev/urandom | head -c 8) aws s3api create-bucket --bucket $S3_BUCKET --region ap-northeast-2 \ --create-bucket-configuration LocationConstraint=ap-northeast-2 \ --no-cli-pager }aws s3api put-bucket-versioning --bucket $S3_BUCKET \ --versioning-configuration Status=Enabledaws s3api get-bucket-versioning --bucket $S3_BUCKET{ export DYNAMODB_TABLE=terraform-lock-$(tr -dc a-z0-9 </dev/urandom | head -c 4) aws dynamodb create-table \ --table-name $DYNAMODB_TABLE \ --attribute-definitions AttributeName=LockID,AttributeType=S \ --key-schema AttributeName=LockID,KeyType=HASH \ --billing-mode PAY_PER_REQUEST \ --no-cli-pager }cd ~/environment && mkdir terraform && cd terraformcat <<EOF | tee backend.tf terraform { backend "s3" { bucket = "$S3_BUCKET" key = "terraform.tfstate" region = "ap-northeast-2" dynamodb_table = "$DYNAMODB_TABLE" encrypt = true } } EOFcat <<EOF | tee provider.tf terraform { required_providers { aws = { source = "hashicorp/aws" version = ">= 5.45.0" } } } EOFcat <<EOF | tee vpc.tf resource "aws_vpc" "this" { cidr_block = "10.10.0.0/16" } EOFterraform initterraform planterraform apply --auto-approvellaws s3 ls $S3_BUCKETaws s3 cp s3://$S3_BUCKET/terraform.tfstate s3.terraform.tfstatecat s3.terraform.tfstate | jqterraform state pull | tee pull.terraform.tfstatediff s3.terraform.tfstate pull.terraform.tfstate -ycat <<EOF | tee delay.tf resource "time_sleep" "wait_3_mins" { create_duration = "3m" } EOFterraform planterraform initterraform planecho $DYNAMODB_TABLE > dynamodb.txtaws dynamodb scan --table-name $(cat dynamodb.txt) --no-cli-pagerterraform apply --auto-approvecd ~/environment/terraform && terraform apply --auto-approveaws dynamodb scan --table-name $(cat dynamodb.txt) --no-cli-pagerTF_LOG=DEBUG terraform apply --auto-approvecat <<EOF | tee rds.tf resource "aws_instance" "this" { ami = "ami-0c031a79ffb01a803" instance_type = "t3.micro" tags = { Name = "terraform-ec2-test" } } resource "aws_db_instance" "this" { identifier = "terraform-rds-test" instance_class = "db.t3.micro" allocated_storage = 20 engine = "mysql" engine_version = "8.0" username = "admin" password = "asdf!234" skip_final_snapshot = true } EOFterraform plan{ response=$(aws sts get-session-token --duration-seconds 900) AWS_ACCESS_KEY_ID=$(echo "${response}" | jq --raw-output ".Credentials[\"AccessKeyId\"]") AWS_SECRET_ACCESS_KEY=$(echo "${response}" | jq --raw-output ".Credentials[\"SecretAccessKey\"]") AWS_SESSION_TOKEN=$(echo "${response}" | jq --raw-output ".Credentials[\"SessionToken\"]") export AWS_ACCESS_KEY_ID="${AWS_ACCESS_KEY_ID}" export AWS_SECRET_ACCESS_KEY="${AWS_SECRET_ACCESS_KEY}" export AWS_SESSION_TOKEN="${AWS_SESSION_TOKEN}" export AWS_DEFAULT_REGION=ap-northeast-2 for i in {80..1};do echo $(($i*10)) && sleep 10; done terraform apply --auto-approve }terraform plan{ unset AWS_ACCESS_KEY_ID unset AWS_SECRET_ACCESS_KEY unset AWS_SESSION_TOKEN }terraform plan{ export LOCK_ID=$(aws dynamodb get-item --table-name $DYNAMODB_TABLE \ --key '{"LockID": {"S":"'$S3_BUCKET'/terraform.tfstate"}}' \ --query 'Item.Info.S' | jq -r 'fromjson | .ID') echo $LOCK_ID }terraform force-unlock $LOCK_IDterraform plancat errored.tfstate | jqaws ec2 describe-instances \ --filters "Name=tag:Name,Values=terraform-ec2-test" \ --no-cli-pagerterraform state push errored.tfstateterraform planterraform apply --auto-approveaws rds describe-db-instances \ --db-instance-identifier terraform-rds-test \ --no-cli-pagerterraform import aws_db_instance.this terraform-rds-testterraform planterraform planterraform apply --auto-approveterraform plan{ terraform destroy --auto-approve aws s3api put-bucket-versioning --bucket $S3_BUCKET \ --versioning-configuration Status=Suspended \ --no-cli-pager sleep 10 aws s3api delete-objects \ --bucket $S3_BUCKET \ --delete "$(aws s3api list-object-versions \ --bucket $S3_BUCKET \ --output=json \ --query='{Objects: Versions[].{Key:Key,VersionId:VersionId}}')" \ --no-cli-pager aws s3api delete-objects \ --bucket $S3_BUCKET \ --delete "$(aws s3api list-object-versions \ --bucket $S3_BUCKET \ --output=json \ --query='{Objects: DeleteMarkers[].{Key:Key,VersionId:VersionId}}')" \ --no-cli-pager aws s3api delete-bucket --bucket $S3_BUCKET \ --no-cli-pager aws dynamodb delete-table --table-name $DYNAMODB_TABLE \ --no-cli-pager cd ~/environment && rm -rf terraform }
Last updated