tub*_*tub 4 firebase google-cloud-functions
我正在尝试从 firebase CLI(版本 8.12.1)部署我的功能之一,但它一直失败。该功能在几周内没有改变,所以我对它现在失败的原因感到有些困惑。
来自 CLI 的错误
功能[http-api-(europe-west1)]:部署错误。构建失败:构建错误详细信息不可用。请查看https://console.cloud.google.com/logs/viewer?project= &advancedFilter=resource.type%3Dbuild%0Aresource.labels.build_id%3Dfeb2697d-29b4-4ab7-9b84-90d9f847be42%0AlogName%3Dprojects 上的日志%2Fvestico-dev%2Flogs%2Fcloudbuild
来自云控制台的日志
第 3 步 - “恢复器”:从缓存中恢复“google.nodejs.functions-framework:functions-framework”的数据
第 3 步 - “恢复器”:\u001b[31;1mERROR:\u001b[0m 无法恢复:恢复数据:获取 https://storage.googleapis.com/eu.artifacts..appspot.com/containers/images/sha256 :484d08dfc6a8f356c34a86fa4440fedf86f4fc398967eea66e4aab4e9ee81e3d?access_token=REDACTED:不支持的状态代码404;正文:
NoSuchKey指定的密钥不存在。没有这样的对象:eu.artifacts..appspot.com/containers/images/sha256:484d08dfc6a8f356c34a86fa4440fedf86f4fc398967eea66e4aab4e9ee81e3d
完成第 3 步 - “恢复器”
错误:构建步骤 3“eu.gcr.io/fn-img/buildpacks/nodejs10/builder:nodejs10_20201005_20_RC00”失败:步骤以非零状态退出:46
有趣的部分可能是上面的错误:
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Details>No such object: eu.artifacts.<project-id>.appspot.com/containers/images/sha256:484d08dfc6a8f356c34a86fa4440fedf86f4fc398967eea66e4aab4e9ee81e3d</Details>
</Error>
Run Code Online (Sandbox Code Playgroud)
builder指的是什么键?<project-id>@appspot.gserviceaccount.com可以使用角色Cloud Functions Admin和访问云功能Editor。
部署通过 firebase deploy --only functions:<my-api>
该函数用于@google-cloud/storage获取存储资源的公共 url。
我正在加载这样的服务帐户配置:
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Details>No such object: eu.artifacts.<project-id>.appspot.com/containers/images/sha256:484d08dfc6a8f356c34a86fa4440fedf86f4fc398967eea66e4aab4e9ee81e3d</Details>
</Error>
Run Code Online (Sandbox Code Playgroud)
这里使用了云存储。
const devServiceAccount = require("../../service-accounts/dev.json");
const prodServiceAccount = require("../../service-accounts/prod.json");
export const getAdminConfig = (): (AppOptions | undefined) => {
const baseConfigEnv = process.env.FIREBASE_CONFIG;
if (!baseConfigEnv) {
console.error("no firebase config environment");
return undefined;
}
const app = functions.config().app;
if (app === undefined) {
console.error("no firebase app config");
return undefined;
}
const serviceAccount = app.environment === 'dev' ? devServiceAccount : prodServiceAccount;
const adminConfig = JSON.parse(baseConfigEnv) as AppOptions;
adminConfig.credential = credential.cert(serviceAccount);
return adminConfig;
}
Run Code Online (Sandbox Code Playgroud)
我的文件夹结构如下。
+ functions
+ lib
+ function.js
+ service-accounts
+ dev.json
+ prod.json
+ src
+ function.ts
Run Code Online (Sandbox Code Playgroud)
鉴于getAdminConfig()为项目中的所有功能加载了文件,我排除了服务帐户文件的问题。
我已经验证了上传到 GCF 存储容器的文件。JSON 密钥就在那里并且位于正确的位置。路径匹配,因此应该在 GCF 运行时找到它们。
为下一个遇到此问题的灵魂添加提示。这似乎是由于还原/回滚过程中文件丢失/无法访问造成的。
我通过简单地成功解决了这个问题:
>firebase deploy| 归档时间: |
|
| 查看次数: |
630 次 |
| 最近记录: |