Token导航 LogoToken导航

Agent Skill · 研究检索

import-infrastructure-as-code(将基础设施导入为代码)

import-infrastructure-as-code 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

import-infrastructure-as-code 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为调用外部服务;许可证信息还不明确,第三方扫描有提醒项,按安装量在研究检索类的 73,675 个 Skill 里排第 859。

总安装 151,320周安装 6,532GitHub Stars 31,723下载 53,040核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:import-infrastructure-as-code(将基础设施导入为代码)
来源仓库:https://github.com/github/awesome-copilot
仓库路径:skills/import-infrastructure-as-code
安装命令:
npx skills add https://github.com/github/awesome-copilot --skill import-infrastructure-as-code
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/github/awesome-copilot --skill import-infrastructure-as-code

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

使用 Azure 验证模块将实时 Azure 基础设施逆向工程转换为 Terraform 代码。

使用 Azure CLI 跨订阅、资源组或特定资源 ID 范围发现 Azure 资源,然后映射依赖项并生成基于 AVM 的 Terraform 配置 需要在代码生成之前阅读每个 AVM 模块的自述文件,以确定所需的输入、子资源所有权以及与原始 azurerm_* 不同的确切变量名称 提供者参数 通过检查下载的模块源代码来生成导入块,以得出正确的资源地址、提供程序类型(azurerm 与 azapi)、子模块嵌套和 count/for_each 模式 生成providers.tf, 主.tf, 变量.tf, 输出.tf 和文档文件 (exported-resources.json, 导出架构.md )通过 terraform plan 进行全面验证 根据 AVM 模块默认值验证实时资源属性以防止配置漂移,在生成的配置中显式设置任何不同的值

来源仓库内路径:skills/import-infrastructure-as-code

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/github/awesome-copilot --skill import-infrastr…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要调用外部服务,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

import-infrastructure-as-code 怎么安装?

在终端执行 npx skills add https://github.com/github/awesome-copilot --skill import-infrastructure-as-…。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

import-infrastructure-as-code 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

import-infrastructure-as-code 需要什么权限?

权限级别是调用外部服务。该 Skill 可能调用第三方服务、云服务或外部模型 API,使用前需要确认账号、额度、数据发送范围和服务条款。

import-infrastructure-as-code 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

import-infrastructure-as-code 用的人多吗?

公开数据是累计安装 151,320 次,近一周安装 6,532 次,下载 53,040 次,GitHub 31,723 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

import-infrastructure-as-code 安全吗?

第三方扫描有提醒项,说明存在需要人工确认的行为。安装前请打开源码看清它读了什么、联网到哪里。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 来源仓库有 31,723 星,维护活跃度相对可查。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
import-infrastructure-as-code

将基础设施导入为代码 · 本页

151,32031,723调用外部服务未明确有提醒

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Import Infrastructure as Code (Azure -> Terraform with AVM)

Convert existing Azure infrastructure into maintainable Terraform code using discovery data and Azure Verified Modules.

When to Use This Skill

Use this skill when the user asks to:

  • Import existing Azure resources into Terraform
  • Generate IaC from live Azure environments
  • Handle any Azure resource type supported by AVM (and document justified non-AVM fallbacks)
  • Recreate infrastructure from a subscription or resource group
  • Map dependencies between discovered Azure resources
  • Use AVM modules instead of handwritten azurerm_* resources

Prerequisites

  • Azure CLI installed and authenticated (az login)
  • Access to the target subscription or resource group
  • Terraform CLI installed
  • Network access to Terraform Registry and AVM index sources

Inputs

ParameterRequiredDefaultDescription
subscription-idNoActive CLI contextAzure subscription used for subscription-scope discovery and context setting
resource-group-nameNoNoneAzure resource group used for resource-group-scope discovery
resource-idNoNoneOne or more Azure ARM resource IDs used for specific-resource-scope discovery

At least one of subscription-id, resource-group-name, or resource-id is required.

Step-by-Step Workflows

1) Collect Required Scope (Mandatory)

Request one of these scopes before running discovery commands:

  • Subscription scope: <subscription-id>
  • Resource group scope: <resource-group-name>
  • Specific resources scope: one or more <resource-id> values

Scope handling rules:

  • Treat Azure ARM resource IDs (for example /subscriptions/.../providers/...) as cloud resource identifiers, not local file system paths.
  • Use resource IDs only with Azure CLI --ids arguments (for example az resource show --ids <resource-id>).
  • Never pass resource IDs to file-reading commands (cat, ls, read_file, glob searches) unless the user explicitly says they are local file paths.
  • If the user already provided one valid scope, do not ask for additional scope inputs unless required by a failing command.
  • Do not ask follow-up questions that can be answered from already-provided scope values.

If scope is missing, ask for it explicitly and stop.

2) Authenticate and Set Context

Run only the commands required for the selected scope.

For subscription scope:

az login
az account set --subscription <subscription-id>
az account show --query "{subscriptionId:id, name:name, tenantId:tenantId}" -o json

Expected output: JSON object with subscriptionId, name, and tenantId.

For resource group or specific resource scope, az login is still required but az account set is optional if the active context is already correct.

When using specific resource scope, prefer direct --ids-based commands first and avoid extra discovery prompts for subscription or resource group unless needed for a concrete command.

3) Run Discovery Commands

Discover resources using the selected scopes. Ensure to fetch all necessary information for accurate Terraform generation.

# Subscription scope
az resource list --subscription <subscription-id> -o json

# Resource group scope
az resource list --resource-group <resource-group-name> -o json

# Specific resource scope
az resource show --ids <resource-id-1> <resource-id-2> ... -o json

Expected output: JSON object or array containing Azure resource metadata (id, type, name, location, tags, properties).

4) Resolve Dependencies Before Code Generation

Parse exported JSON and map:

  • Parent-child relationships (for example: NIC -> Subnet -> VNet)
  • Cross-resource references in properties
  • Ordering for Terraform creation

IMPORTANT: Generate the following documentation and save it to a docs folder in the root of the project.

  • exported-resources.json with all discovered resources and their metadata, including dependencies and references.
  • EXPORTED-ARCHITECTURE.MD file with a human-readable architecture overview based on the discovered resources and their relationships.

5) Select Azure Verified Modules (Required)

Use the latest AVM version for each resource type.

Terraform Registry

  • Search for "avm" + resource name
  • Filter by "Partner" tag to find official AVM modules
  • Example: Search "avm storage account" → filter by Partner

Official AVM Index

Note: The following links always point to the latest version of the CSV files on the main branch. As intended, this means the files may change over time. If you require a point-in-time version, consider using a specific release tag in the URL.
  • Terraform Resource Modules: https://raw.githubusercontent.com/Azure/Azure-Verified-Modules/refs/heads/main/docs/static/module-indexes/TerraformResourceModules.csv
  • Terraform Pattern Modules: https://raw.githubusercontent.com/Azure/Azure-Verified-Modules/refs/heads/main/docs/static/module-indexes/TerraformPatternModules.csv
  • Terraform Utility Modules: https://raw.githubusercontent.com/Azure/Azure-Verified-Modules/refs/heads/main/docs/static/module-indexes/TerraformUtilityModules.csv

Individual Module information

Use the web tool or another suitable MCP method to get module information if not available locally in the .terraform folder.

Use AVM sources:

  • Registry: https://registry.terraform.io/modules/Azure/<module>/azurerm/latest
  • GitHub: https://github.com/Azure/terraform-azurerm-avm-res-<service>-<resource>

Prefer AVM modules over handwritten azurerm_* resources when an AVM module exists.

When fetching module information from GitHub repositories, the README.md file in the root of the repository typically contains all detailed information about the module, for example: https://raw.githubusercontent.com/Azure/terraform-azurerm-avm-res--/refs/heads/main/README.md

5a) Read the Module README Before Writing Any Code (Mandatory)

This step is not optional. Before writing a single line of HCL for a module, fetch and read the full README for that module. Do not rely on knowledge of the raw azurerm provider or prior experience with other AVM modules.

For each selected AVM module, fetch its README:

https://raw.githubusercontent.com/Azure/terraform-azurerm-avm-res-<service>-<resource>/refs/heads/main/README.md

Or if the module is already downloaded after terraform init:

cat .terraform/modules/<module_key>/README.md

From the README, extract and record before writing code:

  1. Required Inputs — every input the module requires. Any child resource listed here (NICs, extensions, subnets, public IPs) is managed inside the module. Do not create standalone module blocks for those resources.
  2. Optional Inputs — the exact Terraform variable names and their declared type. Do not assume they match the raw azurerm provider argument names or block shapes.
  3. Usage examples — check what resource group identifier is used (parent_id vs resource_group_name), how child resources are expressed (inline map vs separate module), and what syntax each input expects.
Apply module rules as patterns, not assumptions

Use the lessons below as examples of the *type* of mismatch that often causes imports to fail. Do not assume these exact names apply to every AVM module. Always verify each selected module's README and variables.tf.

avm-res-compute-virtualmachine (any version)

  • network_interfaces is a Required Input. NICs are owned by the VM module. Never create standalone avm-res-network-networkinterface modules alongside a VM module — define every NIC inline under network_interfaces.
  • TrustedLaunch is expressed through the top-level booleans secure_boot_enabled = true and vtpm_enabled = true. The security_type argument exists only under os_disk for Confidential VM disk encryption and must not be used for TrustedLaunch.
  • boot_diagnostics is a bool, not an object. Use boot_diagnostics = true; use the separate boot_diagnostics_storage_account_uri variable if a storage URI is needed.
  • Extensions are managed inside the module via the extensions map. Do not create standalone extension resources.

avm-res-network-virtualnetwork (any version)

  • This module is backed by the AzAPI provider, not azurerm. Use parent_id (the full resource group resource ID string) to specify the resource group, not resource_group_name.
  • Every example in the README shows parent_id; none show resource_group_name.

Generalized takeaway for all AVM modules:

  • Determine child resource ownership from Required Inputs before creating sibling modules.
  • Determine accepted variable names and types from Optional Inputs and variables.tf.
  • Determine identifier style and input shape from README usage examples.
  • Do not infer argument names from raw azurerm_* resources.

6) Generate Terraform Files

Before Writing Import Blocks — Inspect Module Source (Mandatory)

After terraform init downloads the modules, inspect each module's source files to determine the exact Terraform resource addresses before writing any import {} blocks. Never write import addresses from memory.

Step A — Identify the provider and resource label
grep "^resource" .terraform/modules/<module_key>/main*.tf

This reveals whether the module uses azurerm_* or azapi_resource labels. For example, avm-res-network-virtualnetwork exposes azapi_resource "vnet", not azurerm_virtual_network "this".

Step B — Identify child modules and nested paths
grep "^module" .terraform/modules/<module_key>/main*.tf

If child resources are managed in a sub-module (subnets, extensions, etc.), the import address must include every intermediate module label:

module.<root_module_key>.module.<child_module_key>["<map_key>"].<resource_type>.<label>[<index>]
Step C — Check for count vs for_each
grep -n "count\|for_each" .terraform/modules/<module_key>/main*.tf

Any resource using count requires an index in the import address. When count = 1 (e.g., conditional Linux vs Windows selection), the address must end with [0]. Resources using for_each use string keys, not numeric indexes.

Known import address patterns (examples from lessons learned)

These are examples only. Use them as templates for reasoning, then derive the exact addresses from the downloaded source code for the modules in your current import.

ResourceCorrect import to address pattern
AzAPI-backed VNetmodule.<vnet_key>.azapi_resource.vnet
Subnet (nested, count-based)module.<vnet_key>.module.subnet["<subnet_name>"].azapi_resource.subnet[0]
Linux VM (count-based)module.<vm_key>.azurerm_linux_virtual_machine.this[0]
VM NICmodule.<vm_key>.azurerm_network_interface.virtualmachine_network_interfaces["<nic_key>"]
VM extension (default deploy_sequence=5)module.<vm_key>.module.extension["<ext_name>"].azurerm_virtual_machine_extension.this
VM extension (deploy_sequence=1–4)module.<vm_key>.module.extension_<n>["<ext_name>"].azurerm_virtual_machine_extension.this
NSG-NIC associationmodule.<vm_key>.azurerm_network_interface_security_group_association.this["<nic_key>-<nsg_key>"]

Produce:

  • providers.tf with azurerm provider and required version constraints
  • main.tf with AVM module blocks and explicit dependencies
  • variables.tf for environment-specific values
  • outputs.tf for key IDs and endpoints
  • terraform.tfvars.example with placeholder values

Diff Live Properties Against Module Defaults (Mandatory)

After writing the initial configuration, compare every non-zero property of each discovered live resource against the default value declared in the corresponding AVM module's variables.tf. Any property where the live value differs from the module default must be set explicitly in the Terraform configuration.

Pay particular attention to the following property categories, which are common sources of silent configuration drift:

  • Timeout values (e.g., Public IP idle_timeout_in_minutes defaults to 4; live deployments often use 30)
  • Network policy flags (e.g., subnet private_endpoint_network_policies defaults to "Enabled"; existing subnets often have "Disabled")
  • SKU and allocation (e.g., Public IP sku, allocation_method)
  • Availability zones (e.g., VM zone, Public IP zone)
  • Redundancy and replication settings on storage and database resources

Retrieve full live properties with explicit az commands, for example:

az network public-ip show --ids <resource_id> --query "{idleTimeout:idleTimeoutInMinutes, sku:sku.name, zones:zones}" -o json
az network vnet subnet show --ids <resource_id> --query "{privateEndpointPolicies:privateEndpointNetworkPolicies, delegation:delegations}" -o json

Do not rely solely on az resource list output, which may omit nested or computed properties.

Pin module versions explicitly:

module "example" {
	source  = "Azure/<module>/azurerm"
	version = "<latest-compatible-version>"
}

7) Validate Generated Code

Run:

terraform init
terraform fmt -recursive
terraform validate
terraform plan

Expected output: no syntax errors, no validation errors, and a plan that matches discovered infrastructure intent.

Troubleshooting

ProblemLikely CauseAction
az command fails with authorization errorsWrong tenant/subscription or missing RBAC roleRe-run az login, verify subscription context, confirm required permissions
Discovery output is emptyIncorrect scope or no resources in scopeRe-check scope input and run scoped list/show command again
No AVM module found for a resource typeResource type not yet covered by AVMUse native azurerm_* resource for that type and document the gap
terraform validate failsMissing variables or unresolved dependenciesAdd required variables and explicit dependencies, then re-run validation
Unknown argument or variable not found in moduleAVM variable name differs from azurerm provider argument nameRead the module README variables.tf or Optional Inputs section for the correct name
Import block fails — resource not found at addressWrong provider label (azurerm_ vs azapi_), missing sub-module path, or missing [0] indexRun grep "^resource".terraform/modules/<key>/main*.tf and grep "^module" to find exact address
terraform plan shows unexpected ~ update on imported resourceLive value differs from AVM module defaultFetch live property with az <resource> show, compare to module default, add explicit value
Child-resource module gives "provider configuration not present"Child resources declared as standalone modules even though parent module owns themCheck Required Inputs in README, remove incorrect standalone modules, and model child resources using the parent module's documented input structure
Nested child resource import fails with "resource not found"Missing intermediate module path, wrong map key, or missing indexInspect module blocks and count/for_each in source; build full nested import address including all module segments and required key/index
Tool tries to read ARM resource ID as file path or asks repeated scope questionsResource ID not treated as --ids input, or agent did not trust already-provided scopeTreat ARM IDs strictly as cloud identifiers, use az... --ids..., and stop re-prompting once one valid scope is present

Response Contract

When returning results, provide:

  1. Scope used (subscription, resource group, or resource IDs)
  2. Discovery files created
  3. Resource types detected
  4. AVM modules selected with versions
  5. Terraform files generated or updated
  6. Validation command results
  7. Open gaps requiring user input (if any)

Execution Rules for the Agent

  • Do not continue if scope is missing.
  • Do not claim successful import without listing discovered files and validation output.
  • Do not skip dependency mapping before generating Terraform.
  • Prefer AVM modules first; justify each non-AVM fallback explicitly.
  • Read the README for every AVM module before writing code. Required Inputs identify which child resources the module owns. Optional Inputs document exact variable names and types. Usage examples show provider-specific conventions (parent_id vs resource_group_name). Skipping the README is the single most common cause of code errors in AVM-based imports.
  • Never assume NIC, extension, or public IP resources are standalone. For any AVM module, treat child resources as parent-owned unless the README explicitly indicates a separate module is required. Check Required Inputs before creating sibling modules.
  • Never write import addresses from memory. After terraform init, grep the downloaded module source to discover the actual provider (azurerm vs azapi), resource labels, sub-module nesting, and count vs for_each usage before writing any import {} block.
  • Never treat ARM resource IDs as file paths. Resource IDs belong in Azure CLI --ids arguments and API queries, not file IO tools. Only read local files when a real workspace path is provided.
  • Minimize prompts when scope is already known. If subscription, resource group, or specific resource IDs are already provided, proceed with commands directly and only ask a follow-up when a command fails due to missing required context.
  • Do not declare the import complete until terraform plan shows 0 destroys and 0 unwanted changes. Telemetry + create resources are acceptable. Any ~ update or - destroy on real infrastructure resources must be resolved.

References

平台分布

Codex

33.79%
按下载量换算17,922

Claude

31.01%
按下载量换算16,448

Cursor

18.46%
按下载量换算9,791

Gemini CLI

8.88%
按下载量换算4,710

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

可疑

权限和风险

调用外部服务

该 Skill 可能调用第三方服务、云服务或外部模型 API,使用前需要确认账号、额度、数据发送范围和服务条款。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills