标签: serverless

Serverless.yml 拒绝 cloudformation “Ref”函数

这是我的 serverless.yml 文件中的一个片段:

Resources:
  LogGroupInfo:
    Type: 'AWS::Logs::LogGroup'
    Properties:
      RetentionInDays: 3
  FirehoseInstance:
     Properties:
      DeliveryStreamName: ${opt:stage}-analytics
      DeliveryStreamType: DirectPut
      RedshiftDestinationConfiguration:
        CloudWatchLoggingOptions:
          Enabled: true
          LogGroupName: !Ref LogGroupInfo
Run Code Online (Sandbox Code Playgroud)

这是我收到的错误:

  unknown tag !<!Ref> in "/Users/code/Project1/serverless.yml" at line 56, column 42:
     ...  LogGroupName: !Ref LogGroupInfo
Run Code Online (Sandbox Code Playgroud)

当在 cloudformation 中用于创建堆栈时,此模板运行良好。为什么 !Ref 被 serverless.yml 拒绝?

serverless-framework serverless

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

在单个查询中将多个JSON对象插入Dynamo DB

我的设置-AWS Lambda,AWS Dynamo DB,nodejs和无服务器。

我正在从某些API获取JSON对象数组,并尝试将其插入我的Dynamo DB中。到目前为止,我唯一的解决方案是遍历数组,并对每个对象进行DocumentClient()PUT调用。
我的数据大约有1000个对象,并且写入吞吐量设置为1。因此,即使在插入约300条记录并出现此错误后,该解决方案也对我失败-The level of configured provisioned throughput for the table was exceeded.

可以在单个查询中完成吗?

node.js amazon-dynamodb aws-lambda serverless

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

无服务器复制用户池而不是按名称重用

我正在使用无服务器来部署 AWS CloudFormation 模板和一些功能,这是我的 serverless.yml 文件的一部分:

resources:
  Resources:
    MyUserPool: #An inline comment
      Type: "AWS::Cognito::UserPool"
      Properties:
        UserPoolName: "MyUserPool"
        Policies:
          PasswordPolicy: 
            MinimumLength: 7
            RequireLowercase: false
            RequireNumbers: true
            RequireSymbols: false
            RequireUppercase: false
functions:
  preSignUp:
    handler: presignup.validate
    events:
      - cognitoUserPool:
          pool: "MyUserPool"
          trigger: PreSignUp
Run Code Online (Sandbox Code Playgroud)

如您所见,两个用户池名称相同,但是当我运行无服务器部署时,会创建 2 个具有相同名称的用户池。

在此处输入图片说明

这是一个错误还是我错过了什么?

amazon-web-services aws-cloudformation serverless-framework serverless

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

Lambda 函数中的 DynamoDB BatchGetItem 动态 TableName

我正在使用 dynamoDb 作为我的数据库为我当前的应用程序构建一个无服务器后端。我使用 aws sam 将我的 lambda 函数上传到 aws。此外,我将所有表名作为全局变量传递给 lambda(nodejs8.10 运行时),以便process.env在我的 lambda 函数内的对象上访问它们。我面临的问题如下:每当我batchGetItem在 dynamoDB 上运行该方法时,我必须传递一个字符串作为我的表名,我无法根据全局变量动态更改表名:

const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({region: 'ap-south-1'}, {apiVersion:'2012-08-10'});

const params = {
    RequestItems: {
        //needs to be a string, cannot be a variable containing a string
        'tableName': {
            Keys: [] //array of keys
         }
    }
}
dynamodb.batchGetItem(params, (err, result) => {
// some logic
})
Run Code Online (Sandbox Code Playgroud)

我需要将表名作为字符串传递,本质上是将表名硬编码到我的函数中。其他 DynamoDB 操作(例如getItem方法)接受参数对象中表名的键值对:

const tableName = process.env.TableName;
const getItemParams = { …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-dynamodb aws-lambda serverless

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

将 Word2Vec 二进制模型从 S3 加载到 Gensim 失败

我已将 Word2Vec 模型保存到二进制文件中。我正在尝试将其加载到改编自此博客的无服务器 API 中,并以此为基础。

这在本地工作正常:

self.model = KeyedVectors.load_word2vec_format('./models/models.bin', binary=True)
Run Code Online (Sandbox Code Playgroud)

但是当从 S3 调用文件时,它会出错:

'IOError: [Errno 2] 没有那个文件或目录:'46659 100\n,|PUNCT \xec>\xd8>\xaf\xa8\x95'

def load_model(key):
response = S3.get_object(Bucket=BUCKET_NAME, Key=key)
model_str = response['Body'].read()

model = KeyedVectors.load_word2vec_format(model_str, binary=True)
return model
Run Code Online (Sandbox Code Playgroud)

python amazon-s3 gensim serverless

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

禁用 http 重定向到 https

我正在使用 lambda 函数开发小服务,该函数在您的 CLI 中使用curl.

首先,我开发了业务逻辑,使用 Serverless 部署和创建了 lambda。

其次,我使用 aws route 53 购买了域,使用 API 网关上的“自定义域名”配置了证书和路由域。

目前,如果您访问https://domain.io服务按预期工作,但如果您尝试调用curl domain.io它的输出:

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>CloudFront</center>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我的目标是通过调用curl domain.io.

是否可以避免重定向?或者你可以在custom domain name没有证书的情况下创建 API吗?

目前我称之为curl -F domain.io将遵循重定向,但这不是我正在寻找的解决方案。

谢谢!

amazon-web-services amazon-route53 aws-api-gateway serverless

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

dynamodb 如何在 serverless.yml 中定义无键模式?

我尝试在我的无服务器 aws lambda 中应用 dynamodb。我的文件是这样的:

resources:
  Resources:
    StoreDynamoDbTable:
      Type: 'AWS::DynamoDB::Table'
      DeletionPolicy: Retain
      Properties:
        AttributeDefinitions:
          - AttributeName: id
            AttributeType: S
          - AttributeName: lat
            AttributeType: N 
          - AttributeName: lng
            AttributeType: N
        KeySchema:
          - AttributeName: id
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1
        TableName: ${self:provider.environment.TableStore}
Run Code Online (Sandbox Code Playgroud)

我尝试应用 lat 和 lng 作为 storeTable 的属性,只是属性不是 key Schema,但每个 store 元素都应该具有这些属性。

但是有错误:

发生错误:StoreDynamoDbTable - Property AttributeDefinitions 与表的 KeySchema 和二级索引不一致。

如何使 lat 和 lng 只是桅杆属性,而不是索引的关键元素?

amazon-dynamodb serverless-framework serverless

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

ListObjectV2 在 AWS Lambda 中获取访问被拒绝错误

我不确定我的权限是否正确,但我试图listObjectsV2在我的 lambda 函数中使用,但我得到access denied error. 我正在使用无服务器。

这是我的 iAMRoleStatement

 iamRoleStatements:
    - Effect: "Allow"
      Action:
        - s3:GetObject
        - s3:ListBucket
      Resource: 
        - "arn:aws:s3:::${self:custom.bucket1}/*"
        - "arn:aws:s3:::${self:custom.bucket2}/*"
Run Code Online (Sandbox Code Playgroud)

它给了我这样的回应:

{
    "errorMessage": "Access Denied",
    "errorType": "AccessDenied",
    "stackTrace": [
        "Request.extractError (/var/runtime/node_modules/aws-sdk/lib/services/s3.js:577:35)",
        "Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20)",
        "Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10)",
        "Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)",
        "Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)",
        "AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)",
        "/var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10",
        "Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)",
        "Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:685:12)",
        "Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:115:18)"
    ]
}
Run Code Online (Sandbox Code Playgroud)

这是功能

const AWS = require('aws-sdk')
const apiVersion = '2006-03-01'

module.exports.index = async (event, context) => {
  const s3 = new AWS.S3({ apiVersion })
  const …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services amazon-iam aws-lambda serverless

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

AWS S3 - 从 getSignedUrl() PUT 到 URL 返回 403 SignatureDoesNotMatch 错误

这个问题已经让我发疯了两天了。

目标:通过 AWS Javascript SDK 中的 getSignedUrl 函数提供的预签名 URL,将图像直接从浏览器上传到 S3。

我在使用 getSignedUrl 生成 URL 时没有遇到任何问题。下面的代码...

const params = {
  Key:         key,
  Bucket:      process.env.S3_BUCKET,
  ContentType: "image/jpeg"
};

S3.getSignedUrl("putObject", params, callback);
Run Code Online (Sandbox Code Playgroud)

...产生类似:

https://s3.amazonaws.com/foobar-bucket/someImage.jpeg?AWSAccessKeyId=ACCESSKEY123&Content-Type=image%2Fjpeg&Expires=1543357053&Signature=3fgjyj7gpJiQvbIGhqWXSY40JUU%3D&x-amz-acl=private&x-amz-security-token=FQoGZXIvYXdzEDYaDPzeqKMbfgetCcZBaCL0AWftL%2BIT%2BP3tqTDVtNU1G8eC9sjl9unhwknrYvnEcrztfR9%2FO9AGD6VDiDDKfTQ9SmQpfXmiyTKDwAcevTwxeRnj6hGwnHgvzFVBzoslrB8MxrxjUpiI7NQW3oRMunbLskZ4LgvQYs8Rh%2FDjat4H%2F%2BvfPxDSQUSa41%2BFKcoySUHGh2xqfBFGCkHlIqVgk1KELDHmTaNckkvc9B4cgEXmAd3u1f1KC9mbobYcLLRPIzMj9bLJH%2BIlINylzubao1pCQ7m%2BWdX5xAZDhTSNwQfo4ywSWV7kUpbq2dgEriOiKAReEjmFQtuGqYBi3t2dhrasptOlXFXUozdz23wU%3D

但是通过 PUT 请求将图像上传到提供的 URL 总是会403 SignatureDoesNotMatch从 S3返回错误。

有什么作用:

  • 从 AWS Lambda 的本地实例(通过无服务器离线)调用 getSignedUrl()。

什么不起作用:

  • 将查询字符串变量设置为标题(Content-Type、x-amz-* 等)
  • 删除所有标题
  • 获取 URL 时更改 ACL(私有、公共读写、无 ACL 等)
  • 更改aws-sdk节点中的区域
  • 尝试 POST 而不是 PUT(值得一试)

对此问题的任何帮助将不胜感激。如果这仍然是一个问题,我将把我的电脑扔出窗外,然后沮丧地跳出去,因为它根本不想工作!

amazon-s3 node.js aws-lambda serverless

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

带有AWS QuickSight的AWS Aurora Serverless(MySQL)

因此,我一直在尝试使用无服务器后端(即Aurora MySQL)设置BI工具。

架构如下:

在此处输入图片说明

在这些行上的实现:tutorial-link

现在,我正在探索用于将此后端与BI / Analytics工具连接以实现快速查询和可视化目的的选项。

由于我们的后端是Aurora MySQL Serverless,因此其局限性在于无法像使用预配置的终端那样直接连接到终结点。

如此处所述:https : //docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html

同样,我正在尝试设置一个AWS Direct Connect,目前处于请求阶段:

在此处输入图片说明

无论这是正确的方法,我都需要帮助,如果是,是否有任何将Direct Connect与Aurora Serverless一起使用的教程?

另一方面,是否有任何双工具成功地用于无服务器后端。

需要的是能够在最短的时间内启动并运行,以进行快速推断。然后转到ETL或更复杂的用例。

任何帮助,不胜感激!

谢谢,Arnab

devops amazon-aurora amazon-quicksight serverless aws-aurora-serverless

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