es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Intentando escribir archivos en la carpeta dags.

Estoy intentando crear carpetas y escribir archivos en la carpeta “dags” que se encuentra en un bucket de Google Cloud Storage. Esto lo hago utilizando Airflow con el siguiente código Python:

Path('/home/airflow/gcs/dags/API/config').mkdir(parents=True, exist_ok=True) 
with open(file='/home/airflow/gcs/dags/API/config/config.json', mode= 'w') as out_file:
    out_file.write(json_string)

No se genera ningún error y sin embargo no se crea ninguna carpeta ni archivo en ningún lugar.
He intentado el mismo método con el directorio de datos y funciona correctamente.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Podría haber varias razones por las cuales los comandos mkdir y open no están creando las carpetas y archivos esperados:

    1. Asegúrese de que el worker de Airflow tenga los permisos necesarios para escribir en la carpeta dags en el bucket de GCS. Verifique los roles y permisos IAM para la cuenta de servicio asociada con el worker de Airflow.
    2. Verifique nuevamente que la ruta hacia la carpeta dags sea correcta. Debe tener el formato gs://<nombre_bucket>/dags.

    3. Modifique el código Python para utilizar explícitamente la biblioteca google-cloud-storage para interactuar con GCS en lugar de utilizar el sistema de archivos local. Esto garantizará que el código escriba correctamente en el bucket de GCS en lugar de intentar crear carpetas y archivos localmente.

    Aquí tienes un ejemplo de cómo escribir un archivo en GCS utilizando google-cloud-storage:

    from google.cloud import storage
    
    storage_client = storage.Client()
    bucket_name = 'mi_bucket'
    bucket = storage_client.bucket(bucket_name)
    
    # crear carpeta si no existe
    blob_folder = bucket.blob('dags/API/config/')
    if not blob_folder.exists():
        blob_folder.upload_from_string('')
    
    # escribir archivo en la carpeta
    blob_file = bucket.blob('dags/API/config/config.json')
    blob_file.upload_from_string(json_string)
    

    Este fragmento de código crea una carpeta y un archivo en el directorio dags/API/config de un bucket de GCS llamado mi_bucket. Reemplaza la variable bucket_name con el nombre de tu bucket.

    Al utilizar la biblioteca google-cloud-storage, el código ahora escribe explícitamente en GCS en lugar de intentar crear carpetas y archivos en el sistema de archivos local.

Comments are closed.