将 Infrastructure Composer 与亚马逊关系数据库服务 (Amazon RDS) 配合使用 - AWS 基础设施编辑器

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

将 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 数据库(外部)增强型组件卡。

要使用此卡片,请将其拖到基础设施编排器画布上,对其进行配置,然后将其连接到其他资源。

您可以将您的应用程序连接到外部 Amazon RDS DB 通过 Lambda 函数进行集群或实例。

要求

要使用此功能,您必须满足以下要求:

  1. 您的外部 Amazon RDS DB 必须使用集群、实例或代理 AWS Secrets Manager 来管理用户密码。要了解更多信息,请参阅使用 Amazon RDS 管理密码和 AWS Secrets Manager Amazon RDS 用户指南

  2. 您在基础架构编排器中的应用程序必须是新项目,或者必须是最初在基础设施编排器中创建的。

过程

步骤 1:配置外部 RDS 数据库卡

从 “资源” 选项板中,将 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 数据库(外部)卡的右侧端口。

连接到 RDS 数据库(外部)增强组件卡的 Lambda 函数卡。

基础架构编排器将配置您的模板以促进此连接。

基础架构编排器为创建连接所做的工作

完成上面列出的步骤后,基础设施编排器会执行特定操作将您的 Lambda 函数连接到您的数据库。

指定外部 Amazon RDS 时 DB 集群、实例或代理

当您将 RDS 数据库(外部)卡片拖到画布上时,基础设施编排器会根据需要更新模板的MetadataParameters部分。以下是示例:

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 集群、实例或代理,并在整个模板中指定它们。

MetadataParameters部分中的字符串值使用您在 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 集群、实例或代理。