YAML
데이터 정의
- key: value 형태로 데이터 정의
- 이때 콜론 : 뒤에는 키와 값을 구분하기 위해 반드시 공백문자가 있어야 함
# 주석
Fruit: Apple
Quantity: 5
Origin: Chungju
Array / Lists
- 배열이나 리스트 구조의 데이터를 표현할 때는 '-'을 사용
- 이때 각 요소들의 순서가 중요
- '-'는 배열의 한 요소롤 가리킴
1번예제
Animal:
- dog
- cat
- lion
Programming:
- Python
- JavaScript
Dictionary / Map
- 계층 구조 사용 시, 기본적으로 2칸 혹은 4칸의 들여쓰기 사용
- 각 요소들의 순서가 중요하지 않음
Animal:
Dog:
- Jindo
- Pomeranian
Cat:
- Siamese
- "Russian Blue"
Programming:
Python:
- Crawling
- Automation
JavaScript:
- Web
- "Other .."
Advanced
- 위에서 작성한 데이터 구조를 섞어서 사용할 수도 있음
1.YAML
Fruits:
- Banana
Calories: 105
Fat: 0.4g
Carbs: 27g
- Grape
Calories: 62
Fat: 0.3g
Carbs: 15g
1.JSON
{
"Fruit": [
{
"Banana: {
"Calories": 105,
"Fat": "0.4g",
"Carbs": "27g",
}
},
{
"Grape": {
"Calories": 62,
"Fat": "0.3g",
"Carbs": "15g",
}
}
]
}
2.YAML
jaehyolee :
- name: Jaehyo Lee
- job:
- System Engineer
tastejaehyo:
company: false
tech:
web-front:
- flutter
- vue
- react
backend:
- java
- python
2.JSON
{
"jaehyolee": [
"name": "Jaehyo Lee",
"job": ["System Enginner"]
],
"tastejaehyo": {
"company": false,
"tech": {
"web-fron": ["fluter","vue","react"],
"backend": ["java","python"]
}
}
}
Multi-lines
- 값으로 여러 행의 문장을 작성할 때 기본적으로는 줄바꿈 기호 '\n' 을 사용
example: "Hello I'm Jaehyo \n Bye"
# 출력 결과
Hello I'm Jaehyo
Bye
하지만 \n
을 사용하지 않고, |
, >
을 사용하여 줄바꿈을 할 수도 있음
-
: 한 줄을 모두 비웠을 때만 줄바꿈으로 인식, 그냥 줄바꿈을 할 때에는 공백문자로 인식
줄바꿈
example1: >
I'm Jaehyo
This is Multiline String
Bye
조건문 사용
steps:
...
- name: The job has succeeded
if: ${ success() }
변수 사용
foo: "{ variable }"
repository: "{ .SECRET_KEY }"
YAML 문법 비교
- Docker compose 명령은 기본적으로 Dockerfile에서 익힌 명령에 기반하고 있다.
Docker run
$ docker run -d -it -p 3307:3306 --name mysql --rm -v /home/ubuntu/mysqldata/:/var/lib/mysql/ mysql:5.7
Dockerfile
FROM mysql:5.7
LABEL Description="a Test MySQL Server"
EXPOSE 3306
ENV MYSQL_ROOT_PASSWORD=1234
ENV MYSQL_DATABASE=testDB
ENV MYSQL_USER=testuser
ENV MYSQL_PASSWORD=1234
docker-compose.yml
version : "3" # docker-compose version
services:
db: # Container
image: mysql:5.7 # Base Image
restart: always # Container Restart Option
volumes: # Volumes
- ./mysqldata:/var/lib/mysql
environment: # 환경설정 세팅
- MYSQL_ROOT_PASSWORD=1234
- MYSQL_DATABASE=testDB
- MYSQL_USER=testuser
- MYSQL_PASSWORD=1234
ports: # 호스트(사용자) 포트 3307번을 컨테이너 포트 3306으로 연결(매핑)
- "3307:3306"
Yaml 작성 연습
예제 1
- 아래 표의 데이터를 YAML 포맷으로 변경하세요
Yaml
Car:
Color: "Blue"
Model:
Name: "Cyber Truck"
Year: 2022
Fuel: "Electric"
Price: "$100,000"
Json
{
"Car": {
"Color": "Blue",
"Model": {
"Name": "Cyber Truck",
"Year": 2022
},
"Fuel": "Electric",
"Price": "$100,000"
}
}
예제 2
- 다음 데이터를 YAML 형식으로 변경하여 작성하세요
Yaml
Version: "2012-10-17"
Statement:
- Effect: Allow
Action: ["ec2:*","elasticloadbalancing:*","route53:*","autoscaling:*","cloudwatch:*","SNS:*"]
Resource: ["*"]
- Effect: Allow
Action: ["S3:*"]
Resource: [
"arn:aws:s#:::travis-teraaform-state","arn:aws:s#:::travis-terraform-state/*",
"arn:aws:s#:::travis-shared-1-registry-images","arn:aws:s3:::travis-shared-1-registry-images/*",
"arn:aws:s3:::travis-shared-2-registry-images","arn:aws:s3:::travis-shared-2-registry-images/*"]
- Effect: Allow
Action: ["iam:GetUser"]
Resource: ["arn:aws:iam::341288657826:user/igor-terraform"]
- Effect: Allow
Action: ["iam:*"]
Resource: ["arn:aws:iam:341288657826:role/*"]
- Effect: Allow
Action: ["dynamodb:*"]
Resource: ["arn:aws:dynamodb:us-east-1:341288657826:table/travis-terraform-state"]
Json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["ec2:*","elasticloadbalancing:*","route53:*","autoscaling:*","cloudwatch:*","SNS:*"],
"Resource": ["*"]
},
{
"Effect": "Allow",
"Action": ["S3:*"],
"Resource": [
"arn:aws:s#:::travis-teraaform-state","arn:aws:s#:::travis-terraform-state/*",
"arn:aws:s#:::travis-shared-1-registry-images","arn:aws:s3:::travis-shared-1-registry-images/*",
"arn:aws:s3:::travis-shared-2-registry-images","arn:aws:s3:::travis-shared-2-registry-images/*"
]
},
{
"Effect": "Allow",
"Action": ["iam:GetUser"],
"Resource": ["arn:aws:iam::341288657826:user/igor-terraform"]
},
{
"Effect": "Allow",
"Action": ["iam:*"],
"Resource": ["arn:aws:iam:341288657826:role/*"]
},
{
"Effect": "Allow",
"Action": ["dynamodb:*"],
"Resource": ["arn:aws:dynamodb:us-east-1:341288657826:table/travis-terraform-state"]
}
]
}
예제 3
- 다음 JSON을 YAML로 변경
JSON
"test3": {
"name": "Node.js CI",
"on": {
"push": {
"branches": "main"
},
"pull_request": {
"branches": "main"
}
},
"jobs": {
"build": {
"runs-on": "ubuntu-latest",
"steps": [
{
"uses": "actions/checkout@v2"
},
{
"name": "Use Node.js",
"uses": "actions/setup-node@v1",
"with": {
"always-auth": true,
"node-version": "12.x",
"registry-url": "https://registry.npmjs.org",
"scope": "@octocat"
}
},
{
"name": "Install dependencies",
"run": "npm ci",
"env": {
"NODE_AUTH_TOKEN": "${ secrets.NPM_TOKEN }"
}
}
]
}
}
}
YAML
test3:
name: "Node.js CI"
on:
push:
branches: "main"
pull_request:
branches: "main"
jobs:
build:
runs-on: "ubuntu-latest"
steps:
- uses: "actions/checkout@v2"
- name: "Use Node.js"
uses: "actions/setup-node@v1"
with:
always-auth: true
node-version: "12.x"
registry-url: "https://registry.npmjs.org"
scope: "@octocat"
- name: "Install dependencies"
run: "npm ci"
env:
NODE_AUTH_TOKEN: "${{secrets.NPM_TOKEN}}"