Amplify mutation update without _version field

데이터 업데이트를 하려는데 _version을 같이 넘겨주지 않으면 실패한다.

근데 amplify codegen model 로 생성한 모델에는 _version이 빠져있어서 수동으로 넣어줘야 한다. 왜지???

아무튼 _version 없이 사용하려고 찾아봤는데, 이틀만에야 찾았다. https://stackoverflow.com/a/72403949/1025379 를 참고해서 Disable Conflict Detection 을 해줘야 한다.

$ amplify update api 
? Select from one of the below mentioned services: (Use arrow keys)
❯ GraphQL
  REST

? Select a setting to edit
  Authorization modes
  Conflict resolution strategy
❯ Disable conflict detection


$ amplify push

이러면 _version 없어도 업데이트를 할 수 있다. 이게 무슨 용도인지는 https://docs.aws.amazon.com/ko_kr/appsync/latest/devguide/conflict-detection-and-sync.html 에 나와있다.


이 방법 말고 다른 방법도 있었다. https://github.com/aws-amplify/amplify-cli/issues/4355#issuecomment-642565027 처럼 AppSync - project - Method - MutationUpdatePostDataResolverFn 의 #24 부분을

#foreach( $entry in $ctx.stash.metadata.modelObjectKey.entrySet() )
#foreach( $entry in $modelObjectKey.entrySet() )

이렇게 만들어 주면 된다. 근데 이렇게 하면 amplify push 할 때마다 이 부분이 원상복구가 되기 때문에 amplify/backend/api/TEST1/build/resolvers/Mutation.updatePost.req.vtl 파일을 amplify/backend/api/TEST1/resolvers/Mutation.updatePost.req.vtl 로 복사해서 저 부분을 수정한다음 push 하면 AppSync에 수정된 코드는 들어가는데, 문제는 push 할 때마다 MutationUpdatePostDataResolverFn 에 들어가서 저장을 눌러줘야 한다 🤦🏻‍♂️🤮

이 방법은 반드시 오류가 발생할테니 하지 않는게 좋다.