Simple locking in AWS
Project description
AWS flock
flock
-like functionality for applications in AWS, using dynamodb as a
backend for synchronization.
A CLI tool as simple as the classic flock
command.
Use Cases
- Synchronizing multiple automated jobs across workers in AWS
- Writing scripts that only one human operator can be running at a time (e.g. production deployment tools with terraform, CFN, etc)
- Synchronizing jobs in non-AWS systems (e.g. GitHub Actions) using AWS credentials
Usage
Full usage info can be found with
awsflock --help
Create the table in DynamoDB in order to start using awsflock
:
awsflock table-create
Acquire a lock, with a 15 minute expiration, and get the lock LEASE_ID
:
LEASE_ID="$(awsflock acquire LockFoo --lease-duration '15 minutes')"
Renew the lock, getting back the new LEASE_ID
and reducing the expiration
window to 5 minutes, specified in seconds:
LEASE_ID="$(awsflock renew LockFoo "$LEASE_ID" --lease-duration '300s')"
Release the lock, so that others may use it:
awsflock release LockFoo "$LEASE_ID"
Attempt to acquire another lock, but don't block and wait for it to be acquired:
LEASE_ID="$(awsflock acquire LockBar --no-wait)"
if [ $? -eq 0 ]; then
# lock acquired ...
else
# lock not acquired ...
fi
Behavior / Model
Locks are held for a limited period of time.
After that time, if not renewed, the lock expires and another worker may reclaim
the lock.
While the lock is held, the worker holding it has a "lease" on the lock, proven
by a given LEASE_ID
.
A LEASE_ID
can be used to "renew" or "release" a given lock.
awsflock
requires a table in DynamoDB to store active locks.
By default, the table name is awsflock
, but custom names can be used.
You must create the table before locks can be used (it will never be created
automatically).
Locks are identified by name, and those names are unique keys into the
awsflock
table.
Locks have a limited lifetime (default: 2 hours) if not explicitly released, after which they may be "reclaimed" by anyone trying to acquire that lock.
NOTE: Local clock time is compared against lock expirations to determine whether or not reclamation may be tried. The default reclamation window (5 seconds) is more than sufficient for most use-cases, but assumes that your clocks are synchronized by NTP or a similar protocol. Usage where clocks cannot be trusted may result in incorrect lock reclamations.
When you acquire a lock, you get back a LEASE_ID
. The LEASE_ID
can then be
used to renew the lock or release it. In this way, locks are held by a single
owner for a limited period of time, and the LEASE_ID
constitutes proof of
ownership.
CHANGELOG
0.2.0
- More advanced parsing of durations
0.1.1
- Minor fixup
0.1.0
- Initial release
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file awsflock-0.2.0.tar.gz
.
File metadata
- Download URL: awsflock-0.2.0.tar.gz
- Upload date:
- Size: 13.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.4 CPython/3.6.9 Linux/5.3.0-1032-aws
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2d255cea0f96a730cb1b26e8f25fc2a8627f643d53d89fd3bcd1dd790925ca42 |
|
MD5 | abbbdcc5726e3fa2da5a9f280fc5f1f3 |
|
BLAKE2b-256 | 41342a4a4900f80fc2bea4681cb4551ee71fba496e035eecf2a687fcef7d044b |
File details
Details for the file awsflock-0.2.0-py3-none-any.whl
.
File metadata
- Download URL: awsflock-0.2.0-py3-none-any.whl
- Upload date:
- Size: 15.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.4 CPython/3.6.9 Linux/5.3.0-1032-aws
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1d457f2b563bc12ebc4e2ae187ca25a09d41848978ad08543c7a571564039753 |
|
MD5 | f72f667050814d4cc5073597bf3e9493 |
|
BLAKE2b-256 | 8732e3f7ba955842a830af668470e7ac8cac23da545cd091f67b0e1eedfb6104 |