如此处所述https://aws.amazon.com/blogs/aws/new-amazon-ec2-feature-idempotent-instance-creation/AWS CLI 强制执行aws ec2 run-instances --cli-input-json
命令的幂等性。遗憾的是,没有关于如何生成客户端令牌的文档。
ClientToken
我确实发现结果中有一个字段aws ec2 describe-instances
,但是如果您尝试使用它,当然仍然会出现以下错误:
An error occurred (IdempotentParameterMismatch) when calling the RunInstances operation: Arguments on this idempotent request are inconsistent with arguments used in previous request(s).
如何获取要使用的令牌--client-token
?
答案1
你编一个吧!
输入任何小于 64 个字符的字符串都可以。describe 调用只会返回用于创建实例的客户端令牌字符串
然后你的想法就是处理这样的失败。
- 生成客户端令牌,即“Bobs 实例”
- 使用客户端令牌成功运行实例调用
- 客户端出现问题,例如脚本失败或超时
- 您的代码重新启动并生成相同的客户端令牌(诀窍是确保这种情况发生)
- 你获得了成功,但实际上你得到的响应与你第一次发出请求时获得的预订 ID 相同,并且没有创建第二个实例
我建议阅读http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html有关幂等性的更多信息。
我编写这个代码已经很久了,但我相信当我编写它时,我让我的工作人员使用 SQS 消息 ID 作为客户端令牌,所以如果我的工作人员失败了,或者 sqs 传递了两次,我就不会泄漏实例。