

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

# 搭配 Amazon Relational Database Service (Amazon RDS) 使用 Infrastructure Composer
<a name="using-composer-services-rds"></a>

AWS Infrastructure Composer 具有與 Amazon Relational Database Service (Amazon RDS) 整合的功能。使用 Infrastructure Composer 中的 **RDS 資料庫 （外部）** 增強型元件卡，您可以將應用程式連線到另一個 CloudFormation 或 AWS Serverless Application Model (AWS SAM) 範本上定義的 Amazon RDS DB叢集、執行個體和代理。

**RDS 資料庫 （外部）** 增強型元件卡代表在另一個範本上定義的 Amazon RDS 資源。其中包含：
+ 在另一個範本上定義的 Amazon RDS DB叢集或執行個體
+ Amazon RDS DB代理

**RDS 資料庫 （外部）** 增強型元件卡可從**資源**面板取得。

![Amazon RDS 資料庫 （外部） 增強型元件卡。](http://docs.aws.amazon.com/zh_tw/infrastructure-composer/latest/dg/images/aac_use_rds_01.png)


若要使用此卡，請將其拖曳到 Infrastructure Composer 畫布上、進行設定，並將其連接到其他資源。

您可以透過 Lambda 函數將應用程式連線至外部 Amazon RDS DB叢集或執行個體。

## 要求
<a name="using-composer-services-rds-requirements"></a>

若要使用此功能，您必須符合下列要求：

1. 您的外部 Amazon RDS DB叢集、執行個體或代理必須使用 AWS Secrets Manager 來管理使用者密碼。若要進一步了解，請參閱《[Amazon RDS 使用者指南》中的使用 Amazon RDS 和 進行密碼管理 AWS Secrets Manager](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html)。 **

1. 您在 Infrastructure Composer 中的應用程式必須是新專案，或最初必須在 Infrastructure Composer 中建立。

## 程序
<a name="using-composer-services-rds-connect"></a>

### 步驟 1：設定外部 RDS 資料庫卡
<a name="using-composer-services-rds-connect-step1"></a>

從**資源**面板中，將 **RDS 資料庫 （外部）** 增強型元件卡拖曳到畫布上。

選取卡片，然後選擇**詳細資訊**，或按兩下卡片以顯示**資源屬性**面板。卡片的資源屬性面板將會出現：

![RDS 資料庫 （外部） 增強元件卡的資源屬性面板。](http://docs.aws.amazon.com/zh_tw/infrastructure-composer/latest/dg/images/aac_use_rds_03.png)


您可以在這裡設定下列項目：
+ **邏輯 ID** – 外部 Amazon RDS DB叢集、執行個體或代理的唯一名稱。此 ID 不必符合您外部 Amazon RDS DB 資源的邏輯 ID 值。
+ **資料庫秘密** – 與您的 Amazon RDS DB叢集、執行個體或代理相關聯的 AWS Secrets Manager 秘密識別符。此欄位接受下列值：
  + **靜態值** – 資料庫秘密的唯一識別符，例如秘密 ARN。以下是範例：`arn:aws:secretsmanager:us-west-2:123456789012:secret:my-path/my-secret-name-1a2b3c`如需詳細資訊，請參閱《AWS Secrets Manager 使用者指南》**中的 [AWS Secrets Manager 概念](https://docs.aws.amazon.com/secretsmanager/latest/userguide/getting-started.html)。
  + **輸出值** – 部署 Secrets Manager 秘密時 AWS CloudFormation，會建立輸出值。您可以使用`[Fn::ImportValue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html)`內部 函數在此處指定輸出值。例如 `!ImportValue MySecret`。
  + **來自 SSM 參數存放區的值** – 您可以將秘密存放在 SSM 參數存放區，並使用動態參考指定其值。例如 `{{resolve:ssm:MySecret}}`。如需詳細資訊，請參閱*AWS CloudFormation 《 使用者指南*》中的 [SSM 參數](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html#dynamic-references-ssm)。
+ **資料庫主機名稱** – 可用來連線至 Amazon RDS DB叢集、執行個體或代理的主機名稱。此值是在定義 Amazon RDS 資源的外部範本中指定。接受下列值：
  + **靜態值** – 資料庫主機名稱的唯一識別符，例如端點地址。以下是範例：`mystack-mydb-1apw1j4phylrk.cg034hpkmmjt.us-east-2.rds.amazonaws.com`
  + **輸出值** – 部署的 Amazon RDS DB叢集、執行個體或代理的輸出值。您可以使用`[Fn::ImportValue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html)`內部 函數指定輸出值。例如 `!ImportValue myStack-myDatabase-abcd1234`。
  + **來自 SSM 參數存放區的值** – 您可以將資料庫主機名稱存放在 SSM 參數存放區中，並使用動態參考指定其值。例如 `{{resolve:ssm:MyDatabase}}`。
+ **資料庫連接埠** – 可用來連線至 Amazon RDS DB叢集、執行個體或代理的連接埠號碼。此值是在定義 Amazon RDS 資源的外部範本中指定。接受下列值：
  + **靜態值** – 資料庫連接埠。例如 `3306`。
  + **輸出值** – 部署的 Amazon RDS DB叢集、執行個體或代理的輸出值。例如 `!ImportValue myStack-MyRDSInstancePort`。
  + **來自 SSM 參數存放區的值** – 您可以將資料庫主機名稱存放在 SSM 參數存放區，並使用動態參考指定其值。例如 `{{resolve:ssm:MyRDSInstancePort}}`。

**注意**  
這裡只能設定邏輯 ID 值。您可以視需要在部署時間設定其他屬性。

### 步驟 2：連接 Lambda 函數卡
<a name="using-composer-services-rds-connect-step2"></a>

從**資源**面板中，將 **Lambda 函數**增強型元件卡拖曳到畫布上。

將 **Lambda 函數**卡的左側連接埠連接到 **RDS 資料庫 （外部）** 卡的右側連接埠。

![連接至 RDS 資料庫 （外部） 增強型元件卡的 Lambda 函數卡。](http://docs.aws.amazon.com/zh_tw/infrastructure-composer/latest/dg/images/aac_use_rds_02.png)


Infrastructure Composer 將佈建您的範本，以促進此連線。

## Infrastructure Composer 如何建立您的連線
<a name="using-composer-services-rds-ref-how"></a>

當您完成上述程序時， Infrastructure Composer 會執行特定動作，將 Lambda 函數連線至資料庫。

### 指定外部 Amazon RDS DB叢集、執行個體或代理時
<a name="using-composer-services-rds-ref-how-specify"></a>

當您將 **RDS 資料庫 （外部）** 卡拖曳至畫布時， Infrastructure Composer 會視需要更新範本的 `Metadata`和 `Parameters`區段。以下是範例：

```
Metadata:
  AWS::Composer::ExternalResources:
    ExternalRDS:
      Type: externalRDS
      Settings:
        Port: !Ref ExternalRDSPort
        Hostname: !Ref ExternalRDSHostname
        SecretArn: !Ref ExternalRDSSecretArn
Parameters:
  ExternalRDSPort:
    Type: Number
  ExternalRDSHostname:
    Type: String
  ExternalRDSSecretArn:
    Type: String
```

[中繼資料](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/metadata-section-structure.html)是 CloudFormation 範本區段，用於存放範本的詳細資訊。Infrastructure Composer 特有的中繼資料存放在`AWS::Composer::ExternalResources`中繼資料金鑰下。在這裡， Infrastructure Composer 會儲存您為 Amazon RDS DB叢集、執行個體或代理指定的值。

 CloudFormation 範本的[參數](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html)區段用於存放可在部署時插入整個範本的自訂值。根據您提供的值類型， Infrastructure Composer 可能會將 Amazon RDS DB叢集、執行個體或代理的值存放在此處，並在範本中指定這些值。

`Metadata` 和 `Parameters`區段中的字串值使用您在 **RDS 資料庫 （外部）** 卡上指定的邏輯 ID 值。如果您更新邏輯 ID，字串值將會變更。

### 將 Lambda 函數連線至資料庫時
<a name="using-composer-services-rds-ref-how-connecting"></a>

當您將 **Lambda 函數**卡連接至 **RDS 資料庫 （外部）** 卡時， Infrastructure Composer 會佈建環境變數和 AWS Identity and Access Management (IAM) 政策。以下是範例：

```
Resources:
  Function:
    Type: AWS::Serverless::Function
    Properties:
      ...
      Environment:
        Variables:
          EXTERNALRDS_PORT: !Ref ExternalRDSPort
          EXTERNALRDS_HOSTNAME: !Ref ExternalRDSHostname
          EXTERNALRDS_SECRETARN: !Ref ExternalRDSSecretArn
      Policies:
        - AWSSecretsManagerGetSecretValuePolicy:
            SecretArn: !Ref ExternalRDSSecretArn
```

[環境](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html#sam-function-environment)變數是可在執行時間由函數使用的變數。若要進一步了解，請參閱《 *AWS Lambda 開發人員指南*》中的[使用 Lambda 環境變數](https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html)。

[政策](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html#sam-function-policies)佈建函數的許可。在這裡， Infrastructure Composer 會建立政策，以允許從函數對 Secrets Manager 進行讀取存取，以取得存取 Amazon RDS DB叢集、執行個體或代理的密碼。