View a markdown version of this page

FHIR 리소스 삭제 - AWS HealthLake

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

FHIR 리소스 삭제

FHIR delete 상호 작용은 HealthLake 데이터 스토어에서 기존 FHIR 리소스를 제거합니다. 자세한 내용은 FHIR R4 RESTful API 설명서delete의 섹션을 참조하세요.

FHIR 리소스를 삭제하려면

  1. HealthLake region 및 datastoreId 값을 수집합니다. 자세한 내용은 데이터 스토어 속성 가져오기 단원을 참조하십시오.

  2. 연결된 id 값을 Resource 삭제하고 수집할 FHIR 유형을 결정합니다. 자세한 내용은 조건 키 단원을 참조하십시오.

  3. HealthLake region 및에 대해 수집된 값을 사용하여 요청에 대한 URL을 구성합니다datastoreId. FHIR Resource 유형 및 관련 도 포함합니다id. 다음 예제에서 전체 URL 경로를 보려면 복사 버튼을 스크롤합니다.

    DELETE https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Resource/id
  4. 요청을 보냅니다. FHIR delete 상호 작용은 FHIR 권한 부여 시 AWS 서명 버전 4 또는 SMART와 함께 DELETE 요청을 사용합니다. 다음 curl 예시에서는 HealthLake 데이터 스토어에서 기존 FHIR Patient 리소스를 제거합니다. 전체 예제를 보려면 복사 버튼을 스크롤합니다.

    SigV4

    SigV4 권한 부여

    curl --request DELETE \ 'https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Patient/id' \ --aws-sigv4 'aws:amz:region:healthlake' \ --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" \ --header "x-amz-security-token:$AWS_SESSION_TOKEN" \ --header 'Accept: application/json'

    서버는 리소스가 HealthLake 데이터 스토어에서 제거되었음을 확인하는 204 HTTP 상태 코드를 반환합니다. 삭제 요청이 실패하면 요청이 실패한 이유를 나타내는 400 일련의 HTTP 상태 코드를 받게 됩니다.

    SMART on FHIR

    IdentityProviderConfiguration 데이터 유형에 대한 SMART on FHIR 권한 부여 예제입니다.

    { "AuthorizationStrategy": "SMART_ON_FHIR", "FineGrainedAuthorizationEnabled": true, "IdpLambdaArn": "arn:aws:lambda:your-region:your-account-id:function:your-lambda-name", "Metadata": "{\"issuer\":\"https://ehr.example.com\", \"jwks_uri\":\"https://ehr.example.com/.well-known/jwks.json\",\"authorization_endpoint\":\"https://ehr.example.com/auth/authorize\",\"token_endpoint\":\"https://ehr.token.com/auth/token\",\"token_endpoint_auth_methods_supported\":[\"client_secret_basic\",\"foo\"],\"grant_types_supported\":[\"client_credential\",\"foo\"],\"registration_endpoint\":\"https://ehr.example.com/auth/register\",\"scopes_supported\":[\"openId\",\"profile\",\"launch\"],\"response_types_supported\":[\"code\"],\"management_endpoint\":\"https://ehr.example.com/user/manage\",\"introspection_endpoint\":\"https://ehr.example.com/user/introspect\",\"revocation_endpoint\":\"https://ehr.example.com/user/revoke\",\"code_challenge_methods_supported\":[\"S256\"],\"capabilities\":[\"launch-ehr\",\"sso-openid-connect\",\"client-public\",\"permission-v2\"]}" }

    호출자는 권한 부여 Lambda에 권한을 할당할 수 있습니다. 자세한 내용은 OAuth 2.0 범위 단원을 참조하십시오.

    AWS Console

    1. HealthLake 콘솔의 쿼리 실행 페이지에 로그인합니다.

    2. 쿼리 설정 섹션에서 다음을 선택합니다.

    • 데이터 스토어 ID - 쿼리 문자열을 생성할 데이터 스토어 ID를 선택합니다.

    • 쿼리 유형 -를 선택합니다Delete.

    • 리소스 유형 - 삭제할 FHIR 리소스 유형을 선택합니다.

    • 리소스 ID - FHIR 리소스 ID를 입력합니다.

    3. 쿼리 실행을 선택합니다.

조건에 따라 FHIR 리소스 삭제

조건부 삭제는 특정 FHIR 리소스 ID를 모르지만 삭제하려는 리소스에 대한 다른 식별 정보가 있는 경우에 특히 유용합니다.

조건부 삭제를 사용하면 논리적 FHIR ID가 아닌 검색 기준에 따라 기존 리소스를 삭제할 수 있습니다. 서버는 삭제 요청을 처리할 때 리소스 유형에 대한 표준 검색 기능을 사용하여 검색을 수행하여 요청에 대한 단일 논리적 ID를 확인합니다.

조건부 삭제 작동 방식

서버의 작업은 검색한 일치 항목 수에 따라 달라집니다.

  1. 일치 항목 없음: 서버가 일반 삭제를 시도하고 적절하게 응답합니다(404 존재하지 않는 리소스의 경우 찾을 수 없음, 204 이미 삭제된 리소스의 경우 콘텐츠 없음).

  2. 일치하는 항목 하나: 서버가 일치하는 리소스에서 일반 삭제를 수행합니다.

  3. 다중 일치: 클라이언트의 기준이 충분히 선택적이지 않음을 나타내는 412 사전 조건 실패 오류를 반환합니다.

대응 시나리오

AWS HealthLake 는 다음과 같은 응답 패턴으로 조건부 삭제 작업을 처리합니다.

성공한 작업

  • 검색 기준이 단일 활성 리소스를 성공적으로 식별하면 시스템은 표준 삭제 작업과 마찬가지로 삭제를 완료한 후 204 콘텐츠 없음을 반환합니다.

ID 기반 조건부 삭제

추가 파라미터(createdAt, _tag또는 )id를 사용하여를 기반으로 조건부 삭제를 수행하는 경우_lastUpdated:

  • 204 콘텐츠 없음: 리소스가 이미 삭제되었습니다.

  • 404 찾을 수 없음: 리소스가 존재하지 않음

  • 409 충돌: ID는 일치하지만 다른 파라미터는 일치하지 않음

Non-ID-Based 조건부 삭제

id가 제공되지 않거나 createdAt, 또는 이외의 파라미터를 사용하는 경우_tag_lastUpdated:

  • 404 찾을 수 없음: 일치하는 항목을 찾을 수 없음

충돌 상황

여러 시나리오에서 412개의 사전 조건 실패 응답이 발생합니다.

  • 여러 리소스가 검색 기준과 일치(기준이 충분히 구체적이지 않음)

  • 에서 ETag 헤더 사용 시 버전 충돌 If-Match

  • 검색 및 삭제 작업 사이에 발생하는 리소스 업데이트

성공적인 조건부 삭제의 예

다음 예시에서는 특정 기준에 따라 환자 리소스를 삭제합니다.

DELETE https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Patient?name=peter&birthdate=2000-01-01&phone=1234567890

이 요청은 다음과 같은 환자 리소스를 삭제합니다.

  • 이름은 "peter"입니다.

  • 생년월일은 2000년 1월 1일입니다.

  • 전화번호는 1234567890입니다.

모범 사례

  1. 특정 검색 기준을 사용하여 여러 일치 항목을 방지하고 412 오류를 방지합니다.

  2. 동시 수정을 처리하는 데 필요한 경우 버전 관리를 위해 ETag 헤더를 고려합니다.

  3. 오류 응답을 적절하게 처리합니다.

    • 404의 경우: 검색 기준 구체화

    • 412의 경우: 기준을 더 구체적으로 지정하거나 버전 충돌 해결

  4. 검색 작업과 삭제 작업 간에 리소스를 수정할 수 있는 동시성이 높은 환경에서 타이밍 충돌에 대비합니다.

를 사용하여 한 요청에서 여러 FHIR 리소스 삭제 _count

기본적으로 조건부 삭제를 수행하려면 검색 기준이 정확히 하나의 리소스와 일치해야 합니다. 단일 요청에서 일치하는 여러 리소스를 삭제하려면 _count 쿼리 파라미터를 포함합니다. _count이 있으면 HealthLake는 요청을 배치 작업으로 처리합니다. 일치하는 리소스를 검색하고 삭제한 다음 리소스당 상태가 batch-response 포함된 Bundle 유형의 FHIR200로 HTTP를 반환합니다.

  • 검색 파라미터는 일치하는 리소스를 결정합니다.는 단일 요청에서 삭제할 일치하는 리소스 수에 대한 상한을 _count 설정합니다.

  • _count는 데이터 스토어의 최대 페이지 크기(기본값 100)를 초과할 수 없습니다. 이 제한을 초과하는 값을 지정하면 HealthLake는를 반환합니다400 Bad Request. _count 값이 허용하는 것보다 더 많은 리소스가 일치하는 경우 페이지 매김을 사용하여 나머지 일치 항목을 삭제합니다. 자세한 내용은 검색 파라미터 단원을 참조하십시오.

  • 총 삭제 처리량은 데이터 스토어의 쓰기 용량에 따라 제한됩니다. 계정의 현재 한도는 섹션을 참조하세요엔드포인트 및 할당량.

요청 예제

다음 요청은 태그가 지정된 일치하는 Coverage 리소스를 삭제합니다. inactive

DELETE https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Coverage?_tag=inactive&_count=50

배치 응답 형식

를 포함하는 요청은 batch-response 200를 사용하여 HTTP를 _count 반환합니다Bundle. 각 항목은 일치하는 리소스 하나에 대한 결과를 보고합니다.

  • 204 콘텐츠 없음: 리소스가 삭제되었습니다.

  • 412 사전 조건 실패: 다른 작업이 검색과 삭제(버전 충돌) 간에 리소스를 수정했으므로 HealthLake는 이를 삭제하지 않습니다. 조건부 삭제를 다시 보내면 새 검색이 실행되고 여전히 기준과 일치하는 경우에만 리소스가 제거됩니다. 검색 결과는 최종적으로 일관되므로 최근에 수정된 리소스가 즉시 표시되지 않을 수 있습니다.

  • 403 금지됨: FHIR 인증의 SMART가이 리소스 삭제를 거부했습니다.

모든 FHIR 검색과 마찬가지로 리소스가 일치하고 삭제되는 순서는 기본 검색 결과의 순서를 따릅니다. 검색 기준에 _sort 파라미터를 포함하지 않는 한 검색은이 순서를 보장하지 않습니다. 페이지 매김 배치 삭제 간에 결정적 순서가 필요한 경우를 지정합니다_sort. 자세한 내용은 검색 파라미터 단원을 참조하십시오.

응답 내에서 Bundle항목 순서도 보장되지 않습니다. 항목 위치에 의존response하지 않고 항목의에 있는 location 필드를 사용하여 각 항목을 리소스와 일치시킵니다.

중요

배치 조건부 삭제는 원자성이 아닙니다. 요청의 일부 리소스는 삭제할 수 있지만 다른 리소스는 동일한에서 오류를 반환합니다Bundle. 전체 요청이 성공 또는 실패했다고 가정하는 Bundle 대신 응답에서 항목별 상태 코드를 항상 확인합니다.

중요

검색이 리소스와 일치하지 않으면이 있는 요청은 빈 batch-response Bundle HTTP(항목 없음)200를 _count 반환합니다. 이는 일치하는 항목이 없을 404 Not Found 때를 반환_count하는가 없는 조건부 삭제와 다릅니다.

부분 성공(버전 충돌)

검색과 삭제 사이에 리소스를 수정할 수 있습니다. 성공적으로 삭제된 리소스는를 반환하고204, 충돌하는 리소스는 동일한 412를 반환합니다Bundle.

{ "resourceType": "Bundle", "type": "batch-response", "entry": [ { "response": { "status": "204", "location": "Coverage/b807f9ff-2872-45df-9325-0b2efe42e554" } }, { "response": { "status": "412", "location": "Coverage/5287b322-d7e5-4688-bd55-022067db4d0f", "outcome": { "resourceType": "OperationOutcome", "issue": [ { "severity": "error", "code": "exception", "diagnostics": "Resource was modified by another operation. Retry the request." } ] } } } ] }

페이지 매김을 사용하여 더 많은 일치 항목 삭제

단일 요청은 최대 한 페이지의 일치 항목을 삭제합니다. 일치하는 리소스가 더 많이 남아 있는 경우 응답에는 next 관계와 URL이 link 있는가 Bundle 포함됩니다. HTTP DELETE 요청을 해당 URL로 전송하여 다음 페이지를 삭제하고 응답에 더 이상 next 링크가 포함되지 않을 때까지 반복합니다. next 링크 뒤에가 아닌 DELETE (원래 요청과 동일한 메서드)가와 연결되어야 합니다GET.

{ "resourceType": "Bundle", "type": "batch-response", "link": [ { "relation": "next", "url": "https://healthlake.us-east-1.amazonaws.com/...<page_token>" } ], "entry": [ { "response": { "status": "204", "location": "Patient/4aeffdc9-6ac5-46ff-be10-bf8bd74dfecc" } } ] }

FHIR 권한 부여 동작에 대한 SMART

  • 삭제 권한 부족: 호출자가 검색할 수 있지만 삭제 권한이 없는 경우 요청은 여전히를 반환200하고 영향을 받는 리소스는에 403 항목으로 표시됩니다Bundle(해당 리소스에 대해 삭제되지 않음).

  • 읽기/검색 권한 부족: 호출자가 기본 검색을 실행할 수 없는 경우 삭제 권한에 관계없이를 사용하여 루트 수준에서 전체 요청이 실패합니다OperationOutcome(반환Bundle되지 않음).

  • IAM 권한 부여: IAM은 리소스당이 아닌 요청 수준에서 권한을 평가합니다. 호출 보안 주체는 삭제 작업과 검색 작업 모두에 대한 권한이 있어야 합니다(예: 작업이 검색을 실행하여 일치하는 항목을 찾기 때문에 healthlake:DeleteResource 및 해당 검색 작업). 권한이 없는 보안 주체는 전체 요청이 거부됩니다.

FHIR 권한 부여에서 SMART를 구성하는 방법에 대한 자세한 내용은 섹션을 참조하세요FHIR의 SMART.

서비스 할당량 적용 방법

배치 조건부 삭제에는 자체 서비스 할당량이 없습니다. 각 요청은 수행하는 검색 및 삭제 상호 작용과 동일한 기존 HealthLake 할당량을 사용하므로 단일 요청은 여러 할당량을 사용합니다.

  • 한 번의 검색: 일치하는 리소스를 확인하기 위해 각 요청은 표준 FHIR 검색과 마찬가지로 검색을 수행하고 검색(읽기) 용량을 사용합니다.

  • 일치하는 리소스당 삭제 1개: 삭제되는 각 리소스는 개별 삭제와 동일한 삭제(쓰기) 용량을 사용합니다. N 리소스를 삭제하는 요청은 하나의 검색과 N 삭제를 사용합니다.

  • 요청당 리소스: 각 요청은 최대 1페이지의 일치 항목(기본 페이지 크기 100)을 삭제합니다. 더 많은 일치 항목을 삭제하려면 페이지 매김을 사용합니다.

처리량은 데이터 스토어의 쓰기 용량에 의해 관리됩니다. 계정의 할당량 한도 내에서 처리량을 관리하려면 더 작은 _count 값으로 더 많은 요청을 실행하거나 더 큰 _count 값으로 더 좁은 검색을 사용합니다. 계정의 현재 검색 및 쓰기 용량 제한은 섹션을 참조하세요엔드포인트 및 할당량.

고려 사항

  • _count는 양의 정수여야 합니다. 정수가 아니거나 out-of-range 값은 검증400 Bad Request을 통해를 반환합니다OperationOutcome. _count=1인 경우 응답은 batch-response가 없는 조건부 삭제에서 반환되는 단일 리소스 응답이 Bundle아니라 여전히 입니다_count.

  • If-Match 헤더는와 함께 지원되지 않습니다_count. 둘 다 포함하는 요청은를 반환합니다400 Bad Request.

  • 배치 조건부 삭제는 Bundle 요청 내에서 지원되지 않습니다.

  • 성공적으로 삭제된 리소스만 측정됩니다. 412 또는 403 상태에서 반환된 리소스는 측정되지 않습니다.