![](/img/trans.png)
[英]How to convert AWS resources to a cloudformation stack or template?
[英]Iterate over array of AWS cloudformation resources in template
從yml(或json)模板在AWS CloudFormation中創建資源時,是否可以對數組進行迭代以使模板保持簡潔和可讀。 例如,我有一個Appsync項目,我必須創建一堆幾乎相同的AWS類型“AWS :: AppSync :: Resolver”解析器。 在我使用的Cloud Formation中使用的YML模板中,1個這樣的資源可能看起來像這樣
Resource:
GraphQlAddPostsResolver:
Type: "AWS::AppSync::Resolver"
DependsOn: GraphQlSchema
Properties:
ApiId:
Fn::GetAtt: [GraphQlApi, ApiId]
TypeName: Mutation #<---
FieldName: addPost #<----
DataSourceName:
Fn::GetAtt: [GraphQlLambdaDataSource, Name]
RequestMappingTemplate: |
{
"version" : "2017-02-28",
"operation": "Invoke",
"payload": {
"field": "addPost", #<---
"context": $util.toJson($context)
}
}
ResponseMappingTemplate: |
$util.toJson($context.result)
我可能有十幾個或更多這些解析器,唯一的區別是我用<----
指示的位置。 有沒有辦法迭代一組值,比如說
- Field: addPost
Type: Mutation
- Field: allPosts
Type: Query
- Field: getPost
Type: Query
## etc...
這在AWS CloudFormation中是不可能的。 您可以使用嵌套堆棧解決問題。 使用AWS :: CloudFormation :: Stack資源。
FirstResolver:
Type: AWS::CloudFormation::Stack
DependsOn: GraphQlSchema
Properties:
TemplateURL: ./app-sync-resolver.yml
Parameters:
ApiId: !GetAtt GraphQlApi.ApiId
DataSourceName: !GetAtt GraphQlLambdaDataSource.Name
Field: addPost
Type: Mutation
SecondResolver:
Type: AWS::CloudFormation::Stack
DependsOn: GraphQlSchema
Properties:
TemplateURL: ./app-sync-resolver.yml
Parameters:
ApiId: !GetAtt GraphQlApi.ApiId
DataSourceName: !GetAtt GraphQlLambdaDataSource.Name
Field: allPosts
Type: Query
app-sync-resolver.yml
看起來像這樣( 未經過測試! )
AWSTemplateFormatVersion: 2010-09-09
Parameters:
ApiId:
Type: String
DataSourceName:
Type: String
Type:
Type: String
Field:
Type: String
Resource:
GraphQLResolver:
Type: AWS::AppSync::Resolver
Properties:
ApiId: !Ref ApiId
TypeName: !Ref Type
FieldName: !Ref Field
DataSourceName: !Ref DataSourceName
RequestMappingTemplate: |
{
"version" : "2017-02-28",
"operation": "Invoke",
"payload": {
"field": "${Field}",
"context": $util.toJson($context)
}
}
ResponseMappingTemplate: |
$util.toJson($context.result)
不,你不能。 Cloudformation是一個很好的工具,但它有其局限性。
你可能想看看Jinja或Troposphere(python)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.