英文:
How to split a serverless configuration file?
问题
I'm trying to split my serverless configuration file serverless.yml into multiple files using the ${file(...)} syntax. I have a provider file config/serverless/provider.yml with the following content:
provider:
  name: ...
  ...
And in my serverless.yml, I've used it in the following way:
provider: ${file(config/serverless/provider.yml):provider}
However, when I run serverless deploy, I get the following error:
Cannot resolve serverless.yml: Variables resolution errored with:
  - Cannot resolve variable at "provider": Value not found at "file"
Please help me to understand how to properly include other files in my serverless configuration.
英文:
I'm trying to split my serverless configuration file serverless.yml into multiple files using the ${file(...)} syntax. I have a provider file config/serverless/provider.yml with the following content:
provider:
  name: ...
  ...
And in my serverless.yml I've used it in the following way:
provider: ${file(config/serverless/provider.yml):provider}
However, when I run serverless deploy, I get the following error:
Cannot resolve serverless.yml: Variables resolution errored with:
  - Cannot resolve variable at "provider": Value not found at "file"
Please help me to understand how to properly include other files in my serverless configuration.
NOTE: I've also tried with this config without success
provider.yml
name: ...
...
serverless.yml
...
resources:
  - ${file(config/serverless/provider.yml)}
答案1
得分: 2
无法解析serverless.yml文件:变量解析出错,具体错误如下:
- 在“provider”处无法解析变量:在“file”处找不到值
 
请仔细检查文件路径。
确保${file(<此处的路径>):provider}中的路径是正确的。
以下是有效的示例:
- 文件:
serverless.yml 
service: serverless-framework-include-files
frameworkVersion: "3"
provider: ${file(config/provider.yml):provider}
functions:
  function1:
    handler: index.handler
- 文件:
config/provider.yml 
provider:
  name: aws
  runtime: nodejs18.x
或者,您可以从${file(...):provider}中移除:provider:
以下是有效的示例:
- 文件:
serverless2.yml 
service: serverless-framework-include-files
frameworkVersion: "3"
provider: ${file(config/provider2.yml)}
functions:
  function1:
    handler: index.handler
- 文件:
config/provider2.yml 
name: aws
runtime: nodejs18.x
对于resources:,同样适用。
以下是有效的示例:
- 文件:
serverless.yml 
resources:
 - ${file(resources/s3-bucket.yml)}
 - ${file(resources/dynamodb-table.yml)}
- 文件:
resources/s3-bucket.yml 
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: my-bucket
      AccessControl: PublicRead
      WebsiteConfiguration:
        IndexDocument: index.html
        ErrorDocument: error.html
或者,您可以这样做:
- 文件:
serverless2.yml 
resources:
  Resources:
    MyBucket: ${file(resources/s3-bucket2.yml)}
    MyTable: ${file(resources/dynamodb-table2.yml)}
- 文件:
resources/dynamodb-table2.yml 
Type: AWS::DynamoDB::Table
Properties:
  TableName: ${self:service}
  AttributeDefinitions:
    - AttributeName: id
      AttributeType: S
  KeySchema:
    - AttributeName: id
      KeyType: HASH
  ProvisionedThroughput:
    ReadCapacityUnits: 1
    WriteCapacityUnits: 1
您可以在GitHub上查看一个可用的示例代码:
英文:
Cannot resolve serverless.yml: Variables resolution errored with:
  - Cannot resolve variable at "provider": Value not found at "file"
The error is not finding a value at "file" double check the file path.
Make sure the path you are using in ${file(<this-path-here>):provider}
It is pointing to the correct file.
The following works:
- File: 
serverless.yml 
service: serverless-framework-include-files
frameworkVersion: "3"
provider: ${file(config/provider.yml):provider}
functions:
  function1:
    handler: index.handler
- File: 
config/provider.yml 
provider:
  name: aws
  runtime: nodejs18.x
Alternatively, you can remove the :provider from the ${file(...):provider}:
The following works:
- File: 
serverless2.yml 
service: serverless-framework-include-files
frameworkVersion: "3"
provider: ${file(config/provider2.yml)}
functions:
  function1:
    handler: index.handler
- File: 
config/provider2.yml 
name: aws
runtime: nodejs18.x
For resources:, the same applies.
This works:
- File: 
serverless.yml 
resources:
 - ${file(resources/s3-bucket.yml)}
 - ${file(resources/dynamodb-table.yml)}
- File: 
resources/s3-bucket.yml 
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: my-bucket
      AccessControl: PublicRead
      WebsiteConfiguration:
        IndexDocument: index.html
        ErrorDocument: error.html
Alternatively, you can do:
- File 
serverless2.yml 
resources:
  Resources:
    MyBucket: ${file(resources/s3-bucket2.yml)}
    MyTable: ${file(resources/dynamodb-table2.yml)}
- File 
resources/dynamodb-table2.yml 
Type: AWS::DynamoDB::Table
Properties:
  TableName: ${self:service}
  AttributeDefinitions:
    - AttributeName: id
      AttributeType: S
  KeySchema:
    - AttributeName: id
      KeyType: HASH
  ProvisionedThroughput:
    ReadCapacityUnits: 1
    WriteCapacityUnits: 1
You can check the GitHub code for a working example:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论