amazon-web-services - Localstack:函数已经存在/ResourceConflictException
问题描述
我部署到在 Docker 中运行的 localstack(通过 进行部署serverless-localstack
)每次都失败。使用 0.11.1 版本,它在 3-5 次尝试后工作(没有更改任何内容),并且使用最新版本,将整个堆栈部署到 localstack 没有任何变化。我的 localstack docker 镜像是最新的。
当其余的被注释掉时,单独部署一个或两个函数是可行的。即使我将所有函数的处理程序更改为像一些无服务器示例中的简单处理程序,它也可以工作。因此,随着包大小的增加,错误似乎出现了。
我的第一个猜测是部署时会出现一些超时,因为完整的包大小对于八个功能来说相对较大,并且部署需要很长时间。另一个观察:当错误出现时,有 1-2 个函数和资源/流已经部署但无法访问。试图为 docker 提供更多资源,但这也无济于事。
来自本地堆栈的错误:
Running CloudFormation stack deployment loop iteration 1
localstack_1 | 2020-05-30T20:31:40:DEBUG:localstack.services.cloudformation.cloudformation_starter: Currently processing stack resource api-dev-dev/GraphQLMainHandlerLambdaVersionOcnwJH5Fo772wd6pU0oM5FhOPeqfRUzVOcuaYd1Oizk: None
localstack_1 | 2020-05-30T20:31:40:DEBUG:localstack.services.cloudformation.cloudformation_starter: Currently processing stack resource api-dev-dev/GraphQLMainHandlerLambdaFunction: True
localstack_1 | 2020-05-30T20:31:40:ERROR:localstack.services.cloudformation.cloudformation_starter: Unable to parse and create resource "GraphQLMainHandlerLambdaVersionOcnwJH5Fo772wd6pU0oM5FhOPeqfRUzVOcuaYd1Oizk": 'FunctionName' Traceback (most recent call last):
Unable to parse and create resource "GraphQLMainHandlerLambdaFunction": An error occurred (ResourceConflictException) when calling the CreateFunction operation: Function already exist: api-dev-dev-graphQLMainHandler Traceback (most recent call last)
...
botocore.errorfactory.ResourceConflictException: An error occurred (ResourceConflictException) when calling the CreateFunction operation: Function already exist: api-dev-dev-graphQLMainHandler
+还有更多出于相同的原因。
无服务器.yaml:
service:
name: api-${self:provider.stage}
provider:
name: aws
runtime: nodejs12.x
stage: ${opt:stage, 'dev'}
region: ${opt:region, 'eu-central-1'}
profile: dev-local
environment:
STAGE: ${self:provider.stage}
MAIN_TABLE_NAME: ${self:custom.mainTableName}
MAIN_BUCKET_NAME: ${self:custom.mainBucketName}
#MAIN_TABLE_STREAM_ARN:
#Fn::GetAtt:
#- MainTable
#- StreamArn
#DYNAMODB_REGION: ${self:provider.region}
#AWS_PROFILE: ${self:provider.profile}
AWS_REGION: ${self:provider.region}
package:
include:
- src/**
functions:
graphQLMainHandler:
handler: src/handler/graphQLMainHandler.graphQLMainHandler
events:
- http:
method: post
path: graphql-main
cors: true
dynamoDBStreamHandler:
handler: src/handler/dynamoDBStreamHandler.dynamoDBStreamHandler
events:
- stream:
type: dynamodb
arn:
Fn::GetAtt:
- MainTable
- StreamArn
batchSize: 10
startingPosition: TRIM_HORIZON
pictureHandler:
handler: src/handler/pictureHandler.pictureHandler
events:
- http:
method: get
path: picture
cors: true
taskHandler:
handler: src/handler/taskHandler.taskHandler
updateMainTableElasticsearchMappings:
handler: src/handler/dev.updateMainTableElasticsearchMappings
createMainTableElasticsearchIndex:
handler: src/handler/dev.createMainTableElasticsearchIndex
analysisTaskRunner:
handler: src/handler/taskRunner.analysisTaskRunner
sendNotificationsTaskRunner:
handler: src/handler/taskRunner.sendNotificationsTaskRunner
plugins:
- serverless-webpack
- serverless-localstack
- serverless-offline
resources:
Resources:
MainTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: ${self:custom.mainTableName}
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
BillingMode: PAY_PER_REQUEST
StreamSpecification:
StreamViewType: NEW_IMAGE
MainBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: ${self:custom.mainBucketName}
AccessControl: PublicRead
CorsConfiguration:
CorsRules:
- AllowedMethods:
- GET
AllowedOrigins:
- "*"
AllowedHeaders:
- "*"
custom:
serverless-offline:
host: 0.0.0.0
port: 3000
webpack:
packager: yarn
webpackConfig: ./webpack.config.js
includeModules: true
localstack:
debug: true
stages:
- dev
autostart: false
#lambda:
#mountCode: false
mainTableName: main-${self:provider.stage}
mainBucketName: main-${self:provider.stage}
码头工人-compose.dev.yml:
version: '3'
services:
localstack:
privileged: true
image: localstack/localstack
environment:
- EDGE_PORT=4566
- DEFAULT_REGION=eu-central-1
- AWS_DEFAULT_REGION=eu-central-1
- DEBUG=1
- COMPOSE_PARALLEL_LIMIT=100
- LAMBDA_EXECUTOR=docker-reuse
- DOCKER_HOST=unix:///var/run/docker.sock
- USE_SSL=1
volumes:
- "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
ports:
- "4566-4599:4566-4599"
(...)
解决方案
推荐阅读
- python - Django Oscar 图像保存在缓存文件夹中但未显示
- mysql - 在 MySQL 中执行递归查询时出错
- c# - 使用 Microsoft.Management.Infrastructure 检索串行端口信息
- css - 如何摆脱图标的边框?
- python - 在 python 中运行进程时做某事
- android - firebase 存储 java.lang.IllegalStateException:任务尚未完成
- android - Firebase 回收器选项不起作用:实时数据库
- html - 标题上的背景图像有问题
- c++ - 如何在 c++ winform 中的线程之间传递数据?
- flutter - 由于 gradle 版本问题,flutter 构建失败