#javascript #node.js #amazon-web-services #amazon-elastic-beanstalk #aws-sdk
Вопрос:
Я создаю сервис поверх EB, в котором будет размещено несколько различных приложений. Я хочу иметь возможность разделять каждое приложение, чтобы между ними не было конфликтов.
Например, у меня есть приложения app1 и app2 с промежуточными средами. Когда я пытаюсь развернуть промежуточную env в app2, я получаю ошибку Environment staging already exists
, потому что она существует в app1.
Есть ли способ создать совершенно отдельный экземпляр для каждого приложения, чтобы избежать конфликтов такого рода, а также, возможно, обеспечить большую безопасность, чтобы приложения не имели доступа друг к другу?
Если это вам поможет, я использую Javascript aws-sdk для создания такой среды:
const createElasticBeanstalkEnvironment = async ({
applicationName,
versionLabel,
environmentName
}) => {
const describeEnvironmentsCommand = new DescribeEnvironmentsCommand({
EnvironmentNames: [environmentName],
ApplicationName: applicationName,
IncludeDeleted: false
});
const { Environments = [] } = await elasticBeanstalkClient.send(describeEnvironmentsCommand);
const isExistingEnvironment = Environments.length > 0;
if( isExistingEnvironment ) {
const updateEnvironmentCommand = new UpdateEnvironmentCommand({
ApplicationName: applicationName,
EnvironmentName: environmentName,
VersionLabel: versionLabel,
// ...
});
return elasticBeanstalkClient.send(updateEnvironmentCommand);
}
const createEnvironmentCommand = new CreateEnvironmentCommand({
ApplicationName: applicationName,
EnvironmentName: environmentName,
VersionLabel: versionLabel,
// ...
});
return elasticBeanstalkClient.send(createEnvironmentCommand);
}
Вы можете видеть, что я проверяю, существует ли среда, которая, если ее нет, то я ее создаю. Мой код describeEnvironments
возвращает false, потому что он не существует для этого приложения, но когда я звоню CreateEnvironmentCommand
, я получаю сообщение об ошибке, что он уже существует (хотя и под другим env)
Комментарии:
1. Что произойдет, если вы зарегистрируете / просмотрите список версий из ответа на команду describeApplicationVersionsCommand? Что произойдет, если вы используете что-то вроде «env1:Имя приложения» и «env2:имя приложения», чтобы у них не было одного и того же имени приложения? Я подозреваю, что проверка вашего существования неверна, но я обычно развертываю с помощью консоли.
2. Я действительно рассматривал возможность добавления префикса к каждой среде с ее именем приложения, но я полагаю, что это может вызвать дополнительные проблемы, поскольку длина каждого имени среды довольно велика. Имена приложений уже могут быть довольно длинными, если они извлечены из github приложений.
3. Я добавил вопрос о тестировании обнаружения версии-возможно, версия существует, но ваш тест ее не улавливает?
4. Кроме того, вы можете использовать сокращение для различных сред, таких как «cluster1:» или «промежуточный».:
5. Они не имеют одного и того же имени приложения. У них одно и то же имя среды, и, судя по тому, что я вижу, среды являются общими для приложений