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

How to specify multiple path patterns for a CloudFront Behavior?

我有一个带有 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,
                            },
                        )
                    ],
                ),

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

path_pattern 接受 /{api,admin,other}/* 样式模式吗?或者我应该重构行为部分以重用 allowed_methodsforwarded_values,然后用不同的 path_pattern 重复多个行为?

Does path_pattern accept /{api,admin,other}/* style patterns?

不,基于 documentation.

不支持此图案样式

should I refactor?

是的,你可以简单地将这个自定义来源对应的所有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
]