标签: aws-serverless

如何将参数传递给无服务器调用本地

我正在开发一个无服务器的无需项目,需要在本地测试lambda函数.
我正在使用serverless invoke local -f {function_name}命令来测试不请求任何路径或查询参数的API调用.
我的问题是如何使用此命令将任何路径或查询参数传递给函数?

示例无服务器描述

getFoodDetails:
    handler: handler.getFoodDetails
    events:
      - http:
          method: get
          path: /foods/{food_id}
          cors: true
          request:
            parameters:
              paths:
                food_id: true
Run Code Online (Sandbox Code Playgroud)

aws-lambda serverless-framework aws-serverless

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

如何使用 AWS SAM 部署到不同环境

我有两个关于 AWS SAM 和部署的问题。

\n

我\xe2\x80\x99m 阅读文档并检查这样的示例,并且我\xe2\x80\x99m 仍然不太确定如何使用我的 SAM 模板单独部署到stagingproduction环境。是否像部署一个具有新名称(例如sam deploy \xe2\x80\x94stack-name my-app-staging和 )的新堆栈一样简单sam deploy \xe2\x80\x94stack-name my-app-production

\n

在下面的例子中,我有一个问题。如果我的 SAM 模板包含具有三个可能值的Parameters名称MyEnvironment,则部署如何知道在部署堆栈时使用这三个值中的哪个值?就像我会怎么说使用值stagingor production?这是我部署时会自动询问的问题还是我必须在 CLI 上提供的问题?

\n

在此输入图像描述

\n

aws-lambda aws-api-gateway aws-serverless aws-sam

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

参数存储与 AppConfig

何时应使用参数存储来保存配置,何时应使用 AppConfig?例如,如果我必须在运行时更改日志级别,是否应该将其存储在 SSM 或 Appconfig 中?

优缺点都有什么?这两者有什么区别,特别是在具有 lambda 函数的无服务器应用程序的上下文中?

app-config amazon-web-services aws-ssm aws-parameter-store aws-serverless

22
推荐指数
1
解决办法
8352
查看次数

"sls dynamodb start"抛出了生成java ENOENT

在Mac上运行,我使用aws-nodejs模板创建了一个基本的无服务器服务:

serverless create --template aws-nodejs --path TestService
Run Code Online (Sandbox Code Playgroud)

之后我使用以下命令添加无服务器本地:

npm install serverless-dynamodb-local
serverless dynamodb install
Run Code Online (Sandbox Code Playgroud)

无论我做什么,我都无法开始使用dynamodb-local.我跑的时候

serverless dynamodb start
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Error: spawn java ENOENT
at _errnoException (util.js:992:11)
at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19)
at onErrorNT (internal/child_process.js:372:16)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickDomainCallback (internal/process/next_tick.js:218:9)
Run Code Online (Sandbox Code Playgroud)

跑步java --version给我以下信息:

Java 10.0.2 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
Run Code Online (Sandbox Code Playgroud)

我正在使用Node 8.11.4和无服务器1.30.1.Aws-sdk也已安装,我已经设置了我的个人资料.

谢谢

amazon-web-services node.js amazon-dynamodb serverless-framework aws-serverless

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

AWS ECS Fargate 和多线程

背景:我对“无服务器”概念很陌生。我正在创建一个拾取和放置应用程序。基本上,应用程序将从 40 个队列中使用/选取消息,并将这些消息发送/放置在单个传出 FIFO 队列中(以维持顺序)。该逻辑需要大约 10 个工作线程/线程在不同队列上并行运行。

请不要建议 lambda。它不适合我的用例。

我计划在 AWS ECS + fargate 中创建此应用程序。我想知道当我在 java 应用程序中使用 Fargate 来创建这 10 个线程时会出现任何问题吗?

使用fargate(这是一个无服务器概念)时多线程有什么问题吗?

multithreading amazon-web-services amazon-ecs aws-fargate aws-serverless

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

在定义单个 AWS::Serverless::Function 的 SAM 模板中指定多个 API 阶段和 Lambda 别名

我的目标是 尝试编写一个(单个)SAM 模板来获取由 Api 网关事件触发的 Lambda 函数。

我想要有多个 API 阶段(例如“dev”、“testing”、“prod”),并且希望每个阶段都映射到具有相同名称的 Lambda 别名。

我不想在每次部署时生成新的 lambda 版本,并且我喜欢手动设置每个 lambda 别名要使用的 lambda 版本。当然,“dev”别名意味着指向 $LATEST 代码版本。

我尝试了什么以及我得到了什么

我对经典的“hello_world”模板进行了如下修改。现在,当第一次部署(例如,“开发”)时,一切似乎都按预期工作。 但是,如果我尝试部署到“测试”阶段,则此新阶段的 API 会响应,而“开发”阶段的 API 将停止响应。

我缺少什么?

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  zzzz

  Sample SAM Template for zzzz

# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 3

Parameters:
  StageAliasName:
    Description: stage / alias name to be used in this deploy
    Type: String
    AllowedValues:
      - prod
      - stage
      - dev
      - v1
    Default: dev

Resources:
  ApiGatewayApi: …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-lambda aws-sam-cli aws-serverless aws-sam

12
推荐指数
1
解决办法
4047
查看次数

运行 AWS sam local invoke 时 Python 未找到模块

我刚刚开始使用 SAM 使用 AWS 无服务器并遇到以下问题:

SAM invoke 似乎找不到我的 lambda 处理程序正在导入的 python 模块,但我可以以其他方式导入该模块。

结构我的项目是:

根目录/

  • 我的模块名称/
    • 我的模块.py
  • aws/
    • 山姆/
      • 模板.yaml
      • 打包的.yaml
      • myawsservice/
        • 应用程序
      • 测试/
        • 测试事件.json

我在 python3.6 虚拟环境中工作,我已经使用安装工具安装了我的 python 包(mymodulename):

python setup.py develop
Run Code Online (Sandbox Code Playgroud)

因此,如果我在虚拟环境中冻结 pip,我会看到:

Pillow==6.0.0
PyPDF2==1.26.0
reportlab==3.5.20
mymodulename==0.5.0
Run Code Online (Sandbox Code Playgroud)

另外如果我去:

cd root-dir/aws/sam/
python

>>> import mymodulename
Run Code Online (Sandbox Code Playgroud)

这成功了。所以它在python路径上。

但是当我在本地调用 sam 时,即:

sam local invoke MyAWSServiceFunction --event ../sam/test/test_event.json
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

2019-05-02 09:19:17 Found credentials in shared credentials file: ~/.aws/credentials
2019-05-02 09:19:18 Invoking app.lambda_handler (python3.6)

Fetching lambci/lambda:python3.6 Docker container image......
2019-05-02 …
Run Code Online (Sandbox Code Playgroud)

python-3.x aws-lambda aws-serverless

11
推荐指数
1
解决办法
4372
查看次数

修复 AWS API 网关不存在的 CORS“响应预检...”标头并放大

我一直在为下面的错误而苦苦挣扎。我已经尝试了很多教程和 stackoverflow 答案,但没有一个解决方案可以解决我的问题。

从源“ http://localhost:3000 ”访问 XMLHttpRequest at ' https://xxx '已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:否 'Access-Control-Allow-Origin ' 请求的资源上存在标头。

我正在使用 SAM 无服务器来创建我的 api。

模板.yaml:

Globals:
  Function:
    Timeout: 10
  Api:
    Cors:
      AllowMethods: "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'"
      AllowHeaders: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
      AllowOrigin: "'*'"
Run Code Online (Sandbox Code Playgroud)

我的 lambda 函数: 我的 GET 响应和 OPTIONS 响应都返回以下标头:

headers: {
  "Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'",
  "Access-Control-Allow-Origin": "'*'",
  "Access-Control-Allow-Methods": "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'"
}
Run Code Online (Sandbox Code Playgroud)

我的 API 使用放大进入我的 ReactJs 应用程序:

API.get(apiName, path, {
   headers: {
      "Access-Control-Allow-Origin": "*",
      // "Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-requested-with",
      // "Access-Control-Allow-Methods": "OPTIONS,POST,GET,PUT,DELETE",
      // 'Content-Type': 'application/json'
   }
})
Run Code Online (Sandbox Code Playgroud)

我已经在我的 template.yaml、我的 lambda 函数和我的 reactJs 项目中尝试了 Access-Control-Allow-Headers、Access-Control-Allow-Methods …

javascript sam aws-cloudformation aws-api-gateway aws-serverless

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

授权标头需要“Credential”参数。授权标头需要“Signature”参数

我已经交付了 aws serverless(LAmbda、API GW 和 DynamoDB),但在开发人员测试期间,他们的“Postman”实用程序遇到了以下错误:

{

    "message": "Authorization header requires 'Credential' parameter. 
               Authorization header requires 'Signature' parameter. 
               Authorization header requires 'SignedHeaders' parameter. 
               Authorization header requires existence of either a 'X-Amz-Date' or a 'Date'          
               header. 
               Authorization=xxxxxxxxxxxxxxxxxxxx"
} 
Run Code Online (Sandbox Code Playgroud)

我已经检查了cloudwatch日志,但没有发现任何内容,我认为这意味着请求没有到达API端点,我不知道为什么。

实际上,我需要找出这个错误是否是由于 Postman 参数或 api 端点而发生的。

PS Lambda代码是使用Python开发的

请指教。

amazon-web-services api-gateway aws-serverless

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

在 AWS Serverless 平台上部署 Laravel (laravel-mix) 应用程序

我正在尝试在 AWS 无服务器平台上部署我的 Laravel 应用程序,我在我的 Laravel-mix 中使用动态导入和代码拆分来编译资产,要执行此操作我按照bref 包文档中的步骤安装了所需的图书馆按照指示,我还将我的公共目录与我的 s3 存储桶同步

npm run prod
aws s3 sync public/ s3://<bucket-name>/ --delete --exclude index.php
Run Code Online (Sandbox Code Playgroud)

并将我的.env文件配置为:

MIX_ASSET_URL=https://<bucket-name>.s3.amazonaws.com
ASSET_URL=https://<bucket-name>.s3.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

接下来我将我的blade文件配置为:

<script src="{{ asset('nits-assets/js/app.js') }}"></script>
Run Code Online (Sandbox Code Playgroud)

我的webpack.mix.js文件有:

const mix = require('laravel-mix')

const webpack = require('webpack');

const ASSET_URL = process.env.ASSET_URL + "/";

mix.js('resources/js/app.js', 'public/nits-assets/js')
    .postCss('resources/sass/app.css', 'public/nits-assets/css', [
        require("tailwindcss"),
    ])
    .webpackConfig({
        output: {
            chunkFilename: 'nits-assets/chunks/[name].[contenthash].js',
            publicPath: ASSET_URL
        },
        resolve: {
            symlinks: false,
            alias: {
                NitsModels: path.resolve(__dirname, 'Models'),
            },
        },  
        plugins: [ …
Run Code Online (Sandbox Code Playgroud)

laravel webpack laravel-mix aws-serverless bref

10
推荐指数
1
解决办法
415
查看次数