我的 CloudFront 发行版中有两条路径,它们具有以下行为:
| 路径模式 | 起源 | 查看器协议政策 |
|---|---|---|
| /API/* | API起源组 | 将 HTTP 重定向到 HTTPS |
| /* | S3起源集团 | 将 HTTP 重定向到 HTTPS |
以及这些起源:
| 产地名称 | 源域 | 奥瑞金集团 |
|---|---|---|
| S3起源1 | us-east-1.s3.[废话] | S3起源集团 |
| S3起源2 | us-east-2.s3.[废话] | S3起源集团 |
| API来源1 | 一个域 | API起源组 |
| API起源2 | 一个域 | API起源组 |
此设置适用于 GET 请求,但如果我将 POST 请求添加到Cache Behaviour的缓存方法中,则会收到错误:
“不能包含缓存行为的 POST、PUT、PATCH 或 DELETE”
这对我来说没有意义。如果 AWS 客户确实使用 CloudFront每天处理数十亿个请求,并且 AWS 建议使用 CloudFront 源故障转移(这“需要源组”),那么就必须有某种方法来配置 CloudFront 以允许允许 POST 请求的源行为。这不是真的吗?所有这些 API 请求都是由该客户 GET 请求发出的吗?
需要明确的是,我的根本问题是,当 AWS 区域出现故障时,我想使用 CloudFront Origin Failover 在主要区域和次要区域之间切换。为了实现这一点,我不仅需要切换基于 S3 的前端流量(GET 请求),还需要切换后端流量(POST 请求)。
注意:如果您不使用源组,CloudFront 支持 POST 请求的路由行为。看来只有当我添加这个Origin Group(以支持第二个区域)时,才会出现这个错误。
我在这里使用 Go SDK @ cloud.google.com/go/firestore GoDoc来调用 Firestore。它在 App Engine 上运行得很好,但我最近向 Cloud Run 添加了一项新服务。此新服务调用旧服务使用的相同代码,但该代码(适用于 App Engine)在 Cloud Run 上引发错误:rpc error: code = InvalidArgument desc = Invalid resource field value in the request
引发错误的特定代码行是:
snap, err := client.Collection(queryable.CollectionName()).Doc(queryable.GetFirestoreID()).Get(ctx)
if err != nil {
return fmt.Errorf("couldn't read document with id: %v error: %w", queryable.GetFirestoreID(), err)
}
Run Code Online (Sandbox Code Playgroud)
其中 queryable 是一个接口,而 CollectionName() 返回一个常量字符串,因此不可能是问题(此外,如果这是问题,它将返回不同的错误)。
我用更多文本包装错误消息,因此完整的错误消息可以让您了解堆栈:DoTaxDog: allDB.UpdateData: firestoreCRUD.ReadSchema: error in Firestore's ReadSchema: couldn't read document with id: AGPFiyoJdMAmurVNqHYxvKHEb error: rpc error: code = InvalidArgument …
google-cloud-platform google-cloud-firestore google-cloud-run