我发现了ytt,它是一种模板YAML的工具,似乎在k8s空间中大量使用,该空间有YAML配置的gobs。
我的问题是,我想:
( a)将我的SAM部署定义组织成多个文件;
( b)将我的AWS template.yml (描述如何通过CloudFormation在AWS中部署无服务器应用程序)从“外部”参数化,而不只是使用sed。
是否可以通过!将!Ref、!Sub、!Join等前缀指令保留在输出YAML中?我试图使用反斜杠,但没有效果。
我有一个名为etc/的子has,其中包含以下文件:
#@ 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
#@data/values
---
deploy_env: dev它产生的成果如下:
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时,如何让这些指令保留在输出中。我回顾了这些例子,但是找不到我描述的场景。
我使用的命令是:
ytt -f ./etc --data-value-yaml deploy_env=${DEPLOY_ENV:-dev} > dist/template.yml这允许我重写SAM template.yml中的template.yml参数,但我需要能够使用!Ref指令保留引用,以便从这种方法中获得我想要的所有特性。
我的问题要么是:
ytt在输出template.yml文件中保留诸如!Ref、!Sub、!Join等指令?我已经读过这个建议的问答,但它并没有解决我的问题:如何在SAM template.yml中包含多个资源文件
发布于 2020-11-10 23:47:49
如何使ytt在输出template.yml文件中保留诸如!Ref、!Sub、!Join等指令?
正如本ytt发行中所提到的,您可以使用更详细的CloudFormation格式,如下所示:{Ref: DeployEnv}。因此,对于上面的示例,如下所示:
#@ 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问题确实有更多的讨论。
https://stackoverflow.com/questions/60591930
复制相似问题