Создание template.yml для AWS SAM развертываний из нескольких параметризованных шаблонов (в настоящее время пытается использовать ytt) - PullRequest
0 голосов
/ 08 марта 2020

Я нашел ytt, который является инструментом для шаблона YAML и, похоже, интенсивно используется в пространстве k8s, в котором есть гобы для конфигурации YAML.

Проблема, с которой я столкнулся, заключается в том, что я хотел бы:

a) организовать определение развертывания SAM в несколько файлов; и

b) параметризовать мой AWS SAM template.yml (описание того, как развертывать безсерверные приложения в AWS через CloudFormation) извне, без использования sed.

Is есть ли способ сохранить директивы с префиксом !, такие как !Ref, !Sub, !Join, et c в выходном YAML через ytt? Я попытался использовать backsla sh безрезультатно.

У меня есть подкаталог с именем etc/, в котором есть этот файл:

#@ 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 s удалены с выхода. Как оставить эти директивы в выводе при использовании ytt. Я рассмотрел примеры, но не смог найти сценарий, который я описываю, иллюстрированный.

Я использую команду:

ytt -f ./etc --data-value-yaml deploy_env=${DEPLOY_ENV:-dev} > dist/template.yml

Это позволяет мне переопределить параметр DeployEnv в SAM template.yml, но мне нужно иметь возможность сохранять ссылки с директивами !Ref, чтобы получить все характеристики, которые мне нужны от этого подхода.

Мои вопросы:

  1. Как я могу получить ytt для сохранения директив, таких как !Ref, !Sub, !Join, et c в выходном файле template.yml?
  2. Как другие люди внедряют не - тривиальные безсерверные приложения в AWS генерируют свои template.yml, чтобы они могли организовать ресурсы, глобальные переменные, параметры и т. д. c в отдельные файлы и получить уровень параметризации самого шаблона?

FWIW Я уже прочитал предложенные вопросы и ответы, но это не решает мою проблему: как включить несколько файлов ресурсов в SAM template.yml

...