标签: aws-sam-cli

aws-sam-local环境变量

我在这里阅读自述文件:https://github.com/awslabs/aws-sam-local

我已经写在python 3.6拉姆达及其类似HelloWorld示例这里:https://github.com/awslabs/aws-sam-local/tree/develop/samples/hello-world/python

template.yml看起来像这样:

AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: MyFunction1 API
Resources:
  MyFunction1:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: MyFunction1
      Handler: lambda_module.lambda_handler
      Runtime: python3.6
      CodeUri: lambda.zip
      MemorySize: 128
      Timeout: 10
      Policies:
        -AWSLamdbaBasicExecutionRole
      Events:
        BingLambdaEndpoint:
          Type: Api
          Properties:
            Path: MyFunction1/search
            Method: get
Run Code Online (Sandbox Code Playgroud)

我在lambda中有环境变量但在启动时无法连接它们.文档说我可以创建一个environments.json文件并在invoke命令上附加以下内容:使用--env-vars invoke参数

我的环境文件看起来像示例,我收到一个错误: Unable to find environment variable: api_key

environment.json看起来像这样:

{
  "MyFunction1": {
    "api_key": "123456789",
    "BUCKET_NAME": "testBucket"
  }
}
Run Code Online (Sandbox Code Playgroud)

命令我运行是这样的:

sam local invoke MyFunction1 --env-vars environment_variables.json -e event.json
Run Code Online (Sandbox Code Playgroud)

有人能提供额外的见解吗?

aws-lambda aws-sam-cli serverless

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

将AWS SAM Local与docker中的dynamodb连接起来

我已经使用AWS sam本地设置了api gateway/aws lambda对,并确认我可以在运行后成功调用它

sam local start-api

然后我在docker容器中添加了一个本地dynamodb实例,并使用aws cli在其上创建了一个表

但是,将代码添加到lambda以写入我收到的dynamodb实例:

2018-02-22T11:13:16.172Z ed9ab38e-fb54-18a4-0852-db7e5b56c8cd错误:无法写入表:{"message":"connect ECONNREFUSED 0.0.0.0:8000","code":"NetworkingError", "错误号": "ECONNREFUSED", "系统调用": "连接", "地址": "0.0.0.0", "端口":8000, "区": "EU-西-2", "主机名":"0.0 .0.0","retryable":true,"time":"2018-02-22T11:13:16.165Z"}从命令写入事件:{"name":"test","geolocation":"xyz","输入":"createDestination"} END RequestId:ed9ab38e-fb54-18a4-0852-db7e5b56c8cd

我在网上看到你可能需要连接到同一个docker网络,所以我创建了一个网络docker network create lambda-local并将我的启动命令更改为:

sam local start-api --docker-network lambda-local

docker run -v "$PWD":/dynamodb_local_db -p 8000:8000 --network=lambda-local cnadiminti/dynamodb-local:latest

但仍然收到相同的错误

山姆本地打印出来 2018/02/22 11:12:51 Connecting container 98b19370ab92f3378ce380e9c840177905a49fc986597fef9ef589e624b4eac3 to network lambda-local

我正在使用以下方法创建dynamodbclient:

const AWS = require('aws-sdk')
const dynamodbURL = process.env.dynamodbURL || 'http://0.0.0.0:8000'
const awsAccessKeyId = process.env.AWS_ACCESS_KEY_ID || '1234567'
const awsAccessKey = process.env.AWS_SECRET_ACCESS_KEY || '7654321' …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-dynamodb docker aws-sam-cli

18
推荐指数
4
解决办法
9350
查看次数

如何从AWS SAM本地docker实例连接到主机MySQL?

我试图调用我的Lambda函数,sam local invoke但发现它无法连接到我的主机MySQL.我尝试添加--docker-network host但它也无法连接

Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/docker/api/client.py", line 229, in _raise_for_status
    response.raise_for_status()
  File "/usr/lib/python3.6/site-packages/requests/models.py", line 935, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: http+docker://localhost/v1.35/networks/6ad3bd87e8437e8410145d169a4edf68d1b0247a67257ce7dd1208dac3664c82/connect

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/sam", line 11, in <module>
    load_entry_point('aws-sam-cli==0.5.0', 'console_scripts', 'sam')()
  File "/usr/lib/python3.6/site-packages/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File …
Run Code Online (Sandbox Code Playgroud)

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

17
推荐指数
3
解决办法
1381
查看次数

AWS SAM 在 hello world 模板下部署错误

我目前正在致力于 AWS 无服务器 lambda 函数部署,并尝试使用 AWS SAM 进行分发和测试。但是,当我按照官方网站上的AWS SAM hello world模板教程进行操作时,我无法真正将代码部署到AWS。

我已经

  1. 分配了一个工作 IAM 账户
  2. 安装 AWS SAM 所需的每个软件包(brew、aws-sam-cli...等)
  3. 设置 AWS 配置
  4. 使用AWS提供的函数模板

然而,我收到了错误消息

错误:堆栈 aws-sam-cli-management-default 缺少标签和/或输出信息,因此不处于健康状态(当前状态:aws-sam-cli-management-default)。失败,因为堆栈可能不是由 AWS SAM CLI 创建的

amazon-web-services aws-sam-cli aws-sam

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

AWS SAM CLI 全新安装引发错误 - dyld:库未加载:@executable_path/../.Python

我正在尝试使用通过 Homebrew 安装的 AWS SAM CLI,当我尝试将 sam 与任何命令一起使用时,我看到以下错误:

dyld: Library not loaded: @executable_path/../.Python
  Referenced from: /usr/local/Cellar/aws-sam-cli/0.53.0/libexec/bin/python3.7
  Reason: image not found
Run Code Online (Sandbox Code Playgroud)

查看.Python错误中引用的文件,它被符号链接到一个实际上不存在的 python 文件夹:

drwxr-xr-x   7 RCR  staff   224 Jun 16 19:40 .
drwxr-xr-x   9 RCR  staff   288 Jul  8 14:55 ..
lrwxr-xr-x   1 RCR  staff    70 Jun 16 19:40 .Python -> ../../../../opt/python/Frameworks/Python.framework/Versions/3.7/Python
drwxr-xr-x  39 RCR  staff  1248 Jul  8 14:55 bin
drwxr-xr-x   3 RCR  staff    96 Jun 16 19:40 include
drwxr-xr-x   3 RCR  staff    96 Jun 16 19:40 …
Run Code Online (Sandbox Code Playgroud)

python homebrew aws-sam-cli aws-sam

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

在定义单个 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
查看次数

How to add environment variables in template.yaml in a secured way?

When creating Lambda function through the SAM CLI using template.yaml, I have to pass few environment variables, and they shouldn't be exposed on GitHub. Is there any way I can refer the environment variables in template.yaml through the .env file?

I didnt find any sources for the same.

Sample code snippet from template.yaml:

Properties:
  CodeUri: student /
  FunctionName: list
  Handler: index.listHandler
  Runtime: nodejs14.x
  Environment: 
    Variables:
      MONGODB_URI: mongodb://username:pwd
Run Code Online (Sandbox Code Playgroud)

sam aws-cloudformation aws-lambda aws-sam-cli

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

如何在没有 Brew 的情况下在 Linux 上安装 AWS SAM CLI

2020 年 12 月更新

AWS github 问题是Provide linux installation without homebrew #1424。请在 github 问题中监视更新以获取最新状态。

AWS 最终决定提供非 brew 方法。

我们目前正在努力通过 pyinstaller 提供更好的安装体验。在短期内,我们将继续发布 brew 以支持已经使用它的人以及 pip,但核心工件将使用 pyinstaller 生成,并希望为 Linux 和 macOS 用户提供更好的体验,这是我的希望这也将鼓励为 Linux 发行版发布下游包,例如 yum 和 deb 存储库,类似于 AWS cli 的普遍可用方式。


请提出一种无需使用自制软件即可在 Linux 中安装 AWS SAM 的方法。AWS 文档告诉使用自制软件,但是应该有一种不使用 brew 的方法。


AWS 文档

在 Linux 上安装 AWS SAM CLI 第 5 步:安装 AWS SAM CLI

按照以下步骤使用 Homebrew 安装 AWS SAM CLI:

brew tap aws/tap
brew install aws-sam-cli
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-sam-cli

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

未找到 SAM CLI 可执行文件 - Pycharm

我正在尝试配置 PyCharm 以运行 Lambda 函数。

首先,在 AWS Toolkit 中,我选择 SAM CLI 可执行文件,一切顺利: 在此输入图像描述

不管怎样,当我想添加 Lambda 运行配置时,pycharm 说:无效的 sam 可执行文件:“系统找不到特定的路由。” 在此输入图像描述

我的系统路径变量: 在此输入图像描述

请有人可以帮助我,我真的不知道还能做什么。

非常感谢!泽维

pycharm aws-sam-cli

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

如何使用 TypeScript 编写的 API Gateway 在 VS Code 中调试本地 AWS Lambda 函数?

我们即将开始使用 Lambda 函数。
我们有必须使用 TypeScript 的技术限制。
当从 Postman 调用相关端点时,我希望能够在 VS Code 中调试我的 ts 文件。

所以,我们有以下开发环境:

  • 视窗 10
  • Docker for Windows(使用 Hyper-V 而不是 WSL 2)
  • 打字稿 4.1
  • 节点 12.17
  • SAM CLI 1.13.2

我已经使用sam initHello World 模板来生成初始文件夹结构。
我已经对其进行了增强(主要基于本文)以使用 TypeScript。

文件夹结构

.
??? template.yaml
??? .aws-sam
??? .vscode
|   ??? launch.json
??? events
??? hello-world
|   ??? dist
|       ??? app.js
|       ??? app.js.map
|   ??? src  
|       ??? app.ts
|   ??? package.json
|   ??? tsconfig.json
Run Code Online (Sandbox Code Playgroud)

template.yaml

.
??? …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js typescript aws-lambda aws-sam-cli

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