diff --git a/core/spring-boot/src/main/java/org/springframework/boot/cloud/CloudPlatform.java b/core/spring-boot/src/main/java/org/springframework/boot/cloud/CloudPlatform.java index 00f50904635f..5cc8a07e0351 100644 --- a/core/spring-boot/src/main/java/org/springframework/boot/cloud/CloudPlatform.java +++ b/core/spring-boot/src/main/java/org/springframework/boot/cloud/CloudPlatform.java @@ -164,6 +164,20 @@ public boolean isDetected(Environment environment) { return this.azureEnvVariables.stream().allMatch(environment::containsProperty); } + }, + + /** + * Amazon Web Services (AWS) Elastic Container Service (ECS) platform. + * @since 4.0.0 + */ + AWS_ECS { + + @Override + public boolean isDetected(Environment environment) { + String awsExecutionEnv = environment.getProperty("AWS_EXECUTION_ENV"); + return (awsExecutionEnv != null) && awsExecutionEnv.startsWith("AWS_ECS"); + } + }; private static final String PROPERTY_NAME = "spring.main.cloud-platform"; diff --git a/core/spring-boot/src/test/java/org/springframework/boot/cloud/CloudPlatformTests.java b/core/spring-boot/src/test/java/org/springframework/boot/cloud/CloudPlatformTests.java index 4b53df2b28bb..9223f513971b 100644 --- a/core/spring-boot/src/test/java/org/springframework/boot/cloud/CloudPlatformTests.java +++ b/core/spring-boot/src/test/java/org/springframework/boot/cloud/CloudPlatformTests.java @@ -22,6 +22,8 @@ import java.util.stream.Stream; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.springframework.boot.context.properties.bind.Binder; import org.springframework.boot.context.properties.source.MockConfigurationPropertySource; @@ -205,6 +207,24 @@ void getActiveWhenHasMissingWebsiteSkuShouldNotReturnAzureAppService() { assertThat(platform).isNull(); } + @ParameterizedTest + @ValueSource(strings = { "AWS_ECS_FARGATE", "AWS_ECS_EC2" }) + void getActiveWhenHasAwsExecutionEnvEcsShouldReturnAwsEcs(String awsExecutionEnv) { + Map envVars = Map.of("AWS_EXECUTION_ENV", awsExecutionEnv); + Environment environment = getEnvironmentWithEnvVariables(envVars); + CloudPlatform platform = CloudPlatform.getActive(environment); + assertThat(platform).isNotNull().isEqualTo(CloudPlatform.AWS_ECS); + assertThat(platform.isActive(environment)).isTrue(); + } + + @Test + void getActiveWhenHasAwsExecutionEnvLambdaShouldNotReturnAwsEcs() { + Map envVars = Map.of("AWS_EXECUTION_ENV", "AWS_Lambda_java8"); + Environment environment = getEnvironmentWithEnvVariables(envVars); + CloudPlatform platform = CloudPlatform.getActive(environment); + assertThat(platform).isNull(); + } + @Test void getActiveWhenHasEnforcedCloudPlatform() { Environment environment = getEnvironmentWithEnvVariables(