
示例工程【免费下载链接】python-docs-samplesCode samples used on cloud.google.com项目地址https://gitcode.com/GitHub_Trending/py/python-docs-samples点击查看免费下载导读本文围绕 python-docs-samples 仓库中 Composer DAGs Pausing/Unpausing script 文档 展开系统讲解用于 Cloud Composer 环境的 DAG 批量管理工具 composer_dags.py。你将掌握该脚本的前置条件、命令参数、pause/unpause 两种操作的完整用法以及从源码层面理解它如何自动识别 Airflow 版本、枚举环境内全部 DAG 并逐一批量执行操作从而在迁移、维护、停服等场景下高效管理整个 Composer 环境。脚本定位一站式批量管理 Composer 环境中的全部 DAG在 Cloud Composer 环境中Airflow 的 Web UI 通常只支持逐个暂停或恢复 DAG。当环境中存在大量 DAG例如停机维护、版本迁移或灾备演练时逐个操作既耗时又易遗漏。composer_dags.py正是为解决这一问题而生的独立命令行脚本它以gcloud composer environments run为底层调用链自动列举指定 Composer 环境中的全部 DAG并统一执行暂停pause或恢复unpause操作。脚本的核心设计目标源自 composer_dags.md 与 源码 docstring是批量暂停将环境中除airflow_monitoring之外的所有 DAG 全部暂停批量恢复将环境中所有 DAG 全部恢复unpause全版本兼容支持所有 Composer 版本Composer 1 / 2 / 3源码内部会根据检测到的 Airflow 版本自动切换不同的 gcloud 子命令。该脚本是 composer/tools 目录下两个实用工具之一另一个是环境迁移工具 composer_migrate.md并已收录于 composer/tools/README.md 的入口索引中。如果你正在规划 Composer 2 → Composer 3 的迁移迁移脚本内部同样复用了逐个暂停/恢复 DAG的策略理解本脚本的实现思路有助于同时掌握两个工具的行为。前置条件运行前必须逐项确认根据文档 Prerequisites脚本运行依赖以下五项条件缺一不可授权与权限运行前需先执行gcloud auth login完成身份认证需要具备访问 Composer 环境的权限roles/composer.environmentAndStorageObjectAdmin角色即可满足要求同时需要拥有该环境底层 GKE 集群的访问权限container.*因为脚本需要通过 kubectl 与集群通信。kubectl 可访问 Composer 环境的 GKE 集群建议先用kubectl get pods验证连通性若该命令本身失败脚本必然失败典型错误特征kubectl 输出Unable to connect to the server: dial tcp [IP ADDRESS]:443: connect: connection timed out说明 kubectl 无法连接到 GKE 集群如果你使用的是私有 IP 环境Private Cluster需要按官方文档先行配置私有集群的访问方式如 Cloud Shell 代理确保 kubectl 能直连集群 API Server。环境版本支持所有 Composer 版本脚本会自动适配。本机工具链Python 3.6 或更高版本、gcloud CLI、kubectl 三者缺一不可源码依赖subprocess调用 gcloud 与 kubectl 相关命令Python 内置的argparse、json、re、logging模块则负责参数解析与日志输出见 composer_dags.py 导入区。环境健康运行前请确认 Composer 环境的 Environment health 与 Database health 指标正常。若环境不健康如数据库异常、调度器故障应先修复环境再执行脚本否则批量操作可能产生不可预期的半完成状态。已知限制使用前需了解的行为边界文档在 Limitations 中明确了两条限制gcloud 命令失败无错误处理机制脚本当前没有针对 gcloud 命令执行失败的兜底错误处理。不过从源码看底层_run_shell_command_locally_once在子进程返回非零退出码时会记录错误日志并直接sys.exit(1)终止见 composer_dags.py#L80-L86因此失败会快速失败而非静默继续。操作后不做 DAG 校验脚本不会在批量暂停/恢复之后验证 DAG 的实际状态是否全部符合预期需要用户自行通过 Airflow UI 或gcloud composer environments run ... dags list复核。此外从源码实现可以补充两个值得注意的行为细节单个 DAG 的 pause/unpause 若首次执行返回码为 1脚本会自动重试一次见 pause_dag 与 unpause_dag两次都失败才放弃并打印 Unable to pause/unpause DAG 日志文档声称除airflow_monitoring外全部操作但从 main 函数源码 看pause 分支显式跳过airflow_monitoring而 unpause 分支并未显式排除它即恢复操作会覆盖包括airflow_monitoring在内的所有 DAG。实际使用时建议留意这一差异。命令行参数详解脚本通过argparse解析参数见 parse_arguments参数清单如下参数类型是否必填默认值说明--operationstr是无操作类型取值仅限pause或unpausechoices强约束传其他值直接报错--projectstr是无项目名称Project ID--environmentstr是无Composer 环境名称Environment Name--locationstr是无环境所在区域Region如europe-west4--sdk_endpointstr否https://composer.googleapis.com/Composer SDK API 端点用于覆盖 API 端点如搭配 VPC-SC / 代理场景通过环境变量CLOUDSDK_API_ENDPOINT_OVERRIDES_COMPOSER注入到每条 gcloud 命令前其中--sdk_endpoint属于进阶参数绝大多数场景无需修改保持默认值即可命中公共 Composer API 端点。使用方法暂停 / 恢复全部 DAG文档在 Usage 中给出了标准调用格式与两个示例。通用命令模板为python3 composer_dags.py \ --project [PROJECT NAME] \ --environment [SOURCE ENVIRONMENT NAME] \ --location [REGION] \ --operation [OPERATION]暂停全部 DAG 示例python3 composer_dags.py \ --project my-project \ --environment my-airflow-1-composer-environment \ --location europe-west4 \ --operation pause恢复全部 DAG 示例python3 composer_dags.py \ --project my-project \ --environment my-airflow-1-composer-environment \ --location europe-west4 \ --operation unpause脚本入口位于 main执行流程为parse_arguments()解析参数 → 调用main(...)→ 按返回值exit。main内部的实际流水线分为四步见 composer_dags.py#L155-L204调用describe_environment获取环境 JSON 描述打印环境名称从 JSON 中的config.softwareConfig.imageVersion字段解析出 Airflow 版本号调用get_list_of_dags列出环境内全部 DAG并打印List of dags : [...]日志根据--operation逐条遍历执行 pause/unpause。运行时脚本会输出带时间戳的 DEBUG 级日志日志格式在 logging.basicConfig 中定义包括每条被执行的 shell 命令Executing shell command: ...、环境信息、镜像版本与 DAG 列表便于跟踪执行进度和排查问题。源码级原理版本识别、DAG 列举与命令构造1. 自动识别 Airflow 版本并切换子命令脚本通过正则表达式COMPOSER_AF_VERSION_RE从环境镜像版本号形如composer-2.x.x-airflow-2.x.x中抽取 Airflow 版本COMPOSER_AF_VERSION_RE re.compile( composer-(\d)(?:\.(\d)\.(\d))?.*?-airflow-(\d)\.(\d)\.(\d) )见 composer_dags.py#L35-L37在 main 中environment_info[config][softwareConfig][imageVersion]经正则匹配后取第 4、5、6 组捕获值构造成(major, minor, patch)形式的airflow_version元组。2. 新旧两套 gcloud 子命令的分流脚本兼容 Airflow 1.x 与 2.x 的关键在于子命令命名差异由airflow_version (2, 0, 0)决定操作Airflow 2.0旧式子命令Airflow 2.0新式子命令列举 DAGlist_dagsdags list暂停 DAGpausedags pause恢复 DAGunpausedags unpause对应实现位置get_list_of_dags 的子命令选择、pause_dag 的子命令选择、unpause_dag 的子命令选择。命令统一通过gcloud composer environments run environment --projectproject --locationlocation sub_command组装并对单个 DAG 追加-- dag_id参数传入。3. DAG 列表的解析策略get_list_of_dags见 composer_dags.py#L40-L66对两种输出格式分别解析旧版本Airflow 2.0命令输出按空白符split()定位DAGS标记后截取其后第 3 个元素到倒数第 2 个元素作为 DAG 名列表新版本Airflow 2.0按行遍历输出用^[a-zA-Z].*正则过滤出以字母开头的行取每行第一个字段DAG ID并丢弃首行表头list_of_dags[1:]。4. 底层 shell 执行与失败处理所有 gcloud 命令都由_run_shell_command_locally_once见 composer_dags.py#L68-L87统一执行使用subprocess.Popen(..., shellTrue)运行通过communicate()收集输出若返回码非零则记录Failed to run shell command ...错误日志并sys.exit(1)终止脚本。故障排查指南文档在 Troubleshooting 中给出了三层排查路径逐项核对前置条件确认已gcloud auth login授权、权限齐全、kubectl 可达、工具链完整、环境健康权限相关报错如果错误疑似与权限有关请重点复查是否同时具备 Composer 环境的访问权限roles/composer.environmentAndStorageObjectAdmin与 GKE 集群的container.*权限联系支持若问题仍未解决可向 Google Cloud 支持渠道求助联系时务必附带脚本的完整输出日志包括Executing shell command、镜像版本、DAG 列表以及具体的失败命令与输出这能大幅缩短定位时间。结合源码可以补充两条实用排查技巧若日志中出现Failed to run shell command ... details: ...后脚本退出码为 1说明某条 gcloud 命令执行失败可直接复制日志中打印的完整命令到本地终端手动执行以区分是权限问题、网络问题还是参数问题若kubectl get pods已可连通但脚本仍失败优先检查环境健康状态——脚本在 pause/unpause 前会先执行describe与list_dags这两个步骤的失败信息通常会直接暴露根因。总结composer_dags.py是一个轻量、自包含的运维工具通过描述环境 → 解析 Airflow 版本 → 列举 DAG → 逐条执行四步流水线将 Composer 环境整体的 DAG 暂停/恢复操作从数十次手工点击简化为一条命令行。其价值体现在全 Composer 版本兼容自动切换新旧子命令、自动跳过airflow_monitoring暂停时、失败自动重试一次、全程 DEBUG 日志可审计。对于需要批量管理 DAG 状态的运维与迁移场景可直接参照本文参数表与命令示例运行如需进一步了解配套的 Composer 2 → 3 环境迁移工具可阅读同目录下的 composer_migrate.md。赞分享示例工程【免费下载链接】python-docs-samplesCode samples used on cloud.google.com项目地址https://gitcode.com/GitHub_Trending/py/python-docs-samples点击查看免费下载相关推荐如何快速掌握GCViewer全面解读Java GC暂停、Full GC与安全点暂停分析指南如何快速掌握GCViewer全面解读Java GC暂停、Full GC与安全点暂停分析指南 GCViewer是一款强大的Java垃圾回收日志分析工具专为解析开发工具性能剖析数据可视化x64dbg 脚本命令 pause 详解暂停脚本执行、恢复机制与脚本状态机原理x64dbg 脚本命令 pause 详解暂停脚本执行、恢复机制与脚本状态机原理 本篇文章讲解 x64dbg 内置脚本引擎simplescript中的 pa逆向工程调试器开发工具应用安全co源码剖析理解Generator函数的暂停与恢复机制co源码剖析理解Generator函数的暂停与恢复机制 在JavaScript异步编程的世界中co库是一个革命性的工具它让Generator函数的威力得到后端开发工具上一篇保姆级上手攻略如何零网络玩转Zwift离线版3步告别网络焦虑下一篇零网络畅骑ZwiftZoffline离线版完整指南4种安装方法与进阶玩法一次讲透创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考