seeking advice: What types of use of AWS in perso...
# aws
q
seeking advice: What types of use of AWS in personal projects would make an early career candidate stand out? Trying to figure out which features/services I should use to satisfy meaningfully this frequent bullet in backend / fullstack / platform intern job descriptions • "Experience with / Exposure to ... cloud platforms (AWS, GCP, Azure)." sometimes they'll mention s3, dynamodb, cloudwatch etc. My most immediate goal is to deploy a MERN app, I'm getting an initial version up on Vercel/Railway to have something to show while I learn, but want the AWS experience. I've had LLMs tell me S3 + Cloudfront and AppRunner would be solid, or it might be too managed. Perhaps Elastic Beanstalk or ECS Fargate is better. It kind of loops around that, with some saying Beanstalk is old fashioned. Thought I'd ask some humans! What gives a strong signal? (i briefly (1 year) did sales/marketing in devops and now am transitioning into SWE, finishing a cs degree and applying to internships mostly. So a lot of cloud/devops terms are familiar at high level but haven't really used any cloud providers personally)
b
For an early-career engineer, I'd dig into what they did personally. • how did they determine the path forward? • did they reason about tradeoffs and risks, and make a sensible decision? • did they reuse existing stuff, or innovate? how did they make this choice? .. and many more, but that's just what comes off the top of my head to distinguish a high-potential early-career engineer
As an aside I think there are much better places to ask career growth questions than this channel, let me know if you'd like some pointers
p
Hello, @Quinn Redwoods ! I'd decide based on what I found interesting. What technologies or applications make you want to sit down and build? What new AWS features make you curious? I'd also think about standing out. There are lots of traditional applications, deployed in traditional ways. On one hand, you would check boxes, and on the other, all your peers might have checked the same boxes. For ECS Fargate, try spot instances, multiple capacity providers, and scaling. Try a private network with VPC endpoints for all the services you need, to learn AWS networking constructs. This is just an example of how you might take an AWS service and really learn from working with it. In this community the focus is on infrastructure-as-code and efficient ways of deploying and maintaining software. Whatever primary technology or application you choose, think about how your product would be tested and deployed. People might not pay attention to the content of a sample app, but they will take notice if you show them that the structure (some technological, some cognitive) that you've built around it lets you make a change, assess the result, and then roll it out without undue risk or stress. Make accommodating change a feature of whatever you build! Good luck, and please share what you build, in Slack and during office hours.
q
@brandon thanks, and i welcome your suggestions of places for career advice. i'm trying to branch out beyond talking to ai, reading reddit, and watching youtube, the common traps these days that make you feel like you are figuring something out, but are you? sometimes. anyway, what do you have in mind?
šŸ™Œ 1
@paulm thank you so much for this response. making changes with less stress is a great requirement
I'm realizing from both your responses how much where I'm at now is similar to my couple years ago "which programming language should i learn" - i was torn between python and javascript but now i know both and more. so yeah i see how jobs exist using almost any part of AWS, just like jobs exist with many major programming languages. but one has to ask what do i want, whats interesting for me, but also see that starting somewhere will lead you other places and that's ok.
šŸ™Œ 1
šŸ‘šŸ½ 1
b
DM'd you a couple resources šŸ™‚
gratitude thank you 1
p
Very good point about branching out from chatting with AI, reading Reddit and watching YouTube, @Quinn Redwoods ! During my time as a teacher, I would remind my algebra students that learning is active. I worry that our modern impulse to ask AI instead of browsing documentation, or to review AI-generated code instead of writing it ourselves, short-circuits cognitive processes involved in learning. In the kinds of esoteric but important details I deal with, like IAM policies, the typical examples, Reddit, even StackExchange, only provide one piece of the puzzle. I couldn't do the things I want to do technically, just by repeating what other people have done. Reasoning, empirical experimentation, and keeping up with feature releases and documentation are critical. (In the Terraform space, this is why a community like CloudPosse office hours is so important.) What you build is important but how you build it might be even more important, because the process will determine what you learn, retain, and can apply to new problems.
q
Hey just reporting back on my first AWS adventure - thanks for the encouragement above. As CS student looking to start with AWS, I decided to progress from old school cloud to semi-modern, using a MERN app of mine. I wanted to go in steps from lower to higher abstraction. phase 1 of cloud l started with just ec2 working website, ended with ALB + S3/Cloudfront + an EC2 Autoscaling group running docker containers pulled from ECR + CICD with automatic rollbacks. You can see the overall picture of the project and its architecture here. I'll share more about the phases here in thread https://github.com/qredwoods/exercisetracker
šŸ™ŒšŸ½ 1
phase 1: single ec2 instance, with nginx and pm2 - both front end and back end on there. using an elastic ip and pointing my domain's DNS to that. phase 2: setting up s3/cloudfront for front end, uploading manually an npm run build artifact to s3. pointing that to my ec2. this is also where IAM came into play, and also ACM. previously I just used certbot. phase 3: dockerizing. so same set up but now backend ec2 is running a docker image that is pulled from ecr. i think what i had then was nginx takes requests to given port and sends them to the container. this set up doesn't really make sense on its own but is a key prerequisite for the next phase phase 4: ALB + autoscaling. This was probably the hardest part, just a lot of settings, a lot of CORS issues, my app has JWT there was some weird bugs I needed to figure out here that had been mitigated by using a single instance that were now breaking. So I deleted everything down from my ec2 except the docker container. Then I created an image from that. used that as the image for the ec2 target group. created an autoscaling group from the target group. End result, when there are multiple instances live, ALB round robin's the requests to them. I defaulted desired minimum to 1, max to 3 or 4. I had written a benchmark test that bursted the single ec2 instance. I was hoping that it would trigger new instances with ALB and ASG - but I underestimated how long spinning up takes and my test wasn't long enough. I did get to show that what failed on 1 instance worked on 3 instances manually scaled horizontally which was cool. by this stage the problem is the manual nature of what it would take to make a change, I'd have to essentially manually git pull, create docker container, then replace the ECR entry for backend. For frontend I'd have to run a new npm run build, and then manually upload that to S3. thus, phase 5: cicd. I used github actions to create process that does the following. Since it's a solo project I treat pushing to main or merging my own PR as an approval. On pr it just runs tests. On push, it runs backend tests and lints the frontend, if those pass it runs e2e, if those pass it deploys what has changed, backend, frontend or both. If deploy is successful, that becomes prod, once prod a few more tests are applied - if those fail, then it rolls back to the previous version which was just saved as an image. I definitely pair programmed this with claude, and sometimes it took the lions share - I felt time pressure to get to the end of phase 5 so I can move on to some other projects, but also because I thought learning everything in detail might make more sense once I had done one successful set up. I definitely questioned or suggested every design decision throughout the process and tried to learn everything I could. It's really cool to see the graph on gh actions.
i did it all ARM, with t4g.small for my ec2