//这在一个CloudForms模板中

//这些是参数,从这里我想使用OpsBucketname

AWSTemplateFormatVersion: 2010-09-09
Transform:
  - AWS::LanguageExtensions
  - AWS::Serverless-2016-10-31
Parameters:
  DeploymentHash:
    Type: String
    Description: sample description
  Stage:
    Type: String
    Description: sample description
  OpsBucketName:
    Type: String

//这些是我想要在lambda函数上使用参数的资源,在lambda_Handler上的code:zipfile:-

Resources:
  CognitoUiCustomizationLambdaRole:
  Type: "AWS::IAM::Role"
   // ...
  CognitoSetUiCustomizationLambda:
    Type: "AWS::Lambda::Function"
    Properties:
      Code:
        ZipFile: |
          import boto3
          import logging

          logger = logging.getLogger()
          client = boto3.client('cognito-idp')
          s3 = boto3.client('s3')

          def lambda_handler(event, context):
              logo = s3.get_object(Bucket="${OpsBucketName}",            Key="${BlockPrefix}/assets/frontend/assets/images/logo.png") 

              // other codes here not related to questions ...
      Description: Lambda for custom resource to customize the cognito login page
      FunctionName: !Sub "CognitoLoginCustomization-${NamingSuffix}"
      Handler: index.lambda_handler
      Runtime: python3.9
      Timeout: 10
      Role: !GetAtt CognitoUiCustomizationLambdaRole.Arn

我这里的主要目的是从参数中获取存储桶名称,然后使用它从该存储桶中获取徽标,并在Cogito_idp.setUiCustomization()函数上使用该徽标来设置定制的Cogito登录页面.

在我的函数lambda_handler中,IM使用的是使用语法${OpsBucketName}的OpsBucketName 但在我的CloudWatch日志(log)中,错误是它是空的,但我确信它有一个值,因为成功创建了其他不使用自定义资源的资源,并且成功地使用了该存储桶名称.

我在这里使用该参数的语法正确吗?我在网上找不到和我的问题一样的样品. 非常感谢.

我try 在此场景的文档中搜索,但没有找到.我期待看到一个在lambda函数上使用参数的样例,Code:zipfile使用的是python.

推荐答案

我不确定如何直接从参数实现它,但然后您可以通过引用在CloudForment模板中定义的Parameters来利用内联lambda函数中的Environment个变量.

首先,我们需要创建指向Parameters的环境变量:

LambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Environment:
        Variables:
          DeploymentHash: !Ref DeploymentHash
          Stage: !Ref Stage
          OpsBucketName: !Ref OpsBucketName

然后在您的内联代码中提取这些环境变量

# extracting the env variables first
deploymentHash = os.environ.get('DeploymentHash')
stage = os.environ.get('Stage')
opsbucketname = os.environ.get('OpsBucketName')

def lambda_handler(event, context):
    # your code

Python相关问答推荐

如何在Pygame中绘制右对齐的文本?

在后台运行的Python函数

每个组每第n行就有Pandas

如何在Power Query中按名称和时间总和进行分组

Twilio:CallInstance对象没有来自_的属性'

如何将桌子刮成带有Se的筷子/要求/Beautiful Soup ?

强制venv在bin而不是收件箱文件夹中创建虚拟环境

jit JAX函数中的迭代器

如何根据日期和时间将状态更新为已过期或活动?

使用plotnine和Python构建地块

Python json.转储包含一些UTF-8字符的二元组,要么失败,要么转换它们.我希望编码字符按原样保留

如何让剧作家等待Python中出现特定cookie(然后返回它)?

对整个 pyramid 进行分组与对 pyramid 列子集进行分组

Pandas 有条件轮班操作

如何在虚拟Python环境中运行Python程序?

将输入聚合到统一词典中

如何根据一列的值有条件地 Select 前N个组,然后按两列分组?

合并帧,但不按合并键排序

跳过嵌套JSON中的级别并转换为Pandas Rame

在Admin中显示从ManyToMany通过模型的筛选结果