标签: aws-lambda

用于内部服务的不带负载均衡器的 AWS ECS Fargate

我正在尝试使用 cloudformation 作为带有 Fargate 的 ECS 服务加载一些休息服务。我不想要这些服务的公共域名。我将通过我的 AWS Lambda 函数在内部访问它们。我意识到AWS Fargate需要负载均衡,负载均衡器需要证书,证书需要域名。可能我遗漏了一些东西,但我尝试在没有负载均衡器的情况下加载 AWS Fargate,但无法从 Lambda 访问它。

问题是; 如何在没有负载均衡器的情况下使用 Fargate 在 ECS 上运行我的服务?

amazon-ecs amazon-elb aws-lambda aws-fargate

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

AWS lambda (python):安装 psycopg2 的 Dockerfile?

我正在尝试使用本教程将 docker 容器上传到 AWS ECR for Lambda。我的问题是我的 python 脚本使用 psycopg2,并且我不知道如何在 Docker 映像中安装 psycopg2。我知道我需要postgres-devel库libq和 gcc 来编译,但它仍然不起作用。

我的要求.txt:

pandas==1.3.0
requests==2.25.1
psycopg2==2.9.1
pgcopy==1.5.0
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

FROM public.ecr.aws/lambda/python:3.8

WORKDIR /app

COPY my_script.py .
COPY some_file.csv .
COPY requirements.txt .

RUN yum install -y postgresql-devel gcc*
RUN pip install -r requirements.txt

CMD ["/app/my_script.handler"]

Run Code Online (Sandbox Code Playgroud)

构建、运行图像并在本地测试 lambda 函数后,我收到以下错误消息:

psycopg2.OperationalError: SCRAM authentication requires libpq version 10 or above

所以我认为容器的 postgres(-devel) 版本错误。但我不确定如何安装正确的版本?关于将 psycopg2 脚本部署到 docker 以使用 lambda 有什么技巧吗?

python psycopg2 amazon-web-services docker aws-lambda

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

AWS .NET Core 3.1 模拟 Lambda 测试工具,无法读取 AppSettings.json 或 App.config

使用 AWS .NET Core 3.1 模拟 Lambda 测试工具,我无法从 appsettings.json 甚至 app.config 文件中读取 lambda 函数。

这是两个独立的方法,当我尝试获取返回值时,每个方法都返回 null。

在单独的 .NET Core 3.1 控制台应用程序中,这些相同的方法可以完美地工作。

那么,运行时的“模拟 Lambda 测试工具”是否有某种原因不允许我的代码从设置为始终复制的 JSON 或 App.config 文件中读取?这是否意味着打包并上传到 AWS Lambda 控制台后将无法在 AWS 上运行?

我的情况不允许我将 Lambda 环境变量用于本地数据库连接字符串。我无法将连接字符串存储在代码中,因为它必须来自 .json 或 .config 文件。

对此有什么想法或智慧吗?

代码:

方法一

// requires: System.Configuration.ConfigurationManager
var connString = System.Configuration.ConfigurationManager.AppSettings["connectionString"];

/*
Reads App.config:

     <?xml version="1.0" encoding="utf-8" ?>
     <configuration>
     <appSettings>
     <add key="connectionString" value="Server=127.0.0.1;Port=0000;Database=some-db;User Id=some-user;Password=some-password;" />
     </appSettings>
     </configuration>
*/
Run Code Online (Sandbox Code Playgroud)

方法2

// requires: Microsoft.Extensions.Configuration; Microsoft.Extensions.Configuration.Json;

public class DbConfig
{
     public string …
Run Code Online (Sandbox Code Playgroud)

c# json app-config amazon-web-services aws-lambda

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

无服务器 lambda 全局环境变量

我正在使用无服务器,并且试图弄清楚如何重写此 serverless.yml 文件,这样我就不会重复每个函数的环境变量。有没有办法全局设置环境变量?

service: test-api
frameworkVersion: ">=1.2.0 <2.0.0"
provider:
  name: aws
  runtime: nodejs12.x
  timeout: 30
  stage: dev
  memorysize: 2048
  region: us-east-2
  logRetentionInDays: 21

functions:
  doCreate:
    handler: functions/do-create.handler
    environment:
      DB_PORT: ${ssm:/${self:custom.stage}/db_port}
      DB_URL: ${ssm:/${self:custom.stage}/db_url}
      API_KEY: ${ssm:/${self:custom.stage}/api_key}
      ENV: "${self:custom.stage}"
      SEARCH_ARN: ${ssm:/${self:custom.stage}/search_arn}
  doUpdate:
    handler: functions/do-update.handler
    environment:
      DB_PORT: ${ssm:/${self:custom.stage}/db_port}
      DB_URL: ${ssm:/${self:custom.stage}/db_url}
      API_KEY: ${ssm:/${self:custom.stage}/api_key}
      ENV: "${self:custom.stage}"
      SEARCH_ARN: ${ssm:/${self:custom.stage}/search_arn}
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-lambda serverless-framework serverless

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

elasticache 使用 AWS-SDK 从 lambda 读取和写入数据

我使用 NodeJS 作为我的 lambda 函数。目前我正在使用 NPM 包来连接 Redis 并将数据读/写到 Elasticache 中。但它给出了内部服务器错误。在 aws-sdk NPM 包中也有一些与elasticache相关的方法,但我找不到任何方法来设置elasticache和从elasticache获取值。我应该为此做什么?

amazon-web-services redis aws-sdk aws-lambda

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

AWS Lambda with Node - 将文件保存到 Lambda 的文件系统中

我需要将从 S3 获取的文件保存到 Lambda 的文件系统中,我想知道是否可以简单地使用fs.writeFileSync?

或者我是否仍然必须使用context此处描述的功能: How to Write and Read files to Lambda-AWS with Node.js

(试图找到更新的例子,但找不到)。

推荐的方法是什么?

请指教。

fs amazon-web-services node.js aws-lambda

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

为什么我的 Lambda 函数在一次调用中发送了两次 SQS 消息?

我只需通过一次调用将一条消息传递到标准(不是 FIFO,但与问题无关)SQS 队列。

但是,下面的代码通过 1 个调用发送 2 条消息。

const AWS = require('aws-sdk')
AWS.config.update({region: process.env.AWS_REGION})
const sqs = new AWS.SQS({apiVersion: '2012-11-05'});

async function sendToSQSEvent(body,attributes=null){
    var m_body 
    if (attributes != null)
    {
            m_body = {
                body : body,
                attributes : attributes
                };
    }
    else{
        m_body = body;
    }
    m_body = JSON.stringify(m_body);
            
 var params = {
    //  DelaySeconds: 0,   <-- i try but only delay reception 
      MessageAttributes: {
        "Title": {
          DataType: "String",
          StringValue: "TIME_OUT"
        },
        "Author": {
          DataType: "String",
          StringValue: …
Run Code Online (Sandbox Code Playgroud)

javascript amazon-sqs amazon-web-services es6-promise aws-lambda

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

S3 密钥不在 S3 事件通知中

您好,我目前在 s3 存储桶中设置了事件通知。该通知被发送到SNS 主题,然后发送到SQS 队列,最后发送到lambda。

我的最终目标是让 lambda 读取事件通知 json 并解析出存储桶和密钥。

问题是,当我使用 python 打印出“ event ”对象时,我在 json 中看到了存储桶名称,但没有看到键。我应该如何/在哪里进行调试以弄清楚发生了什么?我记得在以前的实现中看到过 json 中的密钥

json 看起来像:

{
'Records': [{
    'messageId': '15d42178-c59c-4f3a-8efa-cce8a20acd5b',
    'receiptHandle': 'AQEBnPN7q4+jLFQfExOytZYH69w4kvI4ohjJGFqUqOAvCjRHMfbFFvgEeLVjonZ5q4GAYyzLzDSRQmZv3+YTvE3VYqKmU+Nt0rgX824LoMMkKKMuSWBT6c1a0X5dXRJRzFaOKjpniONRg5Gdm1V9I/7mW0x+Zfi0PXr5cQZXVA1NNUdJ4tIkwtpuC+Rh/dbGFQmAo6fQDuCnpzRW1NKGGda440t3ivtUQMvrniwY8ILKVoX9pnS1rAVgVPGBUo8mXyH9ec9p/Er9O9N5Kxc3xQE44MhHUygD1iJbRROBHG9m0Mj6qbKx4uI7S4KQVWRK8hHkxYFUtP4NzhzcGP1LfY91+zG4mNweGzQkfDbvn0LG9+6guxv9dW+uGz1c3f9My7272s+ABfksvfbNRgPSgwJecg==',
    'body': '{\n  "Type" : "Notification",\n  "MessageId" : "78cadcbb-f349-5bae-b39b-85504866b186",\n  "TopicArn" : "<topic arn>",\n  "Subject" : "Amazon S3 Notification",\n  "Message" : "{\\"Service\\":\\"Amazon S3\\",\\"Event\\":\\"s3:TestEvent\\",\\"Time\\":\\"2021-10-21T19:01:03.083Z\\",\\"Bucket\\":\\"<s3 bucket>\\",\\"RequestId\\":\\"TCJP8AZ6S75XXXPN\\",\\"HostId\\":\\"VYNq+Jh5Hkg+Vykp2RcIy9lSca7uJyhzLPfE8tcgnt3Je9kH0I+H3zvzvJkd6IvfZKZm2jYqu4Q=\\"}",\n  "Timestamp" : "2021-10-21T19:01:03.285Z",\n  "SignatureVersion" : "1",\n  "Signature" : "EE9xsZx8hezxh8Yhyj8DLc+VSGYowl641kHgqr8tWq2msNwOBv4KEZoTtHJ/hdnfNYLEBsR7imsfv5ZrX7nKRKL2kR8xax57tcih7GRbifIuFyrs9wAhtcuclf2NJQG4eY9OrOHHxPN3fSvNI9xduPeBrxB2TAfbTcWq4AeN0C4KriV18J2dU28ecMJGtmqK0JM+2KLEuwQe/dyYiEnEnWu5EfGweDhYCRvmB1aUPRcW4s3yOHIckklmHhBLkbmufl1me/hdO7GEGa1ju8wJDF33hmmCCSE6M7ITl9niWICBtvWlFz1Md5OiswyriRyN4LZjmvEjzRZtNwy/qMkDYA==",\n  "SigningCertURL" : "<cert url>",\n  "UnsubscribeURL" : "<unsubscribe url>"\n}',
    'attributes': {
        'ApproximateReceiveCount': '34',
        'SentTimestamp': <timestamp>,
        'SenderId': …
Run Code Online (Sandbox Code Playgroud)

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

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

AWS:对于需要 API 密钥的端点,始终从 API 网关获取“消息”:“禁止”

我们已将 Chalice 应用程序部署到 AWS,并且在调用需要 API 密钥的端点时收到以下响应:

{
    "message": "Forbidden"
}
Run Code Online (Sandbox Code Playgroud)

可以毫无问题地调用不需要 API 密钥的端点。

奇怪的是,我们过去能够毫无问题地调用需要 API 密钥的端点,因此我们还考虑是 Chalice 或 AWS 更新导致了该问题。

我们使用 Postman 将 API 密钥作为请求中的标头传递:

x-api-key:我们的 API 密钥的值。

我们也没有在 CloudWatch 中收到任何日志,大概是因为该问题实际上并未调用端点。AWS 在请求到达我们的端点之前就阻止了该请求。

我们的 API 密钥配置如下:

API 密钥:

  • ID:我们钥匙的 ID。
  • 名称:我们钥匙的名称。
  • API 密钥:我们的密钥的值。
  • 已启用:已启用

相关使用计划:

  • ID:我们计划的 ID。
  • 名称:我们计划的名称。
  • 节流:无节流。
  • 配额:无配额。

API 密钥和使用计划看起来配置正确,因此我们假设问题不在于 API 密钥本身。

来自“排查 API Gateway 403 禁止错误”文档:

如果 API 密钥无效(或者我们假设不正确),我们将收到以下消息:

“指定的 API 密钥标识符无效”

然而,我们却收到了通用的“Forbidden”错误:

“禁止”

文档仅列出了导致此错误的三种可能原因:

  1. 当在 API 中激活 AWS WAF 时,请求将被 Web 应用程序防火墙 (WAF) 过滤阻止。

  2. 使用公共 …

api-key amazon-web-services http-status-code-403 aws-lambda chalice

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

为什么在为 Python 创建自定义 AWS Lambda 层时无法导入模块?

我有一个名为 的模块custom_module.py,其中包含我想在几个不同的 Lambda 中使用的函数和方法。代码如下所示:

def test():
    return 'Custom module'
Run Code Online (Sandbox Code Playgroud)

我尝试通过压缩该文件并使用表单创建一个层来将其转换为 Lambda 层。一切似乎都运行良好,我将模块导入到 Lambda 中使用,如下所示:

import json
from custom_module import test

print('Loading function')

def lambda_handler(event, context):
    return test()
Run Code Online (Sandbox Code Playgroud)

不幸的是,运行它会返回一个"Unable to import module 'lambda_function': No module named 'custom_module'"错误。我到底做错了什么?我还指定了正确的运行时和架构。

编辑

根据评论,我尝试了这个文件结构:

layer
|
+--- python
     |
     +--- custom_module
          |
          +--- __init__.py (contains the test() method)
Run Code Online (Sandbox Code Playgroud)

layer我将文件夹压缩layer.zip并上传。不幸的是仍然遇到同样的问题。

python amazon-web-services aws-lambda aws-lambda-layers

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