

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 共用 Lambda 層
<a name="sharing-lambda-layers"></a>

如果您已在 Lambda 層中實作功能，您可能想要共用您的層，而不託管其全域執行個體。以這種方式共用圖層可讓其他人將您圖層的執行個體部署到自己的帳戶。這可以防止用戶端應用程式依賴於您圖層的全域執行個體。 AWS Serverless Application Repository 可讓您以這種方式輕鬆共用 Lambda 層。

如需 Lambda 層的詳細資訊，請參閱《 *AWS Lambda 開發人員指南*》中的[AWS Lambda 層](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html)。

## 運作方式
<a name="sharing-lambda-layers-how-it-works"></a>

以下是使用 AWS Serverless Application Repository共用圖層的步驟。這可讓您在使用者帳戶中建立 layer 的複本 AWS 。

1. 使用包含 layer 作為資源的 AWS SAM 範本來定義無伺服器應用程式，也就是 [https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-layerversion.html](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-layerversion.html)或 [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-layerversion.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-layerversion.html) 資源。

1. 將您的應用程式發佈到 AWS Serverless Application Repository，並共用它 （公開或私有）。

1. 客戶部署您的應用程式，這會在自己的 AWS 帳戶中建立您的 layer 複本。客戶現在可以在其用戶端應用程式中，在其 AWS 帳戶中參考 layer 的 Amazon Resource Name (ARN)。

## 範例
<a name="sharing-layers-example"></a>

以下是應用程式的範例 AWS SAM 範本，其中包含您要共用的 Lambda 層：

```
Resources:
  SharedLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      LayerName: shared-layer
      ContentUri: source/layer-code/
      CompatibleRuntimes:
        - python3.7
Outputs:
  LayerArn:
    Value: !Ref SharedLayer
```

當客戶從 部署您的應用程式時 AWS Serverless Application Repository，會在其 AWS 帳戶中建立 layer。圖層的 ARN 看起來如下所示：

`arn:aws:lambda:us-east-1:012345678901:layer:shared-layer:1`

客戶現在可以在他們自己的用戶端應用程式中參考此 ARN，如以下範例所示：

```
Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: python3.7
      CodeUrl: source/app-code/
      Layers:
        - arn:aws:lambda:us-east-1:012345678901:layer:shared-layer:1
```