python - 带有 DomainNameOptions 的 AWS CDK api 映射
问题描述
我在 python 中有以下 cdk 用于构建我的 API
domain_name = _apigateway.DomainNameOptions(
certificate=certificate,
domain_name=custom_domain_name,
mtls={
"bucket": _s3.Bucket.from_bucket_arn(self, 'BucketByArn', mtls_bucket_arn),
"key": mtls_bucket_key
},
security_policy=_apigateway.SecurityPolicy("TLS_1_2")
)
api_01 = _apigateway.LambdaRestApi(
self,
api_id,
rest_api_name=rest_api_name,
domain_name=domain_name,
handler=measurements_fn,
deploy_options=_apigateway.StageOptions(stage_name=stage),
proxy=False
)
api_01.node.default_child.add_property_override(
"DisableExecuteApiEndpoint",
"true"
)
有 2 个端点连接到 api,我想创建一个 API 映射。根据文档,我看到我应该使用 _apigatewayv2.ApiMapping
_apigatewayv2.ApiMapping(
self,
id='someId',
api=api_01,
api_mapping_key='api/1.0',
domain_name=domain_name
)
但是 domain_name 选项由于以下原因而失败
预期的对象引用,得到 {"$jsii.struct":{"fqn":"@aws-cdk/aws-apigateway.DomainNameOptions"
情况是我需要 DomainNameOptions 因为我正在使用基于文档的 LambdaRestApi需要这样的对象。
关于如何为我的案例实施 API 映射的任何想法?
解决方案
如果您查看 domain_name 对象的文档和文档,aws_apigatewayv2.ApiMapping
您会发现它需要一个iDomainName
对象 - 因此您必须找到一个具有相同接口挂钩的合适对象。但是,如果您在文档中单击它,它会将您带到此处- apigateway v2 iDomainName 界面,而不是 DomainNameOptions 原始版本。(在 apigateway 模块而不是 apigatewayv2 模块中)
所有这一切都是说......您的交叉库并不总是像预期的那样工作,最重要的是 apigatewayv2 是实验性的,容易出现一些集成问题,明天可能会改变。
当您尝试使用连接到 Lambda 的 Rest API 时,apigateway(不是 v2)模块就足够了。(apigatewayv2 更适用于实验性 HTTP api 到 lambda)
仅使用aws_apigateway
模块,您可以通过以下方式完成此操作:
my_domain = _apigateway.DomainName(
self, "MyDomain",
domain_name=my_domain_name)
my_domain.add_base_path_mapping(
target_api= my_api, # a aws_apigateway.RestApi() object
)
然后,您需要确保您的 route53 ARecord 也已更新,否则 dns 将不适用于您的自定义域。(这是使用 `aws_route53 和 aws_route53_targets 模块)
_route53.ARecord(
self, "MyDomainAliasRecord",
zone=my_route53_zone, # a aws_route53.HostedZone() Object
target=my_route_53_target # a aws_route53.RecordTarget() object),
record_name=my_domain_name
)
推荐阅读
- sql - 有没有办法在选择查询中递归地连接 2 个不同的 SQL 表?
- bash - 通过 ssh 打开新终端的 Bash 脚本
- java - 具有约束的 Spring Boot 弹性搜索查询
- angular - 同一 NestJS 上的 GraphQL 和 Socket.io 不允许传输协议从 Angular 成为“websockets”
- javascript - 悬停时:元素移动到当前 div 之后
- sql - 如何在 Google Bigquery 中提取括号内的字符?[SQL]
- javascript - 设置这个简单的打字轮播
- db2 - 如何在 db2 中获取前一周的星期六 - 星期五
- soap - 某些 Acumatica 实例的 SOAP 登录错误
- roblox - ROBLOX 点击放弃