ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

使用 aws cloudformation describe-stack-drift-detection-status 检查堆栈漂移检测任务状态

使用 aws cloudformation describe-stack-drift-detection-status 检查堆栈漂移检测任务状态 使用 aws cloudformation describe-stack-drift-detection-status 检查堆栈漂移检测任务状态【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli本指南讲解 AWS CLI 中aws cloudformation describe-stack-drift-detection-status命令的完整用法从detect-stack-drift拿到漂移检测 ID 开始到轮询该命令确认检测是否完成、判断堆栈是否发生漂移再到用describe-stack-resource-drifts定位具体漂移资源形成一条完整的堆栈漂移排查链路。读完本文你将掌握这条命令的参数、返回字段、状态枚举含义以及如何用 Shell 脚本自动化发起检测 → 轮询状态 → 查看漂移明细的整套流程。命令概述为什么需要查看漂移检测状态AWS CloudFormation 的**堆栈漂移检测stack drift detection**用于发现堆栈的实际配置与期望配置模板 模板参数之间的差异。这种差异通常由带外修改out-of-band changes引起例如有人通过控制台或直接 API 手动改动了某资源的属性。CloudFormation 认为只要堆栈中有一个资源发生了漂移整个堆栈就视为DRIFTED。漂移检测是异步操作detect-stack-drift提交任务后立即返回一个StackDriftDetectionId而真正扫描资源需要时间。describe-stack-drift-detection-status正是用来查询这个异步任务执行进度的命令。在服务模型文件中可以看到DescribeStackDriftDetectionStatus是一个 POST 请求操作其接口文档明确指出使用DetectStackDrift发起检测并拿到StackDriftDetectionId后用本操作监控进度检测完成后再用DescribeStackResourceDrifts返回堆栈及其资源的漂移详情。这三个命令在 AWS CLI 中的对应实现为aws cloudformation detect-stack-drift发起漂移检测返回检测 IDaws cloudformation describe-stack-drift-detection-status查询检测任务状态本文主角aws cloudformation describe-stack-resource-drifts查看已检测资源的具体漂移差异典型使用流程从发起检测到确认结果漂移检测的命令行闭环如下发起检测并记录返回的检测 IDaws cloudformation detect-stack-drift --stack-name my-stack输出{ StackDriftDetectionId: 1a229160-e4d9-xmpl-ab67-0a4f93df83d4 }这个 ID 是后续所有查询的入参。轮询检测状态直到DetectionStatus变为DETECTION_COMPLETE或DETECTION_FAILEDaws cloudformation describe-stack-drift-detection-status \ --stack-drift-detection-id 1a229160-e4d9-xmpl-ab67-0a4f93df83d4输出{ StackId: arn:aws:cloudformation:us-west-2:123456789012:stack/my-stack/d0a825a0-e4cd-xmpl-b9fb-061c69e99204, StackDriftDetectionId: 1a229160-e4d9-xmpl-ab67-0a4f93df83d4, StackDriftStatus: DRIFTED, DetectionStatus: DETECTION_COMPLETE, DriftedStackResourceCount: 1, Timestamp: 2019-10-02T05:54:30.902Z }查看漂移明细若检测到漂移aws cloudformation describe-stack-resource-drifts --stack-name my-stack输出会列出发生漂移的资源、期望属性与实际属性的差异详见后文完整链路示例。参数详解根据输入模型定义该命令只有一个必填参数参数必填类型说明--stack-drift-detection-id是String漂移检测操作的 ID来自detect-stack-drift的返回值。CloudFormation 每次执行检测都会生成新的检测 ID 和新的结果。命令行用法aws cloudformation describe-stack-drift-detection-status \ --stack-drift-detection-id detection-id对应的底层请求构造由 AWS CLI 的命令加载与参数序列化框架处理具体实现在 awscli/argparser.py、awscli/argprocess.py 等命令解析模块中服务端模型操作定义、输入输出 shape、错误类型则统一在 service-2.json 中声明。输出字段详解根据输出模型定义返回 JSON 包含以下字段字段类型说明StackIdString堆栈的唯一 IDARN用于定位堆栈。StackDriftDetectionIdString本次漂移检测操作的 ID。StackDriftStatusString堆栈实际配置与期望配置模板 模板参数的比较状态取值见下文。DetectionStatusString漂移检测操作自身的执行状态取值见下文。DetectionStatusReasonString检测操作处于当前状态的原因仅在检测失败等场景下有意义。DriftedStackResourceCountInteger发生漂移的堆栈资源总数。在检测操作到达DETECTION_COMPLETE之前为null若堆栈IN_SYNC该值为 0。TimestampTimestamp漂移检测操作发起的时间。其中必返回字段为StackId、StackDriftDetectionId、DetectionStatus、Timestamp四项见输出模型。StackDriftStatus 的四种取值由 StackDriftStatus 枚举定义取值含义DRIFTED堆栈与期望的模板配置存在差异。只要有一个资源漂移整个堆栈即视为DRIFTED。IN_SYNC堆栈实际配置与期望的模板配置一致。NOT_CHECKEDCloudFormation 尚未检查该堆栈是否与期望模板配置存在差异。UNKNOWNCloudFormation 无法对堆栈中的某个资源执行漂移检测需结合DetectionStatusReason查看原因。DetectionStatus 的三种取值由 StackDriftDetectionStatus 枚举定义取值含义DETECTION_IN_PROGRESS漂移检测操作正在进行中。DETECTION_COMPLETE对堆栈中所有支持漂移检测的资源检测均已成功完成不支持漂移检测的资源保持未检查状态。若发起检测时指定了逻辑资源 ID 过滤器则仅检查这些逻辑 ID 对应的资源。DETECTION_FAILED堆栈中至少一个资源的漂移检测失败。CloudFormation 成功完成检测的资源仍会返回结果。关于 StackDriftStatus 为 UNKNOWN 的补充在describe-stack-drift-detection-status的上下文中当StackDriftStatus为UNKNOWN时说明 CloudFormation 未能对堆栈中的某些资源运行漂移检测此时应重点查看DetectionStatusReason字段获取具体原因。同一语义在堆栈级的StackDriftInformation/StackDriftInformationSummary结构service-2.json中也有体现describe-stacks等命令返回的堆栈概要信息同样会携带该状态。完整链路示例定位一次真实的资源漂移下面展示三个命令如何协同工作完整还原官方示例文档 describe-stack-drift-detection-status.rst、detect-stack-drift.rst 与 describe-stack-resource-drifts.rst 中的场景。假设堆栈my-stack中的某个 AWS Lambda 函数被人在带外改动了MemorySize和Timeout。依次执行# 1. 发起漂移检测 aws cloudformation detect-stack-drift --stack-name my-stack # 2. 查询检测状态将上一步返回的 ID 填入 aws cloudformation describe-stack-drift-detection-status \ --stack-drift-detection-id 1a229160-e4d9-xmpl-ab67-0a4f93df83d4检测完成后的状态输出显示堆栈已漂移{ StackId: arn:aws:cloudformation:us-west-2:123456789012:stack/my-stack/d0a825a0-e4cd-xmpl-b9fb-061c69e99204, StackDriftDetectionId: 1a229160-e4d9-xmpl-ab67-0a4f93df83d4, StackDriftStatus: DRIFTED, DetectionStatus: DETECTION_COMPLETE, DriftedStackResourceCount: 1, Timestamp: 2019-10-02T05:54:30.902Z }# 3. 查看漂移资源的具体差异 aws cloudformation describe-stack-resource-drifts --stack-name my-stack输出中可以看到被修改的 Lambda 函数及其属性级差异{ StackResourceDrifts: [ { StackId: arn:aws:cloudformation:us-west-2:123456789012:stack/my-stack/d0a825a0-e4cd-xmpl-b9fb-061c69e99204, LogicalResourceId: function, PhysicalResourceId: my-function-SEZV4XMPL4S5, ResourceType: AWS::Lambda::Function, StackResourceDriftStatus: MODIFIED, PropertyDifferences: [ { PropertyPath: /MemorySize, ExpectedValue: 128, ActualValue: 256, DifferenceType: NOT_EQUAL }, { PropertyPath: /Timeout, ExpectedValue: 900, ActualValue: 22, DifferenceType: NOT_EQUAL } ], Timestamp: 2019-10-02T05:54:44.064Z } ] }通过PropertyDifferences中的ExpectedValue期望值与ActualValue实际值对比可以精确定位是哪条属性、从什么值被改成了什么值——这正是describe-stack-drift-detection-status最终要导向的证据。实战脚本轮询直到检测完成由于检测是异步的实践中通常需要轮询。下面是一个可直接复制的 Bash 示例DETECTION_ID$(aws cloudformation detect-stack-drift \ --stack-name my-stack \ --query StackDriftDetectionId --output text) STATUSDETECTION_IN_PROGRESS while [ $STATUS DETECTION_IN_PROGRESS ]; do STATUS$(aws cloudformation describe-stack-drift-detection-status \ --stack-drift-detection-id $DETECTION_ID \ --query DetectionStatus --output text) echo Detection status: $STATUS sleep 5 done aws cloudformation describe-stack-drift-detection-status \ --stack-drift-detection-id $DETECTION_ID要点说明通过--query与--output text提取单个字段便于脚本比较该能力由 AWS CLI 的输出格式化与 JMESPath 查询机制提供相关实现见 awscli/formatter.py。轮询间隔建议设为 510 秒检测通常在几十秒内完成但大型堆栈耗时更久。循环结束后再次调用该命令即可拿到包含StackDriftStatus与DriftedStackResourceCount的完整 JSON。若需在 CI/CD 中快速判断堆栈是否漂移并直接失败可结合DriftedStackResourceCountCOUNT$(aws cloudformation describe-stack-drift-detection-status \ --stack-drift-detection-id $DETECTION_ID \ --query DriftedStackResourceCount --output text) if [ $COUNT ! 0 ]; then echo Stack drifted: $COUNT resource(s) out of sync. exit 1 fi注意事项检测 ID 仅对本次检测有效每次调用detect-stack-drift都会产生新的StackDriftDetectionId与新的检测结果见输入模型文档。CloudFormation 对每个堆栈保留的漂移结果数量与时长可能不同不要长期依赖旧 ID。DriftedStackResourceCount在检测完成前为null轮询脚本中若直接读取该值需注意空值处理。并非所有资源类型都支持漂移检测不支持的资源不会被检查也不会出现在describe-stack-resource-drifts的结果中。DetectionStatus为DETECTION_FAILED时部分资源仍可能有可用结果应先读DetectionStatusReason排查失败原因再对成功完成检测的资源做分析。本仓库内describe-stack-drift-detection-status的官方示例位于 awscli/examples/cloudformation/describe-stack-drift-detection-status.rst与之配套的detect-stack-drift、describe-stack-resource-drifts示例分别位于 detect-stack-drift.rst 和 describe-stack-resource-drifts.rst命令的完整 API 模型与字段枚举定义可在 service-2.json 中按DescribeStackDriftDetectionStatus关键字检索确认。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表