问题标签 [aws-sam]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3772 浏览

amazon-web-services - AWS CodePipeline、CodeDeploy、SAM 和 Lambda:如何(相互)连接它们?

我有点迷失在文档中。我想将 Python 代码推送到存储库并使用 CodePipeline 部署 Lambda。我有 CodeCommit 存储库,CodePipeline - 到目前为止,这是可行的,我可以创建/更新 CF 堆栈以创建补充资源。

我知道 AWS SAM 可用于使用 CF tpl 部署功能,但如何将 SAM 与 CodePipeline/CodeDeploy 连接?代码应取自“源”管道操作,然后部署为 lambda 函数。

如果 SAM 不是这里最好的自动化解决方案,那么我应该改用什么?流水线是关键要求,因此我们不必 aws cf update-stack手动运行,只需推送代码即可。

0 投票
2 回答
648 浏览

amazon-web-services - 如何配置 AWS SAM 以使用现有数据库?

在我能找到的所有示例中,SAM 模板似乎创建了一个新的 DynamoDB 表。如何将其配置为指向现有表?

0 投票
1 回答
6123 浏览

python - 如何在 AWS Lambda 上的无服务器应用程序中存储和使用 HTML 模板(使用 AWS SAM)?

代替

  • (A) 采用更传统的方式在 AWS 上运行 Web 应用程序(例如,在 AWS EC2 或 Beanstalk 上使用 Ruby/Sinatra 或 Python/Flask),或

  • (C) 在 S3 中创建静态 HTML 和 JavaScript 文件,在 AWS Lambda 中创建动态 API 端点(将 JSON 数据发送到那些通过 JavaScript 使用/解释该数据的静态网页),

我想达到一个中间立场:

  • (B) 在 AWS Lambda 中创建 HTTP 端点(例如,在 Python 中),这些端点读取和使用 HTML 模板来生成对客户端的完整 HTML 响应。

该设置将生成一个无服务器 Web 应用程序,其中 AWS Lambda 函数提供服务器端(讽刺的是我并没有忘记)生成的 HTML 输出。

在 AWS Lambda 函数的 Python 代码中,可以包含 HTML 代码片段,在函数中修改(填充数据),并将 HTML 作为text/html输出返回给客户端。这种方法的缺点是 HTML 模板随后被“嵌入”在 Python 代码中,而不是外部的单独文件中。

Q1:如何在代码包的某个地方引用 HTML 模板文件 - 模板应该是包的一部分 - 让 Python 函数读取它,并通过模板中的变量替换生成 HMTL 页面?

Q2:如何使用 AWS 无服务器应用程序模型 (AWS SAM) 在我的项目中指定/包含/链接到一组 HTML 模板文件?

0 投票
1 回答
1555 浏览

aws-api-gateway - 如何在没有明确的招摇定义的情况下在 SAM 中启用“ApiKeyRequired”属性?

在 cloudformation 中,AWS::ApiGateway::Method具有布尔属性ApiKeyRequired。我怎样才能在 SAM 中达到同样的效果?

我知道我们可以使用显式招摇配置启用。就像这样

不能在 SAM 中使用隐式 API 调用而不是显式传递AWS::Serverless::Api?因为 swagger 代码对于较少的端点是可以的,并且一旦端点增加就会变得复杂。有没有APIkeyRequired像我们这样的旗帜Cloudformation

感谢任何帮助谢谢

0 投票
3 回答
1747 浏览

amazon-web-services - AWS SAM 模板 - 定义由 API Gateway 触发的 SQS 队列

尝试通过AWS SAM CLI. 我正在使用我打包和部署的 SAM 简化模板。

我想要的只是创建一个 SQS 队列并隐式创建一个 API 网关,它将仅将有效负载放入队列中。

这是我到目前为止所尝试的(我定义 Queue + Api 的代码):

当我运行时一切都很好sam validatesam package但是当我运行时它失败了sam deploy。获取我使用的错误aws cloudformation describe-stack-events --stack-name myproject-stack

它清楚地表明了这一点Events it's not supported for AWS::SQS::Queue。但这适用于 Lambdas(资源类型AWS::Serverless::Function),这就是我尝试这种方式的原因。

但是,如果可能的话,我想避免在网关和队列之间使用 lambda。

是否可以直接为 SQS 队列定义 API 网关?如何?

谢谢!

0 投票
1 回答
1571 浏览

amazon-web-services - 无法在 Mac 上安装 AWS SAM Cli

我正在尝试在我的 Mac 上安装 AWS SAM Cli,因为我正在尝试学习 AWS 服务。但是我已经使用 bundle 成功安装了 AWS cli。但是当我也尝试安装 AWS SAM Cli 时。但它不起作用。这是我到目前为止所做的。

运行此命令

一切都很顺利。

然后我打开并编辑了 ~/.bash_profile。这是 .bash_profile 的内容

然后我关闭终端并运行 sam --version。

它说找不到命令。我的安装有什么问题?

0 投票
2 回答
2969 浏览

amazon-web-services - 当代码 URL 更改但它指向的代码没有更改时,使用 AutoPublishAlias 的 SAM Lambda 自动版本控制是否有效?

简单的问题:

SAM Lambda 自动版本控制是否AutoPublishAlias适用于AWS::Serverless::Function代码CodeUri更改但它指向的实际代码却没有的情况?

背景

我们正在使用 SAMAWS::Serverless::Function资源类型部署多个 Lambda@Edge 函数。

我们的部署通过将代码放入 S3 存储桶然后触发 CloudFormation 堆栈更新来运行。除了这些 Lambda 之外,我们的堆栈还包含其他内容。

这样,我们经常会在 lambda 代码不变的情况下进行部署。

然而,每次部署,代码 URI 都会更改为我们最新部署的存储桶,这会按预期触发尝试发布的新版本,该版本与SAM 文档中的注释内联(粘贴在下面作为上下文)

注意: AutoPublishAlias 将仅在 CodeUri 更改时发布新版本。对其他配置的更新(例如:MemorySize、Timeout)等不会发布新版本。因此,您的别名将继续指向使用旧配置的旧版本。

我问的原因是因为我们遇到了一些暂时的 CloudFormation 部署问题,我一直试图找出可能与此相关的根本原因。我们在 CloudFormation 堆栈更新中的 SAM 生成版本上得到的错误如下:

存在此 Lambda 函数的版本 ( {some number} )。修改函数以创建新版本。

我查看了创建版本的SAM 代码及其大部分文档,但找不到明确的答案。

我们可能每次都在版本上手动创建AWS::Lambda::FunctionAWS::Lambda::Version使用不同的逻辑 ID,这应该(?)解决问题,但我们试图利用 SAM 对我们的 Lambda 进行自动版本控制。

任何帮助表示赞赏!

0 投票
1 回答
1292 浏览

amazon-web-services - 如何使用 SAM 通过 API Gateway 配置异步 lambda 调用?

我已经使用 SAM 规范配置了与 API Gateway 的 lambda 代理集成,并通过传递 X-Amz-Invocation-Type: "'Event'" 标头异步调用 lambda

问题是 lambda 返回空响应(调用异步),因此 API Gateway 抛出以下错误

2018 年 11 月 14 日星期三 08:03:14 UTC:由于配置错误,执行失败:Lambda 代理响应格式错误 2018 年 11 月 14 日星期三 08:03:14 UTC:方法完成,状态:502

这种行为是预期的吗?我必须明确定义响应吗?我不想总是抛出 200,因为我也想发送错误的请求和未经授权的错误。避免这个问题的解决方案是什么?

0 投票
1 回答
1422 浏览

amazon-cloudformation - 由于找不到处理程序错误,无法部署 aws sam 堆栈

我在使用嵌套目录中部署带有处理程序的 lambda 时遇到问题sam

我执行以下步骤:

  1. 包裹:

    sam package --template template.yaml --output-template-file packaged.yaml --s3-bucket

创建我在下一步中使用的 packaged.yaml。

  1. 部署:

    aws cloudformation deploy --template-file /Users/localuser/Do/learn-sam/dynamo-stream-lambda/packaged.yaml --stack-name barkingstack

错误

Cloudformation/SAM 模板

目录结构

root_directory/ events/(用于示例事件)policies/(用于使用 CLI 为 lambda 创建的 IAM 角色) src/index.js package.json node_modules template.yaml

处理程序代码

0 投票
1 回答
1158 浏览

aws-lambda - 将 Lambda 日志写入 CloudWatch 时出现问题,可能是什么问题?

我在尝试将 Lambda 函数日志写入 CloudWatch Logs 时遇到了一些问题。如下所示,这似乎不是授权问题:

我已经尝试了更广泛的政策以及arn:aws:logs:*:*:*资源,例如我发现的一些示例。

该模板在 CloudFormation 上运行良好,并且资源被适当地创建,当我执行 lambda 函数作为测试时,一切正常,但没有写入日志。它创建日志组和日志流,但日志流中没有任何内容。

这也不是 Lambda 函数的问题。我在创建模板之前手动部署了该函数,CloudWatch Logs 在这种情况下运行良好。我完全按照手动创建模板的方法中所写的方式复制了角色和策略。

它是 CloudFormation/SAM/Lambda 中的某种已知错误吗?还是我做错了什么我没有注意到?

如果您需要更多信息来理解上下文,请告诉我。谢谢!