本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Infrastructure Composer 与亚马逊关系数据库服务 (Amazon RDS) 配合使用
AWS 基础设施编辑器 具有与亚马逊关系数据库服务(Amazon RDS)的集成。使用 Infra structure Composer 中的 RDS 数据库(外部)增强型组件卡,您可以将应用程序连接到 Amazon RDS DB 在另一个 AWS CloudFormation 或 AWS Serverless Application Model (AWS SAM) 模板上定义的集群、实例和代理。
RDS 数据库(外部)增强型组件卡片表示在其他模板上定义的 Amazon RDS 资源。这包括:
Amazon RDS DB 在其他模板上定义的集群或实例
Amazon RDS DB proxy
RDS 数据库(外部)增强型组件卡可从资源选项板中获得。

要使用此卡片,请将其拖到基础设施编排器画布上,对其进行配置,然后将其连接到其他资源。
您可以将您的应用程序连接到外部 Amazon RDS DB 通过 Lambda 函数进行集群或实例。
要求
要使用此功能,您必须满足以下要求:
-
您的外部 Amazon RDS DB 必须使用集群、实例或代理 AWS Secrets Manager 来管理用户密码。要了解更多信息,请参阅使用 Amazon RDS 管理密码和 AWS Secrets Manager Amazon RDS 用户指南。
-
您在基础架构编排器中的应用程序必须是新项目,或者必须是最初在基础设施编排器中创建的。
过程
步骤 1:配置外部 RDS 数据库卡
从 “资源” 选项板中,将 RDS 数据库(外部)增强型组件卡片拖到画布上。
选择卡片并选择 “详细信息”,或者双击卡片以打开 “资源属性” 面板。卡片的资源属性面板将出现:

您可以在此处配置以下内容:
-
逻辑 ID — 您的外部 Amazon RDS 的唯一名称 DB 集群、实例或代理。此 ID 不必与您的外部 Amazon RDS 的逻辑 ID 值相匹配 DB 资源。
-
数据库密钥-与您的 Amazon RDS 关联的 AWS Secrets Manager 密钥的标识符 DB 集群、实例或代理。此字段接受以下值:
-
静态值-数据库密钥的唯一标识符,例如机密 ARN。以下是示例:
arn:aws:secretsmanager:us-west-2:123456789012:secret:my-path/my-secret-name-1a2b3c
有关更多信息,请参阅《AWS Secrets Manager 开发人员指南》中的 AWS Secrets Manager 概念。 -
输出值-将 Secrets Manager 密钥部署到时 AWS CloudFormation,将创建一个输出值。您可以使用
Fn::ImportValue
内部函数在此处指定输出值。例如,!ImportValue MySecret
。 -
来自 SSM 参数存储区的值 — 您可以将您的密钥存储在 SSM 参数存储库中,并使用动态引用指定其值。例如,
{{resolve:ssm:MySecret}}
。有关更多信息,请参阅《AWS CloudFormation 用户指南》中的 SSM 参数。
-
-
数据库主机名-可用于连接您的 Amazon RDS 的主机名 DB 集群、实例或代理。此值是在定义您的 Amazon RDS 资源的外部模板中指定的。接受以下值:
-
静态值-数据库主机名的唯一标识符,例如端点地址。以下是示例:
mystack-mydb-1apw1j4phylrk.cg034hpkmmjt.us-east-2.rds.amazonaws.com
-
输出值-已部署的 Amazon RDS 的输出值 DB 集群、实例或代理。您可以使用
Fn::ImportValue
内部函数指定输出值。例如,!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 函数卡
从 “资源” 面板中,将 Lambda 函数增强型组件卡片拖到画布上。
将 Lambda 函数卡的左侧端口连接到 RDS 数据库(外部)卡的右侧端口。

基础架构编排器将配置您的模板以促进此连接。
基础架构编排器为创建连接所做的工作
完成上面列出的步骤后,基础设施编排器会执行特定操作将您的 Lambda 函数连接到您的数据库。
指定外部 Amazon RDS 时 DB 集群、实例或代理
当您将 RDS 数据库(外部)卡片拖到画布上时,基础设施编排器会根据需要更新模板的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
元数据是一个 AWS CloudFormation 模板部分,用于存储有关您的模板的详细信息。基础架构编排器特有的元数据存储在AWS::Composer::ExternalResources
元数据密钥下。在这里,基础设施编排器存储您为 Amazon RDS 指定的值 DB 集群、实例或代理。
AWS CloudFormation 模板的 “参数” 部分用于存储自定义值,这些值可以在部署时插入到整个模板中。根据您提供的值类型,Infrastructure Composer 可能会在此处存储您的 Amazon RDS 的值 DB 集群、实例或代理,并在整个模板中指定它们。
Metadata
和Parameters
部分中的字符串值使用您在 RDS 数据库(外部)卡上指定的逻辑 ID 值。如果更新逻辑 ID,则字符串值将发生变化。
将 Lambda 函数连接到您的数据库时
当您将 Lambda 函数卡连接到 RDS 数据库(外部)卡时,基础设施编排器会配置环境变量和 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
环境变量是您的函数可以在运行时使用的变量。要了解更多信息,请参阅AWS Lambda 开发人员指南中的使用 Lambda 环境变量。
策略为您的函数提供权限。在这里,Infrastructure Composer 创建了一个策略,允许您的函数对 Secrets Manager 进行读取访问以获取您访问 Amazon RDS 的密码 DB 集群、实例或代理。