4. 管理云环境

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

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

CloudFormation 概述

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

4.1. 自动配置 CloudFormation

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

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

然后创建数据源,并将接收一个物理名称(例如 ir142c39k6o5irj)作为数据库服务名称。应用 开发人员仍然可以使用 logical name (在本例中 ) 与数据库进行交互。示例 下面显示了由 element 定义并自动解析的堆栈配置 特定堆栈。该元素使用要使用的属性的逻辑名称 数据库。applicationDatabaseaws-context:stack-configurationdata-sourcedb-instance-identifierspring-doc.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.cn

4.2. 手动配置 CloudFormation

如果应用程序未在配置了堆栈的 EC2 实例中运行,则必须配置堆栈配置 手动地。该配置包含一个附加的 element 属性,该属性将用于解析所有 在运行时提供相应的堆栈配置信息。stack-namespring-doc.cn

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

4.3. 使用 Java 配置类进行 CloudFormation 配置

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

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

如果应启用自动堆栈名称,请不要定义该属性。stackNamespring-doc.cn

4.4. Spring Boot 中的 CloudFormation 配置

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

财产 描述

cloud.aws.stack.namespring-doc.cn

myStackNamespring-doc.cn

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

cloud.aws.stack.autospring-doc.cn

spring-doc.cn

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

4.5. 手动名称解析

Spring Cloud AWS 使用 CloudFormation 堆栈使用逻辑名称在内部解析所有资源。在某些情况下 可能需要解析应用程序代码中的物理名称。Spring Cloud AWS 提供了一个预配置的 service 根据逻辑名称解析物理堆栈名称。该示例显示了手动堆栈资源解析。spring-doc.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 也提供了特定于堆栈的标签,可用于 配置特定于堆栈的配置信息并在应用程序内接收它们。例如,这可以是 特定于 stage 的配置属性(如 DEV、INT、PRD)。spring-doc.cn

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

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

4.7. 使用自定义 CloudFormation 客户端

与 EC2 配置设置一样,该元素支持自定义 CloudFormation 客户端 使用特殊设置。客户端本身可以使用属性进行配置,如示例中所示:aws-context:stack-configurationamazon-cloud-formationspring-doc.cn

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

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