Vincenzo Scalzi
Engineer, Tech lead, DevOps, whatever fits
Reads Hacker News a lot. Too much.
Proprietary, business-critical software
Windows server
On premise
License fees
Operational overhead
Maintenance & Support
The service responds slowly!
I need feature X!
Why isn't there a mobile version?
How much does it cost again?
Why does it take ten clicks to do Y?
This interface looks dated.
AWS Lambda
AWS Fargate
Amazon API Gateway
Amazon ELB
Amazon DynamoDB
Amazon Elasticache
Amazon S3
Rehost (Lift and Shift)
Replatform (PaaS)
Refactor ("Cloud-native")
Rebuild (From scratch)
Replace (SaaS)
Retire (Decommission)
Retain (Do nothing)
7 Strategies for Migrating Applications to the Cloud, Nov 2021 on AWS Blog
AWS Cost Analysis Comparing Lambda, EC2, Fargate, Jun 2021 on Perficient blog
Technical sponsor
Experienced; Knows the business, the company; Has built similar solutions; Maker spirit
Me
Knows how to code, deploy, use the Cloud; Never created a product before; Maker spirit in a thinker head
Practice Leader
Very experienced; Also knows how to sell the tech; Encourages innovation!
Ops team
Knows about the project and the Cloud; Provides help to keep stuff running smoothly
Six months later
Me
Helping a second team, too
Final users
Know their business; Had complaints
PM
Backend dev
Frontend dev
Solutions architect
Data scientist
Developers
Final users
Know their business; Had complaints
PM
Accept bad takes
Build. Improve. Relentlessly.
Use services that free up your time
Simplify decision making
?
?
?
aws
OpenAPI
API Gateway
Lambda
{
"swagger": "2.0",
"paths": {
"/database/{database}/query/latest": {
"post": {
"x-amazon-apigateway-integration": "${lbd-latest-query}",
"security": [
{
"api_key": []
}
]
}
}
},
"securityDefinitions": {
"api_key": {
"name": "x-api-key",
"in": "header",
"type": "apiKey"
}
}
}
{
"uri": "${invoke_arn}",
"httpMethod": "POST",
"type": "aws_proxy",
"payloadFormatVersion": "1.0"
}
I use Stoplight
Studio
data APIs (core)
write
read
Elasticache
InfluxDB
ALB + ECS (EC2)
S3
CloudFront + S3
EventBridge + Lambda
DynamoDB
Step Functions + Lambda
data API (core)
explorer
viewer app
meta API
(core)
domain specific apps
alerts API
ALB + ECS (Fargate)
Learning about the "ways" of the company
Deploying infra for the first time
Deploying infra for the Nth time
Maintaining every deployment and its specifics
Understanding the requirements
Maintaining every deployment and its specifics
Researching the same topics time and time again
Copy-pasting untrustable code
Missing out on the "next big thing" developed by some other team
Capture common ideas
Create shared pieces of code
Create modules to avoid copy-pasting
Improve upon modules
Think high-order
Fall into the governance trap
The governance trap
Who
is responsible
How
What
When
maintains
prioritizes
contributes
Provider (AWS)
Patterns
Amazon S3
Amazon API Gateway
AWS Lambda
Amazon CloudFront
Amazon ECS (AWS Fargate)
Frontend
API service (Lambda)
API service (Container)
Project
Project
Project
Project
Project
Project
Pattern
Experiment
High-Order
Idea
🐛
🐛
🐛
🐛
Modules are for refactoring code however they hide complexity!
Not every use case can fit inside an existing module
The more you have, the more you have to maintain!
Aim 80~90%
[
{
"aggregation": "none"
},
{
"aggregation": {
"functions": [{
"name": "sum",
"alias": "someAlias"
}],
"interval": "1d23h0m12s"
}
}
]
Initiative + bad take
{
"filters": [{
"left": "(value - 32) * 5 / 9",
"operator": "<",
"right": "35.5"
}, {
"left": "(value - 32) * 5 / 9",
"operator": ">",
"right": "37.6"
}]
}
Whether you get an API specification to integrate with other teams or not, if you are blocked don't be.
Do it yourself
If you know that permissions are loose and you need to call some service, don't wait for ops.
Do it yourself (and then tell them)
Not a problem if:
Be kind with other developers, but not too kind. Everyone has different ways to review code, especially when multiple languages are used.
Set expectations about: linting, tests, comments, tooling, observability, security, performance, acceptable tradeoffs, environment, packaging, language features, etc.
If you have Infra as Code modules, package observability capabilities with them! And security features, backup, etc.
Note: In this case, this was actively forbidden, but still!