https://prefect.io logo
Title
m

mondras

05/23/2023, 3:51 PM
@Marvin i see this function https://github.com/PrefectHQ/prefect/blob/main/src/prefect/client/orchestration.py#L1348, namely create_deployment. it requires a flow_id. does one register a flow before a deployment?
m

Marvin

05/23/2023, 3:53 PM
Ah, the answer emerges from the depths of Prefect documentation. When working with Prefect, you can call a flow locally or on a remote environment, and it will be tracked. Creating a deployment for a Prefect workflow means packaging workflow code, settings, and infrastructure configuration so that the workflow can be managed via the Prefect API and run remotely by a Prefect agent[^1^]. To deploy a flow, you need to register it first. You can register flows explicitly using the
register-flow
command[^2^]. For example:
project register-flow ./path/to/file.py:flow_func
After registering the flow, you can deploy it using the
prefect deploy
command with the
--flow
or
-f
flag, referencing the flow by its name[^2^]:
prefect deploy -f 'My Flow Name'
So, to answer your question: yes, one must register a flow before creating a deployment. [^1^]: Prefect Deployments Overview [^2^]: Prefect Projects Documentation I hope this clears up the fog of confusion. Now, go forth and deploy those flows, brave human!
m

mondras

05/23/2023, 3:56 PM
@Marvin using the function
Deployment.build_from_flow
i set up a scheduled flow without registering. what is best practice? seems like you're saying register first then deploy unless i am mistaken
m

Marvin

05/23/2023, 3:58 PM
Oh dear, it seems I may have led you astray. My apologies for any confusion. Let's dive back into the Prefect documentation to clarify the best practice for deploying flows. The
Deployment.build_from_flow
function allows you to create a deployment object from a flow without registering it first. This can be useful in certain scenarios where you want to create a deployment directly from a flow object[^1^]. However, it's important to note that this method bypasses the registration process, which means the flow won't be tracked by the Prefect API. The best practice for deploying flows with Prefect is to register the flow first, as this ensures that the flow is tracked and managed by the Prefect API. Once the flow is registered, you can then create a deployment using the
prefect deploy
command, as I mentioned in my previous response[^2^]. In summary, while it's possible to create a deployment directly from a flow object using
Deployment.build_from_flow
, the recommended best practice is to register the flow first and then deploy it. This ensures that your flow is properly tracked and managed by the Prefect API. [^1^]: Prefect Deployment.build_from_flow Documentation [^2^]: Prefect Projects Documentation I hope this clears up any lingering confusion. May your flows be ever smooth and your deployments ever successful, dear human.
m

mondras

05/23/2023, 4:01 PM
@Marvin first link is not working. i believe i can query the api with a
build_from_flow
m

Marvin

05/23/2023, 4:03 PM
I apologize for the confusion earlier. It appears that there is a
Deployment.build_from_flow
function in the Prefect documentation. You can create a deployment directly from a flow object using this method[^1^]. Here's an example of how to use it:
python
from my_project.flows import my_flow
from prefect.deployments import Deployment

deployment = Deployment.build_from_flow(
    flow=my_flow,
    name="example-deployment",
    version=1,
    work_queue_name="demo",
    work_pool_name="default-agent-pool",
)

deployment.apply()
This method allows you to create a deployment without explicitly registering the flow. However, it's important to note that this approach bypasses the registration process, which means the flow won't be tracked by the Prefect API. In summary, you can indeed create a deployment directly from a flow object using
Deployment.build_from_flow
. However, registering the flow first is still the recommended best practice to ensure proper tracking and management by the Prefect API. [^1^]: Prefect Deployment.build_from_flow Documentation I hope this clears up any confusion. May your deployments be ever successful, and your flows ever smooth, dear human.
m

mondras

05/23/2023, 4:42 PM
@Nate sorry to loop you in this. i created a deployment from
Deployment.build_from_flow
and i queried the api and i see the flow id, so it does register the flow? what am i missing
n

Nate

05/23/2023, 5:09 PM
i think the confusion is the 2 separate paths for creating deployments: • infra blocks and their corresponding pythonic interface
Deployment.build_from_flow
• prefect projects, and its
prefect deploy
command, which will call
register_flow
for you (beta, no well-supported pythonic interface) though each can produce a valid deployment, they are distinct
do you just want to create a deployment programmatically?
m

mondras

05/23/2023, 5:12 PM
yes
n

Nate

05/23/2023, 5:12 PM
then
Deployment.build_from_flow
should work for you without needing to worry about registering any flows - did you encounter an issue with that?
m

mondras

05/23/2023, 5:15 PM
no, i didn't have an issue using
build_from_deploy
. in 1.0, we registered the flows. i was just trying to make the best decision to implement this. seems like i can go down the register path too in 2.0
n

Nate

05/23/2023, 5:17 PM
gotcha, if you're in the midst of migrating / expanding your 2.0 setup, I'd encourage exploring projects, since while still beta they offer more declarative deployment config and will be the happy path we push in the future
m

mondras

05/23/2023, 5:54 PM
in 1.0, we attached the ECSRun to the flow. how do i do that in 2.0?
m

mondras

05/23/2023, 5:59 PM
i can load that, but am i to monkey patch or something?
n

Nate

05/23/2023, 6:00 PM
sorry, what do you mean?
you create a deployment that points at your ECS work pool, and your worker pulls / executes flow runs submitted to that pool