如何将 graphql 架构文件包含到 AWS Cloudformation 模板中?

How to include a graphql schema file into an AWS Cloudformation template?

我正在为 AppSync 创建一个简单的 AWS Cloudformation 模板文件 API。我想在单独的文件中创建 GraphQL 模式并从堆栈模板中引用它,但一直无法这样做。

堆栈模板在文件 template.yaml 中。以下代码段定义了 GraphQL 架构:

  GraphQLSchema:
    Type: AWS::AppSync::GraphQLSchema
    Properties: 
      ApiId: !GetAtt AppSyncAPI.ApiId
      DefinitionS3Location: schema.graphql

GraphQL 模式位于同一目录中,该目录在名为 schema.graphql 的单独文件中调用。

schema {}

使用 aws-cli 创建堆栈时,创建 GraphQLSchema 时 Cloudformation 事件日志中出现以下错误消息:

"S3 location not valid for DefinitionS3Location"

如何为架构引用本地文件并让 aws-cli 自动将其捆绑在一起?

这不可能。只有两个选项:

  1. 创建一个脚本以将您的 GraphQL 模式自动上传到 S3 并在 DefinitionS3Location

  2. 处引用
  3. 直接在您的 CloudFormation 模板中创建您的 GraphQL 模式:

AppSyncGraphQLSchema:
    Type: AWS::AppSync::GraphQLSchema
    DependsOn: AppSyncGraphQLApi
    Properties:
      ApiId: !GetAtt AppSyncGraphQLApi.ApiId
      Definition: |
        ...
        schema {
          query: Query
          mutation: Mutation
        }
        ...

aws cloudformation create-stack 不适用于本地引用的架构。

首先,用aws cloudformation package which uploads the schema to the designated S3 bucket and replaces the local reference with the S3 bucket reference in the generated package. Then that package can be deployed using aws cloudformation deploy打包文件。