【问题标题】:AWS CDK api mappings with DomainNameOptions带有 DomainNameOptions 的 AWS CDK api 映射
【发布时间】:2021-10-15 11:11:41
【问题描述】:

我在 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 因为我正在使用基于 documentation 的 LambdaRestApi 需要这样的对象。

关于如何为我的案例实施 API 映射的任何想法?

【问题讨论】:

    标签: python amazon-web-services aws-cdk


    【解决方案1】:

    如果您查看 documentationaws_apigatewayv2.ApiMapping 和 domain_name 对象,您可以看到它需要一个 iDomainName 对象 - 所以您必须找到一个具有相同接口挂钩的合适对象。但是,如果您在文档中单击它,它会将您带到 here - apigatewayv2 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
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-10
      • 2021-08-15
      • 2020-02-21
      • 1970-01-01
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多