Где разместить создание boto3.Session в моем приложении FastAPI?

Я обсуждаю, создать ли глобальный boto3.Session для моего клиента OpenSearch Python или создать новый сеанс в начале каждой конечной точки. Я нигде не могу найти документацию о том, когда истекает срок действия сеансов или истекает ли он. Каждый вызов boto3.Session() обходится мне в задержку в 50–100 мс, поэтому было бы здорово, если бы я мог просто создать глобальный звонок, и его срок действия никогда не истечет. Любые рекомендации будут очень признательны.

Контекст: я настроил веб-службу с балансировкой нагрузки в общедоступной подсети для подключения к моему кластеру OpenSearch в частной подсети, оба в одном VPC. Веб-служба балансировки нагрузки — это приложение FastAPI.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Срок действия boto3.Session не истекает, если не истекут ваши учетные данные. Таким образом, поддержание одного глобального сеанса имеет смысл.

Я не уверен, как структурирован ваш код, но вы можете найти базовый пример ниже:

from fastapi import FastAPI
import boto3

app = FastAPI()

session = boto3.Session() # ← global reusable boto3 session

@app.get("/some-endpoint")
def some_endpoint():
    client = session.client('opensearch')
    # ...
    return {"message": "Success"}

Огромное спасибо Илья!

faroukcharkas 22.06.2024 22:20

С таким же успехом вы можете добавить его в state при запуске приложения и получать к нему доступ в конечной точке с помощью request.state, как показано здесь и здесь . Это будет особенно полезно при работе с большими приложениями.

Chris 23.06.2024 08:44

Другие вопросы по теме