云计算-云基础设施的配置 (Provisioning Cloud Infrastructure)

AWS CloudFormation (AWS CloudFormation)

它是一项服务,允许我们自动建模和配置所需的AWS资源。可以使用模板来实现这一目的。这个模板基本上是用JSON或YAML格式编写的。AWS CloudFormation会根据模板描述的内容来实施资源的配置和管理。我们可以成组配置和管理一组资源,而无需单独创建这些资源。多个资源的配置由AWS CloudFormation处理。AWS CloudFormation的两个关键组件是:

  1. 模板 (Template)
  2. 栈 (Stack)

模板可以用扩展名为.json、.yaml、.template或.txt的JSON或YAML格式编写。通过这个模板,我们可以创建和管理称为栈的一组AWS资源。我们可以通过创建、更新和删除栈来创建、更新和删除一组资源。栈中的资源由相应的模板定义。

配置S3桶 (Provisioning an S3 Bucket)

我们现在将使用最简单版本的模板来创建一个名为'cloudformationbucket'的S3桶。我们需要在CloudFormation中创建一个新栈时上传此模板。模板可以包含多个参数,包括(但不限于):AWSTemplateFormatVersion、Description、Metadata、Parameters、Mappings、Conditions、Resources、Outputs、Type。下面的JSON示例仅使用了'Resources'、'Type'和'DeletionPolicy'。'DeletionPolicy'属性允许删除桶。

{
    "Resources": {
        "cloudformationbucket" : {
            "Type": "AWS::S3::Bucket",
            "DeletionPolicy": "Delete"    
        }
    }
}

我们将这个脚本保存到一个名为first_template.txt的文本文件中。此文本文件将作为模板使用。将此模板文件上传到S3桶并复制URL。现在我们将按照以下步骤操作:

  1. 从AWS管理控制台打开CloudFormation控制台,搜索相应术语。在CloudFormation控制台中,点击右上角的'Create Stack'按钮。选择'With new resources (Standard)'选项。
  2. 在下一个屏幕中,为Prepare template选择'Template is ready',因为我们已经在文本文件中准备好了JSON规范。然后选择'Amazon S3 URL'作为模板来源。然后添加复制的URL。点击'Next'。
  3. 在下一个屏幕中,给桶名作为'Stack name',例如"create-s3-bucket-stack"。点击'Next'。
  4. 在'Configure stack option'屏幕中,保持所有内容不变。特别是,"Stack failure options"应为"Roll back all stack resources"。
  5. 点击"Next"将进入审核页面。在审核页面中,点击'Create stack'。一个新栈现在将出现在CloudFormation仪表板中。这可能需要几分钟。该模板将创建两个新的S3桶:一个是模板中指定的;另一个是用于存储模板本身的。我们可以'更新'和'删除'这个栈。

你现在可以在S3控制台中查看新创建的桶。桶的名称将包含我们在模板中指定的"cloudformationbucket"字样。桶名将类似于:"create-s3-bucket-stack-cloudformationbucket-1s27nvodenpa3"。这是因为我们在模板中指定的名称(即"cloudformationbucket")是"逻辑名",而不是"物理名"。

现在按照相同的步骤使用附加的first_template.txt。记住,任何模板必须至少包含一个资源。

手动更新模板 (Updating Template Manually)

在上一节中,我们看到了如何使用CloudFormation创建一个桶。让我们分析下面的模板。模板中有一个逻辑名为"S3Bucket"的资源(已突出显示)。除此之外,下面的模板包含资源类型(S3桶)、删除策略(当前禁用)和属性。目前提供的一个属性是桶的web资源(索引文件和错误文件)。

{ 
    "Resources": {
        "cloudformationbucket": {
            "Type": "AWS::S3::Bucket",
            "DeletionPolicy": "Delete",
            "Properties": {
                "WebsiteConfiguration": {
                  "IndexDocument": "index.html",  
                  "ErrorDocument": "error.html"
                }
            }
        }
    }
}

这是额外的信息,我们需要更新现有的模板。栈模板可以通过两种方式更新 -(1)手动,(2)使用变更集。

在手动更新中,可以打开模板并在设计器中更改,保存到本地(或S3)。变更集允许更改现有模板并'创建栈'。一旦变更集完成,我们可以'执行'变更集,变更将生效。请参阅以下链接以获取详细信息。

步骤1 - 手动修改和保存栈模板 (Step 1 - Modifying and saving stack template manually)

让我们对现有模板进行一个简单的更改,更改桶的名称。请参考此链接以获取详细信息:

Modifying a stack template - AWS CloudFormation

更改桶的逻辑名相当于删除当前桶并使用新桶名创建一个新桶。

从列表中点击栈。然后点击'Template'选项卡。然后点击'View in Designer'按钮。我们将看到如下页面。

在设计器视图中,我们可以对模板进行必要的更改,验证它(重要步骤),并使用'Save'选项将其保存(本地或S3)。在此示例中,我们只是将桶名称更改为'cf-bucket'。请注意,当前模板尚未修改,这个保存的模板将用于稍后更新当前模板。

现在我们将添加一些额外的代码来更改删除策略和桶的名称。你需要确保(物理)桶名不存在,否则你将收到更新错误。我们需要添加的额外代码如下所示。你可以使用你自己的SCU用户名进行测试。

            "Properties": {
                "WebsiteConfiguration": {
                  "IndexDocument": "index.html",  
                  "ErrorDocument": "error.html"
                }
            }

它在模板设计器中的样子如下。

然后我们通过点击设计器页面顶部栏的"Validate template"按钮验证模板。

我们进入文件菜单并点击"Save"。将模板保存为"second_template.txt"。然后将此模板上传到我们的S3桶并复制URL。

步骤2 - 使用新模板更新栈 (Step 2 -- Update the stack with the new template)

选择栈并点击'Update'。然后用保存的模板文件(从步骤1)替换模板。按照下面的屏幕步骤操作。点击'Next'和'Update stack'按钮。它需要几分钟,然后刷新你的浏览器。在S3中查看桶名是否已更改。

点击"Next"进行接下来的几个审核页面,最后点击页面底部的"Update stack"按钮。它将更新栈。

我们的S3桶名称将被更改。

你可以使用second_template.txt进行测试,但在尝试之前更改物理桶名(使用唯一名称),否则你将收到更新错误,提示"bucket already exists"。

使用变更集更新模板 (Updating Template using Change Set)

可以使用变更集更新栈,在这种情况下,我们使用变更集替换模板而不是立即更新它。我们可以安排变更集在以后执行。

Updating stacks using change sets - AWS CloudFormation

我们将做一个简单的练习,我们将再次更改桶名,使用以下模板,third_template.txt。此模板应上传到S3桶并复制URL。

{ 
    "Resources": {
        "cloudformationbucket": {
            "Type": "AWS::S3::Bucket",
            "DeletionPolicy": "Delete",
            "Properties": {
                "WebsiteConfiguration": {
                  "IndexDocument": "index.html",  
                  "ErrorDocument": "invalid.html"
                }
            }
        }
    }
}
  1. 点击栈并从"Stack actions"列表中选择"Create change set for current stack"。

  2. 在下一页中选择"Replace the template"并提供上传模板的URL。

  3. 点击几次以审查变更集,在最终页面点击"Create change set"按钮。

  4. 弹出一个对话框,可以为变更集提供一个名称,最后点击"Create change set"按钮。一旦创建,变更集将如下所示。

  5. 现在我们可以选择刚刚创建的变更集并点击"Execute"按钮。弹出一个关于回滚的提示,保持默认选项。点击"Execute change set"按钮。

相关推荐
yngsqq5 分钟前
一键打断线(根据相交点打断)——CAD c# 二次开发
windows·microsoft·c#
吃杠碰小鸡29 分钟前
lodash常用函数
前端·javascript
emoji11111138 分钟前
前端对页面数据进行缓存
开发语言·前端·javascript
泰伦闲鱼41 分钟前
nestjs:GET REQUEST 缓存问题
服务器·前端·缓存·node.js·nestjs
m0_748250031 小时前
Web 第一次作业 初探html 使用VSCode工具开发
前端·html
一个处女座的程序猿O(∩_∩)O1 小时前
vue3 如何使用 mounted
前端·javascript·vue.js
m0_748235951 小时前
web复习(三)
前端
AiFlutter1 小时前
Flutter-底部分享弹窗(showModalBottomSheet)
java·前端·flutter
麦兜*1 小时前
轮播图带详情插件、uniApp插件
前端·javascript·uni-app·vue
陈大爷(有低保)1 小时前
uniapp小案例---趣味打字坤
前端·javascript·vue.js