Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[v13.10.3] リージョン未設定のオブジェクトストレージを使用しているインスタンスでファイルがアップロードできない #10408

Closed
nexryai opened this issue Mar 25, 2023 · 17 comments
Labels
⚠️bug? This might be a bug

Comments

@nexryai
Copy link
Contributor

nexryai commented Mar 25, 2023

💡 Summary

オブジェクトストレージにファイルがアップロードできない

🥰 Expected Behavior

オブジェクトストレージにファイルがアップロードできる

🤬 Actual Behavior

Mar 25 10:23:49 localhost.localdomain misskey[2512950]: ERR  *        [drive register]        Upload Failed: key = contents/073103bc-1b71-49d0-987a-5e586b6872fa.avif, filename = output.avif
Mar 25 10:23:49 localhost.localdomain misskey[2512950]: Error: Region is missing
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at default (/home/suser/misskey/node_modules/.pnpm/@aws-sdk+config-resolver@3.292.0/node_modules/@aws-sdk/config-resolver/dist-cjs/regionConfig/config.js:10:15)
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at /home/suser/misskey/node_modules/.pnpm/@aws-sdk+node-config-provider@3.292.0/node_modules/@aws-sdk/node-config-provider/dist-cjs/fromStatic.js:6:83
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at /home/suser/misskey/node_modules/.pnpm/@aws-sdk+property-provider@3.292.0/node_modules/@aws-sdk/property-provider/dist-cjs/chain.js:11:28
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async coalesceProvider (/home/suser/misskey/node_modules/.pnpm/@aws-sdk+property-provider@3.292.0/node_modules/@aws-sdk/property-provider/dist-cjs/memoize.js:14:24)
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async /home/suser/misskey/node_modules/.pnpm/@aws-sdk+property-provider@3.292.0/node_modules/@aws-sdk/property-provider/dist-cjs/memoize.js:26:28
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async useFipsEndpoint (/home/suser/misskey/node_modules/.pnpm/@aws-sdk+config-resolver@3.292.0/node_modules/@aws-sdk/config-resolver/dist-cjs/regionConfig/resolveRegionConfig>
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async resolveParams (/home/suser/misskey/node_modules/.pnpm/@aws-sdk+middleware-endpoint@3.292.0/node_modules/@aws-sdk/middleware-endpoint/dist-cjs/adaptors/getEndpointFromIn>
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async getEndpointFromInstructions (/home/suser/misskey/node_modules/.pnpm/@aws-sdk+middleware-endpoint@3.292.0/node_modules/@aws-sdk/middleware-endpoint/dist-cjs/adaptors/get>
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async /home/suser/misskey/node_modules/.pnpm/@aws-sdk+middleware-endpoint@3.292.0/node_modules/@aws-sdk/middleware-endpoint/dist-cjs/endpointMiddleware.js:8:26
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async /home/suser/misskey/node_modules/.pnpm/@aws-sdk+middleware-logger@3.292.0/node_modules/@aws-sdk/middleware-logger/dist-cjs/loggerMiddleware.js:7:26
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async Promise.all (index 0)
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async Upload.__uploadUsingPut (/home/suser/misskey/node_modules/.pnpm/@aws-sdk+lib-storage@3.294.0_@aws-sdk+client-s3@3.294.0/node_modules/@aws-sdk/lib-storage/dist-cjs/Uploa>
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async Upload.__doConcurrentUpload (/home/suser/misskey/node_modules/.pnpm/@aws-sdk+lib-storage@3.294.0_@aws-sdk+client-s3@3.294.0/node_modules/@aws-sdk/lib-storage/dist-cjs/U>
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async Promise.all (index 0)
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async Upload.__doMultipartUpload (/home/suser/misskey/node_modules/.pnpm/@aws-sdk+lib-storage@3.294.0_@aws-sdk+client-s3@3.294.0/node_modules/@aws-sdk/lib-storage/dist-cjs/Up>
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async Upload.done (/home/suser/misskey/node_modules/.pnpm/@aws-sdk+lib-storage@3.294.0_@aws-sdk+client-s3@3.294.0/node_modules/@aws-sdk/lib-storage/dist-cjs/Upload.js:39:16)
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async DriveService.upload (file:///home/suser/misskey/packages/backend/built/core/DriveService.js:269:9)
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async Promise.all (index 0)
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async DriveService.save (file:///home/suser/misskey/packages/backend/built/core/DriveService.js:105:13)
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async DriveService.addFile (file:///home/suser/misskey/packages/backend/built/core/DriveService.js:432:20)
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async file:///home/suser/misskey/packages/backend/built/server/api/endpoints/drive/files/create.js:110:35
Mar 25 10:23:49 localhost.localdomain misskey[2512950]:     at async ApiCallService.call (file:///home/suser/misskey/packages/backend/built/server/api/ApiCallService.js:262:16)
Mar 25 10:23:49 localhost.localdomain misskey[2512950]: DONE *        [drive register]        drive file has been created 9cquqvv45a

📝 Steps to Reproduce

  1. v13.10.3でオブジェクトストレージを使っているインスタンスでファイルをアップロードする
  2. アップロード自体は200で通るがアップロードされたファイルにアクセスしようとしても404になる

📌 Environment

Misskey version: v13.10.3
Your OS: Rocky linux
Your browser: Firefox

@nexryai nexryai added the ⚠️bug? This might be a bug label Mar 25, 2023
@nexryai nexryai changed the title オブジェクトストレージにファイルがアップロードできない [v13.10.3] オブジェクトストレージにファイルがアップロードできない Mar 25, 2023
@nexryai
Copy link
Contributor Author

nexryai commented Mar 25, 2023

Error: Region is missingなのでリージョン未設定の環境で発生する感じかも

@acid-chicken
Copy link
Member

Related to #10363

@GrapeApple0
Copy link
Contributor

Error: Region is missingなのでリージョン未設定の環境で発生する感じかも
自分も同じ状況になって、regionにus-east-1とか適当に入れたら直りました(r2使ってる)

@nexryai
Copy link
Contributor Author

nexryai commented Mar 25, 2023

設定画面に

'xx-east-1'のようなregionを指定してください。使用サービスにregionの概念がない場合は、空または'us-east-1'にしてください。

とありますがMinioの場合リージョンが空でもus-east-1でも駄目でMinio側で適当なリージョンを設定してs3ForcePathStyleを有効にする必要があったので、もしMisskey側の問題でない場合はこの表記を改めた方がいいかもしれません

@nexryai nexryai changed the title [v13.10.3] オブジェクトストレージにファイルがアップロードできない [v13.10.3] リージョン未設定のオブジェクトストレージを使用しているインスタンスでファイルがアップロードできない Mar 25, 2023
@yszkst
Copy link
Contributor

yszkst commented Mar 25, 2023

すみません、漏れがありました。  
対処 の方向でよいでしょうか

原因

v2/v3の挙動変更を見落としていました。

1. region未指定の扱い

v3ではregionの指定または環境変数・設定ファイルがいずれも無く、判別できないときはエラーにする。
v2はregion指定無しのときは自動で us-east-1 としていた。

2. v3でregionを空文字列にしたときの扱い

region: meta.objectStorageRegion ?? undefined のとき meta設定が空文字列のときは空文字列になる。
v3でregion指定が空文字列のときは環境変数・設定ファイルがあってもエラーになる。

v2では未指定と同じくus-east-1になる。

不明

s3ForcePathStyle をfalseでminioに繋いだことがない。

s3ForcePathStyle を true でminioの設定に関わらず適当なregion ( dummy-region-1 ) のように入れてもつながる。

対処

  • 説明文言を変える。
    • regionが無いときはus-east-1を入れる。
    • 空にするのは設定ファイル・環境変数を読む場合とする。
  • 空文字列のときはundefinedにする。

余談

R2は 'auto' を例にしている。
https://blog.cloudflare.com/ja-jp/r2-ga-ja-jp/

// 次に、新しいクライアントを作成します。R2にはS3互換性のためのリージョンが必要ですが、サポートされているのは「auto」のみであることに注意が必要です
const S3 = new S3Client({
  region: "auto",

@yszkst
Copy link
Contributor

yszkst commented Mar 25, 2023

#10410  出しました。
regionが空のときは us-east-1 にしてしまうのも考えましたが、空の値も意味を持っているためやらない方がよいとして、仕様変更扱いにしています。

@jojobii-arks
Copy link
Contributor

Adding " " to the "Region" field works as a temporary fix. Using a DigitalOcean Spaces as S3 Provider.

image

@PYU224
Copy link

PYU224 commented Mar 26, 2023

Wasabiではus-east-1及び該当regionにしてもファイルのアップロードができないんですが、どうしたら良いのでしょうか?

@nexryai
Copy link
Contributor Author

nexryai commented Mar 26, 2023

エンドポイントがドメインのみ(httpsなどを含まない)になってるか確認してください。それでも駄目ならs3ForcePathStyleを変えてみてください

@PYU224
Copy link

PYU224 commented Mar 26, 2023

httpsが含まれてました・・・

@nexryai
Copy link
Contributor Author

nexryai commented Mar 26, 2023

S3の場合は空、それ以外の場合は各サービスのendpointを指定してください。'host'または'host:port'のように指定します。

というメッセージが分かりにくいのか自分も含めて観測範囲ではそれなりの人数がスキーマを含めてコケてるので、https://などのスキーマを含めずドメイン名のみというのを強調した方が良いかもしれません

@acid-chicken
Copy link
Member

acid-chicken commented Mar 26, 2023

S3の場合は空、それ以外の場合は各サービスのendpointを指定してください。'host'または'host:port'のように指定します。

というメッセージが分かりにくいのか自分も含めて観測範囲ではそれなりの人数がスキーマを含めてコケてるので、https://などのスキーマを含めずドメイン名のみというのを強調した方が良いかもしれません

サインインフォームの [ @ username @instance.example ] のように入力欄にプレフィックスとして書いてしまうのが良さそう

@GrapeApple0
Copy link
Contributor

Screen Shot 2023-03-26 at 23 06 23
雑ですがこういう感じにするだけでもだいぶ分かりやすくなると思います

@tukiminya
Copy link

私の意見としては<input>placeholerを指定するのが一番わかりやすいと思います。

例:
image

@900809
Copy link

900809 commented Mar 31, 2023

I use R2. What worked for me was removing https:// from endpoint and setting region to auto.

@nexryai
Copy link
Contributor Author

nexryai commented Mar 31, 2023

オブジェクトストレージ設定のUI関係分かりやすくするPR書いて出しちゃっていいですかね?

@nexryai
Copy link
Contributor Author

nexryai commented Apr 10, 2023

解決したっぽいのでCloseします

@nexryai nexryai closed this as completed Apr 10, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
⚠️bug? This might be a bug
Projects
None yet
Development

No branches or pull requests

9 participants