- Installation
- OSI Layers - fundamentals
- Layer 1 - Physical
- Layer 2 - Data Link
- Hub vs. Router
- IPv4 vs. IPv6
- Local Network vs. Wide Area Network
- Layer 3 - NETWORK
- Binary -> Decimal conversion
- Decimal -> Binary conversion
- Private IPv4 address classes - class A, class B, class C
- Subnet masking - subnet division
- Route Tables
- ARP address resolution protocol
- IP Routing on Layer 3
- Layer 3 problems
- Layer 4 - Transport
- TCP vs. UDP
- TCP segments
- TCP 3 ways handshakes
- VSCode navigation & shortcut tutorials
- Markdown
- Encryption types & concept: Plaintext, Algorithm, Key (Symmetric, Public, Private), Ciphertext
- Symmetric Encryption
- Assymetric Encrytion
- Signing & Digital Signature
- Hashing
- Hashing vs. Symmetric Encryption
- Hashing Collision
- Weak Hashing vs. Strong Hashing
- Digital Signature of Hash Digest
- Data Keys, Master Key and key rotation
- Envelop Encryption
- End-to-End Encryption
- Git fundamental
git init,git add .,git commit -m "message",git log,git checkout [commit hash] - Gitlense as VSCode extension
git diff [commit hash]to compare the current with past commitsgit tag "vX.Y.Z"- to change tag
git tag [new name] [old name]thengit tag -d [old tag] - to list all tags
git tag -l git checkout tags/[tag]git checkout [branch]- create branch
git branch [branch name] git checkout [branch name], but before that you have to commit unstaged/staged changesgit merge [branch name], usually frommainbranch to pull changes tomaingit branch -a --mergedto see past merged branchesgit branch -d [branch name], to do delete branches, but this is not recommended- Create Repo on Github > Clone to local > make local commit > push changes with
git push
- Python in REPL mode
- variable & value assignment
- integer
int/float typefloat/string typestr/boolean typeBoolean - checking type of variables/values via
type(var) - getting user input via prompt or terminal waiting via
input("input message") - string
my_str.upper()andmy_str.lower()function - in place - list and nested list
[] - access item/item of lists
- check length of list/string via
len(my_list)orlen(my_str) - list in place functions
my_list.append(),my_list.insert(),my_list.pop(index=0) my_list.sort()(in-place) vssorted(my_list)(copy)- casting types
int(my_string)orstr(my_float) - type hinting via type assignment
- no true constant problem in Python
tuppletype similar tolistbut it is immutablesetstype, theory of how git works withmy_set.intersection(other_set)&my_set.difference(other_set)- dictionary
dicttype,dict()initialization open()to open filesbooleantype and logic evaluationif elif elseflow controlwhile/breakloop
match/caseflow controlEnumclass via importfrom enum import Enummatch/caseandEnumcombination for clean flow controlforloop withrange(x)forloop to iterate over alistlistcomprehension, quickly transform individual items of alistand put into a newlistforloop with access to bothindexanditemof alistwithfor index,item in enumerate(my_list):forloop with access tokeyandvalueof adictwithfor k,v in my_dict.items():- simple Queue data structure implementation via
list functions, pure and impure functions, input/output, side effects- in scope and out of scope
Exceptionbasicsassert- simple unit testing with
assert try/exceptflow- assign
Exceptioninto variable for further actionsexcept Exception as e - multiple
try/exceptflows try/except/elseflow
classandobjectconcepts- creating
classandobject class: property, method,__dict__representation- simple inheritance
- inheritance with custom property and method override
- sub-modules
- data transfer object theory (
DTO) dataclassesPydanticpackagedataclassesvs.Pydantic@classmethod
- Regex, Regex visualizer, Regex testing
- Integration theory: messaging, file sharing, RPC (includes
REST API&gRPC) OSI LayersrevisionJSONserialization &JSONparsingPostman API Client- Testing some public API such as
http.cat
- API theory:
Data Transfer ObjectorDTO - Building API on top of
Pydantic Schemaclasses HTTP CodesFastAPI input auto-parservia Pydantic classesPUTAPI buildingGETAPI building- Distinguish 4 ways to provide data:
Header,Body,Path Parameters,Query Parameters API auto-docs
API auto-docsbest practices - including always type hint your API returns- Adding basic persistence for API
- Continuation with API:
PUT,GET,DELETE, andGETmultiple items
- VSCode debugger setup
- Debugging techniques
- Dependency injection theory
- Testing theory: unit testing, integration testing, end-end testing, smoke testing, regression testing...
- Pytest unit testing
pytest,pytest -s,pytest --vl - FastAPI TestClient
from fastapi.testclient import TestClient - unit testing API
- Pytest Fixture
- Using
@pytest.fixtureto create new instance of API Client for each test, or set default data - Parametizing test functions
@pytest.mark.parametrize - Data Access Object theory
DAO
- Install DB client within VSCode
- Installing SQLite
- Playing with Sakila.db
- SQL
SELECT,COUNT,DISTINCT,GROUP BY,WHERE,LIMIT,OFFSETwith logic operators - SQL
JOIN - SQL
INSERT INTO ... VALUES - SQL
UPDATE
- More SQL
UPDATE - Python virtual environment
venv - SQLModel - as a Relational Object Mapping tool (ORM)
- Revisit DTO, DAO theory
- Building simple SQL model
- Building simple API with automatic DTO <-> DAO conversion
- SQL
primary keyvsindex keyvscompound index key - SQL
foreign keyconstraint - Building APIs with SQLModel ORM
- Learning why we should have dedicated DTO & DAO layers, shouldn't rely on automatic conversion
- Mainly to discuss Assignment 1
- Intro to Cloud Computing
IaaSvs.PaaSvs.SaaS- Platform engineering responsibility
- Advantages of Cloud Computing
- What is AWS?
- AWS Pricing Model and unit cost charges
- FinOps
- Total Cost of Ownership comparison
- AWS
APIvs.Management Consolevs.CLIvs.SDK
- AZ, and why use 3 AZs
- Region
- Local services vs. Global services (domain name services DNS, IAM, CDN)
- POP = Edge Locations + Edge Caches
- CDN
- Storage Services overview
- Networking Services overview
- Security Services overview
- Management Services overview - Landing Zone and why split AWS accounts
- Integration Services overview
- Shared responsibility model examples (Self managed DB vs. RDS)
- S3 Service concepts
- S3 Tiers
- S3 DNS overview
- S3 Cost charges model
- EC2 recommended usecases
- Create EC2 instance
- AMI & Golden Image practice
- Instance Type, Instance family & size
- Network settings, high availability setups
- IAM Role, Instance profile
- User data script
- Instance Store vs. EBS drives
- Tag & ABAC
- TBC...
- EC2 labs
- Linux commands labs
- Stateful vs. Stateless firewalls
- Security Groups
- Practical ways to use Security Groups
- How multiple component groups work together via ALB, dedicated Security Group for different application component groups
- How DNS works, TLD, Name Server, Zone, Zone File
- Traversing DNS Tree
- DNS Records: NS, A, AAAA, Alias (unique to AWS), CNAME, TXT
- Drawio, multiple drawing exercises
- Public & Private IP
- IGW
- Security Group
- NACL
- ALB
- NATGW
- Subnets division & intro to VPC design
- More networking protocols and standard TCP ports
- Comprehensive VPC design
- How many application tiers (ALB/NATGW, web, app, db...)
- How many AZs
- Design the subnets
- Design public facing tiers ALB/NATGW/Internet GW
- Design route tables
- Design the security group
- Security Fundamentals
- Prevention methods: Networking
- NACL
- SG
- WAF
- IPS
- Subnetting, zoning
- AWS Network Firewall's implementation
- Prevention methods: PKI
- DNS
- CA
- DNSSEC (more later)
- Use of CA's certificates
- Application of ACM
- Prevention methods: Data Security
- Data at rest vs. Data in transit
- Symmetric vs. Asymmetric vs. Hybrid encryption revision
- KMS (API only + multi-tenancy) vs. CloudHSM (normally only PKCS 11 or other low level interfaces)
- Hashing
- Key algorithm available
- Never use same key pairs for both encryption & signing
- Import key materials to KMS
- Provide CloudHSM with API interface of KMS
- CloudHSM deployment model
- Prevention methods: IAM
- IAM Policy
- IAM Role
- IAM User
- IAM Group
- Condition & permission boundary example
- RDS vs. DynamoDB
- Deployment model
- Access via VPC
- Performance
- Scaling characteristic
- Pricing structure
- Consistency profile
- DynamoDB
- Partitioning
- Primary key vs. Compound Key (Partition Key, Sort Key)
- WCR, RCU
- On-demand vs. Provisioned Throughput
- Query
- Scan
- GSI - global secondary index
- Global table
- DynamoDB Stream, capturing change data capture, upsert table, enabling analytics
- DevOps team job functions
- DevOps Engineer
- Cloud Engineer
- Site Reliability Engineer
- Platform Engineer
- Pipeline Engineer
- Integration Engineer
- System Manager overview
- Parameter Store, KMS deep discussion
- IaC imperative vs. declarative
- Cloud Formation
- Elastic Load Balancing
- Types of load balancers:
- Application
- Gateway
- Network
- Classic
- Bastion host
- Autoscaling applications:
- ALB
- Target group
- Register EC2 instance into Target groups
- Create Listener to ALB
- Types of scaling rules:
- Manual
- Scheduled
- Dynamic - via metric and alarms
- Predictive
- Auto scaling best practices
- Route 53 services, highlighted routing
- Simple
- Failover
- IP based
- Geolocation based
- CloudFront
- Concepts of how CDN delivery & secure contents
- TTL and invalidations
- SSL/SNI
- OAI
- Custom Geolocation distribution
- Private content hosting
- Lambda service & usecases
- System design primer:
- Scalability
- Scalability components
- Scalability & Performance tradeoff
- Latency vs. Throughput
- CAP theory
- Eventual vs. Strong consistency
- Active-Passive failover, Active-Active failover
- Availability
- CDN
- Stateful vs. Stateless applications
- Load Balancing
- Microservices
- Normalization vs. Denormalization
- Serverless framework intro
- AWS CLI setup
- S3 handson
- Lambda handson
- S3 Events to trigger Lambda
- IAM Policy design
- S3 Events to trigger Lambda to resize images
- Assignment 2 handsout