2. 基本设置
在使用 Spring Cloud AWS 模块之前,开发人员必须选择依赖项并配置 Spring Cloud AWS 模块。 接下来的章节描述了 Spring AWS Cloud 项目的依赖项 Management 和基本配置。
2.1. Spring Cloud AWS maven 依赖管理
Spring Cloud AWS 模块依赖项可以通过直接配置直接在 Maven 中使用 的特定模块。Spring Cloud AWS 模块包括 Spring 模块的所有传递依赖项,并且 以及运行模块所需的 Amazon SDK。一般依赖项配置将如下所示:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-aws-context</artifactId>
<version>{spring-cloud-version}</version>
</dependency>
</dependencies>
通过将模块名称替换为相应的模块(例如 而不是spring-cloud-aws-messaging
spring-cloud-aws-context
)
上面的示例适用于 Maven Central 存储库。要使用 Spring Maven 存储库(例如,用于里程碑或 developer snapshots),您需要在 Maven 配置中指定存储库位置。对于完整版本:
<repositories>
<repository>
<id>io.spring.repo.maven.release</id>
<url>https://repo.spring.io/release/</url>
<snapshots><enabled>false</enabled></snapshots>
</repository>
</repositories>
对于里程碑:
<repositories>
<repository>
<id>io.spring.repo.maven.milestone</id>
<url>https://repo.spring.io/milestone/</url>
<snapshots><enabled>false</enabled></snapshots>
</repository>
</repositories>
2.2. Amazon 开发工具包依赖项版本管理
Amazon SDK 的发布频率高于 Spring Cloud AWS。如果您需要使用比 Spring Cloud 配置的 AWS SDK 版本更新的 AWS SDK 将 AWS SDK BOM 添加到依赖项管理部分,确保在配置 AWS 开发工具包依赖项的任何其他 BOM 依赖项之前声明它。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-bom</artifactId>
<version>${aws-java-sdk.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.3. Amazon 开发工具包配置
Spring Cloud AWS 配置目前是使用 Spring Cloud AWS 命名空间提供的自定义元素完成的。 JavaConfig 将很快支持。配置设置直接在 Spring XML 配置文件中完成 以便可以直接使用这些元素。Spring Cloud AWS 的每个模块都提供了自定义命名空间,以允许模块化 模块的使用。使用 Spring Cloud AWS 的典型 XML 配置概述如下:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aws-context="http://www.springframework.org/schema/cloud/aws/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/cloud/aws/context
http://www.springframework.org/schema/cloud/aws/context/spring-cloud-aws-context.xsd">
<aws-context:context-region region="..."/>
</beans>
在应用程序启动时,Spring Cloud AWS 会出于内部目的执行应用程序是否在 AWS 云环境中运行
通过使用 AWS 开发工具包提供的类。从版本 1.11.678 开始,当在 AWS 环境之外进行此检查时,AWS 开发工具包会记录一条警告消息,其中包含异常。
可以通过在 class 上设置日志记录级别来隐藏此警告消息。
|
2.3.1. SDK 凭证配置
要调用 Amazon Web Service,必须为 Amazon 开发工具包配置凭证。Spring Cloud AWS 支持配置特定于应用程序上下文的凭证,这些凭证用于完成的请求的每个服务调用 由 Spring Cloud AWS 组件,但 Parameter Store 和 Secrets Manager 配置除外。 因此,整个应用程序上下文必须只有一个凭据配置。
如果没有专用凭证,则所有客户端都使用
provider 定义。这基本上会使用以下身份验证信息
|
根据整体凭证策略,有不同的选项来配置凭证。可能的 以下子章节。
简单的凭证配置
Amazon SDK 的凭证由访问密钥(可以共享)和私有密钥(不得共享)组成。双 可以使用 Spring Cloud AWS 创建的每个 Amazon SDK 服务的 XML 命名空间来配置安全属性 模块。整体配置如下所示
<beans ...>
<aws-context:context-credentials>
<aws-context:simple-credentials access-key="AKIAIO" secret-key="wJalrXUtnFEMI/K7M" />
</aws-context:context-credentials>
</beans>
access-key 和 secret-key 应该外部化到属性文件中(例如 Spring Boot 应用程序配置) 而不是签入源代码管理系统。 |
实例配置文件配置
实例配置文件配置允许分配 在启动 EC2 实例时由角色授权的配置文件。然后,对从 EC2 实例发出的所有调用进行身份验证 具有 instance profile specific user 角色。因此,配置中不需要专用的访问密钥和密钥。 Spring Cloud AWS 中实例配置文件的配置如下所示:
<beans ...>
<aws-context:context-credentials>
<aws-context:instance-profile-credentials/>
</aws-context:context-credentials>
</beans>
混合使用两种安全配置
在某些情况下,将两种身份验证策略组合在一起以允许应用程序使用实例配置文件非常有用 具有显式访问密钥和密钥配置的回退。如果应用程序在 EC2(例如在测试服务器上)和本地进行测试。下一个代码段显示了两种安全配置的组合。
<beans ...>
<aws-context:context-credentials>
<aws-context:instance-profile-credentials/>
<aws-context:simple-credentials access-key="${accessKey:}" secret-key="${secretKey:}"/>
</aws-context:context-credentials>
</beans>
access-key 和 secret-key 是使用占位符表达式和默认值定义的,以避免引导 错误。 |
Parameter Store 和 Secrets Manager 配置凭证和区域配置
Parameter Store 和 Secrets Manager 配置支持使用引导上下文来配置默认客户端,该客户端使用 和 .
如果要覆盖此配置,则需要定义自己的 Spring Cloud 引导配置类,其类型为使用您选择的凭据和/或区域提供程序。
因为这个上下文是在创建 Spring Cloud Bootstrap 上下文时创建的,所以你不能简单地覆盖 bean
在普通课程中。AWSSimpleSystemsManagement
com.amazonaws.auth.DefaultAWSCredentialsProviderChain
com.amazonaws.regions.DefaultAwsRegionProviderChain
AWSSimpleSystemsManagement
@Configuration
2.3.2. 区域配置
Amazon Web Services 在不同区域提供。基于
根据自定义要求,用户可以在不同的 Amazon 区域托管应用程序。该模块提供了一种为整个应用程序上下文定义区域的方法。spring-cloud-aws-context
显式区域配置
可以使用 XML 元素显式配置区域。如果区域不能自动 派生的,因为应用程序未托管在 EC2 实例上(例如本地测试),或者必须手动覆盖该区域。
<beans ...>
<aws-context:context-region region="eu-west-1"/>
</beans>
还允许使用表达式或占位符来外部化配置,并确保 Region 可以 使用属性文件或系统属性重新配置。 |
自动区域配置
如果应用程序上下文在 EC2 实例内启动,则可以从实例元数据中自动获取该区域,因此必须 而不是静态配置。配置将如下所示:
<beans ...>
<aws-context:context-region auto-detect="true" />
</beans>
服务特定区域配置
如果一个应用程序上下文使用来自不同区域的服务,则也可以为特定服务覆盖区域。 该配置可以如上所述在全局范围内完成,并使用 region 属性为每个服务进行配置。 数据库服务的配置可能如下所示(稍后介绍)
<beans ...>
<aws-context:context-region region="eu-central-1" />
<jdbc:data-source ... region="eu-west-1" />
</beans>
虽然理论上可以为每个应用程序使用多个区域,但我们强烈建议编写满足以下条件的应用程序 仅托管在一个区域内,如果应用程序同时托管在不同区域,则拆分应用程序。 |
2.3.3. Spring Boot 自动配置
继 Spring Cloud 伞式项目之后,Spring Cloud AWS 还提供专用的 Spring Boot 支持。Spring Cloud AWS 可以使用 Spring Boot 属性进行配置,并且还会根据 常规设置。
Maven 依赖项
Spring Cloud AWS 提供了一个专用模块来启用 Spring Boot 支持。该模块必须添加到常规 maven 依赖项。典型配置将如下所示
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-aws-autoconfigure</artifactId>
<version>{spring-cloud-version}</version>
</dependency>
</dependencies>
必须添加其他依赖项才能启用消息收发和 JDBC 等特定功能。Spring Cloud AWS 将 仅配置 Spring Boot 应用程序的 Classpath 中可用的类。
配置凭证
Spring Boot 提供了一种使用属性文件或 YAML 配置文件定义属性的标准方法。Spring Cloud AWS 支持使用 Spring Boot 应用程序配置文件配置凭证信息。 Spring Cloud AWS 提供了以下属性来配置整个应用程序的凭证设置。
除非设置为 ,否则 Spring Cloud AWS 会配置以下内容
凭证链:cloud.aws.credentials.use-default-aws-credentials-chain
true
-
AWSStaticCredentialsProvider
if 提供cloud.aws.credentials.access-key
-
EC2ContainerCredentialsProviderWrapper
unless 设置为cloud.aws.credentials.instance-profile
false
-
ProfileCredentialsProvider
财产 | 例 | 描述 |
---|---|---|
cloud.aws.credentials.access-key |
AKIAIOSFODNN7EXAMPLE |
要用于静态提供程序的访问密钥 |
cloud.aws.credentials.secret-key |
wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY |
要用于静态提供程序的密钥 |
cloud.aws.credentials.instance-配置文件 |
真 |
配置实例配置文件凭证提供程序,无需进一步配置 |
cloud.aws.credentials.profile-name |
违约 |
指定配置文件中配置文件的名称 |
cloud.aws.credentials.profile-path |
|
配置文件所在的文件路径。默认为 if value 未提供 |
cloud.aws.credentials.use-default-aws-credentials-chain |
真 |
使用 DefaultAWSCredentials 链,而不是配置自定义凭证链 |
配置区域
与凭证一样,Spring Cloud AWS 模块也支持 Spring 内部的区域配置 引导配置文件。区域可以自动检测或显式配置(例如,在本地测试的情况下 针对 AWS 云)。
用于配置区域的属性如下所示
财产 | 例 | 描述 |
---|---|---|
cloud.aws.region.auto |
真 |
启用基于 EC2 元数据服务的自动区域检测 |
cloud.aws.region.use-default-aws-region-chain |
真 |
使用 DefaultAWSRegion 链,而不是配置自定义区域链 |
cloud.aws.region.static |
欧洲西部 1 |
为应用程序配置静态区域。可能的区域包括(当前)us-east-1、us-west-1、us-west-2、 eu-west-1、eu-central-1、ap-southeast-1、ap-southeast-1、ap-northeast-1、sa-east-1、cn-north-1 和任何自定义区域 配置了自己的区域元数据 |