

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

# 使用 AWS SAM 連接器管理資源許可
<a name="managing-permissions-connectors"></a>

連接器是一種 AWS Serverless Application Model (AWS SAM) 抽象資源類型，識別為 `AWS::Serverless::Connector`，可在無伺服器應用程式資源之間提供簡單且範圍廣泛的許可。

## AWS SAM 連接器的優點
<a name="connector-benefits"></a>

透過在資源之間自動編寫適當的存取政策，連接器可讓您撰寫無伺服器應用程式並專注於應用程式架構，而不需要 AWS 授權功能、政策語言和服務特定安全設定的專業知識。因此，連接器對於可能剛接觸無伺服器開發的開發人員，或想要提高其開發速度的經驗豐富的開發人員來說，是很大的好處。

## 使用 AWS SAM 連接器
<a name="what-are-connectors"></a>

在**來源**`Connectors`資源中內嵌資源，以使用資源屬性。然後，定義**目的地**資源，並描述資料或事件應如何在這些資源之間流動。 AWS SAM 然後， 編寫必要的存取政策，以促進必要的互動。

以下概述如何寫入此資源屬性：

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  <source-resource-logical-id>:
    Type: <resource-type>
    ...
    Connectors:
      <connector-name>:
        Properties:
          Destination:
            <properties-that-identify-destination-resource>
          Permissions:
            <permission-types-to-provision>
  ...
```

## 連接器的運作方式
<a name="connectors-work"></a>

**注意**  
本節說明連接器如何在幕後佈建必要的資源。使用連接器時，會自動發生這種情況。

首先，內嵌`Connectors`資源屬性會轉換為 `AWS::Serverless::Connector` 資源類型。其邏輯 ID 會自動建立為 *<source-resource-logical-id><embedded-connector-logical-id>*。

例如，以下是內嵌連接器：

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  MyFunction:
    Type: AWS::Lambda::Function
    Connectors:
      MyConn:
        Properties:
          Destination:
            Id: MyTable
          Permissions:
            - Read
            - Write
  MyTable:
    Type: AWS::DynamoDB::Table
```

這將產生下列`AWS::Serverless::Connector`資源：

```
Transform: AWS::Serverless-2016-10-31
Resources:
  ...
  MyFunctionMyConn:
    Type: AWS::Serverless::Connector
    Properties:
      Source:
        Id: MyFunction
      Destination:
        Id: MyTable
      Permissions:
        - Read
        - Write
```

**注意**  
您也可以使用此語法在 AWS SAM 範本中定義連接器。當您的來源資源在與連接器不同的範本上定義時，建議使用此選項。

接下來，會自動編寫此連線的必要存取政策。如需連接器產生之資源的詳細資訊，請參閱 [CloudFormation 當您指定 時產生的資源 AWS::Serverless::Connector](sam-specification-generated-resources-connector.md)。

## 連接器範例
<a name="what-are-connectors-example"></a>

下列範例示範如何使用連接器將 AWS Lambda 函數中的資料寫入 Amazon DynamoDB 資料表。

![\[Lambda 函數使用 AWS SAM 連接器將資料寫入 DynamoDB 資料表。\]](http://docs.aws.amazon.com/zh_tw/serverless-application-model/latest/developerguide/images/managing-connectors-example.png)


```
Transform: AWS::Serverless-2016-10-31
Resources:
  MyTable:
    Type: AWS::Serverless::SimpleTable
  MyFunction:
    Type: AWS::Serverless::Function
    Connectors:
      MyConn:
        Properties:
          Destination:
            Id: MyTable
          Permissions:
            - Write
    Properties:
      Runtime: nodejs16.x
      Handler: index.handler
      InlineCode: |
        const AWS = require("aws-sdk");
        const docClient = new AWS.DynamoDB.DocumentClient();
        exports.handler = async (event, context) => {
          await docClient.put({
            TableName: process.env.TABLE_NAME,
            Item: {
              id: context.awsRequestId,
              event: JSON.stringify(event) 
            }
          }).promise();
        }
      Environment:
        Variables:
          TABLE_NAME: !Ref MyTable
```

`Connectors` 資源屬性內嵌在 Lambda 函數來源資源中。DynamoDB 資料表是使用 `Id` 屬性定義為目的地資源。連接器將在這兩個資源之間佈建`Write`許可。

當您將 AWS SAM 範本部署到 時 CloudFormation， AWS SAM 會自動編寫此連線運作所需的必要存取政策。

## 來源和目的地資源之間的支援連線
<a name="supported-connector-resources"></a>

連接器支援來源和目的地資源連線的選取組合之間的 `Read`和`Write`資料和事件許可類型。例如，連接器支援`AWS::ApiGateway::RestApi`來源資源與`AWS::Lambda::Function`目的地資源之間的`Write`連線。

您可以使用支援的屬性組合來定義來源和目的地資源。屬性需求將取決於您正在進行的連線，以及定義資源的位置。

**注意**  
連接器可以在支援的無伺服器和非無伺服器資源類型之間佈建許可。

如需支援的資源連線及其屬性需求的清單，請參閱 [連接器支援的來源和目的地資源類型](reference-sam-connector.md#supported-connector-resource-types)。

# 在 中定義讀取和寫入許可 AWS SAM
<a name="connector-usage-define"></a>

在 `Read`和 `Write` 中 AWS SAM，許可可以在單一連接器中佈建：

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  MyFunction:
    Type: AWS::Lambda::Function
    Connectors:
      MyTableConn:
        Properties:
          Destination:
            Id: MyTable
          Permissions:
            - Read
            - Write
  MyTable:
    Type: AWS::DynamoDB::Table
```

如需使用連接器的詳細資訊，請參閱 [AWS SAM 連接器參考](reference-sam-connector.md)。

# 在 中使用其他支援的屬性來定義資源 AWS SAM
<a name="connector-usage-other-properties"></a>

對於來源和目的地資源，當在相同範本中定義時，請使用 `Id` 屬性。或者，`Qualifier`可以新增 來縮小已定義資源的範圍。當資源不在相同的範本內時，請使用支援的屬性組合。
+ 如需來源和目的地資源支援的屬性組合清單，請參閱 [連接器支援的來源和目的地資源類型](reference-sam-connector.md#supported-connector-resource-types)。
+ 如需可與連接器搭配使用的屬性說明，請參閱 [AWS::Serverless::Connector](sam-resource-connector.md)。

當您使用 以外的屬性定義來源資源時`Id`，請使用 `SourceReference` 屬性。

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  <source-resource-logical-id>:
    Type: <resource-type>
    ...
    Connectors:
      <connector-name>:
        Properties:
          SourceReference:
            Qualifier: <optional-qualifier>
            <other-supported-properties>
          Destination:
            <properties-that-identify-destination-resource>
          Permissions:
            <permission-types-to-provision>
```

以下是使用 `Qualifier`縮小 Amazon API Gateway 資源範圍的範例：

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  MyApi:
    Type: AWS::Serverless::Api
    Connectors:
      ApiToLambdaConn:
        Properties:
          SourceReference:
            Qualifier: Prod/GET/foobar
          Destination:
            Id: MyFunction
          Permissions:
            - Write           
  ...
```

以下是範例，使用支援的 `Arn`和 組合`Type`，從另一個範本定義目的地資源：

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Connectors:
      TableConn:
        Properties:
          Destination:
            Type: AWS::DynamoDB::Table
            Arn: !GetAtt MyTable.Arn
  ...
```

如需使用連接器的詳細資訊，請參閱 [AWS SAM 連接器參考](reference-sam-connector.md)。

# 在 中從單一來源建立多個連接器 AWS SAM
<a name="connector-usage-single-source"></a>

在來源資源中，您可以定義多個連接器，每個連接器都有不同的目的地資源。

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Connectors:
      BucketConn:
        Properties:
          Destination:
            Id: amzn-s3-demo-bucket
          Permissions:
            - Read
            - Write
      SQSConn:
        Properties:
          Destination:
            Id: MyQueue
          Permissions:
            - Read
            - Write
      TableConn:
        Properties:
          Destination:
            Id: MyTable
          Permissions:
            - Read
            - Write
      TableConnWithTableArn:
        Properties:
          Destination:
            Type: AWS::DynamoDB::Table
            Arn: !GetAtt MyTable.Arn
          Permissions:
            - Read
            - Write
...
```

如需使用連接器的詳細資訊，請參閱 [AWS SAM 連接器參考](reference-sam-connector.md)。

# 在 中建立多目的地連接器 AWS SAM
<a name="connector-usage-multi-destination"></a>

在來源資源中，您可以定義具有多個目的地資源的單一連接器。以下是連線至 Amazon Simple Storage Service (Amazon S3) 儲存貯體和 DynamoDB 資料表的 Lambda 函數來源資源範例：

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Connectors:
      WriteAccessConn:
        Properties:
          Destination:
            - Id: OutputBucket
            - Id: CredentialTable
          Permissions:
            - Write
  ...
  OutputBucket:
    Type: AWS::S3::Bucket
  CredentialTable:
    Type: AWS::DynamoDB::Table
```

如需使用連接器的詳細資訊，請參閱 [AWS SAM 連接器參考](reference-sam-connector.md)。

# 在 中使用連接器定義資源屬性 AWS SAM
<a name="connector-usage-resource-attributes"></a>

您可以為資源定義資源屬性，以指定其他行為和關係。若要進一步了解資源屬性，請參閱*AWS CloudFormation 《 使用者指南*》中的[資源屬性參考](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-product-attribute-reference.html)。

您可以在與連接器屬性相同的層級上定義資源屬性，以將資源屬性新增至內嵌連接器。在部署時轉換 AWS SAM 範本時，屬性會傳遞至產生的資源。

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Connectors:
      MyConn:
        DeletionPolicy: Retain
        DependsOn: AnotherFunction
        Properties:
          ...
```

如需使用連接器的詳細資訊，請參閱 [AWS SAM 連接器參考](reference-sam-connector.md)。

## 進一步了解
<a name="connector-learn-more"></a>

如需使用 AWS SAM 連接器的詳細資訊，請參閱下列主題：
+ [AWS::Serverless::Connector](sam-resource-connector.md)
+ [在 中定義讀取和寫入許可 AWS SAM](connector-usage-define.md)
+ [在 中使用其他支援的屬性來定義資源 AWS SAM](connector-usage-other-properties.md)
+ [在 中從單一來源建立多個連接器 AWS SAM](connector-usage-single-source.md)
+ [在 中建立多目的地連接器 AWS SAM](connector-usage-multi-destination.md)
+ [在 中定義讀取和寫入許可 AWS SAM](connector-usage-define.md)
+ [在 中使用連接器定義資源屬性 AWS SAM](connector-usage-resource-attributes.md)

## 提供意見回饋
<a name="connector-feedback"></a>

若要提供連接器的意見回饋，請在 *serverless-application-model AWS GitHub儲存庫*[提交新問題](https://github.com/aws/serverless-application-model/issues/new?assignees=&labels=area%2Fconnectors,stage%2Fneeds-triage&template=other.md&title=%28Feature%20Request%29)。