簡體   English   中英

創建沒有資源的 CloudFormation 堆棧

[英]Create CloudFormation stack without resources

我的大部分基礎架構都使用 Terraform,但同時我使用無服務器框架來定義一些 Lambda 功能。 Serverless 在后台使用 CloudFormation,我需要訪問一些 ARN 以獲取由 Terraform 創建的資源。

我的想法是在 Terraform 中創建一個 CloudFormation 堆棧並導出我需要的所有值,但它抱怨它無法在沒有任何資源的情況下創建堆棧。 我不想在 CloudFormation 中定義任何資源,只定義輸出,所以我雖然可能有一種方法可以定義一些虛擬資源,但我找不到任何資源。

有沒有辦法解決這個問題? 如果沒有,我也願意接受其他有關將參數從 Terraform 傳遞到 CloudFormation 的建議。

您可以為此使用AWS::CloudFormation::WaitConditionHandle 例子:

Resources:
  NullResource:
    Type: AWS::CloudFormation::WaitConditionHandle

資源部分是必需的,但您可以創建非資源類型的資源。

例如,只有非資源的極簡模板將是:

Conditions:

  Never:
    !Equals [ "A", "B" ]

Resources:

  NonResource:
    Type: Custom::NonResource
    Condition: Never

Outputs:
  
  MyOutput:
    Value: some-value
  

CloudFormation 堆棧需要至少制作一種資源(畢竟 CloudFormation 的目的是以編程方式部署資源)。

CloudFormation 支持您可以傳遞到堆棧中的參數

在 Terraform 中,您可以使用這些參數,如下例所示。

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
}

有一篇關於將無服務器框架與 Terraform 一起使用的帖子,以及有關如何設置它的 GitHub 的一些示例

您可以使用 Terraform 創建 AWS SSM 參數並在無服務器框架中引用它們。 那將很容易完成這項工作。

https://www.serverless.com/blog/definitive-guide-terraform-serverless/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM