【问题标题】:SAM Resource Layer - Can it Reference Another Layer?SAM 资源层 - 它可以引用另一个层吗?
【发布时间】:2021-04-28 17:49:46
【问题描述】:

构建 AWS SAM 应用程序。

我写了一个共享层,然后注意到我碰巧引用了另一个层(习惯的力量)。

可能不是最佳实践,但为了节省一些时间...有人知道我是否可以在 Serverless::LayerVersion 构建中引用其他层吗?

本质上是一层within a layer(我们称之为“初始层”哈哈)?

这是我的共享层

Resources:
  sharedLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      ContentUri: shared
      CompatibleRuntimes:
        - python3.8
    Metadata:
      BuildMethod: python3.8

我试过了:

Resources:
  sharedLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      ContentUri: shared
      Layers:
        - arn:aws:lambda:us-east-1:990458801000:layer:PyMySql:1
      CompatibleRuntimes:
        - python3.8
    Metadata:
      BuildMethod: python3.8

但它不喜欢那样。

重要提示:我不想将 PyMySql 层放在我的 Globals 中,因为我不希望它附加到我的 SAM 应用程序中的每个函数。我在 Globals 中放置的任何层似乎都附加到 SAM 构建中的每个函数。

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-sam aws-lambda-layers


    【解决方案1】:

    所以我想出的一个准黑客是如果“共享层”依赖于另一层,如果您首先在同一个 Serverless::Function 中加载dependent layer,您正在调用“共享层”,那么它将工作。

    示例:

    Resources:
      sharedLayer:
        Type: AWS::Serverless::LayerVersion
        Properties:
          ContentUri: shared
          CompatibleRuntimes:
            - python3.8
        Metadata:
          BuildMethod: python3.8
    

    这个共享层依赖于- arn:aws:lambda:us-east-1:990458801000:layer:PyMySql:1

    所以在你的函数中,如果你先调用那个层:

    surfModel:
        Type: AWS::Serverless::Function
        Properties:
          CodeUri: search/surf_model
          Layers:
            - arn:aws:lambda:us-east-1:990458801000:layer:PyMySql:1
            - !Ref sharedLayer
    

    然后!Ref sharedLayer 将正常运行(利用对函数本身的依赖层的引用)。

    不是理想的解决方案,但它可以用于短期修复。

    【讨论】:

      猜你喜欢
      • 2015-11-30
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多