Skip to main content

LocalStack Extension: LocalStack Terraform Init

Project description

Use Terraform files in LocalStack init hooks

LocalStack Extension for using Terraform files in init hooks.

[!WARNING] This extension is experimental and subject to change.

[!NOTE] The extension is designed for simple self-contained terraform files, not complex projects or modules. If you have larger projects, then we recommend running them from the host.

Usage

  • Start localstack with EXTENSION_AUTO_INSTALL="localstack-extension-terraform-init"
  • Optionally specify TERRAFORM_VERSION=1.13.2 (currently defaults to 1.5.7)
  • Mount a main.tf file into /etc/localstack/init/ready.d

When LocalStack starts up, it will install the extension, which in turn install terraform and tflocal into the container. If one of the init stage directories contain a main.tf, the extension will run tflocal init and tflocal apply on that directory.

[!NOTE] Terraform state files will be created in your host directory if you mounted an entire folder into /etc/localstack/init/ready.d. These files are created from within the container using the container user, so you may need sudo to remove the files from your host. If you only mount the main.tf file, not an entire directory, localstack will have to download the AWS terraform provider every time during tflocal init.

Example

Example main.tf:

resource "aws_s3_bucket" "example" {
  bucket = "my-tf-test-bucket"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }
}

Start LocalStack Pro with mounted main.tf:

localstack start \
  -e EXTENSION_AUTO_INSTALL="localstack-extension-terraform-init" \
  -v ./main.tf:/etc/localstack/init/ready.d/main.tf

Or, if you use a docker-compose file:

services:
  localstack:
    container_name: "localstack-main"
    image: localstack/localstack-pro  # required for Pro
    ports:
      - "127.0.0.1:4566:4566"            # LocalStack Gateway
    environment:
      # Activate LocalStack Pro: https://docs.localstack.cloud/getting-started/auth-token/
      - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:?}
      - EXTENSION_AUTO_LOAD=localstack-extension-terraform-init"
    volumes:
      # you could also place your main.tf in `./ready.d` and set "./ready.d:/etc/localstack/init/ready.d"
      - "./main.tf:/etc/localstack/init/ready.d/main.tf"
      - "./volume:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"

In a new terminal window, you can wait for localstack to complete and then print the created s3 buckets.

localstack wait && awslocal s3 ls

The logs should show something like:

2024-06-26T20:36:19.946  INFO --- [ady_monitor)] l.extension                : Applying terraform project from file /etc/localstack/init/ready.d/main.tf
2024-06-26T20:36:19.946 DEBUG --- [ady_monitor)] localstack.utils.run       : Executing command: ['tflocal', '-chdir=/etc/localstack/init/ready.d', 'init', '-input=false']
2024-06-26T20:36:26.864 DEBUG --- [ady_monitor)] localstack.utils.run       : Executing command: ['tflocal', '-chdir=/etc/localstack/init/ready.d', 'apply', '-auto-approve']

Install local development version

To install the extension into localstack in developer mode, you will need Python 3.10, and create a virtual environment in the extensions project.

In the newly generated project, simply run

make install

Then, to enable the extension for LocalStack, run

localstack extensions dev enable .

You can then start LocalStack with EXTENSION_DEV_MODE=1 to load all enabled extensions:

EXTENSION_DEV_MODE=1 localstack start

Install from GitHub repository

To distribute your extension, simply upload it to your github account. Your extension can then be installed via:

localstack extensions install "git+https://github.com/localstack/localstack-extensions/#egg=localstack-extension-terraform-init&subdirectory=terraform-init"

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

localstack_extension_terraform_init-0.3.0.tar.gz (4.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file localstack_extension_terraform_init-0.3.0.tar.gz.

File metadata

File hashes

Hashes for localstack_extension_terraform_init-0.3.0.tar.gz
Algorithm Hash digest
SHA256 bc37f922e062f255c421468c3ce52140344fd90d730c022b8cd5263d82c94b4c
MD5 7a0beaf1cd54fd1a01a7bf10021b8c63
BLAKE2b-256 f83b6aa6d441d72293ad9fb1338c187130fa1cf1e7de940cc4ab7ca0138406b9

See more details on using hashes here.

File details

Details for the file localstack_extension_terraform_init-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for localstack_extension_terraform_init-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 68769201ac482fc2b1cafa2e12cb51a5b47d1ed67e296ac3fcbf52bf3f754d9b
MD5 57524613a815769412eabf3560e2db5c
BLAKE2b-256 fffb6748ba81fd9d47c5023afafaae8e2d4107920ab6dd7bb25e9a1ca8459b1c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page