Почему не срабатывает AWS Service Connect
Пытаюсь разобраться в экосистеме AWS и пробую развернуть 2 сервиса с помощью ECS и Fargate. Один сервис это mongodb
, второй - Spring-Boot
приложение, которое запрашивает данные и осуществяет миграции с помощью Mongock
. Я начал с того, что сначала сбилдил образ базы, залил его в ECR там из нео развернул сервис с таской. далее взял па=убличный айпи таска и обновил application.properties, сделал образ для Spring-Boot приложения и также поднял сервис. все стартануло, Mongock провел миграции.
Я не планирую держать сервисы онлайн нон-стоп, поэтому хотелось бы иметь возможность их останавливать. Однако в этом случае оба сервиса получат новые айпи и spring сервис не сможет подключаться к базе.
На этот случай у aws есть service-connect
, который позволяет дать dns-имена в их внутренней системе. Тогда при запуске тасков будут запускаться также специальные агенты, которые по именам будут соотносить запросы с нужными айпи. Итак, для базы я с помощью aws cli
и файла json установил service-connect:
{
"enabled": true,
"namespace": "test",
"services": [
{
"portName": "27017mongo",
"discoveryName": "user-mongo",
"clientAliases": [
{
"port": 27017
}
]
}
]
}
далее с помощью service-describe
проверил его:
serviceConnectConfiguration": {
"enabled": true,
"namespace": "arn:aws:servicediscovery:eu-north-1:891377330754:namespace/ns-p76w3mzvv5py466a",
"services": [
{
"portName": "27017mongo",
"discoveryName": "user-mongo",
"clientAliases": [
{
"port": 27017,
"dnsName": "user-mongo.test"
}
]
}
]
},
"serviceConnectResources": [
{
"discoveryName": "user-mongo",
"discoveryArn": "arn:aws:servicediscovery:eu-north-1:891377330754:service/srv-rqiink64a7izgkdy"
}
]
},
Далее обновил пропсы spring приложения:
data:
mongodb:
uri: mongodb://user-mongo.test:27017/service02
auto-index-creation: true
database: service02
port: 27017
host: user-mongo.test
Вновь сбилдил докер-образ, отправил в амазоновский реп, поднял сервис и добавил к нему также service-connect:
{
"enabled": true,
"namespace": "test",
"services": [
{
"portName": "8083user",
"discoveryName": "user-service",
"clientAliases": [
{
"port": 8083
}
]
}
]
}
Все было добавлено успешно, security groups на порты 27017, 8083 по адресациями ipv4, ipv6 я добавил. сервис с монгой запустился нормально, а вот spring-сервис через какое-то время после старта отваливается с ошибкой:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'getBuilder' defined in io.mongock.runner.springboot.config.MongockContext: Unsatisfied dependency expressed through method 'getBuilder' parameter 0: Error creating bean with name 'connectionDriver' defined in class path resource [io/mongock/driver/mongodb/springdata/v4/config/SpringDataMongoV4Context.class]: Failed to instantiate [io.mongock.driver.api.driver.ConnectionDriver]: Factory method 'connectionDriver' threw exception with message: Timed out after 30000 ms while waiting to connect. Client view of cluster state is {type=UNKNOWN, servers=[{address=user-mongo.test:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketException: user-mongo.test}, caused by {java.net.UnknownHostException: user-mongo.test}}]
Судя по ошибке он не может распознать хост user-mongo.test
и Mongock
не подключается, чтобы выполнить миграции и тд. Чисто гипотетически проблема может быть либо в этом service-connect
, либо может есть какая-то проблема с VPC
конфигурацией(но я ничего не менял там от слова совсем). Что я делаю не так?