ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AWS CLI 实战:使用 `apprunner delete-service` 删除 App Runner 服务

AWS CLI 实战:使用 `apprunner delete-service` 删除 App Runner 服务 AWS CLI 实战使用apprunner delete-service删除 App Runner 服务【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli本文以 aws-cli 仓库中的 delete-service.rst 官方示例为骨架完整讲解aws apprunner delete-service命令的用法从 CLI 参数传值、--cli-input-json批量输入到异步删除的响应结构与状态追踪并结合仓库内 App Runner 服务模型源码剖析删除操作的底层原理、异常处理与删除前的注意事项。读完本文你将能够在实际项目中安全、可审计地删除 App Runner 服务并正确解读删除任务的执行状态。一、命令概述delete-service是做什么的apprunner delete-service用于删除一个 AWS App Runner 服务。从仓库中的服务模型定义service-2.json可以看到该操作对应的 HTTP 请求为DeleteService: { name: DeleteService, http: { method: POST, requestUri: / }, input: {shape: DeleteServiceRequest}, output: {shape: DeleteServiceResponse}, ... }即通过POST /调用 App Runner 服务的 DeleteService API。该操作的官方说明有两个关键点这是异步操作asynchronous operation调用成功后服务不会立刻消失而是进入删除流程需要借助返回的OperationId配合list-operations命令追踪删除进度删除前需确认要删除的服务不能存在与之关联的活跃 VPC Ingress ConnectionVpcIngressConnections。二、命令语法与参数说明delete-service是异步删除操作唯一必需的参数是ServiceArn。在 service-2.json 中DeleteServiceRequest的模型定义如下DeleteServiceRequest: { type: structure, required: [ServiceArn], members: { ServiceArn: { shape: AppRunnerResourceArn, documentation: pThe Amazon Resource Name (ARN) of the App Runner service that you want to delete./p } } }参数类型必填说明--service-arnstringARN是要删除的 App Runner 服务的 Amazon 资源名称ARN除直接使用--service-arn传参外CLI 还支持通过--cli-input-json以 JSON 文件方式传入整个请求体适合脚本化、批量或模板化操作。三、完整操作示例继承官方示例方式一使用--cli-input-json从 JSON 文件读取参数这是官方示例delete-service.rst演示的方式。首先准备输入文件input.json{ ServiceArn: arn:aws:apprunner:us-east-1:123456789012:service/python-app/8fe1e10304f84fd2b0df550fe98a71fa }然后执行aws apprunner delete-service \ --cli-input-json file://input.json方式二直接以命令行参数传值效果完全等价适合参数较少、临时操作的场景aws apprunner delete-service \ --service-arn arn:aws:apprunner:us-east-1:123456789012:service/python-app/8fe1e10304f84fd2b0df550fe98a71fa提示ARN 的格式为arn:aws:apprunner:region:account-id:service/service-name/service-id。其中8fe1e10304f84fd2b0df550fe98a71fa是服务唯一 ID可通过 list-services 或 describe-service 获取准确的 ARN。四、理解响应结构OperationId 与删除前的服务快照官方示例展示了成功调用后的返回内容。delete-service的响应包含两个必需字段模型见 service-2.json{ OperationId: 17fe9f55-7e91-4097-b243-fcabbb69a4cf, Service: { CreatedAt: 2020-11-20T19:05:25Z, UpdatedAt: 2020-11-20T19:05:25Z, ServiceArn: arn:aws:apprunner:us-east-1:123456789012:service/python-app/8fe1e10304f84fd2b0df550fe98a71fa, ServiceId: 8fe1e10304f84fd2b0df550fe98a71fa, ServiceName: python-app, ServiceUrl: psbqam834h.us-east-1.awsapprunner.com, SourceConfiguration: { AuthenticationConfiguration: { ConnectionArn: arn:aws:apprunner:us-east-1:123456789012:connection/my-github-connection/e7656250f67242d7819feade6800f59e }, AutoDeploymentsEnabled: true, CodeRepository: { CodeConfiguration: { CodeConfigurationValues: { BuildCommand: pip install -r requirements.txt, Port: 8080, Runtime: PYTHON_3, RuntimeEnvironmentVariables: [ { NAME: Jane } ], StartCommand: python server.py }, ConfigurationSource: Api }, RepositoryUrl: https://github.com/my-account/python-hello, SourceCodeVersion: { Type: BRANCH, Value: main } } }, Status: OPERATION_IN_PROGRESS, InstanceConfiguration: { Cpu: 1 vCPU, Memory: 3 GB } } }响应字段解析字段说明OperationId本次异步删除操作DELETE_SERVICE的唯一 ID用于配合list-operations追踪删除进度Service被删除服务的完整描述快照删除发起时的状态包含服务标识、源码配置与实例配置等Service.Status当前服务状态。示例中为OPERATION_IN_PROGRESS表示删除操作已受理、正在执行值得注意响应中的Service是删除前/删除中的快照因此SourceConfigurationGitHub 仓库地址、构建命令pip install -r requirements.txt、运行端口8080、运行时PYTHON_3、启动命令python server.py等与InstanceConfiguration1 vCPU/3 GB都完整保留便于审计删除时服务的确切配置。服务的生命周期状态在 service-2.json 中ServiceStatus枚举定义了 App Runner 服务的全部状态ServiceStatus: { type: string, enum: [ CREATE_FAILED, RUNNING, DELETED, DELETE_FAILED, PAUSED, OPERATION_IN_PROGRESS ] }与删除操作相关的状态流转为调用delete-service后状态由RUNNING或PAUSED等进入OPERATION_IN_PROGRESS删除成功最终变为DELETED若删除失败则变为DELETE_FAILED。五、追踪异步删除进度list-operations的正确用法由于删除是异步操作返回的OperationId正是追踪进度的钥匙。仓库中的 list-operations.rst 给出了查询示例aws apprunner list-operations \ --cli-input-json file://input.json其中input.json内容为{ ServiceArn: arn:aws:apprunner:us-east-1:123456789012:service/python-app/8fe1e10304f84fd2b0df550fe98a71fa }返回的OperationSummaryList数组包含该服务上发生过的所有操作记录例如创建服务时的操作{ OperationSummaryList: [ { EndedAt: 1606156217, Id: 17fe9f55-7e91-4097-b243-fcabbb69a4cf, StartedAt: 1606156014, Status: SUCCEEDED, TargetArn: arn:aws:apprunner:us-east-1:123456789012:service/python-app/8fe1e10304f84fd2b0df550fe98a71fa, Type: CREATE_SERVICE, UpdatedAt: 1606156217 } ] }每条操作记录包含Id对应delete-service返回的OperationId、Type如CREATE_SERVICE、DELETE_SERVICE、Status如SUCCEEDED、IN_PROGRESS、FAILED以及开始/结束时间戳。在删除场景下你可以用删除时拿到的OperationId匹配list-operations返回记录中的Id并检查Type是否为DELETE_SERVICE、Status是否变为SUCCEEDED从而确认服务已彻底删除。六、异常与错误处理DeleteService操作的错误定义service-2.json包含四类异常异常类型触发场景InvalidRequestException请求参数不合法如 ARN 格式错误、参数缺失ResourceNotFoundException指定的ServiceArn对应的服务不存在InvalidStateException服务当前状态不允许删除例如删除已在进行中InternalServiceErrorExceptionApp Runner 服务端内部错误实际使用建议删除前先通过describe-service确认服务确实存在、状态可删除捕获ResourceNotFoundException以幂等地处理“服务已不存在”的重复删除场景遇到InvalidStateException时先等待当前操作完成再重试。七、源码原理--cli-input-json是如何工作的示例中的--cli-input-json file://input.json由 aws-cli 的通用参数机制提供实现在 cliinputjson.py 中。其工作流程如下building-argument-table事件触发时add_cli_input_json为不支持流式输出的所有操作统一注册cli-input-json参数cliinputjson.py命令调用阶段add_to_call_parameters通过get_paramfile(input_json, LOCAL_PREFIX_MAP)解析file://前缀读取本地 JSON 文件内容cliinputjson.pyJSON 解析成功后_update_call_parameters将 JSON 中的字段合并进调用参数且命令行中显式传入的参数优先级高于 JSON 文件中的值cliinputjson.py。这意味着你完全可以在input.json中维护服务 ARN 的模板再用命令行临时覆盖个别字段也解释了为何--cli-input-json特别适合把删除操作纳入自动化脚本——参数与命令分离便于版本管理。八、删除前的注意事项与最佳实践结合 service-2.json 中 DeleteService 的官方说明与示例推荐以下实践检查 VPC Ingress Connection确保要删除的服务没有关联任何活跃的VpcIngressConnection否则删除会失败或遗留关联资源记录 OperationId 与服务快照删除响应中包含完整的服务配置快照建议留存用于审计或后续重建参考 create-service.rst轮询确认最终状态删除是异步的切勿以为命令返回即代表资源已释放应结合list-operations确认DELETE_SERVICE操作成功或通过 describe-service 确认服务状态变为DELETED注意不可逆性删除服务会同时销毁其计算资源与相关运行时环境删除前应确认没有对外流量依赖该服务的ServiceUrl示例中为psbqam834h.us-east-1.awsapprunner.com。九、相关命令速查围绕 App Runner 服务的生命周期仓库awscli/examples/apprunner/目录下提供了完整的命令示例可作为删除操作的上下游参考create-service.rst —— 创建服务describe-service.rst —— 查看服务详情删除前确认状态list-services.rst —— 列出服务获取 ARNlist-operations.rst —— 查看操作记录追踪删除进度pause-service.rst / resume-service.rst —— 暂停/恢复服务替代删除的临时下线方案update-service.rst —— 更新服务配置总结aws apprunner delete-service是 App Runner 服务生命周期管理的终止操作它通过POST /发起异步删除唯一必填参数是ServiceArn支持--cli-input-json文件化传参响应中的OperationId用于配合list-operations追踪删除进度服务状态最终从OPERATION_IN_PROGRESS流转为DELETED。删除前务必确认服务没有活跃的 VPC Ingress Connection 关联并妥善留存响应中的服务配置快照用于审计。底层模型定义与 CLI 参数实现均可在 service-2.json 与 cliinputjson.py 中查阅验证。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进