├── .devcontainer ├── Dockerfile ├── devcontainer.json └── post-create.sh ├── .gitignore ├── 01-azure-basic-networking-design ├── README.md └── images │ ├── image00.png │ ├── image01.png │ ├── image02.png │ ├── image03.png │ ├── image04.png │ ├── image05.png │ ├── image06.png │ ├── image07.png │ ├── image08.png │ ├── image09.png │ ├── image10.png │ ├── image11.png │ ├── image12.png │ ├── image13.png │ ├── image14.png │ ├── image15.png │ ├── image16.png │ ├── image17.png │ ├── image18.png │ ├── image19.png │ ├── image20.png │ ├── image21.png │ ├── image22.png │ ├── image23.png │ ├── image24.png │ ├── image25.png │ ├── image26.png │ ├── image27.png │ ├── image28.png │ ├── image29.png │ ├── image30.png │ ├── image31.png │ ├── image32.png │ ├── image33.png │ ├── image34.png │ ├── image35.png │ ├── image36.png │ ├── image37.png │ ├── image38.png │ ├── image39.png │ ├── image40.png │ ├── image41.png │ ├── image42.png │ ├── image43.png │ ├── image44.png │ ├── image45.png │ ├── image46.png │ ├── image47.png │ ├── image48.png │ ├── image49.png │ ├── image50.png │ └── image51.png ├── 02-azure-vmss-scaling ├── README.md ├── azure-vmss-scaling-and-alert-screenshots │ ├── Slide35.PNG │ ├── Slide36.PNG │ ├── Slide37.PNG │ ├── Slide38.PNG │ ├── Slide39.PNG │ ├── Slide40.PNG │ ├── Slide41.PNG │ ├── Slide42.PNG │ ├── Slide43.PNG │ ├── Slide44.PNG │ ├── Slide45.PNG │ ├── Slide46.PNG │ ├── Slide47.PNG │ ├── Slide48.PNG │ ├── Slide49.PNG │ ├── Slide50.PNG │ ├── Slide51.PNG │ ├── Slide52.PNG │ ├── Slide53.PNG │ ├── Slide54.PNG │ ├── Slide55.PNG │ ├── Slide56.PNG │ ├── Slide57.PNG │ ├── Slide588.PNG │ ├── Slide59.PNG │ ├── Slide60.PNG │ ├── Slide61.PNG │ ├── Slide62.PNG │ ├── Slide63.PNG │ ├── Slide64.PNG │ ├── Slide65.PNG │ ├── Slide66.PNG │ ├── Slide67.PNG │ ├── Slide68.PNG │ ├── Slide69.PNG │ ├── Slide70.PNG │ ├── Slide71.PNG │ ├── Slide72.PNG │ ├── Slide73.PNG │ ├── Slide74.PNG │ ├── Slide75.PNG │ ├── Slide76.PNG │ ├── Slide77.PNG │ ├── Slide78.PNG │ ├── Slide79.PNG │ ├── Slide80.PNG │ ├── Slide81.PNG │ ├── Slide82.PNG │ ├── Slide83.PNG │ ├── Slide84.PNG │ ├── Slide85.PNG │ ├── Slide86.PNG │ ├── Slide87.PNG │ ├── Slide88.PNG │ ├── Slide89.PNG │ ├── Slide90.PNG │ └── Slidenotify.png ├── azure-vmss-scaling-and-alert.md ├── images │ ├── 010portal.png │ ├── Slide35.PNG │ ├── Slide36.PNG │ ├── Slide37.PNG │ ├── Slide38.PNG │ ├── Slide39.PNG │ ├── Slide40.PNG │ ├── Slide41.PNG │ ├── Slide42.PNG │ ├── Slide43.PNG │ ├── Slide44.PNG │ ├── Slide45.PNG │ ├── Slide46.PNG │ ├── Slide47.PNG │ ├── Slide48.PNG │ ├── Slide49.PNG │ ├── Slide50.PNG │ ├── Slide51.PNG │ ├── Slide52.PNG │ ├── Slide53.PNG │ ├── Slide54.PNG │ ├── Slide55.PNG │ ├── Slide56.PNG │ ├── Slide57.PNG │ ├── Slide588.PNG │ ├── Slide59.PNG │ ├── Slide60.PNG │ ├── Slide61.PNG │ ├── Slide62.PNG │ ├── Slide63.PNG │ ├── Slide64.PNG │ ├── Slide65.PNG │ ├── Slide66.PNG │ ├── Slide67.PNG │ ├── Slide68.PNG │ ├── Slide69.PNG │ ├── Slide70.PNG │ ├── Slide71.PNG │ ├── Slide72.PNG │ ├── Slide73.PNG │ ├── Slide74.PNG │ ├── Slide75.PNG │ ├── Slide76.PNG │ ├── Slide77.PNG │ ├── Slide78.PNG │ ├── Slide79.PNG │ ├── Slide80.PNG │ ├── Slide81.PNG │ ├── Slide82.PNG │ ├── Slide83.PNG │ ├── Slide84.PNG │ ├── Slide85.PNG │ ├── Slide86.PNG │ ├── Slide87.PNG │ ├── Slide88.PNG │ ├── Slide89.PNG │ ├── Slide90.PNG │ └── Slidenotify.png └── lua.ep2.pdf ├── 03-azure-serverless-web-application ├── README.md └── images │ ├── HOL001.png │ ├── HOL002.png │ ├── HOL003.png │ ├── HOL004.png │ ├── HOL005.png │ ├── HOL006.png │ ├── HOL007.png │ ├── HOL008.png │ ├── HOL009.png │ ├── HOL010.png │ ├── HOL011.png │ ├── HOL012.png │ ├── HOL013.png │ ├── HOL014.png │ ├── HOL015.png │ ├── HOL016.png │ ├── HOL017.png │ ├── HOL018.png │ ├── HOL019.png │ ├── HOL020.png │ ├── HOL021.png │ ├── HOL022.png │ └── image.txt ├── 04-azure-stream-analytics-hol ├── README.md └── images │ ├── image00.png │ ├── image01.png │ ├── image02.png │ ├── image03.png │ ├── image04.png │ ├── image05.png │ ├── image06.png │ ├── image07.png │ ├── image08.png │ ├── image09.png │ ├── image10.png │ ├── image11.png │ ├── image12.png │ ├── image13.png │ ├── image14.png │ ├── image15.png │ ├── image16.png │ ├── image17.png │ ├── image18.png │ ├── image19.png │ ├── image20.png │ ├── image21.png │ ├── image22.png │ ├── image23.png │ ├── image24.png │ ├── image25.png │ ├── image26.png │ ├── image27.png │ ├── image28.png │ ├── image29.png │ ├── image30.png │ ├── image31.png │ ├── image32.png │ ├── image33.png │ ├── image34.png │ ├── image35.png │ ├── image36.png │ ├── image37.png │ ├── image38.png │ ├── image39.png │ ├── image40.png │ ├── image41.png │ ├── image42.png │ ├── image43.png │ ├── image44.png │ ├── image45.png │ ├── image46.png │ ├── image47.png │ ├── image48.png │ ├── image49.png │ ├── image50.png │ ├── image51.png │ ├── image52.png │ ├── image53.png │ ├── image54.png │ ├── image55.png │ ├── image56.png │ ├── image57.png │ ├── image58.png │ ├── image59.png │ ├── image60.png │ └── image61.png ├── 05-aoai-prompt-engineering ├── README.md └── images │ ├── .gitkeep │ ├── image1.png │ ├── image2.png │ ├── image3.png │ └── image4.png ├── 06-aoai-knowledge-mining ├── README.md └── image │ ├── appcomponents.png │ ├── chatscreen.png │ ├── endpoint.png │ ├── endpoint2.png │ ├── image1.png │ └── image2.png ├── 07-az-devops-mlops ├── README.md └── images │ ├── .gitkeep │ ├── image1.png │ ├── image10.png │ ├── image2.png │ ├── image3.png │ ├── image4.png │ ├── image5.png │ ├── image6.png │ ├── image7.png │ ├── image8.png │ └── image9.png ├── 08-aoai-power-platform ├── README.md └── images │ ├── .gitkeep │ ├── HOL001.png │ ├── HOL002.png │ ├── HOL003.png │ ├── HOL004.png │ ├── HOL005.png │ ├── HOL006.png │ ├── HOL007.png │ ├── HOL008.png │ ├── HOL009.png │ ├── HOL010.png │ ├── HOL011.png │ ├── HOL012.png │ ├── HOL013.png │ ├── HOL014.png │ ├── HOL015.png │ ├── HOL016.png │ ├── HOL017.png │ ├── HOL018.png │ ├── HOL019.png │ ├── HOL020.png │ ├── HOL021.png │ ├── HOL022.png │ ├── HOL023.png │ ├── HOL024.png │ ├── HOL025.png │ ├── HOL026.png │ ├── HOL027.png │ ├── HOL028.png │ ├── HOL029.png │ ├── HOL030.png │ ├── HOL031.png │ ├── HOL032.png │ ├── HOL033.png │ ├── HOL034.png │ ├── HOL035.png │ ├── HOL036.png │ ├── HOL037.png │ ├── HOL038.png │ ├── HOL039.png │ ├── HOL040.png │ ├── HOL041.png │ ├── HOL042.png │ ├── HOL043.png │ ├── HOL044.png │ ├── HOL045.png │ ├── HOL046.png │ ├── HOL047.png │ └── HOL048.png ├── 09-gh-codespaces-copilot ├── 01-codespace.md ├── 02-copilot-dotnet.md ├── 03-copilot-bicep.md ├── 04-copilot-gha.md ├── 05-references.md ├── README.md └── images │ ├── codespace-01.png │ └── copilot-01.png ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── SECURITY.md ├── SUPPORT.md ├── assets ├── ep05.PNG ├── ep06.PNG ├── ep07.PNG ├── ep08.PNG ├── ep09.PNG ├── thumbnail.anna.jeong.png ├── thumbnail.august.lee.png ├── thumbnail.hyewon.kong.png └── thumbnail.youkhang.rha.png └── templates └── README.md /.devcontainer/Dockerfile: -------------------------------------------------------------------------------- 1 | # [Choice] .NET version: 6.0-bullseye-slim, 6.0-jammy, 6.0-focal 2 | ARG VARIANT="6.0-jammy" 3 | FROM mcr.microsoft.com/dotnet/sdk:${VARIANT} 4 | 5 | # [Optional] Uncomment this section to install additional OS packages. 6 | # RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ 7 | # && apt-get -y install --no-install-recommends 8 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "DevContainer for Writers", 3 | 4 | "build": { 5 | "dockerfile": "./Dockerfile", 6 | "context": ".", 7 | "args": { 8 | "VARIANT": "7.0" 9 | } 10 | }, 11 | 12 | // Use 'forwardPorts' to make a list of ports inside the container available locally. 13 | "forwardPorts": [], 14 | 15 | "features": { 16 | // Uncomment the below to install GitHub CLI 17 | "ghcr.io/devcontainers/features/github-cli:1": { 18 | "version": "latest" 19 | }, 20 | 21 | // Uncomment the below to install node.js 22 | "ghcr.io/devcontainers/features/node:1": { 23 | "version": "lts", 24 | "nodeGypDependencies": true, 25 | "nvmInstallPath": "/usr/local/share/nvm" 26 | }, 27 | 28 | // Install common utilities 29 | "ghcr.io/devcontainers/features/common-utils:1": { 30 | "installZsh": true, 31 | "installOhMyZsh": true, 32 | "upgradePackages": true, 33 | "username": "vscode", 34 | "uid": "1000", 35 | "gid": "1000" 36 | } 37 | }, 38 | 39 | "overrideFeatureInstallOrder": [ 40 | "ghcr.io/devcontainers/features/common-utils" 41 | ], 42 | 43 | // Configure tool-specific properties. 44 | "customizations": { 45 | // Configure properties specific to VS Code. 46 | "vscode": { 47 | // Add the IDs of extensions you want installed when the container is created. 48 | "extensions": [ 49 | // Recommended extensions - GitHub 50 | "cschleiden.vscode-github-actions", 51 | "GitHub.vscode-pull-request-github", 52 | 53 | // Recommended extensions - Collaboration 54 | "eamodio.gitlens", 55 | "EditorConfig.EditorConfig", 56 | "streetsidesoftware.code-spell-checker", 57 | 58 | // Recommended extensions - Markdown 59 | "bierner.github-markdown-preview", 60 | "DavidAnson.vscode-markdownlint", 61 | "docsmsft.docs-linting", 62 | "johnpapa.read-time", 63 | "yzhang.markdown-all-in-one", 64 | 65 | // Required extensions 66 | "GitHub.copilot", 67 | "ms-vscode.PowerShell" 68 | ], 69 | 70 | "settings": { 71 | // Uncomment if you want to use zsh as the default shell 72 | "terminal.integrated.defaultProfile.linux": "zsh", 73 | "terminal.integrated.profiles.linux": { 74 | "zsh": { 75 | "path": "/usr/bin/zsh" 76 | } 77 | }, 78 | 79 | // Uncomment if you want to use CaskaydiaCove Nerd Font as the default terminal font 80 | "terminal.integrated.fontFamily": "CaskaydiaCove Nerd Font", 81 | 82 | // Uncomment if you want to disable the minimap view 83 | "editor.minimap.enabled": false, 84 | 85 | // Uncomment if you want to disable the welcome page of GitLens 86 | "gitlens.showWelcomeOnInstall": false, 87 | "gitlens.showWhatsNewAfterUpgrades": false, 88 | 89 | // Uncomment if you prefer the light colour theme 90 | // "workbench.colorTheme": "Default Light+", 91 | 92 | // Recommended settings for the explorer pane 93 | "explorer.sortOrder": "type", 94 | "explorer.fileNesting.enabled": true, 95 | "explorer.fileNesting.patterns": { 96 | "*.bicep": "${capture}.json", 97 | "*.razor": "${capture}.razor.css", 98 | "*.js": "${capture}.js.map" 99 | } 100 | } 101 | } 102 | }, 103 | 104 | // Uncomment if you want to use bash in 'postCreateCommand' after the container is created 105 | // "postCreateCommand": "/bin/bash ./.devcontainer/post-create.sh > ~/post-create.log", 106 | 107 | // Uncomment if you want to use zsh in 'postCreateCommand' after the container is created 108 | "postCreateCommand": "/usr/bin/zsh ./.devcontainer/post-create.sh > ~/post-create.log", 109 | 110 | // Uncomment if you want to connect other than 'root'. More info: https://aka.ms/vscode-remote/containers/non-root. 111 | "remoteUser": "vscode" 112 | } 113 | -------------------------------------------------------------------------------- /.devcontainer/post-create.sh: -------------------------------------------------------------------------------- 1 | ## Install additional apt packages 2 | sudo apt-get update && \ 3 | sudo apt-get install -y dos2unix libsecret-1-0 4 | 5 | ## Configure git 6 | git config --global pull.rebase false 7 | git config --global core.autocrlf input 8 | 9 | ## CaskaydiaCove Nerd Font 10 | # Uncomment the below to install the CaskaydiaCove Nerd Font 11 | mkdir $HOME/.local 12 | mkdir $HOME/.local/share 13 | mkdir $HOME/.local/share/fonts 14 | wget https://github.com/ryanoasis/nerd-fonts/releases/latest/download/CascadiaCode.zip 15 | unzip CascadiaCode.zip -d $HOME/.local/share/fonts 16 | rm CascadiaCode.zip 17 | 18 | ## OH-MY-ZSH PLUGINS & THEMES (POWERLEVEL10K) ## 19 | # Uncomment the below to install oh-my-zsh plugins and themes (powerlevel10k) without dotfiles integration 20 | # git clone https://github.com/zsh-users/zsh-completions.git $HOME/.oh-my-zsh/custom/plugins/zsh-completions 21 | # git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $HOME/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting 22 | # git clone https://github.com/zsh-users/zsh-autosuggestions.git $HOME/.oh-my-zsh/custom/plugins/zsh-autosuggestions 23 | 24 | # git clone https://github.com/romkatv/powerlevel10k.git $HOME/.oh-my-zsh/custom/themes/powerlevel10k --depth=1 25 | # ln -s $HOME/.oh-my-zsh/custom/themes/powerlevel10k/powerlevel10k.zsh-theme $HOME/.oh-my-zsh/custom/themes/powerlevel10k.zsh-theme 26 | 27 | ## OH-MY-ZSH - POWERLEVEL10K SETTINGS ## 28 | # Uncomment the below to update the oh-my-zsh settings without dotfiles integration 29 | # curl https://raw.githubusercontent.com/justinyoo/devcontainers-dotnet/main/oh-my-zsh/.p10k-with-clock.zsh > $HOME/.p10k-with-clock.zsh 30 | # curl https://raw.githubusercontent.com/justinyoo/devcontainers-dotnet/main/oh-my-zsh/.p10k-without-clock.zsh > $HOME/.p10k-without-clock.zsh 31 | # curl https://raw.githubusercontent.com/justinyoo/devcontainers-dotnet/main/oh-my-zsh/switch-p10k-clock.sh > $HOME/switch-p10k-clock.sh 32 | # chmod +x ~/switch-p10k-clock.sh 33 | 34 | # cp $HOME/.p10k-with-clock.zsh $HOME/.p10k.zsh 35 | # cp $HOME/.zshrc $HOME/.zshrc.bak 36 | 37 | # echo "$(cat $HOME/.zshrc)" | awk '{gsub(/ZSH_THEME=\"codespaces\"/, "ZSH_THEME=\"powerlevel10k\"")}1' > $HOME/.zshrc.replaced && mv $HOME/.zshrc.replaced $HOME/.zshrc 38 | # echo "$(cat $HOME/.zshrc)" | awk '{gsub(/plugins=\(git\)/, "plugins=(git zsh-completions zsh-syntax-highlighting zsh-autosuggestions)")}1' > $HOME/.zshrc.replaced && mv $HOME/.zshrc.replaced $HOME/.zshrc 39 | # echo " 40 | # # To customize prompt, run 'p10k configure' or edit ~/.p10k.zsh. 41 | # [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh 42 | # " >> $HOME/.zshrc 43 | 44 | ## OH-MY-POSH ## 45 | # Uncomment the below to install oh-my-posh 46 | sudo wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/posh-linux-amd64 -O /usr/local/bin/oh-my-posh 47 | sudo chmod +x /usr/local/bin/oh-my-posh 48 | 49 | ## OH-MY-POSH - POWERLEVEL10K SETTINGS ## 50 | # Uncomment the below to update the oh-my-posh settings without dotfiles integration 51 | # curl https://raw.githubusercontent.com/justinyoo/devcontainers-dotnet/main/oh-my-posh/p10k-with-clock.omp.json > $HOME/p10k-with-clock.omp.json 52 | # curl https://raw.githubusercontent.com/justinyoo/devcontainers-dotnet/main/oh-my-posh/p10k-without-clock.omp.json > $HOME/p10k-without-clock.omp.json 53 | # curl https://raw.githubusercontent.com/justinyoo/devcontainers-dotnet/main/oh-my-posh/switch-p10k-clock.ps1 > $HOME/switch-p10k-clock.ps1 54 | 55 | # mkdir $HOME/.config/powershell 56 | # curl https://raw.githubusercontent.com/justinyoo/devcontainers-dotnet/main/oh-my-posh/Microsoft.PowerShell_profile.ps1 > $HOME/.config/powershell/Microsoft.PowerShell_profile.ps1 57 | # curl https://raw.githubusercontent.com/justinyoo/devcontainers-dotnet/main/oh-my-posh/Microsoft.PowerShell_profile.ps1 > $HOME/.config/powershell/Microsoft.VSCode_profile.ps1 58 | 59 | # cp $HOME/p10k-with-clock.omp.json $HOME/p10k.omp.json 60 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Aa][Rr][Mm]/ 27 | [Aa][Rr][Mm]64/ 28 | bld/ 29 | [Bb]in/ 30 | [Oo]bj/ 31 | [Ll]og/ 32 | [Ll]ogs/ 33 | 34 | # Visual Studio 2015/2017 cache/options directory 35 | .vs/ 36 | # Uncomment if you have tasks that create the project's static files in wwwroot 37 | #wwwroot/ 38 | 39 | # Visual Studio 2017 auto generated files 40 | Generated\ Files/ 41 | 42 | # MSTest test Results 43 | [Tt]est[Rr]esult*/ 44 | [Bb]uild[Ll]og.* 45 | 46 | # NUnit 47 | *.VisualState.xml 48 | TestResult.xml 49 | nunit-*.xml 50 | 51 | # Build Results of an ATL Project 52 | [Dd]ebugPS/ 53 | [Rr]eleasePS/ 54 | dlldata.c 55 | 56 | # Benchmark Results 57 | BenchmarkDotNet.Artifacts/ 58 | 59 | # .NET Core 60 | project.lock.json 61 | project.fragment.lock.json 62 | artifacts/ 63 | 64 | # StyleCop 65 | StyleCopReport.xml 66 | 67 | # Files built by Visual Studio 68 | *_i.c 69 | *_p.c 70 | *_h.h 71 | *.ilk 72 | *.meta 73 | *.obj 74 | *.iobj 75 | *.pch 76 | *.pdb 77 | *.ipdb 78 | *.pgc 79 | *.pgd 80 | *.rsp 81 | *.sbr 82 | *.tlb 83 | *.tli 84 | *.tlh 85 | *.tmp 86 | *.tmp_proj 87 | *_wpftmp.csproj 88 | *.log 89 | *.vspscc 90 | *.vssscc 91 | .builds 92 | *.pidb 93 | *.svclog 94 | *.scc 95 | 96 | # Chutzpah Test files 97 | _Chutzpah* 98 | 99 | # Visual C++ cache files 100 | ipch/ 101 | *.aps 102 | *.ncb 103 | *.opendb 104 | *.opensdf 105 | *.sdf 106 | *.cachefile 107 | *.VC.db 108 | *.VC.VC.opendb 109 | 110 | # Visual Studio profiler 111 | *.psess 112 | *.vsp 113 | *.vspx 114 | *.sap 115 | 116 | # Visual Studio Trace Files 117 | *.e2e 118 | 119 | # TFS 2012 Local Workspace 120 | $tf/ 121 | 122 | # Guidance Automation Toolkit 123 | *.gpState 124 | 125 | # ReSharper is a .NET coding add-in 126 | _ReSharper*/ 127 | *.[Rr]e[Ss]harper 128 | *.DotSettings.user 129 | 130 | # TeamCity is a build add-in 131 | _TeamCity* 132 | 133 | # DotCover is a Code Coverage Tool 134 | *.dotCover 135 | 136 | # AxoCover is a Code Coverage Tool 137 | .axoCover/* 138 | !.axoCover/settings.json 139 | 140 | # Visual Studio code coverage results 141 | *.coverage 142 | *.coveragexml 143 | 144 | # NCrunch 145 | _NCrunch_* 146 | .*crunch*.local.xml 147 | nCrunchTemp_* 148 | 149 | # MightyMoose 150 | *.mm.* 151 | AutoTest.Net/ 152 | 153 | # Web workbench (sass) 154 | .sass-cache/ 155 | 156 | # Installshield output folder 157 | [Ee]xpress/ 158 | 159 | # DocProject is a documentation generator add-in 160 | DocProject/buildhelp/ 161 | DocProject/Help/*.HxT 162 | DocProject/Help/*.HxC 163 | DocProject/Help/*.hhc 164 | DocProject/Help/*.hhk 165 | DocProject/Help/*.hhp 166 | DocProject/Help/Html2 167 | DocProject/Help/html 168 | 169 | # Click-Once directory 170 | publish/ 171 | 172 | # Publish Web Output 173 | *.[Pp]ublish.xml 174 | *.azurePubxml 175 | # Note: Comment the next line if you want to checkin your web deploy settings, 176 | # but database connection strings (with potential passwords) will be unencrypted 177 | *.pubxml 178 | *.publishproj 179 | 180 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 181 | # checkin your Azure Web App publish settings, but sensitive information contained 182 | # in these scripts will be unencrypted 183 | PublishScripts/ 184 | 185 | # NuGet Packages 186 | *.nupkg 187 | # NuGet Symbol Packages 188 | *.snupkg 189 | # The packages folder can be ignored because of Package Restore 190 | **/[Pp]ackages/* 191 | # except build/, which is used as an MSBuild target. 192 | !**/[Pp]ackages/build/ 193 | # Uncomment if necessary however generally it will be regenerated when needed 194 | #!**/[Pp]ackages/repositories.config 195 | # NuGet v3's project.json files produces more ignorable files 196 | *.nuget.props 197 | *.nuget.targets 198 | 199 | # Microsoft Azure Build Output 200 | csx/ 201 | *.build.csdef 202 | 203 | # Microsoft Azure Emulator 204 | ecf/ 205 | rcf/ 206 | 207 | # Windows Store app package directories and files 208 | AppPackages/ 209 | BundleArtifacts/ 210 | Package.StoreAssociation.xml 211 | _pkginfo.txt 212 | *.appx 213 | *.appxbundle 214 | *.appxupload 215 | 216 | # Visual Studio cache files 217 | # files ending in .cache can be ignored 218 | *.[Cc]ache 219 | # but keep track of directories ending in .cache 220 | !?*.[Cc]ache/ 221 | 222 | # Others 223 | ClientBin/ 224 | ~$* 225 | *~ 226 | *.dbmdl 227 | *.dbproj.schemaview 228 | *.jfm 229 | *.pfx 230 | *.publishsettings 231 | orleans.codegen.cs 232 | 233 | # Including strong name files can present a security risk 234 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 235 | #*.snk 236 | 237 | # Since there are multiple workflows, uncomment next line to ignore bower_components 238 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 239 | #bower_components/ 240 | 241 | # RIA/Silverlight projects 242 | Generated_Code/ 243 | 244 | # Backup & report files from converting an old project file 245 | # to a newer Visual Studio version. Backup files are not needed, 246 | # because we have git ;-) 247 | _UpgradeReport_Files/ 248 | Backup*/ 249 | UpgradeLog*.XML 250 | UpgradeLog*.htm 251 | ServiceFabricBackup/ 252 | *.rptproj.bak 253 | 254 | # SQL Server files 255 | *.mdf 256 | *.ldf 257 | *.ndf 258 | 259 | # Business Intelligence projects 260 | *.rdl.data 261 | *.bim.layout 262 | *.bim_*.settings 263 | *.rptproj.rsuser 264 | *- [Bb]ackup.rdl 265 | *- [Bb]ackup ([0-9]).rdl 266 | *- [Bb]ackup ([0-9][0-9]).rdl 267 | 268 | # Microsoft Fakes 269 | FakesAssemblies/ 270 | 271 | # GhostDoc plugin setting file 272 | *.GhostDoc.xml 273 | 274 | # Node.js Tools for Visual Studio 275 | .ntvs_analysis.dat 276 | node_modules/ 277 | 278 | # Visual Studio 6 build log 279 | *.plg 280 | 281 | # Visual Studio 6 workspace options file 282 | *.opt 283 | 284 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 285 | *.vbw 286 | 287 | # Visual Studio LightSwitch build output 288 | **/*.HTMLClient/GeneratedArtifacts 289 | **/*.DesktopClient/GeneratedArtifacts 290 | **/*.DesktopClient/ModelManifest.xml 291 | **/*.Server/GeneratedArtifacts 292 | **/*.Server/ModelManifest.xml 293 | _Pvt_Extensions 294 | 295 | # Paket dependency manager 296 | .paket/paket.exe 297 | paket-files/ 298 | 299 | # FAKE - F# Make 300 | .fake/ 301 | 302 | # CodeRush personal settings 303 | .cr/personal 304 | 305 | # Python Tools for Visual Studio (PTVS) 306 | __pycache__/ 307 | *.pyc 308 | 309 | # Cake - Uncomment if you are using it 310 | # tools/** 311 | # !tools/packages.config 312 | 313 | # Tabs Studio 314 | *.tss 315 | 316 | # Telerik's JustMock configuration file 317 | *.jmconfig 318 | 319 | # BizTalk build output 320 | *.btp.cs 321 | *.btm.cs 322 | *.odx.cs 323 | *.xsd.cs 324 | 325 | # OpenCover UI analysis results 326 | OpenCover/ 327 | 328 | # Azure Stream Analytics local run output 329 | ASALocalRun/ 330 | 331 | # MSBuild Binary and Structured Log 332 | *.binlog 333 | 334 | # NVidia Nsight GPU debugger configuration file 335 | *.nvuser 336 | 337 | # MFractors (Xamarin productivity tool) working folder 338 | .mfractor/ 339 | 340 | # Local History for Visual Studio 341 | .localhistory/ 342 | 343 | # BeatPulse healthcheck temp database 344 | healthchecksdb 345 | 346 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 347 | MigrationBackup/ 348 | 349 | # Ionide (cross platform F# VS Code tools) working folder 350 | .ionide/ 351 | -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image00.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image01.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image02.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image03.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image04.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image05.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image06.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image07.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image08.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image09.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image10.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image11.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image12.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image13.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image14.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image15.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image16.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image17.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image18.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image19.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image20.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image21.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image22.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image23.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image24.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image25.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image26.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image27.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image28.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image29.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image30.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image31.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image32.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image33.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image34.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image35.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image36.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image37.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image38.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image39.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image40.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image41.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image42.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image43.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image44.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image45.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image46.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image47.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image48.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image49.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image50.png -------------------------------------------------------------------------------- /01-azure-basic-networking-design/images/image51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/01-azure-basic-networking-design/images/image51.png -------------------------------------------------------------------------------- /02-azure-vmss-scaling/README.md: -------------------------------------------------------------------------------- 1 | # 애저 VMSS와 스케일링 시나리오 확인하기 2 | 3 | 이번 핸즈온랩 세션을 통해 VMSS용 이미지 생성, Compute Gallery 활용, 스케일링 규칙 설정 및 알림 설정에 관해 알아봅니다. 핸즈온랩 데모 시나리오는 아래와 같습니다. 4 | 5 | - [애저 VMSS와 스케일링 시나리오 확인하기](#애저-vmss와-스케일링-시나리오-확인하기) 6 | - [데모 시나리오](#데모-시나리오) 7 | - [실습 주제](#실습-주제) 8 | - [실습 목표](#실습-목표) 9 | - [VMSS 데모 시나리오](#vmss-데모-시나리오) 10 | - [이미지 제작용 VM 생성](#이미지-제작용-vm-생성) 11 | - [이미지 기반으로 VMSS 생성하기](#이미지-기반으로-vmss-생성하기) 12 | - [애저 모니터를 통한 스케일링 알림 설정](#애저-모니터를-통한-스케일링-알림-설정) 13 | - [마무리](#마무리) 14 | - [추가 링크](#추가-링크) 15 | 16 | ## 데모 시나리오 17 | 18 | ### 실습 주제 19 | 20 | - VMSS에서 제공하는 스케일링 조건을 직접 활용해서 VM 이미지를 업데이트 합니다. 21 | 22 | ### 실습 목표 23 | 24 | - VMSS에서 제공하는 스케일링 기능을 확인하고 컴퓨팅 갤러리 및 애저 모니터 알림 기능을 실제로 구현해 봅니다. 25 | 26 | ### VMSS 데모 시나리오 27 | 28 | 1. 커스텀 이미지 제작용 VM을 한 대 배포합니다(luavm). 29 | 2. 배포한 VM에 stress툴을 설치합니다. 30 | 3. VM을 기반으로 이미지를 두 장 만들고(0.0.0, 0.1.0), Compute Gallery에 저장합니다. 31 | 4. 0.0.0 이미지를 기반으로 VMSS를 생성합니다(luavmss). 32 | 5. luavmss에 CPU percentage를 기반으로 한 오토스케일링 규칙을 설정합니다. 33 | 6. Scale-In시 OldestVM부터 삭제되도록 규칙을 설정합니다. 34 | 7. luavmss\_0 인스턴스가 어떤 이미지를 참조하고 있는지 확인합니다(0.0.0). 35 | 8. CLI 명령어를 통해 0.1.0 이미지를 참조하도록 설정값을 변경합니다. 36 | 37 | ```bash 38 | az vmss update \ 39 | --resource-group luarg \ 40 | --name luavmss \ 41 | --set virtualMachineProfile.storageProfile.imageReference.id=/subscriptions/{subscriptionID}/resourceGroups/luarg/providers/Microsoft.Compute/galleries/luacg/images/luadefinition/versions/0.1.0 42 | ``` 43 | 44 | 9. CLI 명령어를 통해 이미지를 0.1.0을 참조하도록 설정하였더라도 개별 인스턴스는 여전히 0.0.0이미지 기반임을 확인합니다. 45 | 46 | ```bash 47 | az vmss show \ 48 | --name luavmss \ 49 | --resource-group luarg \ 50 | --instance-id 0 51 | ``` 52 | 53 | 10. 0번 인스턴스의 직렬 콘솔로 접속해서 로그인 후 stress --cpu 4 커맨드를 입력합니다. 54 | 11. 인스턴스가 스케일아웃 된 것과 또한 최신 이미지(0.1.0)를 기반으로 생성됐음을  확인합니다. 55 | 12. stress를 멈추고 스케일인 되는 것을 확인합니다. 이 때 OldestVM인 인스턴스 숫자가 작은 VM부터 삭제되는 것을 확인합니다. 56 | 13. Activity log에서 Autoscale scale up completed 와 Autoscale scale down completed 에 대해 알림을 설정합니다. 57 | 14. 마지막으로 실습에서 사용했던 리소스 그룹을 삭제합니다. 58 | 59 | ## 이미지 제작용 VM 생성 60 | 61 | 커스텀 이미지 제작용 VM을 생성합니다. 62 | 63 | 1. 포털 메인 화면 상단에 위치한 검색창에 '가상 머신'을 입력합니다. 포털 설정이 영어로 되어있는 경우 Virtual Machines를 입력합니다. 64 | 65 | ![가상 머신 리소스 검색](./images/Slide35.PNG) 66 | 67 | ![가상 머신 생성 버튼 클릭 >](./images/Slide36.PNG) 68 | 69 | 2. 리소스 생성에 알맞은 구독을 선택하고 리소스 그룹을 새로 생성합니다. stress 툴 사용을 위해 Ubuntu 이미지를 선택합니다. 70 | 71 | ![리소스 그룹 및 우분투 이미지 선택](./images/Slide37.PNG) 72 | 73 | ![인증 형식은 암호 선택](./images/Slide38.PNG) 74 | 75 | 퍼블릭에서 VM에 직접 접속하기 위해 22번 포트를 오픈합니다. 76 | 77 | ![22번 포트 허용](./images/Slide39.PNG) 78 | 79 | 모든 설정 값을 확인 후, 이상이 없으면 만들기 버튼을 눌러 가상 머신 리소스를 생성합니다. 80 | 81 | ![확인 후 가상머신 리소스 생성](./images/Slide40.PNG) 82 | 83 | 3. 가상머신 리소스 생성이 완료되었으면 브라우저에서 새로운 탭을 엽니다. 그리고 shell.azure.com에 접속하여 방금 생성한 VM의 public IP로 ssh연결합니다. 84 | 85 | ```bash 86 | ssh yourID@123.234.345.456 87 | ``` 88 | 89 | ![ssh 연결](./images/Slide41.PNG) 90 | 91 | VM 생성시 입력했던 id와 password를 이용해 VM에 접속합니다. 그리고 아래 명령어를 통해 stress 툴을 설치합니다. 92 | 93 | ```bash 94 | sudo apt-get update 95 | sudo apt install stress 96 | ``` 97 | 98 | 4. 툴 설치가 끝났으면 다시 포털 VM 창으로 돌아옵니다. 상단에 위치한 캡쳐 버튼을 눌러 현재 가상머신을 기반으로 이미지를 만듭니다. 99 | 100 | ![가상머신 리소스 화면에서 캡처 버튼 클릭](./images/Slide43.PNG) 101 | 102 | 이 때 이미지를 저장할 Compute Gallery도 함께 생성합니다. 103 | 104 | ![컴퓨팅 갤러리 생성](./images/Slide44.PNG) 105 | 106 | 컴퓨팅 갤러리 내 이미지 정의도 함께 생성합니다. 107 | 108 | ![이미지 정의 생성](./images/Slide45.PNG) 109 | 110 | 이미지 버전은 0.0.0으로 명시합니다. 111 | 112 | ![이미지 버전 명시](./images/Slide46.PNG) 113 | 114 | 5. 리소스 배포가 완료됐을 경우 definition리소스를 클릭하여 0.1.0 버전의 이미지를 하나 더 생성합니다. 115 | 116 | ![이미지 정의 리소스 선택](./images/Slide47.PNG) 117 | 118 | ![0.1.0 버전 추가](./images/Slide48.PNG) 119 | 120 | 이미지의 버전 변경(0.0.0 -> 0.1.0)만 확인할 것이기 때문에 기존 luavm의 disk를 기반으로 0.1.0 버전의 이미지를 만듭니다. 121 | 122 | ![가상머신 디스크 선택](./images/Slide49.PNG) 123 | 124 | 6. 0.1.0 버전까지 제작 후 비용 절감을 위해 luavm을 바로 삭제하실 수 있습니다. 125 | 126 | ![가상머신 삭제](./images/Slide50.PNG) 127 | 128 | ![연관된 리소스 함께 삭제](./images/Slide51.PNG) 129 | 130 | ## 이미지 기반으로 VMSS 생성하기 131 | 132 | 1. 컴퓨팅 갤러리에서 0.0.0 이미지를 기반으로 VMSS를 생성합니다. 133 | 134 | ![애저 컴퓨팅 갤러리 검색](./images/Slide52.PNG) 135 | 136 | ![이미지 정의 클릭](./images/Slide53.PNG) 137 | 138 | 0.0.0 버전을 선택하여 VMSS 만들기 버튼을 클릭합니다. 139 | 140 | ![000 버전 선택](./images/Slide54.PNG) 141 | 142 | ![000 VMSS 버전 만들기 버튼 클릭](./images/Slide55.PNG) 143 | 144 | 2. 'Uniform 모드(균일성 모드)'를 선택합니다. 145 | 146 | ![균일성 모드](./images/Slide56.PNG) 147 | 148 | 이미지 버전이 0.0.0이 맞는지 확인합니다. 또한 실습의 편의성을 위해 인증 형식은 암호를 선택합니다. 필요한 값을 모두 입력하였으면 '검토+만들기' 버튼을 눌러 리소스를 배포합니다. 149 | 150 | ![VMSS 설정값 확인](./images/Slide57.PNG) 151 | 152 | 3. 리소스가 배포되었으면 생성된 luavmss의 '확장 중 - 구성'탭에 들어가서 오토스케일링을 설정합니다. '규칙 추가'버튼을 눌러 오토스케일링 조건을 입력합니다. 153 | 154 | ![메트릭 기반 오토스케일링 설정](./images/Slide588.PNG) 155 | 156 | CPU Percentage가 30% 초과일 경우 스케일아웃, 미만일 경우 스케일인 조건을 설정합니다. 조금 더 빠른 스케일 아웃을 위해 기간은 5분으로 설정합니다. 157 | 158 | ![스케일아웃 조건 추가](./images/Slide59.PNG) 159 | 160 | 스케일인 규칙도 추가합니다. 161 | 162 | ![스케일인 조건 추가](./images/Slide60.PNG) 163 | 164 | ![스케일인 조건 설정](./images/Slide61.PNG) 165 | 166 | 마지막으로 최소값, 최대값, 기본값에 각각 1, 10, 2를 입력한 후 저장 버튼을 누릅니다. 기본값은 메트릭 수집이 안되는 상황에서 유지할 인스턴스 개수를 의미합니다. 167 | 168 | ![최소값 최대값 기본값](./images/Slide62.PNG) 169 | 170 | 저장 후 규모 감축 정책 탭에서 OldestVM 옵션을, 알리기 탭에서 알림을 받을 이메일을 선택한 후 저장 버튼을 누릅니다. 171 | 172 | ![감축 규모 정책](./images/Slide64.PNG) 173 | 174 | ![알림](./images/Slidenotify.png) 175 | 176 | 4. 인스턴스 탭에서 현재 배포된 VM들이 최신 모델인지 확인합니다. 177 | 178 | ![최신 모델 여부 확인](./images/Slide65.PNG) 179 | 180 | 그리고 0번 인스턴스를 클릭해서 어떤 이미지를 기반으로 생성되었는지 확인할 수 있습니다. 181 | 182 | ![인스턴스 이미지 클릭](./images/Slide66.PNG) 183 | 184 | ![인스턴스 이미지 버전 확인인](./images/Slide67.PNG) 185 | 186 | 혹은 shell.azure.com에서 CLI를 통해 아래 명령어를 통해 현재 참조중인 이미지를 확인할 수 있습니다. 187 | 188 | ```bash 189 | az vmss show –resource-group luarg –name luavmss 190 | ``` 191 | 192 | ![CLI 명령어 확인](./images/Slide68.PNG) 193 | 194 | 5. 이제 VMSS가 참조중인 이미지 버전을 0.1.0으로 바꿔봅니다. 아래 명령어를 통해 바꿀 수 있습니다. 195 | 196 | > 클라우드 쉘에서 붙여넣기는 윈도우 OS에서는 Ctrl + Shift + V 이고 Mac OS에서는 Command + V 입니다 197 | 198 | ```bash 199 | az vmss update \ 200 | --resource-group luarg \ 201 | --name luavmss \ 202 | --set virtualMachineProfile.storageProfile.*imageReference.id*=/subscriptions/{yourAzureSubscriptionID}/luarg/providers/Microsoft.Compute/galleries/luacg/images/luadefinition/versions/0.1.0 203 | ``` 204 | 205 | 여기서 imageReference.id는 아래 화면에서 확인하실 수 있습니다. 206 | 207 | ![imagereferenceid 확인](./images/Slide69.PNG) 208 | 209 | ![이미지 레퍼런스 버전 010 확인](./images/Slide70.PNG) 210 | 211 | 혹은 아래 화면처럼 포털에서 참조하는 이미지 버전을 바꿀 수 있습니다. 212 | 213 | ![포털에서 참조 이미지 010 버전으로 변경](./images/010portal.png) 214 | 215 | 이렇게 CLI 명령어와 포털을 통해 참조 이미지를 바꾸는 방법을 확인했습니다. 216 | 217 | VMSS에서 참조하는 이미지 버전은 바꾸었으나 기존 인스턴스는 여전히 0.0.0버전입니다. 아래 명령어를 통해서 확인합니다. 218 | 219 | ```bash 220 | az vmss show --name luavmss --resource-group luarg --instance-id 0 221 | ``` 222 | 223 | ![인스턴스 이미지 버전 000](./images/Slide71.PNG) 224 | 225 | 6. VMSS의 인스턴스 탭에서 확인해 보니 참조 이미지를 변경했기 때문에 최신 모델이 아니라고 표시된 것을 확인할 수 있습니다. 0번 인스턴스에 stress를 주기 위해 0번 인스턴스를 클릭한 후 직렬 콘솔을 클릭합니다. 226 | 227 | ![최신 모델 아님](./images/Slide72.PNG) 228 | 229 | ![인스턴스 직렬 콘솔 접속](./images/Slide73.PNG) 230 | 231 | 직렬 콘솔의 경우 id와 password를 통한 VM 접속만 허용합니다. id와 password를 입력해서 접속한 후 아래 명령어를 통해 stress를 줍니다. 232 | 233 | ```bash 234 | stress --cpu 4 235 | ``` 236 | 237 | ![스트레스 명령어 사용](./images/Slide74.PNG) 238 | 239 | 잠시 후 VMSS 인스턴스 탭에서 기존에 없던 2번과 3번 인스턴스가 생성된 것을 확인할 수 있습니다. 또한 0번, 1번 인스턴스와 달리 최신 모델임을 역시 확인할 수 있습니다. 240 | 241 | ![스케일아웃으로 인한 인스턴스 추가 및 최신 모델인 010 확인](./images/Slide75.PNG) 242 | 243 | CLI를 통해서도 확인할 수 있습니다. 244 | 245 | ```bash 246 | az vmss show --name luavmss --resource-group luarg --instance-id 2 247 | ``` 248 | 249 | ![스케일아웃 된 인스턴스 이미지 버전 확인 010](./images/Slide76.PNG) 250 | 251 | 다시 직렬 콘솔 화면으로 돌아와 Ctrl + C 를 눌러 스트레스 툴을 중지시킵니다. 252 | 253 | ![직렬 콘솔 화면에서 스트레스 툴 중지](./images/Slide77.PNG) 254 | 255 | 7. CPU Percentage가 낮아짐에 따라 Oldest VM인 0번 및 1번 인스턴스가 삭제되는 것을 확인할 수 있습니다. 이로써 0.0.0버전을 참조하는 VM은 모두 삭제되었고, 0.1.0버전을 참조하는 VM만 남게 되었습니다. 256 | 257 | ![oldestVM 스케일인](./images/Slide78.PNG) 258 | 259 | 여기까지 스케일링을 조건을 통해 이미지 버전을 업데이트 하는 과정을 학습하셨습니다. 실습 환경에서는 CPU Percentage 메트릭을 기반으로 스케일링 하였으나, 실제 운영 환경에서는 매뉴얼 스케일링(수동 크기 조정)으로 조작하실 수 있습니다. 260 | 261 | ## 애저 모니터를 통한 스케일링 알림 설정 262 | 263 | VMSS에서 스케일 알림 기능을 제공하지만 애저 모니터에서도 알림 설정이 가능합니다. VMSS에서 설정하는 경우 지정된 이메일로만 알림 설정이 가능했다면, 애저 모니터를 통한 알림은 사용자가 지정한 '작업 그룹'에 대해 메일 / SMS / 앱으로 알림이 가능합니다. 더불어 알림 발생 시 action을 발생시킬 수 있습니다. 작업 그룹은 여러 규칙에 대해 알림을 받도록 설정할 수 있고 애저 모니터에서 알림 설정시에 전체적인 관리가 가능합니다. 264 | 265 | 1. vmss에서 활동 로그 탭을 클릭한 후 스케일인시와 스케일아웃시에 발생한 활동 로그를 확인합니다. 266 | 267 | ![활동 로그에서 스케일인 스케일아웃 이벤트 확인](./images/Slide79.PNG) 268 | 269 | 2. Autoscale scale down completed를 선택 후 '새로운 경고 규칙' 버튼을 클릭합니다. 270 | 271 | ![test](./images/Slide80.PNG) 272 | 273 | 범위를 확인합니다. 현재 실습에서는 luavmss에 대한 알림만 설정하도록 하겠습니다. 274 | 275 | ![새로운 경고 규칙 버튼 클릭](./images/Slide81.PNG) 276 | 277 | '조건'탭에서 실패와 성공시 알림을 받을 수 있도록 선택합니다. 278 | 279 | ![실패와 성공시 알림](./images/Slide82.PNG) 280 | 281 | 알림을 받을 그룹을 생성해야 합니다. 작업 그룹 만들기 버튼을 선택합니다. 282 | 283 | ![작업 그룹 만들기 클릭](./images/Slide83.PNG) 284 | 285 | ![작업 그룹 이름 설정정](./images/Slide84.PNG) 286 | 287 | ![작업 그룹에 추가될 이메일 입력](./images/Slide85.PNG) 288 | 289 | 알림 이름을 설정하고 검토+만들기 버튼을 클릭합니다. 290 | 291 | ![작업 그룹 알림 이름 입력](./images/Slide86.PNG) 292 | 293 | 작업 그룹 이름에 방금 만든 그룹이 추가된 것을 확인합니다. 294 | 295 | ![작업 그룹 생성 확인](./images/Slide87.PNG) 296 | 297 | 세부 정보에서 경고 규칙 이름을 입력한 후 검토+만들기 버튼을 클릭합니다. 그리고 스케일아웃에 대해서도 같은 방법으로 알림을 설정합니다. 298 | 299 | ![경고 규칙 이름 입력](./images/Slide88.PNG) 300 | 301 | 3. 작업 그룹에 포함되면 아래와 같은 이메일을 받게 됩니다. 302 | 303 | ![작업 그룹에 이메일 입력시 받게되는 알림 이메일](./images/Slide89.PNG) 304 | 305 | 4. 스케일링 액션이 발생하면 아래와 같이 이메일로 알림을 받게 됩니다. 306 | 307 | ![알림 설정시 받게되는 이메일](./images/Slide90.PNG) 308 | 309 | 310 | ## 마무리 311 | 312 | 마지막으로 실습에 사용했던 리소스를 모두 삭제합니다. 313 | 314 | 315 | ## 추가 링크 316 | 317 | 추가적인 학습을 원하시는 분은 아래 링크를 참고하실 수 있습니다. 318 | 319 | - [VMSS Flex 소개](https://youtu.be/2BrckSF7ICI) 320 | - [애저 마스터 클래스 V2 인트로](https://youtu.be/BlSVX1WqTXk) 321 | - [애저 CLI를 사용하여 가상 머신 확장 집합 만들기 및 관리](https://learn.microsoft.com/ko-kr/azure/virtual-machine-scale-sets/tutorial-create-and-manage-cli?WT.mc_id=dotnet-87053-juyoo) 322 | - [활동 로그에서 보이는 flapping 이란?](https://learn.microsoft.com/ko-kr/azure/azure-monitor/autoscale/autoscale-flapping?WT.mc_id=dotnet-87053-juyoo) 323 | - [자동 OS 업그레이드 설정 요구사항](https://learn.microsoft.com/ko-kr/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-upgrade?WT.mc_id=dotnet-87053-juyoo#automatic-os-image-upgrade-for-custom-images) 324 | -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide35.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide35.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide36.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide36.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide37.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide37.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide38.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide38.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide39.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide39.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide40.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide40.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide41.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide41.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide42.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide42.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide43.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide43.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide44.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide44.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide45.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide45.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide46.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide46.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide47.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide47.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide48.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide48.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide49.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide49.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide50.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide50.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide51.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide51.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide52.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide52.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide53.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide53.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide54.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide54.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide55.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide55.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide56.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide56.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide57.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide57.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide588.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide588.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide59.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide59.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide60.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide60.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide61.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide61.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide62.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide62.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide63.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide63.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide64.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide64.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide65.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide65.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide66.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide66.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide67.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide67.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide68.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide68.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide69.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide69.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide70.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide70.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide71.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide71.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide72.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide72.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide73.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide73.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide74.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide74.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide75.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide75.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide76.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide76.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide77.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide77.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide78.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide78.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide79.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide79.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide80.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide80.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide81.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide81.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide82.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide82.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide83.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide83.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide84.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide84.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide85.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide85.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide86.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide86.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide87.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide87.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide88.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide88.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide89.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide89.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide90.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slide90.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slidenotify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/azure-vmss-scaling-and-alert-screenshots/Slidenotify.png -------------------------------------------------------------------------------- /02-azure-vmss-scaling/azure-vmss-scaling-and-alert.md: -------------------------------------------------------------------------------- 1 | # 애저 VMSS와 스케일링 시나리오 확인하기 2 | 이번 핸즈온랩 세션을 통해 VMSS용 이미지 생성, Compute Gallery 활용, 스케일링 규칙 설정 및 알림 설정에 관해 알아봅니다. 핸즈온랩 데모 시나리오는 아래와 같습니다. 3 | 4 | --- 5 | ## 데모 시나리오 6 | 7 | ### 실습 주제 8 | - VMSS에서 제공하는 스케일링 조건을 직접 활용해서 VM 이미지를 업데이트 합니다. 9 | 10 | ### 실습 목표 # 11 | - VMSS에서 제공하는 스케일링 기능을 확인하고 컴퓨팅 갤러리 및 애저 모니터 알림 기능을 실제로 구현해 봅니다. 12 | 13 | ### VMSS 데모 시나리오 # 14 | 15 | 1. 커스텀 이미지 제작용 VM을 한 대 배포합니다(luavm). 16 | 2. 배포한 VM에 stress툴을 설치합니다. 17 | 3. VM을 기반으로 이미지를 두 장 만들고(0.0.0, 0.1.0), Compute Gallery에 저장합니다. 18 | 4. 0.0.0 이미지를 기반으로 VMSS를 생성합니다(luavmss). 19 | 5. luavmss에 CPU percentage를 기반으로 한 오토스케일링 규칙을 설정합니다. 20 | 6. Scale-In시 OldestVM부터 삭제되도록 규칙을 설정합니다. 21 | 7. luavmss\_0 인스턴스가 어떤 이미지를 참조하고 있는지 확인합니다(0.0.0). 22 | 8. CLI 명령어를 통해 0.1.0 이미지를 참조하도록 설정값을 변경합니다. 23 | - az vmss update --resource-group luarg --name luavmss --set virtualMachineProfile.storageProfile.imageReference.id=/subscriptions/{subscriptionID}/resourceGroups/luarg/providers/Microsoft.Compute/galleries/luacg/images/luadefinition/versions/0.1.0 24 | 9. CLI 명령어를 통해 이미지를 0.1.0을 참조하도록 설정하였더라도 개별 인스턴스는 여전히 0.0.0이미지 기반임을 확인합니다. 25 | - az vmss show --name luavmss --resource-group luarg --instance-id 0 26 | 10. 0번 인스턴스의 직렬 콘솔로 접속해서 로그인 후 stress --cpu 4 커맨드를 입력합니다. 27 | 11. 인스턴스가 스케일아웃 된 것과 또한 최신 이미지(0.1.0)를 기반으로 생성됐음을  확인합니다. 28 | 12. stress를 멈추고 스케일인 되는 것을 확인합니다. 이 때 OldestVM인 인스턴스 숫자가 작은 VM부터 삭제되는 것을 확인합니다. 29 | 13. Activity log에서 Autoscale scale up completed 와 Autoscale scale down completed 에 대해 알림을 설정합니다. 30 | 14. 마지막으로 실습에서 사용했던 리소스 그룹을 삭제합니다. 31 | 32 | 33 | --- 34 | 35 | ## 이미지 제작용 VM 생성 36 | 커스텀 이미지 제작용 VM을 생성합니다. 37 | 1. 포털 메인 화면 상단에 위치한 검색창에 '가상 머신'을 입력합니다. 포털 설정이 영어로 되어있는 경우 Virtual Machines를 입력합니다. 38 | 39 | ![가상 머신 리소스 검색](./azure-vmss-scaling-and-alert-screenshots/Slide35.PNG) 40 | 41 | ![가상 머신 생성 버튼 클릭 >](./azure-vmss-scaling-and-alert-screenshots/Slide36.PNG) 42 | 43 | 2. 리소스 생성에 알맞은 구독을 선택하고 리소스 그룹을 새로 생성합니다. stress 툴 사용을 위해 Ubuntu 이미지를 선택합니다. 44 | 45 | ![리소스 그룹 및 우분투 이미지 선택](./azure-vmss-scaling-and-alert-screenshots/Slide37.PNG) 46 | 47 | ![인증 형식은 암호 선택](./azure-vmss-scaling-and-alert-screenshots/Slide38.PNG) 48 | 49 | 퍼블릭에서 VM에 직접 접속하기 위해 22번 포트를 오픈합니다. 50 | ![22번 포트 허용](./azure-vmss-scaling-and-alert-screenshots/Slide39.PNG) 51 | 52 | 모든 설정 값을 확인 후, 이상이 없으면 만들기 버튼을 눌러 가상 머신 리소스를 생성합니다. 53 | ![확인 후 가상머신 리소스 생성](./azure-vmss-scaling-and-alert-screenshots/Slide40.PNG) 54 | 55 | 3. 가상머신 리소스 생성이 완료되었으면 브라우저에서 새로운 탭을 엽니다. 그리고 shell.azure.com에 접속하여 방금 생성한 VM의 public IP로 ssh연결합니다. 56 | ``` 57 | ssh yourID@123.234.345.456 58 | ``` 59 | ![ssh 연결](./azure-vmss-scaling-and-alert-screenshots/Slide41.PNG) 60 | 61 | 62 | VM 생성시 입력했던 id와 password를 이용해 VM에 접속합니다. 63 | 그리고 아래 명령어를 통해 stress 툴을 설치합니다. 64 | ``` 65 | sudo apt-get update 66 | sudo apt install stress 67 | ``` 68 | 4. 툴 설치가 끝났으면 다시 포털 VM 창으로 돌아옵니다. 상단에 위치한 캡쳐 버튼을 눌러 현재 가상머신을 기반으로 이미지를 만듭니다. 69 | 70 | ![가상머신 리소스 화면에서 캡처 버튼 클릭](./azure-vmss-scaling-and-alert-screenshots/Slide43.PNG) 71 | 72 | 이 때 이미지를 저장할 Compute Gallery도 함께 생성합니다. 73 | ![컴퓨팅 갤러리 생성](./azure-vmss-scaling-and-alert-screenshots/Slide44.PNG) 74 | 75 | 컴퓨팅 갤러리 내 이미지 정의도 함께 생성합니다. 76 | ![이미지 정의 생성](./azure-vmss-scaling-and-alert-screenshots/Slide45.PNG) 77 | 78 | 이미지 버전은 0.0.0으로 명시합니다. 79 | ![이미지 버전 명시](./azure-vmss-scaling-and-alert-screenshots/Slide46.PNG) 80 | 81 | 5. 리소스 배포가 완료됐을 경우 definition리소스를 클릭하여 0.1.0 버전의 이미지를 하나 더 생성합니다. 82 | 83 | ![이미지 정의 리소스 선택](./azure-vmss-scaling-and-alert-screenshots/Slide47.PNG) 84 | 85 | ![0.1.0 버전 추가](./azure-vmss-scaling-and-alert-screenshots/Slide48.PNG) 86 | 87 | 이미지의 버전 변경(0.0.0 -> 0.1.0)만 확인할 것이기 때문에 기존 luavm의 disk를 기반으로 0.1.0 버전의 이미지를 만듭니다. 88 | ![가상머신 디스크 선택](./azure-vmss-scaling-and-alert-screenshots/Slide49.PNG) 89 | 90 | 6. 0.1.0 버전까지 제작 후 비용 절감을 위해 luavm을 바로 삭제하실 수 있습니다. 91 | 92 | ![가상머신 삭제](./azure-vmss-scaling-and-alert-screenshots/Slide50.PNG) 93 | 94 | ![연관된 리소스 함께 삭제](./azure-vmss-scaling-and-alert-screenshots/Slide51.PNG) 95 | 96 | 97 | 98 | --- 99 | 100 | ## 이미지 기반으로 VMSS 생성하기 101 | 102 | 1. 컴퓨팅 갤러리에서 0.0.0 이미지를 기반으로 VMSS를 생성합니다. 103 | 104 | ![애저 컴퓨팅 갤러리 검색](./azure-vmss-scaling-and-alert-screenshots/Slide52.PNG) 105 | 106 | ![이미지 정의 클릭](./azure-vmss-scaling-and-alert-screenshots/Slide53.PNG) 107 | 108 | 0.0.0 버전을 선택하여 VMSS 만들기 버튼을 클릭합니다. 109 | ![000 버전 선택](./azure-vmss-scaling-and-alert-screenshots/Slide54.PNG) 110 | 111 | ![000 VMSS 버전 만들기 버튼 클릭](./azure-vmss-scaling-and-alert-screenshots/Slide55.PNG) 112 | 113 | 2. 'Uniform 모드(균일성 모드)'를 선택합니다. 114 | 115 | ![균일성 모드](./azure-vmss-scaling-and-alert-screenshots/Slide56.PNG) 116 | 117 | 이미지 버전이 0.0.0이 맞는지 확인합니다. 또한 실습의 편의성을 위해 인증 형식은 암호를 선택합니다. 필요한 값을 모두 입력하였으면 '검토+만들기' 버튼을 눌러 리소스를 배포합니다. 118 | ![VMSS 설정값 확인](./azure-vmss-scaling-and-alert-screenshots/Slide57.PNG) 119 | 120 | 3. 리소스가 배포되었으면 생성된 luavmss의 '확장 중 - 구성'탭에 들어가서 오토스케일링을 설정합니다. '규칙 추가'버튼을 눌러 오토스케일링 조건을 입력합니다. 121 | 122 | ![메트릭 기반 오토스케일링 설정](./azure-vmss-scaling-and-alert-screenshots/Slide588.PNG) 123 | 124 | CPU Percentage가 30% 초과일 경우 스케일아웃, 미만일 경우 스케일인 조건을 설정합니다. 조금 더 빠른 스케일 아웃을 위해 기간은 5분으로 설정합니다. 125 | ![스케일아웃 조건 추가](./azure-vmss-scaling-and-alert-screenshots/Slide59.PNG) 126 | 127 | 스케일인 규칙도 추가합니다. 128 | ![스케일인 조건 추가](./azure-vmss-scaling-and-alert-screenshots/Slide60.PNG) 129 | 130 | ![스케일인 조건 설정](./azure-vmss-scaling-and-alert-screenshots/Slide61.PNG) 131 | 132 | 마지막으로 최소값, 최대값, 기본값에 각각 1, 10, 2를 입력한 후 저장 버튼을 누릅니다. 133 | 기본값은 메트릭 수집이 안되는 상황에서 유지할 인스턴스 개수를 의미합니다. 134 | ![최소값 최대값 기본값](./azure-vmss-scaling-and-alert-screenshots/Slide62.PNG) 135 | 136 | 저장 후 규모 감축 정책 탭에서 OldestVM 옵션을, 알리기 탭에서 알림을 받을 이메일을 선택한 후 저장 버튼을 누릅니다. 137 | ![감축 규모 정책](./azure-vmss-scaling-and-alert-screenshots/Slide64.PNG) 138 | 139 | 140 | ![알림](./azure-vmss-scaling-and-alert-screenshots/Slidenotify.png) 141 | 142 | 4. 인스턴스 탭에서 현재 배포된 VM들이 최신 모델인지 확인합니다. 143 | 144 | ![최신 모델 여부 확인](./azure-vmss-scaling-and-alert-screenshots/Slide65.PNG) 145 | 146 | 그리고 0번 인스턴스를 클릭해서 어떤 이미지를 기반으로 생성되었는지 확인할 수 있습니다. 147 | ![인스턴스 이미지 클릭](./azure-vmss-scaling-and-alert-screenshots/Slide66.PNG) 148 | 149 | ![인스턴스 이미지 버전 확인인](./azure-vmss-scaling-and-alert-screenshots/Slide67.PNG) 150 | 151 | 혹은 shell.azure.com에서 CLI를 통해 아래 명령어를 통해 현재 참조중인 이미지를 확인할 수 있습니다. 152 | ``` 153 | az vmss show –resource-group luarg –name luavmss 154 | 155 | ``` 156 | ![CLI 명령어 확인](./azure-vmss-scaling-and-alert-screenshots/Slide68.PNG) 157 | 158 | 5. 이제 VMSS가 참조중인 이미지 버전을 0.1.0으로 바꿔봅니다. 아래 명령어를 통해 바꿀 수 있습니다. 159 | ****클라우드 쉘에서 붙여넣기는 Ctrl + Shift + V 입니다.**** 160 | ****(Mac의 경우 cmd + v)**** 161 | ``` 162 | az vmss update --resource-group luarg --name luavmss --set virtualMachineProfile.storageProfile.*imageReference.id*=/subscriptions/{yourAzureSubscriptionID}/luarg/providers/Microsoft.Compute/galleries/luacg/images/luadefinition/versions/0.1.0 163 | 164 | ``` 165 | 166 | 여기서 imageReference.id는 아래 화면에서 확인하실 수 있습니다. 167 | ![imagereferenceid 확인](./azure-vmss-scaling-and-alert-screenshots/Slide69.PNG) 168 | 169 | ![이미지 레퍼런스 버전 010 확인](./azure-vmss-scaling-and-alert-screenshots/Slide70.PNG) 170 | 171 | VMSS에서 참조하는 이미지 버전은 바꾸었으나 기존 인스턴스는 여전히 0.0.0버전입니다. 아래 명령어를 통해서 확인합니다. 172 | ``` 173 | az vmss show --name luavmss --resource-group luarg --instance-id 0 174 | 175 | ``` 176 | ![인스턴스 이미지 버전 000](./azure-vmss-scaling-and-alert-screenshots/Slide71.PNG) 177 | 178 | 6. VMSS의 인스턴스 탭에서 확인해 보니 참조 이미지를 변경했기 때문에 최신 모델이 아니라고 표시된 것을 확인할 수 있습니다. 0번 인스턴스에 stress를 주기 위해 0번 인스턴스를 클릭한 후 직렬 콘솔을 클릭합니다. 179 | 180 | ![최신 모델 아님](./azure-vmss-scaling-and-alert-screenshots/Slide72.PNG) 181 | 182 | ![인스턴스 직렬 콘솔 접속](./azure-vmss-scaling-and-alert-screenshots/Slide73.PNG) 183 | 184 | 직렬 콘솔의 경우 id와 password를 통한 VM 접속만 허용합니다. 185 | id와 password를 입력해서 접속한 후 아래 명령어를 통해 stress를 줍니다. 186 | ``` 187 | stress --cpu 4 188 | ``` 189 | ![스트레스 명령어 사용](./azure-vmss-scaling-and-alert-screenshots/Slide74.PNG) 190 | 191 | 잠시 후 VMSS 인스턴스 탭에서 기존에 없던 2번과 3번 인스턴스가 생성된 것을 확인할 수 있습니다. 또한 0번, 1번 인스턴스와 달리 최신 모델임을 역시 확인할 수 있습니다. 192 | ![스케일아웃으로 인한 인스턴스 추가 및 최신 모델인 010 확인](./azure-vmss-scaling-and-alert-screenshots/Slide75.PNG) 193 | 194 | 195 | CLI를 통해서도 확인할 수 있습니다. 196 | ``` 197 | az vmss show --name luavmss --resource-group luarg --instance-id 2 198 | ``` 199 | ![스케일아웃 된 인스턴스 이미지 버전 확인 010](./azure-vmss-scaling-and-alert-screenshots/Slide76.PNG) 200 | 201 | 다시 직렬 콘솔 화면으로 돌아와 Ctrl + C 를 눌러 스트레스 툴을 중지시킵니다. 202 | ![직렬 콘솔 화면에서 스트레스 툴 중지](./azure-vmss-scaling-and-alert-screenshots/Slide77.PNG) 203 | 204 | 7. CPU Percentage가 낮아짐에 따라 Oldest VM인 0번 및 1번 인스턴스가 삭제되는 것을 확인할 수 있습니다. 이로써 0.0.0버전을 참조하는 VM은 모두 삭제되었고, 0.1.0버전을 참조하는 VM만 남게 되었습니다. 205 | 206 | ![oldestVM 스케일인](./azure-vmss-scaling-and-alert-screenshots/Slide78.PNG) 207 | 208 | 여기까지 스케일링을 조건을 통해 이미지 버전을 업데이트 하는 과정을 학습하셨습니다. 실습 환경에서는 CPU Percentage 메트릭을 기반으로 스케일링 하였으나, 실제 운영 환경에서는 매뉴얼 스케일링(수동 크기 조정)으로 조작하실 수 있습니다. 209 | 210 | 211 | --- 212 | 213 | ## 애저 모니터를 통한 스케일링 알림 설정 214 | 215 | VMSS에서 스케일 알림 기능을 제공하지만 애저 모니터에서도 알림 설정이 가능합니다. VMSS에서 설정하는 경우 지정된 이메일로만 알림 설정이 가능했다면, 애저 모니터를 통한 알림은 사용자가 지정한 '작업 그룹'에 대해 메일 / SMS / 앱으로 알림이 가능합니다. 더불어 알림 발생 시 action을 발생시킬 수 있습니다. 작업 그룹은 여러 규칙에 대해 알림을 받도록 설정할 수 있고 애저 모니터에서 알림 설정시에 전체적인 관리가 가능합니다. 216 | 217 | 1. vmss에서 활동 로그 탭을 클릭한 후 스케일인시와 스케일아웃시에 발생한 활동 로그를 확인합니다. 218 | 219 | ![활동 로그에서 스케일인 스케일아웃 이벤트 확인](./azure-vmss-scaling-and-alert-screenshots/Slide79.PNG) 220 | 221 | 2. Autoscale scale down completed를 선택 후 '새로운 경고 규칙' 버튼을 클릭합니다. 222 | 223 | ![test](./azure-vmss-scaling-and-alert-screenshots/Slide80.PNG) 224 | 225 | 범위를 확인합니다. 현재 실습에서는 luavmss에 대한 알림만 설정하도록 하겠습니다. 226 | ![새로운 경고 규칙 버튼 클릭](./azure-vmss-scaling-and-alert-screenshots/Slide81.PNG) 227 | 228 | '조건'탭에서 실패와 성공시 알림을 받을 수 있도록 선택합니다. 229 | ![실패와 성공시 알림](./azure-vmss-scaling-and-alert-screenshots/Slide82.PNG) 230 | 231 | 알림을 받을 그룹을 생성해야 합니다. 작업 그룹 만들기 버튼을 선택합니다. 232 | 233 | ![작업 그룹 만들기 클릭](./azure-vmss-scaling-and-alert-screenshots/Slide83.PNG) 234 | 235 | ![작업 그룹 이름 설정정](./azure-vmss-scaling-and-alert-screenshots/Slide84.PNG) 236 | 237 | ![작업 그룹에 추가될 이메일 입력](./azure-vmss-scaling-and-alert-screenshots/Slide85.PNG) 238 | 239 | 알림 이름을 설정하고 검토+만들기 버튼을 클릭합니다. 240 | ![작업 그룹 알림 이름 입력](./azure-vmss-scaling-and-alert-screenshots/Slide86.PNG) 241 | 242 | 작업 그룹 이름에 방금 만든 그룹이 추가된 것을 확인합니다. 243 | ![작업 그룹 생성 확인](./azure-vmss-scaling-and-alert-screenshots/Slide87.PNG) 244 | 245 | 세부 정보에서 경고 규칙 이름을 입력한 후 검토+만들기 버튼을 클릭합니다. 그리고 스케일아웃에 대해서도 같은 방법으로 알림을 설정합니다. 246 | ![경고 규칙 이름 입력](./azure-vmss-scaling-and-alert-screenshots/Slide88.PNG) 247 | 248 | 3. 작업 그룹에 포함되면 아래와 같은 이메일을 받게 됩니다. 249 | 250 | ![작업 그룹에 이메일 입력시 받게되는 알림 이메일](./azure-vmss-scaling-and-alert-screenshots/Slide89.PNG) 251 | 252 | 4. 스케일링 액션이 발생하면 아래와 같이 이메일로 알림을 받게 됩니다. 253 | 254 | ![알림 설정시 받게되는 이메일](./azure-vmss-scaling-and-alert-screenshots/Slide90.PNG) 255 | 256 | --- 257 | ## 마무리 258 | 마지막으로 실습에 사용했던 리소스를 모두 삭제합니다. 259 | 260 | --- 261 | ## 추가 링크 262 | 추가적인 학습을 원하시는 분은 아래 링크를 참고하실 수 있습니다. 263 | - https://youtu.be/2BrckSF7ICI 264 | - https://youtu.be/BlSVX1WqTXk 265 | - https://learn.microsoft.com/en-us/azure/virtual-machine-scale-sets/tutorial-create-and-manage-cli 266 | 267 | -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/010portal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/010portal.png -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide35.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide35.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide36.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide36.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide37.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide37.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide38.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide38.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide39.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide39.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide40.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide40.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide41.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide41.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide42.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide42.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide43.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide43.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide44.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide44.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide45.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide45.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide46.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide46.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide47.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide47.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide48.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide48.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide49.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide49.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide50.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide50.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide51.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide51.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide52.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide52.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide53.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide53.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide54.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide54.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide55.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide55.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide56.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide56.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide57.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide57.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide588.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide588.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide59.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide59.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide60.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide60.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide61.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide61.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide62.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide62.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide63.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide63.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide64.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide64.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide65.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide65.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide66.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide66.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide67.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide67.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide68.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide68.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide69.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide69.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide70.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide70.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide71.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide71.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide72.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide72.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide73.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide73.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide74.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide74.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide75.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide75.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide76.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide76.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide77.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide77.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide78.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide78.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide79.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide79.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide80.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide80.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide81.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide81.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide82.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide82.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide83.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide83.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide84.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide84.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide85.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide85.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide86.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide86.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide87.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide87.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide88.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide88.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide89.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide89.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slide90.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slide90.PNG -------------------------------------------------------------------------------- /02-azure-vmss-scaling/images/Slidenotify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/images/Slidenotify.png -------------------------------------------------------------------------------- /02-azure-vmss-scaling/lua.ep2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/02-azure-vmss-scaling/lua.ep2.pdf -------------------------------------------------------------------------------- /03-azure-serverless-web-application/README.md: -------------------------------------------------------------------------------- 1 | # 애저 기반 서버리스 웹 애플리케이션 개발 실습 2 | 3 | - [애저 기반 서버리스 웹 애플리케이션 개발 실습](#애저-기반-서버리스-웹-애플리케이션-개발-실습) 4 | - [실습 주제](#실습-주제) 5 | - [실습 내용](#실습-내용) 6 | - [애저 스토리지 계정 생성하기](#애저-스토리지-계정-생성하기) 7 | - [애저 펑션 만들기](#애저-펑션-만들기) 8 | - [HTML 파일 만들기](#html-파일-만들기) 9 | - [스토리지 계정에 HTML 파일 넣기](#스토리지-계정에-html-파일-넣기) 10 | - [구성 테스트](#구성-테스트) 11 | - [관련 실습](#관련-실습) 12 | 13 | 14 | ## 실습 주제 15 | 16 | 본 실습에서는 애저 펑션을 활용하여 서버리스 환경에서 웹 애플리케이션을 만드는 것으로, 별도의 서버 개설 없이 웹 애플리케이션을 개발 및 실행하는 것을 목표로 합니다. 서버리스 앱을 만들기 위해서는 애플리케이션의 프론트앤드에서부터 백앤드까지 지원해주는 애저 스토리지 설정이 필요합니다. 실습에 사용될 HTML파일은 새롭게 만들어진 애저 스토리지 계정에 호스팅 됩니다. 애저 스토리지 계정, 애저 펑션을 새로 설정하고, 테스트를 위한 HTML 페이지를 만들 것입니다. 17 | 18 | ### 실습 내용 19 | 20 | - 애저 스토리지 계정 생성하기 21 | - 애저 펑션 만들기 22 | - HTML 파일 만들기 23 | - 스토리지 계정에 HTML 파일 넣기 24 | - 구성 테스트 25 | 26 | 27 | 28 | ## 애저 스토리지 계정 생성하기 29 | 30 | 31 | 32 | 애저 스토리지 계정은 마이크로소프트 애저 스토리지 솔루션 중 하나로, Blob 스토리지에서의 파일 공유, 큐, 테이블, 디스크 등 모든 애저 스토리지 데이터 개체를 포함한 데이터 저장소를 관리합니다. 애저 스토리지 계정은 유니크한 네임스페이스를 제공하여 HTTP나 HTTPS를 통해 어디에서나 데이터를 접근할 수 있게 도와줍니다. 본 실습을 하기 위해서는 애저 스토리지 계정을 구축해야 하며, 크게 두 가지의 방법이 존재합니다. 애저 클라우드 셸 접속을 하거나 VS Code를 통해 실행이 가능하며, 본 실습에서는 사용자의 편의를 위해 애저 클라우드 셸에 접속하여 웹 브라우저에서 CLI(Command-Line Interface)를 사용합니다. 33 | 34 | 1. 애저 포털([https://portal.azure.com/](https://portal.azure.com/))에 접속하여, 사용 가능한 계정으로 로그인합니다. 35 | 36 | ![애저 클라우드 셸](./images/HOL001.png) 37 | 38 | 2. 애저 클라우드 셸([https://shell.azure.com](https://shell.azure.com))에 접속합니다. 39 | 40 | ![애저 클라우드 셸](./images/HOL001.png) 41 | 42 | 3. 접속한 애저 환경에 탑재된 스토리지가 없을 경우 아래와 같은 화면이 나타납니다. 희망하는 구독명을 입력한 뒤 [스토리지 만들기]를 클릭해줍니다. 43 | 44 | ![애저 클라우드 셸을 위한 애저 스토리지 생성](./images/HOL002.png) 45 | 46 | 4. Bash와 PowerShell 중 [PowerShell]을 선택하면, 로딩 후 커맨드를 입력할 수 있는 환경이 나타납니다. 47 | 48 | ![애저 클라우드 셸 - 단계 1](./images/HOL003.png) 49 | 50 | 5. 현재 접속되어 있는 계정에 포함된 구독 정보를 확인하기 위해 아래의 커맨드를 입력한 뒤 엔터키를 입력합니다. 51 | 52 | ```powershell 53 | az account list --query [].[name,id] 54 | ``` 55 | 56 | ![애저 클라우드 셸 - 단계 2](./images/HOL004.png) 57 | 58 | 6. 리소스 그룹을 생성하기 위하여 아래의 커맨드를 입력한 뒤 엔터키를 입력합니다. 59 | 60 | ```powershell 61 | az group create ` 62 | --location southeastasia ` 63 | --name RG_Serverless 64 | ``` 65 | 66 | ![애저 클라우드 셸 - 단계 3](./images/HOL005.png) 67 | 68 | 7. 애저 스토리지 계정를 생성하기 위하여 아래의 커맨드를 입력한 뒤 엔터키를 입력합니다. 69 | 단, 스토리지 계정의 이름을 정할 때는 소문자와 숫자 조합만 입력이 가능함을 유의하기 바랍니다. 70 | 71 | ```powershell 72 | az storage account create ` 73 | --location southeastasia ` 74 | --name saserverless0 ` 75 | --resource-group RG_Serverless ` 76 | --sku Standard_LRS ` 77 | --kind StorageV2 78 | ``` 79 | 80 | ![애저 클라우드 셸 - 단계 4](./images/HOL006.png) 81 | 82 | 8. 웹사이트 호스팅을 위해 필요한 자료들이 저장될 애저 스토리지 Blob에 권한 설정을 하기 위해 다음의 커맨드를 입력한 뒤 엔터키를 입력합니다. 83 | 84 | ```powershell 85 | az storage blob service-properties update ` 86 | --account-name saserverless0 ` 87 | --static-website ` 88 | --index-document index.html 89 | ``` 90 | 91 | ![애저 클라우드 셸 - 단계 5](./images/HOL007.png) 92 | 93 | 9. 애저 포탈에서 '스토리지 계정'에 접속하여 좌측 메뉴 '데이터 관리' 내 '정적 웹 사이트'를 클릭합니다. 94 | 95 | ![애저 스토리지 계정 - 단계 1](./images/HOL008.png) 96 | 97 | 10. '정적 웹 사이트'의 설정으로 '사용'으로 변경한 뒤, 다음과 같이 정보를 변경합니다. 98 | 웹 애플리케이션의 랜딩 페이지가 될 index.html 파일은 현재 존재하지 않지만, 추후에 생성하게 됩니다. 99 | 100 | - 인덱스 문서 이름 : index.html 101 | 102 | ![애저 스토리지 계정 - 단계 2](./images/HOL009.png) 103 | 104 | 11. 저장 후 나타나게 되는 '기본 엔드포인트' 주소는 별도로 저장해두기 바랍니다. 105 | 106 | ![애저 스토리지 계정 - 단계 3](./images/HOL010.png) 107 | 108 | 109 | ## 애저 펑션 만들기 110 | 111 | 112 | 113 | 애저 펑션은 이벤트 기반의 서버리스 컴퓨팅 플랫폼을 사용하여 서버리스 애플리케이션 개발을 가속화 및 간소화해줍니다. 엔드 투 엔드 개발 환경에서 이미 익숙한 프로그래밍 언어를 지원하며, 추가 설정 없이 로컬에서 빌드 및 디버그하고 클라우드에서 대규모로 배포 및 운영하며 트리거와 바인딩을 사용하여 서비스를 통합합니다. 114 | 115 | 서버리스 웹 애플리케이션의 프론트엔드를 담당하는 HTML 웹페이지는 애저 스토리지 계정에 저장되어 있으며, 실제 웹페이지에서의 기능 작동과 실행을 담당하는 앤드포인트는 JavaScript에 저장되어 있습니다. 116 | 117 | 1. 애플리케이션 내에서 사용될 애저 함수를 구성하기 위해 환경을 준비합니다. 다음의 커맨드를 입력한 뒤 엔터키를 입력합니다. 118 | 119 | ```powershell 120 | az functionapp create ` 121 | --resource-group RG_Serverless ` 122 | --consumption-plan-location southeastasia ` 123 | --name functionserverless0 ` 124 | --storage-account saserverless0 ` 125 | --runtime node ` 126 | --functions-version 3 127 | ``` 128 | 129 | ![애저 펑션 - 단계 1](./images/HOL011.png) 130 | 131 | 2. 구성이 완료된 후 애저 클라우드 셸에서 자세한 정보를 확인할 수 있는 링크를 발견할 수 있습니다. 예를 들어 `https://portal.azure.com/#resource/subscriptions/{{구독_ID}}/resourceGroups/RG_Serverless/providers/microsoft.insights/components/functionserverless0/overview`와 같은 형태의 링크로 존재합니다. 132 | 133 | 3. 실제 리소스 그룹과 애플리케이션 내 기능들이 실행되기 위해서는 CORS의 설정을 변경해야 합니다. 이때 마지막 항목에는 이전에 복사해 두었던 정적 웹 페이지의 URL을 입력합니다. 다음의 커맨드를 입력한 뒤 엔터키를 입력합니다. 134 | 135 | ```powershell 136 | az functionapp cors add ` 137 | --resource-group RG_Serverless ` 138 | --name functionserverless0 ` 139 | --allowed-origins https://cs1100320023c1d742c.z23.web.core.windows.net/ 140 | ``` 141 | 142 | ![애저 펑션 - 단계 2](./images/HOL012.png) 143 | 144 | 4. 애저 포탈에서 '함수 앱'에 접속하여 좌측 메뉴 'API' 내 'CORS'를 클릭합니다. 145 | 146 | ![애저 펑션 - 단계 3](./images/HOL013.png) 147 | 148 | 5. '허용된 원본'에 새롭게 추가한 사용자의 정적 웹사이트 URL이 포함되어 있는지 확인합니다. 149 | 150 | 6. 함수 앱 내에서 실제 애플리케이션에 사용할 함수 앱을 추가합니다. 좌측 메뉴 '함수' 내 '함수'를 선택한 뒤, [만들기] 버튼을 클릭합니다. [만들기]의 경우 활성화가 되기 까지 몇 초간의 로딩이 필요할 수 있습니다. 151 | 152 | ![애저 펑션 - 단계 4](./images/HOL014.png) 153 | 154 | 7. 다음과 같이 설정 후 '템플릿 선택' 내에서 'HTTP trigger'를 선택합니다. 155 | 156 | - 개발 환경 : 포털에서 개발 157 | 158 | ![애저 펑션 - 단계 5](./images/HOL015.png) 159 | 160 | 8. 다음과 같이 설정 후 하단의 [만들기] 버튼을 클릭합니다. 161 | 162 | - 새 함수 : FnToDoList 163 | - Authorization level : Anonymous 164 | 165 | ![애저 펑션 - 단계 6](./images/HOL016.png) 166 | 167 | 9. 좌측 메뉴 '개발자' 내 '코드 + 테스트'를 선택합니다. HTTP로 트리거링이 되었을 때 index.html 파일에 함께 실행되는 실제 JavaScript 파일을 확인합니다. 168 | 169 | ![애저 펑션 - 단계 7](./images/HOL017.png) 170 | 171 | 10. 다음과 같이 설정 후 'URL' 값을 복사합니다. 172 | 173 | - 키 : default(Function Key) 174 | 175 | ![애저 펑션 - 단계 8](./images/HOL018.png) 176 | 177 | ## HTML 파일 만들기 178 | 179 | 웹 애플리케이션의 랜딩 페이지인 index.html 파일을 사용자가 원하는대로 만들어줍니다. 180 | 181 | 182 | ## 스토리지 계정에 HTML 파일 넣기 183 | 184 | 본 단계에서는 모든 설정을 마친 뒤 실제 웹 애플리케이션이 구동될 수 있는 index.html 파일을 애저 환경에 복사해봅니다. 185 | 186 | 1. 애저 포탈에서 '스토리지 계정'에 접속하여 좌측 메뉴 '데이터 관리' 내 '정적 웹 사이트'를 클릭합니다. 187 | 188 | 2. 정적 웹 사이트를 호스팅하기 위해 애저 스토리지 컨테이너를 만들었습니다.’ 아래의 '$web' 를 선택합니다. 189 | 190 | ![스토리지 계정 내 HTML 파일 작업 - 단계 1](./images/HOL019.png) 191 | 192 | 3. 상단의 [업로드] 버튼을 클릭합니다. 193 | 194 | ![스토리지 계정 내 HTML 파일 작업 - 단계 2](./images/HOL020.png) 195 | 196 | 4. 우측 다이얼로그에 작성한 HTML 파일을 업로드한 뒤 [업로드] 버튼을 클릭합니다. 197 | 198 | ![스토리지 계정 내 HTML 파일 작업 - 단계 3](./images/HOL021.png) 199 | 200 | 5. 정상적으로 HTML 파일이 업로드 되었는지 확인합니다. 201 | 202 | ![스토리지 계정 내 HTML 파일 작업 - 단계 4](./images/HOL022.png) 203 | 204 | 205 | ## 구성 테스트 206 | 207 | 본 단계에서는 서버리스로 구성한 웹 애플리케이션이 정상적으로 작동하는지 확인합니다. 208 | 209 | 1. 애저 스토리지 계정 생성하기 단계의 11번째에서 저장한 '엔드 포인트' 주소를 웹 브라우저를 통해 접근합니다. 210 | 211 | 2. 정상적으로 홈페이지가 작동하는지 확인합니다. 212 | 213 | 3. 여기까지 애저 서버리스를 활용해 간단한 웹 애플리케이션을 직접 구성해보았습니다. 214 | 215 | 216 | ## 관련 실습 217 | 218 | 아래 URL을 통해 다른 네트워크 실습들도 진행해 보실 수 있습니다. 219 | 220 | - [서버리스 애플리케이션 만들기](https://learn.microsoft.com/ko-kr/training/paths/create-serverless-applications/?WT.mc_id=dotnet-87053-juyoo) 221 | - [서버리스 웹 애플리케이션 아키텍처](https://learn.microsoft.com/ko-kr/azure/architecture/reference-architectures/serverless/web-app?WT.mc_id=dotnet-87053-juyoo) 222 | - [서버리스 웹 애플리케이션 만들기 실습](https://learn.microsoft.com/ko-kr/labs/build2018/serverlesswebapp/?WT.mc_id=dotnet-87053-juyoo) 223 | 224 | 225 | 226 | **긴 시간 동안 수고 많으셨습니다 🙂** 227 | -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL001.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL002.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL003.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL004.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL005.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL006.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL007.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL008.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL009.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL010.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL011.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL012.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL013.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL014.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL015.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL016.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL017.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL018.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL019.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL020.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL021.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/HOL022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/03-azure-serverless-web-application/images/HOL022.png -------------------------------------------------------------------------------- /03-azure-serverless-web-application/images/image.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/README.md: -------------------------------------------------------------------------------- 1 | # 애저 스트림 애널리틱스 기반 실시간 스트리밍 데이터 분석하기 2 | 3 | - [애저 스트림 애널리틱스 기반 실시간 스트리밍 데이터 분석하기](#애저-스트림-애널리틱스-기반-실시간-스트리밍-데이터-분석하기) 4 | - [실습 주제](#실습-주제) 5 | - [리소스 그룹 생성](#리소스-그룹-생성) 6 | - [템플릿 다운로드](#템플릿-다운로드) 7 | - [스토리지 계정 생성](#스토리지-계정-생성) 8 | - [Azure Synapse Analytics 생성](#azure-synapse-analytics-생성) 9 | - [생성한 리소스 점검](#생성한-리소스-점검) 10 | - [EventHub 설정](#eventhub-설정) 11 | - [(Optional) Power BI로 시각화 하기](#optional-power-bi로-시각화-하기) 12 | 13 | 14 | ## 실습 주제 15 | 16 | 애저 스트림 애널리틱스 서비스를 이용하여 실시간으로 발생하는 데이터 에서 원하는 데이터만 추출하여 애저 시냅스 애널리틱스에 적재하고, 추가로 Power BI 를 이용하여 데이터를 시각화 하는 것을 목표로 합니다. 17 | 18 | 19 | 20 | ## 리소스 그룹 생성 21 | 22 | 애저 리소스 그룹은 애저 리소스를 보유하는 단위로, 생성한 리소스에 대한 메타데이터를 저장합니다. 하나의 리소스 그룹의 범위는 쉽게 배포, 업데이트, 삭제 할 수 있도록 동일한 수명 주기를 공유하는 서비스(혹은 프로젝트) 단위로 하는 것을 권장합니다. 23 | 24 | 1. 애저 포털 상단의 검색 바에서 '리소스 그룹'을 검색하여 서비스 메뉴로 이동합니다. 25 | 26 | ![애저포털 검색바에서 리소스 그룹 검색](./images/image00.png) 27 | 28 | 2. 만들기 버튼을 선택합니다. 29 | 30 | ![만들기 버튼 선택](./images/image61.png) 31 | 32 | 3. 리소스 그룹에 이름을 입력합니다. (예:hol-rg) 영역은 (Asia Pacific) Korea Central로 선택합니다. 33 | 34 | ![리소스 그룹 이름 입력&Korea Central영역 선택](./images/image02.png) 35 | 36 | 37 | 38 | ## 템플릿 다운로드 39 | 40 | 스트리밍 데이터를 생성하는 어플리케이션을 배포하기 위하여 [TollApp Azure Template 배포](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2Fazure-stream-analytics%2Fmaster%2FSamples%2FTollApp%2FVSProjects%2FTollAppDeployment%2Fazuredeploy.json) 링크를 클릭하여 템플릿을 애저 포털로 불러옵니다. 41 | 42 | 1. 리소스 그룹에서 전 단계에서 생성한 리소스 그룹을 선택합니다. 43 | 44 | ![생성한 리소스 그룹 선택](./images/image03.png) 45 | 46 | 47 | 48 | ## 스토리지 계정 생성 49 | 50 | 1. 전 단계의 템플릿 배포가 진행되는 동안 애저 포탈 상단 검색 바에서 '스토리지 계정'을 검색하여 서비스 메뉴로 이동합니다. 51 | 52 | ![애저 포털 검색바에서 스토리지 계정 검색](./images/image04.png) 53 | 54 | 2. 만들기 버튼을 선택합니다. 55 | 56 | ![만들기 버튼 선택](./images/image05.png) 57 | 58 | 3. 리소스 그룹에서 생성한 리소스 그룹을 선택하고, 스토리지 계정 이름을 고유한 이름으로 작성합니다. 아래 설정에 맞게 선택한 뒤, 다음을 눌러 '데이터 보호' 단계로 이동합니다.
59 | 60 | - 지역 : (Asia Pacific) Korea Central 61 | - 프리미엄 계정 유형 : 블록 Blob 62 | - 중복 : LRS 63 | 64 | ![프리미엄, 블록 유형 선택](./images/image06.png) 65 | 66 | 4. 아래 두 정책의 체크 박스를 해제한 뒤 [Review] 버튼을 눌러 설정을 최종 점검한 다음 생성을 시작합니다. 67 | 68 | ![복구 정책 체크 해제](./images/image07.png) 69 | 70 | 5. 스토리지 계정 생성이 완료되면 리소스 페이지의 왼쪽 중간에 위치한 '설정' - 'Data Lake Gen2 업그레이드'를 선택합니다. 71 | 72 | ![Data Lake Gen2 업그레이드 선택](./images/image08.png) 73 | 74 | 6. 단계 별 진행을 완료하여 업그레이드를 진행 합니다. 75 | 76 | ![1,2,3단계 진행](./images/image09.png) 77 | 78 | 79 | 80 | 81 | ## Azure Synapse Analytics 생성 82 | 83 | 1. 애저 포탈 상단 검색 바에서 Azure synapse analytics를 검색하여 서비스 페이지로 이동합니다. 84 | 85 | ![애저 포털 검색바에서 Azure Synapse Analytics 검색](./images/image10.png) 86 | 87 | 2. 만들기 버튼을 선택합니다. 88 | 89 | ![만들기 버튼 선택](./images/image11.png) 90 | 91 | 3. 리소스 그룹에서 생성한 리소스 그룹을 선택하고 작업 영역 이름을 적절하게 작성합니다. (예:holws) 아래 설정에 맞게 선택한 뒤 파일 시스템 이름에서 새로 만들기를 선택합니다.
92 | 93 | - 지역 : Korea Central 94 | - Data Lake Storage Gen2 선택 : 구독에서 95 | - 계정이름 : {생성한 스토리지 계정 명} 96 | - 파일 시스템 이름 : [새로 만들기] 97 | 98 | ![작업 영역 이름 작성, Data Lake Storage Gen2 선택](./images/image12.png) 99 | ![파일 시스템 이름 새로 만들기](./images/image13.png) 100 | 101 | 4. 다음 단계인 '보안'에서 'SQL Server 관리자 로그인' 계정의 암호를 작성하고 검토 후 생성을 시작합니다. 102 | 103 | ![SQL관리자 계정, 암호 작성](./images/image14.png) 104 | 105 | 5. 생성이 완료되면 Synapse 작업영역 개요 화면에서 '새 전용 SQL풀'을 선택합니다. 106 | 107 | ![새 전용 SQL풀 선택](./images/image26.png) 108 | 109 | 6. 전용 SQL 풀 이름을 적절히 작성한 뒤 성능 수준은 DW100c로 설정하고 검토 후 생성을 시작합니다. 110 | 111 | ![풀 이름 작성, DW100c선택](./images/image27.png) 112 | 113 | 7. 새 전용 SQL풀 생성이 완료되면 작업 영역 웹 URL을 확인할 수 있습니다. 114 | 115 | ![개요 화면에서 작업 영역 웹 URL 선택](./images/image24.png) 116 | 117 | 8. Synapse 작업 영역 웹 페이지에서 '새로만들기'-'SQL스크립트'를 선택합니다. 118 | 119 | ![SQL스크립트 선택](./images/image25.png) 120 | 121 | 9. 쿼리 입력창 중간에 '...'을 선택하여 연결 대상을 생성한 전용 SQL풀로 변경합니다. 그 다음 아래 쿼리를 쿼리창에 입력한 뒤 실행합니다.
쿼리가 정상적으로 실행되면 '모두 게시' 버튼을 선택합니다. 122 | 123 | ```sql 124 | CREATE TABLE carsummary 125 | ( 126 | Make nvarchar(20), 127 | CarCount int, 128 | times datetime 129 | ) 130 | WITH ( CLUSTERED COLUMNSTORE INDEX ) ; 131 | ``` 132 | 133 | ![생성한 풀 선택](./images/image28.png) 134 | 135 | 10. 작성한 SQL 스크립트가 변경될 내용에 포함된 것을 확인하고 '게시'를 선택합니다. 136 | 137 | ![게시 버튼 선택](./images/image29.png) 138 | 139 | 140 | 141 | ## 생성한 리소스 점검 142 | 143 | 실행에 필요한 애저 리소스들은 모두 생성이 완료 되었습니다. 템플릿을 이용하여 배포한 서비스들 각각의 역할에 대하여 검토를 합니다.
본 실습에 사용되는 애저 서비스들은 아래와 같습니다.
144 | 145 | - Synapse Analytics : Stream Analytics의 Output 역할로 정재된 데이터들을 저장. 146 | - Stream Analytics : Event Hub로 들어온 스트리밍 데이터들을 필요한 정보만 추출하여 Synapse Analytics로 전달. 147 | - App Service : Toll App역할. Toll gate로 들어오는 나가는 차량 정보를 생성하여 Event Hub로 전달. 148 | - Event Hub : App Service에서 발생한 데이터를 라이브 스트리밍 하여 Stream Analytics로 전달. 149 | 150 | ![리소스 그룹 개요](./images/image15.png) 151 | 152 | 153 | ## EventHub 설정 154 | 155 | 1. 리소스 그룹의 리소스 목록에서 생성된 Event Hubs 네임스페이스를 선택합니다. 156 | 157 | ![생성된 이벤트허브 선택](./images/image16.png) 158 | 159 | 2. 리소스 페이지 왼쪽 메뉴바 중간에 'Event Hubs'를 선택합니다. 160 | 161 | ![Event Hubs선택](./images/image17.png) 162 | 163 | 3. 이벤트 허브 목록 중에 'entrystream'을 선택합니다. 164 | 165 | ![entrystream선택](./images/image18.png) 166 | 167 | 4. 왼쪽 메뉴 바 중간에 '기능'-'데이터 처리'를 선택합니다. 168 | 169 | ![데이터 처리 선택](./images/image19.png) 170 | 171 | 5. 화면을 스크롤 하여 하단에 '빈 캔버스로 시작'을 선택합니다. 172 | 173 | ![빈 캔버스로 시작 선택](./images/image20.png) 174 | 175 | 6. 새 Stream Analytics 작업 명을 적절하게 입력합니다.(예:hol-asa-job) 176 | 177 | ![작업명 입력](./images/image21.png) 178 | 179 | 7. 이벤트 허브에 연결하기 위한 정보가 적절한지 확인 하고 '연결' 버튼을 선택합니다.
180 | 181 | - Serialization : Json 182 | - 인증 모드 : 연결 문자열 183 | - 이벤트 허브 공유 액세스 키 이름 : RootManageSharedAccessKey 184 | 185 | ![연결 버튼 선택](./images/image22.png) 186 | 187 | 8. 연결이 완료 되면 미리 보기 창에서 데이터가 정상적으로 불러오는지 확인합니다. 188 | 189 | ![불러온 데이터 확인](./images/image23.png) 190 | 191 | 9. '운영'-'그룹화 방법'을 선택합니다. 192 | 193 | ![그룹화 방법 선택](./images/image30.png) 194 | 195 | 10. 그룹화 방법 박스와 이벤트 허브 박스를 연결선을 드래그하여 연결합니다. 오른쪽 그룹화 방법 설정 화면에서 아래 설정에 맞게 선택 후 저장합니다.
196 | 197 | - 집계 유형 : 개수 198 | - 필드 : Make 199 | - 집계 그룹화 기준 : Make 200 | - 지속 시간 : 3분 201 | 202 | ![집계 유형 추가](./images/image31.png) 203 | 204 | ![그룹화 기준 Make선택](./images/image32.png) 205 | 206 | 11. '운영'-'필드 관리'를 선택합니다. 207 | 208 | ![필드 관리 선택](./images/image33.png) 209 | 210 | 12. 필드 관리 박스와 그룹화 방법 박스를 연결선을 드래그하여 연결합니다. 오른쪽 필드 추가 버튼을 눌러 Make를 선택합니다.
211 | 다시 필드 추가 버튼을 눌러 COUNT_Make를 선택한 뒤, 이름을 CarCount로 변경합니다. Window_End_Time 필드를 추가하여 이름을 times로 변경한 뒤 저장합니다. 212 | 213 | ![드래그&필드추가Make](./images/image34.png) 214 | 215 | ![필드추가COUNT_Make&이름변경](./images/image35.png) 216 | 217 | ![필드추가Window_ENd_Time&이름변경](./images/image36.png) 218 | 219 | 13. '출력'-'Synapse'를 선택합니다. 220 | 221 | ![Synape선택](./images/image37.png) 222 | 223 | 14. Synapse 박스와 필드 관리 박스를 연결선을 드래그 하여 연결합니다. 오른쪽 Synapse 설정에서 '선택'을 선택합니다. 224 | 225 | ![드래그&선택](./images/image38.png) 226 | 227 | 15. '스토리지 계정 추가' 버튼을 선택합니다. 228 | 229 | ![스토리지 계정 추가 선택](./images/image39.png) 230 | 231 | 16. 생성한 Blob 스토리지 계정명이 선택되었는지 확인하고 저장 버튼을 선택합니다. 232 | 233 | ![저장 선택](./images/image40.png) 234 | 235 | 17. 생성한 전용SQL풀과 SQL사용자 계정 정보를 입력하고 테이블 명을 carsummary로 입력한 다음 '연결'을 선택합니다. 236 | 237 | ![SQL사용자 계정 정보 입력](./images/image41.png) 238 | 239 | ![테이블명carsummary](./images/image42.png) 240 | 241 | 18. 미리 보기 창에서 데이터를 확인한 다음 '저장'버튼을 선택합니다. 242 | 243 | ![저장 선택](./images/image43.png) 244 | 245 | 19. '시작' 버튼을 누른 다음 '지금' 출력, 스트리밍 단위 '3'으로 설정하여 '시작'버튼을 선택합니다. 246 | 247 | ![시작 버튼 선택](./images/image44.png) 248 | 249 | 20. Stream Analytics 작업 창을 닫은 후, 상태 창에서 Running중인 것을 확인 합니다. 250 | 251 | ![상태 확인](./images/image46.png) 252 | 253 | 21. Synapse Analytics 웹 페이지 왼쪽 메뉴에서 'Data' 탭을 선택한 뒤, 'SQL데이터베이스'-'{생성한 전용 SQL풀}'-'carsummary'-'...' 버튼을 선택 한뒤 [새 SQL스크립트]-[상위 100개 행 선택]을 선택하여 데이터가 정상적으로 추출되는 것을 확인 합니다. 254 | 255 | ![상위 100개 데이터 검색](./images/image56.png) 256 | 257 | 258 | 259 | ## (Optional) Power BI로 시각화 하기 260 | 261 | 사전에 Windows 환경에서 Power BI Desktop이 설치 되어 있어야 하며, 작업 영역이 생성 되어 있어야 합니다. 262 | 263 | 1. Synapse 작업 영역 페이지 왼쪽 바에서 'Manage'를 선택한 뒤, 'Linked services' 새로 만들기를 선택 합니다. 264 | 265 | ![연결된 서비스 새로 만들기](./images/image47.png) 266 | 267 | 2. 'Power BI에 연결'을 선택 합니다. 268 | 269 | ![PowerBI에 연결 선택](./images/image48.png) 270 | 271 | 3. '이름'에 적절한 네이밍을 입력한 후 '만들기'버튼을 선택 합니다. 272 | 273 | ![만들기 버튼 선택](./images/image49.png) 274 | 275 | 4. '모두 게시' 버튼을 선택 합니다. 276 | 277 | ![모두 게시 버튼 선택](./images/image50.png) 278 | 279 | 5. 변경 될 서비스 내용을 확인한 후 '게시' 버튼을 선택 합니다. 280 | 281 | ![게시 버튼 선택](./images/image51.png) 282 | 283 | 6. 왼쪽 바에서 'Develop'을 선택한 다음 'Power BI 데이터 세트'를 선택하여 새 Power BI 데이터 세트를 생성합니다. 284 | 285 | ![+새 Power BI 데이터 센트 선택](./images/image52.png) 286 | 287 | 7. '시작' 버튼을 선택 합니다. 288 | 289 | ![시작 버튼 선택](./images/image53.png) 290 | 291 | 8. 생성한 전용 SQL풀을 데이터 원본으로 선택 합니다. 292 | 293 | ![계속 버튼 선택](./images/image54.png) 294 | 295 | 9. .pbids파일을 다운로드 받습니다. 296 | 297 | ![다운로드 선택](./images/image55.png) 298 | 299 | 10. 다운로드 받은 .pbids 파일을 실행하면 carsummary 테이블을 로드 합니다. 300 | 301 | ![로드 버튼 선택](./images/image57.png) 302 | 303 | 11. 연결 설정은 'Direct Query'로 선택 합니다. 304 | 305 | ![Direct Query선택](./images/image58.png) 306 | 307 | 12. 맨 오른쪽 데이터에서 CarCount, Make, times 를 체크하고 시각화에서 '꺾은 선 형 그래프'를 선택합니다.
308 | 309 | - x축 : times 310 | - y축 : CarCount 311 | - 범례 : Make 312 | 313 | ![차트 데이터 확인](./images/image59.png) 314 | 315 | 316 | 추가로 실습 가능한 링크는 아래와 같습니다. 317 | 318 | - [IoT스트리밍 데이터 처리](https://learn.microsoft.com/ko-kr/azure/stream-analytics/stream-analytics-get-started-with-azure-stream-analytics-to-process-data-from-iot-devices?WT.mc_id=dotnet-87053-juyoo) 319 | - [단일 클릭 배포를 사용하여 클릭 동향 분석기 빌드](https://learn.microsoft.com/ko-kr/azure/stream-analytics/quick-start-build-application?view=iotedge-1.4&WT.mc_id=dotnet-87053-juyoo) 320 | - [Power BI에서 사기성 호출 시각화](https://learn.microsoft.com/ko-kr/azure/stream-analytics/stream-analytics-real-time-fraud-detection?WT.mc_id=dotnet-87053-juyoo) 321 | -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image00.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image01.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image02.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image03.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image04.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image05.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image06.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image07.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image08.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image09.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image10.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image11.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image12.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image13.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image14.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image15.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image16.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image17.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image18.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image19.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image20.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image21.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image22.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image23.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image24.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image25.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image26.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image27.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image28.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image29.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image30.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image31.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image32.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image33.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image34.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image35.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image36.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image37.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image38.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image39.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image40.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image41.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image42.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image43.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image44.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image45.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image46.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image47.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image48.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image49.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image50.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image51.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image52.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image53.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image54.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image55.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image56.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image57.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image58.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image59.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image60.png -------------------------------------------------------------------------------- /04-azure-stream-analytics-hol/images/image61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/04-azure-stream-analytics-hol/images/image61.png -------------------------------------------------------------------------------- /05-aoai-prompt-engineering/README.md: -------------------------------------------------------------------------------- 1 | # Azure OpenAI 활용하기 2 | 3 | ## 실습 주제 4 | 5 | [Azure OpenAI](https://learn.microsoft.com/ko-kr/azure/cognitive-services/openai/overview)에서 OpenAI에서 제공한는 다양한 LLM(Large Language Model) 를 활용하여 서비스를 구성해볼 수 있습니다. 6 | 7 | - [Azure OpenAI 모델](https://learn.microsoft.com/ko-kr/azure/cognitive-services/openai/concepts/models) 8 | 9 | 10 | 11 | 12 | ## 사전 준비 13 | 14 | ### 액세스 신청 15 | 16 | 현재 이 서비스에 대한 액세스 권한은 애플리케이션에서만 부여됩니다. [신청 사이트](https://aka.ms/oai/access)에서 양식을 작성하여 Azure OpenAI에 대한 액세스를 신청할 수 있습니다. 17 | 18 | ### 리소스 만들기 19 | - Azure에서 [OpenAI 리소스 만들기](https://learn.microsoft.com/ko-kr/azure/cognitive-services/openai/how-to/create-resource?pivots=web-portal) 20 | 21 | 22 | 23 | 24 | ## 실습 내용 25 | 26 | ### Azure AI Studio - Chat 27 | 1. Azure AI Studio 방문 페이지에서 채팅 플레이그라운드를 선택합니다. 28 | 29 | ![플레이그라운드](images/image1.png) 30 | 31 | 2. 채팅 플레이그라운드에서 ChatGPT 서비스를 활용하기 위해 도우미 설정을 합니다. 32 | - 도우미 설정 드롭다운을 사용하여 미리 로드된 몇 가지 시스템 메시지 예제를 선택하여 시작할 수 있습니다. 33 | 34 | - 시스템 메시지는 동작하는 방법과 응답을 생성할 때 참조해야 하는 컨텍스트에 대한 지침을 모델에 제공합니다. 도우미의 성격을 설명하고, 대답해야 하는 것과 대답해서는 안 되는 것을 말하고, 응답의 형식을 지정하는 방법을 말할 수 있습니다. 35 | 36 | - 몇 가지 샷 예제를 추가하면 모델이 컨텍스트 내 학습에 사용하는 대화형 예제를 제공할 수 있습니다. 37 | 38 | - 채팅 플레이그라운드를 사용하는 동안 언제든지 코드 보기를 선택하여 현재 채팅 세션 및 설정 선택에 따라 미리 채워진 Python, curl 및 json 코드 샘플을 볼 수 있습니다. 그런 다음, 이 코드를 사용하고 애플리케이션을 작성하여 현재 플레이그라운드에서 수행하고 있는 것과 동일한 작업을 완료할 수 있습니다. 39 | 40 | ![채팅 플레이그라운드](images/image2.png) 41 | 42 | 3. 채팅 세션 43 | - 보내기 단추를 선택하면 입력한 텍스트가 완료 API로 전송되고 결과가 다시 텍스트 상자로 반환됩니다. 44 | 45 | - 채팅 지우기 단추를 선택하여 현재 대화 기록을 삭제합니다. 46 | 47 | 4. 파라미터 설정 48 | 49 | | 이름 | 설명 | 50 | |---|---| 51 | | 배포 | 특정 모델과 연결된 배포 이름입니다. ChatGPT의 경우 gpt-35-turbo 모델을 사용해야 합니다. | 52 | | 온도 | 임의성을 제어합니다. 온도를 낮추면 모델이 더 반복적이고 결정적인 응답을 생성합니다. 온도를 높이면 예기치 않거나 창의적인 응답이 발생합니다. 온도 또는 상위 P 중 하나만 조정해 보세요. | 53 | | 최대 길이(토큰) | 모델 응답당 토큰 수 한도를 설정합니다. API는 프롬프트(시스템 메시지, 예제, 메시지 기록 및 사용자 쿼리 포함)와 모델의 응답 간에 공유되는 최대 4,096개의 토큰을 지원합니다. 하나의 토큰은 일반적인 영어 텍스트의 경우 대략 4자입니다. | 54 | | 상위 확률 | 온도와 마찬가지로 임의성을 제어하지만 다른 방법을 사용합니다. 상위 P를 낮추면 모델의 토큰 선택 대상이 유사 토큰으로 좁혀지게 됩니다. 상위 P를 늘리면 모델이 가능성이 높고 낮은 토큰 중에서 선택할 수 있습니다. 온도 또는 상위 P 중 하나만 조정해 보세요. | 55 | | 멀티 턴 대화 | 각 새 API 요청에 포함할 과거 메시지 수를 선택합니다. 이렇게 하면 새 사용자 쿼리에 대한 모델 컨텍스트를 제공할 수 있습니다. 이 숫자를 10으로 설정하면 5개의 사용자 쿼리와 5개의 시스템 응답이 생성됩니다. | 56 | | 중지 시퀀스 | 중지 시퀀스는 모델이 원하는 지점에서 응답을 종료하도록 합니다. 모델 응답은 지정된 시퀀스 이전에 종료되므로 중지 시퀀스 텍스트가 포함되지 않습니다. ChatGPT의 경우 를 사용하면 모델 응답이 후속 사용자 쿼리를 생성하지 않습니다. 최대 4개의 중지 시퀀스를 포함할 수 있습니다. | 57 | 58 | 5. 채팅 세션 시작 59 | 1. 도우미 설정 드롭다운에서 Xbox 고객 지원 에이전트를 선택합니다. 60 | 61 | 2. 시스템 메시지를 업데이트할지 묻는 메시지가 표시되면 계속을 선택합니다. 62 | 63 | 3. 채팅 세션 창에서 "새 Xbox를 구입하는 데 관심이 있습니다"라는 질문을 입력하고 보내기를 선택합니다. 64 | 65 | 4. 다음과 유사한 응답이 수신됩니다. 66 | ![챗응답](images/image3.png) 67 | 68 | 5. "4K를 지원하는 모델은 무엇입니까?"와 같은 후속 질문을 입력합니다. 69 | 70 | ![챗질문](images/image4.png) 71 | 72 | 6. 이제 기본 대화가 있으므로 도우미 설정에서 코드 보기를 선택하면 지금까지 진행된 전체 대화 뒤에 코드가 재생됩니다. 73 | 74 | ```python 75 | #Note: The openai-python library support for Azure OpenAI is in preview. 76 | import os 77 | import openai 78 | openai.api_type = "azure" 79 | openai.api_base = "https://docs-test-001.openai.azure.com/" 80 | openai.api_version = "2023-05-15" 81 | openai.api_key = os.getenv("OPENAI_API_KEY") 82 | 83 | response = openai.ChatCompletion.create( 84 | engine="gpt-35-turbo", # replace this value with the deployment name you chose when you deployed the associated model. 85 | messages = [{"role":"system","content":"You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."},{"role":"user","content":"How much is a PS5?"},{"role":"assistant","content":"I apologize, but I do not have information about the prices of other gaming devices such as the PS5. My primary focus is to assist with issues regarding Xbox devices. Is there a specific issue you are having with your Xbox device that I may be able to help with?"},{"role":"user","content":"I am interested in buying an Xbox?"},{"role":"assistant","content":"Great! There are several Xbox models available in the market, including the Xbox Series X, Xbox Series S, and Xbox One. The Xbox Series X is the latest and most powerful console, while the Xbox Series S is a more affordable option that still offers great performance. The Xbox One is the previous generation console, but it still has a large library of games available to play.\n\nBefore purchasing an Xbox, you may want to consider factors such as your budget, the types of games you want to play, and whether you want to play games in 4K resolution. Once you have decided on a console, you can purchase it from a retailer or directly from the Xbox website. Let me know if you have any other questions or concerns!"},{"role":"user","content":"Which models are 4K?"},{"role":"assistant","content":"Both the Xbox Series X and Xbox One X support 4K resolution gaming. The Xbox Series S, on the other hand, supports up to 1440p resolution gaming, but it can upscale games to 4K. It's worth noting that in order to take advantage of 4K gaming, you'll need a 4K TV or monitor that supports HDR (High Dynamic Range) and HDMI 2.0 or higher."}], 86 | temperature=0, 87 | max_tokens=350, 88 | top_p=0.95, 89 | frequency_penalty=0, 90 | presence_penalty=0, 91 | stop=None) 92 | ``` 93 | 94 | 95 | ### 더 알아보기 96 | 97 | - [Azure OpenAI 활용 | Microsoft Learn](https://learn.microsoft.com/ko-kr/azure/cognitive-services/openai/quickstart?tabs=command-line&pivots=programming-language-studio) 98 | - [프롬프트 엔지니어링](https://github.com/daeungo1/azure-openai-samples/blob/main/quick_start/07_best_practice.ipynb) 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /05-aoai-prompt-engineering/images/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/05-aoai-prompt-engineering/images/.gitkeep -------------------------------------------------------------------------------- /05-aoai-prompt-engineering/images/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/05-aoai-prompt-engineering/images/image1.png -------------------------------------------------------------------------------- /05-aoai-prompt-engineering/images/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/05-aoai-prompt-engineering/images/image2.png -------------------------------------------------------------------------------- /05-aoai-prompt-engineering/images/image3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/05-aoai-prompt-engineering/images/image3.png -------------------------------------------------------------------------------- /05-aoai-prompt-engineering/images/image4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/05-aoai-prompt-engineering/images/image4.png -------------------------------------------------------------------------------- /06-aoai-knowledge-mining/README.md: -------------------------------------------------------------------------------- 1 | # 챗GPT + 기업 데이터 with Azure OpenAI & Cognitive Search 2 | 3 | [![Open Original Github Link](https://img.shields.io/static/v1?style=for-the-badge&label=원본+사이트+바로가기-+Original+GitHub+Link&message=Open&color=brightgreen&logo=github)](https://github.com/Azure-Samples/azure-search-openai-demo#readme) 4 | 5 | 6 | 이 샘플은 RAG(Retrieval Augmented Generation) 패턴을 사용하여 자신의 데이터에 대해 ChatGPT와 같은 경험을 생성하기 위한 몇 가지 접근 방식을 보여줍니다. Azure OpenAI Service를 사용하여 ChatGPT 모델(gpt-35-turbo)에 액세스하고 Azure Cognitive Search를 사용하여 데이터 인덱싱 및 검색을 수행합니다. 7 | 8 | 리포지토리에는 샘플 데이터가 포함되어 있으므로 처음부터 끝까지 시도할 준비가 되었습니다. 이 샘플 응용 프로그램에서는 Contoso Electronics라는 가상의 회사를 사용하며 경험을 통해 직원은 혜택, 내부 정책, 직무 설명 및 역할에 대해 질문할 수 있습니다. 9 | 10 | ![RAG Architecture](image/appcomponents.png) 11 | 12 | ## 특징 13 | 14 | * 채팅 및 Q&A 인터페이스 15 | * 사용자가 인용, 소스 콘텐츠 추적 등으로 응답의 신뢰성을 평가하는 데 도움이 되는 다양한 옵션을 탐색합니다. 16 | * 데이터 준비, 신속한 구성, 모델(ChatGPT)과 인지 검색(Cognitive Search) 간의 상호 작용 오케스트레이션에 대한 가능한 접근 방식을 보여줍니다. 17 | * 행동을 조정하고 옵션을 실험하기 위해 UX에서 직접 설정 18 | 19 | ![Chat screen](image/chatscreen.png) 20 | 21 | ## 시작하기 22 | 23 | > **중요:** 이 예제를 배포하고 실행하려면 **Azure OpenAI 서비스에 대해 액세스가 활성화된 Azure 구독**이 필요합니다. [여기](https://aka.ms/oaiapply)에서 액세스를 요청할 수 있습니다. [여기](https://azure.microsoft.com/free/cognitive-search/)를 방문하여 무료 Azure 크레딧을 받아 시작할 수도 있습니다. 24 | 25 | > **AZURE 리소스 비용** 기본적으로 이 샘플은 월별 비용이 있는 Azure App Service 및 Azure Cognitive Search 리소스와 문서 페이지당 비용이 있는 Form Recognizer 리소스를 만듭니다. infra 폴더 아래의 매개 변수 파일을 변경하여 이 비용을 피하려면 각각의 무료 버전으로 전환할 수 있습니다(고려해야 할 몇 가지 제한이 있지만, 예를 들어 당 최대 1개의 무료 Cognitive Search 리소스를 보유할 수 있음). 무료 Form Recognizer 리소스는 각 문서의 처음 2페이지만 분석합니다.) 26 | 27 | ### 사전 준비 28 | 29 | #### 로컬 환경 준비 작업 30 | - [Azure 개발자 CLI](https://learn.microsoft.com/ko-kr/azure/developer/azure-developer-cli/install-azd?tabs=winget-windows%2Cbrew-mac%2Cscript-linux&pivots=os-windows) 31 | - [파이썬 3+](https://www.python.org/downloads/) 32 | - **중요**: 설치 스크립트가 작동하려면 Python 및 pip 패키지 관리자가 Windows의 경로에 있어야 합니다. 33 | - **중요**: 콘솔에서 `python --version`을 실행할 수 있는지 확인하세요. Ubuntu에서 `python`을 `python3`에 연결하려면 `sudo apt install python-is-python3`을 실행해야 할 수 있습니다. 34 | - [Node.js](https://nodejs.org/en/download/) 35 | - [Git](https://git-scm.com/downloads) 36 | - [Powershell 7+ (pwsh)](https://github.com/powershell/powershell) - Windows 사용자 전용. 37 | - **중요**: PowerShell 명령에서 `pwsh.exe`를 실행할 수 있는지 확인하세요. 이것이 실패하면 PowerShell을 업그레이드해야 할 수 있습니다. 38 | 39 | >참고: Azure 계정에는 [사용자 액세스 관리자](https://learn.microsoft.com/azure/role-based-access-control/built-in)와 같은 `Microsoft.Authorization/roleAssignments/write` 권한이 있어야 합니다. -roles#user-access-administrator) 또는 [소유자](https://learn.microsoft.com/azure/role-based-access-control/built-in-roles#owner). 40 | 41 | 42 | #### GitHub Codespaces 또는 VS Code 원격 컨테이너에서 실행하려면 43 | 44 | 45 | GitHub Codespaces 또는 VS Code 원격 컨테이너를 사용하여 이 리포지토리를 가상으로 실행할 수 있습니다. 아래 버튼 중 하나를 클릭하여 해당 옵션 중 하나에서 이 저장소를 엽니다. 46 | 47 | [![GitHub Codespaces에서 열기](https://img.shields.io/static/v1?style=for-the-badge&label=GitHub+Codespaces&message=Open&color=brightgreen&logo=github)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=599293758&machine=standardLinux32gb&devcontainer_path=.devcontainer%2Fdevcontainer.json&location=WestUs2) 48 | [![원격에서 열기 - 컨테이너](https://img.shields.io/static/v1?style=for-the-badge&label=Remote%20-%20Containers&message=Open&color=blue&logo=visualstudiocode)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/azure-samples/azure-search-openai-demo) 49 | 50 | 51 | ### 실습 진행 52 | 53 | #### 프로젝트 시작하기 54 | 55 | 1. 새 폴더를 만들고 터미널에서 해당 폴더로 전환합니다. 56 | 2. `azd auth login` 실행 57 | 3. `azd init -t azure-search-openai-demo` 실행 58 | * 대상 위치의 경우 이 샘플에 사용된 모델을 현재 지원하는 지역은 **미국 동부** 또는 **미국 중남부**입니다. 최신 지역 및 모델 목록은 [여기](https://learn.microsoft.com/en-us/azure/cognitive-services/openai/concepts/models)를 확인하세요. 59 | * 이 명령은 git 저장소를 초기화하므로 이 저장소를 복제할 필요가 없습니다. 60 | ![RAG Architecture](image/image1.png) 61 | 62 | #### 처음 단계 진행: 63 | 64 | 기존 Azure 서비스가 없고 새 배포에서 시작하려는 경우 다음 명령을 실행합니다. 65 | 66 | 1. `azd up` 실행 - Azure 리소스를 프로비저닝하고 `./data` 폴더에 있는 파일을 기반으로 검색 인덱스를 빌드하는 것을 포함하여 이 샘플을 해당 리소스에 배포합니다. 67 | 68 | ![RAG Architecture](image/image2.png) 69 | 70 | 2. 응용 프로그램이 성공적으로 배포되면 URL이 콘솔에 인쇄된 것을 볼 수 있습니다. 해당 URL을 클릭하면 브라우저에서 애플리케이션과 상호 작용할 수 있습니다. 71 | 72 | 다음과 같이 표시됩니다. 73 | 74 | ![RAG Architecture](image/endpoint2.png) 75 | 76 | 77 | > 참고: 애플리케이션이 완전히 배포되는 데 몇분 정도 걸릴 수 있습니다. "Python 개발자" 시작 화면이 표시되면 잠시 기다렸다가 페이지를 새로 고칩니다. 78 | 79 | 80 | 81 | 82 | #### 기존 리소스 사용: 83 | 84 | 1. `azd env set AZURE_OPENAI_SERVICE {기존 OpenAI 서비스 이름}` 실행 85 | 1. `azd env set AZURE_OPENAI_RESOURCE_GROUP {OpenAI 서비스가 프로비저닝되는 기존 리소스 그룹의 이름}`을 실행합니다. 86 | 1. `azd env set AZURE_OPENAI_CHATGPT_DEPLOYMENT {기존 ChatGPT 배포 이름}`을 실행합니다. ChatGPT 배포가 기본 '채팅'이 아닌 경우에만 필요합니다. 87 | 1. `azd env set AZURE_OPENAI_GPT_DEPLOYMENT {기존 GPT 배포 이름}`을 실행합니다. ChatGPT 배포가 기본 'davinci'가 아닌 경우에만 필요합니다. 88 | 1. `azd up` 실행 89 | 90 | > 참고: 기존 검색 및 저장소 계정을 사용할 수도 있습니다. 기존 리소스를 구성하기 위해 `azd env set`에 전달할 환경 변수 목록은 `./infra/main.parameters.json`을 참조하세요. 91 | 92 | #### 리포지토리의 로컬 복제 배포 또는 재배포: 93 | * 간단히 `azd up`을 실행하십시오. 94 | 95 | #### 로컬에서 실행: 96 | 1. `azd auth login` 실행 97 | 2. dir을 `app`으로 변경 98 | 3. `./start.ps1` 또는 `./start.sh`를 실행하거나 "VS Code 작업: 앱 시작"을 실행하여 로컬에서 프로젝트를 시작합니다. 99 | 100 | #### 환경 공유하기 101 | 102 | 다른 사람에게 완전히 배포된 기존 환경에 대한 액세스 권한을 부여하려면 다음을 실행하십시오. 103 | 104 | 1. [Azure CLI](https://learn.microsoft.com/ko-kr/cli/azure/install-azure-cli) 설치 105 | 1. `azd init -t azure-search-openai-demo` 실행 106 | 1. `azd env refresh -e {environment name}` 실행 - 이 명령을 실행하려면 azd 환경 이름, 구독 ID 및 위치가 필요합니다. 해당 값은 `./azure/{env name에서 찾을 수 있습니다. }/.env` 파일. 이렇게 하면 앱을 로컬에서 실행하는 데 필요한 모든 설정으로 azd 환경의 .env 파일이 채워집니다. 107 | 1. `pwsh ./scripts/roles.ps1` 실행 - 사용자가 로컬에서 앱을 실행할 수 있도록 필요한 모든 역할을 사용자에게 할당합니다. 구독에서 역할을 만드는 데 필요한 권한이 없는 경우 이 스크립트를 실행해야 할 수 있습니다. azd .env 파일 또는 활성 셸에서 `AZURE_PRINCIPAL_ID` 환경 변수를 Azure Id로 설정해야 합니다. 이 ID는 `az account show`로 가져올 수 있습니다. 108 | 109 | 110 | ### 빠른 시작 111 | 112 | * Azure에서: azd에서 배포한 Azure WebApp으로 이동합니다. URL은 azd가 완료되면("Endpoint"으로) 출력되거나 Azure Portal에서 찾을 수 있습니다. 113 | * 로컬에서 실행: 127.0.0.1:5000으로 이동 114 | 115 | #### 웹 앱에서 확인: 116 | * 채팅 또는 Q&A 컨텍스트에서 다른 주제를 시도해 보십시오. 채팅의 경우 후속 질문, 설명을 시도하고 답변을 단순화하거나 정교하게 요청하는 등의 작업을 수행합니다. 117 | * 인용 및 출처 탐색 118 | * "설정"을 클릭하여 다른 옵션, 조정 프롬프트 등을 시도하십시오. 119 | 120 | ## 자원 121 | 122 | * [ChatGPT로 엔터프라이즈 데이터 혁신: Azure OpenAI 및 Cognitive Search를 통한 차세대 앱](https://learn.microsoft.com/ko-kr/azure/search/search-what-is-azure-search) 123 | * [Azure OpenAI 서비스](https://learn.microsoft.com/ko-kr/azure/cognitive-services/openai/overview) 124 | 125 | ### 메모 126 | >참고: 이 데모에 사용된 PDF 문서에는 언어 모델(Azure OpenAI Service)을 사용하여 생성된 정보가 포함되어 있습니다. 이 문서에 포함된 정보는 데모용으로만 제공되며 Microsoft의 의견이나 신념을 반영하지 않습니다. Microsoft는 이 문서에 포함된 정보와 관련하여 완전성, 정확성, 신뢰성, 적합성 또는 가용성에 대해 명시적이든 묵시적이든 어떠한 종류의 진술이나 보증도 하지 않습니다. 모든 권리는 Microsoft에 있습니다. 127 | 128 | ### 자주하는 질문 129 | 130 | ***질문***: Azure Cognitive Search가 대용량 문서 검색을 지원하는 경우 PDF를 청크로 분할해야 하는 이유는 무엇입니까? 131 | 132 | ***답변***: 청킹을 사용하면 토큰 제한으로 인해 OpenAI에 보내는 정보의 양을 제한할 수 있습니다. 콘텐츠를 분해하면 OpenAI에 주입할 수 있는 잠재적인 텍스트 덩어리를 쉽게 찾을 수 있습니다. 우리가 사용하는 청크 방법은 한 청크를 끝내는 문장이 다음 청크를 시작하도록 텍스트의 슬라이딩 윈도우를 활용합니다. 이를 통해 텍스트의 맥락을 잃을 가능성을 줄일 수 있습니다. 133 | 134 | ### 문제 해결 135 | 136 | `azd deploy`를 실행하는 동안 `read /tmp/azd1992237260/backend_env/lib64: is a directory` 오류가 표시되면 `./app/backend/backend_env 폴더`를 삭제하고 `azd deploy`를 다시 실행합니다. 명령. 이 문제는 https://github.com/Azure/azure-dev/issues/1237 에서 추적되고 있습니다. 137 | 138 | 웹앱 배포에 실패하고 브라우저에 '404 찾을 수 없음' 메시지가 표시되면 'azd deploy'를 실행합니다. 139 | -------------------------------------------------------------------------------- /06-aoai-knowledge-mining/image/appcomponents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/06-aoai-knowledge-mining/image/appcomponents.png -------------------------------------------------------------------------------- /06-aoai-knowledge-mining/image/chatscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/06-aoai-knowledge-mining/image/chatscreen.png -------------------------------------------------------------------------------- /06-aoai-knowledge-mining/image/endpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/06-aoai-knowledge-mining/image/endpoint.png -------------------------------------------------------------------------------- /06-aoai-knowledge-mining/image/endpoint2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/06-aoai-knowledge-mining/image/endpoint2.png -------------------------------------------------------------------------------- /06-aoai-knowledge-mining/image/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/06-aoai-knowledge-mining/image/image1.png -------------------------------------------------------------------------------- /06-aoai-knowledge-mining/image/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/06-aoai-knowledge-mining/image/image2.png -------------------------------------------------------------------------------- /07-az-devops-mlops/README.md: -------------------------------------------------------------------------------- 1 | # Azure DevOps를 활용한 MLOps 파이프라인 구성 2 | 3 | ## 실습 주제 4 | 5 | Azure Machine Learning을 사용하면 [Azure DevOps 파이프라인](https://learn.microsoft.com/ko-kr/azure/devops/pipelines/)과 통합하여 기계 학습 수명 주기를 자동화할 수 있습니다. 자동화할 수 있는 일부 작업은 다음과 같습니다. 6 | 7 | - Azure Machine Learning 인프라 배포 8 | - 데이터 준비(추출, 변환, 로드 작업) 9 | - 주문형 스케일 아웃 및 스케일 업으로 기계 학습 모델 학습 10 | - 공용 또는 프라이빗 웹 서비스로 기계 학습 모델 배포 11 | - 배포된 기계 학습 모델 모니터링(예: 성능 분석용) 12 | 13 | ### 사전 준비 14 | 15 | - [서비스 주체 만들기](#서비스-주체-만들기) 16 | - Azure DevOps [조직](https://learn.microsoft.com/ko-kr/azure/devops/organizations/accounts/create-organization) 17 | 18 | ### 실습 내용 19 | 20 | - [Azure DevOps 설정](#azure-devops-설정) 21 | - [원본 리포지토리 설정](#원본-리포지토리-설정) 22 | - [Azure DevOps를 통해 인프라 배포](#azure-devops를-통해-인프라-배포) 23 | - [MLOps 파이프라인 배포](#mlops-파이프라인-배포) 24 | - [엔드포인트 테스트](#엔드포인트-테스트) 25 | 26 | ## 사전 준비 27 | 28 | ### 서비스 주체 만들기 29 | 30 | 실습을 진행하려면 작업하려는 환경 수에 따라 서비스 주체를 만들어야 합니다. 31 | 32 | 1. [Azure 앱 등록](https://entra.microsoft.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade/quickStartType%7E/null/sourceTypeMicrosoft_AAD_IAM)으로 이동합니다. 33 | 2. `새 등록` 버튼을 클릭합니다. 34 | 3. 아래와 같이 구성 후 `등록` 버튼을 클릭합니다. 35 | - 이름 : Azure-ARM-Prod- 36 | - 지원되는 계정 유형 : 모든 조직 디렉터리의 계정(모든 Azure AD 디렉터리 - 다중 테넌트) 37 | 4. 애플리케이션이 생성되면 `인증서 및 암호 메뉴`를 클릭합니다. 38 | 5. `클라이언트 비밀` 탭에서 `새 클라이언트 암호`를 클릭 후 클라이언트 암호를 추가하고, `값`과 `비밀 ID`를 따로 저장해 둡니다. 39 | 40 | ![클라이언트 암호 추가](images/image1.png) 41 | 42 | 6. [애저 포털](https://portal.azure.com/)을 열고 구독 페이지로 이동합니다. 43 | 7. 액세스 제어(IAM) 메뉴를 선택하고 `추가` 버튼을 클릭하고 `역할 할당 추가`를 클릭합니다. 44 | 8. `역할`에서 `권한 있는 관리자 역할` 탭을 클릭하고 `기여자`를 선택한 뒤, `다음` 버튼을 클릭합니다. 45 | 9. `구성원` 탭에서 `다음에 대한 액세스 할당`에서 `사용자, 그룹 또는 서비스 주체`를 선택하고 `구성원 선택` 클릭 후 생성한 서비스 주체를 선택하고 `검토 + 할당` 버튼을 클릭합니다. 46 | 47 | ![역할 할당 추가](images/image2.png) 48 | 49 | 50 | ## 실습 내용 51 | 52 | ### Azure DevOps 설정 53 | 54 | 1. [Azure DevOps](https://go.microsoft.com/fwlink/?LinkId=2014676&githubsi=true&clcid=0x409&WebUserId=2ecdcbf9a1ae497d934540f4edce2b7d)로 이동합니다. 55 | 2. 왼쪽 메뉴에서 자신이 선택한 조직을 선택합니다. 56 | 3. `New project` 버튼을 클릭합니다. 57 | 4. 아래와 같이 설정 후, `Create` 버튼을 클릭합니다. 58 | - Project name : mlops- 59 | - Visibility : Private 60 | 5. 왼쪽 하단의 `Project Settings`을 클릭 후, `Service connections`를 클릭합니다. 61 | 6. `Create service connection` 버튼을 클릭 후, `Connection type`에서 `Azure Resource Manager`를 선택하고 `Next` 버튼을 클릭합니다. 62 | 7. `Authentication method`에서 `Service Principal (manual)`을 선택하고 `Next` 버튼을 클릭합니다. 63 | 8. 아래와 같이 구성한 뒤, `Verify and Save` 버튼을 클릭합니다. 64 | - Environment : Azure Cloud 65 | - Scope Level : Subscription 66 | - Subscription Id : 생성한 구독의 ID 67 | - Subscription Name : 생성한 구독의 이름 68 | - Service Principal Id : 사전 준비에서 생성한 애플리케이션의 ID 69 | - Service Principal key : 사전 준비에서 생성한 애플리케이션의 `클라이언트 암호`의 `값` 70 | - Tenant ID : 생성한 구독이 속해있는 테넌트의 ID 71 | - Service connection name : Azure-ARM-Prod 72 | - Security : Grant access permission to all pipelines 73 | 74 | ![서비스 커넥션 생성](images/image3.png) 75 | 76 | 77 | ### 원본 리포지토리 설정 78 | 79 | 1. [Azure DevOps](https://dev.azure.com/)에서 만든 프로젝트를 엽니다. 80 | 2. 왼쪽 메뉴에서 `Repos` 메뉴를 선택하고 Import a repository에서 `Import` 버튼을 클릭합니다. 81 | 3. Clone URL에 [https://github.com/brjeong-private/mlops-demo.git](https://github.com/brjeong-private/mlops-demo.git) 을 입력하고 `Import` 버튼을 클릭합니다. 82 | 4. 왼쪽 탐색 창 아래쪽에서 `프로젝트 설정`을 엽니다. 83 | 5. Repos에서 `Repositories` 메뉴를 선택하고 이전 단계에서 만든 리포지토리를 선택하고 `Security` 탭을 선택합니다. 84 | 6. User permissions 섹션에서 `mlops-Build Service (koreacentral)` 사용자를 선택합니다. `Contribute / Create branch` 권한을 `Allow`로 변경합니다. 85 | 86 | ![사용자 권한 설정](images/image4.png) 87 | 88 | 7. 왼쪽 메뉴에서 `Pipelines` 메뉴를 선택합니다. Create Pipeline 버튼 옆에 `점 세개가 있는` 버튼을 클릭하고 `Manage security` 를 선택합니다. 89 | 90 | ![파이프라인 보안 설정](images/image5.png) 91 | 92 | 8. `Build Service 계정`을 선택 후, `Edit build pipeline` 권한을 `Allow`로 변경합니다. 93 | 94 | ### Azure DevOps를 통해 인프라 배포 95 | 96 | 1. `mlops-demo` 리포지토리로 이동하여 `config-infra-prod.yml` 파일을 선택합니다. 97 | 2. 이 구성 파일은 고유성을 보장하기 위해 아티팩트 이름의 네임스페이스 및 접미사 값을 사용합니다. 구성에서 다음 섹션을 원하는 대로 업데이트합니다. 98 | 99 | ```yaml 100 | namespace: [5 max random new letters] 101 | postfix: [4 max random new digits] 102 | location: koreacentral 103 | ``` 104 | 105 | 3. 커밋 후 푸시 코드를 선택하여 이러한 값을 파이프라인으로 가져옵니다 106 | 4. `Pipelines` 페이지로 이동합니다. 107 | 5. `Create Pipeline` 버튼을 클릭합니다. 108 | 6. `Azure Repos Git`를 선택하고 생성한 리포지토리를 클릭합니다. 109 | 7. `Existing Azure Pipelines YAML` 파일을 선택합니다. 110 | 8. `Path`에서 `mlops/devops-pipelines/deploy-infra.yml`를 선택하고 `Continue` 버튼을 클릭합니다. 111 | 9. 파이프라인을 실행합니다. 완료될 때까지 몇 분 정도 걸립니다. 파이프라인은 다음 아티팩트를 만들어야 합니다. 112 | - 스토리지 계정, Container Registry, Application Insights, Keyvault 및 Azure Machine Learning 작업 영역 자체를 포함한 작업 영역의 리소스 그룹 113 | - 작업 영역에는 컴퓨팅 클러스터도 만들어집니다. 114 | 10. 이제 MLOps 프로젝트의 인프라가 배포되었습니다. 115 | 116 | ### MLOps 파이프라인 배포 117 | 118 | 1. `Pipelines` 페이지로 이동합니다. 119 | 2. `Create Pipeline` 버튼을 클릭합니다. 120 | 3. `Azure Repos Git`를 선택하고 생성한 리포지토리를 클릭합니다. 121 | 4. `Existing Azure Pipelines YAML` 파일을 선택합니다. 122 | 5. `Path`에서 `mlops/devops-pipelines/deploy-mlops-pipeline.yml`를 선택하고 `Continue` 버튼을 클릭합니다. 123 | 6. 파이프라인을 실행합니다. 완료될 때까지 몇 분 정도 걸립니다. 124 | 125 | ```yaml 126 | stages: 127 | - stage: RunMLOpsPipeline 128 | displayName: Run MLOps Pipeline 129 | 130 | jobs: 131 | - job: DeployMLOpsPipeline 132 | timeoutInMinutes: 120 133 | steps: 134 | - checkout: self 135 | path: s/ 136 | 137 | # 모든 파이프라인에는 Azure CLI에 대한 ML 확장이 필요합니다. AZ CLI 설치부터 시작합니다. 138 | - template: /aml-cli-v2/install-az-cli.yml 139 | 140 | # 이 단계에서는 Azure CLI를 사용하여 Azure ML CLI를 설치합니다. 141 | - template: /aml-cli-v2/install-aml-cli.yml 142 | 143 | # 이 단계는 Azure ML CLI에 대한 기본 작업 영역 및 리소스 그룹을 구성합니다. 144 | # 각 명령에 작업 공간 이름과 리소스 그룹 이름을 전달하는 대신 145 | # 작업 공간은 기본 작업 공간으로 설정됩니다. 146 | # 이 단계는 Azure ML CLI를 사용하여 작업 영역에 연결합니다. 147 | - template: /mlops/azureml/connect/connect-to-workspace.yml 148 | 149 | # 환경 등록 단계는 환경이 존재하는지 여부를 확인합니다. 150 | # 존재하지 않으면 등록합니다. 존재하는 경우 등록을 건너뜁니다. 151 | # 환경이 이미 존재할 때 오류를 피하기 위함입니다. 152 | # 이 단계는 Azure ML CLI를 사용하여 환경을 등록합니다. 153 | - template: /aml-cli-v2/register-environment.yml 154 | parameters: 155 | build_type: conda 156 | environment_name: taxi-train-env 157 | environment_file: mlops/azureml/train/train-env.yml 158 | 159 | # 참고: 이것은 모델 학습을 위한 컴퓨팅 리소스입니다. 160 | # 컴퓨팅 생성 단계는 컴퓨팅이 존재하는지 여부를 확인합니다. 161 | # 이는 컴퓨팅이 아직 존재하지 않을 때 오류를 방지하기 위한 것입니다. 162 | # 존재하지 않으면 생성합니다. 존재하는 경우 생성을 건너뜁니다. 163 | # 이 단계는 Azure ML CLI를 사용하여 컴퓨팅 대상을 만듭니다. 164 | - template: /aml-cli-v2/create-compute.yml 165 | parameters: 166 | cluster_name: $(training_target) 167 | size: $(training_target_sku) 168 | min_instances: ${{ variables.training_target_min_nodes }} 169 | max_instances: ${{ variables.training_target_max_nodes }} 170 | cluster_tier: $(training_target_tier) 171 | 172 | # 이 단계에서는 Azure ML CLI를 사용하여 AML에 데이터를 등록합니다. 173 | - template: /aml-cli-v2/register-data.yml 174 | parameters: 175 | data_type: uri_file 176 | data_name: taxi-data 177 | data_file: mlops/azureml/train/data.yml 178 | 179 | 180 | # 이 단계에서는 Azure ML CLI를 사용하여 파이프라인을 실행합니다. 181 | # 이 단계는 또한 파이프라인을 제출한 후 파이프라인이 완료될 때까지 기다립니다. 182 | # 이것은 프로덕션 파이프라인에 대한 모범 사례가 아닐 수 있습니다. 183 | # 프로덕션에서는 파이프라인을 실행한 다음 다른 단계를 계속할 수 있습니다. 184 | # 파이프라인을 모니터링할 수 있으며 필요한 경우 ML Workspace에서 파이프라인을 중지할 수 있습니다. 185 | - template: /aml-cli-v2/run-pipeline.yml 186 | parameters: 187 | pipeline_file: mlops/azureml/train/pipeline.yml 188 | experiment_name: $(environment)_taxi_fare_train_$(Build.SourceBranchName) 189 | display_name: $(environment)_taxi_fare_run_$(Build.BuildID) 190 | 191 | # 이 단계에서는 Azure ML CLI를 사용하여 온라인 배포를 테스트합니다. 192 | - template: /aml-cli-v2/create-endpoint.yml 193 | parameters: 194 | endpoint_file: mlops/azureml/deploy/online/online-endpoint.yml 195 | 196 | # 이 단계는 Azure ML CLI를 사용하여 온라인 배포를 생성합니다. 197 | - template: /aml-cli-v2/create-deployment.yml 198 | parameters: 199 | deployment_name: taxi-online-dp 200 | deployment_file: mlops/azureml/deploy/online/online-deployment.yml 201 | ``` 202 | 203 | **파이프라인 실행 확인** 204 | 205 | ![파이프라인 실행 확인](images/image6.png) 206 | 207 | **작업 / 파이프라인 / 엔드포인트 생성 확인** 208 | 209 | ![작업 생성 확인](images/image7.png) 210 | 211 | ![파이프라인 생성 확인](images/image8.png) 212 | 213 | ### 엔드포인트 테스트 214 | 215 | 1. 애저 포털에 접속하여 왼쪽 상단 검색 메뉴에서 Machine Learning Studio를 입력하여 페이지로 이동합니다. 216 | 2. 리스트에서 `mlw---prod` 를 선택하고 `Studio 시작하기` 버튼을 클릭합니다. 217 | 3. 왼쪽 메뉴에서 `엔드포인트`를 클릭하고 생성된 `온라인 엔드포인트`를 선택합니다. 218 | 219 | ![엔드포인트 생성 확인](images/image9.png) 220 | 221 | 4. 정상적으로 엔드포인트가 생성됐는지 확인합니다. 엔드포인트 이름 밑의 탭에서 `테스트` 탭을 선택합니다. 222 | 5. 리포지토리의 `/data/taxi-request.json` 파일의 내용을 입력하고 `테스트` 버튼을 클릭합니다. 223 | 224 | ![엔드포인트 테스트](images/image10.png) 225 | 226 | 227 | ### 더 알아보기 228 | 229 | - [MLflow 및 Azure Machine Learning - Azure Machine Learning | Microsoft Learn](https://learn.microsoft.com/ko-kr/azure/machine-learning/concept-mlflow?view=azureml-api-2) 230 | - [GitHub로 MLOps 설정 - Azure Machine Learning | Microsoft Learn](https://learn.microsoft.com/ko-kr/azure/machine-learning/how-to-setup-mlops-github-azure-ml?view=azureml-api-2&tabs=azure-shell) -------------------------------------------------------------------------------- /07-az-devops-mlops/images/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/07-az-devops-mlops/images/.gitkeep -------------------------------------------------------------------------------- /07-az-devops-mlops/images/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/07-az-devops-mlops/images/image1.png -------------------------------------------------------------------------------- /07-az-devops-mlops/images/image10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/07-az-devops-mlops/images/image10.png -------------------------------------------------------------------------------- /07-az-devops-mlops/images/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/07-az-devops-mlops/images/image2.png -------------------------------------------------------------------------------- /07-az-devops-mlops/images/image3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/07-az-devops-mlops/images/image3.png -------------------------------------------------------------------------------- /07-az-devops-mlops/images/image4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/07-az-devops-mlops/images/image4.png -------------------------------------------------------------------------------- /07-az-devops-mlops/images/image5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/07-az-devops-mlops/images/image5.png -------------------------------------------------------------------------------- /07-az-devops-mlops/images/image6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/07-az-devops-mlops/images/image6.png -------------------------------------------------------------------------------- /07-az-devops-mlops/images/image7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/07-az-devops-mlops/images/image7.png -------------------------------------------------------------------------------- /07-az-devops-mlops/images/image8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/07-az-devops-mlops/images/image8.png -------------------------------------------------------------------------------- /07-az-devops-mlops/images/image9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/07-az-devops-mlops/images/image9.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/.gitkeep -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL001.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL002.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL003.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL004.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL005.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL006.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL007.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL008.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL009.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL010.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL011.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL012.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL013.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL014.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL015.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL016.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL017.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL018.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL019.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL020.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL021.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL022.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL023.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL024.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL025.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL026.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL027.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL028.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL029.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL030.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL031.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL032.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL033.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL034.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL034.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL035.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL036.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL037.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL037.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL038.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL039.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL039.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL040.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL041.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL042.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL042.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL043.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL043.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL044.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL044.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL045.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL045.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL046.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL046.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL047.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL047.png -------------------------------------------------------------------------------- /08-aoai-power-platform/images/HOL048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/08-aoai-power-platform/images/HOL048.png -------------------------------------------------------------------------------- /09-gh-codespaces-copilot/01-codespace.md: -------------------------------------------------------------------------------- 1 | # GitHub Codespaces 설정하기 2 | 3 | ## 코드스페이스 인스턴스 만들기 4 | 5 | 아래 그림과 같이 코드스페이스 인스턴스를 생성합니다. 6 | 7 | ![새 코드스페이스 인스턴스 만들기](./images/codespace-01.png) 8 | 9 | 10 | ## 디렉토리 및 파일 만들기 11 | 12 | 1. `.devcontainer` 디렉토리를 리포지토리 루트에 만듭니다. 13 | 1. `.devcontainer` 디렉토리 아래 아래와 같은 세 파일을 만듭니다. 14 | - `Dockerfile` 15 | - `devcontainer.json` 16 | - `on-create.sh` 17 | 1. `on-create.sh` 파일에 실행 권한을 줍니다. 18 | 19 | ```bash 20 | chmod +x .devcontainer/on-create.sh 21 | ``` 22 | 23 | 24 | ## `Dockerfile` 25 | 26 | [https://github.com/devcontainers/images](https://github.com/devcontainers/images/tree/main/src) 또는 Docker Hub에서 베이스 이미지를 참조합니다. 아래는 몇가지 예시입니다. 27 | 28 | - Ubuntu 20.04 LTS 기반에 .NET SDK 7을 설치한 베이스 이미지 29 | 30 | ```dockerfile 31 | ARG VARIANT="7.0-jammy" 32 | FROM mcr.microsoft.com/dotnet/sdk:${VARIANT} 33 | 34 | ENV PATH $PATH:/home/vscode/.dotnet:/home/vscode/.dotnet/tools 35 | ``` 36 | 37 | 38 | ## `devcontainer.json` 39 | 40 | `devcontainer.json` 파일의 기본 구조는 아래와 같습니다. 41 | 42 | ```jsonc 43 | { 44 | "name": "DevContainer 이름", 45 | 46 | "build": { 47 | // 컨테이너 기본 이미지 설정 48 | }, 49 | 50 | "forwardPorts": [ 51 | // 포트 포워딩 52 | ], 53 | 54 | "features": { 55 | // 추가 기능 56 | }, 57 | 58 | "overrideFeatureInstallOrder": [ 59 | // 추가 기능 설치 순서 60 | ], 61 | 62 | "customizations": { 63 | "vscode": { 64 | // 코드스페이스 커스터마이징 65 | "extensions": [ 66 | // VS Code 익스텐션 67 | ], 68 | 69 | "settings": { 70 | // VS Code 환경 설정 71 | } 72 | } 73 | }, 74 | 75 | // on-create.sh 스크립트 실행 명령어 76 | "onCreateCommand": "/bin/bash ./.devcontainer/on-create.sh > ~/on-create.log", 77 | 78 | // DevContainer 사용자 계정 79 | "remoteUser": "vscode" 80 | } 81 | ``` 82 | 83 | 1. `build` 속성을 정의합니다. 아래는 .NET을 예시로 들었습니다. 84 | 85 | ```jsonc 86 | { 87 | ... 88 | "build": { 89 | "dockerfile": "./Dockerfile", 90 | "context": ".", 91 | "args": { 92 | "VARIANT": "7.0" 93 | } 94 | }, 95 | ... 96 | } 97 | ``` 98 | 99 | 1. `forwardPorts` 속성을 정의합니다. 아래는 `3000`, `5000`, `5001`, `8080`, `44380` 포트를 포워딩하겠다는 의미입니다. 100 | 101 | ```jsonc 102 | { 103 | ... 104 | "forwardPorts": [ 3000, 5000, 5001, 8080, 44380 ], 105 | ... 106 | } 107 | ``` 108 | 109 | 1. `features` 속성을 정의합니다. 설치를 원하는 피처는 [https://github.com/devcontainers/features](https://github.com/devcontainers/features/tree/main/src) 리포지토리를 참조합니다. 아래는 Azure CLI, GitHub CLI, node 등을 설치하는 예시입니다. 110 | 111 | ```jsonc 112 | { 113 | ... 114 | "features": { 115 | // Azure CLI 116 | "ghcr.io/devcontainers/features/azure-cli:latest": { 117 | "version": "latest" 118 | }, 119 | 120 | // GitHub CLI 121 | "ghcr.io/devcontainers/features/github-cli:latest": { 122 | "version": "latest" 123 | }, 124 | 125 | // node.js 126 | "ghcr.io/devcontainers/features/node:latest": { 127 | "version": "lts", 128 | "nodeGypDependencies": true, 129 | "nvmInstallPath": "/usr/local/share/nvm" 130 | }, 131 | 132 | // common utilities 133 | "ghcr.io/devcontainers/features/common-utils:latest": { 134 | "installZsh": true, 135 | "installOhMyZsh": true, 136 | "upgradePackages": true, 137 | "username": "vscode", 138 | "uid": "1000", 139 | "gid": "1000" 140 | } 141 | }, 142 | ... 143 | } 144 | ``` 145 | 146 | 1. `features` 속성에 정의한 피처들을 설치하기 위한 순서를 정의합니다. 여기서는 `common-utils` 피처를 가장 먼저 설치하고 나머지 피처는 어떤 순서로 설치하든 상관없게끔 했습니다. 147 | 148 | ```jsonc 149 | { 150 | ... 151 | "overrideFeatureInstallOrder": [ 152 | "ghcr.io/devcontainers/features/common-utils" 153 | ], 154 | ... 155 | } 156 | ``` 157 | 158 | 1. 코드스페이스에 설치할 익스텐션을 정의합니다. 여기서는 GitHub 코파일럿 익스텐션, C# 익스텐션, Azure 익스텐션을 설치하는 것을 예로 들었습니다. 159 | 160 | ```jsonc 161 | { 162 | ... 163 | "customizations": { 164 | "extensions": [ 165 | // GitHub 코파일럿 관련 166 | "GitHub.copilot", 167 | "GitHub.copilot-labs", 168 | "GitHub.copilot-chat", 169 | 170 | // C# 관련 171 | "ms-dotnettools.vscode-dotnet-pack", 172 | "kreativ-software.csharpextensions", 173 | 174 | // Azure 관련 175 | "ms-vscode.vscode-node-azure-pack", 176 | "ms-azuretools.vscode-bicep" 177 | ], 178 | }, 179 | ... 180 | } 181 | ``` 182 | 183 | > 더 많은 익스텐션을 설치하고 싶다면 [https://marketplace.visualstudio.com/vscode](https://marketplace.visualstudio.com/vscode??WT.mc_id=dotnet-87053-juyoo)에서 검색한 후 추가하세요. 184 | 185 | 1. 코드스페이스 UI 구성을 정의합니다. 아래는 미니맵을 비활성화하고 파일을 확장자 기준으로 정리하는 것을 예로 들었습니다. 186 | 187 | ```jsonc 188 | { 189 | ... 190 | "customizations": { 191 | "settings": { 192 | "editor.minimap.enabled": false, 193 | "explorer.sortOrder": "type" 194 | } 195 | }, 196 | ... 197 | } 198 | ``` 199 | 200 | 201 | ## `on-create.sh` 202 | 203 | `devcontainer.json` 파일로 컨테이너 설정을 끝낸 이후, 마지막으로 추가 기능을 설치하는 스크립트입니다. 아래 내용은 운영체제 업데이트 및 추가 패키지를 설치하는 과정에 대한 예시입니다. 204 | 205 | ```bash 206 | ## Install additional apt packages 207 | sudo apt-get update \ 208 | && sudo apt-get install -y dos2unix libsecret-1-0 xdg-utils \ 209 | && sudo apt clean -y \ 210 | && sudo rm -rf /var/lib/apt/lists/* 211 | 212 | ## Configure git 213 | git config --global pull.rebase false 214 | git config --global core.autocrlf input 215 | 216 | ## GitHub Copilot CLI ## 217 | npm install -g @githubnext/github-copilot-cli 218 | eval "$(github-copilot-cli alias -- "$0")" 219 | 220 | ## GitHub Copilot CLI ## 221 | echo ' 222 | # Add GitHub Copilot CLI alias 223 | alias ghcp='github-copilot-cli' 224 | eval "$(github-copilot-cli alias -- "$0")" 225 | ' >> $HOME/.zshrc 226 | echo ' 227 | # Add GitHub Copilot CLI alias 228 | alias ghcp='github-copilot-cli' 229 | eval "$(github-copilot-cli alias -- "$0")" 230 | ' >> $HOME/.bashrc 231 | 232 | ## AZURE BICEP CLI ## 233 | az bicep install 234 | 235 | ## AZURE DEV CLI ## 236 | curl -fsSL https://aka.ms/install-azd.sh | bash 237 | ``` 238 | 239 | 240 | ## 코드스페이스 재실행 241 | 242 | 1. 아래 명령어를 실행시켜 변경사항을 저장하고 리포지토리에 반영합니다. 243 | 244 | ```bash 245 | git add . 246 | git commit -m "Add devcontainer settings" 247 | git push origin 248 | ``` 249 | 250 | 1. `F1` 키를 눌러 `Codespaces: Full Rebuild Container` 명령을 실행시킵니다. 251 | 1. 아래 명령어를 통해 각종 도구가 제대로 설치가 되었는지 확인합니다. 252 | 253 | ```bash 254 | # OS 정보 255 | cat /etc/os-release 256 | 257 | # .NET SDK 설치 여부 258 | dotnet --list-sdks 259 | 260 | # 파워셸 설치 여부 261 | pwsh --version 262 | 263 | # nvm 설치 여부 264 | nvm --version 265 | 266 | # node 설치 여부 267 | node --version 268 | 269 | # npm 설치 여부 270 | npm --version 271 | 272 | # GitHub CLI 설치 여부 273 | gh --version 274 | 275 | # Azure CLI 설치 여부 276 | az --version 277 | 278 | # Azure Dev CLI 설치 여부 279 | azd version 280 | 281 | # 기타 환경 변수 확인 282 | printenv -0 | sort -z | tr '\0' '\n' 283 | ``` 284 | 285 | 다음 👉 [GitHub 코파일럿 – ASP.NET Core Web API 앱 만들기](./02-copilot-dotnet.md) 286 | -------------------------------------------------------------------------------- /09-gh-codespaces-copilot/02-copilot-dotnet.md: -------------------------------------------------------------------------------- 1 | # GitHub Copilot 사용하기 – ASP.NET Core Web API 2 | 3 | ## 사전 준비사항 4 | 5 | - GitHub Copilot은 유료 서비스입니다. 따라서, 사전에 서비스 사용과 관련한 준비가 되어 있어야 합니다. 자세한 내용은 [이 문서](https://docs.github.com/ko/copilot/quickstart)를 참조하세요. 6 | 7 | 8 | ## ASP.NET Core Web API 프로젝트 9 | 10 | 1. 아래 명령어를 실행시켜 `global.json` 파일을 생성합니다. 11 | 12 | ```bash 13 | # global.json 파일 생성 14 | dotnet new globaljson 15 | ``` 16 | 17 | 1. 리포지토리 루트에 `global.json` 파일이 만들어지면, 아래와 같이 .NET SDK 프리뷰 버전을 사용하지 않는 것으로 수정합니다. 18 | 19 | ```json 20 | { 21 | "sdk": { 22 | "allowPrerelease": false 23 | } 24 | } 25 | ``` 26 | 27 | 1. 아래 명령어를 실행시켜 ASP.NET Core Web API 프로젝트를 생성합니다. 28 | 29 | ```bash 30 | # ASP.NET Core Web API 프로젝트 생성 31 | dotnet new webapi -n WebApi -o src/WebApi 32 | ``` 33 | 34 | 1. `src/WebApi/Properties/launchSettings.json` 파일을 열어 아래와 같이 포트번호를 수정합니다. 35 | 36 | ```jsonc 37 | { 38 | "$schema": "https://json.schemastore.org/launchsettings.json", 39 | "iisSettings": { 40 | "windowsAuthentication": false, 41 | "anonymousAuthentication": true, 42 | "iisExpress": { 43 | // 포트번호 수정 44 | "applicationUrl": "http://localhost:8080", 45 | "sslPort": 44380 46 | } 47 | }, 48 | "profiles": { 49 | "http": { 50 | "commandName": "Project", 51 | "dotnetRunMessages": true, 52 | "launchBrowser": true, 53 | "launchUrl": "swagger", 54 | // 포트번호 수정 55 | "applicationUrl": "http://localhost:5000", 56 | "environmentVariables": { 57 | "ASPNETCORE_ENVIRONMENT": "Development" 58 | } 59 | }, 60 | "https": { 61 | "commandName": "Project", 62 | "dotnetRunMessages": true, 63 | "launchBrowser": true, 64 | "launchUrl": "swagger", 65 | // 포트번호 수정 66 | "applicationUrl": "https://localhost:5001;http://localhost:5000", 67 | "environmentVariables": { 68 | "ASPNETCORE_ENVIRONMENT": "Development" 69 | } 70 | }, 71 | "IIS Express": { 72 | "commandName": "IISExpress", 73 | "launchBrowser": true, 74 | "launchUrl": "swagger", 75 | "environmentVariables": { 76 | "ASPNETCORE_ENVIRONMENT": "Development" 77 | } 78 | } 79 | } 80 | } 81 | ``` 82 | 83 | 1. 솔루션 파일을 생성합니다. 84 | 85 | ```bash 86 | # 솔루션 파일 생성 87 | dotnet new sln -n App 88 | ``` 89 | 90 | 1. 솔루션 파일에 ASP.NET Core Web API 프로젝트를 연결합니다. 91 | 92 | ```bash 93 | # ASP.NET Core Web API 프로젝트를 솔루션 파일에 추가 94 | dotnet sln add src/WebApi -s src 95 | ``` 96 | 97 | 1. 솔루션을 빌드합니다. 98 | 99 | ```bash 100 | # 솔루션 빌드 101 | dotnet restore && dotnet build 102 | ``` 103 | 104 | 1. 앱을 실행시킵니다. 105 | 106 | ```bash 107 | # ASP.NET Core Web API 실행 108 | dotnet run --project src/WebApi 109 | ``` 110 | 111 | 1. 아래와 같은 팝업창이 나타나면 `Open in Browser` 버튼을 클릭합니다. 아래 그림은 예시일 뿐이고 포트 번호는 `5000`입니다. 112 | 113 | ![로컬에서 웹 API 앱 열기](./images/copilot-01.png) 114 | 115 | 1. 웹 브라우저를 열었을 때 404 에러 페이지가 보이는 것이 정상입니다. 116 | 1. 주소 뒤에 `/WeatherForecast`를 추가한 후 다시 실행시켜 JSON 개체를 볼 수 있으면 앱이 잘 동작하는 것입니다. 117 | 1. `Ctrl + C` 키를 눌러 앱을 종료합니다. 118 | 119 | 120 | ## ASP.NET Core Web API 테스트 프로젝트 121 | 122 | 1. 아래 명령어를 실행시켜 .NET MSTest 프로젝트를 생성합니다. 123 | 124 | ```bash 125 | # .NET MSTest 프로젝트 생성 126 | dotnet new mstest -n WebApiTests -o test/WebApiTests 127 | ``` 128 | 129 | 1. 테스트 프로젝트에 ASP.NET Core Web API 프로젝트를 연결합니다. 130 | 131 | ```bash 132 | ## 테스트 프로젝트에 Web API 프로젝트 연결 133 | dotnet add ./test/WebApiTests reference ./src/WebApi 134 | ``` 135 | 136 | 1. 솔루션 파일에 .NET MSTest 프로젝트를 연결합니다. 137 | 138 | ```bash 139 | # .NET MSTest 프로젝트를 솔루션 파일에 추가 140 | dotnet sln add test/WebApiTests -s test 141 | ``` 142 | 143 | 1. 솔루션을 빌드합니다. 144 | 145 | ```bash 146 | # 솔루션 빌드 147 | dotnet restore && dotnet build 148 | ``` 149 | 150 | ## GitHub Copilot 사용해서 Swagger UI 페이지 리디렉션하기 151 | 152 | 현재 웹사이트의 루트 주소로 접속하면, 404 페이지가 나옵니다. 이를 자동으로 리디렉션 시켜 Swagger UI 페이지를 보여주게끔 합니다. 아래 프롬프트를 사용해 보세요. 153 | 154 | 1. `src/WebApi/Program.cs` 파일을 엽니다. 155 | 1. 파일의 맨 윗줄에 아래와 같이 주석을 추가합니다. 156 | 157 | ```csharp 158 | // add a namespace for rewriteoptions 159 | ``` 160 | 161 | 1. 파일의 중간쯤 어딘가 `app.UseSwaggerUI();` 바로 밑 줄에 아래와 같이 주석을 추가합니다. 162 | 163 | ```csharp 164 | // add a new rewriteoption that redirects root to /swagger 165 | ``` 166 | 167 | 1. 다시 한 번 앱을 빌드하고 실행 시킵니다. 168 | 169 | ```bash 170 | dotnet build 171 | dotnet run --project src/WebApi 172 | ``` 173 | 174 | 1. 아래와 같은 팝업창이 나타나면 `Open in Browser` 버튼을 클릭합니다. 아래 그림은 예시일 뿐이고 포트 번호는 `5000`입니다. 175 | 176 | ![로컬에서 웹 API 앱 열기](./images/copilot-01.png) 177 | 178 | 1. 자동으로 Swagger UI 페이지로 리디렉션된 것을 확인합니다. 179 | 1. `Ctrl + C` 키를 눌러 앱을 종료합니다. 180 | 181 | 182 | ## 엔드포인트 추가하기 183 | 184 | 1. `src/WebApi/Controllers/WeatherForecastController.cs` 파일을 엽니다. 185 | 1. 파일의 맨 아래에 아래와 같이 주석을 추가합니다. 186 | 187 | ```c# 188 | // add a class of DateRange that defines the Length property of the integer type 189 | ``` 190 | 191 | 1. `WeatherForecastController` 클래스의 맨 아래에 아래와 같이 주석을 추가합니다. 192 | 193 | ```csharp 194 | // add an action method of GetRange that returns a list of WeatherForecast objects and has a parameter of DateRange with the FromQuery attribute 195 | ``` 196 | 197 | 1. 다시 한 번 앱을 빌드하고 실행 시킵니다. 198 | 199 | ```bash 200 | dotnet build 201 | dotnet run --project src/WebApi 202 | ``` 203 | 204 | 1. Swagger UI 에서 `Length` 값을 조정해 가면서 결과를 확인합니다. 205 | 1. `Ctrl + C` 키를 눌러 앱을 종료합니다. 206 | 207 | 208 | ## 테스트 코드 작성하기 209 | 210 | 1. `test/WebApiTests/UnitTest1.cs` 파일을 `test/WebApiTests/Controllers/WeatherForecastControllerTests.cs` 파일로 디렉토리와 파일 이름을 변경합니다. 211 | 1. `test/WebApiTests/Controllers/WeatherForecastControllerTests.cs` 파일을 엽니다. 212 | 1. 파일의 맨 위에 아래와 같이 주석을 추가합니다. 213 | 214 | ```csharp 215 | // add a namespace for the WeatherForecastController 216 | ``` 217 | 218 | 1. `TestMethod1()` 메소드 아래에 아래와 같이 주석을 추가합니다. 219 | 220 | ```csharp 221 | // add a test method that tests the GetRange method of WeatherForecastContoller 222 | ``` 223 | 224 | 1. 아래 명령어를 실행시켜 테스트를 수행합니다. 225 | 226 | ```csharp 227 | dotnet build && dotnet test 228 | ``` 229 | 230 | [GitHub 코드스페이스](./01-codespace.md) 👈 이전 | 다음 👉 [GitHub 코파일럿 – 애저 Bicep으로 클라우드 인프라 만들기](./03-copilot-bicep.md) 231 | -------------------------------------------------------------------------------- /09-gh-codespaces-copilot/03-copilot-bicep.md: -------------------------------------------------------------------------------- 1 | # GitHub Copilot 사용하기 – Azure Bicep 2 | 3 | ## 사전 준비사항 4 | 5 | - GitHub Copilot은 유료 서비스입니다. 따라서, 사전에 서비스 사용과 관련한 준비가 되어 있어야 합니다. 자세한 내용은 [이 문서](https://docs.github.com/ko/copilot/quickstart)를 참조하세요. 6 | 7 | 8 | ## `resources.bicep` 만들기 9 | 10 | 1. `infra/resources.bicep` 파일을 생성합니다. 11 | 1. Bing Chat에 아래 프롬프트를 던져 스켈레톤 구조를 생성합니다. 12 | 13 | ```text 14 | Could you show me the skeleton structure of Azure Bicep that creates an Azure App Service instance? 15 | ``` 16 | 17 | 만들어진 스켈레톤 워크플로우를 복사해서 `infra/resources.bicep` 파일에 붙여 넣습니다. 18 | 19 | 1. 파일의 맨 위에 아래 주석을 추가합니다. 20 | 21 | ```bicep 22 | // add parameters for name and location that defaults to the resourcegroup's location 23 | ``` 24 | 25 | 1. 앱 서비스 플랜의 이름을 `asplan`으로 수정합니다. 26 | 1. 앱 서비스 플랜의 `name` 속성을 아래 주석을 통해 수정합니다. 27 | 28 | ```bicep 29 | // add name with the prefix of 'asplan-' 30 | ``` 31 | 32 | 1. 앱 서비스 플랜의 `location` 속성 값을 `location`으로 수정합니다. 33 | 34 | 1. 앱 서비스의 이름을 `appsvc`로 수정합니다. 35 | 1. 앱 서비스의 `name` 속성을 아래 주석을 통해 수정합니다. 36 | 37 | ```bicep 38 | // add name with the prefix of 'appsvc-' 39 | ``` 40 | 41 | 1. 앱 서비스의 `location` 속성 값을 `location`으로 수정합니다. 42 | 43 | 44 | ## `main.bicep` 만들기 45 | 46 | 1. `infra/main.bicep` 파일을 생성합니다. 47 | 1. Bing Chat에 아래 프롬프트를 던져 스켈레톤 구조를 생성합니다. 48 | 49 | ```text 50 | Could you show me the skeleton structure of Azure Bicep that creates a resource group and calls a module? 51 | ``` 52 | 53 | 만들어진 스켈레톤 워크플로우를 복사해서 `infra/main.bicep` 파일에 붙여 넣습니다. 54 | 55 | 1. 파일의 맨 위에 아래 주석을 추가합니다. 56 | 57 | ```bicep 58 | // add target scope to subscription 59 | ``` 60 | 61 | 1. 그 다음에 아래 주석을 추가합니다. 62 | 63 | ```bicep 64 | // add parameters for name and location that defaults to koreacentral 65 | ``` 66 | 67 | 1. 그 다음에 아래 주석을 추가합니다. 68 | 69 | ```bicep 70 | // add name with the prefix of 'rg-' 71 | ``` 72 | 73 | 1. 모듈 호출하는 부분을 아래와 같이 수정합니다. 74 | 75 | ```bicep 76 | module appsvc './resources.bicep' = { 77 | name: 'AppService' 78 | scope: rg 79 | params: { 80 | name: name 81 | location: location 82 | } 83 | } 84 | ``` 85 | 86 | 1. `infra/main.parameters.json` 파일을 생성하고 아래 내용을 입력합니다. 87 | 88 | ```json 89 | { 90 | "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", 91 | "contentVersion": "1.0.0.0", 92 | "parameters": { 93 | "name": { 94 | "value": "${AZURE_ENV_NAME}" 95 | }, 96 | "location": { 97 | "value": "${AZURE_LOCATION}" 98 | } 99 | } 100 | } 101 | ``` 102 | 103 | 104 | ## Azure Dev CLI 구성하기 105 | 106 | 1. 터미널에서 아래 명령어를 입력합니다. 107 | 108 | ```bash 109 | azd auth login --use-device-code=false 110 | ``` 111 | 112 | > 새 웹 브라우저 탭이 나타나면서 404 에러가 보인다면 주소창의 `http://localhost...`로 시작하는 주소를 복사해서 새 터미널 창에 `curl` 명령어와 함께 붙여넣습니다. 113 | > 이 때 새 터미널 창을 bash 터미널로 열어서 잘 실행이 안 된다면, zsh 터미널로 열어서 해 보세요. 114 | 115 | 1. 아래 명령어를 차례로 입력합니다. 116 | 117 | ```bash 118 | # Set AZURE_ENV_NAME 119 | AZURE_ENV_NAME="lua$RANDOM" 120 | 121 | # Get AZURE_ENV_NAME 122 | echo $AZURE_ENV_NAME 123 | ``` 124 | 125 | 1. 아래 명령어를 입력해서 Azure Dev CLI 구성을 시작합니다. 126 | 127 | ```bash 128 | azd init -e $AZURE_ENV_NAME 129 | ``` 130 | 131 | 아래와 같은 프롬프트가 몇 개 나오는데 계속해서 `y`를 입력합니다. 132 | 133 | - **The current directory is not empty. Would you like to initialize a project here in '/workspaces/{{REPOSITORY_NAME}}'? (y/N)** 👈 `y` 입력 134 | - **Select a project template: [Use arrows to move, type to filter]** 👈 `Starter - Bicep` 선택 135 | - **What would you like to do with these files? [Use arrows to move, type to filter]** 👈 `Keep my existing files unchanged` 선택 136 | 137 | 1. `azure.yaml` 파일 및 `.azure` 디렉토리, `.github/workflows` 디렉토리가 만들어 진 것을 확인합니다. 138 | 1. `azure.yaml` 파일을 열어 아래와 같이 내용을 수정합니다. 139 | 140 | ```yml 141 | # yaml-language-server: $schema=https://raw.githubusercontent.com/Azure/azure-dev/main/schemas/v1.0/azure.yaml.json 142 | 143 | name: lua-codespace-copilot 144 | 145 | infra: 146 | provider: "bicep" 147 | path: "infra" 148 | module: "main" 149 | 150 | pipeline: 151 | provider: "github" 152 | ``` 153 | 154 | 1. 아래 명령어를 입력해서 앞서 작성했던 애저 Bicep 파일을 실행시킵니다. 155 | 156 | ```bash 157 | azd up 158 | ``` 159 | 160 | - "**Please select an Azure Subscription to use**" 👈 자신의 애저 구독 선택 161 | - "**Please select an Azure location to use**" 👈 `Korea Central` 선택 162 | 163 | [GitHub 코파일럿 – ASP.NET Core Web API 앱 만들기](./02-copilot-dotnet.md) 👈 이전 | 다음 👉 [GitHub 코파일럿 – GitHub 액션 워크플로우 만들기](./04-copilot-gha.md) 164 | -------------------------------------------------------------------------------- /09-gh-codespaces-copilot/04-copilot-gha.md: -------------------------------------------------------------------------------- 1 | # GitHub Copilot 사용하기 – GitHub Actions 2 | 3 | ## 사전 준비사항 4 | 5 | - GitHub Copilot은 유료 서비스입니다. 따라서, 사전에 서비스 사용과 관련한 준비가 되어 있어야 합니다. 자세한 내용은 [이 문서](https://docs.github.com/ko/copilot/quickstart)를 참조하세요. 6 | 7 | 8 | ## GitHub Actions 시크릿 추가하기 9 | 10 | 1. 터미널에서 아래 명령어를 통해 애저에 로그인합니다. 11 | 12 | ```bash 13 | az login 14 | ``` 15 | 16 | > 새 웹 브라우저 탭이 나타나면서 404 에러가 보인다면 주소창의 `http://localhost...`로 시작하는 주소를 복사해서 새 터미널 창에 `curl` 명령어와 함께 붙여넣습니다. 17 | > 이 때 새 터미널 창을 bash 터미널로 열어서 잘 실행이 안 된다면, zsh 터미널로 열어서 해 보세요. 18 | 19 | 1. 아래 명령어를 통해 현재 구독을 확인합니다. 20 | 21 | ```bash 22 | az account show 23 | ``` 24 | 25 | 1. 아래 명령어를 통해 애저 로그인 키를 생성합니다. 이 때 이름의 `lua{{숫자}}`는 앞서 생성한 `AZURE_ENV_NAME`입니다. 26 | 27 | ```bash 28 | subscriptionId=$(az account show --query "id" -o tsv) 29 | az ad sp create-for-rbac \ 30 | --name "spn-lua{{숫자}}" --role contributor \ 31 | --scopes /subscriptions/$subscriptionId \ 32 | --sdk-auth 33 | ``` 34 | 35 | 생성된 키는 대략 아래와 같은 모양입니다. 아래 `clientId`, `clientSecret`, `subscriptionId`, `tenantId` 값은 예시일 뿐 실제로 존재하지 않는 값입니다. 36 | 37 | ```json 38 | { 39 | "clientId": "9814fa03-26b8-4ce0-9021-121d16cc929f", 40 | "clientSecret": "uOR^Pt*Tv7iMqtzrQe1Zq5Djlf*K4P8QzALlNfw#", 41 | "subscriptionId": "a348f9f2-dc63-4083-b19b-4f235e0b5175", 42 | "tenantId": "4e18dd75-d9e5-4afc-ad7e-ac436d98e812", 43 | "activeDirectoryEndpointUrl": "https://login.microsoftonline.com", 44 | "resourceManagerEndpointUrl": "https://management.azure.com/", 45 | "activeDirectoryGraphResourceId": "https://graph.windows.net/", 46 | "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/", 47 | "galleryEndpointUrl": "https://gallery.azure.com/", 48 | "managementEndpointUrl": "https://management.core.windows.net/" 49 | } 50 | ``` 51 | 52 | 1. 위에 생성한 JSON 개체를 GitHub 리포지토리 설정 탭의 Secrets 섹션에서 `AZURE_CREDENTIALS` 값으로 입력합니다. 53 | 1. 앞서 생성한 `AZURE_ENV_NAME` 값을 시크릿으로 입력합니다. 54 | 55 | 56 | ## GitHub Actions 워크플로우 만들기 57 | 58 | 1. `.github/workfows/main.yaml` 파일을 생성합니다. 59 | 1. Bing Chat에 아래 프롬프트를 던져 스켈레톤 워크플로우를 생성합니다. 60 | 61 | ```text 62 | Could you show me the skeleton structure of GitHub Actions workflow? 63 | ``` 64 | 65 | 만들어진 스켈레톤 워크플로우를 복사해서 `.github/workfows/main.yaml` 파일에 붙여 넣습니다. 66 | 67 | 1. 워크플로우의 `name` 속성에 `Development` 라고 값을 줍니다. 68 | 1. `on` 속성 밑에 아래 주석을 추가합니다. 69 | 70 | ```yml 71 | # add a trigger for the push event 72 | ``` 73 | 74 | 1. job 이름을 `build-test`로 지정합니다. 75 | 1. `runs-on`: 속성값을 `ubuntu-latest`로 지정합니다. 76 | 1. `steps` 속성 밑에 아래 주석을 추가합니다. 77 | 78 | ```yml 79 | # add a step to checkout the code 80 | ``` 81 | 82 | 1. 그 다음에 아래 주석을 추가합니다. 83 | 84 | ```yml 85 | # add a step to install .NET SDK 7 86 | ``` 87 | 88 | 1. 그 다음에 아래 주석을 추가합니다. 89 | 90 | ```yml 91 | # add a step to restore NuGet packages 92 | ``` 93 | 94 | 1. 그 다음에 아래 주석을 추가합니다. 95 | 96 | ```yml 97 | # add a step to build the solution 98 | ``` 99 | 100 | 1. 그 다음에 아래 주석을 추가합니다. 101 | 102 | ```yml 103 | # add a step to test the solution 104 | ``` 105 | 106 | 1. 그 다음에 아래 주석을 추가합니다. 107 | 108 | ```yml 109 | # add a step to publish src/WebApi 110 | ``` 111 | 112 | 1. 그 다음에 아래 주석을 추가합니다. 113 | 114 | ```yml 115 | # add a step to zip the publish folder 116 | ``` 117 | 118 | 1. 그 다음에 아래 주석을 추가합니다. 119 | 120 | ```yml 121 | # add a step to login to Azure 122 | ``` 123 | 124 | 1. 그 다음에 아래 주석을 추가합니다. 125 | 126 | ```yml 127 | # add a step to deploy the artifact using Azure CLI 128 | ``` 129 | 130 | 이 때 필요하다면 아래와 같이 커맨드를 수정해야 할 수도 있습니다. 131 | 132 | ```bash 133 | az webapp deployment source config-zip \ 134 | --resource-group "rg-${{ secrets.AZURE_ENV_NAME }}" \ 135 | --name "appsvc-${{ secrets.AZURE_ENV_NAME }}" \ 136 | --src ./publish/azure-dev.zip 137 | ``` 138 | 139 | 1. 아래 명령어를 통해 코드를 푸시하고 GitHub 액션 워크플로우가 작동하는 것을 확인합니다. 140 | 141 | ```bash 142 | git add . 143 | git commit -m "Add GitHub Actions workflow" 144 | git push origin 145 | ``` 146 | 147 | 1. GitHub 액션 워크플로우에 녹색 불이 켜지면 성공적으로 배포한 것입니다. 웹 브라우저의 주소창에 아래 내용을 입력해서 데이터가 제대로 나오는지 확인합니다. 148 | 149 | ```text 150 | https://appsvc-{{AZURE_ENV_NAME}}.azurewebsites.net/WeatherForecast 151 | ``` 152 | 153 | [GitHub 코파일럿 – 애저 Bicep으로 클라우드 인프라 만들기](./03-copilot-bicep.md) 👈 이전 | 다음 👉 [참고 문서](./05-references.md) 154 | -------------------------------------------------------------------------------- /09-gh-codespaces-copilot/05-references.md: -------------------------------------------------------------------------------- 1 | # 참고 문서 2 | 3 | ## GitHub 코드스페이스 4 | 5 | - [GitHub Codespaces](https://docs.github.com/ko/codespaces/overview) 6 | - [Development Containers Images](https://github.com/devcontainers/images) 7 | - [Development Container Features](https://github.com/devcontainers/features) 8 | - [Visual Studio Code Marketplace](https://marketplace.visualstudio.com/vscode?WT.mc_id=dotnet-87053-juyoo) 9 | 10 | 11 | ## GitHub 코파일럿 12 | 13 | - [GitHub Copilot](https://docs.github.com/ko/copilot/quickstart) 14 | - [GitHub Copilot CLI](https://githubnext.com/projects/copilot-cli) 15 | - [GitHub Copilot X](https://github.com/features/preview/copilot-x) 16 | 17 | 18 | ## 애저 Bicep 19 | 20 | - [애저 Bicep 개요](https://learn.microsoft.com/ko-kr/azure/azure-resource-manager/bicep/overview?WT.mc_id=dotnet-87053-juyoo&tabs=bicep) 21 | - [애저 Developer CLI](https://learn.microsoft.com/ko-kr/azure/developer/azure-developer-cli/overview?WT.mc_id=dotnet-87053-juyoo&tabs=bicep) 22 | - [애저 CLI](https://learn.microsoft.com/ko-kr/cli/azure/what-is-azure-cli?WT.mc_id=dotnet-87053-juyoo&tabs=bicep) 23 | 24 | 25 | ## GitHub 액션 워크플로우 26 | 27 | - [GitHub 액션](https://docs.github.com/ko/actions) 28 | - [GitHub 액션 마켓플레이스](https://github.com/marketplace?type=actions) 29 | 30 | 31 | ## 애저 OpenAI 서비스 32 | 33 | - [Azure OpenAI 서비스 설명서](https://learn.microsoft.com/ko-kr/azure/cognitive-services/openai/?WT.mc_id=dotnet-87053-juyoo) 34 | 35 | 36 | [GitHub 코파일럿 – GitHub 액션 워크플로우 만들기](./04-copilot-gha.md) 👈 이전 37 | -------------------------------------------------------------------------------- /09-gh-codespaces-copilot/README.md: -------------------------------------------------------------------------------- 1 | # GitHub Codespaces & Copilot 실습 2 | 3 | GitHub 코드스페이스와 코파일럿을 활용해서 애플리케이션을 개발하고 배포하는 코드 샘플입니다 4 | 5 | 6 | ## 사전 준비물 7 | 8 | - [GitHub 계정](https://github.com/signup) 9 | - [GitHub Copilot 구독](https://docs.github.com/ko/copilot/overview-of-github-copilot/about-github-copilot-for-individuals) 10 | - 학생의 경우 [GitHub Student Developer Pack 프로그램](https://education.github.com/pack)에 가입하면 무료 사용 가능 11 | - [애저 무료 구독](https://azure.microsoft.com/ko-kr/free/?WT.mc_id=dotnet-87053-juyoo) 12 | - [학생의 경우 신용카드 없이도 무료 구독 신청 가능](https://azure.microsoft.com/ko-kr/free/students/?WT.mc_id=dotnet-87053-juyoo) 13 | 14 | 15 | ## 시작하기 16 | 17 | - [GitHub 코드스페이스](./01-codespace.md) 18 | - [GitHub 코파일럿 – ASP.NET Core Web API 앱 만들기](./02-copilot-dotnet.md) 19 | - [GitHub 코파일럿 – 애저 Bicep으로 클라우드 인프라 만들기](./03-copilot-bicep.md) 20 | - [GitHub 코파일럿 – GitHub 액션 워크플로우 만들기](./04-copilot-gha.md) 21 | - [참고 문서](./05-references.md) 22 | -------------------------------------------------------------------------------- /09-gh-codespaces-copilot/images/codespace-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/09-gh-codespaces-copilot/images/codespace-01.png -------------------------------------------------------------------------------- /09-gh-codespaces-copilot/images/copilot-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/09-gh-codespaces-copilot/images/copilot-01.png -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Microsoft Open Source Code of Conduct 2 | 3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 4 | 5 | Resources: 6 | 7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) 8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) 9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Microsoft Corporation. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Light up Azure – Azure Playlists Season 3 2 | 3 | 애저 플레이리스트 시리즈의 세번째 시즌, **Light up Azure**! 아래와 같은 내용으로 준비했습니다. 4 | 5 | 6 | 9. **S03E09**: CodeSpaces와 GitHub Copilot 코딩 생산성 높이기
7 | ➡️ 유저스틴 | 시니어 클라우드 아드보캇 | Microsoft 8 | 9 |
10 | 썸네일 - 저스틴 유 11 |
12 | 13 | 8. **S03E08**: Power Platform with Azure OpenAI
14 | ➡️ 어거스트 리 | 클라우드 솔루션 아키텍트 | Microsoft 15 | 16 |
17 | 썸네일 - 어거스트 리 18 |
19 | 20 | 7. **S03E07**: Azure DevOps를 활용한 MLOps 파이프라인 구성
21 | ➡️ 정보람 | 클라우드 솔루션 아키텍트 | Microsoft 22 | 23 |
24 | 썸네일 - 정보람 25 |
26 | 27 | 6. **S03E06**: Azure Cognitive Search and OpenAI Knowledge Mining
28 | ➡️ 고대운 | 클라우드 솔루션 아키텍트 | Microsoft 29 | 30 |
31 | 썸네일 - 고대운 32 |
33 | 34 | 5. **S03E05**: Azure OpenAI GPT and Prompt Engineering
35 | ➡️ 고대운 | 클라우드 솔루션 아키텍트 | Microsoft 36 | 37 |
38 | 썸네일 - 고대운 39 |
40 | 41 | 4. **S03E04**: 애저 스트림 애널리틱스 기반 실시간 스트리밍 데이터 분석
42 | ➡️ 공혜원 | 클라우드 솔루션 아키텍트 | Microsoft 43 | 44 |
45 | 썸네일 - 공혜원 46 |
47 | 48 | 3. **S03E03**: 애저 서버리스로 서버 없이 간단한 웹 앱 만들기
49 | ➡️ 어거스트 리 | 클라우드 솔루션 아키텍트 | Microsoft 50 | 51 |
52 | 썸네일 - 어거스트 리 53 |
54 | 55 | 56 | 2. **S03E02**: 애저 가상머신 확장 집합과 스케일링 시나리오 확인하기
57 | ➡️ 나유강 | 클라우드 솔루션 아키텍트 | Microsoft 58 | 59 |
60 | 썸네일 - 나유강 61 |
62 | 63 | 1. **S03E01**: 애저 네트워크 기본 설계
64 | ➡️ 정보람 | 클라우드 솔루션 아키텍트 | Microsoft 65 | 66 |
67 | 썸네일 - 정보람 68 |
69 | 70 | 71 | 72 | 에피소드는 계속 추가될 예정입니다. 많은 관심 부탁 드립니다! 73 | 74 | --- 75 | 76 | ## Contributing 77 | 78 | This project welcomes contributions and suggestions. Most contributions require you to agree to a 79 | Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us 80 | the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com. 81 | 82 | When you submit a pull request, a CLA bot will automatically determine whether you need to provide 83 | a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions 84 | provided by the bot. You will only need to do this once across all repos using our CLA. 85 | 86 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 87 | For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or 88 | contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. 89 | 90 | ## Trademarks 91 | 92 | This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft 93 | trademarks or logos is subject to and must follow 94 | [Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general). 95 | Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. 96 | Any use of third-party trademarks or logos are subject to those third-party's policies. 97 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Security 4 | 5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). 6 | 7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below. 8 | 9 | ## Reporting Security Issues 10 | 11 | **Please do not report security vulnerabilities through public GitHub issues.** 12 | 13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). 14 | 15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey). 16 | 17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). 18 | 19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: 20 | 21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) 22 | * Full paths of source file(s) related to the manifestation of the issue 23 | * The location of the affected source code (tag/branch/commit or direct URL) 24 | * Any special configuration required to reproduce the issue 25 | * Step-by-step instructions to reproduce the issue 26 | * Proof-of-concept or exploit code (if possible) 27 | * Impact of the issue, including how an attacker might exploit the issue 28 | 29 | This information will help us triage your report more quickly. 30 | 31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs. 32 | 33 | ## Preferred Languages 34 | 35 | We prefer all communications to be in English. 36 | 37 | ## Policy 38 | 39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd). 40 | 41 | 42 | -------------------------------------------------------------------------------- /SUPPORT.md: -------------------------------------------------------------------------------- 1 | # TODO: The maintainer of this repo has not yet edited this file 2 | 3 | **REPO OWNER**: Do you want Customer Service & Support (CSS) support for this product/project? 4 | 5 | - **No CSS support:** Fill out this template with information about how to file issues and get help. 6 | - **Yes CSS support:** Fill out an intake form at [aka.ms/onboardsupport](https://aka.ms/onboardsupport). CSS will work with/help you to determine next steps. 7 | - **Not sure?** Fill out an intake as though the answer were "Yes". CSS will help you decide. 8 | 9 | *Then remove this first heading from this SUPPORT.MD file before publishing your repo.* 10 | 11 | # Support 12 | 13 | ## How to file issues and get help 14 | 15 | This project uses GitHub Issues to track bugs and feature requests. Please search the existing 16 | issues before filing new issues to avoid duplicates. For new issues, file your bug or 17 | feature request as a new Issue. 18 | 19 | For help and questions about using this project, please **REPO MAINTAINER: INSERT INSTRUCTIONS HERE 20 | FOR HOW TO ENGAGE REPO OWNERS OR COMMUNITY FOR HELP. COULD BE A STACK OVERFLOW TAG OR OTHER 21 | CHANNEL. WHERE WILL YOU HELP PEOPLE?**. 22 | 23 | ## Microsoft Support Policy 24 | 25 | Support for this **PROJECT or PRODUCT** is limited to the resources listed above. 26 | -------------------------------------------------------------------------------- /assets/ep05.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/assets/ep05.PNG -------------------------------------------------------------------------------- /assets/ep06.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/assets/ep06.PNG -------------------------------------------------------------------------------- /assets/ep07.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/assets/ep07.PNG -------------------------------------------------------------------------------- /assets/ep08.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/assets/ep08.PNG -------------------------------------------------------------------------------- /assets/ep09.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/assets/ep09.PNG -------------------------------------------------------------------------------- /assets/thumbnail.anna.jeong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/assets/thumbnail.anna.jeong.png -------------------------------------------------------------------------------- /assets/thumbnail.august.lee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/assets/thumbnail.august.lee.png -------------------------------------------------------------------------------- /assets/thumbnail.hyewon.kong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/assets/thumbnail.hyewon.kong.png -------------------------------------------------------------------------------- /assets/thumbnail.youkhang.rha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/light-up-azure/a75b1d080a3953f9658768a4f01ee9398c0b87a5/assets/thumbnail.youkhang.rha.png -------------------------------------------------------------------------------- /templates/README.md: -------------------------------------------------------------------------------- 1 | # [세션 제목] 2 | 3 | 실습 문서를 작성하면서 몇 가지 부탁 드릴 것이 있습니다. 4 | 5 | 1. 이 **Light-up Azure** 시리즈는 한국어 사용자를 대상으로 컨텐츠를 제작하는 만큼 가능한 한 모든 부분을 한국어로 제공하는 것을 목표로 하고 있습니다. 따라서, 기술 용어들을 한국어로 바꿔 작성해 주세요. 아래는 예시입니다. 이것 말고도 훨씬 더 많으니 작성자 분들께서 최대한 재량껏 사용해 주세요. 6 | 7 | - Microsoft - 마이크로소프트 8 | - Azure ➡️ 애저 9 | - Cognitive Services ➡️ 인지서비스 10 | - Azure OpenAI Service ➡️ 애저 OpenAI 서비스 11 | - Machine Learning ➡️ 머신러닝 (적당한 한국어 표기가 없을 경우 이와 같이 음차합니다) 12 | 13 | 1. 한국어 문법에는 수동태가 없습니다. 따라서, 수동태 문장을 사용하기 보다는 피동 접사를 사용한다거나 하는 식으로 작성해 주세요. 아래는 대략의 예시입니다. 14 | 15 | - "IP 주소가 xxx.xxx.xxx.xxx에서 yyy.yyy.yyy.yyy로 전환됩니다" ➡️ `IP 주소가 xxx.xxx.xxx.xxx에서 yyy.yyy.yyy.yyy로 바뀝니다` 16 | - "우측 상단의 버튼이 활성화됩니다" ➡️ `우측 상단의 버튼을 클릭할 수 있게 됩니다` 17 | 18 | 1. 높임을 나타내는 접미사 `-시-`를 사용하지 않습니다. 19 | 1. 중언부언을 하지 않습니다. 아래는 예시입니다. 20 | 21 | - "~을(를) 하도록 하겠습니다" ➡️ `~을(를) 하겠습니다` 22 | - "~을(를) 해 보도록 하겠습니다" ➡️ `~을(를) 하겠습니다` 23 | - "~을(를) 하는 것을 확인했습니다" ➡️ `~을(를) 했습니다` 24 | - "~을 해 보았습니다" ➡️ `~을(를) 했습니다` 25 | 26 | 1. 한줄 짜리 명령어 같은 경우에는 코드는 `` ` ``(백틱)으로 감싼 인라인 코드를 사용하면 좋습니다. 27 | 1. 여러줄 짜리 코드 블록 같은 경우에는 아래와 같은 형식으로 코드 블록을 만들어 주세요. 28 | 29 | ```bash 30 | npm install -g @githubnext/github-copilot-cli 31 | eval "$(github-copilot-cli alias -- "$0")" 32 | 33 | echo ' 34 | # Add GitHub Copilot CLI alias 35 | alias ghcp='github-copilot-cli' 36 | eval "$(github-copilot-cli alias -- "$0")" 37 | ' >> $HOME/.bashrc 38 | ``` 39 | 40 | 위 정도만 신경써서 문서를 작성해도 꽤 완성도가 높은 문서가 만들어집니다. 41 | 42 | > 아래와 같이 목차를 표기합니다 43 | 44 | - [\[세션 제목\]](#세션-제목) 45 | - [실습 주제](#실습-주제) 46 | - [실습 목표](#실습-목표) 47 | - [실습 내용](#실습-내용) 48 | - [실습 내용 #1](#실습-내용-1) 49 | - [실습 내용 #2](#실습-내용-2) 50 | - [실습 내용 #3](#실습-내용-3) 51 | - [참고 문서 링크](#참고-문서-링크) 52 | - [Microsoft Learn 학습 링크](#microsoft-learn-학습-링크) 53 | 54 | 55 | ## 실습 주제 56 | 57 | > 이 실습의 주제를 두세 문장 정도로 요약합니다. 58 | 59 | 60 | ## 실습 목표 61 | 62 | > 이 실습의 목표를 불릿포인트 형태로 3개-5개 정도로 요약합니다. 문장은 보통 `~ 할 수 있다` 형태로 끝내면 좋습니다. 63 | 64 | 65 | ## 실습 내용 66 | 67 | ### 실습 내용 #1 68 | 69 | ### 실습 내용 #2 70 | 71 | ### 실습 내용 #3 72 | 73 | ## 참고 문서 링크 74 | 75 | > 모든 참고 문서 링크는 `ko` 또는 `ko-kr` 로케일이 있는 경우 해당 문서를 링크합니다. 76 | > 77 | > 예: [애저 OpenAI 서비스](https://azure.microsoft.com/ko-kr/products/cognitive-services/openai-service) 78 | 79 | 80 | ## Microsoft Learn 학습 링크 81 | 82 | > 모든 Microsoft Learn 학습 링크는 `ko-kr` 로케일 문서를 링크합니다. 83 | > 84 | > 예: [애저 OpenAI를 사용하여 AI 솔루션 개발하기](https://learn.microsoft.com/ko-kr/training/paths/develop-ai-solutions-azure-openai/) 85 | 86 | --------------------------------------------------------------------------------