- 164
- 261 662
Yan Cui
United Kingdom
ะัะธัะดะฝะฐะฒัั 28 ะณัั 2007
๐ Hi, Iโm an AWS Serverless Hero and independent consultant. I help people go faster for less using serverless technologies.
I have run production workloads at scale in AWS since 2009 and have a track record of improving businesses with technology. For instance, I led a small team that transformed a social network with serverless technologies in a matter of months. Feature delivery time went from months to days, and sometimes even hours. The system became more scalable, and reliable and was over 90% cheaper to run.
If you want to learn more about serverless and how it can accelerate your feature velocity and help you get more done faster and cheaper, then subscribe to my channel and check out my courses.
I have run production workloads at scale in AWS since 2009 and have a track record of improving businesses with technology. For instance, I led a small team that transformed a social network with serverless technologies in a matter of months. Feature delivery time went from months to days, and sometimes even hours. The system became more scalable, and reliable and was over 90% cheaper to run.
If you want to learn more about serverless and how it can accelerate your feature velocity and help you get more done faster and cheaper, then subscribe to my channel and check out my courses.
Hookdeck has built a better Developer Experience than EventBridge
Ep #112 of the Real-World Serverless podcast
In this episode, I spoke with Alex Bouchard, co-founder and CTO of Hookdeck, to learn more about Hookdeck and how it differs from Amazon EventBridge.
Alex gave me a demo of Hookdeck and it has some really nice features that address many of the developer experience problems with EventBridge. For example:
* deliver events to local targets
* audit history of event deliveries
* issues page of failed event deliveries
* replay failed events
Links from the episode:
* Check out Hookdeck hookdeck.com/?ref=realworldserverless
โ Recommended playlists:
Real-World Serverless podcast on UA-cam
ua-cam.com/video/jxL5Zk12JUE/v-deo.html
My BEST videos of 2024
ua-cam.com/video/jxL5Zk12JUE/v-deo.html
๐ For more free videos on UA-cam, subscribe to my channel:
youtube.com/@theburningmonk?sub_confirmation=1
๐ If you're hungry for more insights, best practices, and tips on building serverless applications, make sure to subscribe to my weekly newsletter and elevate your serverless game!
theburningmonk.com/subscribe
๐ My courses ๐
theburningmonk.com/courses
๐จโ๐ซ My hands-on serverless workshop ๐จโ๐ซ
productionreadyserverless.com
๐ Find me here
Twitter: theburningmonk
LinkedIn: www.linkedin.com/in/theburningmonk
Blog: theburningmonk.com
In this episode, I spoke with Alex Bouchard, co-founder and CTO of Hookdeck, to learn more about Hookdeck and how it differs from Amazon EventBridge.
Alex gave me a demo of Hookdeck and it has some really nice features that address many of the developer experience problems with EventBridge. For example:
* deliver events to local targets
* audit history of event deliveries
* issues page of failed event deliveries
* replay failed events
Links from the episode:
* Check out Hookdeck hookdeck.com/?ref=realworldserverless
โ Recommended playlists:
Real-World Serverless podcast on UA-cam
ua-cam.com/video/jxL5Zk12JUE/v-deo.html
My BEST videos of 2024
ua-cam.com/video/jxL5Zk12JUE/v-deo.html
๐ For more free videos on UA-cam, subscribe to my channel:
youtube.com/@theburningmonk?sub_confirmation=1
๐ If you're hungry for more insights, best practices, and tips on building serverless applications, make sure to subscribe to my weekly newsletter and elevate your serverless game!
theburningmonk.com/subscribe
๐ My courses ๐
theburningmonk.com/courses
๐จโ๐ซ My hands-on serverless workshop ๐จโ๐ซ
productionreadyserverless.com
๐ Find me here
Twitter: theburningmonk
LinkedIn: www.linkedin.com/in/theburningmonk
Blog: theburningmonk.com
ะะตัะตะณะปัะดัะฒ: 137
ะัะดะตะพ
EventCatalog REVOLUTIONIZES Governance in Event-Driven Architectures | ft. David Boyne
ะะตัะตะณะปัะดัะฒ 582ะะตะฝั ัะพะผั
Ep #111 of the Real-World Serverless podcast In this episode, I spoke with David Boyne, the creator of EventCatalog, to learn more about the most common challenges with Event-Driven Architectures and how EventCatalog can solve the governance problem - how events are versioned, schema'd, discovered and tested. Links from the episode: * Check out EventCatalog www.eventcatalog.dev/ * Check out Win...
AWS Cloud Development Kit (CDK) Explained in 5 mins
ะะตัะตะณะปัะดัะฒ 321ะััััั ัะพะผั
In this video, let's understand the key concepts behind AWS CDK - constructs, nodes, CLI commands. This is a preview lesson from my upcoming workshop, "Production-Ready Serverless". If you liked this, then please check out the full curriculum at productionreadyserverless.com. You can get 15% OFF with the code "UA-cam15" during checkout. Hope to see you there! โ
Recommended playlists: Learn to b...
Light Events vs Rich Events in Event-Driven Architectures
ะะตัะตะณะปัะดัะฒ 376ะััััั ัะพะผั
This is a preview lesson from my upcoming workshop, "Production-Ready Serverless". If you liked this, then please check out the full curriculum at productionreadyserverless.com. You can get 15% OFF with the code "UA-cam15" during checkout. Hope to see you there! In this video, let's understand how much information you should include in events and how the two main approaches - light events vs. r...
CQRS Explained in 4 Mins | What is CQRS? Pros & Cons
ะะตัะตะณะปัะดัะฒ 1 ัะธั.ะััััั ัะพะผั
This is a preview lesson from my upcoming workshop, "Production-Ready Serverless". If you liked this, then please check out the full curriculum at productionreadyserverless.com. You can get 15% OFF with the code "UA-cam15" during checkout. Hope to see you there! In this video, let's understand the CQRS pattern - how to implement it, when to use it, and what are the pros & cons of this pattern. ...
Event Sourcing Explained in 5 Mins | Why You Need It, Common Pitfalls
ะะตัะตะณะปัะดัะฒ 559ะััััั ัะพะผั
This is a preview lesson from my upcoming workshop, "Production-Ready Serverless". If you liked this, then please check out the full curriculum at productionreadyserverless.com. You can get 15% OFF with the code "UA-cam15" during checkout. Hope to see you there! In this video, let's understand what is the Event Sourcing pattern. What problems does it solve? And what are some common pitfalls to ...
How to implement Anti Corruption Layer with EventBridge and Lambda
ะะตัะตะณะปัะดัะฒ 500ะััััั ัะพะผั
This is a preview lesson from my upcoming workshop, "Production-Ready Serverless". If you liked this, then please check out the full curriculum at productionreadyserverless.com. You can get 15% OFF with the code "UA-cam15" during checkout. Hope to see you there! In this video, let's see how and where we can implement an anti-corruption layer in an Event-Driven Architecture involving EventBridge...
Here's how AWS Lambda works under the hood
ะะตัะตะณะปัะดัะฒ 5 ัะธั.2 ะผััััั ัะพะผั
This is a preview lesson from my upcoming workshop, "Production-Ready Serverless". If you liked this, then please check out the full curriculum at productionreadyserverless.com. You can get 15% OFF with the code "UA-cam15" during checkout. Hope to see you there! In this video, let's understand how AWS Lambda works under the hood and the difference between synchronous vs. asynchronous invocation...
The Ultimate Guide to Context Mapping in Domain Driven Design
ะะตัะตะณะปัะดัะฒ 7032 ะผััััั ัะพะผั
This is a preview lesson from my upcoming workshop, "Production-Ready Serverless". If you liked this, then please check out the full curriculum at productionreadyserverless.com. You can get 15% OFF with the code "UA-cam15" during checkout. Hope to see you there! In this video, let's learn about context mapping, which helps us visualize and understand the relationship between teams and the commu...
Domain Driven Design (DDD) explained in 3 minutes
ะะตัะตะณะปัะดัะฒ 1,4 ัะธั.2 ะผััััั ัะพะผั
This is a preview lesson from my upcoming workshop, "Production-Ready Serverless". If you liked this, then please check out the full curriculum at productionreadyserverless.com. You can get 15% OFF with the code "UA-cam15" during checkout. Hope to see you there! In this video, let's learn the basics of Domain Driven Design, or DDD and understand what really is a "bounded context", which is so o...
Is Restate.dev the Step Functions killer? | ft. Jack Kleeman
ะะตัะตะณะปัะดัะฒ 1,3 ัะธั.2 ะผััััั ัะพะผั
Ep #110 of the Real-World Serverless podcast Thank you to Momento for supporting this episode. Momento's real-time data platform empowers developers to build innovative products faster and more reliably than ever before. Visit gomomento.co/theburningmonk for more information. In this episode, I spoke with Jack Kleeman, the creator of Restate Cloud, to learn more about Restate and the idea of "d...
Bref vs. Laravel Vapor for building serverless apps in PHP | ft Matthieu Napoli
ะะตัะตะณะปัะดัะฒ 4443 ะผััััั ัะพะผั
Ep #109 of the Real-World Serverless podcast Thank you to Momento for supporting this episode. Momento's real-time data platform empowers developers to build innovative products faster and more reliably than ever before. Visit gomomento.co/theburningmonk for more information. In this episode, I spoke with Matthieu Napoli about the Bref framework for developing serverless applications in PHP - h...
Andrew Brown's Secret to Landing Your DREAM JOB in Tech
ะะตัะตะณะปัะดัะฒ 1923 ะผััััั ัะพะผั
Here's a fascinating job-hunting technique Andrew Brown used to land a CTO job and made himself highly sought-after! 1. Look for start-ups that have raised money on Crunchbase. 2. Understand what they're building, and build a prototype of their thing. 3. Write highly targeted emails to the company and share your work. It's one of the coolest ideas I've ever heard, and it'd have worked 100% on m...
Writing AWS Lambda functions in Rust with James Eastham
ะะตัะตะณะปัะดัะฒ 6414 ะผััััั ัะพะผั
Ep #108 of the Real-World Serverless podcast Thank you to Hookdeck for sponsoring this episode. If you're looking to level up your event-driven architecture, then check out their serverless event gateway at hookdeck.com/theburningmonk and help support this channel. James Eastham is a developer advocate at Datadog and co-author of "Crafting Lambda Functions in Rust". In this episode, we dive int...
[FULL COURSE] Building real-time apps with Momento
ะะตัะตะณะปัะดัะฒ 7614 ะผััััั ัะพะผั
Learn how to build real-time applications with Momento, the real-time data platform founded by the same engineering team that built DynamoDB. Momento is a serverless caching and real-time data platform designed for speed, scalability, and simplicity. Its caching solution can handle millions of requests per second with sub-millisecond latency, and you can scale your WebSocket application to mill...
How to have a Successful Cloud Career in 2024 | ft. Andrew Brown
ะะตัะตะณะปัะดัะฒ 7665 ะผัััััะฒ ัะพะผั
How to have a Successful Cloud Career in 2024 | ft. Andrew Brown
Rust with Lambda, easy-mode Rust & future of Middy | ft. Luciano Mammino
ะะตัะตะณะปัะดัะฒ 6605 ะผัััััะฒ ัะพะผั
Rust with Lambda, easy-mode Rust & future of Middy | ft. Luciano Mammino
AWS veteran shares the secret to succeeding at AWS & the inception story of Cognito
ะะตัะตะณะปัะดัะฒ 4066 ะผัััััะฒ ัะพะผั
AWS veteran shares the secret to succeeding at AWS & the inception story of Cognito
Baseline - is this new serverless development framework better than Amplify?
ะะตัะตะณะปัะดัะฒ 6406 ะผัััััะฒ ัะพะผั
Baseline - is this new serverless development framework better than Amplify?
Community building, being an enabler, is serverless dead? - ft. Allen Helton | Real-World Serverless
ะะตัะตะณะปัะดัะฒ 2026 ะผัััััะฒ ัะพะผั
Community building, being an enabler, is serverless dead? - ft. Allen Helton | Real-World Serverless
Events vs Commands in Event-Driven Architectures, when to use which?
ะะตัะตะณะปัะดัะฒ 1,2 ัะธั.8 ะผัััััะฒ ัะพะผั
Events vs Commands in Event-Driven Architectures, when to use which?
Domain vs. Integration events in DDD, why they matter and how they differ
ะะตัะตะณะปัะดัะฒ 2,1 ัะธั.8 ะผัััััะฒ ัะพะผั
Domain vs. Integration events in DDD, why they matter and how they differ
EventBridge: should you have centralized event bus or one bus per service?
ะะตัะตะณะปัะดัะฒ 1,4 ัะธั.8 ะผัััััะฒ ัะพะผั
EventBridge: should you have centralized event bus or one bus per service?
Peek behind the curtains of the AWS Heroes & Community Builders programmes
ะะตัะตะณะปัะดัะฒ 4208 ะผัััััะฒ ัะพะผั
Peek behind the curtains of the AWS Heroes & Community Builders programmes
AWS Lite, Web Components, Functionless and WASM with Brian LeRoux
ะะตัะตะณะปัะดัะฒ 5119 ะผัััััะฒ ัะพะผั
AWS Lite, Web Components, Functionless and WASM with Brian LeRoux
LocalStack v3 is here and it's kinda amazing!
ะะตัะตะณะปัะดัะฒ 3,8 ัะธั.9 ะผัััััะฒ ัะพะผั
LocalStack v3 is here and it's kinda amazing!
Azure Functions: DEEP DIVE with Microsoft MVP, Ian Griffiths
ะะตัะตะณะปัะดัะฒ 1,8 ัะธั.10 ะผัััััะฒ ัะพะผั
Azure Functions: DEEP DIVE with Microsoft MVP, Ian Griffiths
How does LLRT differ from Bun, Nodejs and Deno?
ะะตัะตะณะปัะดัะฒ 66310 ะผัััััะฒ ัะพะผั
How does LLRT differ from Bun, Nodejs and Deno?
How DAZN streams live sports to MILLIONS of concurrent viewers
ะะตัะตะณะปัะดัะฒ 1,6 ัะธั.10 ะผัััััะฒ ัะพะผั
How DAZN streams live sports to MILLIONS of concurrent viewers
Why is AWS building a JavaScript runtime?
ะะตัะตะณะปัะดัะฒ 23810 ะผัััััะฒ ัะพะผั
Why is AWS building a JavaScript runtime?
Great video!
I don't suppose there's any way to attach validation (message payload format)?
Yes, you can. You can configure a request model and API Gateway would use it to validate the request payload. But it's only JSON and there's no way to customize the error message, so it's difficult for the caller to know what's wrong with their payload.
That does help understand the Levels, thanks!
One issue with rich events is the data may be stale so you have to be careful replaying events. Ordering is another thing that needs to be taken into consideration. If you have a customer that changes their name multiple times in succession and you have the details of the name change in the event then depending on the order the messages are received you might end up with the name in the last event you receive been incorrect. This is in contrast to light events where you also go back to the source system to get the latest details.
The reverse is also true and I'd argue it's a more likely requirement - that you want to know the state of the related entities at the time when the event occurred. E.g. when an order is placed, you want to know the price of the menu item and the name of the restaurant at the time the order was placed, even when you replay the event 2 years later. Because decisions were made at the time based on the state of those entities at that time, not at the time of when the events are replayed. Plus, in the event of a replay, the new consumer has the option to discard the information contained in the event and go back to the source system with the entity id and fetch their latest state. The reverse is not possible with light events, if you need the state of the entities at the time of the event but they were not contained in the event, then you likely don't have a way to fetch their state from the source system.
Nice work!
IMHO Rich events increases coupling because event format is more complex and events are like interfaces for the consumer. So, every times that restaurant entity changes, maybe adding a new attribute, you have to change also rich event format and so event consumer has to change its interface. Instead, with light events, putting only restaurant id, the event has fixed format and consumer interface doesn't have to change. If the new attribute is important to the consumer, it will query the restaurant entity using the new service to get that attribute but you dont0 have to change interface if you don't need that.
There might be higher format coupling with rich events, but if the consumer needs to call the publisher's API to hydrate a piece of data, then that introduces temporal coupling between services, and to me, that's a higher form of coupling and one that is more problematic.
Nice video Yan, as always great content. But just a point here, storing rich AND light events wouldn't be cost inefficient ?
You don't have to store both. As I said in the video around the 4:45 mark, if we decide to store the events, we can choose which version to store.
Very succinct. Great visuals. Clear. Concise.
Thank you ๐ Glad you think so!
Really great video. Thank you Yan
Thank you, glad you liked it!
Amazing Video!!! โค
Glad you liked it!!
Great Video! Thankyou ๐
Glad you liked it!
Thank you Yan for your educational videos. I've learnt a lot from you
No worries, glad i could help!
Cognito is a limiting factor today
Do you know another auth vendor that supports multi-region out of the box? I've looked at the likes of Auth0 and Clerk but they are all single region as well.
@ not a managed serviceโฆ only keycloak, but it is self hosted
Hi that video is from what course?
this one: productionreadyserverless.com/
This is such an awesome video for the 10year anniversary of Lambdas
Thank you!
This channel is a gem. Please add a way to get you online coffee. I love to reciprocate a bit for all things I have learnt from you
Insightful. Thank you. Just to complement this video: async invocations aren't throttled, unlike sync invocations.
Very enlightening conversation, thank you both for sharing your experience like this, much appreciated ๐ Iโve followed you both on LinkedIn for a while but only just came across your respective UA-cam channels, looking forward to the next one. Also just bought the book (thanks for the link Yan) - we are currently migrating several of our ELT Lambda workloads from Python to Rust for performance reasons, looking forward to reading the book! Many thanks ๐
So when my lambda is eventsource-mapped with a kinesis data stream, in that case, do you mean there is kinesis along with sqs involved ?Is there any AWS documentation where I can refer the same?
Ah, good question! No, ESMs (event source mappings) is different. If you go to 4:58 in the video where I talk about the internal pollers, they have basically the same set up, but for Kinesis Data Streams, where the no. of pollers is scaled based on the no. of shards in the stream instead (whereas SQS pollers are scaled based on size of backlog). And when it receives some messages, the ESM invokes your function synchronously, and the same rules around throttling, etc. apply. This page explains how ESMs is different: docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html Essentially, both sync & async invocations is when someone (e.g another AWS service) invokes your function - push based. Whereas ESM is when the Lambda service needs to poll an event source on your behalf, i.e. poll based.
Great video. For what you know, is the poller's code public and available on a public repository?
Thank you! The source code for event-source mappings are not public AFAIK
Thanks, this is such a great channel
Thank you!
Super!! Thanks by the content
Thank you, glad you liked it! AppSync has announced a new websocket feature called Events API, if you want the same managed websocket experience (e.g. not having to manage connections) without the GraphQL protocol on top of it, then you should check it out. Here's more details: aws.amazon.com/blogs/mobile/announcing-aws-appsync-events-serverless-websocket-apis/
Excellent video. Thank you
Thank you, glad you liked it!
Waiting for the next video ๐
The next video is here: ua-cam.com/video/6_pQRH9wYtU/v-deo.html All about context maps, and the different patterns and how to think about them
This is an interesting one. For an hexagonal arch I would assume quite a few business cases defined in my domain usecases/services and quite some aggregate invariants defined as well. Those will likely (hopefully) rely on repository abstractions that are reused and combined for each usecase. That's already a lot stuff to unit test. And we haven't talked about message versioning and anti corruption layer implementation. So a multiple of the system parts. The integration tests (e.g. lambda -> dynamo, lambda -> s3, talking adapters ofc) have the happy and failure paths from the adapters integration. I think there is a point where you will either end up with more unit tests than int tests (rather quick) or test business cases in integration tests. And in prefer the fast local feedback. In the simple example cases it's often the other way around, but that's not reality.
Nice overview of important concepts in just 4 minutes!๐ฎ Thanks for your great content! ๐ at some point I'll definitely take your course๐
Thank you! Glad you liked it ๐
Thanks for your great explanation. I would also recommend the red book by Vaughn Vernon it goes thorugh all concepts with great examples.
Thank you. And yes, the red book is also great as well, a good companion to the blue book. For those not familiar with the reference, the book is call "Implementing Domain-Driven Design", it introduces some patterns for applying DDD in practice and helps solidify the ideas of DDD by framing them with concrete examples.
Thank you. I'm wondering, how useful and practical is DDD for existing systems? When should it be used and when not? Because it seems to me that DDD should be done early on in the project.
DDD is a tried-and-tested approach to modelling your business model and understanding how different systems and people interact in this system. It comes with years of adoption experience in the field and a huge community of existing expertise and shared understanding. You can't really build any system without some level of understanding of what you're doing. And as the system, its complexity or the organization grows, it becomes more important to understand what you're doing and make the implicits (e.g. team dybamics) explicit. So I'd argue it's less a case of "when" to use DDD, but how important it is. The bigger, or more complex the system, and the bigger the organization that builds the system, the more important DDD is.
@theburningmonk thanks but this is not answer to my question. I've worked on complex systems without DDD. Does it make sense to start to use DDD on existing complex systems?
@@mahdi5796 Yes, of course. It's never too late to foster a better understanding of your business, organization and identify problems with alignments and dependencies. And it's not something you do once and then forget about it. Just like any good habits, it's something you should do continuously - neither your system, nor your team is static, and DDD gives you the tools to map out the changes, identify new risks, and strategize.
How do you handle deployment to all of the lambda regions? Is it possible to also check and make sure you are running the correct lambda code?
You don't want to deploy to all regions simultaneously, if there's an unforseen problem, it'd affect everyone right away if you do. Typically, one would deploy to one region at a time, make sure things are fine, then proceed to another region. And it's also a good idea to use feature toggling so you can enable the new code paths for people in the newly deployed region, and then eventually, when you have good confidence things are fine, then open up to everyone.
Really interesting discussion! Thanks guys. I think i have to go through a few examples myself to understand the flow and syntax fully.
Thanks, glad you liked it! Sorry about the audio quality on my mic. But yeah, I was really impressed with Restate, and once I understood it better, the model is much simpler than I thought as well!
Great points. Wisdom from a guru.
Thank you!
This was InCognito for me until now, thanks for the explanation
Great content. Thanks. May I ask, did you ever publish the next promised-video about Anti Corruption Layer? Because I cant find it. If so, can you please share the link.
It was included as part of my course but I haven't published it on UA-cam yet, but I will!
I missed the part on how he could improve api gateway costs, Could you please gimme some link or a brief explain?
One thing he did was to eliminate the need for CORS, which accounted for a big part (relatively speaking, of course) of what he was paying for API Gateway.
Excellent advice from Yan as always!
Thank you!
The tech industry seems to disagree with me that if it's functionally the same, it's the same. Yes, there are architectural and conceptual differences, perhaps you could argue they function differently simply because of where the consumer is placed in the design, but I can either have a global function callable in an event, perform the function directly in the event handler, or call a command from an event handler. If we aren't talking about command line programs, commands will be invoked by an event on the user interface. & if it is a decent design the user interface will need to react. There is no ultimate difference in function whether it's a command, event handler method call, or inline procedure in the event handler. Although from my experience in WPF, commands make it much harder for the control to properly react.
All these UA-camrs โtesting in productionโ are rather shallow. Nobody talks about how to test the code changes involving data schema changes.
This is a very nice video. Seems like identity pool are similar to OAuth mechanism
Great details with diagram and pros, cons. Thank you. Also follows WAR Framework
Thank you! Glad you liked it
for Korean -- ์ง๋ ๋น๋์ค์์ ์ ๋ AWS Step Functions์ด ๋ฌด์์ธ์ง์ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ค๋ช ํ์ต๋๋ค. ๋น๋์ค๋ Step Functions์ ์ฌ์ฉํ๋ ์ด์ ์ ๋ํ ์๋ฌธ์ผ๋ก ๋๋ฌ์ต๋๋ค. ์๋ํ๋ฉด Lambda ํจ์ ๋ด์์ ๋ชจ๋ ์ค์ผ์คํธ๋ ์ด์ ์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ฒ ๋น๋์ค์์๋ ์ํฌํ๋ก์ฐ๋ฅผ ๊ตฌํํ๋ ๋ ๊ฐ์ง ์ต์ ์ ๋น๊ตํด ๋ณด๊ฒ ์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก๋ ๋จ์ํ ์ํฌํ๋ก์ฐ๋ ๋น์ฉ ์ต์ ํ๊ฐ ํ์ํ ๊ฒฝ์ฐ Lambda๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ํธํ์ง๋ง, ๋ณต์กํ๊ฑฐ๋ ๋น์ฆ๋์ค์ ์ค์ํ ์ํฌํ๋ก์ฐ์์๋ Step Functions์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค. ์ด ๋น๋์ค์ ๋๋จธ์ง ๋ถ๋ถ์์ ์ ์๊ฐ์ ์ค๋ช ํ๊ฒ ์ง๋ง, Lambda destinations์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ Lambda ํจ์๋ฅผ ํจ๊ป ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋งค์ฐ ์ ํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค๋ ์ ๋ ์ธ๊ธํ๊ณ ์ถ์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋์ค์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค. Lambda์ ์ฅ์ ์ ๋ถ๋ช ํ๊ณ ๊ฐ๋จํฉ๋๋ค. Step Functions๊ณผ ๋น๊ตํ์ ๋ Lambda๋ ๋ ๋จ์ํฉ๋๋ค. ์ค๋ฅ ์ฒ๋ฆฌ, ๋ถ๊ธฐ ๋ก์ง ๋ฑ Step Functions์์ ํ ์ ์๋ ๋ชจ๋ ๊ฒ์ ๋ช ์ค์ ์ฝ๋๋ก Lambda์์ ๊ตฌํํ ์ ์์ต๋๋ค. ์ด๋ฏธ ์ต์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑํ๊ณ ํ ์คํธํ ์ ์์ผ๋ฉฐ, ์ํ ๋จธ์ ์ด ๋ง์ Lambda ํจ์๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋น์ฉ๋ ์ ๊ฐ๋ฉ๋๋ค. ์๋ํ๋ฉด Step Functions์ ์ํ ์ ํ ๋น์ฉ ์ธ์๋ Lambda ํธ์ถ ๋น์ฉ์ ์ง๋ถํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ์ค์ผ์คํธ๋ ์ด์ ์ ์ฝ๋๋ก Lambda ํจ์ ํ๋์ ๋ชฐ์๋ฃ์ผ๋ฉด ๋น์ฉ์ด ์ ๊ฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ํ์ง๋ง ์ฝ๋๊ฐ ๋จ์ํ DynamoDB๋ฅผ ํธ์ถํ๋ ๊ฒ์ด๋ผ๋ฉด, ๋ชจ๋ Lambda ํจ์๋ฅผ ์ง์ ํตํฉ์ผ๋ก ๋์ฒดํ ์ ์์ด Lambda ๋น์ฉ์ด ๋ฐ์ํ์ง ์์ต๋๋ค. Express ์ํฌํ๋ก์ฐ๋ฅผ ์ฌ์ฉํ๋ฉด Lambda์ ๋น์ทํ ๋น์ฉ์ด ๋ค๊ธฐ ๋๋ฌธ์ ์ด ๊ฒฝ์ฐ ๋น์ฉ ์ฐจ์ด๋ ํฌ์ง ์์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. Lambda ํจ์ ํ๋๋ก ๋ชจ๋ ๊ฒ์ ์ฒ๋ฆฌํ๋ฉด ํ์ฅ์ฑ ์ธก๋ฉด์์๋ ๋ ์ ๋ฆฌํ ์ ์์ต๋๋ค. ์ํ ๋จธ์ ์ด ๋ง์ Lambda ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด Step Functions๊ณผ Lambda์ ๋น์จ ์ ํ์ ์ํด ํ์ฅ์ฑ์ด ์ ํ๋ ์ ์์ต๋๋ค. ๋ฐ๋ฉด, ๋จ์ํ Lambda๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Lambda์ ๋์ ํธ์ถ ํ๋๋ง ์ ์ฉ๋๋ฉฐ, ์ด๋ Step Functions์ ์ํ ์ ํ ์ด๋น ํ๋๋ณด๋ค ํจ์ฌ ๋์ต๋๋ค. ๋ฐ๋ผ์ ์์คํ ์ ์ ์ฒด ํ์ฅ์ฑ์ ๋จผ์ ๋๋ฌํ๋ ํ๋์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค. Lambda๋ฅผ ์ฌ์ฉํ ๋๋ ํญ์ ๊ณตํต ์์ฐ(CO-ART)๊ณผ ์ฌ์ฉ์๊ฐ ๋๊ธฐํ๋ ๋๊ธฐ ์ํฌํ๋ก์ฐ, ์ต๋ 15๋ถ์ ์คํ ์๊ฐ์ด ์ถฉ๋ถํ์ง ์ฌ๋ถ๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ๋ํ, ๋ฐ๋ฆฌ์ด ๋จ์๋ก ์คํ ์๊ฐ์ ์ง๋ถํ๊ธฐ ๋๋ฌธ์ ๋๊ธฐ ์๊ฐ์ด ํ์ํ ๊ฒฝ์ฐ ๋น์ฉ ํจ์จ์ ์ด์ง ์์ต๋๋ค. ๋ฐ๋ฉด, Step Functions์ ํ์ค ์ํฌํ๋ก์ฐ์ ๊ฐ๊ฒฉ ๋ชจ๋ธ์ด ๋๊ธฐ ์๊ฐ์ ์ ํฉํ๋ฉฐ, ํนํ ์ํฌํ๋ก์ฐ ์คํ์ ์๊ฐํํ ์ ์์ด ๋๋ฒ๊น ์ด ๋งค์ฐ ์ฉ์ดํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ์๋ฟ๋ง ์๋๋ผ ๊ณ ๊ฐ ์ง์ ํ์๊ฒ๋ ์ ์ฉํฉ๋๋ค. Step Functions ์ฝ์์์ ์คํจํ ์คํ์ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ด๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ํ์ธํ ์ ์์ผ๋ฉฐ, ๋ชจ๋ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ, ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํ์ ํ ์ ์์ต๋๋ค. Step Functions์ ๋ ๋ค๋ฅธ ๊ฐ์ ์ ๋ชจ๋ ์คํ์ ๋ํ ์์ ํ ๊ฐ์ฌ ๊ธฐ๋ก์ ์ ๊ณตํ๋ค๋ ์ ์ ๋๋ค. ๊ฐ ์ํ ์ ํ์ด ์ธ์ ์์๋๊ณ ๋๋ฌ๋์ง, ์ค๋ฅ๊ฐ ๋ฐ์ํ๋์ง ๋ฑ์ ์์ธํ ๊ธฐ๋กํ๋ฏ๋ก ๋๋ฒ๊น ์ด ๋งค์ฐ ์ฉ์ดํฉ๋๋ค. ๋ํ, Step Functions์ ๊ฑฐ์ ๋ชจ๋ AWS ์๋น์ค์ ์ง์ ํตํฉํ ์ ์์ด ๋ชจ๋ ๊ฒ์ Lambda ํจ์๋ก ์ฒ๋ฆฌํ ํ์๊ฐ ์์ต๋๋ค. Lambda๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๊ณตํต ์์ฐ ๋ฌธ์ ๋ ๋ฐ์ํ์ง ์์ผ๋ฉฐ, ๋ ์์ธก ๊ฐ๋ฅํ ์ฑ๋ฅ์ ์ป์ ์ ์์ต๋๋ค. ๋์ ์ต๋ ์ง์ ์๊ฐ๊ณผ ์ฝ๋ฐฑ ํจํด ๊ตฌํ ๋ฅ๋ ฅ ๋๋ถ์ Step Functions์ ๋งค์ฐ ์ ์ฐํฉ๋๋ค. ๊ฐ์ธ์ ์ผ๋ก Step Functions์ ๋น์ฆ๋์ค์ ์ค์ํ ์ํฌํ๋ก์ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ํธํ๋ ์ด์ ๋ ๋ ๊ฒฌ๊ณ ํ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ๋จ์ํ ํ์คํฌ ์ํ์์ ๋ค์ํ ์ ํ์ ์ค๋ฅ์ ๋ํด ์ง์ ๋ฐฑ์คํ๋ฅผ ์ฌ์ฉํ ์ฌ์๋๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ชจ๋ ์ฌ์๋๊ฐ ์์ง๋ ํ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์บ์น ์ ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค. Lambda์์๋ ๋ช ์ค์ ์ฝ๋๋ก ์ด๋ฅผ ๊ตฌํํ ์ ์์ง๋ง, Step Functions์ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ์ค๋ฅ ์ฒ๋ฆฌ์ ์ฌ์๋๋ฅผ ์ํ ๋จธ์ ์ธ๋ถ๋ก ๋ถ๋ฆฌํ ์ ์์ด ํจ์์ ํ์์์ ์ค์ ์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋น์ฆ๋์ค์ ์ค์ํ ์ํฌํ๋ก์ฐ๋ฅผ ๊ตฌ์ถํ ๋ Step Functions์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ๋ ์ ๋ขฐํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๋ฌผ๋ก , ์ด๋ฌํ ์ ๋ขฐ์ฑ์๋ ์ถ๊ฐ ๋น์ฉ์ด ๋ฐ์ํ๋ฉฐ, Step Functions์ ๋ฐฐ์ฐ๋ ๋ฐ๋ ํ์ต ๊ณก์ ์ด ์กด์ฌํฉ๋๋ค. Amazon State Language๋ฅผ ํ์ตํ๊ณ ๊ตฌ์ฑ ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ํ ์ถ๊ฐ ์์ ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋จ์ํ ์ํฌํ๋ก์ฐ์๋ ๋๋ฌด ๋ง์ ์ค๋ฒํค๋์ผ ์ ์์ต๋๋ค. ๋ํ, Step Functions์ ํ ์คํธํ๋ ๊ฒ์ด ์ด๋ ต๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ์ด๋ ค์์ ๊ฒช์ต๋๋ค. ์ ์๋ฒ๋ฆฌ์ค ํ ์คํธ ๊ณผ์ ์์๋ Step Functions ํ ์คํธ์ ๋ํ ์ ์ฒด ์ฑํฐ๋ฅผ ํ ์ ํ์ฌ ๋ก์ปฌ ๋ฐ ํ์ฅ ํ ์คํธ์์ Step Functions์ ํ ์คํธํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋ฅด์น๊ณ ์์ต๋๋ค. ํ์ฌ๋ PandaTube15 ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด 15% ํ ์ธ์ ๋ฐ์ ์ ์์ต๋๋ค. ์์ ์ธ๊ธํ Lambda destinations์ ์ฑ๊ณต ์ Lambda ํจ์๋ฅผ ํจ๊ป ์ฐ๊ฒฐํ์ฌ ์ํฌํ๋ก์ฐ๋ฅผ ๊ตฌํํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋งค์ฐ ๋จ์ํ ์ํ ์ํฌํ๋ก์ฐ์ ์ ํฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋น๋๊ธฐ ํจ์๊ฐ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ๋ง์น๊ณ ๋ถ์ ์ด๋ฒคํธ๋ฅผ ์ 3์ ์์คํ ์ ๋ณด๋ด๋ ๋ฑ์ ๋ณด์กฐ ์์ ์ ์คํ๋ก๋ฉํ ๋ ์ ์ฉํฉ๋๋ค. ๋ ๋ฒ์งธ ๋จ๊ณ๊ฐ ์คํจํ๊ณ ์ฌ์๋๋ ๊ฒฝ์ฐ, ์๋ ์ด๋ฒคํธ๋ฅผ ๋ ๋ฒ ์ฒ๋ฆฌํ ํ์๊ฐ ์์ต๋๋ค. ํ์ง๋ง ์ด๋ฌํ ์ํ ์ํฌํ๋ก์ฐ๋ฅผ ๋์ด์๋ ๊ฒฝ์ฐ์๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. Lambda to Lambda ์ฒด์ด๋์ ์ ํ๋ ๊ฐ์์ฑ๊ณผ ๋น๋๊ธฐ ํน์ฑ์ผ๋ก ์ธํด ๋๋ฒ๊น ๊ณผ ์ค๋ฅ ์ฒ๋ฆฌ๊ฐ ์ด๋ ต์ต๋๋ค. ํ์ฑ ํธ๋ ์ด์ฑ์ X-Ray์ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ผ๋ถ ์ ๋ณด๋ฅผ ๋ณผ ์ ์์ง๋ง, ๊ธฐ๋ณธ์ ์ผ๋ก ์ํ๋ง์ด ๋ง์ด ๋์ด ๋๋ถ๋ถ์ ์ํฌํ๋ก์ฐ ์คํ์ ์ฌ์ ํ ๋ณด์ด์ง ์์ต๋๋ค. ๊ฐ ๋จ๊ณ์ ๋ํด ๊ฒฝ๊ณ ๋ฐ Dead Letter Queue๋ฅผ ์ค์ ํด์ผ ํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋ ์ ์ ์๊ณ ๋ฐ์ดํฐ ์์ค์ด๋ ์ด๋ฒคํธ ์์ค์ด ๋ฐ์ํ ์ ์์ต๋๋ค. Step Functions์ ์ฌ์ฉํ๋ฉด ๋๋ฒ๊น ์ด ํจ์ฌ ์ฌ์์ง๋ฏ๋ก, ๋ณต์ก์ฑ์ ์ค์ด๊ณ ๋น ๋ฅด๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ํ ์ํฌํ๋ก์ฐ๋ฅผ ์ ์ธํ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ Lambda destinations์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ฒ Lambda ํจ์์ Step Functions์ ์ฌ์ฉํ ์ํฌํ๋ก์ฐ ๊ตฌ์ถ ๋น๊ต๋ ์ฌ๊ธฐ๊น์ง์ ๋๋ค. ์ด ๋น๋์ค๋ฅผ ์ฆ๊ธฐ๊ณ ์๋ก์ด ๊ฒ์ ๋ฐฐ์ ๋ค๋ฉด, ์ข์์๋ฅผ ๋๋ฅด๊ณ ์ฑ๋์ ๊ตฌ๋ ํด ์ฃผ์ธ์. ์ด๋ ์ ์๊ฒ ํฐ ๋์์ด ๋๋ฉฐ ์๋ฒ๋ฆฌ์ค ๊ฐ๋ฐ์ ๋ํ ๋ ๋ง์ ํ์ ๊ณต์ ํ ์ ์๊ฒ ํด์ค๋๋ค. ๋ค์ ์๊ฐ๊น์ง, ๊ฐ์ฌํฉ๋๋ค!
Woow. Thatโs a terrific advice
Thank you for sharing your knowledge
For Korean AWS Step Functions๋ ์ํฌํ๋ก์ฐ๋ฅผ ์ํ ๋จธ์ (state machine)์ผ๋ก ๋ชจ๋ธ๋งํ ์ ์๊ฒ ํด์ฃผ๋ ์ค์ผ์คํธ๋ ์ด์ ์๋น์ค์ ๋๋ค. ์ฃผ๋ก ํน์ ์์๋๋ก ๊ทธ๋ฃนํ๋ Lambda ํจ์๋ค์ ์ค์ผ์คํธ๋ ์ด์ ํ๊ณ ์คํํ๋ฉฐ, ํ ํจ์์ ์ถ๋ ฅ์ ๋ค์ ํจ์๋ก ์ ๋ฌํ๊ฑฐ๋ ์ํฌํ๋ก์ฐ์ ์ผ๋ถ๋ก ๋ถ๊ธฐ ๋ก์ง์ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ํ, ํ์ฌ ์คํ ์ํ์ ๋ฐ๋ผ ์์ฌ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ฑฐ๋, ํจ์์ ํ์์์ ์ค์ ์ ๊ตฌ์ ๋ฐ์ง ์๋ ๊ฐ๋ ฅํ ์ค๋ฅ ์ฒ๋ฆฌ์ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค. ์ฝ๋ฐฑ ํจํด์ ์ฌ์ฉํ์ฌ ์ฌ๋ ์ด์์๋ฅผ ์ํฌํ๋ก์ฐ์ ํฌํจ์ํฌ ์ ์์ด, ์ํฌํ๋ก์ฐ๋ฅผ ์ผ์ ์ค์งํ๊ณ ๊ทธ๋ค์ ์ ๋ ฅ์ ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋, ๋งต ๋ฆฌ๋์ค ์์ ๊ณผ ๊ฐ์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๊ฐ๋ฅ์ฑ์ ์ ๋ง ๋ฌด๊ถ๋ฌด์งํ๋ฉฐ, Step Functions๋ ์คํ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ , ํ ์ํ์์ ๋ค์ ์ํ๋ก ์ ํํ๋ฉฐ, ์คํ ์ค์ธ ์์น๋ฅผ ์ถ์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋ ํ์ฅ ๊ฐ๋ฅํ๊ณ ํ๋ ฅ์ ์ธ ํ๋ซํผ์ ์ ๊ณตํ์ฌ ์ธํ๋ผ๋ณด๋ค๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์๊ฒ ํด์ค๋๋ค. ๋ํ, ๋ชจ๋ ์คํ์ ๋ํ ์์ธํ ๊ฐ์ฌ ๊ธฐ๋ก์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํฉ๋๋ค. ์ํ ๋จธ์ ์ Amazon State Language(ASL)๋ผ๋ JSON ๊ธฐ๋ฐ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ค๊ณํ ์ ์์ผ๋ฉฐ, Step Functions ์ฝ์์์ ์ํฌํ๋ก์ฐ๋ฅผ ์๊ฐํํ๊ฑฐ๋ ์๊ฐ์ ๋์์ด๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ์ํฌํ๋ก์ฐ๋ฅผ ๋จ๊ณ๋ณ๋ก ์ค๊ณํ ์ ์์ต๋๋ค. ์ด๋ JSON ๊ตฌ๋ฌธ์ ๋ฐฉํด๋ฐ์ง ์๊ณ ๋น์ฆ๋์ค ์ดํด๊ด๊ณ์๋ค๊ณผ ํ์ ํ ๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ํจ๊ป ์ค๊ณํ ์ํ ๋จธ์ ์ JSON ์ ์๋ฅผ ์ธํ๋ผ ์ฝ๋๋ก ๋ณต์ฌํ์ฌ ์์ค ์ ์ด๊ฐ ๊ฐ๋ฅํ๊ณ ๋ค์ํ ํ๊ฒฝ๊ณผ AWS ๊ณ์ ์ ์ฝ๊ฒ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์ํฌํ๋ก์ฐ๋ฅผ ์คํํ ๋, Step Functions ์ฝ์์ ์๊ฐํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์งํ ์ํฉ์ ์ถ์ ํ ์ ์์ต๋๋ค. ๋ถ๊ธฐ ๋ก์ง์ด ์๋ ๊ฒฝ์ฐ, ์คํ์ด ์ด๋ค ๊ฒฝ๋ก๋ฅผ ํ๋์ง ํ์ธํ ์ ์๊ณ , ๊ฐ ๋จ๊ณ์ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ๋ณผ ์ ์์ด ๋ฌด์์ด ์๋ชป๋์๋์ง ์ฝ๊ฒ ํ์ ํ ์ ์์ต๋๋ค. Step Functions๋ ์คํ ๊ธฐ๋ก์์ ์ต๋ 25,000๊ฐ์ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋กํ๋ฉฐ, ์ด๋ ๋๋ฒ๊น ๊ณผ Lambda ํจ์ ํธ์ถ์ ์ ์ฉํฉ๋๋ค. ๋ํ, CloudWatch์์ ํจ์์ ๋ก๊ทธ๋ก์ ๋ฐ๋ก ๊ฐ๊ธฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฉ์ด์ ๋ํด ์ค๋ช ํ์๋ฉด, ์คํ ์ค์ธ ๊ฐ ๋จ๊ณ๋ฅผ ์ํ ์ ํ(state transition)์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ์์ ๋ฐ ์ข ๋ฃ ์ํ๋ ํฌํจ๋ฉ๋๋ค. ๊ฐ๊ฒฉ์ ์ํ ์ ํ ์์ ๋ฐ๋ผ ์ฒญ๊ตฌ๋๋ฉฐ, ๋ฐฑ๋ง ๋ฒ๋น 25๋ฌ๋ฌ์ ๋๋ค. ์ด๋ AWS์ ๋ค๋ฅธ ์๋น์ค์ ๋นํด ๋ค์ ๋น์ผ ํธ์ด๋ฉฐ, Lambda๋ณด๋ค ํจ์ฌ ๋น์ ์ ์์ต๋๋ค. ๊ทธ๋์ 2019๋ ์ AWS๋ Express ์ํฌํ๋ก์ฐ๋ฅผ ๋์ ํ์ต๋๋ค. ํ์ค ์ํฌํ๋ก์ฐ๋ ์ต๋ 1๋ ๋์ ์คํ๋ ์ ์์ด, ํด๊ฐ ์์ฒญ ์น์ธ๊ณผ ๊ฐ์ด ์ฌ๋์ ๊ฐ์ ์ด ํ์ํ ์ํฌํ๋ก์ฐ์ ์ ์ฉํฉ๋๋ค. ์ฝ๋ฐฑ ํจํด์ ์ฌ์ฉํ์ฌ ์คํ์ ์ผ์ ์ค์งํ๊ณ , ์ด๋ฉ์ผ์ ๋งํฌ๋ฅผ ํด๋ฆญํ๊ฑฐ๋ ๋ฉ์์ง ํ์์ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋ ๋ง์ดํฌ๋ก์๋น์ค๊ฐ ์ ํธ๋ฅผ ๋ณด๋ด๋๋ก ํ ์ ์์ต๋๋ค. Express ์ํฌํ๋ก์ฐ๋ ์คํ๋น ์ด๋ฆ์ ์ง์ ํ ์ ์์ด, ์๋ฅผ ๋ค์ด ์ฃผ๋ฌธ์ด ํ ๋ฒ๋ง ์ฒ๋ฆฌ๋๋๋ก ์ฃผ๋ฌธ ID๋ฅผ ์คํ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ๊ฒฉ์ ์ํ ์ ํ ์๊ฐ ์๋ ์คํ ์, ์คํ ์๊ฐ, ์ฌ์ฉ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ๋ผ ์ฒญ๊ตฌ๋๋ฉฐ, Lambda์ ์ ์ฌํ ๊ฐ๊ฒฉ ๋ชจ๋ธ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ํ์ง๋ง Express ์ํฌํ๋ก์ฐ๋ ๋ด๋ถ์ ์ผ๋ก Lambda ํจ์๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. Express ์ํฌํ๋ก์ฐ๋ ๋๊ธฐ ์คํ์ ์ง์ํ์ฌ, API Gateway๋ฅผ ์ฌ์ฉํด ์คํ์ ์์ํ๊ณ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ํ, ์คํ ๊ฒฐ๊ณผ๋ฅผ HTTP ์๋ต์ผ๋ก ๋ฐํํ ์ ์์ต๋๋ค. ์ด๋ ํ์ค ์ํฌํ๋ก์ฐ์์๋ ์ฌ๋ฌ ๋ฒ์ ๋ผ์ด๋ ํธ๋ฆฝ์ด ํ์ํ๋ ์์ ์ ๋จ์ํํฉ๋๋ค. ์์ฝํ์๋ฉด, ํ์ค ์ํฌํ๋ก์ฐ๋ ๊ฒฐ์ ์ฒ๋ฆฌ์ ๊ฐ์ ๋น์ฆ๋์ค์ ์ค์ํ ์ํฌํ๋ก์ฐ์ ์ ํฉํ๋ฉฐ, ๋์ ์ต๋ ์ง์ ์๊ฐ๊ณผ ์ ํํ ํ ๋ฒ ์คํ ๋ณด์ฅ์ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ฉด, Express ์ํฌํ๋ก์ฐ๋ ๋ง์ ์ํ ์ ํ์ด ํ์ํ ์ํฌํ๋ก์ฐ์ ๋น์ฉ ํจ์จ์ ์ด๋ฉฐ, ์งง์ ์ต๋ ์ง์ ์๊ฐ๊ณผ ๋์ ์ฒ๋ฆฌ๋์ ์ง์ํฉ๋๋ค. ๋ ๊ฐ์ง ์ํฌํ๋ก์ฐ๋ฅผ ๊ฒฐํฉํ์ฌ ๊ฐ์์ ์ฅ์ ์ ์ด๋ฆฌ๊ณ ๋จ์ ์ ๋ณด์ํ ์๋ ์์ต๋๋ค. Lambda ํจ์๊ฐ ํ ๋ฒ์ 15๋ถ ๋์ ์คํ๋ ์ ์๋๋ฐ, ์ด๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ ์ถฉ๋ถํ๊ธฐ ๋๋ฌธ์ ์ Lambda ํจ์๋ฅผ ๋์ ์ฌ์ฉํ์ง ์๋์ง ๊ถ๊ธํ ์ ์์ต๋๋ค. ์ด ์ง๋ฌธ์ ๋ํด์๋ ๋ค์ ๋น๋์ค์์ ๋ค๋ฃฐ ์์ ์ด๋, ๊ตฌ๋ ํ๊ณ ์๋ฆผ ๋ฒจ์ ํด๋ฆญํ์ฌ ์๋ก์ด ๋น๋์ค๊ฐ ์ฌ๋ผ์ฌ ๋ ๋์น์ง ์๋๋ก ํ์ธ์. ์์ฒญํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ค๋ฅธ ์๋ฒ๋ฆฌ์ค ๊ฐ๋ฐ ๊ด๋ จ ๋น๋์ค๋ ํ์ธํด ๋ณด์ธ์.
This one's a banger! Can't wait to utilise/re-factor coding styles for this precisely :D
Please I want to buy a tracker with API access
Without using identity pool, it is possible to use the token provided by userpool to access aws resources for ex : app gw. How this works and what is the rationale behind this?
Really great course - thanks a lot! Will definitely try it with websockets
Thank you! Glad you liked it
Hi, great video, but let's say I have a website + IOS app + Android APP all using the same user pool. Google want you to create 1 client ID per platform, so here 3. Cognito only allow 1 link to google ( 1 client ID ) ... In the Cognito doc it say to use a identity pool where all 3 client ID are setup. At this point I have no clue how to setup this
7:24 The separation can be done in REST too.
Another grear discussion. Thanks guys!
Thank you, glad you enjoyed it!