【问题标题】:Azure Function Set Environment variable javaAzure 函数集环境变量 java
【发布时间】:2020-10-28 11:07:54
【问题描述】:

我正在尝试使用 java 的 Azure 函数。并且能够实现一个简单的功能。

我知道本地的任何环境变量我们都可以在 local.setting.json 中写入,但是我们需要在 Applications Setting 中使用 azure cloud 中的环境变量蔚蓝的云。如果我错了,请纠正我。

现在我的场景

我正在寻找仅从代码中存储环境变量的东西。有没有办法将环境数据存储在 java 代码中的 local.setting.json / applications 设置中,以便此环境值对于其他 azure 函数保持不变。

我想做的一件事是使用数据库。但是我不想创建数据库操作的键值对很少。

我的工具

Eclipse 版本:2019-12 (4.14.0) Azure Functions 核心工具 (3.0.2245) 函数运行时版本:(3.0.13139.0)

请,任何线索都会有所帮助。如果不清楚,请在评论中提问。

谢谢!

【问题讨论】:

    标签: java environment-variables azure-functions


    【解决方案1】:

    据我所知,我们可以从一个函数应用程序中的函数获取存储在应用程序设置中的环境变量但我们无法从其他函数应用程序获取它。所以如果你想从其他函数应用中获取一些键值对,我建议你使用Azure key vault来存储键值对。

    1. Create 一个 azure 密钥保管库和 add a secret 到密钥保管库(秘密是您存储在应用程序设置中的环境变量)。

    在上面的屏幕截图中,我生成了一个以“testkey”为密钥、以“testvalue”为值的密钥。

    2.编辑你的java代码如下:

    import com.microsoft.azure.AzureEnvironment;
    import com.microsoft.azure.keyvault.KeyVaultClient;
    import com.microsoft.azure.keyvault.models.SecretBundle;
    import com.microsoft.azure.credentials.AppServiceMSICredentials;
    
    AppServiceMSICredentials credentials = new AppServiceMSICredentials(AzureEnvironment.AZURE);
    KeyVaultClient keyVaultClient = new KeyVaultClient(credentials);
    SecretBundle secret = keyVaultClient.getSecret("https://xxxxx.vault.azure.net/", "testkey");
    
    return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + secret.value()).build();
    

    https://xxxxx.vault.azure.net/ 是您的密钥保管库的 URL,您可以在 azure 门户的密钥保管库的“概述”选项卡中找到它。

    我们还需要在你的函数项目的pom.xml中添加依赖。

    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure-client-authentication</artifactId>
        <version>1.7.5</version>
    </dependency>
    
    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure-keyvault</artifactId>
        <version>1.2.4</version>
    </dependency>
    

    3. 将您的函数从本地部署到 azure,然后在 azure 门户上启用您的函数的 MSI。

    4. 授予您的函数应用访问密钥保管库的权限,您可以参考此tutorial

    5.之后,在azure portal上运行函数,我们可以得到key("testkey")的值。

    您也可以通过上述步骤在其他功能中获取密钥库。

    【讨论】:

    • 感谢您的回复。并且在此显示示例也有助于理解 Vault 的工作原理。我毫不怀疑我的要求是什么。我需要存储一些键值对。应用程序设置就是为了保持环境变量在那里。场景是我从 api 调用收到的任何键值,我需要将其存储为环境变量,以便每当创建任何其他函数时,它都可以直接使用 System.getenv() 获取数据。我也不太担心在 Vault 中创建 4-5 键值对。是否值得为此创建一个保管库服务。
    • @Duega 我想知道您是否想从一个功能应用程序中的不同功能获取环境?还是来自其他功能应用?
    • @Duega 我想我理解你的要求。您可以在函数代码中请求this api 来更新应用程序设置中的键值。但是您不仅需要在 api 的请求正文中放入一个要添加的键值,而且还需要将所有键值放入,因为请求正文将涵盖应用程序设置中的所有值。相比之下,我认为 Key Vault 更好。
    猜你喜欢
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 2019-12-14
    • 2016-08-11
    • 2019-07-13
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多