#amazon-web-services #azure #terraform #infrastructure-as-code #pulumi
#amazon-web-services #azure #terraform #инфраструктура как код #pulumi
Вопрос:
Мне было интересно, как лучше всего использовать результат развертывания Pulumi в коде моего приложения. Чтобы привести конкретный пример, предположим, что мой стек Pulumi генерирует следующий URL-адрес для конечной точки шлюза API
[Output]
public Output<string> APIEndpoint { get; set; }
Этот URL-адрес должен использоваться кодом JavaScript, хранящимся в корзине S3. JavaScript объединяется webpack во время сборки, а затем сохраняется в корзине S3 также с помощью Pulumi во время развертывания.
Каков наилучший способ передать этот URL-адрес в интерфейсный код пакета JavaScript?
Комментарии:
1. Установить переменную среды для webpack?
2. Но пакет webpack является частью сборки, и URL-адрес не известен до завершения развертывания. Кроме того, в зависимости от среды URL-адрес может отличаться в разных средах. Теперь, учитывая это, мне кажется, что Pulumi нужно сгенерировать что-то на Javascript в корзине S3, которая содержит URL-адрес, на который может ссылаться пакет, созданный webpack. Мне было интересно, является ли это лучшей практикой, которой придерживается большинство людей?
Ответ №1:
После некоторых исследований я решил использовать это решение.
URL-адрес времени развертывания вводится в объект window, как показано ниже
window['runtime-config'] = {
apiUrl: 'http://localhost:8080/api'
}
И он используется интерфейсом приложения
var value = document.getElementById("my_input").value;
const url = window["runtime-config"].apiUrl;
И runtime-config.js файл перезаписывается во время развертывания перед копированием в корзину S3
Func<string, Output<string>?> overwriteFiles = fileName => fileName == "runtime-config.js"? url.Apply(x=>$@"window['runtime-config'] = {{apiUrl: '${x}'}}") : null;
var objects = bucket.BucketName.Apply(bucketName => LoadFilesToS3(@"./public", bucketName, overwriteFiles));