Home > Blockchain >  Write Terraform plan output in-memory rather than on a filesystem
Write Terraform plan output in-memory rather than on a filesystem

Time:03-04

I am developing an AWS Lambda function which uses a runtime of Python 3.8. The source code is packaged into a custom Docker image and then passed to the Lambda service.

In the Python program itself, I am executing various Terraform commands including "plan" and "show" using subprocess. I am writing the output of the plan to the /tmp directory using the "terraform plan -out=plan.txt" flag. Then, I convert the plan into JSON for processing using "terraform show -json plan.txt".

Since the plan file could contain sensitive data, I do not want to write it to the /tmp directory; rather I want to keep it in-memory to increase security. I have explored mounting tmpfs to /tmp which is not possible in this context. How can I override the behavior of Terraform's "-out=" flag or create an in-memory filesystem in the container?

CodePudding user response:

@msel, I guess you can take help of "terrahelp". Though I have not used it personally, I believe this could be really handy tool to handle sensitive data at plan level.

Something similar to below you need to do

terraform plan -out=plan.txt | terrahelp mask

You can read more about terrahelp here

https://github.com/opencredo/terrahelp

Reference : https://github.com/runatlantis/atlantis/issues/163

CodePudding user response:

Terraform itself can only write a saved plan file to something which behaves like a file. If you are on a Unix system then you may be able to exploit the "everything is a file" principle to trick Terraform to writing to something that isn't a file on disk, such as a pipe passed in from the parent process as an additional inherited file descriptor, but there is no built-in mechanism for doing so, and Terraform may require the filehandle to support system calls other than just write that are available for normal files, such as seek.

  • Related