如何为 CloudFront 行为指定多个路径模式?

bri*_*fey 5 amazon-web-services amazon-cloudfront aws-cdk

我有一个带有 s3 源和自定义源的 CloudFront 发行版。我希望所有流量/api/*/admin/*转到自定义源,所有其他流量都转到 s3 源。目前我只能使用它/api/*

                cloudfront.SourceConfiguration(
                    custom_origin_source=cloudfront.CustomOriginConfig(
                        domain_name=alb,
                        origin_protocol_policy=cloudfront.OriginProtocolPolicy.MATCH_VIEWER,
                    ),
                    behaviors=[
                        cloudfront.Behavior(
                            allowed_methods=cloudfront.CloudFrontAllowedMethods.ALL,
                            path_pattern="/api/*",
                            forwarded_values={
                                "headers": ["*"],
                                "cookies": {"forward": "all"},
                                "query_string": True,
                            },
                        )
                    ],
                ),
Run Code Online (Sandbox Code Playgroud)

我可能可以使用 重复该行为/api/*,但最终我将添加一些额外的路径,这些路径需要路由到自定义源(ALB),所以我想知道是否有一种更干燥的方法来做到这一点。

path_pattern接受/{api,admin,other}/*风格图案吗?或者我应该重构“行为”部分以重用allowed_methodsforwarded_values然后使用不同的重复多个行为path_pattern

jel*_*csc 6

path_pattern 接受/{api,admin,other}/*样式模式吗?

不,根据文档不支持此模式样式。

我应该重构吗?

是的,您可以简单地将与此自定义来源相对应的所有内容保存path_pattern到列表中,例如path_patterns. 然后使用简单方便的 Python 列表理解,

behaviors=[
    cloudfront.Behavior(
        allowed_methods=cloudfront.CloudFrontAllowedMethods.ALL,
        path_pattern=pp,
        forwarded_values={
            "headers": ["*"],
            "cookies": {"forward": "all"},
            "query_string": True,
        },
    ) for pp in path_patterns
]
Run Code Online (Sandbox Code Playgroud)

  • 另请注意,每个分配的缓存行为(以及路径模式)数量的默认限制为 25,但 AWS Support 可以根据请求将该值提高到高达 250(如果需要)。 (2认同)