将文件从 AWS EC2 实例推送到 gitlab repo
Pushing files from AWS EC2 instance to gitlab repo
我在 ubuntu EC2 机器上部署了一个名为 Amppot 的 DDoS 蜜罐来研究攻击的特征。这个蜜罐自动输出每日日志和描述它收到的请求的 sqlite 文件。
我写了一个 python 脚本,可以将 sqlite 文件转换为 csv 文件并进行一些处理。
我目前的工作流程是:
- 我通过 ssh 连接到实例
- 我将 ec2 实例中的 sqlite 文件复制到我的机器上
- 我在我的机器上执行 python 脚本
- 我将脚本生成的 csv 文件推送到 gitlab 存储库,以便所有成员都有数据。
我想使用 gitlab CI/CD 管道自动化所有这些。
我在 google 上找到的所有信息都是关于相反方向的任务(从本地到 ec2 实例)。
我设法向 gitlab 项目添加了一个 bash 运行程序,我知道我必须编写 .gitlab-ci.yml 文件。我也知道我可能需要设置一个服务帐户。但是,我以前从未使用过 gitlab CI/CD 或做过任何 DevOps,所以我不知道我想做的事情是否可行。
在我看来,您以错误的方式利用 Gitlab(用于存储日志、指标、应用程序数据等)。源代码控制管理 (SCM) 系统适用于您的源代码,显然不适用于应用程序日志或您的应用程序生成的任何数据。
相反,为此您可以使用工具,例如CloudWatch 日志、S3、任何其他数据源(ElasticSearch、DynamoDB、RDS 等)。因此,您的应用程序 (Amppot) 应该相应地进行检测。
如果您选择 CloudWatch 来收集日志和指标,您可以在您的 EC2 实例上配置 Amazon CloudWatch 代理并对其进行检测以将您的日志(您的应用程序正在生成)推送到 CloudWatch 日志组。请参阅文档 here.
您的应用会将其 stderr
和 stdout
流推送到本地文件(例如 /var/log/amppot.log
),CloudWatch 代理会将它们与 AWS CloudWatch 服务同步。
如果尽管有上述情况,您仍然想将您的应用程序文件推送到 Gitlab(从您的 EC2),那么只需配置一个 cron 作业,它将定期执行以下 bash 脚本:
#!/bin/bash
cd /home/user/my-git/repo
git add /home/user/amppot.log
git add /home/user/amppot.sqlite
git commit -m "commit message $(date +'%s')"
git push origin master
你可能想通过ssh与Gitlab通信,所以运行ssh-keygen
生成一个ssh密钥对,然后将其public部分(~/.ssh/id_rsa.pub
)复制到GitLab .
另一种选择是将您的应用程序打包到 Docker 映像中,然后 运行 使用 Elastic Container Service (ECS)。好处是您不需要将 stderr
和 stdout
流写入文件,因为 ECS 会收集它们并直接为您流式传输到 CloudWatch。这种方法的缺点是你必须研究 Docker
和 ECS
,将你的 Docker 图像存储在注册表中 (ECR
),配置 ECS 集群等。这显然是一些额外的努力。
如果 csv 报告是在 gitlab-ci 作业中生成的,您可以将其作为作业工件保存。
见https://docs.gitlab.com/ee/ci/pipelines/job_artifacts.html
它也可以发布到该存储库的 gitlab 页面部分
https://docs.gitlab.com/ee/user/project/pages/index.html(参见示例。基本上它是 gitlab 作业中保存 artifact/report 的 2 行)
我在 ubuntu EC2 机器上部署了一个名为 Amppot 的 DDoS 蜜罐来研究攻击的特征。这个蜜罐自动输出每日日志和描述它收到的请求的 sqlite 文件。
我写了一个 python 脚本,可以将 sqlite 文件转换为 csv 文件并进行一些处理。
我目前的工作流程是:
- 我通过 ssh 连接到实例
- 我将 ec2 实例中的 sqlite 文件复制到我的机器上
- 我在我的机器上执行 python 脚本
- 我将脚本生成的 csv 文件推送到 gitlab 存储库,以便所有成员都有数据。
我想使用 gitlab CI/CD 管道自动化所有这些。 我在 google 上找到的所有信息都是关于相反方向的任务(从本地到 ec2 实例)。
我设法向 gitlab 项目添加了一个 bash 运行程序,我知道我必须编写 .gitlab-ci.yml 文件。我也知道我可能需要设置一个服务帐户。但是,我以前从未使用过 gitlab CI/CD 或做过任何 DevOps,所以我不知道我想做的事情是否可行。
在我看来,您以错误的方式利用 Gitlab(用于存储日志、指标、应用程序数据等)。源代码控制管理 (SCM) 系统适用于您的源代码,显然不适用于应用程序日志或您的应用程序生成的任何数据。
相反,为此您可以使用工具,例如CloudWatch 日志、S3、任何其他数据源(ElasticSearch、DynamoDB、RDS 等)。因此,您的应用程序 (Amppot) 应该相应地进行检测。
如果您选择 CloudWatch 来收集日志和指标,您可以在您的 EC2 实例上配置 Amazon CloudWatch 代理并对其进行检测以将您的日志(您的应用程序正在生成)推送到 CloudWatch 日志组。请参阅文档 here.
您的应用会将其 stderr
和 stdout
流推送到本地文件(例如 /var/log/amppot.log
),CloudWatch 代理会将它们与 AWS CloudWatch 服务同步。
如果尽管有上述情况,您仍然想将您的应用程序文件推送到 Gitlab(从您的 EC2),那么只需配置一个 cron 作业,它将定期执行以下 bash 脚本:
#!/bin/bash
cd /home/user/my-git/repo
git add /home/user/amppot.log
git add /home/user/amppot.sqlite
git commit -m "commit message $(date +'%s')"
git push origin master
你可能想通过ssh与Gitlab通信,所以运行ssh-keygen
生成一个ssh密钥对,然后将其public部分(~/.ssh/id_rsa.pub
)复制到GitLab .
另一种选择是将您的应用程序打包到 Docker 映像中,然后 运行 使用 Elastic Container Service (ECS)。好处是您不需要将 stderr
和 stdout
流写入文件,因为 ECS 会收集它们并直接为您流式传输到 CloudWatch。这种方法的缺点是你必须研究 Docker
和 ECS
,将你的 Docker 图像存储在注册表中 (ECR
),配置 ECS 集群等。这显然是一些额外的努力。
如果 csv 报告是在 gitlab-ci 作业中生成的,您可以将其作为作业工件保存。
见https://docs.gitlab.com/ee/ci/pipelines/job_artifacts.html
它也可以发布到该存储库的 gitlab 页面部分
https://docs.gitlab.com/ee/user/project/pages/index.html(参见示例。基本上它是 gitlab 作业中保存 artifact/report 的 2 行)