Serverless plugin for resolving variables from Terraform outputs
npm install serverless-aws-terraform-outputsProvides variable substitution resolution from Terraform outputs.
It support terraform workspace managed on :
- s3 bucket
- local path using terraform command.
You can install this version with the name serverless-aws-terraform-outputs
rather than serverless-terraform-outputs
``bash`
npm install serverless-aws-terraform-outputs
We could use serverless-terraform-outputs when this pull request will be (or not) accepted (see https://github.com/rundeck/serverless-terraform-outputs/pull/7)
`yaml
plugins:
- serverless-aws-terraform-outputs
custom:
stage: ${opt:stage, self:provider.stage}
tf_workspace_foo: s3://my-state_bucket/main-account/eu-west-1/foo/${self:custom.stage}
tf_workspace_bar: s3://my-state_bucket/main-account/eu-west-1/bar/${self:custom.stage}
provider:
environment:
SQS_QUEUE: ${terraform:${self:custom.tf_workspace_foo}:sqs_queue_stuff_url}
ROLE_ARN: ${terraform:${self:custom.tf_workspace_bar}:my_role_arn}
`
Internaly, this plugin will load state from s3://state_bucket/main-account/eu-west-1/foo/${self:custom.stage}/terraform.tfstate as specified in custom.tf_workspace_foo, and resolve output sqs_queue_stuff_url
As you could see, you can use several terraform workspace, if your resources came from several stack.
#### Prerequisites
Requires Terraform to be installed and accessible via the path, as well as minimal backend config:
main.tf:``
terraform {
required_version = "0.12.26"
backend "s3" {
region = "us-west-2"
key = "project/foo"
bucket = "foosoft-terraform"
}
}
For outputs from multiple Terraform configurations it is recommended to set them up as data sources
and re-export the required vars.
#### Example
`yaml
custom:
stage: ${opt:stage, self:provider.stage}
tf_workspace: ${self:custom.stage}
provider:
environment:
SQS_QUEUE: ${terraform:${self:custom.tf_workspace}:sqs_queue_stuff.value.url}
`
#### Configuration
Optionally, you can configure the plugin:
``
custom:
terraformOutputs:
cwd: dir/with/terraform/files
| Parameter Name | Default Value | Description |
| --- | --- | --- |
| cwd | _(project base dir)_ | The directory where terraform outputs will be executed in, relative to the project base directory |
- use serverless-aws-terraform-outputs` name in order to use this version before original project will be updated.
- add dependency on "aws-sdk" and aws client to retreive shared terraform state stored on S3.
- introduce TFWorkspace to load several workspace
- rename output to load_output in terraform js (avoid confusion of stored result)
- in terraform state file:
- if not specified, retreive last 'value' member of key path
- if not specified, retreive first 'outputs' member of key path
All previous work from Rundesk:
- initial project tree using typescript
- serverless plugin declaration
- use of local terraform command to load output