new glimpse approach
This commit is contained in:
1
.terraform.tfstate.lock.info
Normal file
1
.terraform.tfstate.lock.info
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"ID":"842a4264-8857-6f39-d95a-cbc58d58337d","Operation":"OperationTypePlan","Info":"","Who":"noti@pop-os","Version":"1.15.1","Created":"2026-05-27T17:06:58.450709065Z","Path":"terraform.tfstate"}
|
||||||
94
code/main.py
94
code/main.py
@@ -2,7 +2,6 @@
|
|||||||
import base64
|
import base64
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import re
|
|
||||||
import urllib.request
|
import urllib.request
|
||||||
|
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
@@ -24,29 +23,81 @@ def slurp_file(filename):
|
|||||||
return file.read()
|
return file.read()
|
||||||
|
|
||||||
|
|
||||||
BASE_PROMPT="""You are an invoice extraction assistant. Your job is to read PDF documents and extract all invoice and credit note details into structured JSON.
|
BASE_PROMPT="""You are an invoice extraction assistant. Your job is to read PDF documents and extract all invoice and credit note details.
|
||||||
|
|
||||||
DOCUMENT TYPES YOU MAY ENCOUNTER:
|
DOCUMENT TYPES YOU MAY ENCOUNTER:
|
||||||
1. **Single Invoice** — one invoice with line items, totals, dates, etc.
|
1. **Single Invoice** — one invoice with line items, totals, dates, etc.
|
||||||
2. **Credit Note** — similar to an invoice but represents a credit/refund. Extract it the same way; the total will be positive (the credit amount).
|
2. **Credit Note** — similar to an invoice but represents a credit/refund. Extract it the same way; the total will be positive (the credit amount).
|
||||||
3. **Statement / Summary** — a document listing multiple invoices or credits in a table or list format. Each row or entry represents a separate invoice/credit. Extract EACH one as a separate object in the output array.
|
3. **Statement / Summary** — a document listing multiple invoices or credits in a table or list format. Each row or entry represents a separate invoice/credit.
|
||||||
4. **Mixed** — a document containing both invoices and credits.
|
4. **Mixed** — a document containing both invoices and credits.
|
||||||
|
|
||||||
EXTRACTION RULES:
|
EXTRACTION RULES:
|
||||||
- Extract EVERY invoice or credit you can find. If the document is a statement listing 10 invoices, return all 10.
|
- Extract EVERY invoice or credit you can find. If the document is a statement listing 10 invoices, include all 10 in the invoices array.
|
||||||
- **customer_identifier**: The name of the customer/buyer. Look for "Bill To", "Customer", "Sold To", or the company name at the top.
|
- **customer_identifier**: The name of the customer/buyer. Look for "Bill To", "Customer", "Sold To", or the company name at the top.
|
||||||
- **vendor_identifier**: The name of the vendor/seller. Look for "From", "Vendor", "Supplier", letterhead, or the company issuing the document.
|
- **vendor_identifier**: The name of the vendor/seller. Look for "From", "Vendor", "Supplier", letterhead, or the company issuing the document.
|
||||||
- **date**: The invoice date in ISO 8601 format (YYYY-MM-DD). If multiple dates exist, use the invoice date, not the due date or statement period.
|
- **date**: The invoice date in ISO 8601 format (YYYY-MM-DD). If multiple dates exist, use the invoice date, not the due date or statement period.
|
||||||
- **invoice_number**: The unique invoice or credit note number. Look for labels like "Invoice #", "Inv No", "Credit Note #", "Reference", "Doc #".
|
- **invoice_number**: The unique invoice or credit note number. Look for labels like "Invoice #", "Inv No", "Credit Note #", "Reference", "Doc #".
|
||||||
- **account_number**: The customer's account number if present. Not required — omit if not found.
|
- **account_number**: The customer's account number if present. Not required — omit if not found.
|
||||||
- **total**: The total amount as a decimal string (e.g., "1234.56"). Use the grand total or amount due. For credits, use the credit amount as a positive number. Numbers in parentheses indicate credits — extract them as positive values.
|
- **total**: The total amount as a decimal string (e.g., "1234.56"). Use the grand total or amount due. For credits, use the credit amount as a positive number. Numbers in parentheses indicate credits — extract them as positive values.
|
||||||
- **explanation**: Only use this when you cannot find any valid invoices. Provide a detailed reason (e.g., "document is blank", "PDF contains only images with no extractable text", "document is a cover letter with no invoice data").
|
|
||||||
|
|
||||||
IMPORTANT:
|
IMPORTANT:
|
||||||
- Do NOT skip entries because some fields are missing. Extract what you can.
|
- Do NOT skip entries because some fields are missing. Extract what you can.
|
||||||
- For statements/summaries, each row in an invoice table is a separate invoice entry.
|
- For statements/summaries, each row in an invoice table is a separate entry in the invoices array.
|
||||||
- If OCR fails completely and no text can be extracted at all, return an array with one object containing only the explanation field.
|
- If OCR fails completely and no text can be extracted at all, set the explanation field to indicate why."""
|
||||||
- Your FINAL response must be ONLY a JSON array. Do NOT wrap it in markdown code blocks. Do NOT add any prose before or after the JSON."""
|
|
||||||
|
INVOICE_TOOL = {
|
||||||
|
"type": "function",
|
||||||
|
"function": {
|
||||||
|
"name": "parsed_invoices",
|
||||||
|
"description": "Record all extracted invoices and credit notes from the document. Include every invoice found in the invoices array.",
|
||||||
|
"parameters": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"invoices": {
|
||||||
|
"description": "Array of all invoices and credit notes extracted from the document. Include every one you find.",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"customer_identifier": {
|
||||||
|
"description": "The customer's name. e.g., ABC Corporation, Microsoft, etc.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"vendor_identifier": {
|
||||||
|
"description": "The vendor's name",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"date": {
|
||||||
|
"description": "Invoice date in ISO 8601 format (YYYY-MM-DD).",
|
||||||
|
"type": "string",
|
||||||
|
"format": "date"
|
||||||
|
},
|
||||||
|
"invoice_number": {
|
||||||
|
"description": "Unique invoice number for the transaction.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"account_number": {
|
||||||
|
"description": "Customer's account number associated with the invoice. Not always present on the invoice.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"description": "Total amount of the invoice, including taxes and fees. It should be a decimal number as a string.",
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^\\d+(\\.\\d{1,2})?$"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["customer_identifier", "vendor_identifier", "date", "invoice_number", "total"],
|
||||||
|
"additionalProperties": False
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"explanation": {
|
||||||
|
"description": "Only use this when you cannot find any valid invoices. Provide a detailed reason (e.g., 'document is blank', 'PDF contains only images with no extractable text', 'document is a cover letter with no invoice data').",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def analyze_pdf(pdf_path):
|
def analyze_pdf(pdf_path):
|
||||||
@@ -80,12 +131,18 @@ def analyze_pdf(pdf_path):
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
tools=[INVOICE_TOOL],
|
||||||
)
|
)
|
||||||
text = response.choices[0].message.content
|
|
||||||
match = re.search(r'```(?:json)?\s*\n(.*?)\n```', text, re.DOTALL)
|
message = response.choices[0].message
|
||||||
if match:
|
|
||||||
text = match.group(1)
|
if message.tool_calls:
|
||||||
return text
|
for tool_call in message.tool_calls:
|
||||||
|
if tool_call.function.name == "parsed_invoices":
|
||||||
|
data = json.loads(tool_call.function.arguments)
|
||||||
|
return data.get("invoices", [])
|
||||||
|
|
||||||
|
return []
|
||||||
|
|
||||||
|
|
||||||
def analyze_url(url):
|
def analyze_url(url):
|
||||||
@@ -98,6 +155,11 @@ def analyze_url(url):
|
|||||||
|
|
||||||
def handler(event, context):
|
def handler(event, context):
|
||||||
print(event)
|
print(event)
|
||||||
url = event['url']
|
if "pdf_base64" in event:
|
||||||
print("URL IS", url)
|
pdf_path = "/tmp/invoice.pdf"
|
||||||
return analyze_url(url)
|
with open(pdf_path, "wb") as f:
|
||||||
|
f.write(base64.b64decode(event["pdf_base64"]))
|
||||||
|
return analyze_pdf(pdf_path)
|
||||||
|
if "url" in event:
|
||||||
|
return analyze_url(event["url"])
|
||||||
|
raise ValueError("event must contain 'url' or 'pdf_base64'")
|
||||||
26
invoke_lambda.sh
Executable file
26
invoke_lambda.sh
Executable file
@@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
PDF_PATH="${1:-tests/SWCPI25011315283.pdf}"
|
||||||
|
ENVIRONMENT="${2:-test}"
|
||||||
|
|
||||||
|
if [ ! -f "$PDF_PATH" ]; then
|
||||||
|
echo "Error: PDF file not found: $PDF_PATH"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
FUNCTION_NAME="glimpse2-${ENVIRONMENT}"
|
||||||
|
PAYLOAD_FILE=$(mktemp)
|
||||||
|
python3 -c "import base64, json, sys; json.dump({'pdf_base64': base64.b64encode(open(sys.argv[1], 'rb').read()).decode()}, open(sys.argv[2], 'w'))" "$PDF_PATH" "$PAYLOAD_FILE"
|
||||||
|
|
||||||
|
echo "Invoking ${FUNCTION_NAME} with ${PDF_PATH}..."
|
||||||
|
aws lambda invoke \
|
||||||
|
--function-name "$FUNCTION_NAME" \
|
||||||
|
--payload file://"$PAYLOAD_FILE" \
|
||||||
|
--cli-binary-format raw-in-base64-out \
|
||||||
|
/tmp/lambda_response.json
|
||||||
|
|
||||||
|
rm -f "$PAYLOAD_FILE"
|
||||||
|
|
||||||
|
echo "Response:"
|
||||||
|
python3 -m json.tool /tmp/lambda_response.json 2>/dev/null || cat /tmp/lambda_response.json
|
||||||
27
main.tf
27
main.tf
@@ -1,3 +1,16 @@
|
|||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
aws = {
|
||||||
|
source = "hashicorp/aws"
|
||||||
|
version = "~> 5.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
provider "aws" {
|
||||||
|
region = var.region
|
||||||
|
}
|
||||||
|
|
||||||
data "aws_iam_policy_document" "assume_role" {
|
data "aws_iam_policy_document" "assume_role" {
|
||||||
statement {
|
statement {
|
||||||
effect = "Allow"
|
effect = "Allow"
|
||||||
@@ -13,11 +26,11 @@ data "aws_iam_policy_document" "assume_role" {
|
|||||||
|
|
||||||
resource "null_resource" "pip_install" {
|
resource "null_resource" "pip_install" {
|
||||||
triggers = {
|
triggers = {
|
||||||
shell_hash = "${sha256(file("${path.module}/requirements.txt"))}"
|
shell_hash = "${sha256(file("${path.module}/pyproject.toml"))}"
|
||||||
}
|
}
|
||||||
|
|
||||||
provisioner "local-exec" {
|
provisioner "local-exec" {
|
||||||
command = "python3 -m pip install -r requirements.txt -t ${path.module}/layer/python"
|
command = "uv pip compile ${path.module}/pyproject.toml --python 3.11 --no-header -o /tmp/layer-requirements.txt && uv pip install -r /tmp/layer-requirements.txt --python 3.11 -t ${path.module}/layer/python"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -29,7 +42,7 @@ data "archive_file" "layer" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
resource "aws_lambda_layer_version" "layer" {
|
resource "aws_lambda_layer_version" "layer" {
|
||||||
layer_name = "openai-layer"
|
layer_name = "openai-layer-${local.env}"
|
||||||
filename = data.archive_file.layer.output_path
|
filename = data.archive_file.layer.output_path
|
||||||
source_code_hash = data.archive_file.layer.output_base64sha256
|
source_code_hash = data.archive_file.layer.output_base64sha256
|
||||||
compatible_runtimes = ["python3.11"]
|
compatible_runtimes = ["python3.11"]
|
||||||
@@ -38,7 +51,7 @@ resource "aws_lambda_layer_version" "layer" {
|
|||||||
|
|
||||||
|
|
||||||
resource "aws_iam_role" "iam_for_lambda" {
|
resource "aws_iam_role" "iam_for_lambda" {
|
||||||
name = "glimpse2"
|
name = "glimpse2-${local.env}"
|
||||||
assume_role_policy = data.aws_iam_policy_document.assume_role.json
|
assume_role_policy = data.aws_iam_policy_document.assume_role.json
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,11 +65,11 @@ resource "aws_lambda_function" "test_lambda" {
|
|||||||
# If the file is not in the current working directory you will need to include a
|
# If the file is not in the current working directory you will need to include a
|
||||||
# path.module in the filename.
|
# path.module in the filename.
|
||||||
filename = "lambda_function_payload.zip"
|
filename = "lambda_function_payload.zip"
|
||||||
function_name = "glimpse2"
|
function_name = "glimpse2-${local.env}"
|
||||||
role = aws_iam_role.iam_for_lambda.arn
|
role = aws_iam_role.iam_for_lambda.arn
|
||||||
handler = "main.handler"
|
handler = "main.handler"
|
||||||
memory_size = 512
|
memory_size = 512
|
||||||
timeout = 30
|
timeout = 60
|
||||||
|
|
||||||
source_code_hash = data.archive_file.lambda.output_base64sha256
|
source_code_hash = data.archive_file.lambda.output_base64sha256
|
||||||
layers = [aws_lambda_layer_version.layer.arn]
|
layers = [aws_lambda_layer_version.layer.arn]
|
||||||
@@ -65,7 +78,7 @@ resource "aws_lambda_function" "test_lambda" {
|
|||||||
|
|
||||||
environment {
|
environment {
|
||||||
variables = {
|
variables = {
|
||||||
foo = "bar"
|
environment = local.env
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
1
prod.tfvars
Normal file
1
prod.tfvars
Normal file
@@ -0,0 +1 @@
|
|||||||
|
environment = "prod"
|
||||||
313
terraform.tfstate.d/test/terraform.tfstate
Normal file
313
terraform.tfstate.d/test/terraform.tfstate
Normal file
@@ -0,0 +1,313 @@
|
|||||||
|
{
|
||||||
|
"version": 4,
|
||||||
|
"terraform_version": "1.15.1",
|
||||||
|
"serial": 8,
|
||||||
|
"lineage": "d233b79d-da3f-cd9d-4b62-af1c850901ee",
|
||||||
|
"outputs": {},
|
||||||
|
"resources": [
|
||||||
|
{
|
||||||
|
"mode": "data",
|
||||||
|
"type": "archive_file",
|
||||||
|
"name": "lambda",
|
||||||
|
"provider": "provider[\"registry.terraform.io/hashicorp/archive\"]",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"exclude_symlink_directories": null,
|
||||||
|
"excludes": null,
|
||||||
|
"id": "9d3e0e20184ca740cf3ea4340de29c39affb671d",
|
||||||
|
"output_base64sha256": "y9M2eCZjnOi+6H60vC4z+HW95OP9GVC0Icw3Yc3xIvU=",
|
||||||
|
"output_base64sha512": "YbENaC7DYFAI6nJLrnOR99yZx8zFjnboHpcQGRD0/MKuPi+B6oy6l4NsnFAekayBOWddxZquWHTcqZcx9LiCdQ==",
|
||||||
|
"output_file_mode": null,
|
||||||
|
"output_md5": "fcfa112d0c05b2a40c72445a7438b356",
|
||||||
|
"output_path": "lambda_function_payload.zip",
|
||||||
|
"output_sha": "9d3e0e20184ca740cf3ea4340de29c39affb671d",
|
||||||
|
"output_sha256": "cbd3367826639ce8bee87eb4bc2e33f875bde4e3fd1950b421cc3761cdf122f5",
|
||||||
|
"output_sha512": "61b10d682ec3605008ea724bae7391f7dc99c7ccc58e76e81e97101910f4fcc2ae3e2f81ea8cba97836c9c501e91ac8139675dc59aae5874dca99731f4b88275",
|
||||||
|
"output_size": 12212,
|
||||||
|
"source": [],
|
||||||
|
"source_content": null,
|
||||||
|
"source_content_filename": null,
|
||||||
|
"source_dir": "./code",
|
||||||
|
"source_file": null,
|
||||||
|
"type": "zip"
|
||||||
|
},
|
||||||
|
"sensitive_attributes": [],
|
||||||
|
"identity_schema_version": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mode": "data",
|
||||||
|
"type": "archive_file",
|
||||||
|
"name": "layer",
|
||||||
|
"provider": "provider[\"registry.terraform.io/hashicorp/archive\"]",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"exclude_symlink_directories": null,
|
||||||
|
"excludes": null,
|
||||||
|
"id": "b2027e85f6c1607a31456d9bab04adea560c124a",
|
||||||
|
"output_base64sha256": "dB5NITnNHiiWWQtFv9f3eYWRilrtiE60AJNMWRadSlA=",
|
||||||
|
"output_base64sha512": "YSSHtd8poCa26moOzdrQBJ8zuSK2L2N7XOIJq7KgDerdfbty2gPkcNi7Y/7jQ1UHP++Wft9vZO3P0zYO6T5tmA==",
|
||||||
|
"output_file_mode": null,
|
||||||
|
"output_md5": "777cb1543745e89136e2e9efe52b7dee",
|
||||||
|
"output_path": "./layer.zip",
|
||||||
|
"output_sha": "b2027e85f6c1607a31456d9bab04adea560c124a",
|
||||||
|
"output_sha256": "741e4d2139cd1e2896590b45bfd7f77985918a5aed884eb400934c59169d4a50",
|
||||||
|
"output_sha512": "612487b5df29a026b6ea6a0ecddad0049f33b922b62f637b5ce209abb2a00deadd7dbb72da03e470d8bb63fee34355073fef967edf6f64edcfd3360ee93e6d98",
|
||||||
|
"output_size": 7103838,
|
||||||
|
"source": [],
|
||||||
|
"source_content": null,
|
||||||
|
"source_content_filename": null,
|
||||||
|
"source_dir": "./layer",
|
||||||
|
"source_file": null,
|
||||||
|
"type": "zip"
|
||||||
|
},
|
||||||
|
"sensitive_attributes": [],
|
||||||
|
"identity_schema_version": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mode": "data",
|
||||||
|
"type": "aws_iam_policy_document",
|
||||||
|
"name": "assume_role",
|
||||||
|
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"id": "2690255455",
|
||||||
|
"json": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"lambda.amazonaws.com\"\n }\n }\n ]\n}",
|
||||||
|
"minified_json": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Action\":\"sts:AssumeRole\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"}}]}",
|
||||||
|
"override_json": null,
|
||||||
|
"override_policy_documents": null,
|
||||||
|
"policy_id": null,
|
||||||
|
"source_json": null,
|
||||||
|
"source_policy_documents": null,
|
||||||
|
"statement": [
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
"sts:AssumeRole"
|
||||||
|
],
|
||||||
|
"condition": [],
|
||||||
|
"effect": "Allow",
|
||||||
|
"not_actions": [],
|
||||||
|
"not_principals": [],
|
||||||
|
"not_resources": [],
|
||||||
|
"principals": [
|
||||||
|
{
|
||||||
|
"identifiers": [
|
||||||
|
"lambda.amazonaws.com"
|
||||||
|
],
|
||||||
|
"type": "Service"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"resources": [],
|
||||||
|
"sid": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": "2012-10-17"
|
||||||
|
},
|
||||||
|
"sensitive_attributes": [],
|
||||||
|
"identity_schema_version": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mode": "managed",
|
||||||
|
"type": "aws_iam_role",
|
||||||
|
"name": "iam_for_lambda",
|
||||||
|
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"arn": "arn:aws:iam::695105795926:role/glimpse2-test",
|
||||||
|
"assume_role_policy": "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"}}],\"Version\":\"2012-10-17\"}",
|
||||||
|
"create_date": "2026-05-27T17:09:01Z",
|
||||||
|
"description": "",
|
||||||
|
"force_detach_policies": false,
|
||||||
|
"id": "glimpse2-test",
|
||||||
|
"inline_policy": [],
|
||||||
|
"managed_policy_arns": [],
|
||||||
|
"max_session_duration": 3600,
|
||||||
|
"name": "glimpse2-test",
|
||||||
|
"name_prefix": "",
|
||||||
|
"path": "/",
|
||||||
|
"permissions_boundary": "",
|
||||||
|
"tags": {},
|
||||||
|
"tags_all": {},
|
||||||
|
"unique_id": "AROA2DV4IW5LLMAWHIGZQ"
|
||||||
|
},
|
||||||
|
"sensitive_attributes": [],
|
||||||
|
"identity_schema_version": 0,
|
||||||
|
"private": "bnVsbA==",
|
||||||
|
"dependencies": [
|
||||||
|
"data.aws_iam_policy_document.assume_role"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mode": "managed",
|
||||||
|
"type": "aws_lambda_function",
|
||||||
|
"name": "test_lambda",
|
||||||
|
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"architectures": [
|
||||||
|
"x86_64"
|
||||||
|
],
|
||||||
|
"arn": "arn:aws:lambda:us-east-1:695105795926:function:glimpse2-test",
|
||||||
|
"code_sha256": "y9M2eCZjnOi+6H60vC4z+HW95OP9GVC0Icw3Yc3xIvU=",
|
||||||
|
"code_signing_config_arn": "",
|
||||||
|
"dead_letter_config": [],
|
||||||
|
"description": "",
|
||||||
|
"environment": [
|
||||||
|
{
|
||||||
|
"variables": {
|
||||||
|
"environment": "test"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"ephemeral_storage": [
|
||||||
|
{
|
||||||
|
"size": 512
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"file_system_config": [],
|
||||||
|
"filename": "lambda_function_payload.zip",
|
||||||
|
"function_name": "glimpse2-test",
|
||||||
|
"handler": "main.handler",
|
||||||
|
"id": "glimpse2-test",
|
||||||
|
"image_config": [],
|
||||||
|
"image_uri": "",
|
||||||
|
"invoke_arn": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:695105795926:function:glimpse2-test/invocations",
|
||||||
|
"kms_key_arn": "",
|
||||||
|
"last_modified": "2026-05-27T17:11:46.000+0000",
|
||||||
|
"layers": [
|
||||||
|
"arn:aws:lambda:us-east-1:695105795926:layer:openai-layer-test:1"
|
||||||
|
],
|
||||||
|
"logging_config": [
|
||||||
|
{
|
||||||
|
"application_log_level": "",
|
||||||
|
"log_format": "Text",
|
||||||
|
"log_group": "/aws/lambda/glimpse2-test",
|
||||||
|
"system_log_level": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"memory_size": 512,
|
||||||
|
"package_type": "Zip",
|
||||||
|
"publish": false,
|
||||||
|
"qualified_arn": "arn:aws:lambda:us-east-1:695105795926:function:glimpse2-test:$LATEST",
|
||||||
|
"qualified_invoke_arn": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:695105795926:function:glimpse2-test:$LATEST/invocations",
|
||||||
|
"replace_security_groups_on_destroy": null,
|
||||||
|
"replacement_security_group_ids": null,
|
||||||
|
"reserved_concurrent_executions": -1,
|
||||||
|
"role": "arn:aws:iam::695105795926:role/glimpse2-test",
|
||||||
|
"runtime": "python3.11",
|
||||||
|
"s3_bucket": null,
|
||||||
|
"s3_key": null,
|
||||||
|
"s3_object_version": null,
|
||||||
|
"signing_job_arn": "",
|
||||||
|
"signing_profile_version_arn": "",
|
||||||
|
"skip_destroy": false,
|
||||||
|
"snap_start": [],
|
||||||
|
"source_code_hash": "y9M2eCZjnOi+6H60vC4z+HW95OP9GVC0Icw3Yc3xIvU=",
|
||||||
|
"source_code_size": 12212,
|
||||||
|
"tags": {},
|
||||||
|
"tags_all": {},
|
||||||
|
"timeout": 60,
|
||||||
|
"timeouts": null,
|
||||||
|
"tracing_config": [
|
||||||
|
{
|
||||||
|
"mode": "PassThrough"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": "$LATEST",
|
||||||
|
"vpc_config": []
|
||||||
|
},
|
||||||
|
"sensitive_attributes": [],
|
||||||
|
"identity_schema_version": 0,
|
||||||
|
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6NjAwMDAwMDAwMDAwLCJ1cGRhdGUiOjYwMDAwMDAwMDAwMH19",
|
||||||
|
"dependencies": [
|
||||||
|
"aws_iam_role.iam_for_lambda",
|
||||||
|
"aws_lambda_layer_version.layer",
|
||||||
|
"data.archive_file.lambda",
|
||||||
|
"data.archive_file.layer",
|
||||||
|
"data.aws_iam_policy_document.assume_role",
|
||||||
|
"null_resource.pip_install"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mode": "managed",
|
||||||
|
"type": "aws_lambda_layer_version",
|
||||||
|
"name": "layer",
|
||||||
|
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"arn": "arn:aws:lambda:us-east-1:695105795926:layer:openai-layer-test:1",
|
||||||
|
"code_sha256": "dB5NITnNHiiWWQtFv9f3eYWRilrtiE60AJNMWRadSlA=",
|
||||||
|
"compatible_architectures": [],
|
||||||
|
"compatible_runtimes": [
|
||||||
|
"python3.11"
|
||||||
|
],
|
||||||
|
"created_date": "2026-05-27T17:09:07.743+0000",
|
||||||
|
"description": "",
|
||||||
|
"filename": "./layer.zip",
|
||||||
|
"id": "arn:aws:lambda:us-east-1:695105795926:layer:openai-layer-test:1",
|
||||||
|
"layer_arn": "arn:aws:lambda:us-east-1:695105795926:layer:openai-layer-test",
|
||||||
|
"layer_name": "openai-layer-test",
|
||||||
|
"license_info": "",
|
||||||
|
"s3_bucket": null,
|
||||||
|
"s3_key": null,
|
||||||
|
"s3_object_version": null,
|
||||||
|
"signing_job_arn": "",
|
||||||
|
"signing_profile_version_arn": "",
|
||||||
|
"skip_destroy": false,
|
||||||
|
"source_code_hash": "dB5NITnNHiiWWQtFv9f3eYWRilrtiE60AJNMWRadSlA=",
|
||||||
|
"source_code_size": 7103838,
|
||||||
|
"version": "1"
|
||||||
|
},
|
||||||
|
"sensitive_attributes": [],
|
||||||
|
"identity_schema_version": 0,
|
||||||
|
"private": "bnVsbA==",
|
||||||
|
"dependencies": [
|
||||||
|
"data.archive_file.layer",
|
||||||
|
"null_resource.pip_install"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mode": "managed",
|
||||||
|
"type": "null_resource",
|
||||||
|
"name": "pip_install",
|
||||||
|
"provider": "provider[\"registry.terraform.io/hashicorp/null\"]",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"id": "5491774440303221650",
|
||||||
|
"triggers": {
|
||||||
|
"shell_hash": "84016380c6c240dd563a10e364ece2d65f4ad6c7313b2dd69cefbeb949fcfa4b"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sensitive_attributes": [],
|
||||||
|
"identity_schema_version": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"check_results": null
|
||||||
|
}
|
||||||
313
terraform.tfstate.d/test/terraform.tfstate.backup
Normal file
313
terraform.tfstate.d/test/terraform.tfstate.backup
Normal file
@@ -0,0 +1,313 @@
|
|||||||
|
{
|
||||||
|
"version": 4,
|
||||||
|
"terraform_version": "1.15.1",
|
||||||
|
"serial": 6,
|
||||||
|
"lineage": "d233b79d-da3f-cd9d-4b62-af1c850901ee",
|
||||||
|
"outputs": {},
|
||||||
|
"resources": [
|
||||||
|
{
|
||||||
|
"mode": "data",
|
||||||
|
"type": "archive_file",
|
||||||
|
"name": "lambda",
|
||||||
|
"provider": "provider[\"registry.terraform.io/hashicorp/archive\"]",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"exclude_symlink_directories": null,
|
||||||
|
"excludes": null,
|
||||||
|
"id": "076a08927a351c0f32ee35bce706df144469e677",
|
||||||
|
"output_base64sha256": "JhTe97YTSvuFlvDFGzhFP+f6yE7Rn6HSp2Y1SYVlOVY=",
|
||||||
|
"output_base64sha512": "P1Z89ahd14HUlbP7q8yNoFmZPu6B9w95stgmbqEkpWdx1NhJwdiNN4iYDqdHJI/q6cdzE1xLkU8wxwyDIWZj+Q==",
|
||||||
|
"output_file_mode": null,
|
||||||
|
"output_md5": "5d9102792c60073f6c15da416babe408",
|
||||||
|
"output_path": "lambda_function_payload.zip",
|
||||||
|
"output_sha": "076a08927a351c0f32ee35bce706df144469e677",
|
||||||
|
"output_sha256": "2614def7b6134afb8596f0c51b38453fe7fac84ed19fa1d2a766354985653956",
|
||||||
|
"output_sha512": "3f567cf5a85dd781d495b3fbabcc8da059993eee81f70f79b2d8266ea124a56771d4d849c1d88d3788980ea747248feae9c773135c4b914f30c70c83216663f9",
|
||||||
|
"output_size": 12141,
|
||||||
|
"source": [],
|
||||||
|
"source_content": null,
|
||||||
|
"source_content_filename": null,
|
||||||
|
"source_dir": "./code",
|
||||||
|
"source_file": null,
|
||||||
|
"type": "zip"
|
||||||
|
},
|
||||||
|
"sensitive_attributes": [],
|
||||||
|
"identity_schema_version": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mode": "data",
|
||||||
|
"type": "archive_file",
|
||||||
|
"name": "layer",
|
||||||
|
"provider": "provider[\"registry.terraform.io/hashicorp/archive\"]",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"exclude_symlink_directories": null,
|
||||||
|
"excludes": null,
|
||||||
|
"id": "b2027e85f6c1607a31456d9bab04adea560c124a",
|
||||||
|
"output_base64sha256": "dB5NITnNHiiWWQtFv9f3eYWRilrtiE60AJNMWRadSlA=",
|
||||||
|
"output_base64sha512": "YSSHtd8poCa26moOzdrQBJ8zuSK2L2N7XOIJq7KgDerdfbty2gPkcNi7Y/7jQ1UHP++Wft9vZO3P0zYO6T5tmA==",
|
||||||
|
"output_file_mode": null,
|
||||||
|
"output_md5": "777cb1543745e89136e2e9efe52b7dee",
|
||||||
|
"output_path": "./layer.zip",
|
||||||
|
"output_sha": "b2027e85f6c1607a31456d9bab04adea560c124a",
|
||||||
|
"output_sha256": "741e4d2139cd1e2896590b45bfd7f77985918a5aed884eb400934c59169d4a50",
|
||||||
|
"output_sha512": "612487b5df29a026b6ea6a0ecddad0049f33b922b62f637b5ce209abb2a00deadd7dbb72da03e470d8bb63fee34355073fef967edf6f64edcfd3360ee93e6d98",
|
||||||
|
"output_size": 7103838,
|
||||||
|
"source": [],
|
||||||
|
"source_content": null,
|
||||||
|
"source_content_filename": null,
|
||||||
|
"source_dir": "./layer",
|
||||||
|
"source_file": null,
|
||||||
|
"type": "zip"
|
||||||
|
},
|
||||||
|
"sensitive_attributes": [],
|
||||||
|
"identity_schema_version": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mode": "data",
|
||||||
|
"type": "aws_iam_policy_document",
|
||||||
|
"name": "assume_role",
|
||||||
|
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"id": "2690255455",
|
||||||
|
"json": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"lambda.amazonaws.com\"\n }\n }\n ]\n}",
|
||||||
|
"minified_json": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Action\":\"sts:AssumeRole\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"}}]}",
|
||||||
|
"override_json": null,
|
||||||
|
"override_policy_documents": null,
|
||||||
|
"policy_id": null,
|
||||||
|
"source_json": null,
|
||||||
|
"source_policy_documents": null,
|
||||||
|
"statement": [
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
"sts:AssumeRole"
|
||||||
|
],
|
||||||
|
"condition": [],
|
||||||
|
"effect": "Allow",
|
||||||
|
"not_actions": [],
|
||||||
|
"not_principals": [],
|
||||||
|
"not_resources": [],
|
||||||
|
"principals": [
|
||||||
|
{
|
||||||
|
"identifiers": [
|
||||||
|
"lambda.amazonaws.com"
|
||||||
|
],
|
||||||
|
"type": "Service"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"resources": [],
|
||||||
|
"sid": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": "2012-10-17"
|
||||||
|
},
|
||||||
|
"sensitive_attributes": [],
|
||||||
|
"identity_schema_version": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mode": "managed",
|
||||||
|
"type": "aws_iam_role",
|
||||||
|
"name": "iam_for_lambda",
|
||||||
|
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"arn": "arn:aws:iam::695105795926:role/glimpse2-test",
|
||||||
|
"assume_role_policy": "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"}}],\"Version\":\"2012-10-17\"}",
|
||||||
|
"create_date": "2026-05-27T17:09:01Z",
|
||||||
|
"description": "",
|
||||||
|
"force_detach_policies": false,
|
||||||
|
"id": "glimpse2-test",
|
||||||
|
"inline_policy": [],
|
||||||
|
"managed_policy_arns": [],
|
||||||
|
"max_session_duration": 3600,
|
||||||
|
"name": "glimpse2-test",
|
||||||
|
"name_prefix": "",
|
||||||
|
"path": "/",
|
||||||
|
"permissions_boundary": "",
|
||||||
|
"tags": null,
|
||||||
|
"tags_all": {},
|
||||||
|
"unique_id": "AROA2DV4IW5LLMAWHIGZQ"
|
||||||
|
},
|
||||||
|
"sensitive_attributes": [],
|
||||||
|
"identity_schema_version": 0,
|
||||||
|
"private": "bnVsbA==",
|
||||||
|
"dependencies": [
|
||||||
|
"data.aws_iam_policy_document.assume_role"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mode": "managed",
|
||||||
|
"type": "aws_lambda_function",
|
||||||
|
"name": "test_lambda",
|
||||||
|
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"architectures": [
|
||||||
|
"x86_64"
|
||||||
|
],
|
||||||
|
"arn": "arn:aws:lambda:us-east-1:695105795926:function:glimpse2-test",
|
||||||
|
"code_sha256": "JhTe97YTSvuFlvDFGzhFP+f6yE7Rn6HSp2Y1SYVlOVY=",
|
||||||
|
"code_signing_config_arn": "",
|
||||||
|
"dead_letter_config": [],
|
||||||
|
"description": "",
|
||||||
|
"environment": [
|
||||||
|
{
|
||||||
|
"variables": {
|
||||||
|
"environment": "test"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"ephemeral_storage": [
|
||||||
|
{
|
||||||
|
"size": 512
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"file_system_config": [],
|
||||||
|
"filename": "lambda_function_payload.zip",
|
||||||
|
"function_name": "glimpse2-test",
|
||||||
|
"handler": "main.handler",
|
||||||
|
"id": "glimpse2-test",
|
||||||
|
"image_config": [],
|
||||||
|
"image_uri": "",
|
||||||
|
"invoke_arn": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:695105795926:function:glimpse2-test/invocations",
|
||||||
|
"kms_key_arn": "",
|
||||||
|
"last_modified": "2026-05-27T17:09:08.994+0000",
|
||||||
|
"layers": [
|
||||||
|
"arn:aws:lambda:us-east-1:695105795926:layer:openai-layer-test:1"
|
||||||
|
],
|
||||||
|
"logging_config": [
|
||||||
|
{
|
||||||
|
"application_log_level": "",
|
||||||
|
"log_format": "Text",
|
||||||
|
"log_group": "/aws/lambda/glimpse2-test",
|
||||||
|
"system_log_level": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"memory_size": 512,
|
||||||
|
"package_type": "Zip",
|
||||||
|
"publish": false,
|
||||||
|
"qualified_arn": "arn:aws:lambda:us-east-1:695105795926:function:glimpse2-test:$LATEST",
|
||||||
|
"qualified_invoke_arn": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:695105795926:function:glimpse2-test:$LATEST/invocations",
|
||||||
|
"replace_security_groups_on_destroy": null,
|
||||||
|
"replacement_security_group_ids": null,
|
||||||
|
"reserved_concurrent_executions": -1,
|
||||||
|
"role": "arn:aws:iam::695105795926:role/glimpse2-test",
|
||||||
|
"runtime": "python3.11",
|
||||||
|
"s3_bucket": null,
|
||||||
|
"s3_key": null,
|
||||||
|
"s3_object_version": null,
|
||||||
|
"signing_job_arn": "",
|
||||||
|
"signing_profile_version_arn": "",
|
||||||
|
"skip_destroy": false,
|
||||||
|
"snap_start": [],
|
||||||
|
"source_code_hash": "JhTe97YTSvuFlvDFGzhFP+f6yE7Rn6HSp2Y1SYVlOVY=",
|
||||||
|
"source_code_size": 12141,
|
||||||
|
"tags": null,
|
||||||
|
"tags_all": {},
|
||||||
|
"timeout": 60,
|
||||||
|
"timeouts": null,
|
||||||
|
"tracing_config": [
|
||||||
|
{
|
||||||
|
"mode": "PassThrough"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": "$LATEST",
|
||||||
|
"vpc_config": []
|
||||||
|
},
|
||||||
|
"sensitive_attributes": [],
|
||||||
|
"identity_schema_version": 0,
|
||||||
|
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6NjAwMDAwMDAwMDAwLCJ1cGRhdGUiOjYwMDAwMDAwMDAwMH19",
|
||||||
|
"dependencies": [
|
||||||
|
"aws_iam_role.iam_for_lambda",
|
||||||
|
"aws_lambda_layer_version.layer",
|
||||||
|
"data.archive_file.lambda",
|
||||||
|
"data.archive_file.layer",
|
||||||
|
"data.aws_iam_policy_document.assume_role",
|
||||||
|
"null_resource.pip_install"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mode": "managed",
|
||||||
|
"type": "aws_lambda_layer_version",
|
||||||
|
"name": "layer",
|
||||||
|
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"arn": "arn:aws:lambda:us-east-1:695105795926:layer:openai-layer-test:1",
|
||||||
|
"code_sha256": "dB5NITnNHiiWWQtFv9f3eYWRilrtiE60AJNMWRadSlA=",
|
||||||
|
"compatible_architectures": null,
|
||||||
|
"compatible_runtimes": [
|
||||||
|
"python3.11"
|
||||||
|
],
|
||||||
|
"created_date": "2026-05-27T17:09:07.743+0000",
|
||||||
|
"description": "",
|
||||||
|
"filename": "./layer.zip",
|
||||||
|
"id": "arn:aws:lambda:us-east-1:695105795926:layer:openai-layer-test:1",
|
||||||
|
"layer_arn": "arn:aws:lambda:us-east-1:695105795926:layer:openai-layer-test",
|
||||||
|
"layer_name": "openai-layer-test",
|
||||||
|
"license_info": "",
|
||||||
|
"s3_bucket": null,
|
||||||
|
"s3_key": null,
|
||||||
|
"s3_object_version": null,
|
||||||
|
"signing_job_arn": "",
|
||||||
|
"signing_profile_version_arn": "",
|
||||||
|
"skip_destroy": false,
|
||||||
|
"source_code_hash": "dB5NITnNHiiWWQtFv9f3eYWRilrtiE60AJNMWRadSlA=",
|
||||||
|
"source_code_size": 7103838,
|
||||||
|
"version": "1"
|
||||||
|
},
|
||||||
|
"sensitive_attributes": [],
|
||||||
|
"identity_schema_version": 0,
|
||||||
|
"private": "bnVsbA==",
|
||||||
|
"dependencies": [
|
||||||
|
"data.archive_file.layer",
|
||||||
|
"null_resource.pip_install"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"mode": "managed",
|
||||||
|
"type": "null_resource",
|
||||||
|
"name": "pip_install",
|
||||||
|
"provider": "provider[\"registry.terraform.io/hashicorp/null\"]",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"id": "5491774440303221650",
|
||||||
|
"triggers": {
|
||||||
|
"shell_hash": "84016380c6c240dd563a10e364ece2d65f4ad6c7313b2dd69cefbeb949fcfa4b"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sensitive_attributes": [],
|
||||||
|
"identity_schema_version": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"check_results": null
|
||||||
|
}
|
||||||
1
test.tfvars
Normal file
1
test.tfvars
Normal file
@@ -0,0 +1 @@
|
|||||||
|
environment = "test"
|
||||||
15
variables.tf
Normal file
15
variables.tf
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
variable "environment" {
|
||||||
|
description = "Deployment environment name"
|
||||||
|
type = string
|
||||||
|
default = "prod"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "region" {
|
||||||
|
description = "AWS region"
|
||||||
|
type = string
|
||||||
|
default = "us-east-1"
|
||||||
|
}
|
||||||
|
|
||||||
|
locals {
|
||||||
|
env = terraform.workspace == "default" ? "prod" : terraform.workspace
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user