扩展迁移操作

任务1:脚本就是一切

背景

祝贺您的新工作!迁移负责人担心您一次处理所有这些服务器的能力。还记得前任工程师发生了什么事吗?在搜索AWS时,您发现AWS Systems Manager具有一项功能,可以跨实例组自动执行常见管理任务。这项服务看起来完全符合您的需求!

你的任务

您的任务是找到一种在每个迁移的实例上执行以下脚本的方法,而不必连接到它们中的任何一个。该文档应命名为ConfigureProxy,并且只能在linux平台上运行。

#!/bin/bash

set -e

PROXY="http://proxy.acme.aws:3128"

NOPROXY="169.254.169.254,ssm.eu-west-1.amazonaws.com,ec2.eu-west-1.amazonaws.com,ec2messages.eu-west-1.amazonaws.com"

mkdir -p /etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service.d

cat << EOF > /etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service.d/override.conf

[Service]

Environment="http_proxy=$PROXY" 

Environment="https_proxy=$PROXY"

Environment="no_proxy=$NOPROXY"

EOF

systemctl daemon-reload

systemctl restart snap.amazon-ssm-agent.amazon-ssm-agent.service

cat << EOF > /etc/apt/apt.conf.d/02proxy

Acquire {

HTTP::proxy "$PROXY";

HTTPS::proxy "$PROXY";

}

EOF

echo "Proxy configuration complete."

#!/bin/bash
set -e
PROXY="http://proxy.acme.aws:3128"
NOPROXY="169.254.169.254,ssm.eu-west-1.amazonaws.com,ec2.eu-west-1.amazonaws.com,ec2messages.eu-west-1.amazonaws.com"
mkdir -p /etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service.d
cat << EOF > /etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service.d/override.conf
[Service]
Environment="http_proxy=$PROXY"  
Environment="https_proxy=$PROXY"
Environment="no_proxy=$NOPROXY"
EOF
systemctl daemon-reload
systemctl restart snap.amazon-ssm-agent.amazon-ssm-agent.service
cat << EOF > /etc/apt/apt.conf.d/02proxy
Acquire {
HTTP::proxy "$PROXY";
HTTPS::proxy "$PROXY";
}
EOF
echo "Proxy configuration complete."

入门

跳至AWS控制台并开始查看AWS Systems Manager如何处理远程脚本执行。

存货

您的AWS账户配备了一个名为MigratedInstance的Amazon EC2实例,您可以将其用于测试和故障排除。

您应该使用的服务

AWS Systems Manager,Amazon EC2用于故障排除

任务验证

您的任务会自动验证。您也可以单击检查我的进度按钮以获取一些指导。

引导

惩罚:6点

入门1:SSM简介

AWS Systems Manager运行命令功能可帮助您对EC2实例执行脚本或命令,而无需连接它们。

搜索作为命令文档示例的RemoveDiscoveryAgent文档,以将您编写为ConfigureProxy文档。

惩罚:8点

首要2:解决方案

为了解决此任务,您必须执行以下步骤:

转到AWS Systems Manager控制台页面。

点击文件

单击创建命令或会话

输入“ ConfigureProxy”作为名称

选择YAML作为内容并粘贴以下内容

---

schemaVersion: "2.2"

description: "Command Document Example YAML Template"

mainSteps:

- action: "aws:runShellScript"

  name: "configureLinuxProxy"

  precondition:

    StringEquals:

      - platformType

      - Linux

  inputs:

    runCommand:

    - '#!/bin/bash'

    - 'set -e'

    - 'PROXY="http://proxy.acme.aws:3128"'

    - 'NOPROXY="169.254.169.254,ssm.eu-west-1.amazonaws.com,ec2.eu-west-1.amazonaws.com,ec2messages.eu-west-1.amazonaws.com"'

    - 'mkdir -p /etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service.d'

    - 'cat << EOF > /etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service.d/override.conf'

    - '[Service]'

    - 'Environment="http_proxy=$PROXY"'

    - 'Environment="https_proxy=$PROXY"'

    - 'Environment="no_proxy=$NOPROXY"'

    - 'EOF'

    - 'systemctl daemon-reload'

    - 'systemctl restart snap.amazon-ssm-agent.amazon-ssm-agent.service'

    - 'cat << EOF > /etc/apt/apt.conf.d/02proxy'

    - 'Acquire {'

    - 'HTTP::proxy "$PROXY";'

    - 'HTTPS::proxy "$PROXY";'

    - '}'

    - 'EOF'

    - 'echo "Proxy configuration complete."'

创建的文档将有一个名为configureLinuxProxy的步骤。此步骤有一个前提条件,使其只能在Linux主机上运行。然后将包含要执行的Shell命令列表的runCommand对象作为输入。

点击创建文档

任务2:如果两次执行,则次数太多了。

背景

一天到一天都完成了,感谢您的支持,所有服务器都及时迁移,您的经理非常高兴!当他挂断电话时,他会向您发送一封邮件,其中包含要在迁移期间执行的操作的列表。这些操作已从初始迁移步骤中删除,因为sysops没有时间完成它们。

FROM : manager@acme.com

Thanks again for your help today. Your script and RunCommand document really helped reduce the migration duration. Now that you have some spare time, maybe you could take care of the following list ?

* Tag the instance to track which one are being reconfigured. We had some issues with instances being missed.

* Apply the proxy settings

* Apply the patch baseline

* Remove the discovery agent

* Tag the instance to track the completion so the next team knows when to reconfigure the application.

Regards,

Your manager.

你的任务

在第二项任务中,您将创建一个名为PostMigrationAutomation(区分大小写)的自动化文档,该文档 将执行上述任务:

使用键:migration_status和值:postmigration_started标记实例。

运行ConfigureProxy文档以设置代理设置

运行AWS-RunPatchBaseline文档以检查实例是否有更新

运行RemoveDiscoveryAgent文档以从发现代理清除服务器

用键:migration_status和值:postmigration_completed标记实例

入门

打开AWS Systems Manager控制台,然后查找一些示例。

存货

一个IAM角色,用于在输出属性中委派自动化

您应该使用的服务

AWS Systems Manager,Amazon EC2用于故障排除

任务验证

您的任务会自动验证。您也可以单击检查我的进度按钮以获取一些指导。

注意:

您不应运行自动化文档以成功完成挑战。

线索

罚分:6分

线索1:传递参数

AWS Systems Manager自动化功能可帮助您构建常见的维护任务。

在该项目中,我们将对实例执行多个操作,因此您应该查看如何为instanceId创建带有参数的自动化文档。

然后,您可以使用'{{parameter_name}}'映射将参数传递给步骤。

罚分:8分

线索2:解决方案

要解决此任务,您必须执行以下操作。

转到AWS Systems Manager控制台。

转到文档。

单击创建自动化。

输入“ PostMigrationAutomation”作为“名称”。

输入SSMAutomationRole的ARN作为承担角色。

对于输入参数,参数名称输入“ instanceId”。

对于步骤1:

在“步骤名称”中输入“ tag_start” 。

为操作类型选择为AWS资源创建标签。

输入- “{{实例Id}}”的资源ID下输入。

为标签输入[{“ Key”:“ migration_status”,“ Value”:“ postmigration_started”}] 。

单击添加步骤。

对于步骤2:

输入“ configure_proxy”作为“步骤名称”。

选择“在托管实例上运行命令”作为“操作类型”。

在“输入”下输入“ ConfigureProxy”作为文档名称

在“输入”下为InstanceId输入-'{{instanceId}}' 。

单击添加步骤。

对于步骤3:

在“步骤名称”中输入“ patch_instance” 。

选择“在托管实例上运行命令”作为“操作类型”。

在“输入”下输入“ AWS-RunPatchBaseline”作为文档名称

在“输入”下为InstanceId输入-'{{instanceId}}' 。

单击添加步骤。

对于第4步:

在“步骤名称”中输入“ remove_discovery_agent” 。

选择“在托管实例上运行命令”作为“操作类型”。

在“输入”下输入“ RemoveDiscoveryAgent”作为文档名称

在“输入”下为InstanceId输入-'{{instanceId}}' 。

单击添加步骤。

对于步骤5:

在“步骤名称”中输入“ tag_complete” 。

为操作类型选择为AWS资源创建标签。

输入- “{{实例Id}}”的资源ID下输入。

为[标签]输入[{“ Key”:“ migration_status”,“ Value”:“ postmigration_completed”}]] 。

单击创建自动化。

本文档将执行标记,配置代理,修补,删除代理和再次标记的5个步骤。所有这些步骤将通过SSM自动化角色启动。参数instanceId将确定必须以哪个实例为目标。

任务 3: 所有的手都关掉!是时候放松

跟踪迁移的服务器

背景

您自动执行了所有迁移后步骤和服务器的迁移日复一日。您确保永远不会忘记服务器,在迁移后开始时以及迁移后的结束时对服务器进行标记。 由于迁移项目的计划有点晚,您的经理打电话询问您是否可以推迟假期以保持迁移进行。由于您无意这样做,因此您正在寻找一种方法,即使在节假日也能自动触发自动化。

你的任务

在这第三个任务中,你应该看看在设置了标签迁ation_status = ready_for_postmigrate 时触发自动化。您可以通过在 CloudTrail 中为关联事件创建规则来实现这一点。 该规则应命名为 automationTrigger。

示例事件:

{

        "version": "0",

        "id": "67df5f3e-57ea-fac5-4c6e-fc83b9abcdef",

        "detail-type": "AWS API Call via CloudTrail",

        "source": "aws.ec2",

        "account": "123456789012",

        "time": "2020-10-19T06:22:21Z",

        "region": "eu-west-1",

        "resources": [],

        "detail": {

            "eventVersion": "1.05",

            "userIdentity": {

                "type": "AssumedRole",

                "principalId": "AROAI4UAWJ76D55TKEVY6:Example",

                "arn": "arn:aws:sts::123456789012:assumed-role/Admin/ExampleSession",

                "accountId": "123456789012",

                "accessKeyId": "ASIAUTDEHZRDLEXAMPLE",

                "sessionContext": {

                    "sessionIssuer": {

                        "type": "Role",

                        "principalId": "AROAI4UAWJ76D5EXAMPLE",

                        "arn": "arn:aws:iam::123456789012:role/Admin",

                        "accountId": "123456789012",

                        "userName": "Admin"

                    },

                    "webIdFederationData": {},

                    "attributes": {

                        "mfaAuthenticated": "false",

                        "creationDate": "2020-10-19T06:13:22Z"

                    }

                }

            },

            "eventTime": "2020-10-19T06:22:21Z",

            "eventSource": "ec2.amazonaws.com",

            "eventName": "CreateTags",

            "awsRegion": "eu-west-1",

            "sourceIPAddress": "10.0.0.1",

            "userAgent": "console.ec2.amazonaws.com",

            "requestParameters": {

                "resourcesSet": {

                    "items": [

                        {

                            "resourceId": "i-00c9eab2d04abcdef"

                        }

                    ]

                },

                "tagSet": {

                    "items": [

                        {

                            "key": "migration_status",

                            "value": "ready_for_postmigration"

                        }

                    ]

                }

            },

            "responseElements": {

                "requestId": "a939f941-6a83-4048-9717-a9ba43485aad",

                "_return": true

            },

            "requestID": "a939f941-6a83-4048-9717-a9ba43485aad",

            "eventID": "80e3b894-d070-4ad5-b122-e0712da23d79",

            "eventType": "AwsApiCall"

        }

    }

开始

打开亚马逊 EventBridge 并创建自己的规则。 你将处理 JSON 事件,所以我建议使用 JSONPath 赋值器来缓解疑难解答。

库存

在 ** 输出属性 ** 中启动自动化的一个 IAM 角色。

你应该使用的服务

Amazon EventBridge、AWS Systems Manager、亚马逊 EC2 进行故障排除。

任务验证

您的任务将自动验证。你也可以点击 ** 查看我的进度 ** 按钮以获得一些指导。

线索

惩罚: 6 点

线索 1:捕捉事件

Amazon EventBridge 是一个无服务器事件总线,它将帮助您在发送标记事件时做出反应。 查看示例事件,您应该创建 Amazon EventBridge 规则以便在此特定事件上触发。一个很好的快速入门是使用 ** 按服务预定义模式 ** 进行 Cloudrail 调用 EC2 服务,并自定义结果以匹配示例事件。

惩罚: 8 点

线索 2:改变活动

Amazon EventBridge 支持 输入变 换器,以帮助您转换接收的事件,并仅将一个子集传递给自动化。 在这个挑战中,我们需要转换事件,只将实例 ID 传递给 Automation 文档。 如果你的自动化有一个名为 InstanceID 的参数,那么输入变换器将如下所示: 输入 PutPath

{'instances': '$.detail.requestParameters.resourcesSet.items[*].resourceId'}

{"instanceId": [<instances>]}

惩罚: 10 点

线索 3:解决方案

为了解决这个任务: 1.转到 ** 亚马逊 EventBridge ** 控制台。 2.点击 ** 创建规则 *。 3.为 * 名称 ** 输入 “AutomationTrigger”。 4.选择 ** 活动模式 *。 5.选择 * 自定义模式 *。 6.在 * 事件模式 ** 中输入以下模式。

{

  "source": [

    "aws.ec2"

  ],

  "detail-type": [

    "AWS API Call via CloudTrail"

  ],

  "detail": {

    "eventSource": [

      "ec2.amazonaws.com"

    ],

    "eventName": [

      "CreateTags"

    ],

    "requestParameters": {

      "tagSet": {

        "items": {

          "key": [

            "migration_status"

          ],

          "value": [

            "ready_for_postmigration"

          ]

        }

      }

    }

  }

}

这种模式意味着我们正在寻找 aws.ec2 事件,来自 CloudTrail,其中源是 ec2.amazonaws.com,事件名称是 CreateTags,密钥和值是 migrate ation_status 和 ready_for_post迁移。

7.点击 ** 保存 ** 7.对于 ** 选择目标 *,选择 *SSM 自动化 *。 8.为 * 文档 ** 选择 ** 迁移后自动化 *。 9.为 * 配置自动化参数 ** 选择 ** 输入变换器 ** 10.将以下 json 粘贴到第一个单元格

{"instances": "$.detail.requestParameters.resourcesSet.items[*].resourceId"}

11.将以下 json 粘贴到第二个单元格中(将 InstanceID 替换为 PostMigrationAutomation SSM 文档的参数名称)

{"instanceId": [<instances>]}

12.选择 ** 使用现有角色 ** 13.选择 Amazon_eventBridge_Start_Automation 14.点击 ** 创建 **

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值