【问题标题】:AWS sync to deploy only new or updated files to s3AWS 同步仅将新文件或更新文件部署到 s3
【发布时间】:2022-02-11 06:40:12
【问题描述】:

我编写了一个 Github 操作脚本,它从文件夹 migrations 获取文件并将其上传到 s3。此管道的问题是目录中的所有其他文件也会更新。我怎样才能只更新新的或更新的文件? 这是当前的脚本。

name: function-name
on:
  push:
    branches:
      - dev
jobs:
  deploy:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [10.x]
    steps:
      - uses: actions/checkout@master
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}
      - name: Install Dependencies
        run: npm install
      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: eu-central-1
      - name: Deploy file to s3
        run: aws s3 sync ./migration/ s3://s3_bucket

【问题讨论】:

  • 这就是aws s3 sync 所做的:它复制新的和更新的文件。您是说它正在重新上传未更改的文件(并且与原始文件具有相同的时间戳)?
  • 是的,当我在 GitHub 上添加新文件时,S3 上所有文件的最后修改时间戳更改为最后一个文件上传的时间。
  • 猜测,您实际上是在本地克隆 repo,导致所有本地时间戳设置为“现在”,然后尝试将文件同步到 S3。

标签: amazon-web-services amazon-ec2 github-actions serverless-framework aws-serverless


【解决方案1】:

您可以尝试 GitHub Action jakejarvis/s3-sync-action,它使用 vanilla AWS CLI 将目录(来自您的存储库或在您的工作流程中生成)与远程 S3 存储桶同步。

它基于aws s3 sync,应该启用增量备份,而不是复制/修改每个文件。

migration 文件夹添加为“source_dir

  steps:
  ...
    - uses: jakejarvis/s3-sync-action@master
      with:
        args: --acl public-read --follow-symlinks --delete
      env:
        AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        AWS_REGION: 'us-west-1'   # optional: defaults to us-east-1
        SOURCE_DIR: 'migration'   # optional: defaults to entire repository

但是,taseenbcomments

这不能按预期工作(如增量备份)。

S3 sync cli 命令每次在 GitHub Action 中运行时都会复制所有文件。
我相信当我们在 Docker 映像中克隆存储库以执行操作时会发生这种情况(这就是 jakejarvis/s3-sync-action 所做的)。

我认为使用 S3 同步没有完美的解决方案。

但如果您确定您的文件总是会改变大小,您可以在 args 中使用 --size-only
它会忽略大小相同的文件,因此在大多数情况下可能不安全。

【讨论】:

  • 这不能按预期工作(如增量备份)。 S3 sync cli 命令每次在 Github Action 中运行时都会复制所有文件。我相信当我们在 Docker 映像中克隆存储库以执行操作时会发生这种情况(这就是 jakejarvis/s3-sync-action 所做的)。
  • @taseenb 很不幸。您找到其他解决方案了吗?
  • 嘿,我认为使用 S3 同步没有完美的解决方案。但是如果你确定你的文件总是改变大小,你可以在 args 中使用--size-only。它会忽略大小相同的文件,因此在大多数情况下可能不安全。
  • @taseenb 很好的反馈,谢谢。我已将您的 cmets 包含在答案中以提高知名度。
猜你喜欢
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 2023-04-02
  • 2021-05-12
  • 2015-07-21
相关资源
最近更新 更多