从 cloudformation 创建 Aurora Serverless 集群?

Posted

技术标签:

【中文标题】从 cloudformation 创建 Aurora Serverless 集群?【英文标题】:Creating an Aurora Serverless Cluster from cloudformation? 【发布时间】:2019-01-23 13:40:17 【问题描述】:

根据 Aurora Serverless 的文档,创建 Aurora Serverless 数据库集群的方法有 3 种:AWS 管理控制台、CLI 和 RDS API。 (https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/aurora-serverless.create.html)

据我了解,有人会在 RDS API 中使用 EngineMode 来创建 Aurora Serverless,但此属性在 AWS::RDS::DBCluster 中尚不可用 (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html)。

是否可以任何建议将不胜感激!

【问题讨论】:

【参考方案1】:

感谢克里斯的更新。例如,这是我的无服务器极光的 cloudFormation 模板。我们不再需要DBInstance

  RDSCluster:
    Type: AWS::RDS::DBCluster
    Properties:
      MasterUsername: 
        Ref: DBUsername
      MasterUserPassword: 
        Ref: DBPassword
      DatabaseName: RANDOMNAME
      Engine: aurora
      EngineMode: serverless
      ScalingConfiguration:
        AutoPause: true
        MaxCapacity: 16
        MinCapacity: 2
        SecondsUntilAutoPause: 300
      DBSubnetGroupName:
        Ref: DBSubnetGroup

RDS(包括 Aurora)所有可用选项的更完整示例: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html

【讨论】:

感谢您的示例,我觉得那里缺少一些东西,例如子网,您使用了 Ref,但没有关于如何配置它的示例。如果是这样的话,你能用一个更彻底的例子来更新它吗?谢谢! 我也在@Vadorequest 的同一条船上,请您在DBSubnetGroup 中更进一步,好吗? 感谢您的提问!我的DBSubnetGroup 与此处的示例基本相同:docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/… 据我所知,从 SAM/Cloudformation 创建子网和 VPC 很复杂。基于大多数人不会在 SAM 中创建它们并且它们很容易跨堆栈重用的事实,我认为大多数人要么只使用默认的,要么使用 GUI 创建一个新的。我在这里找到了我的默认 VPC 的子网 ID:console.aws.amazon.com/vpc/home?region=us-east-1#subnets:【参考方案2】:

现在可以创建一个AWS::RDS::DBCluster 并将EngineMode 设置为serverless。在此处查看更多信息:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-enginemode

【讨论】:

【参考方案3】:

简单的答案 - 不。直到他们在 CFN 中提供它。截至 1-2 天前,EngineModeScalingConfiguration 属性在 RDS API 中尚不可用,因为我的 API 调用引发了此错误。首先,他们将提供 API/cli。一旦成功,创建一个 CFN Custom Resource 以从 lambda 调用 RDS API。可能需要一段时间才能在 CFN 中直接使用。

2018-08-15T16:12:09.648Z f57erb2b-g3a5-11e8-8f64-81912181e535 MultipleValidationErrors:有 2 个验证错误: * UnexpectedParameter:在参数中发现意外的键“EngineMode” * UnexpectedParameter:在参数中发现意外的键“ScalingConfiguration”

而且我知道角色/权限不是问题,因为我可以从同一个集群启动正常的 Aurora 集群。

PS:RDS API 现在适用于无服务器

编辑:在 10 月 18 日的某个时间,EngineMode 添加到 CFN,所以现在这是可能的 -> https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-enginemode

【讨论】:

对于查看此答案的其他人,您可以通过以下链接查看是否已将 EngineMode 添加到 CFM:docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/… 截至 2018 年 8 月,它仍然不可用【参考方案4】:

我发现一篇文章表明 Go SDK 已使用 EngineMode 参数进行了更新,当我查看 AWS SDK 更改日志时,我发现最新版本中有一些 RDS 更新。我必须手动将我的 AWS CLI 更新到最新版本才能让我的 shell 脚本使用该选项。

https://github.com/aws/aws-cli/releases

https://github.com/aws/aws-cli/blob/develop/CHANGELOG.rst

https://github.com/terraform-providers/terraform-provider-aws/issues/5503

不过,CloudFormation 方面没有消息。

【讨论】:

我昨天刚刚试用了 Go SDK 来创建一个无服务器集群,它工作正常。我是 RDS 新手,所以我检查了所有设置是否正确,但从表面上看,它似乎可以工作。【参考方案5】:

对于 Aurora Postgres Serverless,我完整的、可工作的 DBCluster 资源是:

  RDSCluster:
    Type: AWS::RDS::DBCluster
    Properties:
      DBClusterIdentifier: !Ref DBClusterName
      MasterUsername: some-name
      MasterUserPassword: some-password
      DatabaseName: some-db-name
      Engine: aurora-postgresql
      EngineMode: serverless
      EngineVersion: '10' # this currently provisions '10.serverless_14'
      EnableHttpEndpoint: true # for HTTP API endpoint
      ScalingConfiguration:
        AutoPause: true
        MaxCapacity: 2
        MinCapacity: 2 # min 2 currently
        SecondsUntilAutoPause: 900 # 15 min
      DBSubnetGroupName:
        Ref: DBSubnetGroup

【讨论】:

这里如何指定端点本身?我正在尝试进行设置,但无法将您上面的内容与我可以从我的 lambda 调用的可行端点链接起来。 要将 lambda 连接到 Aurora,您可以 1) 按照您的建议使用数据 API 或 2) 用于 lambda,因为我倾向于将大多数服务放在与我的 RDS 相同的 VPC 中,然后仍然可以添加一个SG 到 lambda 允许流量输出(例如,通过端口 5432)和另一个 SG 允许流量进出 RDS(在同一端口,例如 5432),它将像普通 RDS 一样连接。但要回答您的问题,您可以在 AWS RDS 控制台中查看 http 端点,或者将其作为输出添加到您的 SAM template.yaml 的末尾 - 实际上这是一个完整的(AWS 授权)示例:serverlessland.com/patterns/lambda-aurora跨度> 谢谢,你分享了@Leigh 的好资源! 不客气!是的,这是一个很棒的网站,模式/模板和视频都很棒,真的可以加快我的开发速度,我构建的任何微服务总是值得检查一下是否已经有模板

以上是关于从 cloudformation 创建 Aurora Serverless 集群?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 aws cloudformation 模板为特定资源类型创建堆栈

从现有 RDS 数据库实例 (Aurora PostgreSQL) 创建 CloudFormation Yaml

从 CloudFormation 启用 Aurora 数据 API

从 s3 部署包结构问题上传 cloudformation lambda 函数

从 VPC 内的另一个 cloudformation 模板引用 SecurityGroup

如何下载通过CloudFormation创建的IoT证书?