NoCredentialsError botocore.exceptions.NoCredentialsError:即使在传递凭据后也无法找到凭据

时间:2019-10-02 10:30:20

标签: python-3.x amazon-web-services docker boto3 amazon-sqs

我正在将消息发送到Flask应用程序内的SQS队列。 我正在使用https://github.com/vsouza/docker-SQS-local在本地模拟此SQS功能。

我正在为函数内部的boto3.client()设置凭据。 当我运行直接在Pycharm中发送消息的功能时,它会将消息发送到SQS队列。

但是当我对这个Flask应用程序进行docker化并调用触发该功能的端点时,它会抛出错误。

  

提高NoCredentialsError botocore.exceptions.NoCredentialsError:   无法找到凭据

这是发送消息的代码。

def send_mes():
    config = Config()
    sqs = boto3.client('sqs', aws_access_key_id=None, aws_secret_access_key=None,
                       endpoint_url=config.QUEUE_ENDPOINT_URL, region_name='default')
    feeder_queue = config.FEEDER_QUEUE

    def inside_fun():
        while True:
            resp = sqs.send_message(
                QueueUrl=feeder_queue,
                MessageBody=(
                    f'Sample message for Queue at {datetime.now()}.'
                )
            )
            print(resp)
            time.sleep(3)

    t1 = threading.Thread(target=inside_fun)
    t2 = threading.Thread(target=inside_fun)

    t1.start()
    t2.start()

    t1.join()
    t2.join()


if __name__ == '__main__':
    send_mes()

请指出我在哪里犯错了?

1 个答案:

答案 0 :(得分:0)

我设置环境变量并使其起作用,而不是直接在代码中将AWS凭证直接传递给客户端。