首页 > 解决方案 > 如何根据 S3 事件将文件从 s3 部署到 ec2 实例

问题描述

实际上我正在研究管道。所以我有一个场景,我将一些工件推入 s3。现在我编写了一个 shell 脚本,它下载文件夹并将每个文件复制到 Wildfly 服务器(Ec2 实例)中的所需位置。

#!/bin/bash

mkdir /home/ec2-user/test-temp
cd /home/ec2-user/test-temp
aws s3 cp s3://deploy-artifacts/test-APP test-APP --recursive --region us-east-1
aws s3 cp s3://deploy-artifacts/test-COMMON test-COMMON --recursive --region us-east-1
cd /home/ec2-user/
sudo mkdir -p /opt/wildfly/modules/system/layers/base/psg/common
sudo cp -rf ./test-temp/test-COMMON/standalone/configuration/standalone.xml /opt/wildfly/standalone/configuration
sudo cp -rf ./test-temp/test-COMMON/modules/system/layers/base/com/microsoft/* /opt/wildfly/modules/system/layers/base/com/microsoft/
sudo cp -rf ./test-temp/test-COMMON/modules/system/layers/base/com/mysql /opt/wildfly/modules/system/layers/base/com/
sudo cp -rf ./test-temp/test-COMMON/modules/system/layers/base/psg/common/* /opt/wildfly/modules/system/layers/base/psg/common
sudo cp -rf ./test-temp/test-APP/standalone/deployments/HS.war /opt/wildfly/standalone/deployments
sudo cp -rf ./test-temp/test-APP/bin/resource /opt/wildfly/bin/resource
sudo cp -rf ./test-temp/test-APP/modules/system/layers/base/psg/* /opt/wildfly/modules/system/layers/base/psg/
sudo cp -rf ./test-temp/test-APP/standalone/deployments/* /opt/wildfly/standalone/deployments/
sudo chown -R wildfly:wildfly /opt/wildfly/
sudo service wildfly start

但是每次我将新工件推入 s3. 我必须去服务器并手动运行这个脚本。有没有办法让它自动化?我正在阅读有关 lamda 的信息,但在 lamda 知道 s3 的变化之后。我要在哪里定义要运行的 shell 脚本?

任何指导都会有帮助。

标签: amazon-web-servicesamazon-s3amazon-ec2

解决方案


要在文件上传到 s3 存储桶时触发 lambda 函数,为此您必须在 s3 存储桶中设置事件通知。

设置 s3 事件通知的步骤:-

1-你的 lambda 和 s3 存储桶应该在同一个区域

2 - 转到 s3 存储桶的属性选项卡

3 - 打开 Event 并为 put 或 copy 等事件类型提供值

4 - 请在发送到选项中指定 Lambda ARN。

现在创建一个 lambda 函数并将 s3 存储桶添加为触发选项。只需确保您的 Lambda IAM 策略设置正确。


推荐阅读