今天我遇到这个问题,当我尝试创建一个aws lambda函数,可以在故障转移开始时禁用route53 healthcheck。
该函数基本上等待route53中的故障转移警报并执行update_health_check(HealthCheckId=healthcheck_id, Disabled=True)
该API在route53 API for boto3的route53 AWS boto3模块下找到。如您所见,文档中明确定义了参数“已禁用”。
该功能在当地完美运作。我也在本地运行boto3 == 1.9.66。
但是当我将lambda函数上传到AWS时。我遇到了以下问题。看起来“禁用”参数在某种程度上没有在AWS本身的boto3中定义?
File "/var/runtime/botocore/client.py", line 314, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/var/runtime/botocore/client.py", line 586, in _make_api_call
api_params, operation_model, context=request_context)
File "/var/runtime/botocore/client.py", line 621, in _convert_to_request_dict
api_params, operation_model)
File "/var/runtime/botocore/validate.py", line 291, in serialize_to_request
raise ParamValidationError(report=report.generate_report())
botocore.exceptions.ParamValidationError: Parameter validation failed:
Unknown parameter in input: "Disabled", must be one of: HealthCheckId, HealthCheckVersion, IPAddress, Port, ResourcePath, FullyQualifiedDomainName, SearchString, FailureThreshold, Inverted, HealthThreshold, ChildHealthChecks, EnableSNI, Regions, AlarmIdentifier, InsufficientDataHealthStatus, ResetElements
我能想到的一个解决方法是将我的本地boto3模块上传到AWS。有更好的解决方案吗?
您需要将boto3与代码捆绑在一起或等待更新Lambda execution environment。
用你的代码捆绑boto3和botocore是一个best practice:
控制函数部署包中的依赖项。 AWS Lambda执行环境包含许多库,例如用于Node.js和Python运行时的AWS开发工具包(可在此处找到完整列表:Lambda Execution Environment和Available Libraries)。为了启用最新的功能和安全更新,Lambda将定期更新这些库。这些更新可能会对Lambda函数的行为进行细微更改。要完全控制函数使用的依赖项,我们建议您使用部署包打包所有依赖项。
如果你使用Lambda Layers作为你的boto3依赖项,你可以通过在使用新版本的boto3测试后更新图层来轻松更新多个函数。
关于捆绑来自Tom McLaughlin的boto3的话题有一个in-depth blog post。