Пример кода отсюда
JSON
{
  "Type" : "AWS::CloudFormation::Stack",
  "Properties" : {
      "NotificationARNs" : [ String, ... ],
      "Parameters" : {Key : Value, ...},
      "Tags" : [ Tag, ... ],
      "TemplateURL" : String,
      "TimeoutInMinutes" : Integer
    }
}
YAML
Type: AWS::CloudFormation::Stack
Properties: 
  NotificationARNs: 
    - String
  Parameters: 
    Key : Value
  Tags: 
    - Tag
  TemplateURL: String
  TimeoutInMinutes: Integer
А теперь о тех ключевых отличиях что я знаю:
1) В yaml есть комментарии. В json их, соответственно, нету.
2) Несколько удобнее сокращённая форма записи (правда надо её освоить), когда вместо Fn::Ref можно писать !Ref и читаемость улучшается
3) В yaml есть весьма элегантное написание
UserData:
Fn::Base64: !Sub |
line 1
line 2
AWS::StackName
Читается легко, сразу понятно что описано. Но в json напрямую это не преобразовать, это будет или уродливое "UserData": {"Fn::Base64": {"Fn::Sub": "line1\nline2\nAWS::StackName"}} или надо переписывать через Fn::Join, что читается сильно лучше чем line1\nline2, но всё-равно сильно хуже чем ямл версия. Тем более, уже не получится копипастить куски кода без обработки.
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
"line1\n",
"line2\n",
{ "Ref" : "AWS::StackName" }
]]}}
Тот же Ref теперь надо каждый раз прописывать.
Также бывает такое
--resources-to-import does not support inline YAML.
https://docs.aws.amazon.com/en_us/AWSCloudFormation/latest/UserGuide/resource-import-nested-stacks.html
Также, именно ImportValue не может использовать в yaml с Sub:
You can't use the short form of !ImportValue when it contains a !Sub. The following example is valid for AWS CloudFormation, but not valid for YAML
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html
Комментариев нет:
Отправить комментарий