标签: aws-sam

如何使用 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万
查看次数

Step Function 中的嵌套 Step Function:未知错误:“...无权创建托管规则”

我在 SAM/CloudFormation 模板中创建了一个 Step Function(父),它调用另一个 Step Function(子)。我正在按照使用服务集成模式从 Parent 调用 Child 的说明进行操作。但是我遇到了一个与 IAM 相关的(我认为)错误,我在通过 CLI 部署时无法解决。(错误显示在 CLI 输出中,因此它从未真正进入 AWS。之前有很多部署,因此changeset只是尝试使用此部署修改 Step Function。)

'arn:aws:iam::{Account-Number}:role/{Parent-Step-Function-Role-Name}' is not authorized to create managed-rule. (Service: AWSStepFunctions; Status Code: 400; Error Code: AccessDeniedException; Request ID: {Long-Id-Number})

为了获得我想要的同步行为(父调用子,等待子的执行完成,然后移动到下一个状态)我使用建议(来自上面的服务集成模式链接)创建一个任务(在我的 SAM 模板中)如下所示:

...More States...

"Call Child State": {
  "Type": "Task",
  "Next": "The Next State",
  "Resource": "arn:aws:states:::states:startExecution.sync",
  "Parameters": {  
    "Input": {
      "comment": "Hello World!"
    },
    "StateMachineArn": "${ChildStepFunction}",
    "Name": "ChildExecutionFromParent"
  }
},

...More States...
Run Code Online (Sandbox Code Playgroud)

我已经为 Parent 定义了 IAM …

amazon-web-services aws-cloudformation amazon-iam aws-step-functions aws-sam

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

如何从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
查看次数

How to enable CORS with AWS SAM

I'm trying to enable CORS in my AWS SAM app. Here is the snippet from my template.yaml:

Globals:
  Api:
    Cors:
      AllowMethods: "'*'"
      AllowHeaders: "'*'"
      AllowOrigin: "'*'"

Resources:
  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: prod
      Auth:
        Authorizers:
          MyCognitoAuthorizer: ...

  getByIdFunc:
    Type: AWS::Serverless::Function
    Properties:
      Handler: src/handler.handle
      Events:
        ApiEvent:
          Type: Api
          Properties:
            Path: /{id}
            Method: GET
            RestApiId: !Ref MyApi
Run Code Online (Sandbox Code Playgroud)

根据此Using CORS with AWS SAMhttps://github.com/aws/serverless-application-model/issues/373,cors配置应该可以工作,但不幸的是API响应上没有设置标头,如下所示。

< HTTP/2 200 
< content-type: application/json
< content-length: 770
< date: Tue, 13 Apr 2021 …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services cors aws-api-gateway aws-sam infrastructure-as-code

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

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
查看次数

AWS SAM:嵌套堆栈,从根堆栈引用 API 网关

我想将我的 SAM 应用程序拆分为多个部分。

我想在根堆栈中创建一个 API ( AWS::Serverless::Api )。

我正在我的子堆栈中创建 lambda 函数,我想在其中提供从根堆栈到 API 事件的 API 引用。

这可行吗?我没有找到任何从根堆栈访问 API 到子堆栈的好例子?

我尝试使用以下模板 -

parenttemplateapi:
    Type: AWS::Serverless::Application
    Properties:
      Location:
        ApplicationId: arn:aws:serverlessrepo:us-east-1:account_id:applications/parent-template
        SemanticVersion: 1.0.0



HelloWorldFunction:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: hello_world/
      Handler: app.lambda_handler
      Runtime: python2.7
      Events:
        HelloWorld:
          Type: Api
          Properties:
            Method: get
            Path: /hello
            RestApiId: !GetAtt parenttemplateapi.Outputs.ServerlessGW-restApiId
Run Code Online (Sandbox Code Playgroud)

当我尝试部署此模板时,出现以下错误 -

错误:无法为堆栈创建变更集:子模板,例如:Water ChangeSetCreateComplete 失败:Water 遇到终端故障状态状态:FAILED。原因:转换 AWS::Serverless-2016-10-31 失败:内部转换失败。

任何指示/建议?

我指的是以下链接 -

https://aws.amazon.com/blogs/compute/annoucing-nested-applications-for-aws-sam-and-the-aws-serverless-application-repository/

此处可以使用来自根堆栈的 API 网关 ID (AWS::ApiGateway::RestApi) 吗?

https://dev.to/grahamcox82/building-a-larger-serverless-application-part-3-modular-monorepos-3mon

这可以使用无服务器框架来实现吗?

amazon-web-services aws-cloudformation aws-api-gateway serverless-framework aws-sam

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

一起使用 Amplify 和 SAM?

我在这里有些困惑,想看看是否有人能让我直截了当。

我正在将 Amplify 用于 Vue 应用程序。它调用调用 Lambda 的 API 网关,所有这些都是手动设置的,但我想使用 IaaS 的强大功能并使用 SAM 来完成。

Amplify CLI 包括添加 API/函数的能力,进而创建 CloudFormation 模板和堆栈,这很好。然而,这似乎并没有创建 Amplify 应用程序本身,除了创建一个连接到没有存储库的空应用程序,当然 CLI 只延伸到这么多服务。

我发现可以在 CloudFormation 中配置 Amplify 应用程序。SAM 附带的命令行工具也很有用。设置所有这些的正确方法是什么?

我能否为 Amplify 创建创建一个 SAM 模板,该模板与 Amplify 创建的堆栈配合使用以创建 API/函数,而不是在没有自动生成帮助的情况下手动构建 SAM 模板?然后,如果我稍后添加不支持 Amplify 的服务,我也可以将它们添加到 SAM。

我有时间尝试导航 SAM/CF/CDK/Amplify 哈哈

amazon-web-services aws-cloudformation aws-amplify aws-sam

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

Python 中的 AWS Lambda:在 Lambda 函数处理程序中导入父包/目录

我在我的无服务器应用程序(避免混乱的最简单应用程序)中有一个类似于以下的目录结构,我使用 AWS SAM 和 Python 3.8 作为运行时创建了它:

??? common
?   ??? a.py
??? hello_world
?   ??? __init__.py
?   ??? app.py
?   ??? requirements.txt
??? template.yaml
Run Code Online (Sandbox Code Playgroud)

我想common/a.py在 Lambda 处理程序中导入模块 - hello_world/app.py。现在我知道我可以通过将路径添加到or来在 Python 中正常导入它,但是当代码在 Docker 容器内的 Lambda 中运行时它不起作用。调用时,Lambda 处理函数在目录内运行,不考虑文件夹结构。PYTHONPATHsys.path/var/task

我尝试插入/var/task/common, /var/common,/var甚至像这样/commonsys.path编程方式插入:

import sys
sys.path.insert(0, '/var/task/common')
from common.a import Alpha
Run Code Online (Sandbox Code Playgroud)

但我仍然收到错误:

ModuleNotFoundError: No module named 'common'

我知道Lambda 层,但鉴于我的场景,我想直接引用多个 Lambda 函数中的公共代码,而无需上传到层。我想serverless-python-requirements无服务器框架中但在 …

python python-3.x aws-lambda aws-sam-cli aws-sam

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