我确定我已经将我的Lambda设置为具有对私有桶的读/写访问权限; 更具体地说,我的lambda将执行s3.headObject和s3.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
我无法在 API 网关实例上启用 CORS,如下所示:
我已经尝试了很多事情,例如检查DEFAULT 4XX和DEFAULT 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
我正在为我的 AWS 支持的应用程序使用无服务器框架。serverless.yml到目前为止,我一直在编写一个超长文件,其中包含我所有的 lambda 代码、资源、IAM 角色和状态机。我发现管理这个大文件非常困难。我该如何解决这个问题?有什么方法可以将我的serverless.yml文件分割成更小的、可管理的块吗?yml如果我能每人得到一份就太好了lambda。提前致谢
lambda yaml amazon-web-services serverless-framework serverless
我正在配置 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
我一直在尝试寻找在 Azure Functions 上的无服务器环境中运行 Django 的方法。
\n\n假设我只能使用 Azure 服务,我想确保我们将编写的 Django 代码应该是可移植的(可以部署在其他任何地方)。
\n\n我一直在尝试几种方法,包括Azure 上的 Python:第 4 部分\xe2\x80\x94运行无服务器 Django和无服务器框架,但我仍然无法使环境运行无错误。
\n\n我想确定,即使有人有运行 Django 无服务器的工作想法以及一些关于良好资源的指导?
\n所以我配置了 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
我正在尝试使用 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
我正在尝试使 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
我正在使用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吗?这样做的正确方法是什么?
是否可以在无服务器框架中使用 Lambda 函数别名 ( https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html )?如果是这样,有人有一个如何做到这一点的例子吗?
更新:
我在 SAM 中找到了它:
AutoPublishAlias:通过添加此属性并指定别名,AWS SAM:
根据 Lambda 函数的 Amazon S3 URI 的更改检测何时部署新代码。
使用最新代码创建并发布该函数的更新版本。
使用您提供的名称创建别名(除非别名已存在),并指向 Lambda 函数的更新版本。函数调用应使用别名限定符来利用这一点。如果您不熟悉 Lambda 函数版本控制和别名,请参阅 AWS Lambda 函数版本控制和别名 。
有没有办法在无服务器框架中做到这一点?