Serverless 프레임 워크를 사용할 때 실수로 다른 서비스에서 같은 이름의 서비스를 사용했기 때문에 문제가 발생합니다.Serverless 서비스 업데이트 DeletionPolicy로 생성 된 Dynamodb 테이블 retain
An error occurred: tableX - TableX already exists.
의 내가 서비스의 같은 이름을 가진 두 개의 "serverless.yml"파일을 모두 가지고 있다고 가정하자. 그 중 하나 ("test1"이라고 함)에 리소스 (DynamoDB 테이블)가 있고 다른 하나는 리소스가 없습니다 ("test2"). 다음 조각처럼 :
Test1을
service: sandbox-core
provider:
name: aws
stage: core
runtime: nodejs6.10
region: sa-east-1
memorySize: 128
timeout: 300
resources:
Resources:
table3:
Type: 'AWS::DynamoDB::Table'
DeletionPolicy: Retain
Properties:
TableName: SandboxTable3
AttributeDefinitions:
-
AttributeName: provider
AttributeType: S
-
AttributeName: appId
AttributeType: S
KeySchema:
-
AttributeName: provider
KeyType: HASH
-
AttributeName: appId
KeyType: RANGE
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
table4:
Type: 'AWS::DynamoDB::Table'
DeletionPolicy: Retain
Properties:
TableName: SandboxTable4
AttributeDefinitions:
-
AttributeName: session
AttributeType: S
KeySchema:
-
AttributeName: session
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 1
functions:
auth:
handler: handler.auth
events:
- http:
path: auth/{session}/{provider}/{appId}
method: get
cors: true
Test2를
service: sandbox-core
provider:
name: aws
stage: core
runtime: nodejs6.10
region: sa-east-1
memorySize: 128
timeout: 300
functions:
createCustomData:
handler: handler.createCustomData
events:
- http:
path: teste2
method: post
cors: true
나는 DeletionPolicy: Retain
으로, 원로 "TEST1는"그가와 테이블, 테이블을 생성 sls deploy
때 매우 현명한 데이터. 그런 다음 다른 기능이 있지만 자원 (DynamoDB 테이블)이없는 i sls deploy
"test2"과 같이 예상 한대로 수행합니다. 테이블 삭제를 건너 뜁니다.
그러나 "test1"을 다시 배포하면 테이블을 인식하지 못하고 기존 테이블을 업데이트하지 않고 "만들기"시작하여 배포하지 못합니다.
삭제되지 않은 테이블이 필요하며 서비스에서 기능이 필요합니다. Cloud Formation이 첫 번째 배포에서 생성 된 테이블의 트랙을 잃어버린 것처럼 보입니다.
나는이 github thread에 말한 것과 같은 서비스 (리소스에 대해서만)를 분리하고 싶지 않습니다. 실행중인 테이블이 필요합니다. 많은 양의 데이터가 있으며 백업 및 복구가 너무 비싸서 많은 사용자가 영향을받을 수 있습니다.
그래서 Cloud Formation Stack에서 해당 테이블을 업데이트하고 생성하려고 시도하지 않는다는 것을 어떻게 알 수 있습니까? Cloud Formation Stack에서 서비스를 추적하는 방법은 무엇입니까? 그리고 리소스가없는 서비스를 배포하지 못하게하려면 어떻게해야합니까?
이 경우 가장 좋은 해결책은 무엇입니까? 내 질문은 이해하기에 충분할만큼 분명하길 바랍니다.
하지만 난 그것을 다시 만들지 않으려는, 나는 테이블과 기능을 업데이트 할. "test2"를 배포 할 때 "test1"이 더 이상 존재하지 않습니다. "테이블이 이미 존재하기 때문에"sls가 "test1"을 다시 배포하려고 할 때 다시 시도 할 수 없습니다. 무슨 일이 일어 났는지 보려면 여기에 적어 놓은 코드를 사용해보십시오. –