通过OOS批量管理软件,除了可安装阿里云Agent或软件包管理工具的软件,也支持安装我的软件。我的软件支持以rpm、deb、msi等为后缀的常规软件包,通过维护我的软件,您可高效管理各类平台及架构的软件,本文将详细介绍下创建和批量管理我的软件的操作方法。
前提条件
我的软件的安装或卸载,仅支持在网络类型是专有网络的ECS实例下进行,请确保实例在VPC专有网络下。
对ECS实例安装或卸载我的软件前,请确保该实例已被授予实例RAM角色,且其被授予的RAM角色所拥有的权限需包含如下JSON中的权限策略。授予方式可参考配置ECS实例RAM角色。
权限策略JSON脚本:
{
"Version": "1",
"Statement": [
{
"Action": [
"oos:GetTemplate"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"oss:GetObject",
"oss:GetBucketAcl"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
检查网络类型
登录ECS管理控制台。
在左侧导航栏,单击实例与镜像>实例。
确认将安装软件的实例的网络类型是专有网络。
实例RAM角色的授予
首先检查实例的RAM角色授予情况。在实例列表中,单击蓝色的实例ID。
查看实例详情,若RAM角色为空则为实例尚未被授予RAM角色。
单击RAM控制台。
单击权限管理>权限策略>创建权限策略>脚本编辑。并将本文前提条件中的JSON脚本复制粘贴到脚本配置的编辑栏中。
单击继续编辑基本信息>输入名称>单击确定。
单击角色>创建角色,选择可信实体类型为阿里云服务。单击下一步。
角色类型选择普通服务角色,填写角色名称。选择受信服务为云服务器。 单击完成。
单击为角色授权,选择上面步骤中创建的自定义策略,单击确定。
接下来则需将RAM角色授予给目标实例,返回ECS管理控制台的实例列表。
找到将安装软件的实例,单击更多>实例设置>授予或收回RAM角色。
选中已创建的RAM角色。
单击确定,则完成了为实例授予RAM角色。
再次单击蓝色实例ID,则可在实例详情中看到该实例已被成功授予RAM角色。
创建OSS存储空间
登录OSS控制台。 创建一个用来存储我的软件的OOS Bucket。
单击Bucket 列表>创建 Bucket。
输入Bucket 名称。
根据OOS的当前地域,选择地域。其它属性如存储类型等可根据您的需求确定,或直接使用默认值。
单击确定。
我的软件的创建
登录OOS控制台。
单击扩展程序。单击创建扩展自定义程序。
单击软件信息。
输入扩展程序名称,扩展程序描述,版本描述,单击下一步。
上传软件包并配置安装脚本、卸载脚本、平台以及架构。
安装执行脚本示例:
#!/bin/bash ####### 单进程软件包安装脚本模版说明 ######### #1. 此脚本默认在根路径下执行 Linux系统默认为 /root #2. 脚本安装软件执行成功后 默认会删除远程下载的路径 #3. 用户自定义实现 建议在 job_start 下 #4. 需遵循进程ID的存储约束 软件包进程ID标识需存储到指定路径 ####### error code specification ######### # Please update this documentation if new error code is added. # 1 => install fail # 2 => check health fail # 3 => record process id fail # 4 => user shell fail function user_shell() { #用户自定义安装脚本 START $nohup java -jar demo-1.0.0-SNAPSHOT.jar > /demo.log 2>&1 & #用户自定义安装脚本 END } ##### 可在脚本开始运行时调用,打印当时的时间戳及PID,同时记录软件包进程ID到指定路径。 function job_start() { user_shell if [ $? -ne 0 ]; then exit4 else # 此处约束禁止删除 now=$(date +'%Y-%m-%d %H:%M:%S') pid=$! echo "[$now][$pid] job_start" pidPath="/etc/aliyun" if [ ! -d $pidPath ]; then mkdir -p /etc/aliyun echo "创建PID存储路径 $pidPath" fi echo "$pid" > "$pidPath/main_process_id" if [ $? -ne 0 ]; then exit3 fi fi } ##### 在此函数中检查服务是否起来,可以是检查进程,curl http地址等方式 function check_health() { now=$(date +'%Y-%m-%d %H:%M:%S') echo "[$now][$$] check_health" } function exit1() { echo "exit code 1, install fail" exit 1 } function exit2() { echo "exit code 2, check health fail" exit 2 } function exit3() { echo "exit code 3, record process id fail" exit 3 } function exit4() { echo "exit code 4, user shell fail" exit 4 } ##### 如果返回值为0,则认为此执行成功,如果非0,则认为执行失败 function main() { job_start if [ $? -ne 0 ]; then exit1 fi check_health if [ $? -ne 0 ]; then exit2 fi } ##### 触发执行 日志由OOS自动记录 main
卸载执行脚本示例:
#!/bin/bash ##### 可在脚本开始运行时调用,打印当时的时间戳及PID。 function job_stop() { pid=$(cat /etc/aliyun/main_process_id) kill -9 $pid now=`date +'%Y-%m-%d %H:%M:%S'` echo "[$now][$pid] job_stop" } job_stop if [ $? -ne 0 ]; then echo "[$now][$$] job stop failed." exit 1 fi
单击创建。
我的软件的安装
开始安装前请确保目标资源已满足本文的前提条件一节,安装我的软件有两个入口,可直接通过我的软件来安装,也可在批量管理软件中进行安装,本示例通过批量管理软件来完成自定义软件的安装。
单击批量管理软件,单击创建。软件类型选择我的软件。操作内容选择安装,并选择将安装的软件名称。
单击选择实例。本示例通过手动选择实例,并确保选择的是网络类型为VPC的实例。单击立即执行。
确认参数无误后单击确定创建执行。可通过批量管理软件下的任务查看安装详情。
我的软件的卸载
开始卸载前请确保目标资源已满足本文的前提条件一节,单击批量管理软件。
单击创建,软件类型选择我的软件。
操作内容选择卸载,并选择将卸载的软件名称。
单击选择实例。本示例通过手动选择实例,并选中网络类型为VPC的实例。
单击立即执行。
可通过批量管理软件下的任务查看卸载详情。