Bernard Greyling
07/17/2020, 2:07 PMAWS_CREDENTIALS
to dict as is did in 0.12.3
.
eg.
cat <<EOF > ~/.prefect/config.toml
[context.secrets]
AWS_CREDENTIALS='{"ACCESS_KEY": "${AWS_ACCESS_KEY_ID}", "SECRET_ACCESS_KEY": "${AWS_SECRET_ACCESS_KEY}"}'
DASK_GATEWAY_URL="${DASK_GATEWAY_URL}"
SLACK_WEBHOOK_URL="${SLACK_WEBHOOK_URL}"
[flows]
CHECKPOINTING=true
EOF
...
>> flow.storage = S3(<>)
>> flow.register('Report')
/usr/local/lib/python3.7/site-packages/prefect/utilities/aws.py in get_boto_client(resource, credentials, use_session, **kwargs)
36 else:
37 ctx_credentials = prefect.context.get("secrets", {}).get("AWS_CREDENTIALS", {})
---> 38 aws_access_key = ctx_credentials.get("ACCESS_KEY")
39 aws_secret_access_key = ctx_credentials.get("SECRET_ACCESS_KEY")
40 aws_session_token = ctx_credentials.get("SESSION_TOKEN")
AttributeError: 'str' object has no attribute 'get'
Does line 37 need something like:
ctx_credentials = json.load(prefect.context.get("secrets", {}).get("AWS_CREDENTIALS", {}))
or perhaps a schema validated load like:
from marshmallow import Schema, fields
class AWS_CREDENTIALS_Schema(Schema):
ACCESS_KEY = fields.Str(required=True)
SECRET_ACCESS_KEY = fields.Str(required=True)
SESSION_TOKEN = fields.Str(required=False)
...
schema = AWS_CREDENTIALS_Schema()
ctx_credentials = schema.load(prefect.context.get("secrets", {}).get("AWS_CREDENTIALS", {}))
nicholas
07/17/2020, 2:19 PMBernard Greyling
07/17/2020, 2:20 PMnicholas
07/17/2020, 2:20 PMMarvin
07/17/2020, 2:20 PMBernard Greyling
07/17/2020, 2:22 PMnicholas
07/17/2020, 2:22 PM