amazon-web-services - Cloudformation Lambda函数,环境变量不可用,输入不可用

标签 amazon-web-services amazon-ec2 aws-lambda aws-cloudformation

不知道我哪里做错了。下面是我的 lambda 代码和 cloudformation 模板。

下面是我的 lambda 函数:

import os
import boto3


def quickstart_lambda_handler(event, context):
    print("event={}".format(event)) # nothing shows as k1:v1
    print(os.environ) # nothing show in output as var1
    print("environment variable var1: " + os.environ['var1'])

    json_str = "{\"a1\":\"b1\"}"
    bucket_name = "my-s3-bucket"
    file_name = "qs.json"
    s3_path = "cf-quickstart/" + file_name
    s3 = boto3.resource("s3")
    s3.Bucket(bucket_name).put_object(Key=s3_path, Body=json_str)

    print("object stored in s3")
    return s3_path

我的云形成模板如下,用于 lambda 函数和关联规则。

"QSLERole": {
  "Description" : "Quick Start Lambda Execution Role",
  "Type": "AWS::IAM::Role",
  "Properties": {
    "RoleName" : "QSLERole",
    "AssumeRolePolicyDocument": {
      "Version" : "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": [ "lambda.amazonaws.com" ]
          },
          "Action": [ "sts:AssumeRole" ]
        }]
    },
    "Path": "/",
    "Policies": [
      {
      "PolicyName": "root",
      "PolicyDocument": {
        "Version": "2012-10-17",
        "Statement": [{
          "Effect": "Allow",
          "Action": ["logs:*"],
          "Resource": "arn:aws:logs:*:*:*"
        },
        {
          "Effect": "Allow",
          "Action": "s3:PutObject",
          "Resource": "*"
        }
        ]
      }
    }]
  }
},
"QSLambdaF": {
  "Description" : "Quick Start Lambda Function",
  "Type": "AWS::Lambda::Function",
  "Properties": {
    "Code": {
      "S3Bucket": "my-s3-bucket",
      "S3Key": "generate-quickstartjson.zip"
    },
    "Handler": "generate-quickstartjson.quickstart_lambda_handler",
    "Runtime": "python2.7",
    "Timeout": "30",
    "Environment" : {
      "Variables" : {
        "var1" : "var1 value"
      }
    },
    "Role": {
      "Fn::GetAtt": [
        "QSLERole",
        "Arn"
      ]
    }
  }
},
"ScheduledRule": {
  "Description" :"Cloud Watch Quick Start Event Rule",
  "DependsOn" : [
    "QSLambdaF","EC2Instance"],
  "Type": "AWS::Events::Rule",
  "Properties" : {
    "Description" : "CloudWatch Event for generating output",
    "ScheduleExpression" : "rate(1 minute)",
    "State": "ENABLED",
    "Targets" : [
      {
        "Arn": { "Fn::GetAtt": [
          "QSLambdaF", "Arn"] },
        "Detail" : {
          "test" : "value"
        },
        "Input": "{\"k1\":\"v1\"}",
        "Id" : "QSScheduledRuleV1"
      }
    ]
  }
},
"PEILambda": {
  "Description" : "Permission For Events To Invoke Lambda Function",
  "Type": "AWS::Lambda::Permission",
  "Properties" : {
    "FunctionName": { "Ref": "QSLambdaF"},
    "Action": "lambda:InvokeFunction",
    "Principal": "events.amazonaws.com",
    "SourceArn": { "Fn::GetAtt": [
      "ScheduledRule", "Arn"] }
  }
},

--- 下面使用安全组创建 ec2 实例

在 lambda lambda 中,环境变量不可用,输入字段也不可用。

"Input": "{\"k1\":\"v1\"}",

请告诉我我哪里错了。感谢您的帮助。

最佳答案

按原样运行良好。我使用了错误的模板文件:))

关于amazon-web-services - Cloudformation Lambda函数,环境变量不可用,输入不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53623102/

相关文章:

amazon-web-services - AWS Lambda 函数可以在本地运行时导入模块,但在部署时不能

amazon-web-services - Cloudformation资源创建/删除超时时间

linux - k8s 检查 pod securityContext 定义

amazon-web-services - 设置 Ansible 服务器以使用动态 list 管理多个 AWS 账户?

amazon-web-services - 在 Red Hat ami-7.5 上自动化网络接口(interface)相关配置

amazon-web-services - 如何在 Amazon-Lex 中使用图像进行响应

amazon-web-services - HttpApi 与 AWS::ApiGatewayV2::integration 如何覆盖响应正文

amazon-web-services - Cloudfront 分配如何使用 AWS KMS key 来获取静态加密的 S3 镜像?

amazon-web-services - 如何使用ClusterIP服务将Lambda的GET/POST请求发送到Pod

SSL 验证失败 - knife ec2 with chef 12