- 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 frommain
branch to pull changes tomain
git branch -a --merged
to 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
tupple
type similar tolist
but it is immutablesets
type, theory of how git works withmy_set.intersection(other_set)
&my_set.difference(other_set)
- dictionary
dict
type,dict()
initialization open()
to open filesboolean
type and logic evaluationif elif else
flow controlwhile/break
loop
match/case
flow controlEnum
class via importfrom enum import Enum
match/case
andEnum
combination for clean flow controlfor
loop withrange(x)
for
loop to iterate over alist
list
comprehension, quickly transform individual items of alist
and put into a newlist
for
loop with access to bothindex
anditem
of alist
withfor index,item in enumerate(my_list):
for
loop with access tokey
andvalue
of adict
withfor 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
Exception
basicsassert
- simple unit testing with
assert
try/except
flow- assign
Exception
into variable for further actionsexcept Exception as e
- multiple
try/except
flows try/except/else
flow
class
andobject
concepts- creating
class
andobject
class
: property, method,__dict__
representation- simple inheritance
- inheritance with custom property and method override
- sub-modules
- data transfer object theory (
DTO
) dataclasses
Pydantic
packagedataclasses
vs.Pydantic
@classmethod
- Regex, Regex visualizer, Regex testing
- Integration theory: messaging, file sharing, RPC (includes
REST API
&gRPC
) OSI Layers
revisionJSON
serialization &JSON
parsingPostman API Client
- Testing some public API such as
http.cat
- API theory:
Data Transfer Object
orDTO
- Building API on top of
Pydantic Schema
classes HTTP Codes
FastAPI input auto-parser
via Pydantic classesPUT
API buildingGET
API building- Distinguish 4 ways to provide data:
Header
,Body
,Path Parameters
,Query Parameters
API auto-docs
API auto-docs
best practices - including always type hint your API returns- Adding basic persistence for API
- Continuation with API:
PUT
,GET
,DELETE
, andGET
multiple 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.fixture
to 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
,OFFSET
with 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 key
vsindex key
vscompound index key
- SQL
foreign key
constraint - 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
IaaS
vs.PaaS
vs.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
API
vs.Management Console
vs.CLI
vs.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