Domain Driven Design (DDD) explained in 3 minutes
4:14
12 ัะฐา“ะฐั‚ ะฑาฑั€ั‹ะฝ
Is Restate.dev the Step Functions killer? | ft. Jack Kleeman
1:15:40
16 ัะฐา“ะฐั‚ ะฑาฑั€ั‹ะฝ
Andrew Brown's Secret to Landing Your DREAM JOB in Tech
4:16
ะะน ะฑาฑั€ั‹ะฝ
Writing AWS Lambda functions in Rust with James Eastham
1:01:39
2 ะฐะน ะฑาฑั€ั‹ะฝ
[FULL COURSE] Building real-time apps with Momento
1:48:59
2 ะฐะน ะฑาฑั€ั‹ะฝ
How to have a Successful Cloud Career in 2024 | ft. Andrew Brown
52:11
3 ะฐะน ะฑาฑั€ั‹ะฝ
Rust with Lambda, easy-mode Rust & future of Middy | ft. Luciano Mammino
46:53
Events vs Commands in Event-Driven Architectures, when to use which?
5:53
AWS Lite, Web Components, Functionless and WASM with Brian LeRoux
59:58
7 ะฐะน ะฑาฑั€ั‹ะฝ
LocalStack v3 is here and it's kinda amazing!
1:09:39
7 ะฐะน ะฑาฑั€ั‹ะฝ
Azure Functions: DEEP DIVE with Microsoft MVP, Ian Griffiths
53:42
8 ะฐะน ะฑาฑั€ั‹ะฝ
How does LLRT differ from Bun, Nodejs and Deno?
9:09
8 ะฐะน ะฑาฑั€ั‹ะฝ
How DAZN streams live sports to MILLIONS of concurrent viewers
52:44
8 ะฐะน ะฑาฑั€ั‹ะฝ
Why is AWS building a JavaScript runtime?
8:31
8 ะฐะน ะฑาฑั€ั‹ะฝ
Why Fathom is running serverless at scale instead of containers
3:42
8 ะฐะน ะฑาฑั€ั‹ะฝ
What makes LLRT the FASTEST JavaScript runtime for Lambda?
52:34
9 ะฐะน ะฑาฑั€ั‹ะฝ
How Fathom saved $100,000 per year on their AWS bill!
59:11
9 ะฐะน ะฑาฑั€ั‹ะฝ
How Dunelm went from on-prem to serverless while going faster
56:52
9 ะฐะน ะฑาฑั€ั‹ะฝ
AWS Lambda: why you shouldn't built a Lambdalith
3:51
10 ะฐะน ะฑาฑั€ั‹ะฝ
AWS Lambda: optimizations for loading container images
6:29
10 ะฐะน ะฑาฑั€ั‹ะฝ
Serverless Framework v4 with Austen Collins
1:14:35
11 ะฐะน ะฑาฑั€ั‹ะฝ
AWS CDK L1, L2 and L3 constructs explained
2:56
11 ะฐะน ะฑาฑั€ั‹ะฝ
ะŸั–ะบั–ั€ะปะตั€
@jjoc007
@jjoc007 7 ัะฐา“ะฐั‚ ะฑาฑั€ั‹ะฝ
Super!! Thanks by the content
@mahdi5796
@mahdi5796 ะšาฏะฝ ะฑาฑั€ั‹ะฝ
Excellent video. Thank you
@theburningmonk
@theburningmonk ะšาฏะฝ ะฑาฑั€ั‹ะฝ
Thank you, glad you liked it!
@vinodshalgar
@vinodshalgar ะšาฏะฝ ะฑาฑั€ั‹ะฝ
Waiting for the next video ๐Ÿ˜Š
@theburningmonk
@theburningmonk ะšาฏะฝ ะฑาฑั€ั‹ะฝ
The next video is here: kzbin.info/www/bejne/bJDTgoV-btyMqrc All about context maps, and the different patterns and how to think about them
@M1stFink
@M1stFink ะšาฏะฝ ะฑาฑั€ั‹ะฝ
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.
@Thimo-o8h
@Thimo-o8h 3 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
Nice overview of important concepts in just 4 minutes!๐Ÿ˜ฎ Thanks for your great content! ๐Ÿ‘ at some point I'll definitely take your course๐Ÿ™
@theburningmonk
@theburningmonk 3 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
Thank you! Glad you liked it ๐Ÿ™‚
@caeduob
@caeduob 4 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
Thanks for your great explanation. I would also recommend the red book by Vaughn Vernon it goes thorugh all concepts with great examples.
@theburningmonk
@theburningmonk 3 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
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.
@mahdi5796
@mahdi5796 4 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
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.
@theburningmonk
@theburningmonk 4 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
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.
@mahdi5796
@mahdi5796 4 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
@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?
@theburningmonk
@theburningmonk 4 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
@@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.
@RodmanStuhlmuller
@RodmanStuhlmuller 5 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
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?
@theburningmonk
@theburningmonk 5 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
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.
@RDarrylR
@RDarrylR 7 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
Really interesting discussion! Thanks guys. I think i have to go through a few examples myself to understand the flow and syntax fully.
@theburningmonk
@theburningmonk 6 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
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!
@KelvinMeeks
@KelvinMeeks 8 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
Great points. Wisdom from a guru.
@theburningmonk
@theburningmonk 6 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
Thank you!
@soflass1293
@soflass1293 14 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
This was InCognito for me until now, thanks for the explanation
@mahdi5796
@mahdi5796 16 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
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.
@theburningmonk
@theburningmonk 12 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
It was included as part of my course but I haven't published it on KZbin yet, but I will!
@CarlosBueno-nd9hc
@CarlosBueno-nd9hc 17 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
I missed the part on how he could improve api gateway costs, Could you please gimme some link or a brief explain?
@theburningmonk
@theburningmonk 12 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
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.
@RDarrylR
@RDarrylR 26 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
Excellent advice from Yan as always!
@theburningmonk
@theburningmonk 25 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
Thank you!
@CyrilCommando
@CyrilCommando ะะน ะฑาฑั€ั‹ะฝ
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.
@SeanUC-lx6tt
@SeanUC-lx6tt ะะน ะฑาฑั€ั‹ะฝ
All these KZbinrs โ€œtesting in productionโ€ are rather shallow. Nobody talks about how to test the code changes involving data schema changes.
@ted2101977854
@ted2101977854 ะะน ะฑาฑั€ั‹ะฝ
This is a very nice video. Seems like identity pool are similar to OAuth mechanism
@rakeshbhat455
@rakeshbhat455 ะะน ะฑาฑั€ั‹ะฝ
Great details with diagram and pros, cons. Thank you. Also follows WAR Framework
@theburningmonk
@theburningmonk 6 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
Thank you! Glad you liked it
@hama_kr
@hama_kr ะะน ะฑาฑั€ั‹ะฝ
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์„ ์‚ฌ์šฉํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์ถ• ๋น„๊ต๋Š” ์—ฌ๊ธฐ๊นŒ์ง€์ž…๋‹ˆ๋‹ค. ์ด ๋น„๋””์˜ค๋ฅผ ์ฆ๊ธฐ๊ณ  ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋ฐฐ์› ๋‹ค๋ฉด, ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅด๊ณ  ์ฑ„๋„์„ ๊ตฌ๋…ํ•ด ์ฃผ์„ธ์š”. ์ด๋Š” ์ €์—๊ฒŒ ํฐ ๋„์›€์ด ๋˜๋ฉฐ ์„œ๋ฒ„๋ฆฌ์Šค ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ํŒ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๋‹ค์Œ ์‹œ๊ฐ„๊นŒ์ง€, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
@jorgetovar621
@jorgetovar621 ะะน ะฑาฑั€ั‹ะฝ
Woow. Thatโ€™s a terrific advice
@mahdi5796
@mahdi5796 ะะน ะฑาฑั€ั‹ะฝ
Thank you for sharing your knowledge
@hama_kr
@hama_kr ะะน ะฑาฑั€ั‹ะฝ
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 ํ•จ์ˆ˜๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”์ง€ ๊ถ๊ธˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์งˆ๋ฌธ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ ๋น„๋””์˜ค์—์„œ ๋‹ค๋ฃฐ ์˜ˆ์ •์ด๋‹ˆ, ๊ตฌ๋…ํ•˜๊ณ  ์•Œ๋ฆผ ๋ฒจ์„ ํด๋ฆญํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋น„๋””์˜ค๊ฐ€ ์˜ฌ๋ผ์˜ฌ ๋•Œ ๋†“์น˜์ง€ ์•Š๋„๋ก ํ•˜์„ธ์š”. ์‹œ์ฒญํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์„œ๋ฒ„๋ฆฌ์Šค ๊ฐœ๋ฐœ ๊ด€๋ จ ๋น„๋””์˜ค๋„ ํ™•์ธํ•ด ๋ณด์„ธ์š”.
@SuryaER-g7b
@SuryaER-g7b ะะน ะฑาฑั€ั‹ะฝ
This one's a banger! Can't wait to utilise/re-factor coding styles for this precisely :D
@ernest6713
@ernest6713 ะะน ะฑาฑั€ั‹ะฝ
Please I want to buy a tracker with API access
@me-vn9wk
@me-vn9wk ะะน ะฑาฑั€ั‹ะฝ
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?
@Thimo-o8h
@Thimo-o8h 2 ะฐะน ะฑาฑั€ั‹ะฝ
Really great course - thanks a lot! Will definitely try it with websockets
@theburningmonk
@theburningmonk 5 ะบาฏะฝ ะฑาฑั€ั‹ะฝ
Thank you! Glad you liked it
@patrickdesroches3296
@patrickdesroches3296 2 ะฐะน ะฑาฑั€ั‹ะฝ
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
@anonymous_anonymity
@anonymous_anonymity 2 ะฐะน ะฑาฑั€ั‹ะฝ
7:24 The separation can be done in REST too.
@RDarrylR
@RDarrylR 2 ะฐะน ะฑาฑั€ั‹ะฝ
Another grear discussion. Thanks guys!
@theburningmonk
@theburningmonk 2 ะฐะน ะฑาฑั€ั‹ะฝ
Thank you, glad you enjoyed it!
@VincentFulco
@VincentFulco 2 ะฐะน ะฑาฑั€ั‹ะฝ
Great example!
@theburningmonk
@theburningmonk 2 ะฐะน ะฑาฑั€ั‹ะฝ
Thank you :-)
@ankushjain358
@ankushjain358 2 ะฐะน ะฑาฑั€ั‹ะฝ
Better than many AWS talks videos
@theburningmonk
@theburningmonk 2 ะฐะน ะฑาฑั€ั‹ะฝ
Thank you!
@brandons2842
@brandons2842 2 ะฐะน ะฑาฑั€ั‹ะฝ
Alof of people getting AWS certifications and Azure certifications are simply cheating...
@EdchelStephenNini
@EdchelStephenNini 3 ะฐะน ะฑาฑั€ั‹ะฝ
Thank you!
@s.vortex
@s.vortex 3 ะฐะน ะฑาฑั€ั‹ะฝ
I recently switched from Node to Go and noticed huge improvements in cold start time. However, once I need to access other services, say DynamoDB, through SSL/TLS the few milliseconds saved from moving from Go to Rust seems negligible. The initial SSL/TLS handshake in my case take at least 500-600ms. Do you have any practical tips to speed up this handshake process in Lambda functions? Not like adding AWS secret keys to environment configuration. Thanks!
@s.vortex
@s.vortex 3 ะฐะน ะฑาฑั€ั‹ะฝ
Of course I know I can increase the memory size. Is there other option?
@Loige
@Loige 3 ะฐะน ะฑาฑั€ั‹ะฝ
A couple of ideas: 1. use RustTLS (rather than OpenSSL) when possible (AFAIK it's enabled by default in the AWS SDK, but if you do HTTP requests to other services using a client like Reqwest you'll need to explicitly enable RusTLS) 2. Make sure your clients are initialized in the `main` function and not in the handler. This way you'll establish the connection only once at cold start rather than for every single event being processed. I hope this helps, but let me know if you discover other optimizations
@alexpollan6197
@alexpollan6197 3 ะฐะน ะฑาฑั€ั‹ะฝ
It depends on your software architecture, the teams characteristics/culture, the product. In some cases the test pyramid is more adequate (even the inverted pyramid). But I totally agree on the ultimate lesson here: write tests that provide value, no more, no less
@rohitbaisane8507
@rohitbaisane8507 3 ะฐะน ะฑาฑั€ั‹ะฝ
your course is really expensive for Indian peoles.
@MikeYinger
@MikeYinger 4 ะฐะน ะฑาฑั€ั‹ะฝ
As always, great content. @ 36 mins in, there is a discussion around Amplify (I'd given up on Amplify years ago) and you mentioned Gen2 making Amplify more accessible. Have you found time to see if Gen2 is flexible, like baseline?
@TheJohnnySilver
@TheJohnnySilver 4 ะฐะน ะฑาฑั€ั‹ะฝ
The most unexpected thing with CDK is that you are not always getting what you have described in code. For instance, an extra lambda function when you set a retention period.
@SocketsGuru
@SocketsGuru 4 ะฐะน ะฑาฑั€ั‹ะฝ
you explained this topic better than aws docs
@theburningmonk
@theburningmonk 4 ะฐะน ะฑาฑั€ั‹ะฝ
haha, thank you!
@mdmoniruzzaman703
@mdmoniruzzaman703 4 ะฐะน ะฑาฑั€ั‹ะฝ
What if i have a aws timestream database ingested externally? how can i subscribe any new data inserted to the database?
@theburningmonk
@theburningmonk 4 ะฐะน ะฑาฑั€ั‹ะฝ
AFAIK timestream doesn't give you a data change stream that you can subscribe to, so you'd have to create your own. How are you getting the data that you write to Tiemstream? Do you get them as a S3 file?
@mdmoniruzzaman703
@mdmoniruzzaman703 4 ะฐะน ะฑาฑั€ั‹ะฝ
@@theburningmonk i have aws iot topic captured by a kinesis data stream. The kinesis data stream trigger a lambda function which is responsible for dumping data into timestream database.
@UberEverywhereSKRT
@UberEverywhereSKRT 4 ะฐะน ะฑาฑั€ั‹ะฝ
anything is better than amplify. It sucks and i hate it. love ur vids
@theburningmonk
@theburningmonk 4 ะฐะน ะฑาฑั€ั‹ะฝ
Thanks! I've been stung by Amplify CLI too, but I heard gen 2 is much better. I haven't tried it out myself yet, so I will reserve my opinions for now. What would you say were the biggest problems with Amplify CLI?
@michaelmenard8614
@michaelmenard8614 4 ะฐะน ะฑาฑั€ั‹ะฝ
a great watch. I am definitely interested in checking this thing out
@theburningmonk
@theburningmonk 4 ะฐะน ะฑาฑั€ั‹ะฝ
Thanks, glad you liked it!
@josherney9820
@josherney9820 4 ะฐะน ะฑาฑั€ั‹ะฝ
Excellent video, thanks for sharing
@theburningmonk
@theburningmonk 4 ะฐะน ะฑาฑั€ั‹ะฝ
Thank you, glad you liked it!
@Kirtjep
@Kirtjep 5 ะฐะน ะฑาฑั€ั‹ะฝ
Hi is there a chance to get only Step Function testing module from your course?
@MarokoJula-wf6lz
@MarokoJula-wf6lz 5 ะฐะน ะฑาฑั€ั‹ะฝ
cheers
@suchethkumar8998
@suchethkumar8998 5 ะฐะน ะฑาฑั€ั‹ะฝ
Are Devops engineers going to loose jobs to AI ? Please let me know
@william3588
@william3588 6 ะฐะน ะฑาฑั€ั‹ะฝ
this is great! thanks
@theburningmonk
@theburningmonk 5 ะฐะน ะฑาฑั€ั‹ะฝ
Glad you like it!
@ChrisEbertGP
@ChrisEbertGP 6 ะฐะน ะฑาฑั€ั‹ะฝ
Farrah rocks!
@theburningmonk
@theburningmonk 4 ะฐะน ะฑาฑั€ั‹ะฝ
Agree :-)
@eduponzoni
@eduponzoni 6 ะฐะน ะฑาฑั€ั‹ะฝ
Nice one, Yan! Succinct, simple language, and straight to the point. Very good. Thanks for recording and sharing!
@theburningmonk
@theburningmonk 6 ะฐะน ะฑาฑั€ั‹ะฝ
Thank you :-) Glad you liked it!
@florianvandillen
@florianvandillen 6 ะฐะน ะฑาฑั€ั‹ะฝ
Very good explanation!
@theburningmonk
@theburningmonk 6 ะฐะน ะฑาฑั€ั‹ะฝ
Thank you :-)