部署 AWS CLI 和 CloudFormation 用于基础设施

在物理服务器的黑暗时代,基础设施是通过螺丝刀和电缆在潮湿的地下室中进行配置的。当公共云解决方案开始取代本地基础设施成为配置和运行服务器的首选方式时,这些黑暗时代变得较为明亮。在这篇博客文章中,了解如何使用AWS CLI和CloudFormation部署云解决方案。

这是Karl Eriksson的客座文章,他是Mocki的联合创始人 – 一种让您在几分钟内创建模拟API的工具

如果您为应用程序运行一个环境,那么您可以通过图形用户界面(GUI)如AWS控制台轻松管理事务。但是,当您拥有多个环境,如开发、演练和生产时,事情变得更加困难。人为错误和时间会加入其中。AWS CLI和CloudFormation可以提供帮助。

您需要将基础设施视为代码进行管理。在AWS世界中,使用CloudFormation堆栈来实现这一点。

当首次部署CloudFormation堆栈时,AWS将从头开始创建一切。如果将堆栈部署为更新,则它将检测基础设施的任何更改并仅部署这些更改。

CloudFormation堆栈确保相同的更改应用于您的不同环境。

CloudFormation:AWS基础设施即代码

AWS Infrastructure as Code Source: https://aws.amazon.com/cloudformation/

AWS CloudFormation是一种在AWS环境中编写和配置基础架构的工具。CloudFormation支持AWS的大多数服务。您可以使用AWS控制台创建的大多数内容,如虚拟服务器、数据库、负载均衡器和文件存储,都可以添加到CloudFormation堆栈中。一旦添加,所有这些资源都可以通过命令行或其他自动化流程部署。

在更新方面,CloudFormation确保操作以最高效的方式执行,并且如果出现问题,甚至会自动回滚更改。

现在让我们学习如何使用AWS CLI和CloudFormation创建基础架构。

先决条件

在本文的其余部分中学习CloudFormation教程之前,请确保您具有以下内容:

  • 一个AWS账户
  • AWS CLI – 学习如何下载和设置 此处。您可以通过运行aws s3 ls来确认CLI是否设置成功。如果命令成功返回,则一切正常。

如果您通过AWS CLI配置了多个AWS配置文件,请使用适用于开发或测试目的的配置文件在本教程中使用。

创建您的第一个CloudFormation堆栈

足够的背景信息,让我们开始使用AWS CLI和CloudFormation创建一个堆栈!

在本示例中,您将创建一个包含部署在静态文件托管服务AWS S3上的静态网站所需基础架构的堆栈。

要开始,请创建一个名为template.yaml的新文件,并使用以下内容填充:

AWSTemplateFormatVersion: 2010-09-09
Description: A simple CloudFormation template
Resources:
    Bucket:
        Type: AWS::S3::Bucket
        Properties:
            BucketName: your-bucket-name # 使用您自己的唯一名称
  • AWSTemplateFormatVersion 确定模板的格式版本,以便AWS在部署时能够正确解释它。
  • Description – 包含模板的描述,在您部署它后将显示在AWS控制台中。
  • Resources – 包含您添加到模板的所有基础架构。在这种情况下,资源将创建一个简单的S3存储桶,用于托管静态站点。

BucketName属性必须是唯一的,因此请尽量使用与您的存储桶名称不同的名称。

部署使用AWS CLI和CloudFormation的堆栈

现在您已经创建了一个用于部署的简单模板,请使用以下命令将其部署到AWS,使用AWS CLI和CloudFormation:

aws cloudformation deploy --template-file template.yaml --stack-name static-website

运行命令后,转到AWS控制台,然后转到服务 → CloudFormation。然后,您应该看到正在运行的部署。几分钟后,您应该看到它进入CREATE_COMPLETE状态。如果是这样,就表示完成了!

如果有任何错误,您应该能够在查看堆栈详细信息时在“事件”部分看到它们。

通过导航到服务S3,您现在应该看到一个全新的S3存储桶已经创建。

构建简单的网站

一旦您有了一个用于存储网站的S3存储桶,请创建一个index.html文件作为站点。

如果您没有自己的想法,您可以在index.html文件中使用以下内容:

<html>
  <body>
    <h1>Static Site Deployed Using CloudFormation</h1>
    <p>Hello! This site was deployed using CloudFormation. Go cloud!</p>
  </body>
</html>

保存index.html文件并通过AWS控制台将其上传到您的S3存储桶

确保给予索引文件公共读取访问权限,因为它将对访问站点的所有人可见。

更新模板

现在,刚刚创建的S3存储桶未配置为托管网站。让我们更改这一点。您目前可以通过AWS控制台下载索引文件,但无法通过公共互联网访问。使用AWS CLI和CloudFormation,更改配置以启用静态网站托管。

修改template.yaml文件如下以启用它。以下是我们在模板中引入的一些新属性。

AWSTemplateFormatVersion: 2010-09-09
Description: A simple CloudFormation template
Resources:
    Bucket:
        Type: AWS::S3::Bucket
        Properties:
            BucketName: your-bucket-name # 使用您自己的独特名称
            AccessControl: PublicRead
            WebsiteConfiguration:
                IndexDocument: index.html
Outputs:
    WebsiteURL:
        Value: !GetAtt [Bucket, WebsiteURL]
        Description: URL for website hosted on S3
  • AccessControl – 将S3存储桶的访问权限设置为公共读取,以便任何访问站点的用户都可以查看index.html文件
  • WebsiteConfiguration – 配置S3存储桶以充当网站,将在用户访问存储桶URL时提供index.html文件
  • Outputs – 可以是堆栈中部分资源的不同属性。在上面的示例中,WebsiteURL是堆栈输出。再次部署模板时,您应该在AWS CloudFormation控制台中的输出中看到网站URL。

现在使用与上一步相同的命令将更改部署到现有堆栈中:

aws cloudformation deploy --template-file template.yaml --stack-name static-website

要确认结果,请转到CloudFormation控制台。几分钟后,您应该注意到堆栈处于UPDATE_COMPLETE状态。当堆栈进入此状态时,转到输出选项卡,在那里您应该看到WebsiteUrl已添加为模板的输出。

点击提供的URL,您应该在浏览器中看到您的站点。

恭喜!通过AWS CLI和CloudFormation,您现在已经使用基础架构即代码部署了您的第一个堆栈!在此时,继续根据您的需求向模板文件添加内容以部署新更改或创建新的模板。

结论

在本教程中,您已经了解了基础架构即代码的概念以及它相对于手动配置基础架构的优势。然后,使用AWS CLI和CloudFormation的基础架构即代码方法,您部署了一个堆栈以创建静态网站。

使用本教程中学到的原则,您可以完全使用CloudFormation部署一个可投入生产的系统。

进一步阅读

如果您想更多地了解基础架构即代码作为一种现象,请查看HashiCorp的《实战中的基础架构即代码》

如果您想了解如何将CloudFormation集成到您的开发流程中并使用CloudFormation管理所有基础架构的更多信息,请务必查看:

祝您在使用AWS基础设施即代码部署所有基础设施的旅程中好运!

Source:
https://adamtheautomator.com/aws-cli-and-cloudformation/