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

模板文件描述所有堆栈资源及其逻辑名称。CloudFormation 服务解析堆栈 模板文件,并使用其物理名称创建所有资源。应用程序可以使用所有堆栈配置的资源 替换为模板中定义的逻辑名称。Spring Cloud AWS 将所有逻辑名称解析为应用程序开发人员各自的物理名称。
4.1. 自动 CloudFormation 配置
如果应用程序在堆栈内运行(因为底层 EC2 实例已在堆栈中引导),则 Spring Cloud AWS 将自动检测堆栈并解析堆栈中的所有资源。应用程序开发人员 可以使用堆栈模板中的所有逻辑名称与服务交互。在下面的示例中,数据库 使用 CloudFormation 模板配置资源,为数据库实例定义逻辑名称。
"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
要使用的属性
数据库。
<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 配置和设置的更多详细信息,请参阅本章的相应章节 文档。 |
4.2. 手动 CloudFormation 配置
如果应用程序未在堆栈配置的 EC2 实例中运行,则必须配置堆栈配置
手动下载。该配置由一个附加元素属性组成stack-name
将用于解决所有
运行时相应的堆栈配置信息。
<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
).
@Configuration
@EnableStackConfiguration(stackName = "manualStackName")
class ApplicationConfiguration {
}
不要定义 |
4.4. Spring Boot 中的 CloudFormation 配置
Spring Cloud AWS 还支持在 Spring Boot 配置中配置 CloudFormation 支持。 这 可以使用下表中描述的属性定义手动和自动堆栈配置。
属性 | 示例 | 描述 |
---|---|---|
cloud.aws.stack.name |
我的堆栈名称 |
将用于检索资源的手动配置堆栈名称的名称。 |
云.aws.stack.auto |
true |
为应用程序启用自动堆栈名称检测。 |
4.5. 手动名称解析
Spring Cloud AWS 使用 CloudFormation 堆栈使用逻辑名称在内部解析所有资源。在某些情况下可能需要解析应用程序代码中的物理名称。Spring Cloud AWS 提供了一个预配置的服务,用于根据逻辑名称解析物理堆栈名称。该示例显示了手动堆栈资源解析。
@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)。
<beans ....>
...
<aws-context:stack-configuration user-tags-map="stackTags"/>
...
</beans>
然后,应用程序可以使用类似#{stackTags.key1}
.
4.7. 使用自定义 CloudFormation 客户端
与 EC2 配置设置一样,aws-context:stack-configuration
元素支持自定义 CloudFormation 客户端具有特殊设置。客户端本身可以使用amazon-cloud-formation
属性,如示例所示:
<beans>
<aws-context:stack-configuration amazon-cloud-formation=""/>
<bean class="com.amazonaws.services.cloudformation.AmazonCloudFormationClient">
</bean>
</beans>