标签: aws-lambda

无法修复“提供的执行角色无权在 EC2 上调用 CreateNetworkInterface”

我尝试了此答案中的解决方案,但对我不起作用。我收到错误:

提供的执行角色无权调用 EC2 上的 CreateNetworkInterface(服务:AWSLambdaInternal;状态代码:400;错误代码:InvalidParameterValueException;请求 ID:4c8d047c-2710-4334-86cd-51b7467c6f08)

这是与错误相关的 CloudFormation:

EventLambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: !Sub ${DeveloperPrefix}event-lambda-${Environment}-${DeployPhase}
      Handler: EventHandler
      Runtime: java8
      Code:
        S3Bucket: !Ref SharedBucketName
        S3Key: !Sub ${WorkspacePrefix}/event-subscriber-${AppVersion}.jar
        S3ObjectVersion: !Ref EventLambdaS3Version
      Role: !GetAtt EventLambdaRole.Arn
      Environment:
        Variables:
          retry_event_table_name: !Sub "${DeveloperPrefix}${AppName}-${RetryEventTableName}-${Environment}-${DeployPhase}"
          test_enabled: true # TODO: Remove once endpoint provided.
      VpcConfig:
        SecurityGroupIds:
          - !Ref LambdaSecurityGroup
        SubnetIds:
          - Fn::ImportValue: !Sub ${VPCStackName}-SubnetPrivateL
          - Fn::ImportValue: !Sub ${VPCStackName}-SubnetPrivateR
      Timeout: 28
      MemorySize: 256

  EventLambdaRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Sub ${DeveloperPrefix}${AppName}-${Environment}-${DeployPhase}-EventLambdaRole
      AssumeRolePolicyDocument:
        Statement:
          - Effect: Allow
            Principal:
              Service: …
Run Code Online (Sandbox Code Playgroud)

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

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

aws lambda:使用来自 cli 的有效负载调用

我正在尝试使用 aws cli 调用我的 lambda:

$ aws lambda invoke \
    --function-name soc-update-dynamodb-java \
    --invocation-type Event \
    --payload file://invoke-payload.json \
   response.json
Run Code Online (Sandbox Code Playgroud)

但是,我收到此消息:

调用 Invoke 操作时发生错误 (InvalidRequestContentException):无法将请求正文解析为 json:[Source: (byte[])"E?(?????U???? ?????k.....

payload.json 内容是一个类似 s3 事件的 json:

{
"Records": [
  {
    "eventVersion": "2.0",
    "eventSource": "aws:s3",
    "awsRegion": "eu-central-1",
    "eventTime": "1970-01-01T00:00:00.000Z",
    "eventName": "ObjectCreated:Put",
    "userIdentity": {
      "principalId": "EXAMPLE"
    },
    "requestParameters": {
      "sourceIPAddress": "127.0.0.1"
    },
    "responseElements": {
      "x-amz-request-id": "EXAMPLE123456789",
      "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH"
    },
    "s3": {
      "s3SchemaVersion": "1.0",
      "configurationId": "testConfigRule",
      "bucket": {
        "name": "soc-connect",
        "ownerIdentity": {
          "principalId": "EXAMPLE"
        },
        "arn": …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cli aws-lambda

14
推荐指数
3
解决办法
4948
查看次数

如何将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
查看次数

无法从我的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 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
查看次数