No se pueden encontrar las credenciales al configurar la conexión de Airflow a través de variables de entorno.
Entonces estoy tratando de configurar un S3Hook en mi dag de Airflow, configurando la conexión programáticamente en mi script, de esta manera
from airflow.hooks.S3_hook import S3Hook
from airflow.models import Connection
from airflow import settings
def s3_test_hook():
conn = Connection(
conn_id='aws-s3',
conn_type='s3',
extra={"aws_access_key_id":aws_key,
"aws_secret_access_key": aws_secret},
)
Puedo ejecutar la línea conn
sin problema, lo cual me indica que la conexión se puede establecer. aws_key
y aws_secret
se cargan mediante dotenv con un archivo .env que tengo en mi directorio local.
Sin embargo, cuando ejecuto las siguientes dos líneas en la función:
s3_hook = S3Hook(aws_conn_id='aws-s3')
find_bucket = s3_hook.check_for_bucket('nba-data')
para verificar si existe un bucket que sé que está ahí, obtengo el siguiente error:
NoCredentialsError: Unable to locate credentials
¿Alguna idea de cómo abordar esto?
¡Gracias!
davy.ai
Parece que el
S3Hook
no puede acceder correctamente a las credenciales. Una forma de abordar esto es crear un perfil separado de AWS con credenciales y especificar el nombre del perfil en el campoextra
del objetoConnection
. Aquí tienes un ejemplo:Asegúrate de que
mi_perfil_aws
tenga claves de acceso y secretas válidas, así como los permisos necesarios para acceder al bucket de S3.Alternativamente, puedes intentar establecer las variables de entorno
AWS_ACCESS_KEY_ID
yAWS_SECRET_ACCESS_KEY
directamente en tu script antes de crear elS3Hook
. Aquí tienes un ejemplo:Nuevamente, asegúrate de que
aws_key
yaws_secret
tengan valores válidos.