webapp 소스 가져오기, sync 다양한 방법

 

Deployment - Deployment Center 메뉴

 

 

FTP  파일질라 열어서 사용 

보안을 위해서. APP 암호 사용하면  

 

 

 

웹앱 사이트 신규 생성 후 (clean한 상태에서) 

VS에서 생성한 사이트를 통째로 FTP 업로드

-> 오류 발생함.

 아래와 같이 Azure Log stream 에서 확인한 결과 500 서버에러 확인됨. 

 

 

 

 

오류나는 파일을 모두 삭제하려면 

애저 포털에서 파일 삭제하는   

Development Tolls - App Service Editor(Preview)에서 삭제하면됨 

 

 

 

 

 

위에서 FTP업로드 시 오류났던 사이트를 

Azure 웹앱 프로필 가져오기 해서, VS에서 프로젝트 게시 하면  

연결이 만들어지고, 오류도 없음.  

 

 상태에서 새롭게 같은 프레임워크로 만든 웹사이트를  

FTP 업로드 하면 결과는? 

-> 서버오류 없이 잘열림. 

 

 

 

Deployment Center - Onedrive 이용하여 동기화 방법 

 개인원드라이브에 폴더가 만들어지기까지 시간이 소요됨 10분이상 

최초  원드라이브 파일 -  - Azure Web Apps 밑에 azure웹사이트 폴더가 생성됨  (10분 이상 소요)

(최초 생성  비어있음) 

 

수동으로 업로드 아래와 같이  

 

소스폴더(원드라이브, 드롭박스 등등) 파일을 업로드 한뒤  

 

아래 메뉴에서 "Sync" 버튼을 눌러줘야됨. 

  • 동일한 파일명의 파일이 있다면 overwrite  

  • 새로운 파일들은 업로드 . 

  • 같은 닷넷 웹사이트(같은 빌드) 경우 전체를 올려도 오류 없이 잘열리는  확인 

 

Sync 누르면 아래와 같이 로그 조회됨. 

 

다른 수단으로 올리고 싶다면, 연결을 끊고(Disconnect) 다른 수단으로 연결하면 됨




'기술(Azure 만...) > [MS]Azure PaaS' 카테고리의 다른 글

linux 웹앱---Azure storage 매핑  (0) 2019.11.02
웹앱 스케일링  (0) 2019.09.02
Azure SQL databse , 스케일링  (0) 2019.05.15
WebJob 일반 and Azure Function일부  (0) 2019.05.07
CosmosDB 실습  (0) 2019.03.29

DTU 

DTU 컴퓨팅/스토리지/IO  하나로 묶은 단위 기본, 표준, 프리미엄 3계층 단순한 리소스옵션에 적합 

vCore 

HW세대와 HW특성까지 고려해야 된다면 코어수, 메모리, 스토리지크기 세부 선택이 필요시 범용, 중요비즈니스 2계층 

Elastic pool 

eDTU 사용 

사용량이 급증하는 여러 개의 데이터베이스를 실행중인 경우 적합 평균사용률은 낮지만 갑자기 급증하는 서비스  풀에 충분한 리소스를 할당해놓고, 급증 서비스에 대응 가능 

 

그럼, DTU, vCore 플랜은 

급증  장애가 생길  있음, 그때 그때 사람이 대응해야 되는 거네…. 

Auto scale 개념이 없는거네 

 

 

, DTU 3가지 요소(컴퓨팅, 스토리지 , IO) 시리얼하게 매핑되어 증가됨 

세부적으로 선택하기는 어려움 

 

vCore 방식은 컴퓨팅만 높게 필요하거나,  메모리만 높게 필요하거나,  스토리지 크기만 많이 필요하거나  각각 취사선택이 가능한 모델 

 

 

 

DTU 기반 가격 책정 모델 

vCore 기반 가격 책정 모델 

 

 

 

 

 

DTU, vCore 플랜에는 편법 AutoScale 적용 가능 아래 방법으로

 

출처: <https://blobeater.blog/2018/10/11/auto-scaling-azure-sql-db/ 

 

Auto-Scaling Azure SQL DB

When I was presenting my Azure SQL Database session at DataRelay (used to be SQLRelay) I was asked (over coffee) about auto scaling capabilities. Quite simply there is nothing out of the box to ach…

blobeater.blog

 

 

Azure Logic Apps을 통한 오토스케일링

재발을 트리거 포인트로 설정하면이 워크 플로우를 시작하는 4 주마다 금요일 오후 11시 30 분 아래에 표시됩니다. (이것은 단지 예일 뿐이다) 

기본 워크 플로는 아래와 같습니다. 

트리거 포인트 (첫 번째 단계)가 전달되면 데이터베이스를 S0에서 S3으로 확장하는 코드 한 줄인 첫 번째 저장 프로 시저를 실행합니다. 

1 

2 

 

CREATE PROCEDURE dbo.ScaleUp 

AS 

ALTER DATABASE [FastDB] MODIFY (SERVICE_OBJECTIVE = 'S3'); 

약 30 초 후에 아래 코드를 사용하여 성능 수준을 확인합니다. S3로 이동합니다. 

1 

2 

 

--checking details 

SELECT Edition = DATABASEPROPERTYEX('FastDB', 'Edition'), 

       ServiceObjective = DATABASEPROPERTYEX('FastDB', 'ServiceObjective') 

 

나는 x 시간 동안이 성능 단계를 원한다. 그래서 x를 지연으로 정의한다. 필자의 예제에서 나는 단지 2 분을했지만 시간이 걸릴 수있다. 

그런 다음 지연이 만료되면 로직 애플리케이션은 현재 비용을 절감하고 상위 레벨에 대한 필요성을 없애기 위해 내 스케일 다운 요청을 발행합니다. 

FYI - 축소 코드 : 

 

CREATE PROCEDURE dbo.ScaleDown 

AS 

ALTER DATABASE [FastDB] MODIFY (SERVICE_OBJECTIVE = 'S0'); 

 

--checking details 

SELECT Edition = DATABASEPROPERTYEX('FastDB', 'Edition'), 

       ServiceObjective = DATABASEPROPERTYEX('FastDB', 'ServiceObjective') 

 

 

 

 

 

 




'기술(Azure 만...) > [MS]Azure PaaS' 카테고리의 다른 글

웹앱 스케일링  (0) 2019.09.02
webapp 소스 가져오기, sync 다양한 방법  (0) 2019.08.13
WebJob 일반 and Azure Function일부  (0) 2019.05.07
CosmosDB 실습  (0) 2019.03.29
PaaS WebApp Application Insights  (0) 2019.03.29

배치작업 WebJob 

Ex) 일일 재고수준 파악  외부 서비스에 보고 

 

Azure function 말고, 웹작업으로 하고 싶은 경우 

그리고 기존 웹서비스에는 영향없이 백그라운드로 돌리고 싶은 경우 

Ex) 고해상도이미지들 -> 썸네일 추출 

특정 DB 프로시져 호출하는 job 가능 

 

모두 지원 

Windows 배치 파일 

PowerShell 스크립트 

Bash 셸 스크립트 

 

업로드 가능 

 

Visual Studio를 사용하여 웹 작업을 컴파일된 콘솔 애플리케이션으로도 가능 

파이썬, node.js 기반 

 

 

크게  종류 

  1. 연속 

  2. 트리거  

Auzre Function Webjob 차이점 

거의 같으나, 

Fuction 

WebJob 

기존 웹소스와 별개로 관리 

기존 웹소스와 하나의 패키지로 관리가능 

 

JobHost 개체의 동작에 대해 더 정교하게 제어할 수 있다 

 

 

VS에서 실습 

콘솔애플리케이션을 만들어, webjob템플릿 사용가능, 기존 웹앱 솔루션에 추가 

각 프로그램, config 설명

 Program.cs 

애플리케이션의 진입점인 Main() Main에서 JobHost개체를 시작하고 구성 

JobHost는 웹 작업이 배포된 후 Azure와 통신하는 개체  

new HostBuilder() 

Functions.cs 

 작업이 실행하는 실제 작업 내용 코딩 

 

settings.json 

cron식으로 일정 기록 

{ "schedule": "0 0 12 * * ?" } 

 

App.config 

DB연결, Azure Storage정보  연결문자열 기록 

 

functions.json 

 

바인딩을 사용하려면 사용 

Direction in / out  

 

 

CRON  

설명 

0 0 12 * * ? 

매일  12시에 실행 

0 15 10 * * ? 

매일 오전 10 15분에 실행 

0 15 10 ? * MON-FRI 

매주 평일 오전 10 15분에 실행 

0 15 10 ? * 6L 

매월 마지막  금요일 10 15분에 실행 

 

APP템플릿 통해서 만들면, 아래와 같은 네임스페이스가 그냥 들어오겠지? 

  • Microsoft.Azure.WebJobs 

  • Microsoft.Azure.WebJobs.Extensions 

 프로그램에서 활용하려면 위와 같은 네임스페이스 추가 

 

예시) 

Azure Storage SDK를 사용하여 설정된 간격으로 스토리지 계정에 큐 메시지를 만듭니다.  

스토리지 계정에서 로그 확인 가능 

단순하게, 특정 메시지(시간기록) Azure Queue 기록 

 

var queue = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["StorageAccount"].ConnectionString) 

    .CreateCloudQueueClient() 

    .GetQueueReference("stockchecks"); 

 

queue.CreateIfNotExists(); 

 

while (true) 

{ 

    var timestamp = DateTimeOffset.UtcNow.ToString("s"); 

 

    var message = new CloudQueueMessage($"Stock check at {timestamp} completed"); 

    queue.AddMessage(message); 

 

    Thread.Sleep(TimeSpan.FromSeconds(30)); 

} 

 

 

Main함수에 아래와 같이 사용 

(기존 무한루프 형식 안써도 ) 

static void Main(string[] args) 

{ 

    var builder = new HostBuilder(); 

    builder.ConfigureWebJobs(b => 

            { 

                b.AddAzureStorageCoreServices(); 

            }); 

    var host = builder.Build(); 

    using (host) 

    { 

        host.Run(); 

    } 

} 

 

 

<바인딩> 

아래   각종 트리거를 바인딩하는 형태 예시 

 트리거 발동  비즈니스 로직 수행하도록 개발 

바인딩을 사용하려면 웹 프로젝트에 functions.json 기록 Direction in/out  있음  

Azure 큐에 메시지가 들어올때 

public static void ProcessQueueMessage([QueueTrigger("queue")] string message, ILogger logger) 

{ 

    logger.LogInformation(message); 

} 

Azure Storage 신규 blob파일이 추가될때 

[FunctionName("BlobTriggerCSharp")] 

public static void Run([BlobTrigger("watchescontainer/{name}")] Stream watchInstructions, string name, ILogger log) 

{ 

    log.LogInformation($"A new blob was added.\n Name:{name} \n Size: {watchInstructions.Length}"); 

} 

 

Azure CosmosDB 신규 데이터가 들어올  특정 database, 컬력션명 지정 

[FunctionName("CosmosTrigger")] 

public static void Run([CosmosDBTrigger( 

    databaseName: "ToDoItems", 

    collectionName: "Items", 

    ConnectionStringSetting = "CosmosDBConnection", 

    LeaseCollectionName = "leases", 

    CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> documents, 

    TraceWriter log) 

{ 

    if (documents != null && documents.Count > 0) 

    { 

        log.Info($"Documents modified: {documents.Count}"); 

        log.Info($"First document Id: {documents[0].Id}"); 

    } 

} 

 

 

추가 예시 

기존 ProcessQueueMessage 메서드를 아래와 같이 바꿔서 사용가능 

 

public static void ConfirmStockCheck([QueueTrigger("stockchecks")] string message, [Blob("confirmations/{id}")] out string output) 

{ 

    var timestamp = message.Split()[3]; 

    output = $"{timestamp} stock check successfully processed"; 

} 

 

stockchecks 큐의 메시지를 처리하고 해당 메시지를 사용하여 confirmations 컨테이너에 BLOB을 만듭니다. 웹 작업 SDK는 stockchecks 큐의 모든 메시지에 대해 이 함수를 한 번 호출하며, message 매개 변수는 메시지 내용을 포함합니다. output의 값은 confirmations 컨테이너의 새 BLOB에 자동으로 기록됩니다. 새 BLOB의 이름은 함수를 트리거한 큐에서 수신된 메시지의 메시지 ID입니다. 

 

 




'기술(Azure 만...) > [MS]Azure PaaS' 카테고리의 다른 글

웹앱 스케일링  (0) 2019.09.02
webapp 소스 가져오기, sync 다양한 방법  (0) 2019.08.13
Azure SQL databse , 스케일링  (0) 2019.05.15
CosmosDB 실습  (0) 2019.03.29
PaaS WebApp Application Insights  (0) 2019.03.29

다음게시글

탐색기를 통한 데이터핸들링 및 Select 구문까지는 확인

다음에 개발소스를 찾아볼것, 실제 구현이 어떤 형태인지

 

 

 

 

 

Azure Cosmos DB의 전자상거래 데이터베이스에 재고 목록 데이터를 추가 

 

SQL 쿼리와 동일한 익숙한 SQL 쿼리를 사용하여 쿼리를 실행하고, 저장된 프로시저와 UDF(사용자 정의 함수)를 사용 

 

데이터탐색기 사용해보자 

 

CLI 실습 

주의사항 

정확한 구독선택 정확한 RG선택 

구독 조회 

az account list --output table 

 

구독선택 

az account set --subscription "<subscription name>" 

 

리소스그룹 조회 

az group list --out table 

 

필요시 리소스그룹 생성, 위치설정 

az group create --name <name> --location <location> 

 

변수에  설정 계속 쓰게 

 

 

Cosmosdb 생성 (몇분 걸림) 

az cosmosdb create --name $NAME --kind GlobalDocumentDB --resource-group $RESOURCE_GROUP 

 

Product 데이터베이스 생성 

az cosmosdb database create --name $NAME --db-name $DB_NAME --resource-group $RESOURCE_GROUP 

 

Clothing 컬렉션 생성(테이블 느낌) 

az cosmosdb collection create --collection-name "Clothing" --partition-key-path "/productId" --throughput 1000 --name $NAME --db-name $DB_NAME --resource-group $RESOURCE_GROUP 

 

 

아래는 캡쳐 

 

 

 

 

 

 

 

 

 

이제 포털에서 데이터탐색기를 이용하자 Web based 

 

 

새문서 만들기 "" 개념 

 

 

{ 

   "id": "1", 

   "productId": "33218896", 

   "category": "Women's Clothing", 

   "manufacturer": "Contoso Sport", 

   "description": "Quick dry crew neck t-shirt", 

   "price": "14.99", 

   "shipping": { 

       "weight": 1, 

       "dimensions": { 

       "width": 6, 

       "height": 8, 

       "depth": 1 

      } 

   } 

} 

 이렇게 새문서 2 입력 

 2 입력 

 

{ 

   "id": "2", 

   "productId": "33218897", 

   "category": "Women's Outerwear", 

   "manufacturer": "Contoso", 

   "description": "Black wool pea-coat", 

   "price": "49.99", 

   "shipping": { 

       "weight": 2, 

       "dimensions": { 

       "width": 8, 

       "height": 11, 

       "depth": 3 

      } 

   } 

} 

 

문서 2 확인됨 

 

 

New 쿼리 선택해서 아래와 같이 쿼리도 가능 

 

 

그런데 

Select 할때 from Product  from Clothing  결과가 같음 

 

SELECT * FROM Products p WHERE p.id ="1" 

 

 

컬렉션 1  만들어보자 

az cosmosdb collection create --collection-name "Clothing222" --partition-key-path "/productId" --throughput 1000 --name $NAME --db-name $DB_NAME --resource-group $RESOURCE_GROUP 

 

 

온라인 소매 애플리케이션에서 사용자가 주문을   쿠폰 코드, 크레딧, 배당금  하나 또는  가지를 모두 동시에 사용하려는 경우 사용자 계정에 해당 옵션을 쿼리하고, 사용자가 해당 옵션을 사용했음을 나타내는 업데이트를 사용자 계정에 적용하고, 주문 총액을 업데이트한  주문을 처리해야 합니다. 

이러한 모든 작업이 단일 트랜잭션 내에서 동시에 수행되어야 합니다. 사용자가 주문 취소를 선택하는 경우에는 변경 내용을 롤백하여 계정 정보를 수정하지 않아야 합니다. 그래야 사용자가 쿠폰 코드, 크레딧, 배당금을 다음 구매 시에 사용할  있습니다. 

Azure Cosmos DB에서 이러한 트랜잭션을 수행할 때는 저장 프로시저  UDF(사용자 정의 함수) 사용합니다. 

 

출처: <https://docs.microsoft.com/ko-kr/learn/modules/access-data-with-cosmos-db-and-sql-api/6-javascript-programming 

 

 

쿼리 종류 

 

SELECT 

    p.id, 

    p.manufacturer, 

    p.description 

FROM Products p 

WHERE p.id ="1" 

SELECT * 

FROM Products.shipping 

 

SELECT p.description 

FROM Products p 

WHERE p.id = "1" 

SELECT p.price, p.description, p.productId 

FROM Products p 

ORDER BY p.price ASC 

SELECT p.productId 

FROM Products p 

JOIN p.shipping 

 

 

 




Application Insights 고객이 불평하기 전까지는 웹사이트의 품질(속도 ) 대해서 인지하지 못한다. 

  • Application Insights 런타임계측 활성화 

  • 원격분석 시각화 기능 사용 

  • 특정 메트릭으로 차트만들기 

 

 

 

웹어플리케이션 성능/동작 모니터링 도구 

각종 지점에서 위의 그림과 같이 이벤트/메트릭 데이터를 캡쳐해준다 

비즈니스도메인 이벤트, 사용자 활동 

메트릭(. 큐의 길이 ) 

 

 

Application Insights에 데이터를 보내도록 앱을 구성하는 데 사용할 수 있는 두 가지 방법 

  1. 런타임계측 (윈도우 IIS 지원?) 웹앱만들  구성해주면  

  2. 웹앱의 코드에 서버 쪽 SDK를 추가(VS에서 nuget 이용) 

 

  • 라이브 메트릭 스트림: 거의 실시간으로 변화하는 성능 값을 표시하는 차트입니다. 

  • 메트릭 탐색기: 시간이 지남에 따라 메트릭이 어떻게 달라졌는지를 보여줍니다. 

  • 경고메시지는 대상 메트릭이 지정된 임계값을 초과하면 자동으로  관리자에게 전송됩니다. 팀이 중요한 문제를 인식하도록 하기 위해 경고를 사용할  있습니다. 

  • 프로파일러: 단일  페이지와 같은 요청 세트가 전달된 방법을 보여줍니다. 예를 들어, 이러한 프로필을 사용하여 어떤 페이지 요소가 느리게 로드되는지 확인할  있습니다. 

  • 애플리케이션 : 애플리케이션의 구성 요소와 해당 구성 요소가 서로 연결되는 방법을 표시합니다.  구성 요소에 표시된 데이터를 사용하여 성능 병목 현상  실패 핫스폿을 진단할  있습니다. 

  • 사용 분석:  사용자에 대한 정보입니다. 예를 들어, 사용자 보존에 대한 정보뿐만 아니라 고유한 사용자  세션 수를   있습니다. 

 

 

기존 웹앱 만들면 기본적인 오류빈도와 요청비율등은 개요 페이지 에서 보여준다 

 

Failed Request 

Server Response Time 

Server Request 

Availability 

 

 

위의 구성도에서와 같이 각종 메트릭은  

애저포털, PowerBI, VS 등에서   있다. 

 

포털- 인사이트 - 메트릭 메뉴에서 확인 가능 

 

 

 

애플리케이션 대시보드를 누르면 포털 대시보드에 표시됨. 아래 

 

 

 

 




'기술(Azure 만...) > [MS]Azure PaaS' 카테고리의 다른 글

웹앱 스케일링  (0) 2019.09.02
webapp 소스 가져오기, sync 다양한 방법  (0) 2019.08.13
Azure SQL databse , 스케일링  (0) 2019.05.15
WebJob 일반 and Azure Function일부  (0) 2019.05.07
CosmosDB 실습  (0) 2019.03.29

+ Recent posts