我在大多数基础架构中都使用Terraform,但与此同时,我在使用serverless framework定义了一些Lambda函数。 Serverless在需要使用Terraform创建的资源的某些ARN的情况下使用CloudFormation。
我的想法是在Terraform中创建一个CloudFormation堆栈并导出我需要的所有值,但是它抱怨说如果没有任何资源就无法创建堆栈。我不想在CloudFormation中定义任何资源,仅在输出中定义,所以我虽然也许可以定义一些虚拟资源,但是我找不到任何资源。
是否有解决此问题的方法?如果没有,我也愿意接受其他建议,以获取将参数从Terraform传递到CloudFormation的方法。
答案 0 :(得分:2)
“资源”部分是必需的,但是您可以创建非资源类型的资源。
例如,仅具有非资源的极简主义模板为:
Conditions:
Never:
!Equals [ "A", "B" ]
Resources:
NonResource:
Type: Custom::NonResource
Condition: Never
Outputs:
MyOutput:
Value: some-value
答案 1 :(得分:1)
您可以为此使用AWS::CloudFormation::WaitConditionHandle。示例:
Resources:
NullResource:
Type: AWS::CloudFormation::WaitConditionHandle
答案 2 :(得分:0)
CloudFormation堆栈需要至少制造一个资源(毕竟,CloudFormation的所有目的都是以编程方式部署资源)。
CloudFormation支持parameters,您可以将其传递到堆栈中。
在Terraform中,您可以像下面的示例一样使用这些parameters。
resource "aws_cloudformation_stack" "network" {
name = "networking-stack"
parameters = {
VPCCidr = "10.0.0.0/16"
}
template_body = <<STACK
{
"Parameters" : {
"VPCCidr" : {
"Type" : "String",
"Default" : "10.0.0.0/16",
"Description" : "Enter the CIDR block for the VPC. Default is 10.0.0.0/16."
}
},
"Resources" : {
"myVpc": {
"Type" : "AWS::EC2::VPC",
"Properties" : {
"CidrBlock" : { "Ref" : "VPCCidr" },
"Tags" : [
{"Key": "Name", "Value": "Primary_CF_VPC"}
]
}
}
}
}
STACK
}
在GitHub上有一篇关于如何使用serverless framework with Terraform和一些examples的文章。