gpt4 book ai didi

python - AWS Elastic BeansTalk Django cronjob post 请求返回 403 错误

转载 作者:太空狗 更新时间:2023-10-30 00:10:05 25 4
gpt4 key购买 nike

我正在开发一个软件功能,我必须使用 Django + cron + AWS 定期删除文件。问题是我无法让它工作。让它发挥作用的最佳方法是什么?我是否缺少某些 AWS 配置?我已经配置了一个web 服务器 和一个worker 环境,并在它们上面部署了相同的应用程序版本。任务是映射到 urlview(访问执行函数的 url)。 worker 环境上有一条确认消息:

Successfully loaded 1 scheduled tasks from cron.yaml.

但在 worker access_log 上还有一个 403 错误:

"POST /networks_app/delete_expired_files HTTP/1.1" 403 2629 "-" "aws-sqsd/2.0"

cron.yaml:

version: 1
cron:
- name: "delete_expired_files"
url: "/networks_app/delete_expired_files"
schedule: "10 * * * *"

urls.py 的 url 映射:

urlpatterns = [
url(r'^delete_expired_files', views.delete_expired_files, name='delete_expired_files'),
]

删除 views.py 文件的函数:

def delete_expired_files(request):
users = DemoUser.objects.all()
for user in users:
documents = Document.objects.filter(owner=user.id)
if documents:
for doc in documents:
now = timezone.now()
if now >= doc.date_published + timedelta(days=doc.owner.group.valid_time):
doc.delete()

我的 IAM 角色是:

AmazonSQSFullAccess

AmazonS3FullAccess

AWSElasticBeanstalkFullAccess

AmazonDynamoDBFullAccess

如果我通过浏览器访问 url,则执行任务(删除过期文件)。但是,工作环境应该访问 url 并自动执行任务,而不仅仅是当我通过浏览器访问 url 时。我怎样才能让它发挥作用?

最佳答案

我遇到了类似的问题。就我而言,我需要修改两处才能使其正常工作:

  1. 确保 View 设置为接受来自 AWS 的 POST 操作。之前我将我的 View 设置为仅 GET,AWS 似乎不支持 GET cron 请求。

  2. 一旦它支持 POST,使其不受 CSRF 限制,这样当 AWS 发出缺少 CSRF token 的 POST 请求时,Django 就不会担心发生 CSRF 威胁。您可以使用 this SO answer 中描述的 @csrf_exempt 装饰器;就我而言,使用基于类的 View 仍然稍微复杂一些,我发现了这个 other SO answer关于如何在基于类的 View 中包含 @csrf_exempt 装饰器。

关于python - AWS Elastic BeansTalk Django cronjob post 请求返回 403 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35210876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com