标签: aws-lambda

如何使用 Node 访问 Lambda 中的 /tmp 文件夹?

我试图将处理后的图像暂时保存在 /tmp 文件夹中,但它对我不起作用。假设它位于根文件夹下,我尝试以这种方式获取它:

let tempraryImageDirectory: string;
if (process.env.DEV && process.env.DEV === 'Yes') {
  tempraryImageDirectory = path.join(__dirname, `../../tmp/`);
} else {
  tempraryImageDirectory = path.join(__dirname, `./tmp/`);
}
Run Code Online (Sandbox Code Playgroud)

这里选择else的是本地测试。我不想在根目录中创建 /tmp 文件夹。当地一切都很好。但目前在 Lambda 中,目录 CloudWatch 上发生的任何操作都不会显示此后写入的任何日志,并且我的函数因未知原因而失败。知道我是否正确寻址 /tmp 文件夹吗?

node.js typescript aws-lambda

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

AWS Lambda 函数无法扩展至足以处理 SQS 消息

我有一个订阅 SQS 队列来处理消息的 lambda。消息量非常大。

问题:队列增长非常快,并且 lambda 函数无法横向扩展以足够快地处理消息。尽管我还有 950 个或更多未使用的 lambda 执行的剩余配额,但并发 lambda 执行最多只有 20 到 25 个。为什么它不启动更多 lambda 来更快地处理我的队列?这是可配置的吗?

这是我的应用程序中的一个问题,因为我使用的是标准 SQS 队列,它不提供排序保证。因此,有时我会看到不幸的消息在队列中被吸了几个小时,而有些消息则在不到一分钟的时间内得到处理。(顺便说一句,我对队列可以按如此随机的顺序进行处理感到非常震惊。即使没有顺序保证,我也不会想到它会这么糟糕)。

amazon-sqs amazon-web-services aws-lambda

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

如何从 lambda 连接到 dynamodb

我正在尝试从 java lambda 函数连接到 DynamoDB,它在本地使用 aws profile ~/.aws/credentials。由于我无法在凭证文件中设置配置文件详细信息,这在 AWS 环境中将如何工作?

private static AmazonDynamoDB dynamoClient = AmazonDynamoDBClientBuilder.standard()
        .withEndpointConfiguration(
                new AwsClientBuilder.EndpointConfiguration("https://dynamodb.us-west-2.amazonaws.com", "us-west-2"))
        .withCredentials(new EnvironmentVariableCredentialsProvider()).build();
Run Code Online (Sandbox Code Playgroud)

java amazon-dynamodb aws-lambda

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

步骤功能:等待——它能持续多久?

我在 AWS 文档中找不到我想要的任何答案。

是否可以执行 100,000 个(大约)Step Functions 并且状态等待 3 个月?等待状态每30分钟检查一次,否则2个月后退出状态。

等待状态将执行 lambda 函数 - 它将在继续下一个状态之前检查字段 (dynamodb) 是否匹配条件。

我想知道有没有什么限制?

如果 WAIT 状态不是好方法,有什么替代方法?

amazon-web-services aws-lambda aws-step-functions

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

如何删除现有的 S3 事件通知?

当我尝试从 S3 删除事件通知时,收到以下消息:

在此输入图像描述

在文本中:

无法验证以下目标配置。无权调用函数 [arn:aws:lambda:eu-west-1:FOOBAR:function:FOOBAR]。(arn:aws:lambda:eu-west-1:FOOBAR:函数:FOOBAR,空)

我的组织中似乎没有人能够删除它 - 甚至管理员也不能。

当我尝试通过 Web 界面在 AWS Lambda 中设置相同的 S3 事件通知作为触发器时,我得到

配置定义不明确。如果同一事件类型的前缀重叠,则两个规则中不能有重叠的后缀。(服务:Amazon S3;状态代码:400;错误代码:InvalidArgument;请求 ID:FOOBAR;S3 扩展请求 ID:FOOBAR/FOOBAR/FOOBAR)

如何删除现有的事件通知?我怎样才能进一步调查这个问题?

amazon-s3 aws-lambda

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

无法在 AWS lambda 上的 @INC 中找到 URI/Escape.pm

我在 python 中有一个 AWS Lamba 函数,它使用 shell 脚本生成 url。shell脚本的输入参数由python代码提供。shell 脚本使用 perl 对所需的 URL 进行 URL 编码。MURI当我在本地运行时,该脚本运行良好;但是在 AWSamba 上看起来好像没有安装perl 。如果有其他方法可以做到这一点或有任何其他建议,我将不胜感激。我正在通过以下命令进行 URL 编码。我在 lambda 日志中看到的错误是:

Can't locate URI/Escape.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .).
BEGIN failed--compilation aborted.
Run Code Online (Sandbox Code Playgroud)

脚本中的代码是

cred=$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "$PARM1/$DATE/$PUBLIC_REGION/$SERVICE_NAME/request")
FULLDT=$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "$FULLDT")
SESSION_TOKEN=$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "$SESSION_TOKEN")
Run Code Online (Sandbox Code Playgroud)

perl sh aws-lambda

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

多个并行 AWS Lambda 调用

我正在尝试使用 python 3.7.2 和 aiobotocore 包执行多个 AWS Lambda 调用。这是我的代码。

import asyncio
import aiobotocore


async def invoke(payload, session):
    async with session.create_client('lambda', region_name='us-east-1') as client:
        return await client.invoke(FunctionName='MY_FUNCTION', Payload=payload)


def generate_invocations(payloads, session):
    for payload in payloads:
        yield invoke(payload, session)


def invoke_all(payloads):
    loop = asyncio.get_event_loop()

    async def wrapped():
        session = aiobotocore.get_session(loop=loop)
        invocations = generate_invocations(payloads, session)
        return await asyncio.gather(*invocations)

    return loop.run_until_complete(wrapped())


def main():
    payloads_list = []  # MY PAYLOADS LIST 
    lambda_responses = invoke_all(payloads_list)
    print(lambda_responses)


if __name__ == '__main__':
    main()

Run Code Online (Sandbox Code Playgroud)

代码运行速度非常快(10 个有效负载大约 1 秒,而不是使用 boto3 …

amazon-web-services python-asyncio aws-lambda python-3.7

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

部署 lambda 函数时出现 AccessDeniedException

我试图通过 AWS 命令​​在 aws 中创建 lambda 函数。当我执行命令时,出现以下错误。但是我在 AWS 命令​​中提到的角色有足够的权限来部署 lambda 函数。即使角色有权限,我也不确定出了什么问题。

命令:

aws lambda create-function --function-name ukmon-appd-disabled- 
health-rules --runtime python3.7 --zip-file 
fileb://bin/disabled_health_rules.zip --handler index.handler --timeout 10 - 
-memory-size 1024 --role arn:aws:iam::99999999999:role/crossaccount
Run Code Online (Sandbox Code Playgroud)

政策:

"AllowLambdaFunctionStack": {
      "Type": "AWS::IAM::ManagedPolicy",
      "Properties": {
        "Description": "Policy for allowing jenkins cross account service role to create, update, delete lambda functions.",
        "Path": "/",
        "PolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Action": [
                "lambda:InvokeFunction",
                "lambda:CreateFunction",
                "lambda:DeleteFunction",
                "lambda:GetFunction",
                "lambda:ListFunctions",
                "lambda:UpdateFunctionCode",
                "lambda:GetFunctionConfiguration",
                "lambda:UpdateFunctionConfiguration",
                "lambda:AddPermission",
                "lambda:RemovePermission",
                "lambda:CreateAlias",
                "lambda:DeleteAlias",
                "lambda:GetAlias",
                "lambda:ListAliases",
                "lambda:UpdateAlias",
                "lambda:GetPolicy", …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-lambda

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

使用 Zappa 的新分支/阶段

我目前在 AWS Lambda 上使用 Zappa/Flask (Py 3.7) 有一个 API

我的 zappa_Settings.json 文件如下所示:

{
    "beta": {
        "app_function": "application.application",
        "profile_name": "changed",
        "project_name": "changed",
        "runtime": "python3.7",
        "s3_bucket": "zappa-<obscured>"
    }

}
Run Code Online (Sandbox Code Playgroud)

然而,我们现在正在开发一组新的功能,并且感觉表明我们有一个单独的分支或阶段,例如“测试”,我们在部署这些功能并评估成熟度之前将其推入实时环境。

问题是,尽我所能,我无法从控制台创建新阶段:

zappa init 
Run Code Online (Sandbox Code Playgroud)

崩溃与

click.exceptions.ClickException:该项目已经有一个 zappa_settings.json 文件!

zappa init stage2
Run Code Online (Sandbox Code Playgroud)

产生

用法:zappa [-h] [-v] [--color {auto,never,always}] {认证,部署,init,包,模板,调用,管理,回滚,计划,状态,尾部,取消部署,取消计划,更新,shell} ... zappa:错误:无法识别的参数:stage2

zappa deploy stage2
Run Code Online (Sandbox Code Playgroud)

输出

(botocore 1.12.86 (/home/user/Code/Python/project/lib/python3.6/site-packages), Requirement.parse('botocore<1.11.0,>=1.10.82'), {'boto3'})
Calling deploy for stage stage2..
Error: Please define stage 'stage2' in your Zappa settings.
Run Code Online (Sandbox Code Playgroud)

现在,如果我手动为阶段创建条目,则需要有一个 s3 存储桶用于部署。重复使用与第一个实例相同的实例是否安全?我在这里要做什么来部署新阶段?

python-3.x zappa aws-lambda python-zappa

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

Python Lambda 函数中断且 CloudWatch 中未记录任何错误

我正在 Python 中创建一个 Lambda 函数,该函数通过将 MP3 文件上传到我的 S3 存储桶来触发。该函数(在我的本地计算机上运行)应该使用 pydub 从音频创建波形,但是,我遇到了一个我不知道如何解决的问题。

似乎我能够将文件保存到该/tmp文件夹​​,但是当我尝试将文件传递到 时AudioSegment.from_file(filename),该函数结束并且 CloudWatch 中没有错误日志。

这是相关的代码块:

s3.download_file(bucket_name, file_key, '/tmp/temp.mp3')
src = "/tmp/temp.mp3"
try:
    print 'trying...'
    audio = AudioSegment.from_file(src)
except:
    print 'its breaking'
print 'it worked'
Run Code Online (Sandbox Code Playgroud)

我将问题行包装在一个try块中以简化问题。CloudWatch 仅记录:

START RequestId: 23af8832-061b-4c46-a226-6591bb972b5e Version: $LATEST
trying...
END RequestId: 23af8832-061b-4c46-a226-6591bb972b5e
Run Code Online (Sandbox Code Playgroud)

预期输出为:

START RequestId: 23af8832-061b-4c46-a226-6591bb972b5e Version: $LATEST
trying...
its breaking || it worked
END RequestId: 23af8832-061b-4c46-a226-6591bb972b5e
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

任何帮助将不胜感激!:)

python amazon-s3 amazon-cloudwatch pydub aws-lambda

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