更新 AWS Elastic Beanstalk 部署的 Webapp 使用的数据

Posted

技术标签:

【中文标题】更新 AWS Elastic Beanstalk 部署的 Webapp 使用的数据【英文标题】:Updating data used by AWS Elastic Beanstalk deployed Webapp 【发布时间】:2021-04-04 17:50:23 【问题描述】:

我创建了一个仪表板并将其部署在 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)

然后我有一些函数可以清理这个数据框。我有一个使用下面的代码 sn-p 呈现的散点图:

fig.add_scatter(x = filtered_trend.index,
                y = filtered_trend[transportation],
                line = dict(color = line_color[idx]),
                name = transportation)

filtered_trendtrends_data 的子集,它是根据我设置的一些回调函数来选择的。但我不认为这就是问题所在,因为一切都在本地运行良好。

【问题讨论】:

听起来您没有从 S3 存储桶中获取新的 CSV,或者您遇到了缓存问题。 您能否发布有关如何加载 CSV 文件以及如何呈现布局的代码示例?我的猜测是数据仅在应用程序初始化时加载和/或布局仅在应用程序初始化时呈现。但是我们需要看代码才能知道。 @JulienB。这就是我最初的想法。但是当我打印我的数据时,它确实显示了更新的 CSV。 数据是否在回调中加载?还是作为全局变量?还是在布局函数中? @emher 它们作为全局变量并以数据框的形式加载。但我正在回调中对它们进行任何更改。 【参考方案1】:

在 Dash 中,global variables will break your app。更具体地说,修改全局变量将不起作用,至少不可靠。

避免使用全局变量的一种方法是创建一个回调,它首先从 S3 加载数据,然后呈现布局。其他方法在this similar question 中讨论。

【讨论】:

以上是关于更新 AWS Elastic Beanstalk 部署的 Webapp 使用的数据的主要内容,如果未能解决你的问题,请参考以下文章

更新 AWS Elastic Beanstalk 部署的 Webapp 使用的数据

AWS Elastic Beanstalk 上的 Celery 配置问题 - “进程没有配置更新”

在 Elastic Beanstalk 和 AWS Lambda 上更新 nodejs API

更改 IAM 用户密钥时如何更新 Elastic Beanstalk 环境变量中的 AWS 凭证?

如何从 AWS Elastic BeanStalk 获取更新的“上传”文件夹?

AWS Elastic Beanstalk:如何更改节点命令?在最近的更新中删除了容器选项?