4. 管理云环境
使用 管理控制台 手动管理环境无法扩展,并且随着 基础设施的复杂性。Amazon Web Services 提供 CloudFormation 服务,允许定义堆栈配置模板并使用这些服务引导整个基础设施。 为了允许多个堆栈并行,堆栈中的每个资源都会接收一个唯一的物理名称,其中包含 一些任意生成的 name。为了以统一的方式与堆栈资源交互 Spring Cloud AWS 允许 开发人员使用逻辑名称而不是随机的物理名称。
下图显示了典型的堆栈配置。
Template File (模板文件) 使用其逻辑名称描述所有堆栈资源。CloudFormation 服务解析堆栈 template 文件创建所有资源,并使用其物理名称创建所有资源。应用程序可以使用所有堆栈配置的资源 替换为模板中定义的逻辑名称。Spring Cloud AWS 将所有逻辑名称解析为应用程序开发人员的相应物理名称。
4.1. 自动配置 CloudFormation
如果应用程序在堆栈中运行(因为底层 EC2 实例已在堆栈中引导),则 Spring Cloud AWS 将自动检测堆栈并解析堆栈中的所有资源。应用程序开发人员 可以使用堆栈模板中的所有逻辑名称与服务交互。在下面的示例中,数据库 resource 使用 CloudFormation 模板进行配置,从而定义数据库实例的逻辑名称。
"applicationDatabase": {
"Type": "AWS::RDS::DBInstance",
"Properties": {
"AllocatedStorage": "5",
"DBInstanceClass": "db.t1.micro",
"DBName": "test"
...
]
}
}
然后创建数据源,并将接收一个物理名称(例如 ir142c39k6o5irj)作为数据库服务名称。应用
开发人员仍然可以使用 logical name (在本例中 ) 与数据库进行交互。示例
下面显示了由 element 定义并自动解析的堆栈配置
特定堆栈。该元素使用要使用的属性的逻辑名称
数据库。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 实例中运行,则必须配置堆栈配置
手动地。该配置包含一个附加的 element 属性,该属性将用于解析所有
在运行时提供相应的堆栈配置信息。stack-name
<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.EnableStackConfiguration
manualStackName
@Configuration
@EnableStackConfiguration(stackName = "manualStackName")
class ApplicationConfiguration {
}
如果应启用自动堆栈名称,请不要定义该属性。 |
4.4. Spring Boot 中的 CloudFormation 配置
Spring Cloud AWS 还支持在 Spring Boot 配置中配置 CloudFormation 支持。这 手动和自动堆栈配置可以使用下表中描述的属性进行定义。
财产 | 例 | 描述 |
---|---|---|
cloud.aws.stack.name |
myStackName |
将用于检索资源的手动配置的堆栈名称的名称。 |
cloud.aws.stack.auto |
真 |
为应用程序启用自动堆栈名称检测。 |
4.5. 手动名称解析
Spring Cloud AWS 使用 CloudFormation 堆栈使用逻辑名称在内部解析所有资源。在某些情况下 可能需要解析应用程序代码中的物理名称。Spring Cloud AWS 提供了一个预配置的 service 根据逻辑名称解析物理堆栈名称。该示例显示了手动堆栈资源解析。
@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)。
<beans ....>
...
<aws-context:stack-configuration user-tags-map="stackTags"/>
...
</beans>
然后,应用程序可以使用类似于 .#{stackTags.key1}
4.7. 使用自定义 CloudFormation 客户端
与 EC2 配置设置一样,该元素支持自定义 CloudFormation 客户端
使用特殊设置。客户端本身可以使用属性进行配置,如示例中所示:aws-context:stack-configuration
amazon-cloud-formation
<beans>
<aws-context:stack-configuration amazon-cloud-formation=""/>
<bean class="com.amazonaws.services.cloudformation.AmazonCloudFormationClient">
</bean>
</beans>