Skip to main content

AWS 中的简单锁定

项目描述

AWS 群

flock类似 AWS 中应用程序的功能,使用 dynamodb 作为同步的后端。

与经典命令一样简单的 CLI 工具flock。

用例

  • 在 AWS 中跨工作人员同步多个自动化作业
  • 编写一次只能运行一名操作员的脚本(例如,具有 terraform、CFN 等的生产部署工具)
  • 使用 AWS 凭证同步非 AWS 系统(例如 GitHub Actions)中的作业

用法

可以找到完整的使用信息

awsflock --help

在 DynamoDB 中创建表以便开始使用awsflock:

awsflock table-create

获取锁,有效期为 15 分钟,并获取锁LEASE_ID:

LEASE_ID="$(awsflock acquire LockFoo --lease-duration '15 minutes')"

更新锁,取回新LEASE_ID的并将过期窗口减少到 5 分钟,以秒为单位指定:

LEASE_ID="$(awsflock renew LockFoo "$LEASE_ID" --lease-duration '300s')"

释放锁,以便其他人可以使用它:

awsflock release LockFoo "$LEASE_ID"

尝试获取另一个锁,但不要阻塞并等待它被获取:

LEASE_ID="$(awsflock acquire LockBar --no-wait)"
if [ $? -eq 0 ]; then
  # lock acquired ...
else
  # lock not acquired ...
fi

行为/模型

锁的持有时间有限。在那之后,如果没有更新,锁就会过期,另一个工作人员可能会收回锁。当锁被持有时,持有它的工人在锁上有一个“租约”,由给定的 证明LEASE_ID。ALEASE_ID可用于“更新”或“释放”给定的锁。

awsflock需要 DynamoDB 中的表来存储活动锁。默认情况下,表名是awsflock,但可以使用自定义名称。您必须先创建表,然后才能使用锁(它永远不会自动创建)。锁由名称标识,这些名称是 awsflock表中的唯一键。

如果没有显式释放,锁的生命周期是有限的(默认值:2 小时),之后它们可能会被任何试图获取该锁的人“回收”。

注意: 将本地时钟时间与锁定到期时间进行比较,以确定是否可以尝试回收。默认回收窗口(5 秒)对于大多数用例来说绰绰有余,但假设您的时钟由 NTP 或类似协议同步。在不能信任时钟的情况下使用可能会导致错误的锁回收。

当你获得一个锁时,你会得到一个LEASE_ID. 然后LEASE_ID可以使用它来更新锁或释放它。这样,锁由一个所有者在有限的时间内持有,并LEASE_ID构成所有权证明。

变更日志

0.2.0

  • 更高级的持续时间解析

0.1.1

  • 小修

0.1.0

  • 初始发行

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

awsflock-0.2.0.tar.gz (13.6 kB 查看哈希)

已上传 source

内置分布

awsflock-0.2.0-py3-none-any.whl (15.0 kB 查看哈希)

已上传 py3