IoT Edge에서 Azure Blob Storage를 사용하여 에지에 데이터 저장

적용 대상:IoT Edge 1.4 checkmark IoT Edge 1.4

Important

IoT Edge 1.4는 지원되는 릴리스입니다. 이전 릴리스에 있는 경우 IoT Edge 업데이트를 참조하세요.

IoT Edge의 Azure Blob Storage는 에지에 블록 Blob추가 Blob Storage 솔루션을 제공합니다. IoT Edge 디바이스의 Blob Storage 모듈은 Blob이 IoT Edge 디바이스에 로컬로 저장된다는 점을 제외하고 Azure Blob 서비스처럼 동작합니다. 이미 사용하던 동일한 Azure Storage SDK 메서드 또는 Blob API 호출을 사용하여 Blob에 액세스할 수 있습니다. 이 문서에서는 IoT Edge 디바이스에서 Blob 서비스를 실행하는 IoT Edge 컨테이너의 Azure Blob Storage와 관련된 개념을 설명합니다.

이 모듈은 시나리오에서 유용합니다.

  • 데이터를 처리하거나 클라우드로 전송할 수 있을 때까지 로컬로 저장해야 하는 경우. 이 데이터는 비디오, 이미지, 재무 데이터, 병원 데이터 또는 기타 비정형 데이터일 수 있습니다.
  • 디바이스가 연결이 제한된 위치에 있는 경우.
  • 응급 상황에 최대한 빨리 대응할 수 있도록 데이터에 대한 액세스 대기 시간을 단축하기 위해 데이터를 로컬에서 효율적으로 처리하려는 경우.
  • 대역폭 비용을 줄이고 테라바이트 단위의 데이터를 클라우드로 전송하지 않으려는 경우. 데이터를 로컬로 처리하고 처리된 데이터만 클라우드에 보낼 수 있습니다.

이 모듈은 deviceToCloudUploaddeviceAutoDelete 기능과 함께 제공됩니다.

deviceToCloudUpload 기능은 구성 가능한 기능입니다. 이 기능은 일시적인 인터넷 연결 지원을 사용하여 데이터를 로컬 Blob 스토리지에서 Azure로 자동으로 업로드합니다. 다음을 수행할 수 있습니다.

  • deviceToCloudUpload 기능을 설정/해제합니다.
  • NewestFirst 또는 OldestFirst와 같이 데이터를 Azure에 복사하는 순서를 선택합니다.
  • 데이터를 업로드하려는 Azure Storage 계정을 지정합니다.
  • Azure에 업로드하려는 컨테이너를 지정합니다. 이 모듈을 사용하면 원본 및 대상 컨테이너 이름을 모두 지정할 수 있습니다.
  • 클라우드 스토리지에 대한 업로드가 완료되는 즉시 Blob을 삭제할 수 있는 기능을 선택합니다.
  • 전체 Blob 업로드(작업 사용 Put Blob ) 및 블록 수준 업로드(사용 Put BlockPut Block ListAppend Block 작업)를 수행합니다.

Blob이 블록으로 구성된 경우 이 모듈은 블록 수준 업로드를 사용합니다. 일반적인 몇 가지 시나리오는 다음과 같습니다.

  • 애플리케이션은 이전에 업로드한 블록 Blob의 일부 블록을 업데이트하거나 추가 Blob에 새 블록을 추가합니다. 이 모듈은 전체 Blob이 아닌 업데이트된 블록만 업로드합니다.
  • 모듈에서 Blob을 업로드하는 중이고 인터넷 연결이 끊어집니다. 다시 연결되면 전체 Blob이 아닌 나머지 블록만 업로드합니다.

Blob 업로드 중에 예기치 않은 프로세스 종료(예: 전원 오류)가 발생하면 모듈이 다시 온라인 상태가 되면 업로드로 인한 모든 블록이 다시 업로드됩니다.

deviceAutoDelete는 구성 가능한 기능입니다. 지정된 기간(분 단위로 측정)이 만료되면 이 기능은 로컬 스토리지에서 Blob을 자동으로 삭제합니다. 다음을 수행할 수 있습니다.

  • deviceAutoDelete 기능을 설정/해제합니다.
  • Blob이 자동으로 삭제되는 시간(분)(deleteAfterMinutes)을 지정합니다.
  • deleteAfterMinutes 값이 만료되면 업로드하는 동안 Blob을 유지할 수 있는 기능을 선택합니다.

필수 조건

Azure IoT Edge 디바이스:

클라우드 리소스:

Azure의 표준 계층 IoT Hub.

deviceToCloudUpload 및 deviceAutoDelete 속성

모듈의 desired 속성을 사용하여 deviceToCloudUploadPropertiesdeviceAutoDeleteProperties를 설정합니다. desired 속성은 배포 중에 설정하거나 나중에 다시 배포할 필요 없이 모듈 쌍을 편집하여 변경할 수 있습니다. "모듈 쌍"reported configurationconfigurationValidation 을 검사 값이 올바르게 전파되었는지 확인하는 것이 좋습니다.

deviceToCloudUploadProperties

이 설정의 이름은 deviceToCloudUploadProperties입니다. IoT Edge 시뮬레이터를 사용하는 경우 설명 섹션에서 찾을 수 있는 이러한 속성에 대한 관련 환경 변수로 값을 설정합니다.

속성 가능한 값 설명
uploadOn true, false 기본적으로 설정됩니다 false . 기능을 켜려면 이 필드를 true.로 설정합니다.

환경 변수: deviceToCloudUploadProperties__uploadOn={false,true}
uploadOrder NewestFirst, OldestFirst 데이터를 Azure에 복사하는 순서를 선택할 수 있습니다. 기본적으로 설정됩니다 OldestFirst . 순서는 Blob을 마지막으로 수정한 시간에 따라 결정됩니다.

환경 변수: deviceToCloudUploadProperties__uploadOrder={NewestFirst,OldestFirst}
cloudStorageConnectionString "DefaultEndpointsProtocol=https;AccountName=<your Azure Storage Account Name>;AccountKey=<your Azure Storage Account Key>;EndpointSuffix=<your end point suffix>"는 데이터를 업로드할 스토리지 계정을 지정할 수 있는 연결 문자열입니다. 를 Azure Storage Account KeyEnd point suffix지정합니다Azure Storage Account Name. 데이터가 업로드되는 Azure의 적절한 EndpointSuffix를 추가합니다. 글로벌 Azure, Government Azure 및 Microsoft Azure Stack에 따라 다릅니다.

여기서 Azure Storage SAS 연결 문자열을 지정하도록 선택할 수 있습니다. 그러나 이 속성이 만료되면 업데이트해야 합니다. SAS 권한에는 컨테이너에 대한 만들기 액세스 권한과 Blob에 대한 만들기, 쓰기 및 추가 액세스 권한이 포함될 수 있습니다.

환경 변수: deviceToCloudUploadProperties__cloudStorageConnectionString=<connection string>
storageContainersForUpload "<source container name1>": {"target": "<target container name>"},

"<source container name1>": {"target": "%h-%d-%m-%c"},

"<source container name1>": {"target": "%d-%c"}
Azure에 업로드하려는 컨테이너 이름을 지정할 수 있습니다. 이 모듈을 사용하면 원본 및 대상 컨테이너 이름을 모두 지정할 수 있습니다. 대상 컨테이너 이름을 지정하지 않으면 다음과 같은 <IoTHubName>-<IotEdgeDeviceID>-<ModuleName>-<SourceContainerName>컨테이너 이름이 자동으로 할당됩니다. 대상 컨테이너 이름에 대한 템플릿 문자열을 만들고, 가능한 값 열을 체크 아웃할 수 있습니다.
* %h -> IoT Hub 이름(3~50자)입니다.
* %d -> IoT Edge 디바이스 ID(1~129자)입니다.
* %m -> 모듈 이름(1~64자)입니다.
* %c -> 원본 컨테이너 이름(3~63자)입니다.

컨테이너 이름의 최대 크기는 63자입니다. 컨테이너 크기가 63자를 초과하는 경우 이름에 대상 컨테이너 이름이 자동으로 할당됩니다. 이 경우 이름은 각 섹션(IoTHubName, IotEdgeDeviceID, ModuleName, SourceContainerName)에서 15자로 잘립니다.

환경 변수: deviceToCloudUploadProperties__storageContainersForUpload__<sourceName>__target=<targetName>
deleteAfterUpload true, false 기본적으로 설정됩니다 false . 로 true설정하면 클라우드 스토리지에 대한 업로드가 완료되면 데이터가 자동으로 삭제됩니다.

주의: 추가 Blob을 사용하는 경우 이 설정은 성공적으로 업로드된 후 로컬 스토리지에서 추가 Blob을 삭제하고 해당 Blob에 대한 향후 추가 블록 작업이 실패합니다. 이 설정은 주의해서 사용합니다. 애플리케이션이 자주 추가 작업을 수행하지 않거나 연속 추가 작업을 지원하지 않는 경우 이 설정을 사용하도록 설정하지 마세요.

환경 변수: deviceToCloudUploadProperties__deleteAfterUpload={false,true}.

deviceAutoDeleteProperties

이 설정의 이름은 deviceAutoDeleteProperties입니다. IoT Edge 시뮬레이터를 사용하는 경우 설명 섹션에서 찾을 수 있는 이러한 속성에 대한 관련 환경 변수로 값을 설정합니다.

속성 가능한 값 설명
deleteOn true, false 기본적으로 설정됩니다 false . 기능을 켜려면 이 필드를 true.로 설정합니다.

환경 변수: deviceAutoDeleteProperties__deleteOn={false,true}
deleteAfterMinutes <minutes> 시간을 분 단위로 지정합니다. 이 값이 만료되면 모듈은 로컬 스토리지에서 Blob을 자동으로 삭제합니다. 현재 허용되는 최대 시간(분)은 35791입니다.

환경 변수: deviceAutoDeleteProperties__ deleteAfterMinutes=<minutes>
retainWhileUploading true, false 기본적으로 Blob은 만료되는 경우 deleteAfterMinutes 클라우드 스토리지에 업로드하는 동안 Blob으로 설정true되고 유지됩니다. 설정할 false 수 있으며 만료되는 즉시 deleteAfterMinutes 데이터를 삭제합니다. 참고: 이 속성이 작동하려면 uploadOn을 true로 설정해야 합니다.

주의: 추가 Blob을 사용하는 경우 이 설정은 값이 만료될 때 로컬 스토리지에서 추가 Blob을 삭제하고 해당 Blob에 대한 향후 추가 블록 작업이 실패합니다. 애플리케이션에서 수행하는 추가 작업의 예상 빈도에 맞게 만료 값이 충분히 큰지 확인합니다.

환경 변수: deviceAutoDeleteProperties__retainWhileUploading={false,true}

SMB 공유를 로컬 스토리지로 사용

이 모듈의 Windows 컨테이너를 Windows 호스트에 배포할 때 SMB 공유를 로컬 스토리지 경로로 제공할 수 있습니다.

SMB 공유 및 IoT 디바이스가 상호 트러스트된 도메인에 있는지 확인합니다.

PowerShell 명령을 실행 New-SmbGlobalMapping 하여 Windows를 실행하는 IoT 디바이스에서 로컬로 SMB 공유를 매핑할 수 있습니다.

구성 단계는 다음과 같습니다.

$creds = Get-Credential
New-SmbGlobalMapping -RemotePath <remote SMB path> -Credential $creds -LocalPath <Any available drive letter>

예시:

$creds = Get-Credential
New-SmbGlobalMapping -RemotePath \\contosofileserver\share1 -Credential $creds -LocalPath G:

이 명령은 자격 증명을 사용하여 원격 SMB 서버로 인증합니다. 그런 다음 원격 공유 경로를 G: 드라이브 문자에 매핑합니다(사용 가능한 다른 드라이브 문자일 수 있음). 이제 IoT 디바이스에 G: 드라이브의 경로에 매핑된 데이터 볼륨이 있습니다.

IoT 디바이스의 사용자가 원격 SMB 공유에 대한 읽기/쓰기 작업을 수행할 수 있는지 확인합니다.

배포의 경우 <storage mount> 값은 G:/ContainerData:C:/BlobRoot일 수 있습니다.

Linux에서 컨테이너 사용자에 대한 디렉터리 액세스 권한 부여

Linux 컨테이너에 대한 만들기 옵션에서 스토리지에 볼륨 탑재를 사용하는 경우 추가 단계를 수행할 필요가 없지만 바인딩 탑재를 사용하는 경우 서비스를 올바르게 실행하려면 이러한 단계가 필요합니다.

사용자가 작업을 수행하는 데 필요한 최소 권한으로 액세스 권한을 제한하는 최소 권한 원칙에 따라 이 모듈에는 사용자(이름: absie, ID: 11000) 및 사용자 그룹(이름: absie, ID: 11000)이 포함됩니다. 컨테이너가 루트(기본 사용자가 루트)로 시작하는 경우 서비스는 낮은 권한의 absie 사용자로 시작됩니다.

이 동작으로 인해 호스트 경로 바인딩에 대한 사용 권한 구성이 서비스가 제대로 작동해야 합니다. 그렇지 않으면 서비스가 액세스 거부 오류와 충돌합니다. 디렉터리 바인딩에 사용되는 경로는 컨테이너 사용자(예: absie 11000)가 액세스할 수 있어야 합니다. 호스트에서 다음 명령을 실행하여 컨테이너 사용자에게 디렉터리에 대한 액세스 권한을 부여할 수 있습니다.

sudo chown -R 11000:11000 <blob-dir>
sudo chmod -R 700 <blob-dir>

예시:

sudo chown -R 11000:11000 /srv/containerdata
sudo chmod -R 700 /srv/containerdata

absie 이외의 사용자로 서비스를 실행해야 하는 경우 배포 매니페스트의 "User" 속성 아래 createOptions에서 사용자 지정 사용자 ID를 지정할 수 있습니다. 이러한 경우 기본 또는 루트 그룹 ID 0를 사용합니다.

"createOptions": {
  "User": "<custom user ID>:0"
}

이제 컨테이너 사용자에게 디렉터리에 대한 액세스 권한을 부여합니다.

sudo chown -R <user ID>:<group ID> <blob-dir>
sudo chmod -R 700 <blob-dir>

로그 파일 구성

모듈에 대한 로그 파일을 구성하는 방법에 대한 자세한 내용은 이러한 프로덕션 모범 사례를 참조하세요.

Blob Storage 모듈에 연결

모듈에 대해 구성한 계정 이름 및 계정 키를 사용하여 IoT Edge 디바이스의 Blob Storage에 액세스할 수 있습니다.

만드는 스토리지 요청의 Blob 엔드포인트로 IoT Edge 디바이스를 지정합니다. IoT Edge 디바이스 정보 및 구성한 계정 이름을 사용하여 명시적 스토리지 엔드포인트에 대한 연결 문자열 만들 수 있습니다.

  • Azure Blob Storage on IoT Edge가 실행되는 것과 동일한 디바이스에 배포된 모듈의 경우 Blob 엔드포인트는 http://<module name>:11002/<account name>입니다.
  • 다른 디바이스에서 실행되는 모듈 또는 애플리케이션의 경우 네트워크에 적합한 엔드포인트를 선택해야 합니다. 네트워크 설정에 따라 외부 모듈 또는 애플리케이션의 데이터 트래픽이 Azure Blob Storage on IoT Edge를 실행하는 디바이스에 도달할 수 있도록 엔드포인트 형식을 선택합니다. 이 시나리오의 BLOB 엔드포인트는 다음 중 하나입니다.
    • http://<device IP >:11002/<account name>
    • http://<IoT Edge device hostname>:11002/<account name>
    • http://<fully qualified domain name>:11002/<account name>

Important

Azure IoT Edge는 모듈을 호출할 때 대/소문자를 구분하며, Storage SDK도 기본적으로 소문자로 설정됩니다. Azure Marketplace의 모듈 이름은 AzureBlobStorageonIoTEdge이지만 이름을 소문자로 변경하면 IoT Edge 모듈의 Azure Blob Storage에 대한 연결이 중단되지 않도록 하는 데 도움이 됩니다.

Azure Blob Storage 빠른 시작 샘플

Azure Blob Storage 설명서에는 여러 언어로 작성된 빠른 시작 샘플 코드가 포함되어 있습니다. 로컬 Blob 스토리지 모듈에 연결하도록 Blob 엔드포인트를 변경하여 이러한 샘플을 실행하여 Azure Blob Storage on IoT Edge를 테스트할 수 있습니다.

다음 빠른 시작 샘플에서는 IoT Edge에서도 지원되는 언어를 사용하므로 Blob Storage 모듈과 함께 IoT Edge 모듈로 배포할 수 있습니다.

  • .NET
    • IoT Edge 모듈 v1.4.0 이하의 Azure Blob Storage는 WindowsAzure.Storage 9.3.3 SDK와 호환되며 v1.4.1은 Azure.Storage.Blobs 12.8.0 SDK도 지원합니다.
  • Python
    • Python SDK의 V2.1 이전 버전에는 모듈이 Blob 생성 시간을 반환하지 않는 알려진 문제가 있습니다. 이 문제로 인해 목록 Blob과 같은 일부 메서드가 작동하지 않습니다. 해결 방법으로 Blob 클라이언트의 API 버전을 '2017-04-17'로 명시적으로 설정합니다. 예: block_blob_service._X_MS_VERSION = '2017-04-17'
    • 추가 Blob 샘플
  • Node.JS
  • JS/HTML
  • Ruby
  • Go
  • PHP

Azure Storage Explorer를 사용하여 로컬 스토리지에 연결

Azure Storage Explorer를 사용하여 로컬 스토리지 계정에 연결할 수 있습니다.

  1. Azure Storage Explorer 다운로드 및 설치

  2. 최신 버전의 Azure Storage Explorer는 Blob Storage 모듈에서 지원하지 않는 최신 스토리지 API 버전을 사용합니다. Azure 저장소 탐색기를 시작합니다. 편집 메뉴를 선택합니다. 대상 Azure Stack Hub API가 선택되어 있는지 확인합니다. 그렇지 않은 경우 대상 Azure Stack Hub를 선택합니다. 변경 내용이 적용되려면 Azure Storage Explorer를 다시 시작합니다. 이 구성은 IoT Edge 환경과의 호환성을 위해 필요합니다.

  3. 연결 문자열 사용하여 Azure Storage에 커넥트

  4. 연결 문자열을 제공합니다(DefaultEndpointsProtocol=http;BlobEndpoint=http://<host device name>:11002/<your local account name>;AccountName=<your local account name>;AccountKey=<your local account key>;).

  5. 연결 단계를 진행합니다.

  6. 로컬 스토리지 계정 내에 컨테이너 만들기

  7. 블록 Blob 또는 추가 Blob으로 파일 업로드를 시작합니다.

    참고 항목

    이 모듈은 페이지 Blob을 지원하지 않습니다.

  8. Storage Explorer에서도 Azure 스토리지 계정을 연결하도록 선택할 수 있습니다. 이 구성은 로컬 스토리지 계정과 Azure 스토리지 계정 모두에 대한 단일 보기를 제공합니다.

지원되는 스토리지 작업

IoT Edge의 Blob 스토리지 모듈은 Azure Storage SDK를 사용하며, 블록 Blob 엔드포인트용 Azure Storage API 버전 2017-04-17과 일치합니다.

모든 Azure Blob Storage 작업은 Azure Blob Storage on IoT Edge에서 지원되지 않으므로 이 섹션에는 각 작업의 상태가 나와 있습니다.

어카운트

지원됨:

  • 컨테이너 나열

지원 되지 않는:

  • Blob 서비스 속성 가져오기 및 설정
  • 실행 전 Blob 요청
  • Blob service 통계 가져오기
  • 계정 정보 가져오기

컨테이너

지원됨:

  • 컨테이너 만들기 및 삭제
  • 컨테이너 속성 및 메타데이터 가져오기
  • Blob 나열
  • 컨테이너 ACL 가져오기 및 설정
  • 컨테이너 메타데이터 설정

지원 되지 않는:

  • 컨테이너 임대

Blob

지원됨:

  • Blob 배치, 가져오기 및 삭제
  • Blob 속성 가져오기 및 설정
  • Blob 메타데이터 가져오기 및 설정

지원 되지 않는:

  • Blob 임대
  • Blob 스냅샷
  • Blob 복사 및 중단
  • Blob 삭제 취소
  • Blob 계층 설정

블록 Blob

지원됨:

  • 블록 배치
  • 차단 목록 배치 및 가져오기

지원 되지 않는:

  • URL에서 블록 배치

추가 Blob

지원됨:

  • 추가 블록

지원 되지 않는:

  • URL에서 블록 추가

IoT Edge 통합의 Event Grid

주의

Event Grid on IoT Edge와의 통합은 미리 보기에 있습니다.

이 Azure Blob Storage on IoT Edge 모듈은 이제 IoT Edge의 Event Grid와 통합됩니다. 이 통합에 대한 자세한 내용은 모듈 배포, 이벤트 게시 및 이벤트 전송 확인 자습서를 참조하세요.

릴리스 정보

이 모듈에 대한 Docker 허브릴리스 정보는 다음과 같습니다. 특정 버전의 릴리스 정보에서 버그 수정 및 수정과 관련된 자세한 정보를 찾을 수 있습니다.

다음 단계

IoT Edge에 Azure Blob Storage를 배포하는 방법 알아보기

IoT Edge 릴리스 정보 페이지의 Azure Blob Storage에서 최근 업데이트 및 공지를 최신 상태로 유지합니다.