Serverless 架构通过将应用程序中的服务之间的通信请求转移到服务提供商来实现更好的负载均衡和弹性。在 Serverless 架构中,服务提供商会尽可能减少操作和管理。因此,需要使用一种适合 Serverless 架构的管理方法来管理环境变量。
环境变量的作用
在 Web 开发中,环境变量相当于存储在运行应用程序的计算机上的全局变量。环境变量提供了一种存储和访问秘密或敏感信息的方式,例如数据库密码、API 密钥等。
同时,环境变量也可以用于存储应用程序的不同配置,例如开发环境、测试环境或生产环境的集群名称等。这些环境变量可以灵活地根据不同环境进行修改。
Serverless 中的环境变量管理
在 Serverless 架构中,环境变量管理因其与 Cloud Function 的集成而变得更为复杂。Cloud Function 是实现 Serverless 的基本服务,它通常与 Serverless 框架集成在一起,监听另一个云服务的事件并执行预定义的功能。
以下是 Serverless 中环境变量的管理方法:
环境变量配置文件
在 Serverless 架构中,使用特定的环境变量配置文件来管理环境变量。这个配置文件通常称为 serverless.yml,在其中定义了应用程序所需的环境变量。这个文件可以与源代码一起存放在源代码控制库中,以便团队成员同步查看和修改。
以下是 serverless.yml 中环境变量配置的示例代码:
-- -------------------- ---- ------- -------- --------- --------- ----- --- -------- --------- ------ --- ------- --------- ------------ -------- ----- ------ ----------- -------------------------------------------------------
这个示例代码演示了如何在 serverless.yml 中定义环境变量。在示例代码中,应用程序需要两个环境变量 MESSAGE 和 SECRET_KEY。其中,MESSAGE 是一个简单的字符串值而 SECRET_KEY 则需要从 json 文件中获取。
云服务提供商的环境变量服务
大多数云服务提供商会为 Serverless 架构提供专门的环境变量服务。在这种情况下,可以通过云服务提供商的控制面板或 API 设置环境变量。
以下是使用 AWS Lambda 的环境变量设置示例代码:
import os def handler_name(event, context): message = os.environ['MESSAGE'] secret_key = os.environ['SECRET_KEY'] return f'{message} This is the secret key {secret_key}'
在这个示例代码中,我们为 MESSAGE 和 SECRET_KEY 设置环境变量,并在 Lambda 函数中读取这些环境变量的值。
环境变量加密与解密
内容敏感或包含凭据的环境变量必须进行加密,以确保安全性。现代的 Serverless 服务提供商通常都支持一种称为 KMS(Key Management Service)的服务。KMS 可以用于加密和解密敏感数据。
以下是使用 KMS 加密和解密环境变量的示例代码:
-- -------------------- ---- ------- ------ ----- ------ -- --- - ------------------- --- --------------------- ------ ------------ --------------------------- ----------------------- ------------------- --- --------------------- ------ ------------ ------------------- ----------------------- --- ------------------- --------- ------- - ------------------------------------------------ ---------- - --------------------------------------------------- ------ ----------- ---- -- --- ------ --- -------------
在这个示例代码中,我们使用 AWS KMS 对 ENCRYPTED_MESSAGE 和 ENCRYPTED_SECRET_KEY 环境变量进行加密。同时,在 Lambda 函数中使用 decrypt_env_var() 函数将加密的环境变量还原为明文。
总结
Serverless 架构的环境变量管理可以有多种方法。无论使用哪种方法,要确保环境变量与配置文件和源代码分离,并保护敏感环境变量的安全性。加密与解密环境变量是必不可少的。同时,要确保环境变量在不同部署环境中得到正确的管理,从而保证应用程序正常运行。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6494461d48841e98941c42de