Madushan Pathirana
08/11/2025, 5:54 PMMarvin
08/11/2025, 5:54 PMMarvin
08/11/2025, 5:59 PMpip install "prefect[docker]"prefect work-pool create my-docker-pool --type dockeraws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <http://123456789012.dkr.ecr.us-east-1.amazonaws.com|123456789012.dkr.ecr.us-east-1.amazonaws.com>docker build -t <http://123456789012.dkr.ecr.us-east-1.amazonaws.com/prefect-cat:latest|123456789012.dkr.ecr.us-east-1.amazonaws.com/prefect-cat:latest> .
docker push <http://123456789012.dkr.ecr.us-east-1.amazonaws.com/prefect-cat:latest|123456789012.dkr.ecr.us-east-1.amazonaws.com/prefect-cat:latest>from prefect import flow, task
import httpx
@task(retries=2)
def get_cat_fact():
    url = "<https://catfact.ninja/fact>"
    with httpx.Client() as client:
        response = client.get(url)
        response.raise_for_status()
        fact = response.json()["fact"]
        print(f"Cat Fact: {fact}")
    return fact
@flow(name="Cat Fact Flow", log_prints=True)
def cat_fact_flow():
    print("Starting the cat fact flow!")
    for _ in range(3):
        get_cat_fact()
    print("Flow finished successfully.")
if __name__ == "__main__":
    cat_fact_flow.deploy(
        name="my-deployment",
        work_pool_name="my-docker-pool",
        image="<http://123456789012.dkr.ecr.us-east-1.amazonaws.com/prefect-cat:latest|123456789012.dkr.ecr.us-east-1.amazonaws.com/prefect-cat:latest>",
        build=False,  # image already built
        push=False,   # image already pushed
    )prefect worker start -p my-docker-poolprefecthttpxdocker logincat_fact_flow.from_source(
    source="<https://github.com/you/your-repo>",
    entrypoint="path/to/script.py:cat_fact_flow",
).deploy(
    name="my-deployment",
    work_pool_name="my-docker-pool",
    image="<http://123456789012.dkr.ecr.us-east-1.amazonaws.com/prefect-cat:latest|123456789012.dkr.ecr.us-east-1.amazonaws.com/prefect-cat:latest>",
    build=False,
    push=False,
)aws ecr get-login-password | docker loginMarvin
08/11/2025, 5:59 PMimagebuild=False, push=FalseMadushan Pathirana
08/12/2025, 2:49 AMMarvin
08/12/2025, 2:49 AMMarvin
08/12/2025, 2:49 AMprefect work-pool create my-docker-pool --type dockeraws ecr create-repository --repository-name prefect-cat --region us-east-1aws ecr get-login-password --region us-east-1 \
| docker login --username AWS --password-stdin <http://123456789012.dkr.ecr.us-east-1.amazonaws.com|123456789012.dkr.ecr.us-east-1.amazonaws.com>from prefect import flow, task
from prefect.docker import DockerImage
import httpx
@task(retries=2)
def get_cat_fact():
    with httpx.Client() as client:
        r = client.get("<https://catfact.ninja/fact>")
        r.raise_for_status()
        print(r.json()["fact"])
@flow(name="Cat Fact Flow", log_prints=True)
def cat_fact_flow():
    for _ in range(3):
        get_cat_fact()
if __name__ == "__main__":
    cat_fact_flow.deploy(
        name="my-deployment",
        work_pool_name="my-docker-pool",
        image=DockerImage(
            name="<http://123456789012.dkr.ecr.us-east-1.amazonaws.com/prefect-cat|123456789012.dkr.ecr.us-east-1.amazonaws.com/prefect-cat>",
            tag="v1",
            dockerfile="Dockerfile",  # local file; use path if it's elsewhere
        ),
        build=True,  # build locally using the Dockerfile
        push=True,   # push to ECR (must be logged in)
    )build=False, push=Falseimage="123...ecr.../repo:tag"Madushan Pathirana
08/12/2025, 2:52 AMMarvin
08/12/2025, 2:52 AMMarvin
08/12/2025, 2:53 AMbuild=False, push=Falseaws ecr get-login-password ... | docker login ...from prefect import flow, task
from prefect.docker import DockerImage
@task
def t(): print("hi")
@flow
def f(): t()
if __name__ == "__main__":
    f.deploy(
        name="ecr-deploy",
        work_pool_name="my-docker-pool",
        image=DockerImage(
            name="<http://123456789012.dkr.ecr.us-east-1.amazonaws.com/prefect-cat|123456789012.dkr.ecr.us-east-1.amazonaws.com/prefect-cat>",
            tag="v1",
            dockerfile="Dockerfile",  # local Dockerfile
        ),
        build=True,   # build locally
        push=True,    # push to ECR (must be logged in)
    )aws ecr create-repository --repository-name prefect-cat --region us-east-1Madushan Pathirana
08/12/2025, 5:12 AMMarvin
08/12/2025, 5:12 AMMarvin
08/12/2025, 5:13 AMpush: falsejob_variablesname: src
prefect-version: 3.4.11
build:
- prefect_docker.deployments.steps.build_docker_image:
    id: build_image
    requires: prefect-docker>=0.3.1
    image_name: <http://123456789012.dkr.ecr.us-east-1.amazonaws.com/prefect-flows|123456789012.dkr.ecr.us-east-1.amazonaws.com/prefect-flows>
    tag: latest
    dockerfile: Dockerfile.prefect_flows
push:
- prefect_docker.deployments.steps.push_docker_image:
    requires: prefect-docker>=0.3.1
    image_name: '{{ build_image.image_name }}'
    tag: '{{ build_image.tag }}'
pull:
- prefect.deployments.steps.set_working_directory:
    directory: /opt/prefect/src
deployments:
- name: local-test
  entrypoint: flows/test_flow.py:cat_fact_flow
  parameters: {}
  schedule: {}
  tags: []
  work_pool:
    name: my-docker-pool-2
    work_queue_name: default
    job_variables:
      image: '{{ build_image.image }}'   # resolves to "<image_name>:<tag>"aws ecr create-repository --repository-name prefect-flows --region us-east-1prefect deployaws ecr get-login-password --region us-east-1 \
| docker login --username AWS --password-stdin <http://123456789012.dkr.ecr.us-east-1.amazonaws.com|123456789012.dkr.ecr.us-east-1.amazonaws.com>prefect-docker>=0.3.1prefect deploy
prefect worker start -p my-docker-pool-2Dockerfile.prefect_flows<http://123456789012.dkr.ecr.us-east-1.amazonaws.com/prefect-flows:latest|123456789012.dkr.ecr.us-east-1.amazonaws.com/prefect-flows:latest>imagedocker login