70 lines
2.8 KiB
Markdown
70 lines
2.8 KiB
Markdown
# 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.
|
|
|
|
The free edition of LocalStack does not support rds, among other services described in
|
|
https://docs.localstack.cloud/aws/licensing/ |