NoCredentialProviders:AWS S3 的电子更新程序中链错误中没有有效的提供程序

Bak*_*rom 7 amazon-s3 amazon-web-services electron

我正在尝试使用电子更新程序和AWS S3存储桶来实现我的电子反应应用程序的自动更新。但出现错误:

\n
\xe2\xa8\xaf NoCredentialProviders: no valid providers in chain. Deprecated.\n        For verbose messaging see aws.Config.CredentialsChainVerboseErrors\ngithub.com/develar/app-builder/pkg/publisher.upload\n        Y:/Documents/app-builder/pkg/publisher/s3.go:169\ngithub.com/develar/app-builder/pkg/publisher.ConfigurePublishToS3Command.func1\n        Y:/Documents/app-builder/pkg/publisher/s3.go:57\ngithub.com/alecthomas/kingpin.(*actionMixin).applyActions\n        C:/Users/develar/go/pkg/mod/github.com/alecthomas/kingpin@v2.2.6+incompatible/actions.go:28\ngithub.com/alecthomas/kingpin.(*Application).applyActions\n        C:/Users/develar/go/pkg/mod/github.com/alecthomas/kingpin@v2.2.6+incompatible/app.go:557\ngithub.com/alecthomas/kingpin.(*Application).execute\n        C:/Users/develar/go/pkg/mod/github.com/alecthomas/kingpin@v2.2.6+incompatible/app.go:390\ngithub.com/alecthomas/kingpin.(*Application).Parse\n        C:/Users/develar/go/pkg/mod/github.com/alecthomas/kingpin@v2.2.6+incompatible/app.go:222\nmain.main\n        Y:/Documents/app-builder/main.go:90\nruntime.main\n        c:/go/src/runtime/proc.go:203\nruntime.goexit\n        c:/go/src/runtime/asm_amd64.s:1373  \n  \xe2\xa8\xaf NoCredentialProviders: no valid providers in chain. Deprecated.\n        For verbose messaging see aws.Config.CredentialsChainVerboseErrors\ngithub.com/develar/app-builder/pkg/publisher.upload\n        Y:/Documents/app-builder/pkg/publisher/s3.go:169\ngithub.com/develar/app-builder/pkg/publisher.ConfigurePublishToS3Command.func1\n        Y:/Documents/app-builder/pkg/publisher/s3.go:57\ngithub.com/alecthomas/kingpin.(*actionMixin).applyActions\n        C:/Users/develar/go/pkg/mod/github.com/alecthomas/kingpin@v2.2.6+incompatible/actions.go:28\ngithub.com/alecthomas/kingpin.(*Application).applyActions\n        C:/Users/develar/go/pkg/mod/github.com/alecthomas/kingpin@v2.2.6+incompatible/app.go:557\ngithub.com/alecthomas/kingpin.(*Application).execute\n        C:/Users/develar/go/pkg/mod/github.com/alecthomas/kingpin@v2.2.6+incompatible/app.go:390\ngithub.com/alecthomas/kingpin.(*Application).Parse\n        C:/Users/develar/go/pkg/mod/github.com/alecthomas/kingpin@v2.2.6+incompatible/app.go:222\nmain.main\n        Y:/Documents/app-builder/main.go:90\nruntime.main\n        c:/go/src/runtime/proc.go:203\nruntime.goexit\n        c:/go/src/runtime/asm_amd64.s:1373  \n  \xe2\xa8\xaf Cannot cleanup: \n\nError #1 --------------------------------------------------------------------------------\nError: D:\\directoryofmyapp\\myappname\\node_modules\\app-builder-bin\\win\\x64\\app-builder.exe exited with code ERR_ELECTRON_BUILDER_CANNOT_EXECUTE\n    at ChildProcess.<anonymous> (D:\\directoryofmyapp\\myappname\\node_modules\\builder-util\\src\\util.ts:243:14)\n    at Object.onceWrapper (events.js:422:26)\n    at ChildProcess.emit (events.js:315:20)\n    at maybeClose (internal/child_process.js:1048:16)\n    at Process.ChildProcess._handle.onexit (internal/child_process.js:288:5)\n\nError #2 --------------------------------------------------------------------------------\nError: D:\\directoryofmyapp\\myappname\\node_modules\\app-builder-bin\\win\\x64\\app-builder.exe exited with code ERR_ELECTRON_BUILDER_CANNOT_EXECUTE\n    at ChildProcess.<anonymous> (D:\\directoryofmyapp\\myappname\\node_modules\\builder-util\\src\\util.ts:243:14)\n    at Object.onceWrapper (events.js:422:26)\n    at ChildProcess.emit (events.js:315:20)\n    at maybeClose (internal/child_process.js:1048:16)\n    at Process.ChildProcess._handle.onexit (internal/child_process.js:288:5)  stackTrace=\n
Run Code Online (Sandbox Code Playgroud)\n

这是我的 package.json:

\n
{\n  "name": "myappname",\n  "version": "0.1.0",\n  "private": true,\n  "license": "MIT",\n  "productName": "myappname",\n  "author": "Bakhrom",\n  "description": "myappname",\n  "homepage": "./",\n  "main": "./public/electron.js",\n  "build": {\n    "appId": "com.myappname.electron-app",\n    "files": [\n      "build/electron.js",\n      "build/.env",\n      "./~/.aws/credentials",\n      "~/.aws/credentials",\n      "./.env",\n      ".env"\n    ],\n    "directories": {\n      "buildResources": "./public/**/*"\n    },\n    "win": {\n      "icon": "./public/img/favicon.png"\n    },\n    "publish": {\n      "provider": "s3",\n      "bucket": "mybucketname",\n      "region": "ap-southeast-1"\n    }\n  },\n  "dependencies": {\n    "@fluentui/react": "^7.146.0",\n    "@testing-library/jest-dom": "^4.2.4",\n    "@testing-library/react": "^9.3.2",\n    "@testing-library/user-event": "^7.1.2"\n    "electron-is-dev": "^1.2.0",\n    "electron-pos-printer": "^1.2.0",\n    "electron-updater": "^4.3.5",\n    ... other packages\n  },\n  "scripts": {\n    "start": "react-scripts start",\n    "build": "node --expose-gc --max-old-space-size=1900 node_modules/react-scripts/scripts/build.js",\n    "test": "react-scripts test",\n    "dev": "concurrently \\"npm start\\" \\"wait-on http://localhost:3000 && electron .\\"",\n    "electron-build": "npm run build && electron-builder build",\n    "deploy": "npm run build && electron-builder build --win --publish always",\n    "postinstall": "electron-builder install-app-deps"\n  },\n  "eslintConfig": {\n    "extends": "react-app"\n  },\n  "browserslist": {\n    "production": [\n      ">0.2%",\n      "not dead",\n      "not op_mini all"\n    ],\n    "development": [\n      "last 1 chrome version",\n      "last 1 firefox version",\n      "last 1 safari version"\n    ]\n  },\n  "devDependencies": {\n    "concurrently": "^5.3.0",\n    "dotenv": "^8.2.0",\n    "electron": "^9.1.0",\n    "electron-builder": "^22.9.1",\n    "electron-rebuild": "^2.3.2",\n    "wait-on": "^5.2.1"\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我正在运行以下命令:

\n
"deploy": "npm run build && electron-builder build --win --publish always"\n
Run Code Online (Sandbox Code Playgroud)\n

该存储桶是公共的。我不明白这是怎么回事?我还在环境变量和 ~/.aws/credentials 文件中提到了 aws_access_key_id 和 aws_secret_access_key 。但没有结果。

\n

sam*_*ler 3

根据官方文档,您需要有类似的 S3Options

需要 AWS 凭证,请参阅获取凭证。定义AWS_ACCESS_KEY_ID环境AWS_SECRET_ACCESS_KEY变量。或者在~/.aws/credentials.

  "build":
    "publish": {
      "provider": "s3",
      "bucket": "bucket-name"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

您将机密导出到 Windows 环境中:

setx AWS_ACCESS_KEY_ID AKIAIOSFODNN7EXAMPLE
setx AWS_SECRET_ACCESS_KEY wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
setx AWS_DEFAULT_REGION us-west-2
Run Code Online (Sandbox Code Playgroud)

Public除非你愿意,否则你不必制作水桶。确保User's您使用的凭据至少具有以下权限来访问存储桶:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:ListMultipartUploadParts",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::bucketName/*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::bucketName"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

附注说明为什么要捆绑凭据文件

      "./~/.aws/credentials",
      "~/.aws/credentials",
Run Code Online (Sandbox Code Playgroud)