У меня есть приложение 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
Программисты JAVA общаются здесь
-
Anonymous
1734950344
Anonymous
У меня есть приложение Java 17/Spring Boot 3/Gradle. Я развертываю его на экземплярах AWS ECS Fargate, и мне нужно использовать параметры SSM, но я не могу их правильно внедрить (см. ошибку ниже). Я пробовал искать решения, но пока мне ничего не помогло. Я считаю, что что-то не так с моими конфигурациями, но я не уверен, что именно.
Не могли бы вы посоветовать решение?
Вот мой [b]application.yml[/b] (вероятно, слишком много настроек, но я пробовал разные подходы шаг за шагом):
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}
[b]Класс Java[/b]:
@Component
@ConfigurationProperties(prefix = "groupname")
public class SomeProperties {
private String init;
private String session;
private long checkInterval;
//getters and setters
[b]build.gradle[/b] зависимости:
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, которые у меня есть в [b]AWS Systems Manager/Хранилище параметров/Мои параметры[/b]:
/my_app_name /groupname/init
/my_app_name/groupname/session
/my_app_name/groupname /checkInterval
[b]Разрешения роли задачи[/b]:
{
"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/*"
}
]
}
Когда я запускаю приложение, я вижу [b]следующую ошибку в журналах[/b]:
***************************
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. значение.
[b]ОБНОВЛЕНИЕ:[/b]
Я изменил зависимость на:
implementation 'io.awspring.cloud:spring-cloud-aws-starter-parameter-store:3.0.1'
следующая документация: https://docs.awspring.io/spring-cloud-aws/docs/3.0.0/reference/html/index.html#spring-cloud-aws- хранилище параметров
И [b]application.yml[/b] для:
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.]
Подробнее здесь: [url]https://stackoverflow.com/questions/79302567/synchronizing-aws-ssm-parameters-and-spring-boot-3-application[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия