๐Ÿ“š AWS 1x1 - ๐——๐˜†๐—ป๐—ฎ๐—บ๐—ผ๐——๐—• ๐Ÿ’พ

My personal holy grail of database solutions & one of AWS' flagship services

An all-embracing mega-thread ๐Ÿงตโ†“
๐—ง๐—ต๐—ฟ๐—ฒ๐—ฎ๐—ฑ ๐—ข๐˜ƒ๐—ฒ๐—ฟ๐˜ƒ๐—ถ๐—ฒ๐˜„

โ€ข Introduction
โ€ข Provisioned vs On-Demand Capacity
โ€ข Basic Concepts
โ€ข Keys & Attributes
โ€ข Retrieving Items
โ€ข Race Conditions
โ€ข Expressions
โ€ข Indexes
โ€ข Streams
โ€ข Security
โ€ข Backups
โ€ข Global Tables
โ€ข Observability

{ 1/38 }
๐—œ๐—ป๐˜๐—ฟ๐—ผ๐—ฑ๐˜‚๐—ฐ๐˜๐—ถ๐—ผ๐—ป

Why should you care about DynamoDB?

It's managed, highly available & scales on-demand with low latencies.

For getting you hooked, at Prime Days 2021 DynamoDB served ๐Ÿด๐Ÿต.๐Ÿฎ ๐—บ๐—ถ๐—น๐—น๐—ถ๐—ผ๐—ป ๐—ฟ๐—ฒ๐—พ๐˜‚๐—ฒ๐˜€๐˜๐˜€/๐˜€๐—ฒ๐—ฐ๐—ผ๐—ป๐—ฑ at its peak.

{ 2/38 }
"I've learned other services by exploration and trial & error"

That's totally legit and often works out.
But DynamoDB is different.

You'll save yourself a lot of pain in the future if you dive deep in the beginning!



{ 3/38 }
๐—ฃ๐—ฟ๐—ผ๐˜ƒ๐—ถ๐˜€๐—ถ๐—ผ๐—ป๐—ฒ๐—ฑ ๐˜ƒ๐˜€ ๐—ข๐—ป-๐——๐—ฒ๐—บ๐—ฎ๐—ป๐—ฑ ๐—–๐—ฎ๐—ฝ๐—ฎ๐—ฐ๐—ถ๐˜๐˜†

You can choose between those two types, but can also change them at any time.
โ€ข provisioned - specifying the capacity units for your table & you'll be billed for them
โ€ข on-demand - paying per request

{ 4/38 }
Which one should you pick?

Go with ๐—ข๐—ป-๐——๐—ฒ๐—บ๐—ฎ๐—ป๐—ฑ if having unpredictable traffic, as it scales on-demand and you're only paying for what you actually use.
With steady load or known patterns, pick ๐—ฃ๐—ฟ๐—ผ๐˜ƒ๐—ถ๐˜€๐—ถ๐—ผ๐—ป๐—ฒ๐—ฑ as it's almost ๐Ÿณ ๐˜๐—ถ๐—บ๐—ฒ๐˜€ less expensive!

{ 5/xx }
Your traffic patterns can vary with ๐—ข๐—ป-๐——๐—ฒ๐—บ๐—ฎ๐—ป๐—ฑ as you can create an auto-scaling configuration based on CloudWatch metrics to increase/decrease your capacities!

It's not an easy task to do this well though.

{ 6/38 }
๐—™๐—ฟ๐—ฒ๐—ฒ ๐—ง๐—ถ๐—ฒ๐—ฟ ๐—ฅ๐—ฒ๐—บ๐—ถ๐—ป๐—ฑ๐—ฒ๐—ฟ

If you're still on the free tier (your account was created less than 1 year ago) and you're only having low traffic / few tables, always stick to ๐—ฃ๐—ฟ๐—ผ๐˜ƒ๐—ถ๐˜€๐—ถ๐—ผ๐—ป๐—ฒ๐—ฑ as it includes 25 read & write capacity units for free!

{ 7/38 }
๐—•๐—ฎ๐˜€๐—ถ๐—ฐ ๐—–๐—ผ๐—ป๐—ฐ๐—ฒ๐—ฝ๐˜๐˜€

In comparison to SQL, a document in DynamoDB doesn't have a fixed schema
What is defined by the table: the primary key, which uniquely identifies each document

A document can also have other ๐—ฎ๐˜๐˜๐—ฟ๐—ถ๐—ฏ๐˜‚๐˜๐—ฒ๐˜€ with different ๐˜๐˜†๐—ฝ๐—ฒ๐˜€

{ 8/38 }
๐—ฃ๐—ฟ๐—ถ๐—บ๐—ฎ๐—ฟ๐˜† ๐—ž๐—ฒ๐˜†๐˜€

It's is your ๐˜‚๐—ป๐—ถ๐—พ๐˜‚๐—ฒ identifier & must be provided when inserting a new item
There are two different types of primary keys
โ€ข simple - a single field; also your partition key
โ€ข composite - build-up via your partition and range key

{ 9/38 }
๐—ฃ๐—ฎ๐—ฟ๐˜๐—ถ๐˜๐—ถ๐—ผ๐—ป ๐—ž๐—ฒ๐˜†๐˜€

Internally, DynamoDB consists of different partitions where your items will be stored at.
Your partition key will run through a hash function which result will determine the partition.

A good partition key should be equally distributed

{ 10/38 }
Why is that important?

Your provisioned read & write capacity units will be distributed among partitions.
If your items are not well-distributed, it's way easier to get your requests throttled as you'll end up with ๐—ต๐—ผ๐˜ ๐—ฝ๐—ฎ๐—ฟ๐˜๐—ถ๐˜๐—ถ๐—ผ๐—ป๐˜€ (receiving high load).

{ 11/38 }
๐—ฅ๐—ฎ๐—ป๐—ด๐—ฒ ๐—ž๐—ฒ๐˜†๐˜€

Besides only having a partition key as your primary key, you can have a ๐—ฐ๐—ผ๐—บ๐—ฝ๐—ผ๐˜€๐—ถ๐˜๐—ฒ ๐—ธ๐—ฒ๐˜†
It also spans over the range key (partition + range key has to be unique)

There are a lot of benefits as the range key can be used with Expressions

{ 12/38 }
๐—”๐˜๐˜๐—ฟ๐—ถ๐—ฏ๐˜‚๐˜๐—ฒ๐˜€ & ๐—ง๐˜†๐—ฝ๐—ฒ๐˜€

Besides your primary key, your document can contain other fields of different types

Among those:
โ€ข String (๐—ฆ)
โ€ข Number (๐—ก)
โ€ข Binary (๐— )
โ€ข Boolean (๐—•๐—ข๐—ข๐—Ÿ)
โ€ข List (๐—Ÿ)
โ€ข Map (๐— )

๐—˜๐˜…๐—ฎ๐—บ๐—ฝ๐—น๐—ฒ:
"Provider": { "S": "AWS" }

{ 13/38 }
๐—ฅ๐—ฒ๐˜๐—ฟ๐—ถ๐—ฒ๐˜ƒ๐—ถ๐—ป๐—ด ๐—ถ๐˜๐—ฒ๐—บ๐˜€

That's where it gets interesting and you see differences to SQL or other NoSQL solutions.
You can only query on indexes: your partition key & range key, if there's any.

Everything else needs ๐˜€๐—ฐ๐—ฎ๐—ป

{ 14/38 }
How do ๐—พ๐˜‚๐—ฒ๐—ฟ๐—ถ๐—ฒ๐˜€ and ๐˜€๐—ฐ๐—ฎ๐—ป๐˜€ differ?

A scan is just running through your table looking for items that are matching your expression.
You'll be ๐—ฏ๐—ถ๐—น๐—น๐—ฒ๐—ฑ ๐—ณ๐—ผ๐—ฟ ๐˜๐—ต๐—ฒ ๐—ถ๐˜๐—ฒ๐—บ๐˜€ ๐˜๐—ต๐—ฎ๐˜ ๐—ฎ๐—ฟ๐—ฒ ๐˜€๐—ฐ๐—ฎ๐—ป๐—ป๐—ฒ๐—ฑ, not the items that are retrieved.

{ 15/38 }
With ๐—พ๐˜‚๐—ฒ๐—ฟ๐˜†, you're only paying for the retrieved items.
It's only looking for the items at a specific partition.

So generally speaking: query is ๐˜„๐—ฎ๐˜† ๐—ณ๐—ฎ๐˜€๐˜๐—ฒ๐—ฟ and ๐—ฐ๐—ต๐—ฒ๐—ฎ๐—ฝ๐—ฒ๐—ฟ!

{ 16/38 }
๐—ฅ๐—ฎ๐—ฐ๐—ฒ ๐—–๐—ผ๐—ป๐—ฑ๐—ถ๐˜๐—ถ๐—ผ๐—ป๐˜€

Often, there are possible race conditions due to multi-tenancy.
Example:
โ€ข Process 1 reads Document A
โ€ข Process 2 reads Document A
โ€ข Process 1 writes Document A
โ€ข Process 2 writes Document A

We'll lose our first write!

{ 17/38 }
DynamoDB got you covered by using ๐—ฉ๐—ฒ๐—ฟ๐˜€๐—ถ๐—ผ๐—ป๐˜€

With DynamoDB's data mapper, you can stick to using a field as a version indicator.
Each update will increment its value.

Internally, expressions will be used to check that the version matches our expected ones!

{ 18/38 }
We're ensuring that there are no intermediate writes, which would increase our version number

Intermediate write will throw a ๐—–๐—ผ๐—ป๐—ฑ๐—ถ๐˜๐—ถ๐—ผ๐—ป๐—ฎ๐—น๐—–๐—ต๐—ฒ๐—ฐ๐—ธ๐—™๐—ฎ๐—ถ๐—น๐—ฒ๐—ฑ๐—˜๐˜…๐—ฐ๐—ฒ๐—ฝ๐˜๐—ถ๐—ผ๐—ป
We can catch it & then handle those conflicts

github.com/awslabs/dynamoโ€ฆ

{ 19/38 }
๐—˜๐˜…๐—ฝ๐—ฟ๐—ฒ๐˜€๐˜€๐—ถ๐—ผ๐—ป๐˜€

With expressions, you can check for certain conditions that must be met to actually execute your statement.

Types of expressions:
โ€ข Condition
โ€ข Projection
โ€ข Update
โ€ข Key Condition
โ€ข Filter

{ 20/38 }
Example: ๐—–๐—ผ๐—ป๐—ฑ๐—ถ๐˜๐—ถ๐—ผ๐—ป ๐—˜๐˜…๐—ฝ๐—ฟ๐—ฒ๐˜€๐˜€๐—ถ๐—ผ๐—ป๐˜€ check for conditions that have to be met before applying an update to a document.

Build these with the known comparators ๐—ฒ๐—พ๐˜‚๐—ฎ๐—น๐˜€ (=), ๐—ด๐—ฟ๐—ฒ๐—ฎ๐˜๐—ฒ๐—ฟ ๐˜๐—ต๐—ฎ๐—ป (>), or ๐—ด๐—ฟ๐—ฒ๐—ฎ๐˜๐—ฒ๐—ฟ ๐—ผ๐—ฟ ๐—ฒ๐—พ๐˜‚๐—ฎ๐—น ๐˜๐—ต๐—ฎ๐—ป (>=)

{ 21/38 }
๐—œ๐—ป๐—ฑ๐—ฒ๐˜…๐—ฒ๐˜€

As we're learned, you can only query on your partition and range keys.
But that can't be everything?

You're right: you can create indexes, which are specifying alternative key structures.
Those can also be used to query your items.

{ 22/38 }
There are two different types of indexes

โ€ข local (๐—Ÿocal ๐—ฆecondary ๐—œndex - ๐—Ÿ๐—ฆ๐—œ) - needs to have the same hash/partition key, but an alternative range key
โ€ข global (๐—š๐—ฆ๐—œ) - partition & range key can be different

Both allow us a more flexible query structure

{ 23/38 }
More things to know about Secondary Indexes

โ€ข no uniqueness requirement for the primary keys of your secondary indexes
โ€ข the attributes for your secondary index are optional
โ€ข the number of secondary indexes are limited per table
โ€ข LSI: 5
โ€ข GSI: 20

{ 24/38 }
Also, you can specify which attributes are ๐—ฝ๐—ฟ๐—ผ๐—ท๐—ฒ๐—ฐ๐˜๐—ฒ๐—ฑ to your secondary index.
โ€ข ๐—ž๐—˜๐—ฌ๐—ฆ_๐—ข๐—ก๐—Ÿ๐—ฌ - only the (underlying) keys
โ€ข ๐—”๐—Ÿ๐—Ÿ - the full item
โ€ข ๐—œ๐—ก๐—–๐—Ÿ๐—จ๐——๐—˜ - only specific fields

Put thought into this.

{ 25/38 }
๐—ฆ๐˜๐—ฟ๐—ฒ๐—ฎ๐—บ๐˜€

DynamoDB Streams are another great features that allow you to invoke other services if items are ๐—ฐ๐—ฟ๐—ฒ๐—ฎ๐˜๐—ฒ๐—ฑ, ๐˜‚๐—ฝ๐—ฑ๐—ฎ๐˜๐—ฒ๐—ฑ, or ๐—ฑ๐—ฒ๐—น๐—ฒ๐˜๐—ฒ๐—ฑ

๐—˜๐˜…๐—ฎ๐—บ๐—ฝ๐—น๐—ฒ: forward data to ElasticSearch via Lambda!
This also allows you to manipulate or filter!

{ 26/38 }
๐—ฆ๐—ฒ๐—ฐ๐˜‚๐—ฟ๐—ถ๐˜๐˜†

DynamoDB tables are ๐—ฏ๐˜† ๐—ฑ๐—ฒ๐—ณ๐—ฎ๐˜‚๐—น๐˜ ๐—ฒ๐—ป๐—ฐ๐—ฟ๐˜†๐—ฝ๐˜๐—ฒ๐—ฑ ๐˜„๐—ถ๐˜๐—ต ๐—ž๐— ๐—ฆ.
You can also choose to use a customer-managed key (CMK) which you are in control of.

As with other AWS services, access is fully covered via ๐—œ๐—”๐— .

{ 27/38 }
๐—•๐—ฎ๐—ฐ๐—ธ๐˜‚๐—ฝ๐˜€

DynamoDB's managed service and brings its own redundancy, but this does not protect you from making mistakes on your own.
That's why you have to keep backups.

The good part: AWS makes this easy for you.

{ 28/38 }
๐—ข๐—ป-๐——๐—ฒ๐—บ๐—ฎ๐—ป๐—ฑ ๐—•๐—ฎ๐—ฐ๐—ธ๐˜‚๐—ฝ๐˜€

The easiest and cheapest option is to regularly trigger on-demand backups.
Just create a Lambda function that will trigger backups on your table via aws-sdk.
Add an EventBridge rule which invokes your function regularly.

{ 29/38 }
๐—–๐—ผ๐—ป๐˜๐—ถ๐—ป๐˜‚๐—ผ๐˜‚๐˜€ ๐—ฏ๐—ฎ๐—ฐ๐—ธ๐˜‚๐—ฝ๐˜€ ๐˜ƒ๐—ถ๐—ฎ ๐—ฃ๐—ผ๐—ถ๐—ป๐˜-๐—œ๐—ป-๐—ง๐—ถ๐—บ๐—ฒ-๐—ฅ๐—ฒ๐—ฐ๐—ผ๐˜ƒ๐—ฒ๐—ฟ๐˜†

Enabling PITR for your table will allow you to restore your table to any state within the last 35 days. It comes with ๐—ฎ๐—ฑ๐—ฑ๐—ถ๐˜๐—ถ๐—ผ๐—ป๐—ฎ๐—น ๐—ฐ๐—ผ๐˜€๐˜๐˜€.

{ 30/38 }
๐—˜๐˜…๐—ฝ๐—ผ๐—ฟ๐˜๐—ถ๐—ป๐—ด ๐—ฏ๐—ฎ๐—ฐ๐—ธ๐˜‚๐—ฝ๐˜€ ๐˜๐—ผ ๐—ฆ๐Ÿฏ

The first two options do not protect you from table drops
That's why you should export your data to S3
It's also a feature directly offered by DynamoDB for PITR enabled tables
Automate this via Lambda & EventBridge rules

{ 31/38 }
๐—š๐—น๐—ผ๐—ฏ๐—ฎ๐—น ๐—ง๐—ฎ๐—ฏ๐—น๐—ฒ๐˜€

It's likely that you want to have your infrastructure distributed around the globe for redundancy and faster latencies.

With DynamoDB, you can have ๐˜€๐˜†๐—ป๐—ฐ๐—ต๐—ฟ๐—ผ๐—ป๐—ถ๐˜‡๐—ฒ๐—ฑ tables in different regions.

{ 32/38 }
๐—ข๐—ฏ๐˜€๐—ฒ๐—ฟ๐˜ƒ๐—ฎ๐—ฏ๐—ถ๐—น๐—ถ๐˜๐˜†

Regardless if you're using on-demand or provisioned capacity, you should always know what's going on: how much capacity is used, are there throttling events or spiking latencies, or is everything operating as expected?

{ 33/38 }
๐—–๐—น๐—ผ๐˜‚๐—ฑ๐—ช๐—ฎ๐˜๐—ฐ๐—ต offers a great set of metrics to get a glance at your tables.

You'll see:
โ€ข used read capacity units
โ€ข used write capacity units
โ€ข throttles

You can configure alerts on throttles or if certain thresholds for RCUs/WCUs are crossed.

{ 34/38 }
Third-party tools like @thedashbird help you monitoring your DynamoDB tables as well as giving you well-architected recommendations.

This helps you to find and fix errors & anomalies.

As Dashbirds ๐Ÿ‘จโ€๐Ÿ’ป๐Ÿฅ‘: Send me a DM with any question ๐Ÿ“ซ ๐Ÿ˜Š

dashbird.io/event-library/โ€ฆ

{ 35/38 }
๐—–๐—ฟ๐—ฒ๐—ฑ๐—ถ๐˜๐˜€
Content is mostly inspired by ๐—ง๐—ต๐—ฒ ๐——๐˜†๐—ป๐—ฎ๐—บ๐—ผ๐——๐—• ๐—š๐˜‚๐—ถ๐—ฑ๐—ฒ by @alexbdebrie!
Have a look & deep dive into DynamoDB - you won't regret it.

Alex does a great job at explaining concepts in detail.

dynamodbguide.com

{ 36/38 }
It doesn't end here!
There's a lot more to learn

My recommended resource for working with DynamoDB in a professional context:
๐—ง๐—ต๐—ฒ ๐——๐˜†๐—ป๐—ฎ๐—บ๐—ผ๐——๐—• ๐—•๐—ผ๐—ผ๐—ธ - also by @alexbdebrie

Likely, it will save you a lot more money than it costs ๐Ÿ™Œ

dynamodbbook.com

{ 37/38 }
๐—•๐—ผ๐—ป๐˜‚๐˜€: ๐——๐˜†๐—ป๐—ฎ๐—บ๐—ผ๐——๐—•'๐˜€ ๐—ช๐—ต๐—ถ๐˜๐—ฒ๐—ฝ๐—ฎ๐—ฝ๐—ฒ๐—ฟ

Even if you're not into reading papers, that one is worth reading anyway.
If you got some spare time, take a look.

allthingsdistributed.com/files/amazon-dโ€ฆ

{ 38/38 }
Thank you for reading!
Hopefully, you've learned something new or I've got you hooked about DynamoDB! ๐Ÿค–

If so, โ™ป๏ธ or โ™ฅ๏ธ of the initial posts are appreciated!

Also, drop me a follow if you're interested in regular AWS & Azure content! ๐ŸŒค

โ€ข โ€ข โ€ข

Missing some Tweet in this thread? You can try to force a refresh
ใ€€

Keep Current with Tobias Schmidt

Tobias Schmidt Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @tpschmidt_

15 Oct
๐Ÿ“š AWS 1x1 - ๐—Ÿ๐—ฎ๐—บ๐—ฏ๐—ฑ๐—ฎ ฦ›

The Heart of your Serverless Love Story ๐Ÿงก

All my learnings & (almost) everything you need to know โ†“
๐—ง๐—ต๐—ฟ๐—ฒ๐—ฎ๐—ฑ ๐—ข๐˜ƒ๐—ฒ๐—ฟ๐˜ƒ๐—ถ๐—ฒ๐˜„

โ€ข Introduction
โ€ข Cold Starts
โ€ข Handler Method
โ€ข Runtimes
โ€ข Layers
โ€ข Security
โ€ข Versioning & Aliases
โ€ข Provisioned & Reserved Concurrency
โ€ข Lambda@Edge
โ€ข Pros & Cons
โ€ข Observability
โ€ข Considerations to make

{ 1/31 }
๐—œ๐—ป๐˜๐—ฟ๐—ผ๐—ฑ๐˜‚๐—ฐ๐˜๐—ถ๐—ผ๐—ป

AWS released Lambda in late 2014, spreading the buzzword serverless.

With EC2 you didn't have to think about physical servers anymore, but only virtual machines.

With Lambda, there's not even that anymore to maintain.
Just bring your code.

{ 2/31 }
Read 33 tweets
12 Oct
Unpopular opinion: building a successful SaaS product is ๐—ต๐—ฎ๐—ฟ๐—ฑ

Yes, Twitter feels like everybody launches something & immediately goes to $10k MRR

๐—ฅ๐—ฒ๐—ฎ๐—น๐—ถ๐˜๐˜† ๐—ถ๐˜€ ๐—ฑ๐—ถ๐—ณ๐—ณ๐—ฒ๐—ฟ๐—ฒ๐—ป๐˜

I'm still in the early stages & already got a lot of lessons learned โ†“
๐—Ÿ๐—ฎ๐˜‚๐—ป๐—ฐ๐—ต ๐—ฒ๐—ฎ๐—ฟ๐—น๐˜†

Maybe you've got another dozen ideas for features you think are needed for your MVP.
But until you've launched and you've got actual (paying) users, you've got no guarantee that your business case is even valid.

Keep your scope as small as possible.
๐—ฃ๐—ฒ๐—ฟ๐—ณ๐—ฒ๐—ฐ๐˜๐—ถ๐—ผ๐—ป๐—ถ๐˜€๐—บ ๐—ถ๐˜€ ๐—ฏ๐—ฎ๐—ฑ

Intersects with the previous point: don't make the shinest code, with 100% code coverage and the perfect architecture, as it requires way too much effort.

Don't over or underdo it.
Make it work & manageable.
Read 9 tweets
11 Oct
๐—œ๐˜'๐˜€ ๐—ฒ๐—ฎ๐˜€๐˜† & ๐—ฐ๐—ผ๐—บ๐—ณ๐—ผ๐—ฟ๐˜๐—ฎ๐—ฏ๐—น๐—ฒ ๐˜๐—ผ ๐˜€๐˜๐—ฎ๐˜† ๐˜„๐—ต๐—ฒ๐—ฟ๐—ฒ ๐˜†๐—ผ๐˜‚ ๐—ฎ๐—ฟ๐—ฒ

Working at the same company for years.
In the same project.
In the same team.
At the same product.

No need to prove yourself anymore.

Maybe that's exactly why you should think about leaving โ†“
๐—˜๐˜ƒ๐—ฎ๐—น๐˜‚๐—ฎ๐˜๐—ถ๐—ป๐—ด ๐˜†๐—ผ๐˜‚๐—ฟ ๐˜€๐—ถ๐˜๐˜‚๐—ฎ๐˜๐—ถ๐—ผ๐—ป

You've gained respect & trust in your current position.
Maybe you've got promoted.
You know your craft.

Life's good.

Why should you leave into some uncertainty?
Why taking risks?

Because there's a lot to ๐—ด๐—ฎ๐—ถ๐—ป!

{ 1/8 }
๐€๐๐š๐ฉ๐ญ๐ข๐ง๐  & ๐ฌ๐ญ๐ซ๐ž๐ง๐ ๐ญ๐ก๐ž๐ง๐ข๐ง๐  ๐ฒ๐จ๐ฎ๐ซ ๐š๐ญ๐ญ๐ข๐ญ๐ฎ๐๐ž

Everything is under constant change โšก๏ธ

The new technology you've read about will probably be the standard next year.
What you're working on is probably obsolete tomorrow.

{ 2/8 }
Read 10 tweets
10 Oct
Have a look at AWS' growth of services...

Counting namespaces, the past decade is just mind-boggling ๐Ÿ™€

โ€ข 2013: 25
โ€ข 2015: 46
โ€ข 2017: 78
โ€ข 2019: 182

๐—›๐—ผ๐˜„ ๐˜๐—ผ ๐—ธ๐—ฒ๐—ฒ๐—ฝ ๐˜‚๐—ฝ ๐˜„๐—ถ๐˜๐—ต ๐˜„๐—ต๐—ฎ๐˜'๐˜€ ๐—ป๐—ฒ๐˜„? โ†“
๐—”๐—ช๐—ฆ ๐—ก๐—ฒ๐˜„๐˜€ ๐—•๐—น๐—ผ๐—ด

Guarantees to not miss out on new features or services, but also contains interesting statistics and other insights from AWS itself.
Gets updated very regularly, sometimes several times a day.

aws.amazon.com/blogs/aws/

{ 1/4 }
๐—ช๐—ต๐—ฎ๐˜'๐˜€ ๐—ก๐—ฒ๐˜„ ๐˜„๐—ถ๐˜๐—ต ๐—”๐—ช๐—ฆ?

If you're focusing on keeping up with the new capabilities AWS provides, that's your major source.
You'll learn about improvements to existing services, introductions of new ones as well as region expansions.

aws.amazon.com/new/

{ 2/4 }
Read 5 tweets
5 Oct
๐Ÿ“š ๐—–๐—น๐—ผ๐˜‚๐—ฑ ๐—–๐—ผ๐—ป๐—ฐ๐—ฒ๐—ฝ๐˜๐˜€ ๐Ÿญ๐˜…๐Ÿญ

How do dedicated servers, virtual machines, containers & functions differ? ๐Ÿค–

An overview of the different compute models โ†“
๐——๐—ฒ๐—ฑ๐—ถ๐—ฐ๐—ฎ๐˜๐—ฒ๐—ฑ ๐—ฆ๐—ฒ๐—ฟ๐˜ƒ๐—ฒ๐—ฟ๐˜€ (1/2) ๐Ÿ› 

A physical server, only utilized by you
โ€ข you have to know or guess the CPU & memory capacities you need
โ€ข high risk of overpaying (underutilized server) or under-provisioning (too much load)
๐——๐—ฒ๐—ฑ๐—ถ๐—ฐ๐—ฎ๐˜๐—ฒ๐—ฑ ๐—ฆ๐—ฒ๐—ฟ๐˜ƒ๐—ฒ๐—ฟ๐˜€ (2/2) ๐Ÿ› 

โ€ข you're able to run multiple apps, but need to make sure that you're not causing conflicts by resource sharing
โ€ข you're solely responsible for the security
โ€ข up- or downscaling is tedious & not quickly possible
Read 7 tweets
28 Sep
๐Ÿ“š AWS 1x1

ษชแด…แด‡ษดแด›ษชแด›ส- & แด€แด„แด„แด‡๊œฑ๊œฑ แดแด€ษดแด€ษขแด‡แดแด‡ษดแด› (ษชแด€แด) ๐Ÿ”‘

The concepts are crucial & being confident in them is a necessity.

From basics to advanced concepts ๐Ÿงตโ†“
For seriously working with AWS, there's no way around IAM.
Skipping to understand its core principles will bite you again and again in the future๏ธ ๐Ÿ”ฅ

Take the time to do a deep dive, so you won't be frustrated later.

{ 1/35 }
Thread Overview ๐Ÿงต

โ€ข IAMs Capabilities
โ€ข Key Terms
โ€ข Identity- & Resource-based Policies
โ€ข Securing your AWS Account
โ€ข Basics: Credentials & AWS CLI
โ€ข Dealing with "Access Denied"
โ€ข Least Privilege
โ€ข Permission Boundaries
โ€ข Tooling

{ 2/35 }
Read 37 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!

:(