标签: aws-sam-cli

包括 aws-sam 中的本地源代码目录和文件?

我在一个单一存储库工作,其中有一个AWS SAM (lambda) 应用程序。结构或多或少像这样:

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 my_folder1\n  \xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file1.py\n\xc2\xa0   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file2.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 my_folder2\n \xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 my_folder3\n \xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file3.py\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 sam-app\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 events\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 event.json\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 samconfig.toml\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 template.yaml\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 tests\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 hello_world\n    \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n    \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 requirements.txt\n                :preview:\n                numpy\n                pandas\n                ...\n    \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 app.py\n                :preview:\n                import pandas\n                from my_folder1.my_folder2.my_folder3.file3 import MyClass\n                ...\n\n    .\n    .\n    .\n    more_folders...\n …
Run Code Online (Sandbox Code Playgroud)

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

5
推荐指数
0
解决办法
2058
查看次数

FunctionName 的调用容器没有响应

尝试使用命令将dockerized Lambda转发到我的本地主机

$ sam local start-api --docker-network host
Run Code Online (Sandbox Code Playgroud)

每次尝试访问 Lambda 时都会出错:

FunctionName 的调用容器没有响应

还尝试使用host.docker.internalhost.docker.local网络,但没有成功。

有任何想法吗?解决方法?

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

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

api网关rest api地理位置标头

我正在使用 AWS SAM CLI

根据https://aws.amazon.com/about-aws/whats-new/2020/07/cloudfront-geolocation-headers/已经支持地理定位,并且 CloudFront 返回地理定位标头;例子:

CloudFront-Viewer-Country-Name: United States
CloudFront-Viewer-Country-Region: MI
CloudFront-Viewer-Country-Region-Name: Michigan
CloudFront-Viewer-City: Ann Arbor
CloudFront-Viewer-Postal-Code: 48105
CloudFront-Viewer-Time-Zone: America/Detroit
CloudFront-Viewer-Latitude: 42.30680
CloudFront-Viewer-Longitude: -83.70590
CloudFront-Viewer-Metro-Code: 505
Run Code Online (Sandbox Code Playgroud)

我希望能够使用我的 API 网关 REST API 访问这些内容,这是我的 aws sam 模板的示例。

Resources:
  login:
    Type: AWS::Serverless::Function
    Properties:
      Handler: src/functions/login.handler
      Runtime: nodejs14.x
      Layers:
        - !Ref dependencies
      Events:
        ApiEvent:
          Type: Api
          Properties:
            Method: post
            Path: /login
            RestApiId:
              Ref: mainBackendApi
mainBackendApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: !Ref Stage
      EndpointConfiguration:
        Type: EDGE
      Domain:
        DomainName: !Sub
            - <hidden>
            - apiSubDomain: …
Run Code Online (Sandbox Code Playgroud)

geolocation amazon-web-services aws-api-gateway aws-sam-cli aws-sam

5
推荐指数
0
解决办法
638
查看次数

创建具有不同集成的多个 API Gateway 阶段

我正在尝试创建一个与 API 网关关联的 lambda 函数。

每当部署新版本时,都会为该函数创建一个新的 lambda 版本,该版本将具有此 ARN arn:lambda_arn:[version]

此外,还需要创建一个新的 API 网关阶段并与该 lambda 版本集成。

当我部署 CF 堆栈时:

  • 创建新的 lambda 版本
  • 创建与该版本的 lambda 集成的 API Gateway 阶段
  • dev创建名为与 lambda 别名dev( ) 集成的API 网关阶段arn:lambda:dev,并保留此阶段,从 lambda 设置手动管理别名。

我已经尝试使用 sam cli yaml 模板以及 aws cdk 来实现此目的,但这是我面临的问题:

无法创建具有不同集成的多个 API Gateway 阶段,保留旧阶段

  • 在 cdk 中我只能创建 HttpApi 一次
http_api = apigwv2.HttpApi(self, "cdk_http_api")
Run Code Online (Sandbox Code Playgroud)

尽管我可以为该 HttpApi 创建多个阶段,但所有阶段都将具有完全相同的集成和路由。

创建部署会很有用,但即使我无法使用不同的集成(使用不同版本的 lambda)创建不同的部署

deployment = apigwv2.CfnDeployment(
    self, "first_deployment", api_id=http_api.api_id, stage_name="test"
)
Run Code Online (Sandbox Code Playgroud)

我也无法将它附加到舞台上!与下面提到的 ApiGatewayV1 不同

新创建的阶段将删除旧阶段,我无法追加新阶段 …

sam aws-api-gateway aws-sam-cli aws-sam aws-cdk

5
推荐指数
0
解决办法
554
查看次数

SAM 应用程序中的 PackageType: Image 和 build --use-container 之间有什么区别?

PackageType: image似乎需要一个 Dockerfile (查看 hello-world 示例)以及ImageUriandMetadata 它也不希望我使用Runtime, Handler, Layers(甚至不使用层)

build --use-container似乎不需要任何东西。它是否从Runtime: nodejs14.x-v1

在文档中我没有看到任何内容

当我谷歌时,有大量的文档和资源,但没有相关的

我真的很想知道,因为我现在正处于构建管道阶段。我让它在单阶段上工作得很好,现在想使用多阶段多帐户,根据我的阅读,建议使用图像。

我注意到当前的管道确实有--use-container,但我的PackageTypezip,并且在我构建它(使用sam pipeline --bootstrap)时的某个时刻,它询问我是否有任何函数使用图像。我想让我的多阶段/账户一来回答Y

它可能不相关,但这也是我计划为每个帐户使用环境变量的方式,因为用于获取数据的数据库是不同的。所以我想我必须去添加--container-env-var-filegitlab-ci.yml 脚本,或者可能在samconfig.toml [dev.build.parameters][prod.build.parameters] for itsenv-prod.json` 文件中和下

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

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

AWS SAM 给出错误“不支持的 Lambda 运行时 nodejs18.x”

我正在尝试使用 AWS sam 运行一个简单的 lambda 函数,版本(1.57.0)我已经安装在我的 ubuntu 系统中,nodejs 版本 14.18.3 当我尝试运行该项目时,它给出了 errorUnsupported Lambda 运行时 nodejs18.x 下面是完整的堆栈跟踪

Invoking index.handler (nodejs18.x)
Traceback (most recent call last):
  File "samcli/__main__.py", line 12, in <module>
  File "click/core.py", line 829, in __call__
  File "click/core.py", line 782, in main
  File "click/core.py", line 1259, in invoke
  File "click/core.py", line 1259, in invoke
  File "click/core.py", line 1066, in invoke
  File "click/core.py", line 610, in invoke
  File "click/decorators.py", line 73, in new_func
  File "click/core.py", line 610, in invoke
  File "samcli/lib/telemetry/metric.py", …
Run Code Online (Sandbox Code Playgroud)

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

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

docker 在我的 Mac 上启动并运行,但“sam local invoke”命令导致错误:本地运行 AWS SAM 项目需要 Docker

我已经在我的 Mac 上启动并运行了 Docker。但“sam local invoke”命令会导致错误:本地运行 AWS SAM 项目需要 Docker。您安装并运行了吗?

有谁知道可能是什么原因?

amazon-web-services docker aws-sam-cli

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

使用 sam 时如何将 lambda 连接到可在 Mac 本地主机上本地访问的数据库

背景

  • 我有一个连接到 RDS 数据库的 lambda。RDS 数据库和 lambda 位于 VPC 中。开发人员只能通过 Bastion 实例访问该数据库。
  • 在开发过程中,我们可以使用sam测试 lambda 。这对于不依赖于数据库的 API 来说效果很好。
  • 对于依赖于数据库的 API,我理想情况下希望连接到在 Gamma 阶段运行的数据库实例。但是,我们无法直接连接到它,因为它位于 VPC 中。

我尝试过的

  • 为了解决这个问题,我们可以在堡垒实例上使用带有端口转发的 SSM 代理,以便可以在 Mac 的本地主机上访问数据库。参见说明。示例代码如下:
aws ssm start-session --target <instance-id> --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters host="mydb.example.us-east-2.rds.amazonaws.com",portNumber="3306",localPortNumber="3306"
Run Code Online (Sandbox Code Playgroud)
  • 我现在可以通过 CLI 或像Psequelhttp://127.0.0.1:3306/这样的 GUI在本地连接到它。无需使用 SSH。
  • 但是,如果我尝试让 lambda 连接到http://127.0.0.1:3306/,则会收到错误Connection refused
  • 我的理解是,这是因为127.0.0.1解析为 docker 容器的本地主机而不是我机器的本地主机。
  • 根据码头工人文档host.docker.internal ... resolves to the internal IP address used by the host
  • 但是,如果我尝试让 lambda 连接到http://host.docker.internal:3306/ …

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

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

将Lambda部署到s3存储桶文件夹?

这是部署lambda的命令:

$ sam package --template-file sam.yaml --s3-bucket mybucket --output-template-file packaged.yaml
Run Code Online (Sandbox Code Playgroud)

但是我可以指定存储段前缀吗?所以它被部署到子文件夹而不是存储桶的根?

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

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

运行AWS SAM Local时如何指定模板参数?

使用AWS SAM Local我可以在本地测试我的无服务器应用程序,这很棒.

我也可以部署到AWS,它显然采用相同的标志aws cloudformation deploy,因此我可以传递一个参数文件,例如应用程序机密(API密钥等).

但是,我aws local start-api --help在Github上的文档中或文档中找不到有关如何在本地测试时使用参数文件的内容.

如何在运行时指向要与模板一起使用的参数文件sam local start-api

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

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