AWS SAM에서 dynamo 리소스를 변경할 때 오류가 발생했습니다.
4752 단어 samCloudFormationDynamoDBAWS
템플릿에서 Dynamo의 정의를 변경하고 배포하면 다음 오류가 발생합니다.
CloudFormation cannot update a stack when a custom-named resource requires replacing. Rename FugaDynamoDBTable and update the stack again.
일단 템플릿에서 삭제 한 후 배포, 다시 빌드하는 것이 잘되었습니다. 이하 그 과정입니다.
하고 싶은 것 & 오류
개발 중 Dynamo의 GSI를 다시 붙이고 싶어졌다. 템플릿으로 다시 정의하고 배포하면 마치 리플레이스되지만 해당 테이블에는 수동으로 넣은 테스트 데이터 밖에 없었기 때문에 문제 없음.
template.ymlAWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
HogeFunction:
Type: AWS::Serverless::Function
Properties: #中略
FugaDynamoDBTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: FugaTable
GlobalSecondaryIndexes: # ←ここに変更を加えた
#以下略
sam build
→ sam deploy
라고 치고 출력을 관찰.
CloudFormation stack changeset (抜粋)
---------------------------------------------------------------------------------------------
Operation LogicalResourceId ResourceType Replacement
---------------------------------------------------------------------------------------------
* Modify FugaDynamoDBTable AWS::DynamoDB::Table True
: : : :
Replacement가 True로 문제 없기 때문에, 그대로 배포했는데, 해당 Dynamo의 업데이트에 이하의 에러가 발생해 롤백이 실행되었다.
CloudFormation cannot update a stack when a custom-named resource requires replacing. Rename FugaDynamoDBTable and update the stack again.
대응
오류 메시지는 테이블 이름( FugaTable
)을 변경하라고 한다. 그러나 테이블 이름은 바꾸고 싶지 않습니다.
AWS CloudFormation > 사용 설명서 > 스택 리소스 업데이트 동작 에 의하면, 리플레이스는 치환 자원을 작성하고 나서 낡은 자원을 삭제한다고 한다. 거기서 「이름이 쓰고 있는 것이 나쁜 것일까」라고 생각해, Dynamo DB의 웹 콘솔로부터 수동으로 삭제해, 재배포. 그러나 결과는 변함없이.
자원명( FugaDynamoDBTable
)을 바꾸면 신설 자원으로 볼 수 있을 것 같은 생각도 하지만, 왠지 기분 나쁘다.
마찬가지로 사용자 가이드 이름 유형
스택 리소스를 AWS CloudFormation 이외의 변경 사항으로 변경하지 마십시오. 예를 들어 스택에 속한 리소스의 이름을 AWS CloudFormation 없이 변경한 경우 스택을 업데이트하거나 삭제하려고 할 때 오류가 발생합니다.
의 묘사를 발견 (죄송합니다).
그럼 템플릿상에서도 없었던 것으로 해 실태에 맞추려고, FugaDynamoDBTable
의 정의를 통째로 코멘트 아웃 해 재차 배포.
CloudFormation stack changeset
------------------------------------------------------------------------------
Operation LogicalResourceId ResourceType Replacement
------------------------------------------------------------------------------
- Delete FugaDynamoDBTable AWS::DynamoDB::Table N/A
확인하고 실행. 특히 오류없이 삭제되었습니다.
다시 해당 부분을 코멘트 인해 배포.
CloudFormation stack changeset
-----------------------------------------------------------------------------------
Operation LogicalResourceId ResourceType Replacement
-----------------------------------------------------------------------------------
+ Add FugaDynamoDBTable AWS::DynamoDB::Table N/A
의도대로의 changeset가 되었으므로 그대로 실행. 무사히 배포 . 콘솔에서도 의도한 설정으로 되어 있는 것을 확인할 수 있었다.
추가
약 1년 전에 똑같은 문제로 똑같은 과정을 거치는 편이 있었다. SAM에서 빠지면 CloudFormation의 정보도 제대로 찾아야 할까.
CloudFormation의 DynamoDB 리소스 업데이트로 빠진 이야기
Reference
이 문제에 관하여(AWS SAM에서 dynamo 리소스를 변경할 때 오류가 발생했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kumatira/items/d5e38de2d02bb710c847
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
HogeFunction:
Type: AWS::Serverless::Function
Properties: #中略
FugaDynamoDBTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: FugaTable
GlobalSecondaryIndexes: # ←ここに変更を加えた
#以下略
CloudFormation stack changeset (抜粋)
---------------------------------------------------------------------------------------------
Operation LogicalResourceId ResourceType Replacement
---------------------------------------------------------------------------------------------
* Modify FugaDynamoDBTable AWS::DynamoDB::Table True
: : : :
CloudFormation cannot update a stack when a custom-named resource requires replacing. Rename FugaDynamoDBTable and update the stack again.
오류 메시지는 테이블 이름(
FugaTable
)을 변경하라고 한다. 그러나 테이블 이름은 바꾸고 싶지 않습니다.AWS CloudFormation > 사용 설명서 > 스택 리소스 업데이트 동작 에 의하면, 리플레이스는 치환 자원을 작성하고 나서 낡은 자원을 삭제한다고 한다. 거기서 「이름이 쓰고 있는 것이 나쁜 것일까」라고 생각해, Dynamo DB의 웹 콘솔로부터 수동으로 삭제해, 재배포. 그러나 결과는 변함없이.
자원명(
FugaDynamoDBTable
)을 바꾸면 신설 자원으로 볼 수 있을 것 같은 생각도 하지만, 왠지 기분 나쁘다.마찬가지로 사용자 가이드 이름 유형
스택 리소스를 AWS CloudFormation 이외의 변경 사항으로 변경하지 마십시오. 예를 들어 스택에 속한 리소스의 이름을 AWS CloudFormation 없이 변경한 경우 스택을 업데이트하거나 삭제하려고 할 때 오류가 발생합니다.
의 묘사를 발견 (죄송합니다).
그럼 템플릿상에서도 없었던 것으로 해 실태에 맞추려고,
FugaDynamoDBTable
의 정의를 통째로 코멘트 아웃 해 재차 배포.CloudFormation stack changeset
------------------------------------------------------------------------------
Operation LogicalResourceId ResourceType Replacement
------------------------------------------------------------------------------
- Delete FugaDynamoDBTable AWS::DynamoDB::Table N/A
확인하고 실행. 특히 오류없이 삭제되었습니다.
다시 해당 부분을 코멘트 인해 배포.
CloudFormation stack changeset
-----------------------------------------------------------------------------------
Operation LogicalResourceId ResourceType Replacement
-----------------------------------------------------------------------------------
+ Add FugaDynamoDBTable AWS::DynamoDB::Table N/A
의도대로의 changeset가 되었으므로 그대로 실행. 무사히 배포 . 콘솔에서도 의도한 설정으로 되어 있는 것을 확인할 수 있었다.
추가
약 1년 전에 똑같은 문제로 똑같은 과정을 거치는 편이 있었다. SAM에서 빠지면 CloudFormation의 정보도 제대로 찾아야 할까.
CloudFormation의 DynamoDB 리소스 업데이트로 빠진 이야기
Reference
이 문제에 관하여(AWS SAM에서 dynamo 리소스를 변경할 때 오류가 발생했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kumatira/items/d5e38de2d02bb710c847텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)