Azure Logic Apps에 대한 표준 워크플로에서 PowerShell 스크립트 코드 추가 및 실행(미리 보기)
적용 대상: Azure Logic Apps(표준)
참고 항목
이 기능은 미리 보기로 제공되고 Microsoft Azure 미리 보기의 추가 사용 약관이 적용됩니다.
Azure Logic Apps에서 표준 워크플로와 인라인으로 사용자 지정 통합 작업을 수행하려면 워크플로 내에서 PowerShell 코드를 직접 추가하고 실행할 수 있습니다. 이 작업의 경우 PowerShell 코드 실행이라는 인라인 코드 작업을 사용합니다. 이 작업은 워크플로의 후속 작업에서 이 출력을 사용할 수 있도록 PowerShell 코드의 결과를 반환합니다.
이 기능은 다음과 같은 이점을 제공합니다.
복잡한 통합 문제를 해결할 수 있도록 워크플로 디자이너 내에서 고유한 스크립트를 작성합니다. 다른 서비스 계획은 필요하지 않습니다.
이 혜택은 워크플로 개발을 간소화하고 더 많은 서비스를 관리하는 복잡성과 비용을 줄입니다.
워크플로 내에서 개인 설정된 스크립팅 공간을 제공하는 전용 코드 파일을 생성합니다.
고급 작업 실행을 위한 강력한 기능 및 상속을 제공하는 Azure Functions PowerShell Functions와 통합합니다.
워크플로와 함께 스크립트를 배포합니다.
이 가이드에서는 워크플로에 작업을 추가하고 실행하려는 PowerShell 코드를 추가하는 방법을 보여 줍니다.
필수 조건
Azure 계정 및 구독 구독이 없는 경우 Azure 체험 계정에 등록합니다.
PowerShell 스크립트를 추가하려는 표준 논리 앱 워크플로입니다. 워크플로는 이미 트리거로 시작해야 합니다. 자세한 내용은 예제 표준 논리 앱 워크플로 만들기를 참조하세요.
시나리오에 대해 모든 트리거를 사용할 수 있지만, 예를 들어 이 가이드에서는 http 요청이 수신될 때 명명된 요청 트리거와 응답 작업을 사용합니다. 워크플로는 다른 애플리케이션 또는 워크플로가 트리거의 엔드포인트 URL에 요청을 보낼 때 실행됩니다. 샘플 스크립트는 코드 실행의 결과를 후속 작업에서 사용할 수 있는 출력으로 반환합니다.
고려 사항
Azure Portal은 스크립트를 workflow.json 파일과 동일한 폴더에 PowerShell 스크립트 파일(.ps1)로 저장하여 워크플로에 대한 JSON 정의를 저장하고 워크플로 정의와 함께 논리 앱 리소스에 파일을 배포합니다.
.ps1 파일 형식을 사용하면 "상용구"를 적게 작성하고 PowerShell 코드 작성에만 집중할 수 있습니다. 작업의 이름을 바꾸면 파일 이름도 변경되지만 그 반대의 경우도 마찬가지입니다. 파일 이름을 직접 바꾸면 이름이 바뀐 버전이 이전 버전을 덮어씁니다. 작업 이름과 파일 이름이 일치하지 않는 경우 작업은 파일을 찾을 수 없으며 빈 파일을 새로 만들려고 합니다.
스크립트는 워크플로에 로컬입니다. 다른 워크플로에서 동일한 스크립트를 사용하려면 KuduPlus에서 콘솔 스크립트 파일을 확인한 다음 스크립트를 복사하여 다른 워크플로에서 다시 사용합니다.
제한 사항
속성 | 한도 | 주의 |
---|---|---|
스크립트 실행 기간 | 10분 | 더 긴 기간이 필요한 시나리오가 있는 경우 제품 피드백 옵션을 사용하여 요구 사항에 대한 자세한 정보를 제공합니다. |
출력 크기 | 100MB | 출력 크기는 일반적으로 100MB인 작업의 출력 크기 제한에 따라 달라집니다. |
PowerShell 코드 실행 작업 추가
Azure Portal의 디자이너에서 표준 논리 앱 리소스 및 워크플로를 엽니다.
디자이너에서 다음 일반적인 단계에 따라 PowerShell 코드 실행이라는 인라인 코드 작업 작업을 워크플로에 추가합니다.
작업 정보 창이 열리면 매개 변수 탭의 코드 파일 상자에서 미리 채워진 샘플 코드를 사용자 고유의 코드로 업데이트합니다.
워크플로에서 들어오는 데이터에 액세스하려면 이 가이드의 뒷부분에 나오는 스크립트에서 Access 워크플로 트리거 및 작업 출력을 참조하세요.
스크립트의 결과 또는 다른 데이터를 워크플로에 반환하려면 워크플로에 데이터 반환을 참조 하세요.
다음 예제에서는 샘플 스크립트 코드가 있는 작업의 매개 변수 탭을 보여 줍니다.
다음 예제에서는 샘플 스크립트 코드를 보여줍니다.
# Use the following cmdlets to retrieve outputs from prior steps. # $triggerOutput = Get-TriggerOutput # $ActionOutput = Get-ActionOutput -ActionName <action-name> $customResponse = [PSCustomObject]@{ Message = "Hello world!" } # Use Write-Debug/Write-Host/Write-Output/ to log messages to Application Insights. # Write-Host/Write-Output/Write-Debug and 'return' won't return an output to the workflow. # Write-Host "Sending to Application Insight logs" # Use Push-WorkflowOutput to push outputs into subsequent actions. Push-WorkflowOutput -Output $customResponse
다음 예제에서는 사용자 지정 샘플 스크립트를 보여줍니다.
$action = Get-TriggerOutput $results = "Hello from PowerShell!" Push-WorkflowOutput -Output $results
완료되면 워크플로를 저장합니다.
워크플로를 실행한 후 사용하도록 설정된 경우 Application Insights에서 워크플로 출력을 검토할 수 있습니다. 자세한 내용은 Application Insights의 출력 보기를 참조 하세요.
스크립트에서 워크플로 트리거 및 작업 출력에 액세스
트리거 및 이전 작업의 출력 값은 여러 매개 변수가 있는 사용자 지정 개체를 사용하여 반환됩니다. 이러한 출력에 액세스하고 원하는 값을 반환하려면 Get-TriggerOutput, Get-ActionOutput 및 Push-WorkflowOutput cmdlet과 다음 표에 설명된 적절한 매개 변수를 사용합니다. 예를 들면 다음과 같습니다.
$trigger = Get-TriggerOutput
$statusCode = $trigger.status.ToString();
$action = Get-ActionOutput -ActionName Compose
$actionOutput = $action.outputs['actionOutput'].ToString();
$populatedString = "Send the $statusCode for the trigger status and $actionOutputName."
Push-WorkflowOutput -Output $populatedString
참고 항목
PowerShell에서 복합 개체 내에 JValue 형식이 있는 개체를 참조하고 해당 개체를 문자열에 추가하면 형식 예외가 발생합니다. 이 오류를 방지하려면 ToString()을 사용합니다.
트리거 및 작업 응답 출력
다음 표에서는 Get-ActionOutput 또는 Get-TriggerOutput을 호출할 때 생성되는 출력을 나열합니다. 반환 값은 다음 출력을 포함하는 PowershellWorkflowOperationResult라는 복합 개체입니다.
속성 | 형식 | Description |
---|---|---|
이름 | 문자열 | 트리거 또는 작업의 이름입니다. |
입력 | JToken | 트리거 또는 작업에 전달된 입력 값입니다. |
Outputs | JToken | 실행된 트리거 또는 작업의 출력입니다. |
StartTime | DateTime | 트리거 또는 작업의 시작 시간입니다. |
EndTime | DateTime | 트리거 또는 작업의 종료 시간입니다. |
ScheduledTime | DateTime | 트리거 또는 작업 또는 트리거를 실행하는 예약된 시간입니다. |
OriginHistoryName | 문자열 | Split-On 옵션을 사용하도록 설정된 트리거의 원본 기록 이름입니다. |
SourceHistoryName | 문자열 | 다시 제출된 트리거의 원본 기록 이름입니다. |
TrackingId | 문자열 | 작업 추적 ID입니다. |
‘코드’ | 문자열 | 결과의 상태 코드입니다. |
상태 | 문자열 | 트리거 또는 작업의 실행 상태(예: 성공 또는 실패)입니다. |
오류 | JToken | HTTP 오류 코드입니다. |
TrackedProperties | JToken | 설정한 추적된 속성입니다. |
워크플로에 출력 반환
출력을 워크플로에 반환하려면 Push-WorkflowOutput cmdlet을 사용해야 합니다.
사용자 지정 PowerShell 명령
PowerShell 코드 실행 작업에는 워크플로 및 워크플로의 다른 작업과 상호 작용하기 위한 다음 사용자 지정 PowerShell 명령(cmdlet)이 포함됩니다.
Get-TriggerOutput
워크플로 트리거에서 출력을 가져옵니다.
구문
Get-TriggerOutput
매개 변수
없음
Get-ActionOutput
워크플로의 다른 작업에서 출력을 가져오고 PowershellWorkflowOperationResult라는 개체를 반환합니다.
구문
Get-ActionOutput [ -ActionName <String> ]
매개 변수
매개 변수 | 형식 | 설명 |
---|---|---|
ActionName | 문자열 | 참조하려는 출력이 있는 워크플로의 작업 이름입니다. |
Push-WorkflowOutput
PowerShell 코드 실행 작업의 출력을 워크플로로 푸시하여 모든 개체 형식을 다시 전달할 수 있습니다. 반환 값이 null이면 cmdlet에서 null 개체 오류가 발생합니다.
참고 항목
Write-Debug, Write-Host 및 Write-Output cmdlet은 워크플로에 값을 반환하지 않습니다. 또한 return 문은 워크플로에 값을 반환하지 않습니다. 그러나 이러한 cmdlet을 사용하여 Application Insights에 표시되는 추적 메시지를 작성할 수 있습니다. 자세한 내용은 Microsoft.PowerShell.Utility를 참조하세요.
구문
Push-WorkflowOutput [-Output <Object>] [-Clobber]
매개 변수
매개 변수 | 형식 | 설명 |
---|---|---|
Output | 다양함 | 워크플로로 돌아가려는 출력입니다. 이 출력에는 모든 형식이 있을 수 있습니다. |
Clobber | 다양함 | 이전에 푸시된 출력을 재정의하는 데 사용할 수 있는 선택적 스위치 매개 변수입니다. |
PowerShell을 사용하여 관리 ID로 액세스 인증 및 권한 부여
관리 ID를 사용하면 논리 앱 리소스 및 워크플로가 코드에 자격 증명을 포함하지 않고 Microsoft Entra 인증을 지원하는 모든 Azure 서비스 및 리소스에 대한 액세스를 인증하고 권한을 부여할 수 있습니다.
PowerShell 코드 실행 작업 내에서 관리 ID를 사용하여 액세스를 인증하고 권한을 부여하여 액세스를 사용하도록 설정한 다른 Azure 리소스에서 작업을 수행할 수 있습니다. 예를 들어 가상 머신을 다시 시작하거나 다른 논리 앱 워크플로의 실행 세부 정보를 가져올 수 있습니다.
PowerShell 코드 실행 작업 내에서 관리 ID를 사용하려면 다음 단계를 수행해야 합니다.
다음 단계에 따라 논리 앱에서 관리 ID를 설정하고 대상 Azure 리소스에 대한 관리 ID 액세스 권한을 부여합니다.
대상 Azure 리소스에서 다음 고려 사항을 검토합니다.
역할 탭에서 참가자 역할은 일반적으로 충분합니다.
역할 할당 추가 페이지의 구성원 탭에서 속성에 대한 액세스 권한 할당에 대해 관리 ID를 선택해야 합니다.
구성원 선택을 선택한 후 관리 ID 선택 창에서 사용할 관리 ID를 선택합니다.
PowerShell 코드 실행 작업에서 다음 코드를 첫 번째 문으로 포함합니다.
Connect-AzAccount -Identity
이제 cmdlet 및 모듈을 사용하여 Azure 리소스로 작업할 수 있습니다.
스크립트 파일 보기
Azure Portal에서 원하는 워크플로가 있는 표준 논리 앱 리소스를 엽니다.
논리 앱 리소스 메뉴의 개발 도구에서 고급 도구를 선택합니다.
고급 도구 페이지에서 이동을 선택하여 KuduPlus 콘솔을 엽니다.
디버그 콘솔 메뉴를 열고 CMD를 선택합니다.
논리 앱의 루트 위치인 site/wwwroot로 이동합니다.
.ps1 파일이 포함된 워크플로 폴더로 이동하여 site/wwwroot/{workflow-name} 경로를 따라 이동합니다.
파일 이름 옆에 있는 편집을 선택하여 파일을 열고 봅니다.
Application Insights에서 로그 보기
Azure Portal의 논리 앱 리소스 메뉴의 설정아래에서 Application Insights를 선택한 다음 논리 앱을 선택합니다.
Application Insights 메뉴의 모니터링에서 로그를 선택합니다.
예를 들어 쿼리를 만들어 워크플로 실행에서 추적 또는 오류를 찾습니다.
union traces, errors | project TIMESTAMP, message
모듈
PowerShell 모듈은 다음과 같은 다양한 구성 요소를 포함하는 자체 포함된 재사용 가능한 단위입니다.
- Cmdlet: 특정 작업을 수행하는 개별 명령입니다.
- 공급자: 마치 드라이브인 것처럼 레지스트리 또는 파일 시스템과 같은 데이터 저장소에 대한 액세스를 허용합니다.
- 함수: 특정 작업을 수행하는 재사용 가능한 코드 블록입니다.
- 변수: 모듈 내에서 사용할 데이터를 저장합니다.
- 다른 유형의 리소스.
모듈은 PowerShell 코드를 구성하여 쉽게 배포할 수 있도록 합니다. 예를 들어 고유한 모듈을 만들어 패키지하고 관련 기능을 보다 관리 가능하고 공유할 수 있도록 할 수 있습니다. PowerShell 코드 실행 작업을 사용하면 퍼블릭 및 프라이빗 PowerShell 모듈을 모두 가져올 수 있습니다.
퍼블릭 모듈
공개적으로 사용 가능한 모듈을 찾으려면 PowerShell 갤러리를 방문하세요. 표준 논리 앱 리소스는 최대 10개의 공용 모듈을 지원할 수 있습니다. 공용 모듈을 사용하려면 다음 단계를 수행하여 이 기능을 사용하도록 설정해야 합니다.
Azure Portal의 논리 앱 리소스 메뉴에 있는 개발 도구에서 고급 도구를 선택합니다.
고급 도구 페이지에서 Go를 선택합니다.
Kudu Plus 도구 모음의 디버그 콘솔 메뉴에서 CMD를 선택합니다.
디렉터리 구조 또는 명령줄을 사용하여 C:\home\site\wwwroot에서 논리 앱의 루트 수준으로 이동합니다.
워크플로의 host.json 파일을 열고 관리되는 종속성 속성을 true로 설정합니다. 이 속성은 이미 기본적으로 설정되어 있습니다.
"managedDependency": { "enabled": true }
requirements.psd1이라는 파일을 엽니다. 다음과 같은 구문을 사용하여 원하는 모듈의 이름과 버전을 포함합니다. MajorNumber.* 또는 정확한 모듈 버전(예:
@{ Az = '1.*' SqlServer = '21.1.18147' }
공용 모듈에 대한 고려 사항
종속성 관리를 사용하는 경우 다음 고려 사항이 적용됩니다.
모듈을 다운로드하려면 공용 모듈에서 PowerShell 갤러리 액세스해야 합니다.
관리되는 종속성은 현재 라이선스를 대화형으로 수락하거나 Install-Module을 실행할 때 -AcceptLicense 옵션을 제공하여 라이선스를 수락해야 하는 모듈을 지원하지 않습니다.
프라이빗 모듈
사용자 고유의 프라이빗 PowerShell 모듈을 생성할 수 있습니다. 첫 번째 PowerShell 모듈을 만들려면 PowerShell 스크립트 모듈 작성을 참조 하세요.
Azure Portal의 논리 앱 리소스 메뉴에 있는 개발 도구에서 고급 도구를 선택합니다.
고급 도구 페이지에서 Go를 선택합니다.
Kudu Plus 도구 모음의 디버그 콘솔 메뉴에서 CMD를 선택합니다.
디렉터리 구조 또는 명령줄을 사용하여 C:\home\site\wwwroot에서 논리 앱의 루트 수준으로 이동합니다.
Modules라는 폴더를 만듭니다.
Modules 폴더에서 프라이빗 모듈과 이름이 같은 하위 폴더를 만듭니다.
프라이빗 모듈 폴더에서 psm1 파일 이름 확장명을 가진 프라이빗 PowerShell 모듈 파일을 추가합니다. psd1 파일 이름 확장명을 가진 선택적 PowerShell 매니페스트 파일을 포함할 수도 있습니다.
완료되면 전체 논리 앱 파일 구조가 다음 예제와 유사하게 표시됩니다.
MyLogicApp
-- execute_powershell_script.ps1
-- mytestworkflow.json
Modules
-- MyPrivateModule
--- MyPrivateModule.psd1
--- MyPrivateModule.psm1
-- MyPrivateModule2
--- MyPrivateModule2.psd1
--- MyPrivateModule2.psm1
requirements.psd1
host.json
컴파일 오류
이 릴리스에서 웹 기반 편집기는 제한된 IntelliSense 지원을 포함하고 있으며, 아직 개선되고 있습니다. 워크플로를 저장할 때 컴파일 오류가 검색되고 Azure Logic Apps 런타임이 스크립트를 컴파일합니다. 이러한 오류는 Application Insights를 통해 논리 앱의 오류 로그에 표시됩니다.
런타임 오류
워크플로 작업은 출력을 반환하지 않습니다.
Push-WorkflowOutput cmdlet을 사용해야 합니다.
PowerShell 코드 실행 작업이 실패합니다. "'{some-text}'라는 용어가 인식되지 않습니다..."
requirements.psd1 파일에서 공용 모듈을 잘못 참조하거나 프라이빗 모듈이 C:\home\site\wwwroot\Modules{module-name}경로에 없는 경우 다음 오류가 발생합니다.
'{some-text}'라는 용어는 cmdlet, 함수, 스크립트 파일 또는 실행 프로그램 이름으로 인식되지 않습니다. 이름의 철자를 확인하거나 경로가 포함되어 있는지 확인하고 경로가 올바른지 확인하고 다시 시도하십시오.
참고 항목
기본적으로 Az* 모듈은 requirements.psd1 파일에 표시되지만 파일을 만들 때 주석 처리됩니다. 모듈에서 cmdlet을 참조하는 경우 모듈의 주석 처리를 제거해야 합니다.
PowerShell 코드 실행 작업이 실패합니다. "인수를 'Output' 매개 변수에 바인딩할 수 없습니다. null이므로."
이 오류는 워크플로에 null 개체를 푸시하려고 할 때 발생합니다. Push-WorkflowOutput을 사용하여 보내는 개체가 null이 아닌지 확인합니다.