INNORIX
전송 빌더전송 파인더개발자리소스고객사
무료 시작하기
INNORIX

LET FILES
MOVE THEMSELVES

INNORIX는 모든 시스템과 환경에서 파일 이동과 자동화를 제공하는 엔터프라이즈 파일 인프라 기업입니다.
5,000개 이상의 기업 및 공공기관에서 사용하고 있습니다.

시작하기

  • 필요한 전송 만들기
  • 필요한 전송 찾기

주요 전송

  • 팀 업무 폴더 동기화
  • 고객에게 대용량 파일 전송
  • 여러 시스템 파일 탐색
  • FTP·SFTP·SCP·rsync 전환
  • 앱에 파일 전송 추가
  • 웹 업로드·다운로드 적용
  • AI·데이터 워크플로 구축
  • 모든 전송 둘러보기→

개발자

  • 개발자 센터
  • 구현 예제
  • API 빠른 시작
  • 개발자 가이드
  • API 레퍼런스
  • GitHub

리소스

  • 리소스 센터
  • 제품 가이드
  • 외부 서비스 연동
  • 배포 및 관리
  • 도움말 센터

고객사

  • 정부
  • 공공부문
  • 제조
  • 엔지니어링
  • 금융
  • 유통
  • IT/통신
  • 미디어
  • 의료
  • 교육

플랜

  • 가격 및 플랜

회사

INNORIX 소개

Exabyter를 찾고 계신가요?

이제 INNORIX Platform에 통합되었습니다

기타 INNORIX 제품

Al.bert — 스마트 교통 AI

글로벌 오피스

  • 미국 뉴욕
  • 대한민국 서울
  • 베트남 호찌민
  • 오피스 위치 보기→

(C)2026 INNORIX. All rights reserved.

  • 보안
  • 상태
  • 이용약관
  • 개인정보 처리방침
  • 쿠키 정책
  1. 가이드
  2. Windows 폴더의 파일을 Amazon S3로 자동 업로드하기

Windows 폴더의 파일을 Amazon S3로 자동 업로드하기

Windows 지정 폴더에 생성된 파일을 감지해 S3의 지정 버킷과 경로로 자동 업로드합니다.

IT 엔지니어개발자
  • AI 학습 데이터와 모델 파일의 전체 흐름 자동화하기
  • AI 모델 파일을 여러 엣지 장비에 배포하기
  • 폐쇄망·망분리 환경에서 파일을 승인 반입·반출하기
  • 승인된 파일을 여러 지점에 동시에 배포하기
  • Azure Blob에서 사내 서버로 파일 전달하기
  • 데이터베이스 덤프, 백업, 아카이브 파일을 원격 보관처로 자동 전달하기
  • 지점·공장·엣지 장비의 파일을 중앙으로 수집하기
  • CI/CD 빌드 결과물을 여러 서버에 배포하기
  • 서로 다른 클라우드 스토리지 사이에서 파일 이동하기
  • 서로 다른 AWS 계정의 S3 버킷 사이에 파일 전송하기
  • 고객별 파일 작업 공간 제공하기
  • 고객에게 만료 조건이 있는 대용량 다운로드 링크 제공하기
  • 고객이 브라우저에서 대용량 파일을 업로드하게 하기
  • 고객 작업 공간으로 대용량 파일 직접 보내기
  • 데이터베이스 백업 파일을 오브젝트 스토리지에 보관하기
  • Datadog으로 파일 전송 실패와 복구 알림 받기
  • 웹, 앱, 업무 시스템에 파일 전송 기능 추가하기
  • 파일 도착 후 검증·변환·후속 작업 실행하기
  • NAS, 파일 서버의 대량 파일을 클라우드로 이전하기
  • FTP 배치 작업을 관리형 파일 흐름으로 전환하기
  • Google Cloud Storage에서 Amazon S3로 직접 전송하기
  • Grafana에서 파일 전송 상태 대시보드 만들기
  • 전송된 파일의 해시값으로 무결성 자동 검증하기
  • 새 파일이 생기면 지정한 곳으로 자동 전송하기
  • Kubernetes에서 오브젝트 스토리지로 결과 파일 보내기
  • Git 밖의 대용량 파일과 빌드 결과물 자동 전달하기
  • Git으로 관리하기 어려운 파일을 자동 전달하기
  • 분산 서버의 로그·진단 파일을 중앙으로 모으기
  • 미디어 원본과 처리 결과를 단계별로 자동 전달하기
  • 수신 파일을 Microsoft Defender로 검사하고 후속 처리하기
  • 여러 단계의 파일 전송을 하나의 흐름으로 자동화하기
  • 승인된 파일을 여러 팀·지점에 자동 배포하기
  • 협력사 파일을 업무 시스템으로 자동 분류하기
  • 협력사·공급망과 정기적으로 파일 교환하기
  • 매일·매주 반복되는 파일 전송 자동화하기
  • 네트워크 중단 후 파일 전송을 자동으로 재개하기
  • rsync 작업을 관리형 파일 흐름으로 전환하기
  • 정해진 시간에 반복 파일 전송 예약하기
  • 소프트웨어·펌웨어를 여러 장비에 배포하고 결과 확인하기
  • 소프트웨어 패키지를 여러 서버·지점에 배포하기
  • 팀 폴더의 변경 파일을 여러 장비에 자동 반영하기
  • 팀 업무 폴더를 여러 PC에 자동 반영하기
  • 여러 장비의 파일을 한곳에서 찾고 직접 전송하기
  • 웹사이트에 대용량 파일 업로드·다운로드 기능 추가하기
  • 채널을 구독해 새 파일을 자동으로 받기
  • Amazon S3에서 Azure Blob으로 직접 전송하기
  • Amazon S3에서 Cloudflare R2로 파일 이전하기
  • Amazon S3 파일을 Linux 서버로 자동 내려받기
  • SCP 셸 스크립트를 CLI 기반 전송으로 전환하기
  • SFTP 계정과 배치 전송을 중앙에서 관리하기
  • Slack·Teams에서 파일 전송을 실행하고 상태 알림 받기
  • Windows 폴더의 파일을 Amazon S3로 자동 업로드하기
  • Windows와 Linux 서버 사이에 파일을 직접 전송하기

시작하기#

기본 개념#

Windows 폴더에서 생성되는 파일을 Amazon S3로 자동 업로드하기

업무 환경에서는 다양한 프로그램과 시스템이 Windows 서버의 특정 폴더에 파일을 생성합니다.

예를 들어 업무 시스템은 일일 보고서를 생성하고, 데이터 처리 프로그램은 CSV 파일을 저장하며, 백업 프로그램은 정해진 위치에 백업 파일을 생성할 수 있습니다.

이러한 파일을 클라우드에서 활용하려면 담당자가 파일을 확인한 뒤 S3에 직접 업로드하거나, 별도의 업로드 프로그램을 실행하는 과정이 필요할 수 있습니다.

Windows 폴더 자동 업로드는 파일이 생성되는 Windows 환경과 Amazon S3를 직접 연결해, 지정된 조건에 맞는 파일을 자동으로 업로드하는 방식입니다.

파일이 생성되는 폴더와 S3의 저장 위치를 연결하고, 어떤 파일을 언제 업로드할지 설정하면 파일 준비부터 클라우드 저장까지 하나의 흐름으로 자동화할 수 있습니다.

Windows Server
      │
      │ 파일 생성
      ▼
┌─────────────────┐
│ 지정된 폴더      │
│                 │
│ D:\Reports      │
└────────┬────────┘
         │
         │ 파일 감지
         ▼
┌─────────────────┐
│ 자동 업로드 Flow │
└────────┬────────┘
         │
         │ Upload
         ▼
┌─────────────────┐
│    Amazon S3    │
│                 │
│ reports/daily/  │
└─────────────────┘

이를 통해 Windows 폴더에 파일이 생성된 이후 파일 확인 → 수동 업로드 → S3 저장 과정을 반복하지 않고, 지정된 규칙에 따라 필요한 파일을 자동으로 클라우드 환경에 반영할 수 있습니다.

업로드 흐름#

파일 생성부터 S3 저장까지 자동으로 이어가기

자동 업로드는 Windows의 지정된 폴더에서 파일이 생성되거나 변경되는 시점을 기준으로 시작할 수 있습니다.

Flow는 먼저 설정된 폴더에서 파일을 확인하고, 파일 이름이나 확장자, 경로 등의 조건에 맞는지 확인합니다.

조건에 맞는 파일은 지정된 Amazon S3 버킷과 저장 경로로 전송됩니다.

전송이 완료되면 Run을 통해 실제 업로드 결과와 파일별 처리 상태를 확인할 수 있습니다.

① Windows 폴더에 파일 생성

↓

② 파일 생성 또는 변경 감지

↓

③ 업로드 대상 조건 확인

↓

④ Amazon S3로 파일 전송

↓

⑤ 지정된 S3 경로에 파일 저장

↓

⑥ Run에서 결과 확인

예를 들어 다음과 같은 흐름으로 구성할 수 있습니다.

┌──────────────────────┐
│ 업무 시스템           │
│                      │
│ Daily Report 생성    │
└──────────┬───────────┘
           │
           ▼
┌──────────────────────┐
│ Windows Folder       │
│                      │
│ D:\Reports\Daily     │
└──────────┬───────────┘
           │
           │ File Created
           ▼
┌──────────────────────┐
│ Upload Flow          │
│                      │
│ 파일 조건 확인        │
└──────────┬───────────┘
           │
           ▼
┌──────────────────────┐
│ Amazon S3            │
│                      │
│ reports/daily/       │
└──────────────────────┘

이와 같이 구성하면 업무 시스템이 파일을 생성하는 것만으로 이후의 클라우드 업로드 작업을 자동으로 이어갈 수 있습니다.

활용 변화#

파일 생성 후 직접 업로드하던 반복 작업 줄이기

Windows에서 생성된 파일을 S3로 저장해야 하는 경우, 기존에는 파일 생성 여부를 확인하고 필요한 파일을 선택한 뒤 업로드 작업을 직접 실행할 수 있습니다.

파일 생성 위치와 S3 저장 위치가 정해져 있는 반복 업무라면 같은 과정을 계속 수행해야 합니다.

자동 업로드를 적용하면 파일이 생성되는 위치와 클라우드 저장 위치를 미리 연결해 파일 생성 이후의 작업을 자동으로 처리할 수 있습니다.

업로드 전과 후

구분 기존 파일 업로드 Windows 폴더 자동 업로드
파일 확인 생성된 파일을 직접 확인 지정 폴더의 파일 자동 감지
업로드 준비 파일을 선택해 업로드 실행 조건에 맞는 파일 자동 선택
대상 지정 S3 버킷과 경로 직접 선택 미리 설정한 S3 경로 사용
파일 전송 필요할 때마다 직접 실행 파일 생성 조건에 따라 자동 실행
결과 확인 업로드 후 직접 확인 Run에서 처리 결과 확인

예를 들어 매일 생성되는 보고서, 데이터 처리 결과 또는 백업 파일을 동일한 S3 위치에 저장해야 하는 경우 파일 생성부터 업로드까지의 반복 작업을 줄일 수 있습니다.

이처럼 Windows 폴더 자동 업로드는 파일을 생성하는 시스템과 파일을 활용하는 클라우드 환경을 직접 연결합니다.

IT 엔지니어#

환경 연결#

Windows 파일 경로와 Amazon S3 저장 위치 연결하기

자동 업로드를 구성하려면 먼저 파일이 생성되는 Windows 장비와 Amazon S3를 연결합니다.

Source에서는 파일을 확인할 Windows 장비와 폴더 경로를 지정하고, Target에서는 업로드할 S3 버킷과 저장 위치를 설정합니다.

예를 들어 Windows의 다음 경로에 파일이 생성된다고 가정할 수 있습니다.

D:\Data\Export

해당 폴더에 생성되는 파일을 다음 S3 위치로 업로드하도록 연결할 수 있습니다.

s3://company-data/export/
┌────────────────────────┐
│ Windows Source         │
│                        │
│ Server-01              │
│ D:\Data\Export         │
└────────────┬───────────┘
             │
             │ Transfer
             ▼
┌────────────────────────┐
│ Amazon S3 Target       │
│                        │
│ company-data           │
│ /export/               │
└────────────────────────┘

전송 환경에서는 다음 항목을 함께 구성합니다.

구분 설정 내용
Source 파일이 생성되는 Windows 장비
Source Path 파일을 확인할 폴더 경로
Target 사용할 Amazon S3 환경
Bucket 파일을 저장할 버킷
Target Path 버킷 안의 실제 저장 위치
접근 범위 파일 읽기와 S3 저장에 필요한 권한

이를 통해 어느 Windows 폴더의 파일을 어느 S3 위치에 저장할지 명확하게 분리해 구성할 수 있습니다.

하나의 Windows 서버에서 여러 폴더를 각각 다른 S3 경로로 연결하는 방식도 가능합니다.

Windows Server
      │
      ├── D:\Reports ────────► S3 /reports/
      │
      ├── D:\Images ─────────► S3 /images/
      │
      └── D:\Backup ─────────► S3 /backup/

이 구조를 활용하면 하나의 장비에서 생성되는 파일도 업무 목적에 따라 서로 다른 S3 저장 영역으로 자동 분리할 수 있습니다.

감지 조건#

어떤 파일을 언제 업로드할지 설정하기

Windows와 S3의 연결이 완료되면 자동 업로드를 시작할 조건을 설정합니다.

모든 파일을 업로드하는 대신 특정 파일이 생성되었을 때만 실행하거나, 지정된 확장자와 파일 이름을 기준으로 업로드 대상을 제한할 수 있습니다.

예를 들어 다음과 같은 조건을 사용할 수 있습니다.

조건 활용 방식
파일 생성 새로운 파일이 생성되면 업로드
파일 변경 수정된 파일을 기준으로 업로드
파일 경로 지정된 폴더와 하위 경로만 처리
파일 이름 특정 이름 규칙에 맞는 파일만 처리
확장자 CSV, JSON, ZIP 등 필요한 파일만 처리
Date/Time 지정한 시간에 파일 업로드
After Transfer 이전 파일 작업 완료 후 실행

예를 들어 /daily 폴더에서는 CSV 파일만 S3로 업로드하고, /backup 폴더에서는 ZIP 파일만 별도의 S3 경로에 저장하도록 구성할 수 있습니다.

D:\Data
│
├── Daily
│   ├── report-01.csv  ───────► S3 /reports/
│   ├── report-02.csv  ───────► S3 /reports/
│   └── temporary.txt  ───────► 제외
│
└── Backup
    ├── backup-01.zip  ───────► S3 /backup/
    └── backup-02.zip  ───────► S3 /backup/

이렇게 설정하면 하나의 Windows 장비에서도 파일 유형과 생성 위치에 따라 서로 다른 업로드 흐름을 구성할 수 있습니다.

흐름 구성#

파일 감지와 S3 업로드를 하나의 Flow로 연결하기

Source와 Target, 실행 조건을 설정한 뒤에는 이를 하나의 Flow로 연결합니다.

Flow에서는 Windows 폴더에서 파일을 확인하고, 설정된 조건에 따라 업로드 대상을 결정한 뒤 Amazon S3로 파일을 전송합니다.

                 ┌──────────────────┐
                 │ Windows Folder   │
                 │                  │
                 │ D:\Data\Export   │
                 └────────┬─────────┘
                          │
                          │ File Event
                          ▼
                 ┌──────────────────┐
                 │ Condition        │
                 │                  │
                 │ *.csv            │
                 └────────┬─────────┘
                          │
                          │ Matched
                          ▼
                 ┌──────────────────┐
                 │ File Transfer    │
                 └────────┬─────────┘
                          │
                          ▼
                 ┌──────────────────┐
                 │ Amazon S3        │
                 │ /data/export/    │
                 └──────────────────┘

기본적으로 하나의 폴더와 하나의 S3 경로를 연결할 수 있지만, 실제 업무 환경에서는 여러 형태로 확장할 수 있습니다.

여러 폴더를 하나의 S3로 수집하기#

Windows Server A ──┐
                   │
Windows Server B ──┼──► Amazon S3
                   │
Windows Server C ──┘

여러 서버에서 생성되는 결과 파일이나 로그 파일을 하나의 S3 버킷으로 수집할 수 있습니다.

하나의 폴더를 여러 S3 경로로 분기하기#

Windows Folder
       │
       ▼
  File Condition
       │
   ┌───┴────┐
   │        │
 CSV       ZIP
   │        │
   ▼        ▼
S3 Data   S3 Backup

파일 유형에 따라 데이터 파일과 백업 파일을 각각 다른 S3 경로로 저장하도록 구성할 수도 있습니다.

이처럼 파일 조건과 대상 위치를 Flow에서 연결하면 단순 업로드 작업뿐 아니라 실제 파일 처리 환경에 맞는 자동화 구조를 만들 수 있습니다.

결과 확인#

자동 업로드 작업과 파일별 S3 반영 결과 확인하기

Flow가 실행되면 Runs에서 자동 업로드 작업의 진행 상태와 결과를 확인할 수 있습니다.

실행 목록에서는 여러 자동 업로드 작업의 상태를 확인하고, 특정 Run을 선택하면 실제 처리된 파일과 Source, Target 정보를 상세하게 확인할 수 있습니다.

각 Run에서는 다음과 같은 정보를 확인할 수 있습니다.

확인 항목 확인 내용
Source 파일이 생성된 Windows 장비와 경로
Target Amazon S3 버킷과 저장 위치
Total Files 처리 대상 파일 수
Total Size 전체 업로드 용량
Progress 현재 업로드 진행률
Status 실행 중, 완료 또는 추가 확인 상태
Started 업로드 시작 시간
Completed 업로드 완료 시간

Run 상세 정보에서는 전체 작업뿐 아니라 개별 파일의 처리 상태를 확인할 수 있습니다.

RUN-20260902-001
│
├── Source
│   └── Windows / D:\Data\Export
│
├── Files
│   ├── report-01.csv     Completed
│   ├── report-02.csv     Completed
│   └── report-03.csv     Processing
│
└── Target
    └── Amazon S3 /data/export/

이를 통해 자동 업로드가 정상적으로 실행되었는지 확인하고, 실제 파일이 지정된 S3 위치에 반영되는 과정을 관리할 수 있습니다.

후속 연결#

S3 업로드 이후 데이터 처리와 알림까지 자동으로 이어가기

파일이 Amazon S3에 업로드된 이후에는 결과를 기준으로 다음 작업을 자동으로 연결할 수 있습니다.

예를 들어 데이터 파일이 S3에 저장되면 분석 작업을 시작하거나, 백업 파일의 업로드가 완료되면 담당자에게 결과를 알리도록 구성할 수 있습니다.

Windows File
      │
      ▼
File Upload
      │
      ▼
Amazon S3
      │
      ├──────────────► Data Processing
      │
      ├──────────────► Notification
      │
      └──────────────► Monitoring
연결 영역 활용 방식
데이터 처리 S3 업로드 후 분석 또는 변환 작업 시작
다음 Flow 다른 파일 전송 또는 후속 작업 실행
업무·협업 업로드 완료 결과를 담당자에게 알림
모니터링 업로드 상태와 실행 결과 확인

예를 들어 매일 생성되는 CSV 파일을 S3에 업로드한 뒤 데이터 처리 Flow를 시작하거나, 백업 파일 업로드가 완료되면 운영 담당자에게 완료 결과를 알리는 방식으로 구성할 수 있습니다.

이렇게 연결하면 단순히 Windows 폴더에서 S3로 파일을 업로드하는 작업에서 끝나지 않고,

파일 생성 → 자동 감지 → 조건 확인 → S3 업로드 → 결과 확인 → 후속 처리

까지 하나의 파일 자동화 흐름으로 확장할 수 있습니다.

장애 대응#

업로드 상태를 확인하고 필요한 파일 또는 작업 다시 실행하기

자동 업로드 과정에서 추가 확인이 필요한 상황이 발생하면 Run의 상세 정보를 통해 어느 단계에서 처리가 진행되지 않았는지 확인합니다.

Windows Source의 연결 상태와 원본 파일 경로를 확인하고, Amazon S3 Target의 접근 상태와 저장 위치를 함께 점검할 수 있습니다.

장애 대응은 다음과 같은 흐름으로 진행할 수 있습니다.

Run 확인
    ↓
View Details
    ↓
Windows Source 확인
    ↓
파일 경로 및 상태 확인
    ↓
Amazon S3 Target 확인
    ↓
접근 및 저장 위치 확인
    ↓
환경 조정
    ↓
Retry
    ↓
새로운 Run 생성
    ↓
S3 반영 확인
    ↓
Completed

업로드 환경을 확인할 때는 다음 항목을 함께 살펴볼 수 있습니다.

확인 항목 확인 내용 후속 작업
Windows 연결 Source 장비의 연결 상태 장비 연결 확인
파일 경로 실제 파일 생성 위치 Source 경로 조정
파일 상태 업로드 대상 파일 정보 파일 준비 상태 확인
S3 연결 Target 접근 상태 연결 정보 확인
저장 경로 버킷과 대상 경로 Target 위치 조정
접근 권한 파일 읽기와 S3 저장 권한 권한 설정 확인
실행 기록 Run 상세 정보와 파일별 결과 환경 조정 후 재실행

예를 들어 Windows 폴더 경로가 변경되었거나 S3 저장 위치에 접근할 수 없는 경우 해당 설정을 조정한 뒤 작업을 다시 실행할 수 있습니다.

재실행 후에는 새로운 Run을 통해 파일이 정상적으로 Amazon S3에 반영되었는지 확인합니다.

이 과정을 통해 Windows 파일 생성 환경부터 Amazon S3 저장, 후속 업무 연결까지 이어지는 자동 업로드 흐름을 안정적으로 운영할 수 있습니다.

개발자#

Windows 폴더를 감시해 S3로 전송하는 자동화를 코드로 등록하기

시작 전에 다음 항목을 준비합니다.

준비물 내용
INNORIX 인증 INNORIX_ACCESS_TOKEN (Authorization: Bearer)
Windows 장비 소스 device ID와 감시할 폴더 경로 (예: C:/data/export)
S3 장비 대상 device ID와 업로드 경로 (예: my-bucket/incoming)
런타임 Python 3 + requests · Java 17+ · Node.js 18+ · .NET 8+

Python·Node.js는 REST를 직접 호출하는 최소 api() 헬퍼를 정의해 씁니다(API 호출 레시피 참고). Java·C#은 번들 소스의 InnorixClient와 Json(C#은 J) 헬퍼를 사용하며, encode_path·now_iso가 여기에 들어 있습니다. 장비 식별자(device-win-01·device-s3)와 경로는 실제 값으로 바꿔 넣습니다.

감시 자동화 생성#

소스 폴더를 감시하는 sync 자동화를 만듭니다. 실시간 감시는 transferType: "sync"와 transferOptions의 동기화 옵션(syncType·watchFolderType)으로 구성합니다. 경로는 장비 식별자와 인코딩된 경로를 이어 붙인 토큰(encode_path)으로 넣습니다.

def create_watch_upload(source, source_path, target, target_path,
                        action="overwrite", watch_type=1):
    body = {
        "name": "windows to s3 watch",
        "flowName": "windows to s3 watch",
        "transferType": "sync",
        "isUpcoming": False,
        "timezone": "Asia/Seoul",
        "details": [{
            "senderId": source,
            "receiverId": target,
            "sourceItem": [{
                "hash": encode_path(source, source_path),
                "filePath": str(source_path or "").replace("\\", "/"),
                "isDir": True,
            }],
            "targetPath": encode_path(target, target_path),
            "step": 1,
            "transferOptions": {
                "noSchedule": True,
                "target-action": action,
                "send-fileoption": {},
                "syncType": 1,                  # one-way sync
                "watchFolderType": watch_type,  # 1 = on create, 2 = on modify
            },
        }],
        "schedules": [{
            "type": "none", "startDateType": "now",
            "startDate": now_iso(), "timezone": "Asia/Seoul",
        }],
        "step": 1,
    }

    return api("POST", "/api/automations", body)["automationId"]


automation_id = create_watch_upload(
    "device-win-01", "C:/data/export",
    "device-s3", "my-bucket/incoming")
static String createWatchUpload(InnorixClient client, String source, String sourcePath,
        String target, String targetPath, String action, int watchType) {
    Map<String, Object> detail = Json.newObj(
            "senderId", source,
            "receiverId", target,
            "sourceItem", Json.newArr(Json.newObj(
                    "hash", InnorixClient.encodePath(source, sourcePath),
                    "filePath", sourcePath.replace("\\", "/"),
                    "isDir", true)),
            "targetPath", InnorixClient.encodePath(target, targetPath),
            "step", 1,
            "transferOptions", Json.newObj(
                    "noSchedule", true,
                    "target-action", action,
                    "send-fileoption", Json.newObj(),
                    "syncType", 1,                  // one-way sync
                    "watchFolderType", watchType)); // 1 = on create, 2 = on modify

    Map<String, Object> body = Json.newObj(
            "name", "windows to s3 watch",
            "flowName", "windows to s3 watch",
            "transferType", "sync",
            "isUpcoming", false,
            "timezone", "Asia/Seoul",
            "details", Json.newArr(detail),
            "schedules", Json.newArr(Json.newObj(
                    "type", "none", "startDateType", "now",
                    "startDate", InnorixClient.nowIso(), "timezone", "Asia/Seoul")),
            "step", 1);

    return Json.str(client.apiObj("POST", "/api/automations", body, null), "automationId");
}
async function createWatchUpload(source, sourcePath, target, targetPath,
                                 action = "overwrite", watchType = 1) {
  const body = {
    name: "windows to s3 watch",
    flowName: "windows to s3 watch",
    transferType: "sync",
    isUpcoming: false,
    timezone: "Asia/Seoul",
    details: [{
      senderId: source,
      receiverId: target,
      sourceItem: [{
        hash: encodePath(source, sourcePath),
        filePath: String(sourcePath ?? "").replace(/\\/g, "/"),
        isDir: true,
      }],
      targetPath: encodePath(target, targetPath),
      step: 1,
      transferOptions: {
        noSchedule: true,
        "target-action": action,
        "send-fileoption": {},
        syncType: 1,                 // one-way sync
        watchFolderType: watchType,  // 1 = on create, 2 = on modify
      },
    }],
    schedules: [{
      type: "none", startDateType: "now",
      startDate: nowIso(), timezone: "Asia/Seoul",
    }],
    step: 1,
  };

  return (await api("POST", "/api/automations", body)).automationId;
}

const automationId = await createWatchUpload(
  "device-win-01", "C:/data/export",
  "device-s3", "my-bucket/incoming");
static async Task<string> CreateWatchUploadAsync(InnorixClient client, string source, string sourcePath,
    string target, string targetPath, string action = "overwrite", int watchType = 1)
{
    var detail = new JsonObject
    {
        ["senderId"] = source,
        ["receiverId"] = target,
        ["sourceItem"] = new JsonArray
        {
            new JsonObject
            {
                ["hash"] = InnorixClient.EncodePath(source, sourcePath),
                ["filePath"] = sourcePath.Replace("\\", "/"),
                ["isDir"] = true,
            }
        },
        ["targetPath"] = InnorixClient.EncodePath(target, targetPath),
        ["step"] = 1,
        ["transferOptions"] = new JsonObject
        {
            ["noSchedule"] = true,
            ["target-action"] = action,
            ["send-fileoption"] = new JsonObject(),
            ["syncType"] = 1,                 // one-way sync
            ["watchFolderType"] = watchType,  // 1 = on create, 2 = on modify
        },
    };

    var body = new JsonObject
    {
        ["name"] = "windows to s3 watch",
        ["flowName"] = "windows to s3 watch",
        ["transferType"] = "sync",
        ["isUpcoming"] = false,
        ["timezone"] = "Asia/Seoul",
        ["details"] = new JsonArray { detail },
        ["schedules"] = new JsonArray
        {
            new JsonObject
            {
                ["type"] = "none", ["startDateType"] = "now",
                ["startDate"] = InnorixClient.NowIso(), ["timezone"] = "Asia/Seoul",
            }
        },
        ["step"] = 1,
    };

    return J.Str(await client.ApiObjAsync("POST", "/api/automations", body), "automationId");
}
항목 값 설명
transferType "sync" 실시간 감시 전송
transferOptions.syncType 1 Windows → S3 단방향 동기화
transferOptions.watchFolderType 1 · 2 1=파일 생성 시, 2=수정 시 트리거
transferOptions.target-action numbering · overwrite · nosend 대상 중복 처리
sourceItem[].filePath string 감시할 폴더의 평문 경로 (sync에서 필수)

주의 sync 자동화는 sourceItem[0].filePath에서 감시 경로를 읽습니다. hash(토큰)만 넣고 filePath를 빠뜨리면 감시 경로가 지정되지 않습니다.

실행 확인#

감시 자동화가 실행될 때마다 실행 이력이 쌓입니다. 회차별 상태와 monitorId를 조회합니다. 실행 이력은 최신 회차가 배열 앞에 옵니다.

runs = api("GET", f"/api/automations/{automation_id}/executions") or []

for run in runs:
    print(run["startTime"], run["status"], run["monitorId"])
List<Object> runs = Json.asArr(client.api("GET", "/api/automations/" + automationId + "/executions"));

for (Object run : runs) {
    Map<String, Object> r = Json.asObj(run);
    System.out.println(Json.str(r, "startTime") + " " + Json.intOrNull(r, "status") + " " + Json.str(r, "monitorId"));
}
const runs = (await api("GET", `/api/automations/${automationId}/executions`)) || [];

for (const run of runs) {
  console.log(run.startTime, run.status, run.monitorId);
}
JsonArray runs = J.AsArr(await client.ApiAsync("GET", 
quot;/api/automations/{automationId}/executions"
)); foreach (JsonNode run in runs) Console.WriteLine(
quot;{J.Str(run, "startTime")} {J.IntOrNull(run, "status")} {J.Str(run, "monitorId")}"
);

각 회차의 monitorId로 파일 단위 결과까지 이어집니다(전송 상태·파일 조회는 API 호출 레시피 참고).

감시 일시정지·재개·삭제#

감시를 잠시 멈추려면 일시정지하고, 다시 켜려면 재개합니다. 감시를 완전히 끝내려면 자동화를 삭제합니다. 감시 폴더나 대상 경로를 변경하려면 기존 자동화를 삭제하고 변경된 경로로 새 자동화를 생성합니다.

api("POST", f"/api/automations/{automation_id}/pause", {"pause": True})   # pause
api("POST", f"/api/automations/{automation_id}/pause", {"pause": False})  # resume
api("DELETE", f"/api/automations/{automation_id}")                        # delete automation (permanent)
client.api("POST", "/api/automations/" + automationId + "/pause", Json.newObj("pause", true));   // pause
client.api("POST", "/api/automations/" + automationId + "/pause", Json.newObj("pause", false));  // resume
client.api("DELETE", "/api/automations/" + automationId);                                        // delete automation (permanent)
await api("POST", `/api/automations/${automationId}/pause`, { pause: true });   // pause
await api("POST", `/api/automations/${automationId}/pause`, { pause: false });  // resume
await api("DELETE", `/api/automations/${automationId}`);                        // delete automation (permanent)
await client.ApiAsync("POST", 
quot;/api/automations/{automationId}/pause"
, new JsonObject { ["pause"] = true }); // pause await client.ApiAsync("POST",
quot;/api/automations/{automationId}/pause"
, new JsonObject { ["pause"] = false }); // resume await client.ApiAsync("DELETE",
quot;/api/automations/{automationId}"
); // delete automation (permanent)

구현 결과#

이 레시피를 적용하면 다음 흐름으로 Windows 폴더의 파일을 S3로 자동 업로드할 수 있습니다.

Windows 폴더에 파일 생성
   ↓
감시 자동화 실행 (sync)
   ↓
Amazon S3로 전송
   ↓
실행 이력·monitorId 확인

Windows 폴더에 생성되는 파일을 사람 개입 없이 자동으로 S3에 지속 적재할 수 있습니다.

이전Slack·Teams에서 파일 전송을 실행하고 상태 알림 받기다음Windows와 Linux 서버 사이에 파일을 직접 전송하기

이 페이지에서

  • 시작하기
  • 기본 개념
  • 업로드 흐름
  • 활용 변화
  • IT 엔지니어
  • 환경 연결
  • 감지 조건
  • 흐름 구성
  • 여러 폴더를 하나의 S3로 수집하기
  • 하나의 폴더를 여러 S3 경로로 분기하기
  • 결과 확인
  • 후속 연결
  • 장애 대응
  • 개발자
  • 감시 자동화 생성
  • 실행 확인
  • 감시 일시정지·재개·삭제
  • 구현 결과