У меня есть приложение Java 17/Spring Boot 3/Gradle. Я развертываю его на экземплярах AWS ECS Fargate, и мне нужно использовать параметры SSM, но я не могу их правильно внедрить (см. ошибку ниже). Я пробовал искать решения, но пока мне ничего не помогло. Я считаю, что что-то не так с моими конфигурациями, но я не уверен, что именно.
Не могли бы вы посоветовать решение?
Вот мой application.yml (вероятно, слишком много настроек, но я пробовал разные подходы шаг за шагом):
spring:
application:
name: my_app_name
cloud:
aws:
parameterstore:
enabled: true
prefix: ""
config:
import: "optional:aws-parameterstore:"
groupname:
init: ${ssm:/my_app_name/groupname/init}
session: ${ssm:/my_app_name/groupname/session}
checkInterval: ${ssm:/my_app_name/groupname/checkInterval}
Класс Java:
@Component
@ConfigurationProperties(prefix = "groupname")
public class SomeProperties {
private String init;
private String session;
private long checkInterval;
//getters and setters
build.gradle зависимости:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.json:json:20231013'
implementation 'org.projectlombok:lombok:1.18.28'
implementation 'io.awspring.cloud:spring-cloud-starter-aws-parameter-store-config:2.4.4'
annotationProcessor 'org.projectlombok:lombok:1.18.28'
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
Параметры SSM, которые у меня есть в AWS Systems Manager/Хранилище параметров/Мои параметры:
/my_app_name /groupname/init
/my_app_name/groupname/session
/my_app_name/groupname /checkInterval
Разрешения роли задачи:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:GetParameter",
"ssm:GetParameters",
"ssm:GetParameters",
"ssm:GetParametersByPath",
"kms:Decrypt",
"ssm:GetParameterHistory"
],
"Resource": "arn:aws:ssm::**:parameter/my_app_name/groupname/*"
}
]
}
Когда я запускаю приложение, я вижу следующую ошибку в журналах:
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to bind properties under 'groupname.check-interval' to long:
Property: groupname.check-interval
Value: "${ssm:/my_app_name/groupname/checkInterval}"
Origin: class path resource [application.yml] from app.jar - 15:18
Reason: failed to convert java.lang.String to long (caused by java.lang.NumberFormatException: For input string: "/my_app_name/groupname/checkInterval")
Action:
Update your application's configuration
Насколько я понимаю, основная причина заключается в том, что Spring интерпретирует значение параметра как значение из файла application.yml, преобразуя его в строку, но не преобразуя его в фактический параметр SSM. значение.
ОБНОВЛЕНИЕ:
Я изменил зависимость на:
implementation 'io.awspring.cloud:spring-cloud-aws-starter-parameter-store:3.0.1'
следующая документация: https://docs.awspring.io/spring-cloud-a ... cloud-aws- хранилище параметров
И application.yml для:
spring:
application:
name: my_app_name
config:
import: optional:aws-parameterstore:/my_app_name/groupname
farm:
init: ${/init}
session: ${/session}
checkInterval: 500000
chekInterval жестко запрограммирован для целей тестирования.
После этого приложение запускается, но сталкивается со следующей проблемой:
December 23, 2024 at 11:21 (UTC+1:00)
2024-12-23T10:21:39.815Z WARN 1 --- [ main] .a.c.a.c.p.ParameterStorePropertySources : Unable to load AWS parameter from /my_app_name/groupname. Unable to load credentials from any of the providers in the chain AwsCredentialsProviderChain(credentialsProviders=[SystemPropertyCredentialsProvider(), EnvironmentVariableCredentialsProvider(), WebIdentityTokenCredentialsProvider(), ProfileCredentialsProvider(profileName=default, profileFile=ProfileFile(profilesAndSectionsMap=[])), ContainerCredentialsProvider(), InstanceProfileCredentialsProvider()]) : [SystemPropertyCredentialsProvider(): Unable to load credentials from system settings. Access key must be specified either via environment variable (AWS_ACCESS_KEY_ID) or system property (aws.accessKeyId)., EnvironmentVariableCredentialsProvider(): Unable to load credentials from system settings. Access key must be specified either via environment variable (AWS_ACCESS_KEY_ID) or system property (aws.accessKeyId)., WebIdentityTokenCredentialsProvider(): Either the environment variable AWS_WEB_IDENTITY_TOKEN_FILE or the javaproperty aws.webIdentityTokenFile must be set., ProfileCredentialsProvider(profileName=default, profileFile=ProfileFile(profilesAndSectionsMap=[])): Profile file contained no credentials for profile 'default': ProfileFile(profilesAndSectionsMap=[]), ContainerCredentialsProvider(): Cannot fetch credentials from container - neither AWS_CONTAINER_CREDENTIALS_FULL_URI or AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variables are set., InstanceProfileCredentialsProvider(): Failed to load credentials from IMDS.]
Подробнее здесь: https://stackoverflow.com/questions/793 ... pplication
Синхронизация параметров AWS SSM и приложения Spring Boot 3 ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Можем ли мы присвоить значения параметров ssm допустимым значениям в Swagger
Anonymous » » в форуме JAVA - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-