리전 = 한 지역내 다수의 데이터센터 개념
 
 
 
LRS

Local Redundant Storage
로컬 중복 저장소

하나의 데이터센터 3군데 랙에 복제 배치
렉의 장애 극복 가능(렉 단위 문제에도 극복)
ZRS

영역 중복 저장소
Zone Redundant Storage
ZRS Classic (2021 )
ZRS Preview(아직 모든 리전 X)
하나의 리전이나(다수의 데이터센터)

3개의 데이터센터에 복제 배치
데이터센터 장애 극복 가능( 데이터센터 단위 문제에도 극복
GRS
Geo-Redundant Storage
지역 중복 저장소

리전 장애 극복 가능
리전은 쌍으로 존재함(한국 중부-남부)
리전 단위 문제도 극복가능함
RA-GRS
Read Access GRS

지역(리전+리전) 단위 장애 극복가능함.
한국에 문제 있어도 극복가능함.
 
노드 = 렉인가봄.
99.9   9가 아홉개 , 열개, 열한개
C5B5BE03-372D-49BA-BBDF-0D8FA0FEE103.png
 
 
LRS / GRS / RA-GRS 계정을 ZRS 계정으로 전환   없으며  반대의 경우도 마찬가지입니다. ZRS Classic 계정을 사용할 수있는 지역의 ZRS Preview 계정으로 업그레이드   있습니다.
 
 
 
가용영역 개념
·         지원하는 리전이 따로 있음.
·         미국 중부
·         미국 동부
·         미국 동부 2
·         프랑스 중부
·         북유럽
·         동남아시아
·         서유럽
·         서 미국 2
 
 
 
·         지원하는 서비스도 따로 있음.
그 중에 바로바로 영역중복저장소가 있음.
 
한국 지원 안하네;;;;;;;
 
 
Microsoft OneNote 2016에서 작성




Azure Container Instance  ACI

·         컨테이너 실행
·         컨테이너 종료 시 수행되는 동작 제어
·         컨테이너 시작 시 환경변수 이용 컨테이너 구성 (--environment-variables)
·         컨테이너 시작 시 보안 환경변수 이용 (--secure-environment-variables)
·         컨테이너 종료 시 데이터볼륨 연결 데이터보존
 
애플리케이션, 작업 자동화
격리된 컨테이너 시나리오 가능
 
·         빠른시작
·         초당 청구
·         하이퍼바이저 수준 격리 보안 / 애플리케이션의 완전 격리
·         사용자 지정 크기 가능
·         영구 스토리지 (컨테이너에도 Auzre 파일 공유 가능)
·         리눅스, 윈도우
 
오케스트레이션 필요한 시나리오의 경우 AKS 이용
 
 

예제

웹앱을 호스트하는 컨테이너 배포
 
DNS이름을 이용하여, 인터넷에 노출도 가능
-demo-$RANDOM 
onestxQAzure 
onestxQAzure
 
 
az container create \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name mycontainer \
  --image microsoft/aci-helloworld \
  --ports 80 \
  --dns-name-label $DNS_NAME_LABEL \
  --location eastus
 
az container show \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name mycontainer \
  --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
  --out table
 
onestx@Azure.-$ az container show fi 
--resource-grouo 4-aBddf757BOla 
--name mycontainer fi 
--auery " {FQDN: ioAddress. fadn, Prov isi on ngState: Orov isi on ngState}' 
--out table 
aci -demo-1 44gl eastus. azurecontai ner io 
onestx@Azure 
ProvisioningState 
Succeeded
 
웹사이트 확인
Azure Container Instances 
Bookmarks • 
Azure?' EDI 
x Welcome to Azure Container Ir x 
aci-demo -14491 .eastus.azurecontainer.io 
TDG_SPS C} C} 
3LUEDIC 
Microsoft Learn 
Welcome to Azure Container Instances!
 
다시 시작 정책
설명
Always
컨테이너 그룹의 컨테이너가 항상 다시 시작됩니다. 이 정책은 웹 서버와 같은 장기 실행 작업에 적합합니다. 컨테이너를 만들 때 다시 시작 정책이 지정되지 않은 경우 적용되는 기본 설정입니다.
Never
컨테이너 그룹의 컨테이너가 절대로 다시 시작되지 않습니다. 컨테이너가 한 번만 실행됩니다.
OnFailure
컨테이너 그룹의 컨테이너가 컨테이너에서 실행된 프로세스가 실패할 때만(0이 아닌 종료 코드로 종료될 때) 다시 시작됩니다. 컨테이너가 한 번 이상 실행됩니다. 이 정책은 단기 작업을 실행하는 컨테이너에 적합합니다.
 
 
추가 예시
az container create \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name mycontainer-restart-demo \
  --image microsoft/aci-wordcount:latest \
  --restart-policy OnFailure \
  --location eastus
 
microsoft/aci-wordcount:latest 템플릿
셰익스피어의 Hamlet 텍스트를 분석하고, 가장 많이 쓰이는 10개의 단어를 표준 출력에 쓰고 종료하는 Python 스크립트임.
 
작업이라서, 아래 코드로, 종료여부를 확인해야됨. 결과 출력은 로그로됨
az container show \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name mycontainer-restart-demo \
  --query containers[0].instanceView.currentState.state
onestx@Azure 
az container show 
--resource-grouo 4-aBddf757BOla 
--name mycontainer-restart-demo fi 
--auery containers[D] instanceV i ew currentState. state 
'Terminated"
 
로그확인
onestx@Azure 
az container logs fi 
--resource-grouo 4-aBddf757BOla 
--name mycontainer-restart-demo 
ggcl) , 
'of' 
'to' 
544) , 
agg) , 
HAMLET
 
 
추가예제 : 환경변수 이용
 Azure Cosmos DB 인스턴스를 만들고 환경 변수를 사용하여 연결 정보를 Azure Container Instance에 전달해보자
 
COSMOS_DB_ENDPOINT, COSMOS_DB_MASTERKEY 환경변수
 
코스모스DB만들기  az comosdb create 명령
COSMOS_DB_ENDPOINT=$(az cosmosdb create \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name $COSMOS_DB_NAME \
  --query documentEndpoint \
  --output tsv)
 
키 가져오기
COSMOS_DB_MASTERKEY=$(az cosmosdb list-keys \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name $COSMOS_DB_NAME \
  --query primaryMasterKey \
  --output tsv)
 
이렇게 값 확인가능
onestx@Azure 
bash: vRSmVWGoWJW3hNfcaGkLgI cvcoawseS5xnOFecj 
command not found 
onestx@Azure
 
위에 값을 가져온 환경변수 이용하여 컨테이너 create
--environmenet-variables 이용
 
az container create \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name aci-demo \
  --image microsoft/azure-vote-front:cosmosdb \
  --ip-address Public \
  --location eastus \
  --environment-variables \
    COSMOS_DB_ENDPOINT=$COSMOS_DB_ENDPOINT \
    COSMOS_DB_MASTERKEY=$COSMOS_DB_MASTERKEY
 
 
컨테이너 속성 쿼리방법
az container show \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name aci-demo \
  --query ipAddress.ip \
  --output tsv
onestx@Azure.-$ az container show fi 
--resource-grouo 4-aBddf757BOla 
--name aci -demo fi 
--auery ioAddress. io fi 
--outout tsv 
243
 
 
기존 환경변수 보는 방법
az container show \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name aci-demo \
  --query containers[0].environmentVariables
아래와 같이 다 조회됨.
onestxQAzure.-$ az container show 
--resource-grouo 4-aBddf757BDla 
--name aci -demo 
--auery containers[D] envi ronmentVar i abl es 
'name' 
secureVaI ue" 
"httos: //aci -cosmos-db-1 1 30.documents.azure.com 443/ " 
'name' 
secureVaI ue" 
onestxQAzure
 
해당 값을 가리고 싶으면
--secure-environment-variables
이용하면 됨.
az container create \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name aci-demo-secure \
  --image microsoft/azure-vote-front:cosmosdb \
  --ip-address Public \
  --location eastus \
  --secure-environment-variables \
    COSMOS_DB_ENDPOINT=$COSMOS_DB_ENDPOINT \
    COSMOS_DB_MASTERKEY=$COSMOS_DB_MASTERKEY
 
 
기본적으로 ACI 는 상태비저장임.
컨테이너 중지 시 모든 값 소실
외부저장소 볼륨 탑재해야됨
 
파일공유만들기
STORAGE_ACCOUNT_NAME=mystorageaccount$RANDOM
az storage account create \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name $STORAGE_ACCOUNT_NAME \
  --sku Standard_LRS \
  --location eastus
 
 
변수에 만든 파일공유 연결문자열 저장하기
Export 라는 걸 쓰네, 위에서 코스모스DB이름 가져올때는 안썼는데.. 길어서 그런가
 
export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name $STORAGE_ACCOUNT_NAME \
  --output tsv)
 
ON_STRI 
onestx@Azure 
bash: Defaul tEndoointsProtocoI tos; EndoointSuff x=core. windows. net ; AccountName=mystor 
t 3D 1 04 ; t PXnQO dPWCmZt eul V xW6dl T BEHD6SN4_Ir j I CQUyO 
command not found 
onestx@Azure
 
export 부분은 곧 실행하게 될 다른 CLI 명령에 이 변수가 액세스할 수 있게 해줍니다.
 
az storage share create --name aci-share-demo
 
 
STORAGE_KEY=$(az storage account keys list \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --account-name $STORAGE_ACCOUNT_NAME \
  --query "[0].value" \
  --output tsv)
 
 
값 확인 시 echo 붙여도 되고 안붙여도 확인가능
$STORAGE_KEY 
onestx@Azure 
bash: T CQUyOZrebBW2dl 
command not found 
echo $STORAGE_KEY 
onestx@Azure 
cbLza PXnQO dPWCmZt eul V xW6dl T BEHD6SN4_Ir j I CQUyOZr ebBW2dl j 
onestx@Azure
 
 
 
컨테이너 생성 시 영구볼륨 같이 탑재
az container create \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name aci-demo-files \
  --image microsoft/aci-hellofiles \
  --location eastus \
  --ports 80 \
  --ip-address Public \
  --azure-file-volume-account-name $STORAGE_ACCOUNT_NAME \
  --azure-file-volume-account-key $STORAGE_KEY \
  --azure-file-volume-share-name aci-share-demo \
  --azure-file-volume-mount-path /aci/logs/
 
az container show \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name aci-demo-files \
  --query ipAddress.ip \
  --output tsv
 
파일공유 스토리지에 저장된 파일보기
az storage file list -s aci-share-demo -o table
 
onestx@Azure.-$ az 
Name 
1 551 txt 
onestx@Azure 
storage 
Content 
file list 
Length 
-s aci -share-demo -o table 
T yoe 
Last Modi fied
az storage file download -s aci-share-demo -p 1551654589974.txt
 
다운로드완료
onestx@Azure.-$ az 
share-demo - 
Fini shed[ 
'content 
'met adata" 
storage 
file 
download - 
s aci- 
1551 txt 
'name 
" " 1 551 txt 
'orooert es' 
'contentLength" 
"bytes 0-6/7" , 
'content Range' 
content Sett ings' 
cacheCont row 
'contentDi soosition' 
'contentEncoding" 
content Language' 
i cat ion/octet -st ream' 
'contentTyoe" 
copy' 
'complet ionTime" 
lid" 
'or ogress' 
source' 
'status" 
statusDescr iot on 
lastModi fi ed" 
" CIO" 
'serverEncryoted"
 
 
열어보기 Shell에서 바로
시스템 생성 대체 텍스트:
onestx@Azure =$ cat 15뒤듬545巳四741 txt 
11111110nestx@Azure
 
이런식으로, 데이터 영구보존 가능함.
 
 

컨테이너 로그확인

 
az container logs \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name mycontainer
 
아래와 같이 긴 로그 확인 가능
onestx@Azure.-$ az container logs fi 
--resource-grouo 4-aBddf757BOla 
--name mycontainer 
Checking for script in /aoo/orestart . sh 
Running script /aoo/orestart . sh 
Running inside /aoo/orestart .sh, you could add migrat ions to this fi le, 
/usr/bin/env bash 
# Let the DB start 
# Run migrat ions 
alembic upgrade head 
/usr/l ib/oython2. 7/dist-oackages/suoervisor/oot ions. 2gB: UserWarning: Supervisord is 
running as root and it is searching for its configurat ion file in default locat ions (in 
luding its current working di rectory); you probably want to specify a 
" -c" argument spe 
i fying an absolute oath to a 
'Supervisord is running as 
23: 13: 42, CRI T 
201+03-03 23: 13: 42, 
f" during oarsing 
201+03-03 23: 13: 42, BOO 
23: 13: 42, BOO CRI T 
cat ion checking 
201+03-03 23: 13: 42, BOO 
201+03-03 23: 13: 43, 
201+03-03 23: 13: 43, 
getting INI 
getting INI 
NFO 
NFO 
NFO 
NFO 
NFO 
configurat ion file for improved security. 
root and it is searching 
Supervisor running as root (no user in config fi le) 
Incl uded extra fi le " /etc/suoervisor/conf d/suoervisord. con 
RPC interface 'supervisor 
Server 
running without any HTTP authenti 
supervisord started with oid 5 
spawned: 
nginx' with Did B 
spawned: 
uwsgl 
[uWSGI] 
[uWSGI] 
configurat ion from /aoo/uwsgi ini 
configurat ion from /etc/uwsgi/uwsgi ini
 
az container attach 명령은 컨테이너 시작 중에 진단 정보를 제공합니다. 컨테이너가 시작되면 표준 출력 및 표준 오류 스트림도 로컬 터미널에 씁니다.
az container attach \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name mycontainer
 
 
컨테이너에서 명령 실행  : 예시, 쉘명령
az container exec \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name mycontainer \
  --exec-command /bin/sh
 
쉘접속됨, 간단한 명령 호출 가능
onestx@Azure.-$ az container exec fi 
--resource-grouo 4-aBddf757BOla 
--name mycontainer fi 
--exec-command /bin/sh 
# Is 
--oycache__ 
main.oy orestart . sh 
/bin/sh: 2: 
not found 
# Is 
--oycache_ 
main.oy orestart . sh 
# cat uwsgi 
. Inl 
module = 
cal lable = apo 
static 
static 
t emol at es 
t emol at es 
uwsgl 
uwsgl 
. Inl 
. Inl
 
Exit로 나옴
 
컨테이너의 CPU 및 메모리 사용량 모니터링
컨테이너ID를 먼저 가져오기
CONTAINER_ID=$(az container show \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name mycontainer \
  --query id \
  --output tsv)
Azure 모니터 조회 명령
az monitor metrics list \
  --resource $CONTAINER_ID \
  --metric CPUUsage \
  --output table
g-03-03 
22: 
g-03-03 
22 : 
g-03-03 
22 : 
47 : 
g-03-03 
22 : 
g-03-03 
22 : 
g-03-03 æ: 
g-03-03 æ: 51 
g-03-03 æ: 52: 
g-03-03 æ: 53: 
g-03-03 æ: 54 : 
g-03-03 æ: 55: 
CPU 
CPU 
CPU 
CPU 
CPU 
CPU 
CPU 
CPU 
CPU 
CPU 
CPU 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage
 
혹은 메트릭에 MemoryUsage
 
g-03-03 
g-03-03 
g-03-03 
g-03-03 
g-03-03 æ: 51 
22 : 
22 : 
22 : 
22 : 
46 : 
47 : 
48 : 
g-03-03 22 : 50 : 
g-03-03 22 : 52 : 
g-03-03 22 : 53 : 
g-03-03 æ: 54 : 
g-03-03 22 : 55: 
Memory 
Memory 
Memory 
Memory 
Memory 
Memory 
Memory 
Memory 
Memory 
Memory 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
1 gB72.o 
1 71 
1741
물론 Azure Portal에서도 확인 가능함.
 
Microsoft OneNote 2016에서 작성




전사적으로 클라우드를 적극적으로 사용한다면
관리는 어떻게?
 
클라우드의 특징이 쉽게 인프라 요소, 리소스들을 만들 수 있는 컨셉이기 때문에
초기 체계를 잘 잡아 놓지 않으면, 나중에 가서는 관리하기가 어렵다.
 
 
Azure 플랫폼의 가장 기본
리소스들의 논리적인 컨테이너
수많은 리소스들을 논리적인 체계로 관리하고 구성할때 사용
 
아이콘
함수, VM, 데이터베이스 및 앱이 포함된 리소스 그룹 상자를 보여주는 개념 이미지
 
수명주기
비 프로덕션 환경에 특히 유용, 즉 테스트 끝나면 리소스그룹 지우면 내부 리소스 일괄삭제됨.
VM 하나만 만들어도 만들어지는 리소스가 7~8
Vnetn, PIP, NIC, NSG, VM, 디스크 
 
 
이름규칙
나름대로 정해야됨.
msftlearn-core-infrastructure-rg
리소스 그룹의 용도(msftlearn), 포함되는 리소스의 종류(core-infrastructure), 리소스 자체의 종류(rg)
 
예시 (결론은 유연하게 구성이 가능함)
아마, 부서별로 나누지 않을까, 비용처리 측면에서..
혹은, 네이밍룰은 서비스명으로 가고, 태그에 부서명 추가 가능함. 태그에 개발/운영 표시 가능함.
태그에 대한 네이밍룰도 필요.
리소스그룹별로, 비용분석 필터링 가능함.
 
 
모든 VNet을 한 리소스 그룹에 배치하고, 모든 스토리지 계정을 다른 리소스 그룹에 배치하고, 모든 Cosmos DB 인스턴스를 다른 리소스 그룹에 배치합니다.
종류별로 구성된 리소스 이미지
 
리소스를 환경별로(프로덕션, 테스트, 개발) 구성할 수 있습니다. 이 경우 모든 프로덕션 리소스가 한 리소스 그룹에 배치되고, 모든 테스트 리소스가 다른 리소스 그룹에 배치됩니다.
환경별로 구성된 리소스 이미지
 
리소스를 부서별로(마케팅, 재무, 인사) 구성할 수 있습니다. 마케팅 리소스를 한 리소스 그룹에 배치하고, 재무 리소스를 다른 리소스 그룹에 배치하고, HR 리소스를 세 번째 리소스 그룹에 배치합니다.
부서별로 구성된 리소스 이미지
 
이러한 전략을 조합해서 환경과 부서별로 정리할 수도 있습니다. 프로덕션 재무 리소스를 한 리소스 그룹에 배치하고, 개발 재무 리소스를 다른 리소스 그룹에 배치하고, 마케팅 리소스를 다른 리소스 그룹에 배치합니다.
환경과 부서의 조합으로 구성된 리소스 이미지
 
 
권한부여
리소스그룹도 RBAC 적용가능.
, 위에 부서별 구성예시와 같이 구성이 가능함.
 
 
태그
리소스명에는 서비스명 네이밍룰로 가고, 태그에 부서를 넣을 수 있음, 아래예시
·         청구데이터를 그룹화 하기 위한 태깅을 한다고 생각하면됨.
·         모니터링에도 도움됨, 경고 생성 시 태그정보를 기준값으로 이용하면, 알림의 범위를 한정할 수 있음.
·         VM 등 자동화에도 사용됨. 태그에 서버 On,Off 시간을 특정 정해진 태그에 적어놓고, 파워셸로 해당 값 가져와, 온오프시킴
학습 태그로 필터링한 모든 리소스 이미지
 
 
Azure 거버넌스
정책과 연계하여 사용
 
정책예시, 모든 리소스에 들어가야되는 필수 태그를 지정
Ex) 부서, 개발/운영여부,
 
정책만들기
·          브라우저에서 Azure Portal 을 엽니다. 위쪽 탐색 모음의 검색 상자에서 정책을 검색하고 정책 서비스를 선택합니다.
·         왼쪽 메뉴의 작성 섹션에서 정의를 선택합니다.
·         사용할 수 있는 기본 제공 정책 목록이 표시됩니다. 이 예에서는 사용자 지정 정책을 만들어 보겠습니다. 상단 메뉴에서 + 정책 정의를 클릭합니다.
·         그러면 새 정책 정의 대화 상자가 나타납니다정의 위치를 설정하려면 파란색 ... 를 클릭합니다. 정책을 저장할 구독을 선택합니다. 리소스 그룹과 동일한 구독이어야 합니다선택을 클릭합니다.
·         새 정책 정의 대화 상자로 돌아가서이름에 리소스에 태그 적용을 입력합니다.
·         설명에 이 정책은 리소스에 태그 적용을 입력합니다.
·         범주에서 기존 항목 사용을 선택한 다음일반 범주를 선택합니다.

·         정책 규칙에서 상자의 모든 텍스트를 삭제하고 다음 JSON을 붙여넣습니다.
JSON복사
{
  "mode": "indexed",
  "policyRule": {
    "if": {
      "field": "[concat('tags[', parameters('tagName'), ']')]",
      "exists": "false"
    },
    "then": {
      "effect": "deny"
    }
  },
  "parameters": {
    "tagName": {
      "type": "String",
      "metadata": {
        "displayName": "Tag Name",
        "description": "Name of the tag, such as 'environment'"
      }
    }
  }
}

아래와 비슷한 정책 정의가 표시될 것입니다저장을 클릭하여 정책 정의를 저장합니다.

새 정책 정의 대화 상자를 보여주는 포털 이미지
 
 
정책할당 시 매개변수로 태그명 지정 가능
·         정책 할당 창에서 리소스 그룹에 정책을 할당하겠습니다범위에서 파란색 ... 를 클릭합니다. 여러분의 구독과 msftlearn-core-infrastructure-rg 리소스그룹을 선택한 다음선택을 클릭합니다.
·         정책 정의에서 파란색 ... 를 클릭합니다형식 드롭다운 목록에서 사용자 지정을 선택하고, 앞에서 만든 리소스에 태그 적용 정책을 선택한 다음선택을 클릭합니다.
·         매개 변수 섹션에서 태그 이름으로 부서를 입력합니다할당을 클릭하여 정책을 할당합니다.
 
테스트 결과
ì •ì±… ìœ„ë°˜ì„ ë³´ì—¬ì£¼ëŠ” í¬í„¸ ì´ë¯¸ì§€
 
 
리소스 그룹 삭제잠금 기능
중요한 운영서비스에 대해서 실수로 혹은 다른 사람에 의해 삭제되는 것 방지
특히, 네트워크나 데이터베이스 등
새 리소스 잠금이 구성되는 것을 보여주는 포털 이미지
 
 
 
태그
태그가 지원되지 않은 리소스도 있음.
 
리소스그룹에 적용된 태그는 상속되지 않음.
 
 
Microsoft OneNote 2016에서 작성




+ Recent posts