Configuration
Everything Laminar needs lives in laminar.yml. Per-stage files (laminar-dev.yml, laminar-prod.yml) are merged over the base.
Minimal example
name: my-api
region: us-east-1 # or AWS_REGION / us-east-1
runtime: python # python | go | php | laravel | fargate | ec2
handler: handler.app
memory_mb: 512
timeout: 30Stages
Define per-stage overrides under stages:. A stage block is deep-merged over the base.
stages:
dev:
memory_mb: 256
production:
memory_mb: 1024
domain: api.example.com
certificate_arn: arn:aws:acm:REGION:ACCOUNT_ID:certificate/CERTIFICATE_IDYou can also keep per-stage files (laminar-dev.yml, laminar-stg.yml, laminar-prod.yml); they are merged on top of laminar.yml.
Domains
# External (internet-facing)
domain_name: api.example.com
certificate_arn: arn:aws:acm:REGION:ACCOUNT_ID:certificate/CERTIFICATE_ID
# Internal (VPC-only); auto suffix defaults to internal.local
internal_domain:
enabled: true
domain_name: api.internal.example.com # optional; else <name>.<stage>.<suffix>VPC
vpc:
vpc_id: vpc-xxxx
subnet_ids: [subnet-a, subnet-b]
security_group_ids: [sg-xxxx]
nat_enabled: trueRuntime blocks
Runtime-specific settings:
# Fargate
fargate:
cpu: 256
memory: 512
port: 8080
desired_count: 1
assign_public_ip: false # set false for private subnets + NAT
# Lambda extras
lambda:
secrets_prefix: /my-api/prod/
parameters_prefix: /my-api/prod/
# EC2
ec2:
instance_type: t3.micro
container_port: 3000
alb_enabled: trueAWS access (cross-account)
aws:
profile: prod-acct # optional
region: eu-west-1 # optional
assume_role_arn: arn:aws:iam::<target>:role/LaminarDeploymentRole
external_id: <secret>App resources
storage:, queues:, caches: and databases: declare S3/SQS/ElastiCache/RDS — see App resources.