标签: aws-lambda

如何将cloudwatch警报连接到lambda函数

如何将aws云监视警报连接到lambda函数调用?

我通过AWS CloudFormation模板以编程方式向我们创建的作为云形成堆栈一部分的ELB添加云监视警报.我希望将警报发送到lambda函数,该函数将消息发布到Slack.虽然警报有效,并且SNS配置对我来说似乎是正确的,但从不调用lambda函数.

lambda函数遵循以下示例:

https://medium.com/cohealo-engineering/how-set-up-a-slack-channel-to-be-an-aws-sns-subscriber-63b4d57ad3ea#.x2j9apedu

http://inopinatus.org/2015/07/13/hook-aws-notifications-into-slack-with-a-lambda-function/

lambda函数工作,我可以通过aws控制台发送测试数据,从而发送一条消息发送给Slack.

使用看起来正确的云监控警报创建负载均衡器:

在此输入图像描述

警报似乎配置为将警报发送到正确的SNS主题:

在此输入图像描述 在此输入图像描述

有一个SNS订阅该主题,lambda函数作为它的端点:

在此输入图像描述

警报触发时会触发警报并将消息发送到正确的主题:

在此输入图像描述

但是从不调用lambda函数:

在此输入图像描述

但是,如果我在lambda函数上手动添加SNS主题作为"事件源",则会在警报触发和发布Slack消息时调用它.

在此输入图像描述

我是否误解了如何将云监视报警连接到lambda函数?或者我缺少一个小细节?

如果这种方法不起作用,并且将lambda函数连接到云监视警报的唯一方法是将SNS主题添加为"事件源",通过AWS CloudFormation模板执行此操作的适当方法是什么?我没有看到修改现有资源的明显方法,例如固定的lambda函数.

这是我的CloudFormation模板:

"GenericSlackAlertSNSTopic" : {
    "Type" : "AWS::SNS::Topic",
    "Properties" : {
        "Subscription" : [ {
            "Endpoint" : "arn:aws:lambda:us-east-1:[...]:function:snsToSlack",
            "Protocol" : "lambda"
        } ]
    }
},
"ELBNoTrafficAlarm": {
    "Type": "AWS::CloudWatch::Alarm",
    "Properties": {
        "Namespace" : "AWS/ELB",
        "AlarmDescription": "Alarm for no apparent traffic on an ELB.",
        "AlarmActions": [{
            "Ref": "GenericSlackAlertSNSTopic"
        }],
        "InsufficientDataActions": [{
            "Ref": "GenericSlackAlertSNSTopic"
        }],
        "MetricName": "RequestCount",
        "Statistic": "Sum",
        "Dimensions" : [ {
            "Name" : "LoadBalancerName",
            "Value" …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-sns aws-cloudformation amazon-cloudwatch aws-lambda

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

AWS Lambda和不准确的内存分配

我意识到我需要为AWS Lambda函数分配比所需内存更多的内存,否则我得到:

{
"errorMessage": "Metaspace",
"errorType": "java.lang.OutOfMemoryError"
}
Run Code Online (Sandbox Code Playgroud)

例如,我有一个分配了128MB的Lambda函数,它会随着该错误一直崩溃,而在控制台中它会显示"最大内存使用56 MB".
然后我分配256MB,它不再崩溃,但它总是给我一个75到85MB之间的"最大内存使用".

怎么会?谢谢.

amazon-web-services aws-lambda

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

使用Alexa流式传输音频的最简单示例

我正在尝试使用新的流式音频API.以下回复是否有效?当我在我的设备上测试它时,我得到"技能有问题"错误.

这是我的AWS-lambda函数的代码:

def lambda_handler(event, context):
    return {
        "response": {
            "directives": [
                {
                    "type": "AudioPlayer.Play",
                    "playBehavior": "REPLACE_ALL",
                    "audioItem": {
                        "stream": {
                            "token": "12345",
                            "url": "http://emit-media-production.s3.amazonaws.com/pbs/the-afterglow/2016/08/24/1700/201608241700_the-afterglow_64.m4a",
                            "offsetInMilliseconds": 0
                        }
                    }
                }
            ],
            "shouldEndSession": True
        }
    }
Run Code Online (Sandbox Code Playgroud)

python aws-lambda alexa-skills-kit

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

无法从我的vpc配置的lambda函数连接dynamo Db

我需要从单个lambda函数连接弹性缓存和dynamo db.我的代码是

exports.handler = (event, context, callback) => {

    var redis = require("redis");
    var client;
    function connectRedisClient() {
        client = redis.createClient(6379, "dgdfgdfgdfgdfgdfgfd.use1.cache.amazonaws.com", { no_ready_check: true });
    }

    connectRedisClient();
    client.set('sampleKey', 'Hello World', redis.print);
    console.log("set worked");
    client.quit();


    var AWS = require("aws-sdk");
    var docClient = new AWS.DynamoDB.DocumentClient();
    var table = "dummy";
    var year = 2015;
    var title = "The Big New Movie";
    var params = {
        TableName: table,
        Item: {
            "userid": "manafcj",
            "year": year,
            "title": title,
            "test1": [645645, 7988],
            "info": {
                "plot": "Nothing …
Run Code Online (Sandbox Code Playgroud)

caching amazon-web-services amazon-elasticache amazon-vpc aws-lambda

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

读取aws lambda包中的打包文件

我有一个非常简单的节点lambda函数,它读取其中的打包文件的内容.我将代码上传为zip文件.目录结构如下.

index.js
readme.txt
Run Code Online (Sandbox Code Playgroud)

然后在我的index.js文件中:

fs.readFile('/var/task/readme.txt', function (err, data) {
if (err) throw err;
});
Run Code Online (Sandbox Code Playgroud)

我一直收到以下错误NOENT:没有这样的文件或目录,打开 '/var/task/readme.txt'.

我也试过./readme.txt.

我错过了什么?

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

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

回调后保证aws lambda执行吗?

我通过API GW调用的node4 lambda函数生成一系列缓慢的API调用.为了不让用户等到一切都完成,我打算让我的代码看起来像这样:

function(event, context, callback) {
  ...
  // Return users API GW call now
  callback(null, data);
  // Do the heavy lifting afterwards.
  longApiCall().then(otherLongApiCalls)
}
Run Code Online (Sandbox Code Playgroud)

但现在我在AWS文档中读到:"回调将等到Node.js运行时事件循环为空,然后冻结进程并将结果返回给调用者"

这是否意味着API GW在longApiCalls完成之前或之后返回响应数据?

如果之后,是否有建议的方法如何在一切结束之前"早退"?

callback amazon-web-services node.js aws-lambda aws-api-gateway

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

具有无服务器框架的AWS codeBuild/codePipeline

我正在尝试为我的应用程序自动化部署管道.这是自动化架构,我想出了: 自动化架构

如您所见,我使用codePipeline和codeBuild来自动部署.我的后端基于无服务器框架,它在kick sls deploy命令上部署lambda函数.这就是我没有使用codeDeploy进行传统部署的原因.buildspec.yml文件看起来像这样:

version: 0.1

phases:
  install:
    commands:
      – apt-get -y update
      – npm install -g serverless@1.9.0
  build:
    commands:
      – cd nj2jp/serverless && npm install
  post_build:
    commands:
      – serverless deploy –verbose

artifacts:
  files:
    – serverless.yml
  discard-paths: yes
Run Code Online (Sandbox Code Playgroud)

现在,我有3个关于CodeBuild和Serverless的问题:

问题1:该命令sls deploy取决于一个名为config.ymldb password的秘密.此文件不会被检入git.您认为config.yml在codeBuild中包含的最佳方式是什么?

问题2: 如果我们必须使用codeDeploy部署传统的EC2应用程序,则可以使用AWS完成回滚.在无服务器的情况下,我们不使用codeDeploy,无服务器也支持回滚功能.我们如何在codePipeline中利用无服务器回滚? …

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

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

可以使用API​​ GET但不能使用API​​ POST

我在VS 2013中处理现有的Windows服务项目.

我已经添加了一个web API Controller类,我现在无法记住,如果它是一个(v2.1)或(v1)控制器类....无论如何我称之为SyncPersonnelViaAwsApiController

我试图从AWS lambda中调用它...所以如果我调用GET

public string Get(int id)
    {
        return "value";
    }
Run Code Online (Sandbox Code Playgroud)

with const req = https.request(' https:// actualUrlAddress/api/SyncPersonnelViaAwsApi/Get/4 ',(res)=> {

我知道returned body: undefined"value"哪个是正确的.但是,如果我试着打电话

const req = https.request('https://actualUrlAddress/api/SyncPersonnelViaAwsApi/SapCall', (res) => {
Run Code Online (Sandbox Code Playgroud)

我明白了 returned body: undefined{"Message":"The requested resource does not support http method 'GET'."}

 //// POST api/<controller>
    public string SapCall([FromBody]string xmlFile)
    {
        string responseMsg = "Failed Import User";

        if (!IsNewestVersionOfXMLFile(xmlFile))
        {
            responseMsg = "Not latest version of file, update not performed";
        }
        else
        {
            Business.PersonnelReplicate personnelReplicate …
Run Code Online (Sandbox Code Playgroud)

c# post get node.js aws-lambda

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

错误:"在使用带有node.js的Lambda中的AWS X射线时,无法从上下文获取当前子/段"

我正在尝试将AWS X射线实施到我当前的项目中(使用Node.js和Serverless框架).我试图将X射线连接到我的lambda函数之一,我遇到了问题

Error: Failed to get the current sub/segment from the context.
    at Object.contextMissingRuntimeError [as contextMissing] (/.../node_modules/aws-xray-sdk-core/lib/context_utils.js:21:15)
    at Object.getSegment (/.../node_modules/aws-xray-sdk-core/lib/context_utils.js:92:45)
    at Object.resolveSegment (/.../node_modules/aws-xray-sdk-core/lib/context_utils.js:73:19).....
Run Code Online (Sandbox Code Playgroud)

代码如下:

import { DynamoDB } from "aws-sdk";
import AWSXRay from 'aws-xray-sdk';

export const handler = async (event, context, callback) => {

    const dynamo = new DynamoDB.DocumentClient({
        service: new DynamoDB({ region })
    });

    AWSXRay.captureAWSClient(dynamo.service);

    try {
        // call dynamoDB function 
    } catch(err) {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

对于这个问题,我使用的解决方案来自 https://forums.aws.amazon.com/thread.jspa?messageID=821510褆

我试过的另一个解决方案来自https://forums.aws.amazon.com/thread.jspa?messageID=829923ꧣ

代码就像

import AWSXRay from 'aws-xray-sdk';
const AWS = …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js aws-lambda serverless-framework aws-xray

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

AWS Lambda Python 3.7运行时异常日志记录

使用Python 3.7运行时抛出的未处理异常似乎没有像在Python 3.6中那样记录到CloudWatch.如何在Python 3.7中设置记录器来捕获此信息?

也发布在AWS论坛上

复制:

1.像这样创建一个lambda函数:

import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
def lambda_handler(event, context):
logger.info("This shows fine")
raise Exception("I failed")  
Run Code Online (Sandbox Code Playgroud)

2.使用Python 3.6运行时运行此函数

START RequestId: a2b6038b-0e5f-11e9-9226-9dfc35a22dcc Version: $LATEST
[INFO]  2019-01-02T07:25:52.797Z    a2b6038b-0e5f-11e9-9226-9dfc35a22dcc //This shows fine
 I failed: Exception
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 9, in lambda_handler
        raise Exception("I failed")
Exception: I failed

END RequestId: a2b6038b-0e5f-11e9-9226-9dfc35a22dcc
REPORT RequestId: a2b6038b-0e5f-11e9-9226-9dfc35a22dcc  Duration: 1.12 ms   Billed Duration: 100 ms     Memory Size: 128 MB Max Memory Used: 21 MB
Run Code Online (Sandbox Code Playgroud)

2.切换到Python 3.7运行时并再次运行...没有堆栈跟踪

    START …
Run Code Online (Sandbox Code Playgroud)

python python-3.x amazon-cloudwatch aws-lambda

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