4. 管理云环境

使用管理控制台手动管理环境无法扩展,并且随着 基础设施的复杂性。Amazon Web Services 提供 CloudFormation 服务,允许定义堆栈配置模板并使用这些服务引导整个基础设施。 为了允许多个堆栈并行,堆栈中的每个资源都会收到一个唯一的物理名称,其中包含 一些任意生成的名称。为了以统一的方式与堆栈资源交互,Spring Cloud AWS 允许 开发人员使用逻辑名称而不是随机物理名称。spring-doc.cadn.net.cn

下图显示了典型的堆栈配置。spring-doc.cadn.net.cn

CloudFormation 概述

模板文件描述所有堆栈资源及其逻辑名称CloudFormation 服务解析堆栈 模板文件,并使用其物理名称创建所有资源。应用程序可以使用所有堆栈配置的资源 替换为模板中定义的逻辑名称。Spring Cloud AWS 将所有逻辑名称解析为应用程序开发人员各自的物理名称spring-doc.cadn.net.cn

4.1. 自动 CloudFormation 配置

如果应用程序在堆栈内运行(因为底层 EC2 实例已在堆栈中引导),则 Spring Cloud AWS 将自动检测堆栈并解析堆栈中的所有资源。应用程序开发人员 可以使用堆栈模板中的所有逻辑名称与服务交互。在下面的示例中,数据库 使用 CloudFormation 模板配置资源,为数据库实例定义逻辑名称。spring-doc.cadn.net.cn

"applicationDatabase": {
  "Type": "AWS::RDS::DBInstance",
  "Properties": {
    "AllocatedStorage": "5",
    "DBInstanceClass": "db.t1.micro",
    "DBName": "test"
    ...
  ]
 }
}

然后创建数据源,并将接收一个物理名称(例如 ir142c39k6o5irj)作为数据库服务名称。应用 开发人员仍然可以使用逻辑名称(在本例中applicationDatabase) 与数据库交互。示例 下面显示了由元素定义的堆栈配置aws-context:stack-configuration并自动解析 特定堆栈。这data-source元素使用db-instance-identifier要使用的属性 数据库。spring-doc.cadn.net.cn

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aws-context="http://www.springframework.org/schema/cloud/aws/context"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/cloud/aws/context
       http://www.springframework.org/schema/cloud/aws/context/spring-cloud-aws-context.xsd">

  <aws-context:context-credentials>
    ...
  </aws-context:context-credentials>

  <aws-context:context-region .. />

  <aws-context:stack-configuration/>

  <jdbc:data-source db-instance-identifier="applicationDatabase" ... />
</beans>

有关 Amazon RDS 配置和设置的更多详细信息,请参阅本章的相应章节 文档。spring-doc.cadn.net.cn

4.2. 手动 CloudFormation 配置

如果应用程序未在堆栈配置的 EC2 实例中运行,则必须配置堆栈配置 手动下载。该配置由一个附加元素属性组成stack-name将用于解决所有 运行时相应的堆栈配置信息。spring-doc.cadn.net.cn

<beans ....>
    ...
  <aws-context:stack-configuration stack-name="myStackName" />
    ...
</beans>

4.3. 使用 Java 配置类的 CloudFormation 配置

Spring Cloud AWS 还支持在 Java 类中配置 CloudFormation 支持,避免使用 应用程序配置中的 XML。Spring Cloud AWS 提供了 Commentsog.springframework.cloud.aws.context.config.annotation.EnableStackConfiguration允许自动和手动 堆栈配置。下一个示例显示了一个配置类,该类使用 显式堆栈名称(此处manualStackName).spring-doc.cadn.net.cn

@Configuration
@EnableStackConfiguration(stackName = "manualStackName")
class ApplicationConfiguration {
}

不要定义stackName属性,如果应启用自动堆栈名称。spring-doc.cadn.net.cn

4.4. Spring Boot 中的 CloudFormation 配置

Spring Cloud AWS 还支持在 Spring Boot 配置中配置 CloudFormation 支持。 这 可以使用下表中描述的属性定义手动和自动堆栈配置。spring-doc.cadn.net.cn

属性 示例 描述

cloud.aws.stack.namespring-doc.cadn.net.cn

我的堆栈名称spring-doc.cadn.net.cn

将用于检索资源的手动配置堆栈名称的名称。spring-doc.cadn.net.cn

云.aws.stack.autospring-doc.cadn.net.cn

truespring-doc.cadn.net.cn

为应用程序启用自动堆栈名称检测。spring-doc.cadn.net.cn

4.5. 手动名称解析

Spring Cloud AWS 使用 CloudFormation 堆栈使用逻辑名称在内部解析所有资源。在某些情况下可能需要解析应用程序代码中的物理名称。Spring Cloud AWS 提供了一个预配置的服务,用于根据逻辑名称解析物理堆栈名称。该示例显示了手动堆栈资源解析。spring-doc.cadn.net.cn

@Service
public class ApplicationService {

 private final ResourceIdResolver resourceIdResolver;

 @Autowired
 public ApplicationService(ResourceIdResolver resourceIdResolver) {
    this.resourceIdResolver = resourceIdResolver;
 }

 public void handleApplicationLogic() {
    String physicalBucketName =
        this.resourceIdResolver.resolveToPhysicalResourceId("someLogicalName");
 }
}

4.6. 堆栈标签

与 Amazon EC2 实例一样,CloudFormation 还提供特定于堆栈的标签,可用于配置特定于堆栈的配置信息并在应用程序内接收它们。例如,这可以是阶段特定的配置属性(如 DEV、INT、PRD)。spring-doc.cadn.net.cn

<beans ....>
    ...
    <aws-context:stack-configuration user-tags-map="stackTags"/>
    ...
</beans>

然后,应用程序可以使用类似#{stackTags.key1}.spring-doc.cadn.net.cn

4.7. 使用自定义 CloudFormation 客户端

与 EC2 配置设置一样,aws-context:stack-configuration元素支持自定义 CloudFormation 客户端具有特殊设置。客户端本身可以使用amazon-cloud-formation属性,如示例所示:spring-doc.cadn.net.cn

<beans>
    <aws-context:stack-configuration amazon-cloud-formation=""/>

    <bean class="com.amazonaws.services.cloudformation.AmazonCloudFormationClient">
    </bean>
</beans>