Jacob Goldberg
05/28/2021, 5:07 PM[2021-05-28 09:59:27-0700] INFO - prefect.Docker | Pushing image to the registry...
Traceback (most recent call last):
File "flow_registry.py", line 44, in <module>
build_and_register_all_flows(all_flows)
File "flow_registry.py", line 35, in build_and_register_all_flows
storage = storage.build()
File "/XXX/XXX/XXX/XXX/XXX/XXX/XXX/new_etl/venv/lib/python3.8/site-packages/prefect/storage/docker.py", line 303, in build
self._build_image(push=push)
File "/XXX/XXX/XXX/XXX/XXX/XXX/XXX/new_etl/venv/lib/python3.8/site-packages/prefect/storage/docker.py", line 378, in _build_image
self.push_image(full_name, self.image_tag)
File "/XXX/XXX/XXX/XXX/XXX/XXX/XXX/new_etl/venv/lib/python3.8/site-packages/prefect/storage/docker.py", line 586, in push_image
raise InterruptedError(line.get("error"))
InterruptedError: denied: Your authorization token has expired. Reauthenticate and try again.
This is confusing to me, because I have double checked that my local AWS authentication is all setup properly in the environment. Is this referring to something else? Relatively new to Docker, ECR, and Prefect. Any help appreciated! Any ideas?Kevin Kho
push_image
so this seems like an ECR thing. I’ll look for a way to test itJacob Goldberg
05/28/2021, 5:11 PMKevin Kho
aws ecr describe-repositories
?Kevin Kho
aws ecr describe-images --repository-name amazonlinux
Jacob Goldberg
05/28/2021, 5:16 PMKevin Kho
Jacob Goldberg
05/28/2021, 5:17 PMKevin Kho
Jacob Goldberg
05/28/2021, 5:17 PMJacob Goldberg
05/28/2021, 5:18 PM{
"imageDetails": [
{
"registryId": "XXXXX0963009",
"repositoryName": "cal_val_etl_flows",
"imageDigest": "sha256:XXXXXXXXXXXXXXXXXXXXXXXXXdb5c9ddc8792f9257c538a7dbc59c3",
"imageTags": [
"latest"
],
"imageSizeInBytes": 136773128,
"imagePushedAt": "2021-05-27T17:16:13-07:00",
"imageManifestMediaType": "application/vnd.docker.distribution.manifest.v2+json",
"artifactMediaType": "application/vnd.docker.container.image.v1+json"
}
Jacob Goldberg
05/28/2021, 5:18 PMJacob Goldberg
05/28/2021, 5:19 PMJacob Goldberg
05/28/2021, 5:19 PMKevin Kho
aws ecr get-authorization-token
in the command line and then check when it expires?Jacob Goldberg
05/28/2021, 5:25 PMJacob Goldberg
05/28/2021, 5:25 PMJacob Goldberg
05/28/2021, 5:26 PMJacob Goldberg
05/28/2021, 5:27 PMKevin Kho
Kevin Kho
storage = Docker(registry_url="<http://123454324543.dkr.ecr.us-east-2.amazonaws.com|123454324543.dkr.ecr.us-east-2.amazonaws.com>",
dockerfile="Dockerfile")
flow.storage = storage
Jacob Goldberg
05/28/2021, 6:06 PM...
all_flows = [test_flow_1, test_flow_2]
# define flow storage/config
STORAGE = Docker(registry_url='<http://XXXXX963009.dkr.ecr.us-east-1.amazonaws.com/|XXXXX963009.dkr.ecr.us-east-1.amazonaws.com/>',
image_name='cal_val_etl_flows',
image_tag='latest',
python_dependencies=required,
# copy all relevant files into docker container
files={os.path.dirname(os.path.dirname(os.path.realpath(__file__))): "."}
)
RUN_CONFIG = ECSRun(run_task_kwargs={'cluster': 'cal_val_etl_cluster'},
execution_role_arn='arn:aws:iam::XXXXX963009',
labels=['ecs', 'dev'])
def build_and_register_all_flows(flow_list, storage=STORAGE, run_config=RUN_CONFIG):
# assign run config and storage to all flows
for flow in flow_list:
flow.run_config = run_config
storage.add_flow(flow)
# build the Docker Image
storage = storage.build()
for flow in flow_list:
# Reassign the new storage object to each Flow
flow.storage = storage
# Register each flow without building a second time
flow.register(project_name="cal_val_etl", build=False)
build_and_register_all_flows(all_flows)
Kevin Kho
from prefect import Flow, task
from prefect.storage import Docker
@task
def abc():
return 1
with Flow("abc") as flow:
abc()
storage = Docker(registry_url="<http://123454324543.dkr.ecr.us-east-2.amazonaws.com|123454324543.dkr.ecr.us-east-2.amazonaws.com>",
dockerfile="Dockerfile")
flow.storage = storage
flow.register("project_name")
Jacob Goldberg
05/28/2021, 6:33 PMSTORAGE = Docker(registry_url='<http://XXXXXX963009.dkr.ecr.us-east-1.amazonaws.com/|XXXXXX963009.dkr.ecr.us-east-1.amazonaws.com/>',
image_name='cal_val_etl_flows',
image_tag='latest',
python_dependencies=required,
# copy all relevant files into docker container
files={os.path.dirname(os.path.dirname(os.path.realpath(__file__))): "."}
)
and i get the same errorKevin Kho
aws ecr get-login-password --region us-east-2 | docker login --username AWS --password-stdin <http://123456678.dkr.ecr.us-east-2.amazonaws.com|123456678.dkr.ecr.us-east-2.amazonaws.com>
Kevin Kho
Kevin Kho
Jacob Goldberg
05/28/2021, 7:13 PMJacob Goldberg
05/28/2021, 7:13 PMKevin Kho
Jacob Goldberg
05/28/2021, 7:14 PM