yasudacloudの日記

札幌に住むソフトウェアエンジニア

PynamoDBのトランザクションでハマった

最近、個人開発のWebAPIでPynamoDBを使い始めたんですが、トランザクションの実装がうまくいかず長い時間無駄にしたのでよくある備忘録に。

 

ドキュメントは下記を参照しました。

pynamodb.readthedocs.io

 

PynamoDBにしてはコード量が多めになりますが、何とか複数saveのトランザクション処理を記述しましたが、、うまくいかず。。

ドキュメントではupdateが例になっていたのでsaveで何か足りてないんだろうかとか、他のネット記事も漁ってみたりしましたがよくわからず。

 

 

大切なことはログに書いてあると誰もが習います。すっかり見落としていました。

 

TransactWriteError: Failed to write transaction items

 

↓こちらに答えがありました。Connectionのデフォルトリージョンはus-east-1になっているため明示的に指定する必要があるとのこと😅

github.com

加えて、ローカル環境にDynamoDBを入れて使っていたのでhost(エンドポイント)も変更します。

 

失敗を忘れないためにサンプルでsaveのコードを書きました。

con = Connection(region='ap-northeast-1', host='http://localhost:8000')
now = datetime.now()

sample1 = Sample(sample_id='1001', text='hello1', created=now)
sample2 = Sample(sample_id='1002', text='hello2', created=now)
try:
with TransactWrite(connection=con) as transaction:
transaction.save(sample1)
transaction.save(sample2)
except TransactWriteError as e:
print(e)

 

 

初歩的なことで数時間無駄にしてしまったm(._.)m