Пример кода отсюда
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
Комментариев нет:
Отправить комментарий