Create a DynamoDB Table
为了构建笔记应用程序的后端,我们首先考虑如何存储数据,我们将使用 DynamoDB来执行此操作。
About DynamoDB
To get a better feel for it, here is a great guide on DynamoDB
Create Table
-
登录 AWS Console 并选择 DynamoDB 服务。
-
选择创建表。
-
输入表名 notes 和主键 userId,确保
userId
和noteId
处于驼峰状态。
DynamoDB
每一个 DynamoDB 表都有一个主键,并且设置后不能更改。逐渐是表中每一个 项目的唯一标识。DynamoDB 支持两种不同种类的主键:- Partition key 分区键
- Partition key and sort key (composite) 分区键和排序键(复合)
我们将使用复合主键,这为查询数据时提供了额外的灵活性。例如,如果只提供userId
,将获取该用户下的所有笔记;如果提供了userId
和noteId
,将获取到指定的笔记。
-
取消勾选使用默认设置
db2
-
选择 New role: DynamoDBAutoscaleRole,然后点击“创建”。否则,只需确保选中使用默认设置,然后选择创建。
请注意,默认设置规定5次读取和5次写入。在创建表格时,您可以指定要为读取和写入预留多少预配置吞吐量。DynamoDB将保留必要的资源以满足您的吞吐量需求,同时确保一致的低延迟性能。一个读取容量单位可以读取每秒8 KB,一个写入容量单位可以每秒写入1 KB。您可以更改预配置的吞吐量设置,根据需要增加或减少容量。
该notes表现在已经创建。如果发现自己陷入正在创建的消息表中 ; 手动刷新页面。

接下来,我们将设置一个S3存储桶来处理文件上传。
Create an S3 Bucket for File Uploads
既然准备好了数据库和表,就让我们来处理文件上传吧,我们需要处理文件上传,因为每个便笺可以有上传的文件作为附件。
Amazon S3 (Simple Storage Service) 通过类似 REST 的网页服务接口提供存储服务。可以在 S3 中存储包含图像、视频、文件等任何对象。并通过唯一的用户密钥在 buckets 中管理。
本节我们创建用户存储文件的 S3 bucket 。
Create Bucket
首先,登录 AWS Console 并选择 S3 服务。

选择 Create Bucket





Enable CORS
在我们将要构建的笔记应用程序中,用户将上传文件到我们刚刚创建的存储桶中。而且,由于我们的应用将通过我们的自定义域进行投放,因此它会在上传时跨域进行通信。默认情况下,S3不允许从不同的域访问其资源。但是,跨源资源共享(CORS)为在一个域中加载的客户端Web应用程序与另一个域中的资源进行交互定义了一种方法。让我们为我们的S3存储桶启用CORS。
选择我们刚创建的存储桶。

选择Permissions选项卡,然后选择CORS配置。

将以下CORS配置添加到编辑器中,然后点击保存。
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

现在我们的S3存储桶已准备就绪,让我们来设置处理用户认证。
Create a Cognito User Pool
我们的笔记应用需要以安全可靠的方式处理用户帐户和身份验证。为此,我们将使用Amazon Cognito。
Amazon Cognito用户池使开发人员可以轻松地为网络和移动应用程序添加注册和登录功能。它作为您自己的身份提供者来维护用户目录。它支持用户注册和登录,以及为登录用户提供身份令牌。
在本章中,我们将为笔记应用程序创建一个用户池。
Create User Pool
从AWS控制台中,从服务列表中选择Cognito。




并选择电子邮件地址或电话号码并允许电子邮件地址。这告诉Cognito用户池,我们希望我们的用户能够注册并使用他们的电子邮件作为用户名登录。




您的用户池已创建。记下将在稍后需要的池ID和池ARN。另外,请注意您的用户池创建的区域 - 在我们的情况下是这样us-east-1。

Create App Client
从左侧面板中选择应用程序客户端。


输入应用程序客户端名称,取消选择生成客户端密钥,选择启用登录API以进行基于服务器的身份验证,然后选择创建应用程序客户端。
- 生成客户机密钥:JavaScript SDK不支持具有客户机密钥的用户池应用程序。我们需要取消选择该选项。
-
为基于服务器的身份验证启用登录API:当通过命令行界面管理池用户时,AWS CLI需要此API。我们将在下一章中通过命令行界面创建一个测试用户。
Create Domain Name

现在我们的Cognito用户池已准备就绪。它将为我们的笔记应用保留一个用户目录。它也将用于认证访问我们的API。接下来让我们在池中设置一个测试用户。
网友评论