首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从多个参数化模板(目前正在尝试使用ytt)为AWS部署生成template.yml

从多个参数化模板(目前正在尝试使用ytt)为AWS部署生成template.yml
EN

Stack Overflow用户
提问于 2020-03-08 20:48:57
回答 1查看 561关注 0票数 0

我发现了ytt,它是一种模板YAML的工具,似乎在k8s空间中大量使用,该空间有YAML配置的gobs。

我的问题是,我想:

( a)将我的SAM部署定义组织成多个文件;

( b)将我的AWS template.yml (描述如何通过CloudFormation在AWS中部署无服务器应用程序)从“外部”参数化,而不只是使用sed。

是否可以通过!!Ref!Sub!Join等前缀指令保留在输出YAML中?我试图使用反斜杠,但没有效果。

我有一个名为etc/的子has,其中包含以下文件:

代码语言:javascript
复制
#@ load("@ytt:data", "data")
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: My REST API

#! Parameters

Parameters:

  DeployEnv:
    Type: String
    Default: #@ data.values.deploy_env
  UsagePlanType:
    Type: String
    Default: PER_API

#! Conditions

#! Globals

Globals:
  HttpApi:
    Auth:
      ApiKeyRequired: true
      UsagePlan:
        CreateUsagePlan: !Ref UsagePlanType

#! Resources

Resources:


  RestApi:
    Type: AWS::Serverless::HttpApi
    Properties:
      StageName: !Ref DeployEnv


#! Outputs

这是values.yml

代码语言:javascript
复制
#@data/values
---
deploy_env: dev

它产生的成果如下:

代码语言:javascript
复制
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: My REST API
Parameters:
  DeployEnv:
    Type: String
    Default: dev
  UsagePlanType:
    Type: String
    Default: PER_API
Globals:
  HttpApi:
    Auth:
      ApiKeyRequired: true
      UsagePlan:
        CreateUsagePlan: UsagePlanType
Resources:
  RestApi:
    Type: AWS::Serverless::HttpApi
    Properties:
      StageName: DeployEnv

您将注意到从输出中删除了所有的!Ref。在使用ytt时,如何让这些指令保留在输出中。我回顾了这些例子,但是找不到我描述的场景。

我使用的命令是:

代码语言:javascript
复制
ytt -f ./etc --data-value-yaml deploy_env=${DEPLOY_ENV:-dev} > dist/template.yml

这允许我重写SAM template.yml中的template.yml参数,但我需要能够使用!Ref指令保留引用,以便从这种方法中获得我想要的所有特性。

我的问题要么是:

  1. 如何让ytt在输出template.yml文件中保留诸如!Ref!Sub!Join等指令?
  2. 其他人如何将非平凡的无服务器应用程序部署到AWS中,从而生成他们的template.yml,以便他们能够将资源、全局、参数等组织到单独的文件中,并获得模板本身的一个级别的参数化?

我已经读过这个建议的问答,但它并没有解决我的问题:如何在SAM template.yml中包含多个资源文件

EN

回答 1

Stack Overflow用户

发布于 2020-11-10 23:47:49

如何使ytt在输出template.yml文件中保留诸如!Ref、!Sub、!Join等指令?

正如本ytt发行中所提到的,您可以使用更详细的CloudFormation格式,如下所示:{Ref: DeployEnv}。因此,对于上面的示例,如下所示:

代码语言:javascript
复制
#@ load("@ytt:data", "data")
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: My REST API

#! Parameters

Parameters:

  DeployEnv:
    Type: String
    Default: #@ data.values.deploy_env
  UsagePlanType:
    Type: String
    Default: PER_API

#! Conditions

#! Globals

Globals:
  HttpApi:
    Auth:
      ApiKeyRequired: true
      UsagePlan:
        CreateUsagePlan: {Ref: UsagePlanType}

#! Resources

Resources:


  RestApi:
    Type: AWS::Serverless::HttpApi
    Properties:
      StageName: {Ref: DeployEnv}


#! Outputs

其他人如何将非平凡的无服务器应用程序部署到AWS中,从而生成他们的template.yml,以便他们能够将资源、全局、参数等组织到单独的文件中,并获得模板本身的一个级别的参数化?

不太确定如何回答这部分问题,但在使用GitHub时,上面的ytt问题确实有更多的讨论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60591930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档