标签: aws-lambda

如何使用Python在AWS lambda中设置环境变量

我正在尝试使用python在AWS lambda中设置环境变量

最初我有一个环境变量stackname,在lambda配置中没有值.

def lambda_handler(event, context):
    if os.environ["stackname"]:
        print("Not empty")
        print(os.environ["stackname"])
    else:
        print("its empty")
        os.environ["stackname"]="mystack"
        print(os.environ["stackname"])
Run Code Online (Sandbox Code Playgroud)

现在我在这里看到奇怪的间歇性行为,我希望打印出来的第一个

its empty
mystack
Run Code Online (Sandbox Code Playgroud)

每当我执行lambda时,它应该打印出来

Not empty
mystack
Run Code Online (Sandbox Code Playgroud)

最初几次打印

Not empty
mystack
Run Code Online (Sandbox Code Playgroud)

但经过几次或更多的处决后,lambda打印下面很奇怪.

  its empty
    mystack
Run Code Online (Sandbox Code Playgroud)

请建议是否这是设置环境变量以提供一致输出的任何其他更好的方法.

python amazon-web-services aws-lambda

1
推荐指数
1
解决办法
3635
查看次数

DynamoDB:在GSI(全局二级索引)上的查询不返回数据

我正在使用无服务器框架来设置下表:

provider:
  name: aws
  runtime: nodejs6.10
  stage: dev
  region: ap-southeast-1
  environment:
    DYNAMODB_TABLE: "Itinerary-${self:provider.stage}"
    DYNAMODB_COUNTRY_INDEX: country_index
  iamRoleStatements:
    - Effect: Allow
      Action:
        - dynamodb:Query
        - dynamodb:Scan
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
        - dynamodb:DeleteItem
      Resource: "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}"
    - Effect: Allow
      Action:
        - dynamodb:Query
        - dynamodb:Scan
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
        - dynamodb:DeleteItem
      Resource: "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}/index/${self:provider.environment.DYNAMODB_COUNTRY_INDEX}"
resources:
  Resources:
    ItineraryTable:
      Type: 'AWS::DynamoDB::Table'
      DeletionPolicy: Retain
      Properties:
        AttributeDefinitions:
          -
            AttributeName: ID
            AttributeType: S
          -
            AttributeName: Country
            AttributeType: S
        KeySchema:
          -
            AttributeName: ID
            KeyType: HASH
        GlobalSecondaryIndexes: …
Run Code Online (Sandbox Code Playgroud)

amazon-dynamodb aws-lambda serverless-framework

1
推荐指数
1
解决办法
1509
查看次数

AWS S3事件 - 客户端标识

我希望允许多个客户端可以将文件上传到S3存储桶(或存储桶).S3创建事件将触发将向SNS主题添加消息的通知.这有效,但我在确定如何识别哪个客户端上传文件时遇到问题.我可以通过显式检查上传文件的子文件夹/ S3名称来实现此功能,但我更愿意自动将客户端标识符添加为SNS消息的属性.

这可能吗?我的另一个想法是使用Lambda函数作为中间人来添加属性并将其传递给SNS主题,但是如果可能的话我还想在没有Lambda函数的情况下这样做.

amazon-s3 amazon-web-services amazon-sns aws-lambda

1
推荐指数
1
解决办法
269
查看次数

Lambda未连接到ffmpeg

Lambda函数出现问题,该函数试图将ffmpeg用作AWS上的第三方。该函数本身使用ffmpeg.js库,该库在调用函数时会在其函数中生成ffmpeg命令。我通过SSH在实例上安装了ffmpeg,但仍然给我同样的错误

命令失败:ffmpeg -i“ ....... ffmpeg:找不到命令

有什么建议吗?非常感谢

ffmpeg amazon-web-services aws-lambda

1
推荐指数
1
解决办法
1368
查看次数

如何在AWS DynamoDB中存储图像配置文件(jpg文件)和PDF文档?

我正在使用带有Lambda和Dynamo Db的Python Lambda将Spring MVC服务迁移到AWS API Gateway,我拥有可以存储或检索人员图像以及PDF文件报告的终结点,请建议我这是最佳实践将图像和pdf文件存储在AWS中。

非常感谢您的帮助!!

amazon-s3 amazon-web-services amazon-dynamodb aws-lambda

1
推荐指数
1
解决办法
1699
查看次数

私有AWS Lambda API终端节点

有没有办法设置api网关终结点,以使lambda函数只能在内部访问?我不希望它向公众公开。

amazon-web-services aws-lambda

1
推荐指数
1
解决办法
2188
查看次数

用pyarrow vs pyspark创建的拼花文件是否兼容?

我必须分两个步骤将JSON中的分析数据转换为实木复合地板。对于大量现有数据,我正在编写一个PySpark作业,并且正在做

df.repartition(*partitionby).write.partitionBy(partitionby).
    mode("append").parquet(output,compression=codec)
Run Code Online (Sandbox Code Playgroud)

但是,对于增量数据,我计划使用AWS Lambda。PySpark可能对它来说是一个过大的杀伤力,因此我打算为此使用PyArrow(我知道它不必要地涉及到Pandas,但我找不到更好的替代方法)。因此,基本上:

import pyarrow.parquet as pq
pq.write_table(table, outputPath, compression='snappy',
    use_deprecated_int96_timestamps=True)
Run Code Online (Sandbox Code Playgroud)

我想知道由PySpark和PyArrow编写的Parquet文件是否兼容(相对于Athena)?

python parquet aws-lambda amazon-athena pyarrow

1
推荐指数
1
解决办法
1443
查看次数

AWS Lambda函数是否在python中误解了事件字典?

我正在尝试将Google日历api部署到AWS Lambda.由于我在从事件字典中提取值时遇到问题(由POST请求的JSON有效负载中的lambda创建),我创建了一个玩具函数来测试

def handler(event,context):
    a=event.get("type")

    if a=='create':
        return {
                "statusCode": 200,
                "headers": { "Content-Type": "text/plain"},
                #"body": "Event_id"+ str(event_identifier) + " Event Link: " +str(links)
                "body" : str(a)
            }
    else:
        return {
                "statusCode": 200,
                "headers": { "Content-Type": "text/plain"},
                #"body": "Event_id"+ str(event_identifier) + " Event Link: " +str(links)
                "body" : "nope"
            }
Run Code Online (Sandbox Code Playgroud)

在使用以下JSON在Lambda控制台上进行测试时,我得到了正确的响应.

测试有效负载:{"start_time":"2018-01-24T09:00:00","end_time":"2018-01-24T13:00:00","类型":"创建","event_identifier":"pvno ","摘要":"公司","预订电子邮件":"abc@example.com"}

响应:

{
  "body": "create",
  "headers": {
    "Content-Type": "text/plain"
  },
  "statusCode": 200
}
Run Code Online (Sandbox Code Playgroud)

当我从postman(二进制或主体POST)发送相同的有效负载(或在API网关控制台上测试)时,当我从event.get("type")返回值时,我得到"None".

为了进一步解释,如果我尝试获取event.get('body')并将其全部作为字符串返回,我得到以下内容,根据lambda事件应该如何工作,这是不正确的:

{
  "start_time" : "2018-01-24T09:00:00",
  "end_time" : "2018-01-24T13:00:00",
  "type": "create",
  "event_identifier": "pvnoc",
  "summary": "Company", …
Run Code Online (Sandbox Code Playgroud)

python json amazon-web-services aws-lambda aws-api-gateway

1
推荐指数
2
解决办法
6319
查看次数

如何通过命令行更新AWS Lambda代码?

目前,当我更新我的Lambda函数时,我

  1. 在浏览器中打开https://console.aws.amazon.com/lambda/并导航到lambda函数
  2. 选择"代码输入类型:从Amazon S3上传文件"
  3. 输入之前通过命令行上传的S3 URL aws s3 cp [local] [bucket]

有没有办法通过命令行完成所有这些?

bash amazon-web-services aws-lambda

1
推荐指数
1
解决办法
980
查看次数

Lambda @ edge读取正文POST请求

我在AWS Cloudfront上托管了一个静态网站。在路由上,我需要接受POST方法,因为是OAuth服务器的重定向,因此我决定开发Lambda @ edge。

我的想法是在“查看器请求”上注册lambda并拦截POST方法,读取正文并复制标头上的值,以使其可从我的静态网站读取(我知道我可以使用javascript访问Referrer标头)。

我设置了Lambda,可以拦截POST,让所有其他方法都通过。

问题是我找不到读取POST请求正文的方法,我用google搜索它没有结果。

有什么建议我可以做到吗?我必须在Cloudfront端配置任何参数吗?

amazon-web-services amazon-cloudfront aws-lambda

1
推荐指数
2
解决办法
1027
查看次数