aws-sdk-js-v3: S3 Multi-Region Access Point(MRAP) is not available unless with additional dependency
Description
Package @aws-sdk/client-s3
launched the support for S3 Multi-Region Access Point (MRAP) feature in v3.31.0
. This feature relies on signer class from aws-crt
package. This dependency requires native addons that takes up to 10.5 MB on disk. Because the dependency is only required by MRAP feature, we are omitting the dependency in @aws-sdk/client-s3
.
To use this feature, you need to install this dependency explicitly in your application:
$ npm install @aws-sdk/signature-v4-crt
$ yarn add @aws-sdk/signature-v4-crt
Because aws-crt contains platform-specific binary code, the following use cases are not supported in MRAP:
- browsers
- React Native
- bundle as Node.js application
The suggested use case for supporting MRAP in Node.js app is to deploy your application with the complete node_modules
folder.
Describe alternatives you’ve considered
We are working on solutions to unblock the MRAP for all the supported platforms.
Related issues:
About this issue
- Original URL
- State: open
- Created 3 years ago
- Reactions: 1
- Comments: 22 (4 by maintainers)
Commits related to this issue
- adding dep for https://github.com/aws/aws-sdk-js-v3/issues/2822 — committed to aweber1/pieces-of-flair-meme-generator-netlify by aweber1 2 years ago
Just want to weigh in with the impact this issue currently has on our team. Hopefully it helps to motivate a fix. Our developers use a mix of macOS and Windows machines.
We depend on the
@aws-sdk/client-s3
package. This causes the package manager to complain about the missing@aws-sdk/signature-v4-crt
peer dependency.The Windows users go ahead and add the dep to
package.json
, and everything appears to be resolved. Then a macOS user pulls the latest changes and suddenly package installation is completely broken.This isn’t a great experience. Given that
@aws-sdk/signature-v4-crt
has ~63k downloads per week, I can only imagine how many developers have run headlong into this so far.Would also like like updates on this. Getting error during build
Module not found: Can't resolve '@aws-sdk/signature-v4-crt'
on latest version 3.354.0This is insane. No update from Amazon? This has put an entire build on hold.
Minimal documentation for MRAP as it is.
This issue is affecting our team and our entire organization will run into the same issue soon as we are moving towards a DNS regional failover which requires SigV4A signing in the browser to make API calls to unkown AWS region (using
@aws-sdk/signature-v4-crt
).Are there alternatives for the time being? Can we do SigV4A signing with existing parts of the SDK that work on browser?
I just tried this with
3.58.0
and I’m still seeing the error on macOS:…where I have the library referenced like so:
and it’s warning on this line:
The AWS SDK for JavaScript team is planning to change the usage of the optional CRT dependency in a future update.
The change is described in this announcement: https://github.com/aws/aws-sdk-js-v3/issues/5229.
The change is aimed at reducing errors encountered by bundlers and other static analysis tools. The
@aws-sdk/signature-v4-crt
package remains optional and is only required when using S3 MRAP or EventBridge.any updates on this?
We’re trying to use apigateway in multiple regions with custom domains with iam authorization. The request can be routed to different region based on latency, so regular sigV4 doesn’t work.
Is there any other workaround to make apigateway works in multiple regions with the same domain name?
@jekh Thanks a lot for pointing this out! It’s a miss on our side. I will address them a separate PR.
I just ran into this issue, seeing the same peer dependency warnings as @rossng. Using the
peerDependenciesMeta
field of package.json might be a good solution: https://docs.npmjs.com/cli/v8/configuring-npm/package-json#peerdependenciesmetaAdding this to package.json in middleware-sdk-s3 should fix this:
FYI: One might consider porting the signer class of the common runtime to webassembly. Web assembly is supported in all major browsers and in NodeJs 8+ See also: https://developer.mozilla.org/en-US/docs/WebAssembly/C_to_wasm
Kind regards, Hans