Сохраняет ли SecretManagerServiceClient секреты во всех случаях остановки / запуска? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь использовать менеджер секретов, а не переменные среды для паролей БД и так далее. Но меня беспокоит производительность во время инициализации контейнера, если каждый раз для извлечения секретов требуется вызов API.

Советы по облаку GCP говорит:

Поскольку экземпляры контейнера масштабируются по мере необходимости, типичным методом является полная инициализация среды выполнения. Этот вид инициализации называется «холодный старт». Если клиентский запрос запускает холодный запуск, запуск экземпляра контейнера приводит к дополнительной задержке.

...

Оптимизация скорости запуска службы сводит к минимуму задержку, которая задерживает экземпляр контейнера от обслуживания запросов.

и

В Cloud Run нельзя предполагать, что состояние службы сохраняется между запросами. Однако Cloud Run повторно использует отдельные экземпляры контейнеров для обслуживания текущего трафика c, поэтому вы можете объявить переменную в глобальной области видимости, чтобы ее значение можно было повторно использовать в последующих вызовах. Получит ли какой-либо отдельный запрос выгоду от такого повторного использования, неизвестно заранее.

Трудно сказать из следующего образца кода для менеджера секретов, хранится ли что-нибудь в глобальной переменной для производительности. Я попытался и не смог найти исходный код SecretManagerServiceClient на GitHub.

public static void AccessSecretVersion(string projectId, string secretId, string secretVersion)
{
    SecretManagerServiceClient client = SecretManagerServiceClient.Create();

    // Create the request.
    var request = new AccessSecretVersionRequest
    {
        SecretVersionName = new SecretVersionName(projectId, secretId, secretVersion),
    };

    // Access the secret and print the result.
    //
    // WARNING: Do not print secrets in production environments. This
    // snippet is for demonstration purposes only.
    var version = client.AccessSecretVersion(request);
    string payload = version.Payload.Data.ToStringUtf8();
    Console.WriteLine($"Payload: {payload}");
}

Кто-нибудь знает, сохранятся ли секреты во всех экземплярах Cloud Run при их остановке и перезапуске?

1 Ответ

0 голосов
/ 30 марта 2020

Клиентские библиотеки Secret Manager используют API Secret Manager, отдельный от Cloud Run. Секретные данные не хранятся в экземплярах контейнера Cloud Run.

При этом экземпляры Cloud Run не «останавливаются и перезапускаются», а скорее «уничтожаются и воссоздаются» в зависимости от потребностей масштабирования. Таким образом, состояние каждого экземпляра контейнера будет уничтожено, и ваш контейнер должен получать доступ к секрету при каждом запуске.

...