如何通过Terraform编程方式导入Azure APIM GraphQL API
Azure APIM GraphQL API Terraform导入相关问题解答
是否可以直接通过Terraform实现GraphQL API导入?
目前不行。
当前官方AzureRM Terraform Provider的azurerm_api_management_api资源,支持的API规范导入格式和核查到的Azure CLI能力完全对齐,仅覆盖OpenApi、OpenApiJson、Swagger、Wadl、Wsdl五种,没有提供GraphQL透传API对应的导入参数,原生资源暂时不支持该操作。
当前Azure CLI导入APIM API支持的规范格式如下:
az apim api import --path --resource-group --service-name --specification-format {OpenApi, OpenApiJson, Swagger, Wadl, Wsdl}
是否可以借助Terraform的local-exec调用PowerShell脚本完成导入操作?
完全可以,这也是目前官方工具链补齐相关能力前,最常用的稳定变通方案。
注意不要用当前版本的Azure CLI做导入,直接在PowerShell脚本里调用Azure APIM的公开REST API即可——Azure门户上手动导入GraphQL API的操作,底层就是调用这套已经随功能GA的REST接口,不存在稳定性问题。
实操注意事项
- 必须给local-exec配置显式资源依赖,确保脚本在APIM实例创建完成后再执行,避免资源未就绪导致的调用失败
- 鉴权直接复用Terraform执行时的Azure身份上下文即可,可通过
azurerm_client_config数据源获取当前订阅、租户信息,搭配Azure PowerShell模块获取鉴权token,不需要硬编码账号密钥 - 调用REST接口创建API时,请求体内将API类型字段设置为
graphql,透传场景直接配置后端服务地址、上传GraphQL Schema内容即可,不需要走旧版的规范格式导入参数 - 脚本需要做幂等判断:执行创建操作前先调用查询接口判断目标API是否已存在,存在则走更新逻辑,避免每次
terraform apply触发重复创建报错 - 运行环境选择PowerShell 7+即可,在Windows、macOS、Linux下都能正常执行,没有跨平台兼容问题
后续Azure CLI、AzureRM Terraform Provider正式补齐GraphQL导入参数后,可直接将这段local-exec逻辑替换为原生资源配置,状态迁移成本很低。
内容的提问来源于stack exchange,提问作者Ramakant Dadhichi
相关产品推荐
相关产品推荐

