如何使用Serverless Devs部署golang进程,golang进程启动的时候需要访问config.yaml,怎么挂载这个配?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您可以使用Serverless Devs提供的配置文件来部署golang进程,并且可以通过挂载config.yaml文件来让进程访问配置文件。具体操作步骤为:在Serverless Devs配置文件中添加挂载配置文件的参数,例如:
- name: my-golang-function
  runtime: custom
  handler: main
  codeUri: ./
  customContainerConfig:
    image: registry.cn-hangzhou.aliyuncs.com/aliyunfc/golang:1.13.8
    command: ["./main"]
    args: ["--config", "/mnt/auto/config.yaml"]
    mountPoints:
      - sourceVolume: my-config-volume
        destinationPath: /mnt/auto
  events:
    - http:
        path: /hello
        method: GET
其中,mountPoints参数用于挂载配置文件,sourceVolume参数指定配置文件所在的本地目录,destinationPath参数指定配置文件在容器中的挂载路径。在golang进程启动时,可以通过--config参数指定配置文件的路径,例如:./main --config /mnt/auto/config.yaml。
可以通过在Serverless Devs的资源配置文件中指定golang进程启动需要访问的config.yaml文件,然后将该文件挂载至golang进程所在的容器中,以便golang进程能够访问到该配置文件。
app_name: "my_app"
app_port: 8080
db_host: "localhost"
db_port: 3306
db_name: "my_db"
db_user: "root"
db_pass: "password"
ROSTemplateFormatVersion: "2015-09-01"
Transform: "Aliyun::Serverless-2018-04-03"
Resources:
  my_golang_function:
    Type: "Aliyun::Serverless::Function"
    Properties:
      Handler: "my_golang_function"
      Runtime: "custom"
      CodeUri: "./"
      MemorySize: 128
      Timeout: 60
      EnvironmentVariables:
        CONFIG_PATH: "/mnt/conf/config.yaml"
      Mounts:
        - type: bind
          source: ${PWD}/config.yaml
          target: /mnt/conf/config.yaml
在上述代码中,我们创建了一个名为
my_golang_function的Serverless函数,并指定了它的处理程序为my_golang_function。我们使用了custom作为golang进程的运行时,并将代码目录./作为代码包上传至阿里云函数计算平台。我们还指定了该函数执行的内存大小和最长执行时间。为了将config.yaml文件挂载到golang进程所在的容器中,我们使用了
EnvironmentVariables和Mounts两个配置项。其中,EnvironmentVariables用于传递一些环境变量至容器中,我们指定了CONFIG_PATH环境变量的值为/mnt/conf/config.yaml,即我们配置文件的挂载路径;而Mounts则用于在容器中挂载一些文件或目录,我们指定将当前目录下的config.yaml文件挂载到容器中的/mnt/conf/config.yaml路径下。
package main
import (
	"fmt"
	"io/ioutil"
	"log"
	"os"
)
func main() {
	confPath := os.Getenv("CONFIG_PATH")
	content, err := ioutil.ReadFile(confPath)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(string(content))
}
我们通过调用
os.Getenv函数获取环境变量CONFIG_PATH的值,并通过ioutil.ReadFile函数读取指定路径下的文件内容。最后,我们使用fmt.Println函数将内容输出至控制台。在这个例子中,我们将读取并输出config.yaml文件的全部内容。实际上,在真实的golang应用中,我们可以根据需要自己解析、使用该配置文件。
给你个模板:https://github.com/VinerFiner/start-cloudreve
此答案来自钉钉群“阿里函数计算官网客户"