

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在基础设施编辑器的可视化画布上连接卡片
<a name="reference-navigation-gestures-connect"></a>

使用本主题来了解如何在基础架构编排器中连接卡片。本节包括有关连接增强型组件卡和标准组件卡的详细信息。它还提供了一些示例，说明了连接卡的不同方式。

## 连接增强型组件卡
<a name="reference-navigation-gestures-connect-enhanced"></a>

在增强型组件卡上，端口可直观地识别可以连接的位置。
+ 卡片右侧的端口表示该卡有机会调用另一张卡。
+ 卡片左侧的端口表示该卡有机会被另一张卡调用。

通过单击一张卡的右侧端口，然后将其拖动到另一张卡的左侧端口上，将卡片连接在一起。

![\[连接到 Lambda 函数的 API Gateway 卡。\]](http://docs.aws.amazon.com/zh_cn/infrastructure-composer/latest/dg/images/aac_use_con_02.png)


创建连接时，将显示一条消息，告知您连接是否已成功建立。选择消息以查看基础架构编排器更改了哪些内容以配置连接。如果连接失败，则可以选择**模板视图**手动更新基础架构代码以配置连接。
+ 成功后，单击消息以查看 “**更改” 检查器**。在这里，您可以看到基础设施编排器修改了哪些内容以配置您的连接。
+ 失败时，将显示一条消息。您可以选择 “**模板” 视图**并手动更新基础设施代码以配置连接。

![\[从屏幕底部打开 Change Inspector。\]](http://docs.aws.amazon.com/zh_cn/infrastructure-composer/latest/dg/images/aac_use_ci_02.gif)


当您将增强的组件卡连接在一起时，Infrastructure Composer 会自动在您的模板中创建基础架构代码，以便在资源之间配置事件驱动的关系。

## 连接标准组件卡（标准 IaC 资源卡）
<a name="reference-navigation-gestures-connect-standard"></a>

标准 IaC 资源卡不包括用于与其他资源建立连接的端口。在[配置卡片](using-composer-standard-cards.md)期间，您可以在应用程序的模板中指定事件驱动的关系，Infrastructure Composer 将自动检测这些连接，并在卡片之间用虚线将它们可视化。以下是标准组件卡和增强组件卡之间的连接示例：

![\[连接到增强型组件卡的标准组件卡。\]](http://docs.aws.amazon.com/zh_cn/infrastructure-composer/latest/dg/images/aac_use_con_04.png)


以下示例显示了如何将 Lambda 函数与 Amazon API Gateway rest API 连接：

```
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  MyApi:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Name: MyApi

  ApiGatewayMethod:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      HttpMethod: POST  # Specify the HTTP method you want to use (e.g., GET, POST, PUT, DELETE)
      ResourceId: !GetAtt MyApi.RootResourceId
      RestApiId: !Ref MyApi
      AuthorizationType: NONE
      Integration:
        Type: AWS_PROXY
        IntegrationHttpMethod: POST
        Uri: !Sub
          - arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${LambdaFunctionArn}/invocations
          - { LambdaFunctionArn: !GetAtt MyLambdaFunction.Arn }
      MethodResponses:
        - StatusCode: 200

  MyLambdaFunction:
    Type: 'AWS::Lambda::Function'
    Properties:
      Handler: index.handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Runtime: nodejs14.x
      Code:
        S3Bucket: your-bucket-name
        S3Key: your-lambda-zip-file.zip

  LambdaExecutionRole:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: 'sts:AssumeRole'
      Policies:
        - PolicyName: LambdaExecutionPolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - 'logs:CreateLogGroup'
                  - 'logs:CreateLogStream'
                  - 'logs:PutLogEvents'
                Resource: 'arn:aws:logs:*:*:*'
              - Effect: Allow
                Action:
                  - 'lambda:InvokeFunction'
                Resource: !GetAtt MyLambdaFunction.Arn
```

在上面的示例中，下面列出的代码片段`Integration:`指定了连接两张卡片的事件驱动关系。`ApiGatewayMethod:`

# 在基础设施编排器中连接卡片的示例
<a name="using-composer-connecting-examples"></a>

使用本节中的示例来了解如何在基础设施编排器中连接卡片。

## 将商品放入亚马逊简单存储服务 (Amazon S3) 存储桶时调用 AWS Lambda 函数
<a name="using-composer-connecting-examples-example1"></a>

在此示例中，A **mazon S3 存储桶**卡连接到 **Lambda 功能**卡。将项目放入 Amazon S3 存储桶后，将调用该函数。然后，该函数可用于处理该项目或触发应用程序中的其他事件。

![\[从 Amazon S3 存储桶资源的右侧端口到 Lambda 函数资源左侧端口的连接。\]](http://docs.aws.amazon.com/zh_cn/infrastructure-composer/latest/dg/images/aac_use_05.png)


这种交互需要为函数定义一个事件。以下是基础架构编排器规定的内容：

```
Transform: AWS::Serverless-2016-10-31
...
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    ...
  MyBucketBucketPolicy:
    Type: AWS::S3::BucketPolicy
    ...
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      ...
      Events:
        MyBucket:
          Type: S3
          Properties:
            Bucket: !Ref MyBucket
            Events:
              - s3:ObjectCreated:* # Event that triggers invocation of function
              - s3:ObjectRemoved:* # Event that triggers invocation of function
```

## 从 Lambda 函数调用 Amazon S3 存储桶
<a name="using-composer-connecting-examples-example2"></a>

**在此示例中，**Lambda 函数**卡调用 Amazon S3 存储桶卡。**Lambda 函数可用于对 Amazon S3 存储桶中的项目执行 CRUD 操作。

![\[从 Lambda 函数资源的右侧端口到 Amazon S3 存储桶资源的左侧端口的连接。\]](http://docs.aws.amazon.com/zh_cn/infrastructure-composer/latest/dg/images/aac_use_06.png)


此交互需要以下内容，这些内容由基础架构编排器配置：
+ 允许 Lambda 函数与 Amazon S3 存储桶进行交互的 IAM 策略。
+ 影响 Lambda 函数行为的环境变量。

```
Transform: AWS::Serverless-2016-10-31
...
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    ...
  MyBucketBucketPolicy:
    Type: AWS::S3::BucketPolicy
    ...
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      ...
      Environment:
        Variables:
          BUCKET_NAME: !Ref MyBucket
          BUCKET_ARN: !GetAtt MyBucket.Arn
      Policies:
        - S3CrudPolicy:
          BucketName: !Ref MyBucket
```