亚马逊S3(Amazon S3)
亚马逊S3是一种云对象存储设施。我们将使用的对象将是您在个人计算机上常用的文件。亚马逊S3产品旨在可扩展到实际无限数量的对象和无限大小的对象,但我们在本实验室的练习中只会使用少量对象。当存储许多对象时,您应该思考可能出现的问题,因为这将解释亚马逊做出的一些设计决策以及您将看到的许多S3存储管理产品。我们将在与本单元相关的主题中详细描述其中的一些产品和其他云提供商的等效产品。
创建S3桶
我们可以从AWS管理控制台搜索“S3”。
然后,我们进入S3首页,然后我们必须创建一个桶。一个亚马逊S3桶是在亚马逊S3中可以通过全球唯一标识符访问的单一存储区域。桶开始是空的,但可以无限添加(所以要小心你的代码)。亚马逊根据您桶中使用的存储量以及访问频率收费。如果您的程序在无限循环中失控,您可能会超出分配的信用额度。
我们将使用AWS管理控制台创建桶,尽管它也可以通过编程方式完成。当我们运行控制台并选择S3产品时,将出现S3管理控制台屏幕。如下所示,它有一个“创建桶”按钮。
当我们点击“创建桶”按钮时,将显示以下对话框。在这个示例中,已经填写了桶的名称和亚马逊区域。我们通常将其他字段保留为默认选项。
一旦给出桶名称,我们最终点击“创建桶”按钮完成桶创建过程。
关于此处输入的数据有两个非常重要的事项:
- 桶名称必须跨亚马逊云中的所有桶唯一。这意味着您不能使用世界上其他地方正在使用的桶名称。这里使用的桶名称可以作为如何找到唯一桶名称的想法,但您不能使用这个名称,因为该桶已为本单元创建。
- 如果您使用的是亚马逊教育账户,您必须从区域列表中选择“美国东部(北弗吉尼亚)”区域。如果您有自己的账户,那么您可以选择任何区域。
对于加密和桶密钥,我们保持默认选择。表格将为您提供所需格式的提示。您会在“桶名称”字段下面看到一个“查看桶命名规则”的链接。点击此链接可了解更多关于形成桶名称的信息。
一旦您完成这两个字段(忽略复制设置字段),您就可以点击创建按钮来创建您的桶。不用担心您的第一个桶的“下一步”按钮。它提供了各种桶选项,如加密、压缩和存储类型。您的第一个桶应使用默认设置。
一旦创建了桶,您将不得不关闭对话屏幕,然后您将返回到S3控制台屏幕,但这次您的桶将列在表格中。在上面的示例中,屏幕将显示如下:
当您将鼠标光标悬停在桶上时,您会看到您可以选择桶。
向桶中添加对象
在这一节中,我们将使用AWS管理控制台向S3桶中添加一些文件。我们可以从主S3控制台屏幕通过点击桶列表中的桶名称来进行操作,如上一节中的前一个示例所示。
一旦我们点击空桶的桶名称,以下屏幕将出现。
桶名称在您的桶中将显示为您赋予的唯一名称。然后我们点击“上传”按钮,将出现一个对话框,我们可以选择要放入桶中的文件。它将如下所示。
这里提供了两个选项,我们可以将文件拖放到对话框中,或者我们可以点击“添加文件”按钮,将出现一个进一步的对话框,允许我们在计算机上选择文件。这个对话框将是您浏览器的文件选择对话框。
当您点击“上传”按钮时,您将看到一个进度条,显示您添加的文件正在上传到桶中。
一旦文件被添加,它们将出现在桶对象列表中。以下屏幕截图显示了在上传名为SCU.png的单个文件后的亚马逊控制台。
从屏幕上可以看到,还有几个其他选项。我们可以更改对象属性、权限并应用各种管理策略到桶中的对象。在本实验室会话中,我们将使用默认安排。
要查看所有对象的属性,我们可以使用复选框选择对象,属性窗口将出现。
请注意,这些属性与上传时作者的对象相关。您的对象将具有不同的属性,这些信息将与上传的对象一起显示。
还要注意,一旦您选择了一个或多个对象,“操作”菜单就可以访问。这将允许您操纵对象,例如删除、复制、下载和更改几个对象属性。
我们也可以像您在个人设备上使用的文件系统一样将对象组织成文件夹。您可以在上面的屏幕截图中看到“创建文件夹”按钮。我们将在下面的练习中创建一个文件夹。值得注意的是,当我们创建它们时,S3桶没有物理文件夹。这只是客户端将文件夹名称放在对象的完整标识符的开头的命名约定。通常这不会被注意到,客户端软件将表现得就像PC或其他设备上的真实文件夹一样。
使用S3桶托管网站
在前一节中,您已经看到桶非常类似于文件系统。亚马逊进一步允许我们使用桶作为静态网站。
在制作网站之前,我们需要创建一个index.html文件,它将用作配置的一部分。以下是一个非常简单的index文件(index.html)示例:
<!DOCTYPE html>
<!-- PROG2003 Lab Simple Web page -->
<html><head><title>Laboratory - Amazon S3</title></head><body><h1>Amazon S3 website</h1><p>Hello world!</p></body>
</html>
您应该很容易识别这段HTML代码。
我们还需要为亚马逊S3创建一个错误HTML文件,我们将使用以下非常简单的HTML文件,并将其命名为error.html。
<!DOCTYPE html>
<!-- PROG2003 Lab Error Web page -->
<html><head><title>ERROR - Laboratory S3 website </title></head><body><h1>An error has occurred</h1><p>The most likely cause of the error is an incorrect URL.</p><p>However, you have the correct host name to reach this website!</p></body>
</html>
我们将这两个文件上传到我们希望用作静态网站的桶中。
然后我们需要将桶配置为网站。我们在管理控制台中选择桶(见前一节),选择“属性”标签。在属性页面的底部,您将看到“静态网站托管”窗格。您可以点击“了解更多”,屏幕将显示如下图所示。
我们需要点击“编辑”按钮。这将带我们到如下页面。
然后我们启用“静态网站托管”,并且窗格将扩展如下截图所示。我们还需要指定索引文档和错误文档,这两个文件就是我们刚刚上传的index.html和error.html。假设这些是刚创建的index.html和error.html,其余屏幕将显示如下。
然后我们点击“保存更改”按钮,它将带我们回到初始桶属性页面。
我们可以看到的链接(位于“静态网站托管”窗格底部的桶名称)是我们网站的链接。但我们还没有完成。我们需要允许公共访问并添加一个策略以便访问此站点。
配置网站的访问权限
接下来,我们必须设置权限,以便其他人可以访问我们的网站。默认情况下,亚马逊S3桶和对象非常安全,除了账户所有者外,没有人能够访问对象。对于网站,我们必须更改这一设置,以允许网页被访问。
使我们的网站对每个人都可访问是一个两阶段的过程。首先,我们必须允许我们自己更改访问政策。默认情况下,即使是所有者也不能更改访问权限。这是通过选择我们将用作网站的桶的“权限”标签上的“阻止公共访问”按钮来完成的。在右上角,有一个“编辑”设置的链接。选择编辑链接后,清除所有阻止访问选项。对话框将显示如下。
当您保存您的选择时,将要求您确认权限更改。
接下来,我们必须创建公共政策,允许任何人以只读方式访问网站。当然,我们不希望其他人被允许写入我们的网站。政策可以通过点击“权限”标签上的“桶政策”部分的“编辑”按钮插入。最初将是一个空白(或一些默认脚本)文本区域。我们将使用的政策将是:
{"Version": "2008-10-17","Statement": [{"Sid": "AllowPublicRead","Effect": "Allow","Principal": {"AWS": "*"},"Action": "s3:GetObject","Resource": "arn:aws:s3:::pchakrab14-bucket-1/*"}]
}
请注意,这个政策引用了我们作为运行示例使用的桶名称。您需要插入您自己的桶名称。当我们输入这个后,屏幕将显示如下。我们点击页面底部的“保存更改”以保存政策声明。
最后一步是访问我们刚刚创建的网站。这可以通过一个URL完成,该URL是从您的桶名称和存储您的桶的亚马逊AWS区域的名称组成的唯一字符串。上述网站的索引页面可以通过以下URL访问:
http://pchakrab14-bucket-1.s3-website-us-east-1.amazonaws.com/
这里我们已经标出构成网站地址的两个唯一名称:
- pchakrab14-bucket-1是桶名称。您的将会不同。
- us-east-1是您创建桶的亚马逊区域名称。除非您拥有自己的亚马逊AWS账户,否则您的可能会不同。
当我们在网站中有其他页面或资源时,我们只需像普通web开发那样将文件名添加到URL中。然而,请注意,文件名区分大小写,而其他web服务器则不区分。区分文件名大小写是HTTP/HTTPS/URL标准的正确实现。