# LocalStack ## Setup Sign up for localstack and obtain the auth token. Then fire up a container: ```bash docker run -e LOCALSTACK_AUTH_TOKEN=ls-xxx-yyy-zzz-aaa-bbb -it \ --name localstack --network macvlan localstack/localstack-pro localstack ``` In terraform, configure aws endpoints to go to localstack and add localstack required configurations: ```hcl provider "aws" { region = var.aws-region # localstack config access_key = "test" secret_key = "test" skip_credentials_validation = true skip_metadata_api_check = true skip_requesting_account_id = true # localstack endpoints https://docs.localstack.cloud/aws/integrations/infrastructure-as-code/terraform/#:~:text=tflocal%20is%20a%20small%20wrapper,unmodified%20Terraform%20scripts%20against%20LocalStack. endpoints { apigateway = "http://192.168.86.96:4566" apigatewayv2 = "http://192.168.86.96:4566" cloudformation = "http://192.168.86.96:4566" cloudwatch = "http://192.168.86.96:4566" dynamodb = "http://192.168.86.96:4566" ec2 = "http://192.168.86.96:4566" es = "http://192.168.86.96:4566" elasticache = "http://192.168.86.96:4566" firehose = "http://192.168.86.96:4566" iam = "http://192.168.86.96:4566" kinesis = "http://192.168.86.96:4566" lambda = "http://192.168.86.96:4566" rds = "http://192.168.86.96:4566" redshift = "http://192.168.86.96:4566" route53 = "http://192.168.86.96:4566" s3 = "http://192.168.86.96:4566" secretsmanager = "http://192.168.86.96:4566" ses = "http://192.168.86.96:4566" sns = "http://192.168.86.96:4566" sqs = "http://192.168.86.96:4566" ssm = "http://192.168.86.96:4566" stepfunctions = "http://192.168.86.96:4566" sts = "http://192.168.86.96:4566" } } ``` ## Limitations At time of writing, localstack seems very limited. Many basic layers would not run. For example, vpc with ipv6 could not be created. It failed with the following error ```text │ Error: waiting for EC2 Subnet (subnet-c113e8c02abd344e0) EnableDns64 update: timeout while waiting for state to become 'true' (last state: 'false', timeout: 5m0s) │ │ with module.vpc.aws_subnet.private[1], │ on .terraform/modules/vpc/main.tf line 293, in resource "aws_subnet" "private": │ 293: resource "aws_subnet" "private" { ``` Also, ec2 instance's associate_public_ip_address attribute is always set to true, despite it is set to false in my code. This caused the instance to be redeployed everytime terraform apply is ran.