I was deploying a flow in a docker container by pulling it from Dockerhub then run it in Orion server on my local machine. The flow would download raw data, do some transformation then upload it to a GCP bucket. Everything runs well except for the GCP credential block.
I then ran the deployment after pushing the docker image to dockerhub.
The server to run the flow is a standard Orion one.
The agent is also standard.
Encountered exception during execution:
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/prefect/blocks/core.py", line 696, in load
return cls._from_block_document(block_document)
File "/usr/local/lib/python3.9/site-packages/prefect/blocks/core.py", line 551, in _from_block_document
block = block_cls.parse_obj(block_document.data)
File "pydantic/main.py", line 527, in pydantic.main.BaseModel.parse_obj
File "/usr/local/lib/python3.9/site-packages/prefect/blocks/core.py", line 183, in __init__
super().__init__(*args, **kwargs)
File "pydantic/main.py", line 342, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for GcsBucket
gcp_credentials -> service_account_file
The provided path to the service account is invalid (type=value_error)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/prefect/engine.py", line 1445, in orchestrate_task_run
result = await run_sync(task.fn, *args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/prefect/utilities/asyncutils.py", line 156, in run_sync_in_interruptible_worker_thread
tg.start_soon(
File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 662, in __aexit__
raise exceptions[0]
File "/usr/local/lib/python3.9/site-packages/anyio/to_thread.py", line 31, in run_sync
return await get_asynclib().run_sync_in_worker_thread(
File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 937, in run_sync_in_worker_thread
return await future
File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 867, in run
result = context.run(func, *args)
File "/usr/local/lib/python3.9/site-packages/prefect/utilities/asyncutils.py", line 135, in capture_worker_thread_and_result
result = __fn(*args, **kwargs)
File "flows/03_deployment/parameterized_flow.py", line 42, in write_gcs
gcp_block = GcsBucket.load("zoom-gcs")
File "/usr/local/lib/python3.9/site-packages/prefect/utilities/asyncutils.py", line 226, in coroutine_wrapper
return run_async_from_worker_thread(async_fn, *args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/prefect/utilities/asyncutils.py", line 177, in run_async_from_worker_thread
return anyio.from_thread.run(call)
File "/usr/local/lib/python3.9/site-packages/anyio/from_thread.py", line 49, in run
return asynclib.run_async_from_thread(func, *args)
File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 970, in run_async_from_thread
return f.result()
File "/usr/local/lib/python3.9/concurrent/futures/_base.py", line 446, in result
return self.__get_result()
File "/usr/local/lib/python3.9/concurrent/futures/_base.py", line 391, in __get_result
raise self._exception
File "/usr/local/lib/python3.9/site-packages/prefect/client/utilities.py", line 47, in with_injected_client
return await fn(*args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/prefect/blocks/core.py", line 710, in load
raise RuntimeError(
RuntimeError: Unable to load 'zoom-gcs' of block type None due to failed validation. To load without validation, try loading again with `validate=False`.
03:58:27 PM
write_gcs-67f8f48e-0
Finished in state Failed('Task run encountered an exception: Traceback (most recent call last):\n File "/usr/local/lib/python3.9/site-packages/prefect/blocks/core.py", line 696, in load\n return cls._from_block_document(block_document)\n File "/usr/local/lib/python3.9/site-packages/prefect/blocks/core.py", line 551, in _from_block_document\n block = block_cls.parse_obj(block_document.data)\n File "pydantic/main.py", line 527, in pydantic.main.BaseModel.parse_obj\n File "/usr/local/lib/python3.9/site-packages/prefect/blocks/core.py", line 183, in __init__\n super().__init__(*args, **kwargs)\n File "pydantic/main.py", line 342, in pydantic.main.BaseModel.__init__\npydantic.error_wrappers.ValidationError: 1 validation error for GcsBucket\ngcp_credentials -> service_account_file\n The provided path to the service account is invalid (type=value_error)\n\nThe above exception was the direct cause of the following exception:\n\nRuntimeError: Unable to load \'zoom-gcs\' of block type None due to failed validation. To load without validation, try loading again with `validate=False`.\n')
03:58:27 PM
write_gcs-67f8f48e-0
Encountered exception during execution:
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/prefect/blocks/core.py", line 696, in load
return cls._from_block_document(block_document)
File "/usr/local/lib/python3.9/site-packages/prefect/blocks/core.py", line 551, in _from_block_document
block = block_cls.parse_obj(block_document.data)
File "pydantic/main.py", line 527, in pydantic.main.BaseModel.parse_obj
File "/usr/local/lib/python3.9/site-packages/prefect/blocks/core.py", line 183, in __init__
super().__init__(*args, **kwargs)
File "pydantic/main.py", line 342, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for GcsBucket
gcp_credentials -> service_account_file
The provided path to the service account is invalid (type=value_error)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/prefect/engine.py", line 636, in orchestrate_flow_run
result = await run_sync(flow_call)
File "/usr/local/lib/python3.9/site-packages/prefect/utilities/asyncutils.py", line 156, in run_sync_in_interruptible_worker_thread
tg.start_soon(
File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 662, in __aexit__
raise exceptions[0]
File "/usr/local/lib/python3.9/site-packages/anyio/to_thread.py", line 31, in run_sync
return await get_asynclib().run_sync_in_worker_thread(
File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 937, in run_sync_in_worker_thread
return await future
File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 867, in run
result = context.run(func, *args)
File "/usr/local/lib/python3.9/site-packages/prefect/utilities/asyncutils.py", line 135, in capture_worker_thread_and_result
result = __fn(*args, **kwargs)
File "flows/03_deployment/parameterized_flow.py", line 56, in etl_web_to_gcs
write_gcs(path)
File "/usr/local/lib/python3.9/site-packages/prefect/tasks.py", line 436, in __call__
return enter_task_run_engine(
File "/usr/local/lib/python3.9/site-packages/prefect/engine.py", line 926, in enter_task_run_engine
return run_async_from_worker_thread(begin_run)
File "/usr/local/lib/python3.9/site-packages/prefect/utilities/asyncutils.py", line 177, in run_async_from_worker_thread
return anyio.from_thread.run(call)
File "/usr/local/lib/python3.9/site-packages/anyio/from_thread.py", line 49, in run
return asynclib.run_async_from_thread(func, *args)
File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 970, in run_async_from_thread
return f.result()
File "/usr/local/lib/python3.9/concurrent/futures/_base.py", line 446, in result
return self.__get_result()
File "/usr/local/lib/python3.9/concurrent/futures/_base.py", line 391, in __get_result
raise self._exception
File "/usr/local/lib/python3.9/site-packages/prefect/engine.py", line 1064, in get_task_call_return_value
return await future._result()
File "/usr/local/lib/python3.9/site-packages/prefect/futures.py", line 237, in _result
return await final_state.result(raise_on_failure=raise_on_failure, fetch=True)
File "/usr/local/lib/python3.9/site-packages/prefect/states.py", line 89, in _get_state_result
raise await get_state_exception(state)
File "/usr/local/lib/python3.9/site-packages/prefect/engine.py", line 1445, in orchestrate_task_run
result = await run_sync(task.fn, *args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/prefect/utilities/asyncutils.py", line 156, in run_sync_in_interruptible_worker_thread
tg.start_soon(
File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 662, in __aexit__
raise exceptions[0]
File "/usr/local/lib/python3.9/site-packages/anyio/to_thread.py", line 31, in run_sync
return await get_asynclib().run_sync_in_worker_thread(
File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 937, in run_sync_in_worker_thread
return await future
File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 867, in run
result = context.run(func, *args)
File "/usr/local/lib/python3.9/site-packages/prefect/utilities/asyncutils.py", line 135, in capture_worker_thread_and_result
result = __fn(*args, **kwargs)
File "flows/03_deployment/parameterized_flow.py", line 42, in write_gcs
gcp_block = GcsBucket.load("zoom-gcs")
File "/usr/local/lib/python3.9/site-packages/prefect/utilities/asyncutils.py", line 226, in coroutine_wrapper
return run_async_from_worker_thread(async_fn, *args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/prefect/utilities/asyncutils.py", line 177, in run_async_from_worker_thread
return anyio.from_thread.run(call)
File "/usr/local/lib/python3.9/site-packages/anyio/from_thread.py", line 49, in run
return asynclib.run_async_from_thread(func, *args)
File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 970, in run_async_from_thread
return f.result()
File "/usr/local/lib/python3.9/concurrent/futures/_base.py", line 446, in result
return self.__get_result()
File "/usr/local/lib/python3.9/concurrent/futures/_base.py", line 391, in __get_result
raise self._exception
File "/usr/local/lib/python3.9/site-packages/prefect/client/utilities.py", line 47, in with_injected_client
return await fn(*args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/prefect/blocks/core.py", line 710, in load
raise RuntimeError(
RuntimeError: Unable to load 'zoom-gcs' of block type None due to failed validation. To load without validation, try loading again with `validate=False`.
03:58:27 PM
Finished in state Failed('Flow run encountered an exception. Traceback (most recent call last):\n File "/usr/local/lib/python3.9/site-packages/prefect/blocks/core.py", line 696, in load\n return cls._from_block_document(block_document)\n File "/usr/local/lib/python3.9/site-packages/prefect/blocks/core.py", line 551, in _from_block_document\n block = block_cls.parse_obj(block_document.data)\n File "pydantic/main.py", line 527, in pydantic.main.BaseModel.parse_obj\n File "/usr/local/lib/python3.9/site-packages/prefect/blocks/core.py", line 183, in __init__\n super().__init__(*args, **kwargs)\n File "pydantic/main.py", line 342, in pydantic.main.BaseModel.__init__\npydantic.error_wrappers.ValidationError: 1 validation error for GcsBucket\ngcp_credentials -> service_account_file\n The provided path to the service account is invalid (type=value_error)\n\nThe above exception was the direct cause of the following exception:\n\nRuntimeError: Unable to load \'zoom-gcs\' of block type None due to failed validation. To load without validation, try loading again with `validate=False`.\n')
I guess for some reason prefect inside the container cannot read the credential file on my local machine. I tried mounting the path to my credential file in the Dockerfile but it also did not work.