标签: serverless-framework

为什么我的无服务器Lambda无法访问S3存储桶和项目?

我确定我已经将我的Lambda设置为具有对私有桶的读/写访问权限; 更具体地说,我的lambda将执行s3.headObjects3.upload.为了让这个工作,我错过了什么?

我的Lambda的政策:

{
"Statement": [
    {
        "Resource": "arn:aws:logs:us-east-1:*:*",
        "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
        ],
        "Effect": "Allow"
    },
    {
        "Resource": "arn:aws:s3:::PRIVATE_BUCKET/folder_name/*",
        "Action": [
            "s3:GetObject",
            "s3:PutObject"
        ],
        "Effect": "Allow"
    }
],
"Version": "2012-10-17"
Run Code Online (Sandbox Code Playgroud)

}

我的S3存储策略:

 {
    "AWSTemplateFormatVersion" : "2010-09-09",
    "Description" : "Bucket that is read-accessible internally",
    "Parameters" : {
        "Environment" : {
            "Description" : "dev",
            "Type" : "String",
            "Default" : "dev",
            "AllowedValues" : [ "dev" ]
        }
    },
    "Resources" : {
        "PrivateBucket" : {
            "Type" : "AWS::S3::Bucket", …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services aws-lambda serverless-framework

7
推荐指数
1
解决办法
4345
查看次数

API网关:无法启用CORS

我无法在 API 网关实例上启用 CORS,如下所示:

1、设置: 在此输入图像描述

2、结果: 在此输入图像描述

我已经尝试了很多事情,例如检查DEFAULT 4XXDEFAULT 5XX并按照某些帖子中的建议手动输入 Access-Control-Allow-Methods 。

如果我将鼠标悬停在错误上,我会得到:Invalid Response status code specified

我可以使用浏览器获取数据,但只能通过邮递员完成 POST 操作。我的 ReactJS 网站也不会发布,抛出:

Access to XMLHttpRequest at <ENDPOINT> from origin <S3-REACT-BUCKET> has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我读到我的 React 应用程序应该发送 CORS 标头(尚未实现),但我什至无法在 API 网关中启用 CORS!

cors aws-lambda aws-api-gateway serverless-framework serverless

7
推荐指数
1
解决办法
3303
查看次数

如何将 serverless.yml 文件拆分为多个文件?

我正在为我的 AWS 支持的应用程序使用无服务器框架。serverless.yml到目前为止,我一直在编写一个超长文件,其中包含我所有的 lambda 代码、资源、IAM 角色和状态机。我发现管理这个大文件非常困难。我该如何解决这个问题?有什么方法可以将我的serverless.yml文件分割成更小的、可管理的块吗?yml如果我能每人得到一份就太好了lambda。提前致谢

lambda yaml amazon-web-services serverless-framework serverless

7
推荐指数
1
解决办法
5653
查看次数

requestParameters 返回“指定的映射表达式无效:true”

我正在配置 lambda 函数的 API 网关与Serverless Framework 0.4.2 版的集成。

我的问题是定义端点的请求参数。API 网关条目的AWS 文档说:

请求参数

表示 Amazon API Gateway 可以接受的请求参数。请求参数表示为键/值映射,源作为键,布尔标志作为值。布尔标志用于指定是否需要该参数。源必须与模式 method.request.{location}.{name} 匹配,其中 location 是查询字符串、路径或标头。name 是有效的唯一参数名称。此处指定的源可用于集成以映射到集成请求参数或模板。

据我了解, 中的配置s-function.json直接提供给 AWS CLI,因此我以以下格式指定了请求参数: "method.request.querystring.startYear": true. 但是,我收到一个Invalid mapping expression specified: true错误。我也尝试将配置指定为"method.request.querystring.startYear": "true"相同的结果。

s-function.json

{
    "name": "myname",
    // etc...
    "endpoints": [
        {
            "path": "mypath",
            "method": "GET",
            "type": "AWS",
            "authorizationType": "none",
            "apiKeyRequired": false,
            "requestParameters": {
                "method.request.querystring.startYear": true,
                "method.request.querystring.startMonth": true,
                "method.request.querystring.startDay": true,
                "method.request.querystring.currentYear": true,
                "method.request.querystring.currentMonth": true,
                "method.request.querystring.currentDay": true, …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cli aws-api-gateway serverless-framework

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

使用 Azure Functions 的无服务器 Django

我一直在尝试寻找在 Azure Functions 上的无服务器环境中运行 Django 的方法。

\n\n

假设我只能使用 Azure 服务,我想确保我们将编写的 Django 代码应该是可移植的(可以部署在其他任何地方)。

\n\n

我一直在尝试几种方法,包括Azure 上的 Python:第 4 部分\xe2\x80\x94运行无服务器 Django无服务器框架,但我仍然无法使环境运行无错误。

\n\n

我想确定,即使有人有运行 Django 无服务器的工作想法以及一些关于良好资源的指导?

\n

python django azure serverless-framework serverless

6
推荐指数
1
解决办法
2922
查看次数

如何使用无服务器框架通过 AWS Lambda 函数环境变量访问 SSM 参数存储值?

所以我配置了 lambda 函数的 .yaml 文件,如下所示:

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: An AWS Serverless Specification template describing your function.
Resources:
  NewUser:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: NewUser/index.handler
      Runtime: nodejs8.10
      Environment:
        Variables:
          database_encrypt: ${ssm:databaseEncrypt}
          database_password: ${ssm:databasePassword}
          database_server: '8.8.8.8'
          database_user: ${ssm:databaseUser}
          database_version: ${ssm:databaseVersion}
      Description: ''
      MemorySize: 128
      Timeout: 15
      Role: 'arn:aws:iam::663404525923:role/LambdaRole'
      Events:
        LambdaMicroservice:
          Type: Api
          Properties:
            Path: /User/NewUser
            Method: ANY
Run Code Online (Sandbox Code Playgroud)

我的 lambda 函数如下所示:

var config = {  
  user: process.env.database_user,  
  password: process.env.database_password,  
  server: process.env.database_server,
  database: process.env.database_version,
  options: {encrypt: true}  
};

class UserService {

    constructor(){
        console.log(config); …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js aws-lambda serverless-framework aws-parameter-store

6
推荐指数
1
解决办法
6981
查看次数

Cognito 凭证无权执行执行 api

我正在尝试使用 AWS Cognito 组创建基于角色的访问控制。我定义了以下角色和策略来拒绝对资源的访问

CognitoAuthRole:
      Type: AWS::IAM::Role
      Properties:
        Path: /
        AssumeRolePolicyDocument:
          Version: "2012-10-17"
          Statement:
            - Effect: "Allow"
              Principal:
                Federated: "cognito-identity.amazonaws.com"
              Action:
                - "sts:AssumeRoleWithWebIdentity"
              Condition:
                StringEquals:
                  "cognito-identity.amazonaws.com:aud":
                    Ref: CognitoIdentityPool
                "ForAnyValue:StringLike":
                  "cognito-identity.amazonaws.com:amr": authenticated
        Policies:
          - PolicyName: "CognitoAuthorizedPolicy"
            PolicyDocument:
              Version: "2012-10-17"
              Statement:
                - Effect: "Deny"
                  Action: "*"
                  Resource: "*"
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个名为 admin 隐身用户池的组,并分配一个带有策略的角色,让用户调用 API,如下所示

CognitoUserPoolGroupAdmin:
  Type: AWS::Cognito::UserPoolGroup
  Properties:
    UserPoolId:
      Ref: CognitoUserPool
    GroupName: Admin
    Precedence: 0
    RoleArn:
      Fn::GetAtt:
        - AdminRole
        - Arn

AdminRole:
      Type: AWS::IAM::Role
      Properties:
        Path: /
        RoleName: AdminRole
        AssumeRolePolicyDocument:
          Version: "2012-10-17"
          Statement:
            - …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-cognito aws-api-gateway serverless-framework

6
推荐指数
1
解决办法
2207
查看次数

psycopg2 不适用于 AWS Lambda 上的无服务器框架部署

我正在尝试使 lambda 函数连接到 Redshift,并通过无服务器框架部署相同的函数。

无服务器.yml 配置:

pythonRequirements:
    dockerizePip: non-linux
    dockerFile: ./Dockerfile
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

FROM lambci/lambda:build-python3.6
RUN yum install -y postgresql-devel postgresql-libs
Run Code Online (Sandbox Code Playgroud)

要求.txt

psycopg2==2.8.5
requests==2.22.0
boto3==1.9.234
Run Code Online (Sandbox Code Playgroud)

部署是通过以下方式完成的:

FROM lambci/lambda:build-python3.6
RUN yum install -y postgresql-devel postgresql-libs
Run Code Online (Sandbox Code Playgroud)

AWS Lambda 给出错误:

libpq.so.5: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我可以确认它丢失了,但是当我使用本地 docker 映像进行相同测试时,该文件存在。我仍然不确定如何serverless实际部署该包

我不想使用psycopg2-binary,而且我仍然不确定aws-psycopg2,关于如何让代码运行有什么建议吗?

psycopg2 amazon-web-services docker aws-lambda serverless-framework

6
推荐指数
1
解决办法
2726
查看次数

当投影类型更改时,如何更新 dynamodb GSI?

我正在使用serverless框架来管理 AWS 基础设施,并且我已经使用 GSI 定义了 dynamodb 表。现在我需要更新 GSi 的投影类型,但我知道这是不允许的。因此,我手动从 dynamodb 表中删除 GSI,但运行时仍然出现以下错误sls deploy

An error occurred: DeviceTable - Cannot update GSI's properties other than Provisioned Throughput. You can create a new GSI with a different name..

我不明白的是,GSI 已被删除,但为什么它仍然抱怨 GSI 的属性。还有什么地方记得GIS吗?这样做的正确方法是什么?

amazon-dynamodb serverless-framework

6
推荐指数
2
解决办法
7230
查看次数

Lambda 函数与无服务器框架的别名?

是否可以在无服务器框架中使用 Lambda 函数别名 ( https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html )?如果是这样,有人有一个如何做到这一点的例子吗?

更新:

我在 SAM 中找到了它:

AutoPublishAlias:通过添加此属性并指定别名,AWS SAM:

根据 Lambda 函数的 Amazon S3 URI 的更改检测何时部署新代码。

使用最新代码创建并发布该函数的更新版本。

使用您提供的名称创建别名(除非别名已存在),并指向 Lambda 函数的更新版本。函数调用应使用别名限定符来利用这一点。如果您不熟悉 Lambda 函数版本控制和别名,请参阅 AWS Lambda 函数版本控制和别名 。

https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/automating-updates-to-serverless-apps.html

有没有办法在无服务器框架中做到这一点?

amazon-web-services aws-lambda serverless-framework

6
推荐指数
1
解决办法
4219
查看次数