应用上架IBM云目录

IBM Cloud上有众多应用和服务,包括IaaS,PaaS以及SaaS,其中有非常多的应用和服务都是由第三方提供的服务,一些是后端服务运行在第三方自己的环境中,在IBM Cloud上暴露服务接口提供给用户使用,一些则是后端服务和服务端口都运行在IBM Cloud环境中。IBM Cloud的“Partner Center”板块,为我们将自己的软件和服务提供给其他用户使用的方式提供了方便快捷的方式,使我们能够快速方便的将我们的软件或服务上架到IBM Cloud上,能够让更多的云用户来使用我们提供的服务。当然,您的这种软件和服务可以是收费形式的,用户使用您的软件和服务需要支付费用给您。

下面我们将通过一个Terraform的例子,上架一个客户自定义的应用来对整个上架流程做一个介绍,同时还会涵盖如何使用IBM Schematics进行VPC和Classic环境下对VSI的自动Provision工作。

让我们先从Terraform Code说起,这一块是Infrastructure as Code的核心,IBM Cloud上的Schematics的底层也是使用Terraform和Ansible来进行IaaS资源的Provision的,这里会有一个简单的例子,若要参考详细IBM Cloud Schematics使用,请参考下面链接:。

使用IBM Cloud Schematics部署云资源_koolincn的专栏-CSDN博客

我们这里的例子是,客户自己的应用是安装部署在一个虚拟机环境中的,并且已经做好了相应的预配置,同时对已经安装好软件和完成预配置的虚拟机做了镜像,这个镜像就可以被用来部署出新的环境,只要最终用户有使用这个镜像中的软件的许可,他就可以正常使用其功能和服务。

在进行应用上架之前,我们有一些准备工作需要完成:

  1. 准备好我们用于交付云资源的Terraform代码,在我们的例子里是部署一个虚拟机到VPC环境,虚拟机使用的模板是我们安装好软件的镜像文件。
  2. 当然,虚拟机镜像也是其中必不可少的一个环节,这个镜像可以通过IBM Cloud上经典基础架构下的虚拟机生成,然后导出到IBM的对象存储,再导入到VPC下的客户镜像中,供VPC生成虚拟机使用。
  3. 后面进行虚拟机部署的时候,好需要提前创建好VPC和相应的子网,其中包括用于后面登录系统的ssh key。

我们如果将应用发布成公共访问的话,需要将虚拟机镜像也设置成公共可访问,我们在下面来进行逐一说明。

第一部分,准备

Terraform代码部分

Imagemap.tf(每个区域下的系统镜像的ID)

locals {

        imagemap = {

                     "us-south" = "xxxxxx"

                     "us-east" = "xxxx"

                     "eu-gb" = "xxx"

                     "eu-de" = "xxx"

                     "jp-tok" = "r022-ae5c750b-5295-4c05-9de1-d52e3ebxxxxx"

                     "jp-osa" = "xxxxxx"

                     "au-syd" = "xxxxxx"

                     "ca-tor" = "xxxxxx"

                  "br-sao" = "xxxxxxx"

        }

}

variables.tf(定义Terraform代码中用到的变量)

#################################################################

# subnet_id - The ID of the subnet that the virtual server instance uses.

#################################################################

variable "subnet_id"{

  default = "0717-70823db2-b395-444b-b9f6-c803980xxxxx"

  description = "The ID of your subnet within the VPC that the virtual server instance uses. Required for users to specify.(The default value is just for FYI)"

}



##################################################################

# ssh_key_name - The name of the public SSH key used to create the virtual server instance.

##################################################################

variable "ssh_key_name" {

  default     = ""

  description = "The name of the public SSH key to use when creating the virtual server instance. Required for users to specify."

}



##################################################################

# vsi_instance_name - The name of the virtual server instance.

##################################################################

variable "vsi_instance_name" {

  default     = "zhut-product-00"

  description = "The name of the virtual server instance. Required for users to specify."

}



##################################################################

# vsi_profile - The profile of compute CPU and memory resources to use when creating the virtual server instance.

##################################################################

variable "vsi_profile" {

  default     = "cx2-2x4"

  description = "The profile of compute CPU and memory resources to use when creating the virtual server instance. To list available profiles, run the `ibmcloud is instance-profiles` command."

}



variable "region" {

  default     = ""

  description = "The region in which the VPC instance is located. Required for users to specify.(us-south;us-east;eu-de;eu-gp;au-syd;jp-tok;jp-osa;br-sao;ca-tor)"

}



##################################################################

# api_key - The ibm_cloud_api_key which should be used only while testing this code from CLI.

# It is not needed while testing from Schematics.

##################################################################

/*variable "api_key" {

  default     = ""

  description = "The user API key."

}*/



##################################################################

# vsi_security_group - The security group to which the virtual server instance interface belongs to.

##################################################################

variable "vsi_security_group" {

  default     = ""

  description = "The name of the security group that is created. Required for users to specify."

}



variable "TF_VERSION" {

 default = "0.12"

 description = "The version of the Terraform engine that's used in the Schematics workspace."

}

main.tf(定义需要交付的资源)

provider "ibm" {

  /* Uncomment ibmcloud_api_key while testing from CLI */

  //ibmcloud_api_key      = var.api_key

  generation            = 2

  region                = var.region

  ibmcloud_timeout      = 300

}



##################################################################

# Read/validate Region

##################################################################

data "ibm_is_region" "region" {

  name = var.region

}



##################################################################

# Read/validate sshkey

##################################################################

data "ibm_is_ssh_key" "vsi_ssh_pub_key" {

  name = var.ssh_key_name

}



##################################################################

# Read/validate vsi profile

##################################################################

data "ibm_is_instance_profile" "vsi_profile" {

  name = var.vsi_profile

}



##################################################################

#  - Read/validate subnet

##################################################################

data "ibm_is_subnet" "vsi_subnet"{

   identifier = var.subnet_id

}



##################################################################

# Create security group and rules

##################################################################

//security group

resource "ibm_is_security_group" "vsi_security_group" {

  name           = var.vsi_security_group

  vpc            = data.ibm_is_subnet.vsi_subnet.vpc

  resource_group = data.ibm_is_subnet.vsi_subnet.resource_group

}



//security group rule to allow ssh

resource "ibm_is_security_group_rule" "vsi_sg_allow_ssh" {

  depends_on = [ibm_is_security_group.vsi_security_group]

  group     = ibm_is_security_group.vsi_security_group.id

  direction = "inbound"

  remote     = "0.0.0.0/0"

  tcp {

    port_min = 22

    port_max = 22

  }

}



//security group rule to allow all for inbound

resource "ibm_is_security_group_rule" "vsi_sg_rule_in_all" {

  depends_on = [ibm_is_security_group_rule.vsi_sg_allow_ssh]

  group     = ibm_is_security_group.vsi_security_group.id

  direction = "inbound"

  remote    = "0.0.0.0/0"

}



//security group rule to allow all for outbound

resource "ibm_is_security_group_rule" "vsi_sg_rule_out_all" {

  depends_on = [ibm_is_security_group_rule.vsi_sg_rule_in_all]

  group     = ibm_is_security_group.vsi_security_group.id

  direction = "outbound"

  remote    = "0.0.0.0/0"

}



##################################################################

# Create CentOS 7.x virtual server.

##################################################################

//vsi instance

resource "ibm_is_instance" "sample_vsi" {

  depends_on = [ibm_is_security_group_rule.vsi_sg_rule_out_all]

  name           = var.vsi_instance_name

  image          = local.imagemap[var.region]

  profile        = data.ibm_is_instance_profile.vsi_profile.name

  resource_group = data.ibm_is_subnet.vsi_subnet.resource_group



  primary_network_interface {

    name = "eth0"

    subnet = data.ibm_is_subnet.vsi_subnet.id

    security_groups = [ibm_is_security_group.vsi_security_group.id]

  }

 

  vpc  = data.ibm_is_subnet.vsi_subnet.vpc

  zone = data.ibm_is_subnet.vsi_subnet.zone

  keys = [data.ibm_is_ssh_key.vsi_ssh_pub_key.id]

}



##################################################################

# bind floating ip to virtual server.

##################################################################

  resource "ibm_is_floating_ip" "fip1" {

  name   = "koo-fip1"

  target = ibm_is_instance.sample_vsi.primary_network_interface[0].id

}

镜像

系统镜像的生成步骤如下:

其实VPC下的custom image可以有几种方式导入,可以直接是从VPC中虚拟机的启动盘导入,可以从块存储导入,也可以从对象存储导入镜像。

下面我们这里使用从对象存储这种方式导入,这先需要我们去准备系统镜像可以参考下面步骤。(如果已经有系统镜像存放在对象存储上,则可以直接按上图的方式进行导入即可)。

到经典基础架构下,找到你的虚拟机。

然后在menu->classic infrastructure->manage->images处可以看到你创建的虚拟机镜像。

然后可以对image进行操作,如导出到对象存储之类的。

然后再回到VPC中,

我们点击导入进VPC下的镜像文件,记下镜像的ID。

更新到Terrraform代码的imagemap.tf文件中,不同区域会有不同的ID。

若需要将镜像文件发布到公共可见,参考下面步骤,若仅是本账号下测试使用,可以忽略这块内容:

当您准备公开您的image时,请将其导入到您希望应用可用的每个区域。可以使用/regions API导出区域端点URL,如以下示例所示:

(在进行API调用之前,您需要获取一个承载令牌。一种方法是使用命令ibmcloud iam oauth token来获取。)

export iam_token=<your bearer token>

curl -k -sS -X GET "https://us-south.iaas.cloud.ibm.com/v1/regions?generation=2&version=2021-02-26" -H "Authorization: Bearer $iam_token" | jq .

(注:这里可能需要你安装一下jq解释器)

  • 将API端点更改为所需区域:

export api_endpoint="https://us-south.iaas.cloud.ibm.com"

  • 将image ID设置为上一示例中为要检查的区域(api_端点)返回的值

image_id=<image id returned for this region>

  • 运行下面命令将image发布成公共可访问:

curl  -X PATCH "$api_endpoint/v1/images/$image_id?generation=2&version=2021-02-26"  -H "Authorization: Bearer $iam_token" -d '{"visibility": "public"} ' | jq .

VPC

VPC和相应子网和ssh key的创建这里就不缀述了,大家一看就会操作。

第二部分,上架

然后可以开始我们的应用上架步骤了。

打开菜单栏,找到partner center进入。

点选Sell旁边的扩展按钮,点选My products,首次进来需要进行一些简单设置,如输入公司名称,创建私有目录以及创建一个用于上架应用的访问组。如下图所示:

点击创建即可进行应用上架的步骤:

进入到应用设置详细页面:

这里我们先转到“Software”页,点击下面的import,上载我们的Terraform代码:

注:Terraform代码需要生成source code并打包成tgz或tar.gz文件。

复制source code的url地址到下面的Source URL中,并选取你的应用部署的类型,是Helm,Terraform还是其他,我们这里的例子是Virtual Server image with Terraform, 输入完产品版本后即可点击添加。

选取应用部署出来的类型:

进入到下一步,配置部署细节,点击添加部署参数值,这里会导入Terraform代码里面定义的变量:

导入需要用户在部署前输入设置的变量。下面的TF_VERSION可以不用导入,因为这个参数其实不用用户输入,使用代码中的默认值即可。

然后点击下一步,添加用户自己的Agreement(若需要的话)

此处会加载Terraform代码中的README内容,若需要修改的话,可以点击右上方的编辑按钮进行修改。

接下来进入到产品的验证阶段,我们这里的例子是会调用IBM Cloud Schematics创建workspace进行虚拟机的部署。

输入部署时需要的参数:

点击Validate,它会进行实际资源的部署,等待成功之后,我们可以将改产品发布到私有产品目录。

点击这里的查看日志,跳转到Schematics的workspace页面,可以查看运行日志。

待验证成功后,我们就可以在右上方的action处选择发布到本账号下了。

这样,这个产品就在本账号下Ready了,然后我们需要完成之前页面上的其他form和内容之后,可以提交给IBM后端进行review,review通过后就可以发布成公共可访问的产品啦。

由于我们这个是测试例子,所以就不做发布到公共访问的介绍了。

这里的Prices,我们可以添加自己的Plan

然后我们可以回到IBM Cloud的catalog页面,在这里我们可以看到这里多了一个我们自己创建的私有目录,在我们的私有目录里面可以找到我们刚刚发布的产品,我们选中之后,就可以进行部署了。

至此,我们的产品在IBM Cloud上就发布成功了,发布成公共可访问后,其他用户就可以在IBM Cloud的Catalog里面找到我们的应用,然后部署。

感谢各位同学的阅读,也希望你能提出宝贵意见。

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值