设置Compute Engine VM的环境变量

时间:2018-08-27 14:03:09

标签: google-cloud-platform environment-variables virtual-machine google-compute-engine embedded-resource

我需要在Google Compute Engine的虚拟机中设置一个环境变量。我需要设置的变量称为"GOOGLE_APPLICATION_CREDENTIALS",根据Google文档,我需要将其值设置为json文件的路径。我有两个问题:

1:我可以在GCP的Google Compute Engine界面内设置此变量吗?

2:我可以使用System.Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", Resources.googlecredentials.credentials);吗?每当我尝试在本地计算机上设置此变量时,我都会使用此技术,但会将值设置为文件(本地目录)的路径。但是,因为我现在正在使用虚拟机,所以我想知道是否可以将环境变量设置为资源文件的实际内容?有利的是,这使我可以将凭据嵌入到实际的应用程序本身中。

欢呼

3 个答案:

答案 0 :(得分:1)

将您的凭据临时存储在文件中

$ HOME / example / g-credentials.json

{
  "foo": "bar"
}

然后将其作为字符串上传到您的GCE项目元数据

gcloud compute project-info add-metadata \
    --metadata-from-file g-credentials=$HOME/example/g-credentials.json

您可以通过搜索metadata在云控制台上查看GCE项目元数据,也可以使用gcloud来查看它

gcloud compute project-info describe

然后在虚拟机启动脚本中设置环境变量/加载配置

$ HOME / example / startup.txt

#! /bin/bash

# gce project metadata key where the config json is stored as a string
meta_key=g-credentials
env_key=GOOGLE_APPLICATION_CREDENTIALS
config_file=/opt/g-credentials.json
env_file=/etc/profile

# command to set env variable
temp_cmd="export $env_key=$config_file"

# command to write $temp_cmd to file if $temp_cmd doesnt exist w/in it
perm_cmd="grep -q -F '$temp_cmd' $env_file || echo '$temp_cmd' >> $env_file"

# set the env var for only for the duration of this script.
# can delete this if you don't start processes at the end of
# this script that utilize the env var.
eval $temp_cmd

# set the env var permanently for any SUBSEQUENT shell logins
eval $perm_cmd

# load the config from the projects metadata
config=`curl -f http://metadata.google.internal/computeMetadata/v1/project/attributes/$meta_key -H "Metadata-Flavor: Google" 2>/dev/null`

# write it to file
echo $config > $config_file

# start other processes below ...

示例实例

gcloud compute instances create vm-1 \
    --metadata-from-file startup-script=$HOME/example/startup.txt \
    --zone=us-west1-a

答案 1 :(得分:1)

您还可以编辑用户的个人资料:

nano ~/.bashrc

甚至是系统范围内的/etc/profile/etc/bash.bashrc/etc/environment

然后添加:

export GOOGLE_APPLICATION_CREDENTIALS=...

Custom Metadata也可以使用,而特定于GCE

答案 2 :(得分:0)

  1. 是的,您可以在RDP/SSH session中进行设置。
  2. 不,您应该根据documentation在变量中设置路径,或者,有一些代码示例将服务帐户路径收集在变量中以在应用程序中使用凭据。