amazon-web-services - 更新 AWS Elastic Beanstalk 部署的 Webapp 使用的数据
问题描述
我创建了一个仪表板并将其部署在 AWS Elastic Beanstalk 上。输入我的仪表板的数据由我的 S3 存储桶中的 CSV 文件提供,设置为使用 AWS EventBridge 每 12 小时更新一次。出于某种原因,我部署的仪表板没有更新。即使 CSV 文件已正确更新,它仍在使用我之前部署的相同旧数据。
进一步来说:
- 我正在尝试使用 Plotly Dash 创建一个仪表板,以可视化从 2020 年 1 月 1 日开始的一些趋势。
- 我有一个 Lambda 函数,它可以抓取数据并将它们作为 CSV 文件保存在 S3 存储桶中。此 CSV 文件每 12 小时被覆盖一次,以捕获最新的可用趋势。
- 我使用 boto3 直接从我的 S3 存储桶中获取 CSV 文件,并使用它的数据来构建我的仪表板。
- 然后使用 Elastic Beanstalk 部署该应用程序。
- 一切都是在 Cloud9 环境中编写的,除了设置 EventBridge 触发器。
假设我在 2020 年 12 月 10 日部署了该应用程序。CSV 文件将包含截至 2020 年 12 月 10 日的所有数据,我的仪表板将显示 2020 年 1 月 1 日到 2020 年 12 月 10 日之间的趋势。
但是,如果我在 2020 年 12 月 10 日之后的任何时间(或者当 CSV 文件使用 2020 年 12 月 10 日之后的数据更新时)检查仪表板,它仍然显示相同的趋势(在 2020 年 1 月 1 日和 2020 年 12 月之间) 10),尽管我的 S3 存储桶中的 CSV 文件是最新的。
仅当我在 Elastic Beanstalk 上重新部署应用程序时,仪表板才会更新。不知道为什么会这样,因为我的应用程序直接从更新的 CSV 文件中提取数据。
我的架构在这里不正确吗?还是我需要调整 AWS 中的一些设置?
提前致谢!
更新:
我正在使用以下代码将我的数据加载到trends_data
数据框中。
# define bucket name
bucket = "mobilitytrends"
# define s3 client
s3 = boto3.client('s3')
# define file names
historical_file_name = 'historical_trends.csv'
# load historical data from s3
data_obj = s3.get_object(Bucket= bucket, Key= historical_file_name)
trend_data = pd.read_csv(data_obj['Body'],low_memory = False)
然后我有一些清理这个数据框的函数。我有一个使用下面的代码片段呈现的散点图:
fig.add_scatter(x = filtered_trend.index,
y = filtered_trend[transportation],
line = dict(color = line_color[idx]),
name = transportation)
filtered_trend
是 的一个子集trends_data
,它是根据我设置的一些回调函数来选择的。但我不认为这就是问题所在,因为一切都在本地运行良好。
解决方案
我有一个类似的问题,EB 没有从 s3 存储桶中获取最新版本的 CSV。我能找到的唯一选择是在 s3 存储桶中更新新版本的 CSV 后重新启动应用服务器。
您可以在 AWS lambda 函数中使用以下代码在一天中的特定时间重新启动您的应用服务器:
import boto3
client = boto3.client('elasticbeanstalk', region_name='your-region')
def lambda_handler(event, context):
try:
response = client.restart_app_server(EnvironmentName='your-environment-name')
if response:
print('restarting app server')
else:
print('Failed to restart server')
except Exception as e:
print(e)
确保使用 eventbridge 设置 cron 进行计时
推荐阅读
- google-apps-script - Google Sheets Webhooks 1 周后停止工作
- blueprism - 如何使用动态功能按值查找项目
- push-notification - 如何设置gmail推送通知
- javascript - 如何使这张幻灯片从左到右
- wordpress - 奇怪的缓存问题 - WordPress + Ultimate Member + WP Engine + Cloudflare
- mysql - 不能回滚——只有当 Angular 服务器启动时,没有事务处于活动状态
- javascript - 如何在 JavaScript 中的单击输入框中选择文本?
- git - 如何恢复到 github 文件夹中的本地更改?
- java - 如何从列表列表中提取列表
- c# - Google Chrome 上的 Samesite Cookie 更改破坏了我的插件