Hi, I am trying to save an ECS block from circleci...
# ask-community
n
Hi, I am trying to save an ECS block from circleci deployment but getting a
401 Unauthorized error
. Works fine locally. What am I doing wrong? (details in next message)
Copy code
Traceback (most recent call last):
  File "/home/circleci/coveredinc/stride-enrollment-flows/deploy.py", line 9, in <module>
    from enrollment_flows.prefect.blocks.ecs import ecs_task_block
  File "/home/circleci/coveredinc/stride-enrollment-flows/enrollment_flows/prefect/blocks/ecs.py", line 77, in <module>
    ecs_task_block.save(f'{env}-ecs-block', overwrite=True)
  File "/home/circleci/coveredinc/stride-enrollment-flows/venv/lib/python3.9/site-packages/prefect/utilities/asyncutils.py", line 205, in coroutine_wrapper
    return run_async_in_new_loop(async_fn, *args, **kwargs)
  File "/home/circleci/coveredinc/stride-enrollment-flows/venv/lib/python3.9/site-packages/prefect/utilities/asyncutils.py", line 156, in run_async_in_new_loop
    return anyio.run(partial(__fn, *args, **kwargs))
  File "/home/circleci/coveredinc/stride-enrollment-flows/venv/lib/python3.9/site-packages/anyio/_core/_eventloop.py", line 70, in run
    return asynclib.run(func, *args, **backend_options)
  File "/home/circleci/coveredinc/stride-enrollment-flows/venv/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 292, in run
    return native_run(wrapper(), debug=debug)
  File "/home/circleci/.pyenv/versions/3.9.0/lib/python3.9/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/home/circleci/.pyenv/versions/3.9.0/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
    return future.result()
  File "/home/circleci/coveredinc/stride-enrollment-flows/venv/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 287, in wrapper
    return await func(*args)
  File "/home/circleci/coveredinc/stride-enrollment-flows/venv/lib/python3.9/site-packages/prefect/blocks/core.py", line 798, in save
    document_id = await self._save(name=name, overwrite=overwrite, client=client)
  File "/home/circleci/coveredinc/stride-enrollment-flows/venv/lib/python3.9/site-packages/prefect/client/utilities.py", line 47, in with_injected_client
    return await fn(*args, **kwargs)
  File "/home/circleci/coveredinc/stride-enrollment-flows/venv/lib/python3.9/site-packages/prefect/blocks/core.py", line 751, in _save
    await self.register_type_and_schema(client=client)
  File "/home/circleci/coveredinc/stride-enrollment-flows/venv/lib/python3.9/site-packages/prefect/client/utilities.py", line 47, in with_injected_client
    return await fn(*args, **kwargs)
  File "/home/circleci/coveredinc/stride-enrollment-flows/venv/lib/python3.9/site-packages/prefect/blocks/core.py", line 686, in register_type_and_schema
    await field.type_.register_type_and_schema(client=client)
  File "/home/circleci/coveredinc/stride-enrollment-flows/venv/lib/python3.9/site-packages/prefect/client/utilities.py", line 47, in with_injected_client
    return await fn(*args, **kwargs)
  File "/home/circleci/coveredinc/stride-enrollment-flows/venv/lib/python3.9/site-packages/prefect/blocks/core.py", line 693, in register_type_and_schema
    block_type = await client.read_block_type_by_slug(
  File "/home/circleci/coveredinc/stride-enrollment-flows/venv/lib/python3.9/site-packages/prefect/client/orion.py", line 1005, in read_block_type_by_slug
    response = await self._client.get(f"/block_types/slug/{slug}")
  File "/home/circleci/coveredinc/stride-enrollment-flows/venv/lib/python3.9/site-packages/httpx/_client.py", line 1757, in get
    return await self.request(
  File "/home/circleci/coveredinc/stride-enrollment-flows/venv/lib/python3.9/site-packages/httpx/_client.py", line 1533, in request
    return await self.send(request, auth=auth, follow_redirects=follow_redirects)
  File "/home/circleci/coveredinc/stride-enrollment-flows/venv/lib/python3.9/site-packages/prefect/client/base.py", line 251, in send
    response.raise_for_status()
  File "/home/circleci/coveredinc/stride-enrollment-flows/venv/lib/python3.9/site-packages/httpx/_models.py", line 749, in raise_for_status
    raise HTTPStatusError(message, request=request, response=self)
httpx.HTTPStatusError: Client error '401 Unauthorized' for url '<https://api.prefect.cloud/api/accounts/adee12e2-25d9-428a-9a77-32d8d7ca2ac7/workspaces/28562586-0812-4e92-803f-99ce64384cbd/block_types/slug/aws-credentials>'
For more information check: <https://httpstatuses.com/401>
Here’s my code:
Copy code
ecs_task_block = ECSTask(
    task_definition_arn=task_def_arn,
    cluster=f'{env}-prefect-cluster',
    image=f'{aws_account_id}.<http://dkr.ecr.us-west-1.amazonaws.com/{env}-stride-enrollment-flows-ecr:{ecr_image_tag}|dkr.ecr.us-west-1.amazonaws.com/{env}-stride-enrollment-flows-ecr:{ecr_image_tag}>',
    vpc_id=vpcs[env],
    task_customizations=[
        {
            "op": "add",
            "path": "/networkConfiguration",
            "value": {
                "awsvpcConfiguration": {
                    "subnets" : subnets[env],
                    "securityGroups" : security_groups[env],
                    "assignPublicIp" : "DISABLED"
                }
            }
        }
    ],
    configure_cloudwatch_logs=True,
    stream_output=True,
)
ecs_task_block.save(f'{env}-ecs-block', overwrite=True)
I have tried running this locally and it works:
Copy code
curl -v -H 'Authorization: Bearer <MY_ACCESS_KEY>' <https://api.prefect.cloud/api/accounts/adee12e2-25d9-428a-9a77-32d8d7ca2ac7/workspaces/28562586-0812-4e92-803f-99ce64384cbd/health>
j
Seconding what red square said. Do you have ‘PREFECT_API_KEY’ and ‘PREFECT_API_URL’ set?
n
where do I set it? In the environment variables?
j
Yes, in env variables
n
I believe it’s already set in the environment
btw, I don’t have it in my local setup but it still works
j
Yes, it’s possible that you already logged in locally
n
and on circleci I am logging into prefect cloud with
-w
flag set
prefect cloud login -k $PREFECT2_API_KEY -w stride-health/tooling
j
Could you verify that api key matches up with what you used locally or if it’s the correct one associated with the service account if that’s what you’re using?