source

일정 기간 후 자동으로 Azure Blob 삭제/만료

ittop 2023. 5. 12. 22:40
반응형

일정 기간 후 자동으로 Azure Blob 삭제/만료

Azure Blob 스토리지를 사용하면 Amazon AWS S3의 Object Expiration Feature와 유사한 일정 시간이 지나면 컨테이너 내의 개별 블럽 또는 모든 블럽이 자체적으로 삭제되도록 할 수 있습니까?아니면 Azure 스토리지는 이러한 기능을 제공하지 않습니까?

Azure Blob 스토리지 라이프사이클을 통해 가능합니다.여기를 보세요

https://learn.microsoft.com/en-us/azure/storage/blobs/storage-lifecycle-management-concepts?tabs=azure-portal

라이프사이클 관리 정책 구성

몇 년 동안 이 기능을 놓쳤기 때문에 'Deploy to Azure' 버튼이 있는 작은 프로젝트를 작성했습니다.아직 완벽하지는 않지만 작동합니다. https://github.com/nulllogicone/ExpireBlobFunction

이제 마이크로소프트가 2019년 3월 27일에 이 기능을 릴리스했습니다.

이 기사에서 발췌한 내용:

Azure Blob 스토리지 라이프사이클 관리는 GPv2 및 Blob 스토리지 계정에 대한 풍부한 규칙 기반 정책을 제공합니다.정책을 사용하여 데이터를 적절한 액세스 계층으로 전환하거나 데이터 수명 주기가 끝날 때 만료됩니다.

수명 주기 관리 정책을 통해 다음을 수행할 수 있습니다.

  • 성능과 비용을 최적화하기 위해 더 시원한 스토리지 계층(핫 투 쿨, 핫 투 아카이브 또는 쿨 투 아카이브)으로 전환
  • 수명 주기가 끝나면 블롭을 삭제합니다.
  • 스토리지 계정 수준에서 하루에 한 번 실행할 규칙 정의 컨테이너 또는 Blob의 하위 집합에 규칙 적용(접두사를 필터로 사용)

다양한 방법으로 자동 삭제할 수 있습니다.논리 앱으로도 할 수 있는 시간이 길기 때문에 가끔은 잘 모르겠어요.현재 스토리지 계정에서 직접 사용할 수 있습니다.

그리고 오래된 블롭을 삭제할 수 있는 쉽고 구체적인 작업 생성기(키워드)가 있습니다.여기에 이미지 설명 입력

적어도 지금은 이 기능이 계획되어 있는 것 같습니다. https://feedback.azure.com/forums/217298-storage/suggestions/2474308-provide-time-to-live-feature-for-blobs

Azure 스토리지 팀은 최근(2017년 10월 5일) 만료되는 블롭에 대한 업데이트를 게시했습니다.이제 Azure Logic App 템플릿을 사용하여 이 작업을 수행할 수 있을 것으로 보이며 올해 말에 네이티브 BLOB 스토리지 솔루션을 제공할 예정입니다.

링크: Blobs를 위한 Time to Live 기능 제공

오래된 블롭을 만료할 수 있는 Azure Logic Apps 템플릿을 사용할 수 있게 되었음을 알려드리게 되어 기쁩니다.사용자 환경에서 이 자동화 솔루션을 설정하려면 새 Logic Apps 인스턴스를 만들고 "이전 Azure Blobs 삭제" 템플릿을 선택한 후 사용자 지정하고 실행합니다.우리는 앞으로 몇 주 안에 지침을 상세히 설명하고 더 많은 템플릿을 제공하는 블로그 게시물을 발표할 것입니다.

사용자가 스토리지에서 기본적으로 BLOB에 만료 정책을 정의할 수 있도록 하는 것은 내년에도 여전히 계획되어 있습니다.우리가 공유할 수 있는 진전이 있는 대로 그렇게 할 것입니다.분기별로 적어도 한 번은 업데이트를 계속 제공할 것입니다.

추가 질문이 있거나 구체적인 시나리오에 대해 논의하려면 azurestoragefeedback@microsoft.com 으로 이메일을 보내 주십시오.

Azure Storage에는 만료 기능이 없으므로 앱을 통해 블롭을 삭제해야 합니다.이 작업을 수행하는 방법은 사용자에게 달려 있습니다. 만료 날짜 대상을 데이터베이스 또는 BLOB 속성에 저장해야 합니다.

공유 액세스 서명을 통해(SAS에서 종료 날짜를 설정하여) BLOB 액세스에 TTL을 효과적으로 생성할 수 있습니다.이렇게 하면 액세스를 제거할 때 액세스를 제거할 수 있는 효과적인 방법을 사용할 수 있으며, 이제 만료된 블럽을 제거하는 후속 프로세스를 사용할 수 있습니다.

네, 가능합니다.이 두 가지를 참조하세요, 샘플 코드를 찾는 것이 어려웠습니다.

규칙 참조: https://learn.microsoft.com/en-us/azure/storage/blobs/lifecycle-management-overview?tabs=azure-portal

Python 샘플 코드 참조: https://github.com/Azure-Samples/azure-samples-python-management/blob/master/samples/storage/manage_management_policy.py

사용한 코드 조각:

def add_expiry_rule(self):
        token_credential = ClientSecretCredential(
            tenant_id=tenant_id,
            client_id=client_id,
            client_secret=client_secret,
        )
        storage_client = StorageManagementClient(
            credential=token_credential, subscription_id=subscription_id
        )
        rule = {
            "id": "test",
            "prefix": "test/",
            "expiration": 91,
        }
        azure_rule = {
            "enabled": True,
            "name": rule.get("id"),
            "type": "Lifecycle",
            "definition": {
                "filters": {"blob_types": ["blockBlob"], "prefix_match": [rule.get("prefix")]},
                "actions": {
                    "base_blob": {
                        "delete": {
                            "days_after_modification_greater_than": str(rule.get("expiration"))
                        }
                    }
                },
            },
        }
        try:
            management_policy = storage_client.management_policies.get(
                group_name, storage_account, "default"
            )
            existing_rules = management_policy.policy.as_dict()
            existing_rules.get("rules").append(azure_rule)
            management_policy_rules = existing_rules
        except Exception as e:
            management_policy_rules = {"rules": [azure_rule]}
        try:
            management_policy = storage_client.management_policies.create_or_update(
                group_name,
                storage_account,
                "default",
                {"policy": management_policy_rules},
            )
            print("Azure: Added rule {} successfully".format(rule.get("id")))
        except Exception as e:
            if e.message.endswith("conflicting rule name."):
                print("Azure: Rule ID: {} exists".format(rule.get("id")))
            else:
                raise Exception("Azure: Error adding rule. {}".format(e.message))

언급URL : https://stackoverflow.com/questions/35301194/automatically-delete-expire-azure-blobs-after-a-time-period

반응형