trpc + AWS Lambda (through cdk)
Hi all, has anyone successfully integrated tRPC with AWS Lambda? My current stack is API Gateway + Lambda, all created through cdk. I am trying to figure out how to hook up the tRPC router and client to the lambda code. This is my first time using tRPC 😅
36 Replies
Have you looked at the Lambda Adapter and its docs?
yeah, I have been trying to figure out how to make that sample code work. But it doesn't show me how to fit that code into the surrounding cdk infrastructure.
I see that they export a handler:
but when I try to reference that handler from cdk it's not quite working:
remember to add AWS extension in your VSCode
the prompt + autocomplete is good
So exporting a handler is a standard lambda thing, that’s the boundary of your application
At that point you’re looking at CDK docs to integrate, though honestly I haven’t used CDK. For my own local dev I just use a standalone trpc adapter, and the lambda adapter is just for AWS deployments
ok I got it mostly figured out -- for any other wayward souls with this issue, check out this github repo that really helped me out: https://github.com/jacksonludwig/trpc-repro
GitHub
GitHub - jacksonludwig/trpc-repro
Contribute to jacksonludwig/trpc-repro development by creating an account on GitHub.
@Nick Lucas thanks for the help. I have one more question: when creating my client typescript keeps complaining to me that I am not providing a
transformer
, and I don't really know what I am supposed to pass in for that. The sample code I linked above doesn't seem to have to do that, I guess because they are not using createTRPCProxyClient
. Do you know why that is or what I can use as a transformer?That's a tRPC thing, check the docs for transformers 🙂
It's easy!
I will, though I am still curious why every example I've seen of the proxy client doesnt include having to specify a transformer
You don't have to, but you also can't go half in, which is what you might have inadvertently done if it's moaning at you
^^^ this doesnt compile
Can you share your appRouter too?
yeah
What's the compile error for your example?
This does look fine so it's weird you're having an issue
Hm, what's your @trpc/* version? Are they all identical?
I've definitely seen someone else asking about this, and I think they resolved it, just can't find it now
ok ill search around as well
Reload your editor / TS language server and restart your build if you haven't
no luck with that
bah, this is a weird one
This is an error that appears when you have set a transformer on the API but not on the frontend
It's intentional and I can reproduce that in my own codebase
But transformers are optional
I suspect it might be something weird related to your repo setup. If you install superjson and get that set up, do any new errors appear?
I was able to pass in superjson and get around the error, but then the response from my lambda was coming back undefined -- I was wondering if the default transformer would've just handled the response correctly
At runtime?
yep. and I tested out calling the api directly in my aws console, confirmed its working. Also confirmed that the lambda is getting invoked when I call it from the client by double checking logs
it's just the return value isn't getting processed correctly
That might be something more related to API Gateway if you're using that
honestly AWS is a weird balancing act in my experience
There's talk to adding some more in-depth docs but we're not there yet
it definitely could be an apig oddity, though I can see it in the console returning the json response correctly. Maybe I need to find somewhere in between that I can inspect to see where that response is getting lost... Like a debug log from the trpc client or something
Yep I put console logs at several stages, exported my own handler and called the lambda adapter's handler within it so I could log before and after.
It's a pain but that's AWS 😄
Did also have some similar teething troubles like you
ok I got it working -- truly dont understand this yet but adding
Context
to the type parameter of create
did the trick:
also fixed having to supply a transformerHuh, that’s very weird
Typescript issue maybe? Is strict mode enabled?
ohh no it wasnt. I didn't do the initial setup of this codebase, didn't even notice strict wasnt on. Enabling strict mode and removing the extra
<Context>
works, compile-wise -- not sure yet about runtimeThat’s good, strict mode fixes a lot of stuff in these well-typed frameworks
Unknown User•2y ago
Message Not Public
Sign In & Join Server To View
Ferdy, i'm wondering how to push the code on aws, did you compile your code with tsc and send the dist folder to aws lambda ?
Because i have a tons of problem with tsc and running the js file
i do everything through cdk, specifically using
NodejsFunction