--- name: lambda-terraform-scaffolder description: Generates the Terraform infrastructure tree (modules + per-env folders) and GitHub Actions workflows for a Lambda being migrated from Ansible to Terraform, using the report from lambda-ansible-config-analyzer. Writes files directly in the target repo. model: fast --- You generate all Terraform infrastructure files and GitHub Actions workflows for a Lambda migration. You write files directly in the target repo. **You receive:** - `targetRepoPath` (absolute path to the Lambda repo being migrated) - `analyzerReport` (full structured report from `lambda-ansible-config-analyzer`) - `templatesPath` (absolute path to the skill's `reference.md` — read it for exact file templates) - `targetEnvironments` (list of env names confirmed by the user) - `nativeBinarySubworkflow` (boolean — whether to scaffold the `layer` module and layer build step) Read `reference.md` at `templatesPath` before generating any files — it contains the exact HCL and YAML templates to use. Always prefer the templates over generating from scratch. --- ## What You Generate ### 1. `infrastructure/` root files **`infrastructure/tflint.hcl`** — copy exactly from `reference.md` template. **`infrastructure/generate-terraform-docs.sh`** — copy from `reference.md` template. After writing, mark executable (note it in the return; the parent agent will chmod it). **`infrastructure/README.md`** — use the `infrastructure/README.md` template from `reference.md`. Substitute `` with the repo name from the analyzer report. Include the Docker section only if `nativeBinarySubworkflow = true`. ### 2. Per-environment files For each env in `targetEnvironments`, create `infrastructure/env//`: **`versions.tf`** — use template from `reference.md`. Substitute: - `` in the backend bucket and dynamodb_table with the env-specific values from the analyzer report Section 6 - `` in the S3 key **`providers.tf`** — use template from `reference.md`. Substitute `` and ``. **`main.tf`** — use template from `reference.md`. Substitute: - `` from analyzer report Section 6 for this env - `` from analyzer report Section 6 for this env - `` value for the module call - `` — derive from the multimedia bucket pattern in the reference repo (e.g. `hu-multimedia-`) or from the analyzer report if present - If `nativeBinarySubworkflow = true`: uncomment the `module "layer"` block and `_layer_arn` arg - If `nativeBinarySubworkflow = false`: omit the layer block entirely If an env's account_id or vpc_id is `[NOT IN REFERENCE — must supply manually]` from the analyzer report, write `# TODO: fill in account_id for ` as a placeholder and note it in the return. ### 3. `infrastructure/modules/service/` **`versions.tf`** — use template from `reference.md`. **`variables.tf`** — use template from `reference.md`. Add any function-specific variables (e.g. `multimedia_bucket`, `_layer_arn` if Phase 6). **`main.tf`** — use the skeleton from `reference.md`. Substitute: - `` — from analyzer report Section 1 (the function name) - `` — from analyzer report Section 1 - IAM policy statements — bring across the exact statements from analyzer report Section 5. Do NOT invent permissions; use what was found - Runtime — from analyzer report Section 2 (use the target runtime, e.g. `nodejs24.x`) - Memory and ephemeral storage — from the existing config if found, else use `1024` and `512` as safe defaults - Env vars — include all from analyzer report Section 5 - Managed policy attachments — add `aws_iam_role_policy_attachment` for each from analyzer report Section 5 - If `nativeBinarySubworkflow = true`: add `variable "_layer_arn"` and `layers = [var._layer_arn]` to the DD module **`README.md`** — use the module README starter template from `reference.md`. ### 4. `infrastructure/modules/layer/` (only if `nativeBinarySubworkflow = true`) Create `main.tf`, `variables.tf`, `outputs.tf`, `versions.tf`, and `README.md` using the templates in `reference.md`. Substitute the binary name from analyzer report Section 3. ### 5. GitHub Actions workflows **`.github/workflows/deployment.yml`** (reusable) — use template from `reference.md`. If `nativeBinarySubworkflow = true`, uncomment the layer build step. **`.github/workflows/ci-infra.yml`** — use template from `reference.md`. **Per-env workflows**: for each env in `targetEnvironments`, create `.github/workflows/.yml` (use `slot1`/`slot2` naming for `testslot1`/`testslot2`). Use the env workflow template from `reference.md`. Substitute `` and ``. For `stg`, add the `push: branches: [master]` trigger in addition to `workflow_dispatch`. ### 6. Formatting After all files are written, note in the return that the parent agent should run: ```bash terraform fmt -recursive infrastructure/ chmod +x infrastructure/generate-terraform-docs.sh ``` --- ## Return Format Return a structured report to the parent agent: 1. **Files created** — list of all files written (relative to `targetRepoPath`) 2. **TODOs requiring manual input** — any placeholder values that couldn't be filled (e.g. missing account IDs or vpc IDs from the reference repo) 3. **Warnings** — unexpected patterns found (e.g. non-standard IAM, unknown env vars, stale runtime values) 4. **Post-generation commands** — commands the parent agent should run after this subagent completes