Optimera kostnaderna genom att automatiskt hantera datalivscykeln

Datauppsättningar har unika livscykeler. Tidigt i livscykeln får användarna ofta åtkomst till vissa data. Men behovet av åtkomst minskar ofta drastiskt när data åldras. Vissa data förblir inaktiva i molnet och används sällan när de har lagrats. Vissa datauppsättningar upphör att gälla dagar eller månader efter skapandet, medan andra datauppsättningar aktivt läss och ändras under hela livslängden. Livscykelhantering i Azure Blob Storage erbjuder en regelbaserad princip som du kan använda för att överföra blobdata till lämpliga åtkomstnivåer eller för att förfalla data i slutet av datalivscykeln.

Kommentar

Varje uppdatering av senaste åtkomsttid debiteras som en "annan transaktion" högst en gång var 24:e timme per objekt, även om den nås 1000-talet gånger på en dag. Detta är skilt från lästransaktioner.

Med policyn för livscykelhantering kan du:

  • Övergå blobar från lågfrekvent till frekvent direkt när de används för att optimera prestanda.
  • Överföra aktuella versioner av en blob, tidigare versioner av en blob eller blobögonblicksbilder till en lågfrekvent lagringsnivå om dessa objekt inte har använts eller ändrats under en viss tidsperiod för att optimera för kostnader.
  • Ta bort aktuella versioner av en blob, tidigare versioner av en blob eller blobögonblicksbilder i slutet av livscykeln.
  • Tillämpa regler på ett helt lagringskonto, för att välja containrar eller på en delmängd blobar med namnprefix eller blobindextaggar som filter.

Tänk dig ett scenario där data används ofta under de tidiga faserna av livscykeln, men bara ibland efter två veckor. Utöver den första månaden används sällan datauppsättningen. I det här scenariot är frekvent lagring bäst under de tidiga stadierna. Lågfrekvent lagring är lämpligast för tillfällig åtkomst. Arkivlagring är det bästa nivåalternativet efter att data har åldrats över en månad. Genom att flytta data till lämplig lagringsnivå baserat på dess ålder med policyregler för livscykelhantering kan du utforma den billigaste lösningen för dina behov.

Livscykelhanteringsprinciper kan användas med blockblobar och tilläggsblobar i v2-konton för generell användning, premiumblockblobar och Blob Storage-konton. Livscykelhantering påverkar inte systemcontainrar som $logs containrar eller $web containrar.

Viktigt!

Om en datauppsättning måste vara läsbar ska du inte ange någon princip för att flytta blobar till arkivnivån. Blobar på arkivnivån kan inte läsas om de inte först extraheras, en process som kan vara tidskrävande och dyr. Mer information finns i Översikt över blobrehydrering från arkivnivån. Om en datauppsättning behöver läsas ofta ska du inte ange en princip för att flytta blobar till lågfrekventa eller kalla nivåer eftersom detta kan leda till högre transaktionskostnader.

Principdefinition för livscykelhantering

En livscykelhanteringsprincip är en samling regler i ett JSON-dokument. Följande JSON-exempel visar en fullständig regeldefinition:

{
  "rules": [
    {
      "name": "rule1",
      "enabled": true,
      "type": "Lifecycle",
      "definition": {...}
    },
    {
      "name": "rule2",
      "type": "Lifecycle",
      "definition": {...}
    }
  ]
}

En princip är en samling regler enligt beskrivningen i följande tabell:

Parameternamn Parametertyp Kommentar
rules En matris med regelobjekt Minst en regel krävs i en princip. Du kan definiera upp till 100 regler i en princip.

Varje regel i principen har flera parametrar som beskrivs i följande tabell:

Parameternamn Parametertyp Kommentar Obligatoriskt
name String Ett regelnamn kan innehålla upp till 256 alfanumeriska tecken. Regelnamnet är skiftlägeskänsligt. Den måste vara unik i en princip. Sant
enabled Booleskt Ett valfritt booleskt värde som tillåter att en regel inaktiveras tillfälligt. Standardvärdet är sant om det inte har angetts. Falsk
type Ett uppräkningsvärde Den aktuella giltiga typen är Lifecycle. Sant
definition Ett objekt som definierar livscykelregeln Varje definition består av en filteruppsättning och en åtgärdsuppsättning. Sant

Definition av livscykelhanteringsregel

Varje regeldefinition i en princip innehåller en filteruppsättning och en åtgärdsuppsättning. Filtret anger begränsningar för regelåtgärder till en viss uppsättning objekt i en container eller objektnamn. Åtgärdsuppsättningen tillämpar nivå- eller borttagningsåtgärder på den filtrerade uppsättningen objekt.

Exempelregel

Följande exempelregel filtrerar kontot för att köra åtgärderna på objekt som finns inuti sample-container och börja med blob1.

  • Nivåblob till lågfrekvent nivå 30 dagar efter senaste ändring
  • Nivåblob till arkivnivå 90 dagar efter senaste ändring
  • Ta bort blob 2 555 dagar (sju år) efter senaste ändringen
  • Ta bort tidigare versioner 90 dagar efter skapandet
{
  "rules": [
    {
      "enabled": true,
      "name": "sample-rule",
      "type": "Lifecycle",
      "definition": {
        "actions": {
          "version": {
            "delete": {
              "daysAfterCreationGreaterThan": 90
            }
          },
          "baseBlob": {
            "tierToCool": {
              "daysAfterModificationGreaterThan": 30
            },
            "tierToArchive": {
              "daysAfterModificationGreaterThan": 90,
              "daysAfterLastTierChangeGreaterThan": 7
            },
            "delete": {
              "daysAfterModificationGreaterThan": 2555
            }
          }
        },
        "filters": {
          "blobTypes": [
            "blockBlob"
          ],
          "prefixMatch": [
            "sample-container/blob1"
          ]
        }
      }
    }
  ]
}

Kommentar

BaseBlob-elementet i en livscykelhanteringsprincip refererar till den aktuella versionen av en blob. Versionselementet refererar till en tidigare version.

Regelfilter

Filter begränsar regelåtgärder till en delmängd blobar i lagringskontot. Om fler än ett filter har definierats körs ett logiskt AND på alla filter. Du kan använda ett filter för att ange vilka blobar som ska inkluderas. Ett filter ger inget sätt att ange vilka blobar som ska undantas.

Bland filtren finns:

Filternamn Filtertyp Kommentar Krävs
blobTypes En matris med fördefinierade uppräkningsvärden. Den aktuella versionen stöder blockBlob och appendBlob. Endast åtgärden Ta bort stöds för appendBlob; Ange nivå stöds inte. Ja
prefixMatch En matris med strängar för prefix som ska matchas. Varje regel kan definiera upp till 10 skiftlägeskänsliga prefix. En prefixsträng måste börja med ett containernamn. Om du till exempel vill matcha alla blobar under https://myaccount.blob.core.windows.net/sample-container/blob1/...anger du prefixMatch som sample-container/blob1. Det här filtret matchar alla blobar i exempelcontainern vars namn börjar med blob1.

.
Om du inte definierar prefixMatch gäller regeln för alla blobar i lagringskontot. Prefixsträngar stöder inte jokerteckenmatchning. Tecken som * och ? behandlas som strängliteraler. Nej
blobIndexMatch En matris med ordlistevärden som består av blobindextaggens nyckel- och värdevillkor som ska matchas. Varje regel kan definiera upp till tio villkor för blobindexeringstaggar. Om du till exempel vill matcha alla blobar med Project = Contoso under https://myaccount.blob.core.windows.net/ för en regel är {"name": "Project","op": "==","value": "Contoso"}blobIndexMatch . Om du inte definierar blobIndexMatch gäller regeln för alla blobar i lagringskontot. Nej

Mer information om blobindexfunktionen tillsammans med kända problem och begränsningar finns i Hantera och hitta data i Azure Blob Storage med blobindex.

Regelåtgärder

Åtgärder tillämpas på filtrerade blobs när körvillkoret är uppfyllt.

Livscykelhantering stöder nivåindelning och borttagning av aktuella versioner, tidigare versioner och blobögonblicksbilder. Definiera minst en åtgärd för varje regel.

Kommentar

Nivåindelning stöds ännu inte i ett Premium-blockbloblagringskonto. För alla andra konton tillåts nivåindelning endast på blockblobar och inte för tilläggs- och sidblobar.

Åtgärd Aktuell version Ögonblicksbild Tidigare versioner
tierToCool Stöds för blockBlob Stöds Stöds
tierToCold Stöds för blockBlob Stöds Stöds
enableAutoTierToHotFromCool1 Stöds för blockBlob Stöds inte Stöds inte
tierToArchive4 Stöds för blockBlob Stöds Stöds
ta bort2,3 Stöds för blockBlob och appendBlob Stöds Stöds

1 Åtgärden enableAutoTierToHotFromCool är endast tillgänglig när den används med körningsvillkoret daysAfterLastAccessTimeGreaterThan . Det villkoret beskrivs i nästa tabell.

2 När en borttagningsåtgärd tillämpas på ett konto med ett hierarkiskt namnområde aktiverat tas tomma kataloger bort. Om katalogen inte är tom tar borttagningsåtgärden bort objekt som uppfyller principvillkoren inom den första livscykelprincipkörningscykeln. Om åtgärden resulterar i en tom katalog som också uppfyller principvillkoren tas katalogen bort inom nästa körningscykel och så vidare.

3 En livscykelhanteringsprincip tar inte bort den aktuella versionen av en blob förrän tidigare versioner eller ögonblicksbilder som är associerade med den blobben har tagits bort. Om blobar i ditt lagringskonto har tidigare versioner eller ögonblicksbilder måste du inkludera tidigare versioner och ögonblicksbilder när du anger en borttagningsåtgärd som en del av principen.

4 Endast lagringskonton som har konfigurerats för LRS, GRS eller RA-GRS stöder flytt av blobar till arkivnivån. Arkivnivån stöds inte för ZRS-, GZRS- eller RA-GZRS-konton. Den här åtgärden visas baserat på den redundans som konfigurerats för kontot.

Kommentar

Om du definierar mer än en åtgärd på samma blob tillämpar livscykelhantering den billigaste åtgärden på blobben. Till exempel är åtgärder delete billigare än åtgärd tierToArchive. Åtgärd tierToArchive är billigare än åtgärd tierToCool.

Körningsvillkoren baseras på ålder. Aktuella versioner använder den senaste ändrade tiden eller senaste åtkomsttiden, tidigare versioner använder tiden för versionsskapande och blobögonblicksbilder använder tiden för att skapa ögonblicksbilder för att spåra ålder.

Villkor för åtgärdskörning Villkorsvärde beskrivning
daysAfterModificationGreaterThan Heltalsvärde som anger ålder i dagar Villkoret för åtgärder i en aktuell version av en blob
daysAfterCreationGreaterThan Heltalsvärde som anger ålder i dagar Villkoret för åtgärder på den aktuella versionen eller tidigare version av en blob eller en ögonblicksbild av blob
daysAfterLastAccessTimeGreaterThan1 Heltalsvärde som anger ålder i dagar Villkoret för en aktuell version av en blob när åtkomstspårning är aktiverat
daysAfterLastTierChangeGreaterThan Heltalsvärde som anger ålder i dagar efter senaste ändringstid för blobnivå Det här villkoret gäller endast åtgärder tierToArchive och kan endast användas med villkoret daysAfterModificationGreaterThan .

1 Om spårning av senaste åtkomsttid inte är aktiverat använder daysAfterLastAccessTimeGreaterThan det datum då livscykelprincipen aktiverades i stället för LastAccessTime blobens egenskap. Det här datumet används också när egenskapen LastAccessTime är ett null-värde. Mer information om hur du använder spårning av senaste åtkomsttid finns i Flytta data baserat på senast använda tid.

Livscykelpolicykörningar

Plattformen kör livscykelprincipen en gång om dagen. När du konfigurerar eller redigerar en livscykelprincip kan det ta upp till 24 timmar innan ändringarna börjar gälla och för att den första körningen ska börja. Den tid det tar för principåtgärder att slutföra beror på antalet blobar som utvärderas och används.

Om du inaktiverar en princip schemaläggs inga nya principkörningar, men om en körning redan pågår fortsätter den körningen tills den har slutförts och du debiteras för alla åtgärder som krävs för att slutföra körningen. Se Regional tillgänglighet och prissättning.

Händelse för slutförd livscykelprincip

Händelsen LifecyclePolicyCompleted genereras när åtgärderna som definieras av en livscykelhanteringsprincip utförs. Följande json visar en exempelhändelse LifecyclePolicyCompleted .

{
    "topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/contosoresourcegroup/providers/Microsoft.Storage/storageAccounts/contosostorageaccount",
    "subject": "BlobDataManagement/LifeCycleManagement/SummaryReport",
    "eventType": "Microsoft.Storage.LifecyclePolicyCompleted",
    "eventTime": "2022-05-26T00:00:40.1880331",    
    "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "data": {
        "scheduleTime": "2022/05/24 22:57:29.3260160",
        "deleteSummary": {
            "totalObjectsCount": 16,
            "successCount": 14,
            "errorList": ""
        },
        "tierToCoolSummary": {
            "totalObjectsCount": 0,
            "successCount": 0,
            "errorList": ""
        },
        "tierToArchiveSummary": {
            "totalObjectsCount": 0,
            "successCount": 0,
            "errorList": ""
        }
    },
    "dataVersion": "1",
    "metadataVersion": "1"
}

I följande tabell beskrivs schemat för LifecyclePolicyCompleted händelsen.

Fält Type Beskrivning
scheduleTime sträng Den tid då livscykelpolicyn schemalagts
deleteSummary vektorbyte<> Resultatsammanfattningen av blobar som är schemalagda för borttagning
tierToCoolSummary vektorbyte<> Resultatsammanfattningen av blobar som schemalagts för nivå-till-lågfrekvent åtgärd
tierToArchiveSummary vektorbyte<> Resultatsammanfattningen av blobar som schemalagts för åtgärden nivå-till-arkiv

Exempel på livscykelprinciper

Följande exempel visar hur du hanterar vanliga scenarier med livscykelprincipregler.

Flytta åldrande data till en lågfrekvent nivå

Det här exemplet visar hur du övergår blockblobbar som är prefix med sample-container/blob1 eller container2/blob2. Principen övergår blobar som inte har ändrats på över 30 dagar till lågfrekvent lagring och blobar som inte har ändrats på 90 dagar till arkivnivån:

{
  "rules": [
    {
      "name": "agingRule",
      "enabled": true,
      "type": "Lifecycle",
      "definition": {
        "filters": {
          "blobTypes": [ "blockBlob" ],
          "prefixMatch": [ "sample-container/blob1", "container2/blob2" ]
        },
        "actions": {
          "baseBlob": {
            "tierToCool": { "daysAfterModificationGreaterThan": 30 },
            "tierToArchive": { "daysAfterModificationGreaterThan": 90 }
          }
        }
      }
    }
  ]
}

Flytta data baserat på senaste åtkomsttid

Du kan aktivera spårning av senaste åtkomsttid för att behålla en post för när blobben senast lästes eller skrevs och som ett filter för att hantera nivåindelning och kvarhållning av dina blobdata. Information om hur du aktiverar spårning av senaste åtkomsttid finns i Aktivera åtkomsttidsspårning om du vill.

När spårning av senaste åtkomsttid är aktiverat uppdateras blobegenskapen som anropas LastAccessTime när en blob läs- eller skrivs. En Get Blob-åtgärd betraktas som en åtkomståtgärd. Hämta blobegenskaper, Hämta blobmetadata och Hämta blobtaggar är inte åtkomståtgärder och uppdaterar därför inte den senaste åtkomsttiden.

Om spårning av senaste åtkomsttid är aktiverat används LastAccessTime livscykelhantering för att avgöra om körningsvillkoret daysAfterLastAccessTimeGreaterThan uppfylls. Livscykelhantering använder det datum då livscykelpolicyn aktiverades i stället för LastAccessTime i följande fall:

  • Värdet för blobens LastAccessTime egenskap är ett null-värde.

    Kommentar

    Egenskapen lastAccessedOn för bloben är null om en blob inte har använts sedan spårning av senaste åtkomsttid aktiverades.

  • Spårning av senaste åtkomsttid är inte aktiverat.

För att minimera effekten på svarstiden för läsåtkomst uppdaterar endast den första läsningen under de senaste 24 timmarna den senaste åtkomsttiden. Efterföljande läsningar under samma 24-timmarsperiod uppdaterar inte den senaste åtkomsttiden. Om en blob ändras mellan läsningar är den senaste åtkomsttiden den senaste av de två värdena.

I följande exempel flyttas blobar till lågfrekvent lagring om de inte har använts på 30 dagar. Egenskapen enableAutoTierToHotFromCool är ett booleskt värde som anger om en blob automatiskt ska nivåindelas från lågfrekvent tillbaka till frekvent om den nås igen efter att ha nivåindelats till lågfrekvent.

Dricks

Om en blob flyttas till lågfrekvent nivå och sedan flyttas tillbaka automatiskt innan 30 dagar har förflutit debiteras en avgift för tidig borttagning. Innan du anger enablAutoTierToHotFromCool egenskapen måste du analysera åtkomstmönstren för dina data så att du kan minska oväntade avgifter.

{
  "enabled": true,
  "name": "last-accessed-thirty-days-ago",
  "type": "Lifecycle",
  "definition": {
    "actions": {
      "baseBlob": {
        "enableAutoTierToHotFromCool": true,
        "tierToCool": {
          "daysAfterLastAccessTimeGreaterThan": 30
        }
      }
    },
    "filters": {
      "blobTypes": [
        "blockBlob"
      ],
      "prefixMatch": [
        "mylifecyclecontainer/log"
      ]
    }
  }
}

Arkivera data efter inmatning

Vissa data förblir inaktiva i molnet och används sällan, om någonsin. Följande livscykelprincip är konfigurerad för att arkivera data kort efter att den har matats in. I det här exemplet övergår blockblobar i en container med namnet archivecontainer till en arkivnivå. Övergången utförs genom att agera på blobar 0 dagar efter den senaste ändrade tiden.

{
  "rules": [
    {
      "name": "archiveRule",
      "enabled": true,
      "type": "Lifecycle",
      "definition": {
        "filters": {
          "blobTypes": [ "blockBlob" ],
          "prefixMatch": [ "archivecontainer" ]
        },
        "actions": {
          "baseBlob": {
              "tierToArchive": { 
                "daysAfterModificationGreaterThan": 0
              }
          }
        }
      }
    }
  ]
}

Kommentar

Microsoft rekommenderar att du laddar upp dina blobar direkt till arkivnivån för bättre effektivitet. Du kan ange arkivnivån i rubriken x-ms-access-tier i åtgärden Put Blob or Put Block List (Placera blobb eller Placera blockeringslista ). Rubriken x-ms-access-tier stöds med REST version 2018-11-09 och senare eller de senaste blob storage-klientbiblioteken.

Förfalla data baserat på ålder

Vissa data förväntas upphöra att gälla dagar eller månader efter skapandet. Du kan konfigurera en livscykelhanteringsprincip för att förfalla data genom borttagning baserat på dataålder. I följande exempel visas en princip som tar bort alla blockblobar som inte har ändrats under de senaste 365 dagarna.

{
  "rules": [
    {
      "name": "expirationRule",
      "enabled": true,
      "type": "Lifecycle",
      "definition": {
        "filters": {
          "blobTypes": [ "blockBlob" ]
        },
        "actions": {
          "baseBlob": {
            "delete": { "daysAfterModificationGreaterThan": 365 }
          }
        }
      }
    }
  ]
}

Ta bort data med blobindextaggar

Vissa data bör bara upphöra att gälla om de uttryckligen har markerats för borttagning. Du kan konfigurera en livscykelhanteringsprincip för att förfalla data som är taggade med nyckel-/värdeattribut för blobindex. I följande exempel visas en princip som tar bort alla blockblobar som är taggade med Project = Contoso. Mer information om blobindex finns i Hantera och hitta data på Azure Blob Storage med blobindex.

{
    "rules": [
        {
            "enabled": true,
            "name": "DeleteContosoData",
            "type": "Lifecycle",
            "definition": {
                "actions": {
                    "baseBlob": {
                        "delete": {
                            "daysAfterModificationGreaterThan": 0
                        }
                    }
                },
                "filters": {
                    "blobIndexMatch": [
                        {
                            "name": "Project",
                            "op": "==",
                            "value": "Contoso"
                        }
                    ],
                    "blobTypes": [
                        "blockBlob"
                    ]
                }
            }
        }
    ]
}

Hantera tidigare versioner

För data som ändras och används regelbundet under hela dess livslängd kan du aktivera bloblagringsversioner för att automatiskt underhålla tidigare versioner av ett objekt. Du kan skapa en princip för att nivåindela eller ta bort tidigare versioner. Versionsåldern bestäms genom att utvärdera tidpunkten för versionsskapandet. Den här principregeln flyttar tidigare versioner i en container activedata som är 90 dagar eller äldre efter att versionen har skapats till lågfrekvent nivå och tar bort tidigare versioner som är 365 dagar eller äldre.

{
  "rules": [
    {
      "enabled": true,
      "name": "versionrule",
      "type": "Lifecycle",
      "definition": {
        "actions": {
          "version": {
            "tierToCool": {
              "daysAfterCreationGreaterThan": 90
            },
            "delete": {
              "daysAfterCreationGreaterThan": 365
            }
          }
        },
        "filters": {
          "blobTypes": [
            "blockBlob"
          ],
          "prefixMatch": [
            "activedata/"
          ]
        }
      }
    }
  ]
}

Regional tillgänglighet och prissättning

Livscykelhanteringsfunktionen är tillgänglig i alla Azure-regioner.

Principer för livscykelhantering är kostnadsfria. Kunder debiteras för standardåtgärdskostnader för API-anrop på set-blobnivå . Borttagningsåtgärder är kostnadsfria. Andra Azure-tjänster och -verktyg som Microsoft Defender for Storage kan dock debiteras för åtgärder som hanteras via en livscykelprincip.

Varje uppdatering av en blob senaste åtkomsttid faktureras under den andra driftkategorin .

Mer information om priser finns på Prissättning för blockblobbar.

Kända problem och begränsningar

  • Nivåindelning stöds ännu inte i ett Premium-blockbloblagringskonto. För alla andra konton tillåts nivåindelning endast på blockblobar och inte för tilläggs- och sidblobar.

  • En livscykelhanteringsprincip måste läsas eller skrivas i sin helhet. Partiella uppdateringar stöds inte.

  • Varje regel kan ha upp till 10 skiftlägeskänsliga prefix och upp till 10 villkor för blobindextaggen.

  • Om du aktiverar brandväggsregler för ditt lagringskonto kan begäranden om livscykelhantering blockeras. Du kan avblockera dessa begäranden genom att tillhandahålla undantag för betrodda Microsoft-tjänster. Mer information finns i avsnittet Undantag i Konfigurera brandväggar och virtuella nätverk.

  • En livscykelhanteringsprincip kan inte ändra nivån för en blob som använder ett krypteringsomfång.

  • Borttagningsåtgärden för en livscykelhanteringsprincip fungerar inte med någon blob i en oföränderlig container. Med en oföränderlig princip kan objekt skapas och läsas, men inte ändras eller tas bort. Mer information finns i Lagra affärskritiska blobdata med oföränderlig lagring.

Vanliga frågor och svar

Se Vanliga frågor och svar om livscykelhantering.

Nästa steg