-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.html
787 lines (785 loc) · 29.7 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, shrink-to-fit=no"
/>
<title>AWS Educational Site</title>
<link rel="stylesheet" href="assets/bootstrap/css/bootstrap.min.css" />
<link rel="stylesheet" href="assets/css/styles.css" />
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
/>
<link rel="icon" type="image/x-icon" href="assets/img/image 2.png" />
</head>
<body>
<div class="font">
<nav id="mynav" class="navbar navbar-light navbar-expand-md fixed-top">
<div class="container-fluid">
<a id="brand" class="navbar-brand brandBackground" href="#home">
<img class="icon" src="assets/img/clipboard-image.png" />
Learn AWS
</a>
<button
id="expandMenu"
data-bs-toggle="collapse"
class="navbar-toggler"
data-bs-target="#navcol-1"
>
<!-- <span class="visually-website-box-hidden"></span> -->
<!-- <span class="navbar-toggler-icon"></span> -->
<svg
id="ham"
class="ham hamRotate ham4"
viewBox="0 0 100 100"
width="50px"
onclick="this.classList.toggle('active')"
>
<path
class="line top"
d="m 70,33 h -40 c 0,0 -8.5,-0.149796 -8.5,8.5 0,8.649796 8.5,8.5 8.5,8.5 h 20 v -20"
/>
<path class="line middle" d="m 70,50 h -40" />
<path
class="line bottom"
d="m 30,67 h 40 c 0,0 8.5,0.149796 8.5,-8.5 0,-8.649796 -8.5,-8.5 -8.5,-8.5 h -20 v 20"
/>
</svg>
</button>
<div class="collapse navbar-collapse" id="navcol-1">
<ul class="nav mx-auto">
<li class="nav-item">
<a class="nav-link linkBackground active" href="#home">Home</a>
</li>
<li class="nav-item">
<a class="nav-link linkBackground" href="#website-hosting"
>Website Hosting</a
>
</li>
<li class="nav-item">
<a class="nav-link linkBackground" href="#api">API</a>
</li>
<li class="nav-item">
<a class="nav-link linkBackground" href="#data-storage"
>Data Storage</a
>
</li>
<li class="nav-item">
<a class="nav-link linkBackground" href="#data-pipelines"
>Data Pipelines</a
>
</li>
<li class="nav-item">
<a class="nav-link linkBackground" href="#authentication"
>Authentication</a
>
</li>
</ul>
</div>
</div>
</nav>
<section id="home" class="home">
<div class="container column-layout">
<div class="alignTextLeft sidebar-one whiteBackground">
<h1>What is AWS for?</h1>
<p>
AWS or Amazon Web Services is the most popularly used cloud
computing solution. You can host anything you want whether it be a
database, website, IoT project, login solution, data pipeline,
machine learning, and more. This tutorial aims to guide beginners
into the world of cloud computing with AWS.
</p>
<div class="tutorialInfo">
<img
class="img-fluid center-image osuapp-image"
src="assets/img/image 2.png"
/>
<p>
This tutorial is brought to you by the
<a
class="footer-link"
target="_blank"
href="https://osuapp.club"
>OSU App Development Club</a
>.
</p>
</div>
<div class="btn-container">
<button
class="start-learning-btn"
type="button"
onclick="window.location.href='#website-hosting'"
>
Start Learning Now!
<i class="fa fa-arrow-down downArrowIcon"></i>
<!-- <img
class="img-fluid center-image arrow-image"
src="assets/img/Arrow downward.svg"
/> -->
</button>
</div>
</div>
<div class="sidebar-two">
<!-- <iframe
class="scaledIframeShiftedRight"
src="https://my.spline.design/3dtextbluecopy-fdbd67785c3e504840619ec0bff7f5b5/"
loading="lazy"
frameborder="0"
></iframe> -->
<img
class="img-fluid center-image home-image"
src="assets/img/image 47.png"
/>
</div>
</div>
</section>
<section id="website-hosting" class="website">
<div class="container whiteBackground">
<div class="whiteBackground introTxt">
<h3>Hosting a Website</h3>
<p>
Website hosting is a common thing to do, but sometimes you may
want to expand your website’s functionality with more complex
services like databases, analytics, machine learning, etc. Hosting
your website on AWS is a great way to bridge this gap. Shown below
are some of the most common ways of hosting a website.
</p>
<p>
<u>Note</u>: Anything can be as simple or as complicated as you
want it.
</p>
</div>
<div class="website-column-layout">
<div class="website-box-hidden website-box">
<h3>Pre-Reqs</h3>
<h3 class="redText">Prepare Code</h3>
<img
class="img-fluid center-image website-image"
src="assets/img/Group 1.png"
/>
<p>
Have your website ready to deploy, whether it be a React app,
WordPress site, ASP.NET application, or plain old HTML, CSS, and
JS.
</p>
</div>
<div class="website-box-hidden website-box shiftDown">
<h3>Deployment option 1</h3>
<h3 class="redText">Lightsail</h3>
<h8 class="blueText">Difficulty: Easy</h8>
<img
class="img-fluid center-image website-image"
src="assets/img/image 50.png"
/>
<p>
Lightsail is the easiest way to deploy a website on AWS. Simply
upload your code or pass a link to your Docker image repository.
Lightsail will then provide you a link to access your public
site online. The
<a
class="footer-link"
target="_blank"
href="https://store.osuapp.club"
>OSU App Store</a
>
was deployed using this method.
</p>
</div>
</div>
<div class="website-column-layout">
<div class="website-box-hidden website-box">
<h3>Deployment option 2</h3>
<h3 class="redText">Amplify</h3>
<h8 class="blueText">Difficulty: Easy</h8>
<img
class="img-fluid center-image website-image"
src="assets/img/image 51.png"
/>
<p>
Amplify is another easy way to deploy a website on AWS. Simply
upload your code or pass a link to your GitHub repository
containing your code. Amplify will then provide you a link to
access your public site online. Amplify also makes it easy to
extend your site’s functionality by combining with login, API,
and database resources.
</p>
</div>
<div class="website-box-hidden website-box shiftDown">
<h3>Deployment option 3</h3>
<h3 class="redText">S3</h3>
<h8 class="blueText">Difficulty: Moderate</h8>
<img
class="img-fluid center-image website-image"
src="assets/img/image 52.png"
/>
<p>
S3 is a basically like Google Drive where you can upload your
static files to. This method is best suited for simple HTML,
CSS, and JS files. Once you upload your files, S3 will provide
you a link to access them publicly on the web. You can
optionally add a content delivery network like Cloudfront in
front of your URL for localized caching of web content. This
simply reduces the number of direct calls to your S3 content
because they are fetched from the Cloudfront cache instead.
</p>
</div>
</div>
<div class="website-column-layout">
<div class="website-box-hidden website-box">
<h3>Elastic Beanstalk vs Elastic Container Service</h3>
<h8 class="blueText">
Elastic Beanstalk Difficulty: Semi Advanced
</h8>
<br />
<h8 class="blueText">
Elastic Container Service Difficulty: Advanced
</h8>
<img
class="img-fluid center-image website-image"
src="assets/img/image 53.png"
/>
<p>
Deployment options 4 and 5 can be deployed using either Elastic
Beanstalk or Elastic Container Service. The only difference
between the two is that Elastic Beanstalk provides an easy to
use interface for deploying an Elastic Container Service under
the hood. Some options may also not be available if using
Elastic Beanstalk. If you want to get fine grain control over
your site’s architecture, use Elastic Container Service. Both
services allow you to spin up one or more copies of your site
across several servers. You provide a link to the Docker image
of your website code and it’ll run a copy of it on each server.
The amount of servers running can be be automatically scaled by
an auto-scaling group which detects the amount of traffic to
your site and compares it to the current CPU and memory from the
servers available. If there’s too much traffic and not enough
CPU or memory from the current servers, it’ll automatically spin
up more servers to meet the demand. Lastly a load balancer will
provide you a URL to visit your site and it will evenly
distribute traffic across your servers.
</p>
</div>
<div class="website-box-hidden website-box shiftDown">
<h3>Deployment option 4</h3>
<h3 class="redText">Fargate</h3>
<h8 class="blueText">Difficulty: Advanced</h8>
<img
class="img-fluid center-image website-image"
src="assets/img/image 54.png"
/>
<p>
Fargate allows you to deploy servers on the cloud without the
hassle of managing them. This means they won’t show up as
traditional EC2 servers nor will they officially show up in your
account since they are actually managed by AWS. This makes
deploying easier since management of servers are handled by AWS.
You can only select a predefined server type and it will be used
for running your website code.
</p>
</div>
</div>
<div class="website-column-layout">
<div class="website-box-hidden website-box">
<h3>Deployment option 5</h3>
<h3 class="redText">EC2</h3>
<h8 class="blueText">Difficulty: Advanced</h8>
<img
class="img-fluid center-image website-image"
src="assets/img/image 55.png"
/>
<p>
EC2 is the traditional way of deploying servers. These servers
will show up under your account as they are managed by you. You
have more control over the specifics of your servers such as the
security permissions they have as well as the virtual cloud
network they can be attached to. You also have more control over
what software can be deployed onto the servers. It requires more
management and maintenance though. You can still select a
predefined server type and it will be used for running your
website code.
</p>
</div>
<div class="website-box-hidden website-box shiftDown">
<h3>Deployment option 6</h3>
<h3 class="redText">Elastic Kubernetes Service</h3>
<h8 class="blueText">Difficulty: Hard</h8>
<img
class="img-fluid center-image website-image"
src="assets/img/image 56.png"
/>
<p>
Elastic Kubernetes Service is based on the popularily used open
source Kubernetes service for container orchestration. It does
the same thing as Elastic Beanstalk and Elastic Container
Service except that AWS doesn’t provide you an interface for
managing your servers, autoscaling group, etc. Instead you get a
link to the Kubernetes Control Plane which is where you set up
your architecture and adjust settings. So if you like using
Kubernetes, you can migrate to this service fairly easily.
</p>
</div>
</div>
</div>
</section>
<section id="api" class="api">
<div class="container">
<div class="introTxt">
<h3>API</h3>
<p>
The goal of an API is to serve data requested by the user. An user
typically queries data with a given filter such as an id,
timestamp, token, etc. The server will respond back with the
requested data or something to acknowledge that the request had
been processed.
</p>
</div>
<div class="api-column-layout">
<div class="column1">
<div class="apiBox1-above"></div>
<div class="apiBox1">
<div class="apiBox1Content">
<h3>GraphQL API</h3>
<h3 class="redText">AppSync</h3>
<h8 class="blueText">Difficulty: Moderate / Advanced</h8>
<img
class="img-fluid center-image api-image"
src="assets/img/image 23.png"
/>
<p>
Another fairly new API is GraphQL. It gives the user more
flexibility with their data queries. So the user can select
the exact pieces of data they want, including relationships
to other pieces of data in a single query. AppSync can run
GraphQL for you. You simply write the queries/mutations an
user can perform and how it will map to the data sources
(e.g. Lambda function, database, or other data source). The
<a
class=""
target="_blank"
href="https://appdove.wixsite.com/club/post/fall-2022-smart-home-app-showcase"
>
Smart Home App backend
</a>
was deployed using this method.
</p>
</div>
</div>
<div class="apiBox1-below">
<img
class="img-fluid center-image cross-image"
src="assets/img/cross.png"
/>
</div>
</div>
<div class="column2">
<div class="apiBox2">
<div class="apiBox2Content">
<h3>REST API</h3>
<h3 class="redText">API Gateway</h3>
<h8 class="blueText">Difficulty: Moderate</h8>
<img
class="img-fluid center-image api-image"
src="assets/img/image 22.png"
/>
<p>
The most common type of API is REST. You typically perform
create, read, update, and delete operations which are POST,
GET, PUT, and DELETE, respectively. You can use an API
Gateway as an entry point to your API code. It’ll map out
all the different paths and methods for you and you can
either have one Lambda function for each path/method or one
Lambda function to handle them all. The Lambda function will
simply run your code, and so you choose what you want to do
with the input request. API Gateway will provide you with a
public url to use.
</p>
</div>
</div>
<div class="apiBox3">
<div class="apiBox3Content">
<h3>Manual Way</h3>
<h3 class="redText">Elastic Beanstalk, ECS, EKS</h3>
<h8 class="blueText">Difficulty: Advanced</h8>
<img
class="img-fluid center-image api-image"
src="assets/img/image 24.png"
/>
<p>
Of course it is also possible to use Elastic Beanstalk,
Elastic Container Service, or Elastic Kubernetes Service to
host any API. This is the most flexible, but also tedious
solution, to getting the job done. You simply package your
API code in a Docker image and deploy it to one of the three
methods just like a website.
</p>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="data-storage" class="data-storage">
<div class="container whiteBackground">
<div class="introTxt">
<h3>Data Storage</h3>
<p>
There are several options for storing data. The following are a
selection of some of the most commonly used databases as well as
some unique use cases.
</p>
</div>
<div class="data-storage-column-layout data-storage-row1">
<div
class="data-storage-box-hidden data-storage-box data-storage-outside-column"
>
<h3 class="centerTextHorizontally">S3</h3>
<img
class="img-fluid center-image data-storage-image"
src="assets/img/image 25.png"
/>
<p>
S3 or simple storage service is like Google Drive. You can
upload all sorts of files you want here whether they be static
website files, transaction records, logs, temporary file
storage, machine learning input/output data, etc.
</p>
</div>
<div class="data-storage-box-hidden data-storage-box">
<h3 class="centerTextHorizontally">RDS</h3>
<img
class="img-fluid center-image data-storage-image"
src="assets/img/image 29.png"
/>
<p>
RDS or relational database service is a solution for hosting
database systems like MySQL, SQL Server, or PostgresSQL. You
always store data in a relational format which means data from
one table should relate to data in another table. The format of
data in each column is very strict and the data you insert must
adhere to the data formats that you specify. RDS is
traditionally a server option which means you specify the number
of servers you need and what type you need. However, there is
currently a preview option for hosting MySQL RDS in serverless
mode as of December 2022.
</p>
</div>
<div
class="data-storage-box-hidden data-storage-box data-storage-outside-column"
>
<h3 class="centerTextHorizontally">DynamoDB</h3>
<img
class="img-fluid center-image data-storage-image"
src="assets/img/image 26.png"
/>
<p>
DynamoDB is an easy to use database for setting up relational or
non-relational data. You typically store records in a table like
format and each record can store an arbitrary amount of data in
columnar format. You can relate data in different DynamoDB
tables by storing id references in each record (e.g. book table
has a column called owner which contains the id of a person in
the person table). It is a serverless service which means you
don’t manage any servers.
</p>
</div>
</div>
<div class="data-storage-column-layout data-storage-row2">
<div
class="data-storage-box-hidden data-storage-box data-storage-outside-column"
>
<h3 class="centerTextHorizontally">DocumentDB</h3>
<img
class="img-fluid center-image data-storage-image"
src="assets/img/image 28.png"
/>
<p>
MongoDB is one of the most popular software for storing data in
a document form. It is quite similar to DynamoDB in which you
can choose to have data stored in relational or non-relational
format. However, the data is structures more like JSON and not
so much as a table. You can host a MongoDB cluster using
DocumentDB by AWS.
</p>
</div>
<div class="data-storage-box-hidden data-storage-box">
<h3 class="centerTextHorizontally">Timestream</h3>
<img
class="img-fluid center-image data-storage-image"
src="assets/img/image 30.png"
/>
<p>
Timestream is a unique type of database for store data
sequentially in time. You might store weather forecasts or IoT
data here as data is aggregated over time. It is built for this
special case. However, it it still possible to use previously
mentioned database methods for storing data in sequences of
time. This database method simply provides a direct method for
solving such a problem.
</p>
</div>
<div
class="data-storage-box-hidden data-storage-box data-storage-outside-column"
>
<h3 class="centerTextHorizontally">QLDB</h3>
<img
class="img-fluid center-image data-storage-image"
src="assets/img/image 31.png"
/>
<p>
QLDB or quantum ledger database is a blockchain type of
database. It allows you to store data on a blockchain which
basically stores your data sequentially (the last record added
is the last item on the block “chain”), acting as a ledger. This
blockchain can be kept private and doesn’t have a relationship
with cryptocurrency.
</p>
</div>
</div>
</div>
</section>
<section id="data-pipelines" class="data-pipelines">
<div class="container whiteBackground">
<div class="introTxt">
<h3>Data Pipelines</h3>
<p>
Data pipelines are commonly used to get data from one or more
sources to one or more destinations. They can also act as buffers
between sources and destinations in case the data flow has too
much ongoing traffic of a destination fails to process a message.
You can also chain multiple data pipelines together with
intermediate steps in between. For example, you can fetch data
from one pipelines, perform analytics on the data, and send the
output to another data pipeline.
</p>
</div>
<div class="data-pipelines-row-layout">
<div
class="data-pipelines-column-layout data-pipelines-box-marginRow1"
>
<div class="data-pipelines-box-hidden data-pipelines-box">
<h3 class="centerTextHorizontally">Kinesis Data Streams</h3>
<img
class="img-fluid center-image data-pipelines-image"
src="assets/img/image 33.png"
/>
<p>
Kinesis Data Streams is a way to pass data from one or more
producers (generates data) to one or more consumers (processes
data). Data can optionally be stored on a stream for up to a
year before being discarded. Typically consumers will have to
poll for the data. Each time you poll for data, you can either
fetch the last record that was added, the first record that
was added, or your last cursor position (this is the last
record you looked at) and then go from there.
</p>
</div>
</div>
<div
class="data-pipelines-column-layout data-pipelines-box-marginRow2"
>
<div class="data-pipelines-box-hidden data-pipelines-box">
<h3 class="centerTextHorizontally">Kinesis Firehose</h3>
<img
class="img-fluid center-image data-pipelines-image"
src="assets/img/image 40.png"
/>
<p>
Kinesis Firehose will aggregate all data it ingests from a one
or more producers over a period of time (e.g. one minute) or
if a buffer has exceed its maximum capacity (e.g. 1GB data
collected). After either criteria has expired, then all the
data aggregated will be sent out of the data pipeline to its
next destination in a single action. Data does not get stored
on the pipeline.
</p>
</div>
<div class="data-pipelines-box-hidden data-pipelines-box">
<h3 class="centerTextHorizontally">MSK</h3>
<img
class="img-fluid center-image data-pipelines-image"
src="assets/img/image 41.png"
/>
<p>
MSK or managed service for Kafka is a service for hosting
Kafka data pipelines. Kafka is one of the most popular open
source data pipeline. It pretty much does the same thing as
Kinesis Data streams except it allows for more fine grain
control over you data pipelines, typically for more advanced
DevOps developers.
</p>
</div>
</div>
<div
class="data-pipelines-column-layout data-pipelines-box-marginRow3"
>
<div class="data-pipelines-box-hidden data-pipelines-box">
<h3 class="centerTextHorizontally">Event Bridge</h3>
<img
class="img-fluid center-image data-pipelines-image"
src="assets/img/image 42.png"
/>
<p>
Event Bridge is typically used for internal use between
different AWS services. As the name implies, the data pipeline
from a source to a destination is event driven, meaning that
as a source generates data, it’ll trigger the pipeline and
notify the destinations of newly arrived data. Event Bridge
also provides schedulers to automatically send destinations
pieces of data based on a set schedule. Data does not get
stored on the pipeline.
</p>
</div>
<div class="data-pipelines-box-hidden data-pipelines-box">
<h3 class="centerTextHorizontally">SNS</h3>
<img
class="img-fluid center-image data-pipelines-image"
src="assets/img/image 43.png"
/>
<p>
As the logo implies, SNS, or simple notification service, gets
data from one source and notifies one or more data sources of
the new data. SNS can be used to trigger other AWS services or
send out notifications through mailing services like AWS
simple email service or phone SMS texts. Data does not get
stored on the pipeline.
</p>
</div>
</div>
<div
class="data-pipelines-column-layout data-pipelines-box-marginRow4"
>
<div class="data-pipelines-box-hidden data-pipelines-box">
<h3 class="centerTextHorizontally">SQS</h3>
<img
class="img-fluid center-image data-pipelines-image"
src="assets/img/image 45.png"
/>
<p>
SQS or simple queue service simply send data from one source
to another. As the name implies, data is written/read off a
queue which is typically processed in FIFO (first in first
out) format. It can act as a buffer in case the destination is
not ready to process the data yet or it can preserve data
should the destination fail to process the data. Data will be
stored on the pipeline until it expires after a set amount of
days (means the destination did not process the message).
Consumers will have to poll data off an SQS data pipeline in
order to read it.
</p>
</div>
</div>
<div
class="data-pipelines-column-layout data-pipelines-box-marginRow5"
>
<div class="data-pipelines-box-hidden data-pipelines-box">
<h3 class="centerTextHorizontally">Step Functions</h3>
<img
class="img-fluid center-image data-pipelines-image"
src="assets/img/image 44.png"
/>
<p>
Step Functions are an easy way to build an end-to-end data
pipeline solution. For example, you can place a Lambda and
connect the output to the input of another Lambda function.
The second Lambda’s output can then trigger a DynamoDB write
operation. AWS has a drag and drop interface for building out
this entire pipelines like this.
</p>
</div>
</div>
</div>
</div>
</section>
<section id="authentication" class="authentication">
<div class="container">
<div class="introTxt">
<h3>Authentication</h3>
<p>
Authentication is important in order to ensure the privacy and
integrity of an user’s data. Below is a common architecture for
adding authentication to a REST API, using Firebase as the login
mechanism.
</p>
</div>
<div class="authentication-column-layout">
<div class="authentication-box">
<h3>Common Authentication Example</h3>
<h3 class="redText">REST API Authentication with Firebase</h3>
<h8 class="blueText">Difficulty: Semi Advanced</h8>
<img
class="img-fluid authentication-image"
src="assets/img/image 59.png"
/>
</div>
<div class="authentication-col2">
<ol>
<h3>Steps</h3>
<li>
An user logs into the app and sends a request for private
data.
</li>
<li>The app passes the user login credentials to Firebase.</li>
<li>
Firebase returns back a JWT token that can be used for
authentication. This token contains some user metadata such as
their user id.
</li>
<li>
An HTTPS request is sent over the internet to API Gateway with
Firebase token in authorization header.
</li>
<li>
API Gateway passes the authorization token to the Lambda
authorizer.
</li>
<li>
The Lambda authorizer will validate the token against
Firebase.
</li>
<li>
Firebase returns a success or error message depending on
whether the token was valid.
</li>
<li>
The Lambda authorizer will notify API Gateway whether the
authentication succeeded or failed.
</li>
<li>
If the Lambda authorizer succeeded, then the API’s Lambda
function will be invoked.
</li>
<li>
The API code will handle the user’s request and return back
the requested private data for the specific user.
</li>
</ol>
</div>
</div>
</div>
</section>
<footer class="footer">
<div class="container footer-content-parent">
<!-- copyright centered -->
<div class="row footer-content">
<div class="col-md-12">
<p class="text-center whiteBackground">
©2022
<a
class="footer-link"
target="_blank"
href="https://osuapp.club"
>OSU App Development Club</a
>
</p>
</div>
</div>
</div>
</footer>
</div>
</body>
<script src="assets/js/index.js"></script>
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
</html>