Terraform单杠-target失效双杠--target正常的原因及操作正确性确认
问题描述
执行Terraform单模块部署时,使用单短杠-target参数报错,双短杠--target参数可正常执行:
报错命令及结果
PS C:\Users\alexm\Desktop\projects\terraform\tf-ia> terraform apply -target=module.ec2_test ╷ │ Error: Invalid target "module" │ │ Prefix "module." must be followed by a module name.
正常执行的命令及结果
PS C:\Users\alexm\Desktop\projects\terraform\tf-ia> terraform apply --target=module.ec2_test Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # module.ec2_test.aws_instance.app_server will be created + resource "aws_instance" "app_server" { + ami = "ami-830c94e3" + arn = (known after apply) ........................... ....................................................
操作场景:在项目根目录执行命令,项目目录结构包含目标模块。
原因分析
这是PowerShell解析命令参数的特性导致的:
- PowerShell会将单短杠参数
-target=module.ec2_test中的=号视为参数分隔符,实际传递给Terraform的是-target和module.ec2_test两个独立参数,而非完整的-target=module.ec2_test。 - Terraform收到拆分后的参数后,会认为
-target的取值为空,因此抛出"Prefix 'module.' must be followed by a module name"的错误。 - 双短杠参数
--target=module.ec2_test在PowerShell中会被完整解析为一个参数传递给Terraform,不会被拆分,因此能正常识别目标模块。
操作正确性判断
你的操作逻辑是正确的——通过-target(或--target)指定单独部署模块是Terraform的合法用法,问题仅出在PowerShell对单短杠参数的解析规则上。后续可以统一使用双短杠的--target形式,或者在PowerShell中给单短杠参数的取值加引号(比如terraform apply -target="module.ec2_test")来避免参数拆分。
内容的提问来源于stack exchange,提问作者Alex Metola
相关产品推荐
相关产品推荐

