我在具有Web服务器和工作人员环境的Elastic beantalk上有一个docker应用程序。
worker环境当前通过cron运行计划的作业。 我正在尝试将服务器连接到工作器以实现以下目的:
我无法找到有关JSON消息外观的文档。 in the official documentation中提到了一些HTTP标头。但是没有提到头文件来指定工作环境中的所需端点。
#server.py
from bottle import post, HTTPResponse
@post('/trigger_job')
def trigger_worker_job():
# should send a JSON message to sqs to trigger the '/perform_job'
# Need help with what the JSON message looks like
return HTTPResponse(status=200, body={'Msg': 'Sent message'})
from bottle import post, HTTPResponse
@post('/perform_job')
def perform_job():
# job is performed in the worker environment
return HTTPResponse(status=200, body={'Msg': 'Success'})
答案 0 :(得分:0)
在Python中,您可以从python示例应用程序中看到如何在aws doc step 4: Deploy a New Application Version上找到它。
您可以在beanstalk worker环境控制台中配置SQS端点。配置>工人>选择一个工人队列
# for example:
environ['HTTP_X_AWS_SQSD_TASKNAME']
environ['HTTP_X_AWS_SQSD_SCHEDULED_AT']
logger.info("environ X-Aws-Sqsd-Queue %s" % environ['HTTP_X_AWS_SQSD_QUEUE'])
# regarding your message attribute. For example, the attribute name is Email,
# you can extract it via environ['HTTP_X_AWS_SQSD_ATTR_EMAIL']).
# Make sure that the attribute name is all capital.
logger.info("environ X-Aws-Sqsd-Attr Email %s" % environ['HTTP_X_AWS_SQSD_ATTR_EMAIL'])
该消息将在图像中包含以下信息。您可以在aws AWS Elastic Beanstalk Worker Environments
上阅读更多内容答案 1 :(得分:0)
我从死信队列中某些失败的cron作业中发现了以下三个属性:
与cron作业上设置的属性类似。
您可以在SQS队列中为工作人员环境手动创建新消息,并设置这些属性以匹配您希望执行的cron作业,尽管这很繁琐,但我更喜欢通过代码来完成。
我正在python中使用boto3框架,但希望它在其他语言中也是如此。
def send_elastic_beanstalk_message(name, path, message):
client = boto3.client('sqs')
return client.send_message(
QueueUrl=url,
MessageAttributes={
"beanstalk.sqsd.path": {
"DataType": "String",
"StringValue": path
},
"beanstalk.sqsd.task_name": {
"DataType": "String",
"StringValue": name
},
"beanstalk.sqsd.scheduled_time": {
"DataType": "String",
"StringValue": datetime.now(timezone.utc).strftime('%Y-%m-%d %H:%M:%S UTC')
}
}
)
这将在SQS队列中创建一条新消息,该消息将由worker守护程序解析并触发cron作业。
不幸的是,在解析邮件时似乎没有包含邮件正文,因此触发作业是我唯一能解决的动作。