跳转到主要内容

AWS中的简单锁定

项目描述

AWS flock

使用dynamodb作为后端进行同步的AWS中类似于flock的功能。

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

使用案例

  • 在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证明。可以使用LEASE_ID来“更新”或“释放”给定的锁。

awsflock 需要在 DynamoDB 中创建一个表来存储活动锁。默认情况下,表名为 awsflock,但也可以使用自定义名称。在可以使用锁之前,必须创建该表(它永远不会自动创建)。锁通过名称进行标识,这些名称是 awsflock 表的唯一键。

如果未显式释放,锁的寿命有限(默认:2小时),之后它们可能被尝试获取该锁的任何人“回收”。

注意:本地时钟时间与锁到期时间进行比较,以确定是否可以尝试回收。默认回收窗口(5秒)对于大多数用例来说已经足够,但假设您的时钟通过 NTP 或类似协议同步。无法信任时钟的使用可能会导致错误的锁回收。

当您获取一个锁时,您会得到一个 LEASE_ID。可以使用 LEASE_ID 来续订锁或释放它。这样,锁在有限的时间内由单个所有者持有,而 LEASE_ID 构成了所有权的证据。

变更日志

0.2.0

  • 更高级的持续时间解析

0.1.1

  • 小幅度修复

0.1.0

  • 首次发布

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面