【问题标题】:Get environment name in AWS Lambda function in python在 python 中的 AWS Lambda 函数中获取环境名称
【发布时间】:2020-10-13 13:40:57
【问题描述】:

我想获取我的 AWS Lambda 函数正在运行或以编程方式执行的环境名称 (dev/qa/prod)。我不想作为我的环境变量的一部分给出。 我们如何做到这一点?

【问题讨论】:

  • 根据您在同一主题上的previous question您所说的“环境名称”是什么意思?这是会定义的东西,所以 AWS 对此一无所知。每个环境是否在不同的 AWS 账户中运行?如果是这样,Lambda 函数可以查看帐号并使用它来确定“环境”。基本上,“dev/qa/prod”的概念完全是 your 构造,而不是 AWS 原生理解的东西。因此,您的代码需要确定环境。
  • AWS 中的每个环境都有不同的作用。

标签: python python-3.x amazon-web-services aws-lambda development-environment


【解决方案1】:

在 AWS 中,一切都在“生产”中。也就是说,没有“AWS for Dev”或“AWS for QA”的概念。

来创建您声明为开发、质量检查或生产的资源。有些人在不同的 AWS 账户中执行此操作,或者至少为每个环境使用不同的 VPC。

幸运的是,您提到“AWS 中的每个环境都有不同的角色”

这意味着 AWS Lambda 函数可以调用 get_caller_identity() 来获取“有关其凭证用于调用操作的 IAM 用户或角色的详细信息”:

import boto3

def lambda_handler(event, context):
    
    sts_client = boto3.client('sts')
    print(sts_client.get_caller_identity())

返回:

{
    "UserId": "AROAJK7HIAAAAAJYPQN7E:My-Function",
    "Account": "111111111111",
    "Arn": "arn:aws:sts: : 111111111111:assumed-role/my-role/My-Function",
    ...
    }
}

因此,您可以从Arn提取正在使用的角色的名称

【讨论】:

    【解决方案2】:

    您的 lambda 函数可以执行以下操作之一:

    1. def handler_name(event, context): - 从 event 字典中读取数据。调用者必须添加这个参数(因为我不知道什么是 lambda 触发器,所以我无法判断它是否是一个好的解决方案)
    2. 从 S3(或其他存储,如 DB)读取数据
    3. 从 AWS Systems Manager Parameter Store 读取数据

    我不想作为我的环境变量的一部分给出

    为什么?

    【讨论】:

    • 根据我的要求,我不应该将其作为环境变量或输入的一部分。如果我们将 env 作为事件字典提供,那么它将被输入我不应该这样做
    猜你喜欢
    • 2018-09-04
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2020-09-02
    • 2018-05-18
    • 2017-09-21
    相关资源
    最近更新 更多