常见问题

本文汇总了使用OOS的常见问题及对应的解决方案。

RAM用户操作报错:User has no permission to do the action: (ListTemplates)

  • 可能原因:RAM用户权限不够,不能执行OOS的指定API。

  • 解决方案:以管理员或者阿里云账号(主账号)身份,登录RAM控制台,对报错的RAM用户进行适当授权,授权范围可以是相关API,也可是所有API,下面样例"Action": "oos:*"则是对所有API授权,详情请参见账户访问控制

    {
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "oos:*",
              "Resource": "*"
          }
      ],
      "Version": "1"
    }

RAM用户操作报错:User has no permission to do the action: (PassRole)

  • 可能原因:RAM用户没有PassRole权限,不能以指定的Role执行系统运维管理

  • 解决方案:以管理员或者阿里云账号身份,在RAM控制台,对RAM用户做适当的PassRole授权,参见账户访问控制

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "ram:PassRole",
          "Resource": "*"
        }
      ]
    }

执行模板报错:Assumes role failed. Code: EntityNotExist.Role, msg: The role not exists: acs:ram::111111:role/OOSServiceRole

  • 可能原因:没有为OOS服务创建默认的RAM角色。

  • 解决方案:阿里云账号或者管理员登录RAM控制台>的RAM访问控制,增加对应的RAM角色OOSServiceRole。具体操作,请参见OOS服务设置RAM角色并授权

执行模板报错:Assumes role failed. Code: NoPermission, msg: You are not authorized to do this action. You should be authorized by RAM

  • 可能原因: 对应的RAM角色没有给OOS服务配置信任策略。

  • 解决方案:阿里云账号或者管理员登录RAM控制台RAM访问控制,增加对应的RAM角色OOSServiceRole,具体操作,请参见OOS服务设置RAM角色并授权

    1. 登录RAM控制台,在角色中输入OOSServiceName进行搜索。

    2. 单击信任策略

    3. 修改信任策略。

      将信任策略修改为如下内容:

      {
        "Statement": [
            {
                "Action": "sts:AssumeRole",
                "Effect": "Allow",
                "Principal": {
                    "Service": [
                        "oos.aliyuncs.com"
                    ]
                }
            }
        ],
        "Version": "1"
      }

执行模板报错:Code: Forbidden.RAM, Message: User not authorized to operate on the specified resource, or this API doesn't support RAM

临时带宽升级报错:code: InvalidAccountStatus.NotEnoughBalance message: Your account does not have enough balance

  • 可能原因:账户余额不足,导致新订单无法完成交易。

  • 解决方案:为账号充值后重试。

临时带宽升级报错:code: InvalidBandwidth.ValueNotSupported message: Instance upgrade bandwidth of temporary not allow less then existed

  • 可能原因:临时宽带升级带宽不能低于已有带宽。

  • 解决方案

    1. OOS概览页使用ECS实例ID查看是否有其他重复的自动升级带宽任务。image

    2. 如果有重复任务请手动取消。

    3. 如果未查询到重复执行,请在ECS实例操作记录中查看带宽升级的日志。image

临时带宽升级报错:code: OperationDenied.UnpaidOrder message: The specified instance has unpaid order

  • 可能原因:目标ECS实例有未支付的订单。

  • 解决方案:支付ECS的订单。

执行命令常见错误:runCommand loop task fail because failures exceeded MaxErrors -> runCommand execution failed, checkInvocationResult Invocation.InvocationResults.InvocationResult[].ExitCode expect in [0] but is 1

  • 可能原因:执行云助手命令的exitcode0。

  • 解决方案:通过查看任务执行详情中子执行的输出和日志来排查执行命令失败的原因。image

感觉有执行操作资源但是找不到执行

  • 可能原因:在其他地域存在任务。

  • 解决方案:通过概览页能看到所有地域的执行。image

执行命令常见错误

解决方案:更多信息,请参见查看执行结果及修复常见问题

Git代码仓库构建和部署应用时失败

  • 可能原因:例如代码错误、依赖项安装失败等,您可以通过查看日志获取应用构建和部署失败的具体原因。

  • 解决方案

    • 构建应用失败

      说明

      Git代码仓库构建应用失败时不会创建云服务器ECS,也不会产生其他费用。

      1. 查看日志获取构建失败的错误信息。

        查看日志

      2. 修改代码或增加配置文件。

        根据您的代码仓库的编程语言,修改代码或增加配置文件,并提交到代码仓库。更多信息,请参见基于特定编程语言的应用配置

      3. 删除构建失败的应用分组,重新创建新应用分组。

    • 部署应用失败

      1. 查看日志获取部署失败的错误信息。

      2. 修复问题后继续部署应用。

        重新部署

    • 部署应用成功但无法访问应用服务

      1. 排除应用启动延迟因素。

        应用部署成功后请稍等片刻再次访问应用。如果非启动延迟原因导致访问失败,继续执行下一步。

      2. 登录云服务器后执行以下命令,查看应用服务是否正常启动。

        sudo systemctl status aliyun-applicationmanager
        • 正常启动:继续执行下一步。

        • 未正常启动:根据系统服务日志,排查docker run命令失败的原因。

      3. 查看容器日志。

        # 查找docker容器
        sudo docker ps -a | grep applicationmanager
        # 查看容器日志
        sudo docker logs applicationmanager

        如果Docker容器未启动,根据代码仓库的编程语言,修改代码或增加配置文件,并提交至代码仓库。更多信息,请参见基于特定编程语言的应用配置

      4. 在应用概览页签下的快捷操作区域,单击更新应用程序,使用更新后的代码重新部署应用。

    • 其他场景

      • 为了快速且成功地构建和部署应用,建议您在本地进行Buildpacks构建的调试。具体操作,请参见本地调试Buildpacks构建

      • 通过以上方法还是无法自行解决问题,请提交工单,或加入应用管理支持钉钉群(10880003624)反馈问题。

DescribeInstances接口报错SDK.UnknownServerErrorInvaliParameter

  • 报错原因:DescribeInstances接口传入实例数量大于100会报错InvaliParameterSDK.UnknownServerError(414 Request-URI Too Large)。

  • 解决方案

      推荐使用selectTargets (将代码块1改为代码块2)

    •   - Name: getInstanceDescribe
          Action: ACS::ExecuteAPI
          Description:
            en: Query instance type
            zh-cn: 获取实例规格信息
          Properties:
            Service: ECS
            API: DescribeInstances
            Parameters:
              InstanceIds:
                Fn::Jq:
                  - All
                  - .[].InstanceId
                  - '{{ getInstance.instanceIds }}'
          Outputs:
            instanceIds:
              Type: List
              ValueSelector: Instances.Instance[].InstanceId
    •   - Name: getInstanceDescribe
          Description:
            en: Views the ECS instances.
            zh-cn: 获取ECS实例详情
          Action: ACS::SelectTargets
          Properties:
            ResourceType: ALIYUN::ECS::Instance
            Filters:
              - Type: ResourceIds
                ResourceIds:
                  Fn::Jq:
                    - All
                    - .[].InstanceId
                    - '{{ getInstance.instanceIds }}'
          Outputs:
            instanceIds:
              Type: List
              ValueSelector: Instances.Instance[].InstanceId

执行的脚本中的内容和OOS参数定义格式相同,需要原样输出"table {{.Name}}\t{{.MemUsage}}"的内容解决方案

  • 如您想在命令中原样执行

    docker stats --no-stream --format "table {{.Name}}\t{{.MemUsage}}" | sort -k2 -hr | head -n 6

其中"table {{.Name}}\t{{.MemUsage}}", {{}} 这种格式模板会认为是变量,然后作为变量解析导致问题

  • 解决方案:可以将命令修改为

    left="{{"
    right="}}"
    
    docker stats --no-stream --format "table ${left}.Name${right} ${left}.MemUsage${right}" | sort -k2 -hr | head -n 6

执行云助手命令报错414 Request-URI Too Large文本超长解决方案

  • 造成原因:是因为命令太长了,云助手命令最长Base64编码后不能超过24KB

  • 解决方案:可以把命令放到oss 里,然后ossutil下载下来再执行即可