솜이가 직접 그린 그림으로 접시를 만들었다고
파는 것 처럼 예쁘게 잘 만들었네
이걸 들고 감탄을 하다가 한순간 손이 미끄러져 깨먹은...
뭐 실수니까 아무말하지 않았지만
안타깝네
어찌어찌 최대한 붙이기는 했는데...
'nobang이야기'에 해당되는 글 1951건
- 2022.06.13 접시에서 장식으로
- 2022.05.15 아웅... is exists 아니고 does exist
- 2022.04.30 맥도날드 레고팩 속임수
- 2022.04.09 2022년 벗꽃
- 2022.03.18 세상 밖으로
- 2022.02.22 신세계 모바일 상품권 교환 간단정리
- 2022.02.17 [GCP]GCE에 Docker image 배포
- 2022.02.16 [GCP google-cloud-sdk 시작]
- 2022.02.11 [AWS CodePipeLine] 초 간단 버전. 3. CodePipeline
- 2022.02.11 [AWS CodePipeLine] 초 간단 버전. 2. CodeDeploy(2)
어디에서 봤는지 정확히 기억은 안나지만
이전에 봤던 소스들 중에서 isExists()라는 이름을 본 것 같다.
이후로 존재여부에 대한 function 이름을 다 저렇게 줬는데...
오늘에야 알게 되었다.
exists()만 쓰는게 맞다.
그래서 존재하지 않는다고 메세지를
The resource is not exist라고 했는데
The resource does not exist 라고 메세지를 받았다.
그래서 찾아봤더니 exist가 동사이기 때문에 does가 맞으며 is not exist는 없는 문법이라고 한다. 두둥.
오라클함수에서 exist가 있던 것 같아 찾아보니 역시나 exist만 쓰더군 ㅡㅡ;
오늘에야 알게된 것이 다행인 건가.
"'He is not exist' is ungrammatical. Exist is the main verb. There is no verb phrase <be> + <base form of verb> in Standard English"
하..
레고팩이라며 박스에 캐릭터가 똭
그런데 알고보니 종이 떼는 것이더라
그리고는 색칠하라고 크레용
가격은 1만 오천원
버거2개 세트가격인데...
저기에 스크래치 카드도 주는데
100"당첨이라는
레고랜드 입장권도 있고....
그래서 당첨된 게
빅맥 + 탄산음료 30% 할인권 ㅡ.ㅡ
뭐냐? 장난하냐?
그것도 스크래치카드 나온거를
맥도날드앱에서 행사참여용으로 개인정보 제공해야 받을 수 있는 대~~단한 쿠폰이다 ....
오늘도 씁쓸하다 .
3월 9일 수요일 아침 몸 상태가 좋지 않았다.
일요일에 친구랑 커피샾에서 커피한잔했는데 당시 주변에 사람이 거의 없었고
월요일 출근해서 점심 먹을 때 빼고는 마스크 벗을 일도 다른사람과 부딪힐 일도 없었는데
그렇다. 코로나에 감염이 되었다.
몸살기운인 것 같아 좀 춥다고 옷 껴입고 이불덮고 했는데 안좋아서
목요일 아침 병원에 검사받으러 갔다.
8시 조금 넘어서 도착했는데도 줄이 꽤 길었다.
거의 두 시간정도 걸려 진료를 받았고 목통증, 가래약을 처방받고 신속 항원 검사를 받았다.
한 30분 기다리자 문자가 왔는데 양성이랜다 ㅜ.ㅜ
다시 병원으로 돌아가서 문자 받았다고 하니 다시 PCR하라고 해서 받고 집으로 왔다.
역시나 양성으로 일주일 격리 확정.
화장실이 있는 안방에 내가 격리되기로 하고 일주일을 버텼다.
재택으로 해놔서 일을 해야하는데 책상 없이 바닥에 양반다리로 오래 일 하니까
복숭아뼈도 아프거니와 왜 이렇게 무릎이 아픈건지
통증이라고 하기애는 불편함이 더 큰 애매~한 아픔.
다리를 뻗어도 그리 편해지는 느낌이 아니었다.
코로나의 전염성이 격리해제하고도 2~3일까지도 유지된다고 하고
기침도 좀 나고 해서 이틀(목,금) 추가로 재택신청했다.
그래서 18일 금요일 오전에 드디어 방 밖으로 나왔다.
확진안내문자랑 통장 사본이랑 챙길 것 챙겨서 동사무소 가서 지원금 신청을 하고 나오니까
누구는 격리 끝나고 역으로 가서 사람구경했다고 하던데
난 김종서의 "세상밖으로"가 듣고 싶어졌다.
노래를 들으며 기분 좋게 걸어서 집으로 왔다.
이어서 나온 신해철의 "인형의 기사 Part2"도 들으니 무척 좋았다
다행인것은 나만 확진이어서 주말동안 마스크랑 밥 따로 먹고
용기도 내 것들은 다 일회용으로 써야할 것 같다.
아무튼 많이 아프지 않고 나아서 다행이다 ㅎ
신세계 모바일 상품권은 두가지가 있다.
1. "신세계" 만 있는 거,
2. "신세계,이마트" 가 있는 거.
맞다. 이마트에서 교환하려면 2번만 가능하다. 1번은 신세계 백화점에서만 된다고 한다. 왜???
그럼 신세계백화점 타임스퀘어점으로 간다.
전철타고 2번출구로 나와서 직진한다.
몇걸음 가지않아 입구가 나오는데 그리로 들어가지 말기를 바란다.
직진으로 더 가서 다른입구로 들어가는게 낫다.
딱 금강(KUMKANG)라고 쓰인 건물. 다이소가 입점한 건물이 길건너에 있다면
그곳에 있는 신세계 백화점입구로 들어가서 에스컬레이터로 10층까지 올라간다.
상품권 교환 키오스크가 있음.
만약 2번출구로 나오자마자 있는 입구로 들어갔다면 에스컬레이터로 7층까지 바로 올라간다.
(에스컬레이터가 7층까지밖에 없다)
옆건물로 가는 통로를 거쳐 다시 에스컬레이터 타고 10층으로 가면 된다.
건물이 다르므로 10층까지 바로가는건 없다.
B1에는 이마트가 있고 그옆에 키오스크에서 2번 "신세계, 이마트" 모바일 상품권 교환이 가능하다.
여기에서 1번 신세계 상품권 교환하면 오류가 나므로 괜히 헛걸음하지 말고 10층으로 가기를 권한다.
귀찮게 저따위로 만들어 놓은건지....
GCP Console에서
워크로드로 이동(검색) 또는 Kubernetes Engine > Workloads
최초인 경우 Deploy버튼 클릭
이미 Workload가 존재하면 + 배포 클릭
Step1 : Container
. Existing container image를 선택 하면 Image path* 로 배포할 이미지를 선택(SELECT) 하라고 함.
SELECT를 누르면 우측에 Container Registry Tab과 Artifact Registry Tab 에서 기존에 push한 이미지를 선택
(참고) Artifact Registry가 비활성 되어 있으면 다음과 같이 나온다
. 하단에 continue 버튼을 눌러 다음단계를 진행한다.
Step2 : Configuration
- Application name : hellobro
- Namespace : default
. Labels
Key: app, value: hellobro
. Configuration YAML 에 VIEW YAML 버튼을 누르면 정의된 내용의 yaml 파일을 볼 수 있다.
. Cluster
Zone : aisia-south1-a (싱가폴), asia-northeast-2-a( 서울)
(Zone의 끝자리는 a,b,c 무엇이듯 상관없음. 해당 region에 여러개의 zone이 있는것임)
. Deploy 버튼을 누르면 K8S Cluster에 배포 시작
K8s cluster생성, 배포 생성, Pod에 배포
Step3 : 외부에 공개. 포트를 매핑하는 서비스를 추가해야한다.
. 배포가 정상적으로 되면 Kubernetes Engine > Clusters 에서도 확인가능하다.
. Kubernetes Engine > Workloads에 배포한 app을 클릭하여 상세화면으로 이동한다.
. 상단메뉴의 Actions > Expose를 클릭 한다( 해당메뉴는 화면이 좁을 때 세로로 점3개에 숨어있을 수 있음)
= To let othere access your deployment, expose it to create service 라고 표시된 곳이 "EXPOSE" 버튼을 눌러도 됨.
. Port mapping
. port1 : from port는 80으로 설정되어 있다. sample application에서는 8080 포트를 쓰므로 Target port를 8080 으로 설정
. Service type : Load balancer
. Service name : hellobro-service
. EXPOSE 버튼 클릭
. 생성이 완료되면 좌측메뉴에 Services * Ingress로 이동하고 External endpoints에 링크가 있다. 클릭해보면 hello화면이 나온다.
(Expose 이전에는 브라우저에서 접속이 안됐음)
Step4: 삭제
. 서비스 삭제 : Services & Ingress 에서 해당 서비스 선택 후 "DELETE"버튼 클릭
. 클러스터 삭제 : Clusters 에서 해당 클러스터 삭제
. 컨테이너 이미지 삭제 :
참조 : Deploying a containerized web application
https://cloud.google.com/kubernetes-engine/docs/tutorials/hello-app
GCP 로그인 후 화면 우측 상단에서 Cloud shell 버튼을 클릭하여 터미널을 연다.
(프로젝트도 선택된다)
Welcome to Cloud Shell! Type "help" to get started. Your Cloud Platform project in this session is set to <프로젝트ID>. Use “gcloud config set project [PROJECT_ID]” to change to a different project. idogfootman@cloudshell:~ (프로젝트ID)$ |
터미널에서
gcloud init 을 했더니... (이미 선택되어있었지만)
다시 어떤 프로젝트 환경설정을 할 것인지 정하라고 하네
현재 프로젝트번호를 입력하면
기본 region/zone을 선택하라고 함.
zone 번호를 선택하면 자동으로 region과 zone이 할당 됨.
gcloud list 로 현재 프로젝트 설정을 보여 줌.
test로 vm을 하나 만들어보면
gcloud compute instances create demo-vm1\ --image-family ubuntu-minimal-2004-lts \ --image-project ubuntu-os-cloud \ --boot-disk-size 10GB \ --machine-type f1-micro WARNING: You have selected a disk size of under [200GB]. This may result in poor I/O performance. For more information, see: https://developers.google.com/compute/docs/disks#performance. Created [https://www.googleapis.com/compute/v1/projects/yhnoh-335705/zones/asia-southeast1-a/instances/demo-vm1]. NAME: demo-vm1 ZONE: asia-southeast1-a MACHINE_TYPE: f1-micro PREEMPTIBLE: INTERNAL_IP: 10.148.0.xx EXTERNAL_IP: 34.124.146.xx STATUS: RUNNING |
간단하게 만들어졌다.
파이프라인 생성
. 파이프라인 이름 : simple-pipeline-aws (simple-pipeline이라고 project 이름을 지어놔서... 그냥 다르게 이름을 변경 한 것임. )
. 새서비스 역할
파이프 라인 이름이 자동으로 뒤에 붙기 되는데... 편집할까?
역할이름 : AWSCodePipelineServiceRole-ap-northeast-2-simple-pipeline-aws
. 소스 공급자 : AWS CodeCommit
. Repository : simple-pipeline-repo
. 브랜치 이름 : master
(1번에서 repository만 만들고 push된 게 없으므로 추가 필요)
. 빌드 스테이지 : 빌드는 선택사항이고 이번에는 빌드 없이 가는 것이므로 " 빌드 스테이지 건너뛰기" 선택
. 배포 스테이지 :
- 배포공급자 : AWS CodeDeploy
- 리전 : 아시아 태평양 서울
- 애플리케이션 이름 : simple-pipeline
- 배포그룹 : simple-pipeline-deployment-group
. 파이프라인 생성 버큰 클릭.
. 생성되면 한번은 pipeline을 실행시키는데 ... 권한부족으로 에러가 나는 경우가 있다.
해당 Role에 권한이 없다는 얘기인데 이름을 보면 Pipeline생성할 때 역할생성 허용으로 만든 이름이다.
무슨권한이 없다는 것일까?
IAM > Role에서 해당권한을 찾아 추가하면 됨.
우선 pipe라인의 어느 단계에서 발생한건지 확인해보니 Source단계다
그래서 codeCommit 권한을 준다. FullAccess로다가
권한 추가 > AWSCodeCommitFullAccess
추가한 다음 CodePipeline으로 와서 "재시도"버튼 클릭
근데 이번에는 다른 오류다
맞다. Repository만 만들고 파일은 하나도 없다 ㅋㅋ
AWS의 도움말에서 제공하는 샘플 프로젝트 파일을 첨부파일로 올려둔다.
파일 구조는
예제에서 MyDemoRepo가 내 repository로 보면 된다.
파일을 하나하나 레파지토리에서 추가해서 넣을 수도 있다.(한번에 1개씩만 된다 ㅡㅡ)
git을 이용하여 추가할 수도 있다.
-- 터미널에서 1단계에서 clone한 위치로 간다.
cd ~/Documents/cicd
cd simple-pipeline-repo
# ls 해서 .git파일만 있는것을 확인한다.
위 SampleApp_Linux.zip 압축을 풀어 파일들을 이곳으로 옮긴다.
# git 작업
git add .
git commit -m "Add sample"
git push
git push 오브젝트 나열하는 중: 10, 완료. 오브젝트 개수 세는 중: 100% (10/10), 완료. Delta compression using up to 8 threads 오브젝트 압축하는 중: 100% (8/8), 완료. 오브젝트 쓰는 중: 100% (10/10), 5.31 KiB | 2.66 MiB/s, 완료. Total 10 (delta 0), reused 0 (delta 0), pack-reused 0 To ssh://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/simple-pipeline-repo * [new branch] master -> master |
new branch 로 master 를 생성했다.
다 올라가면 aws colsole에서 확인
CodeCommit > Repository > simple-pipeline-repo
이제 Codepipeline으로 가보면 Push했을 때 돌도록 설정이 되어있다(appspec.yml에)
알아서 배포까지 성공되어 있는 상태다
Deploy가 성공했으면 EC2에 해당 소스가 반영되어있다는 뜻이다.
EC2 에 Tag를 줬으므로 해당이름(EC2forCodePipeline)을 검색하여 접속 주소를 확인한다
브라우저에서 해당 EC2주소를 치면 다음과 같이 Congratulations 라고 index.html 파일을 보여준다.
-------
AWS의 자습서 사이트의 내용
https://docs.aws.amazon.com/ko_kr/codepipeline/latest/userguide/tutorials-simple-codecommit.html
작업에 앞서 역할(Role)을 만든다. EC2를 위한 Role과 별개로 AWSCodeDeployRole 추가.
IAM > 역할 > 역할생성
. 신뢰할 수 있는 엔터티 유형 : AWS서비스
. 사용사례 : 다른 AWS 서비스의 사용 사례 선택 -> CodeDeploy 선택 하면 3가지가 나오는데 CodeDeploy 선택
. 역할세부정보
역할이름 : CodeDeployRole
역할을 미리 생성했으니 사전작업은 끝났다.
CodeDeploy를 하려면 먼저 application을 지정해야 한다.
그래서 순서상 세번째 메뉴에 있으나 "애플리케이션"을 먼저 만든다.
1. 애플리케이션 생성
CodeDeploy > 애플리케이션 > 애플리케이션 생성
(최초인 경우에는 시작하기 > 애필리케이션 생성)
애플리케이션 이름 : simple-pipeline
컴퓨팅 플랫폼 : EC2/온프레미스
2. 배포그룹 생성
해당 애플리케이션에 보면 배포그룹이 없다.
"배포 그룹 생성" 버튼 클릭
. 배포그룹 이름 : simple-pipeline-deployment-group
. 서비스 역할 : (돋보기를 클릭하여 CodeDeployRole 선택) 자동으로 arn:xxx/ 뒤에 선택한 역할이 들어온다.
. 배포유형 : 현재 위치 (In-Place)
. 환경구성 : Amazon EC2 인스턴스 (바로 이전에 배포용 EC2를 만들었으므로)
EC2에 TAG를 지정했으므로 KEY : Name, Value : EC2forCodePipeline 선택.
* 이 설정은 EC2에 배포할 때는 필수임.
. 배포설정 : 배포구성을 CodeDeployDefault.OneAtATime 으로 변경
. 로드밸런서 : 체크를 해제한다.
소스는 아직 안넣었지만.
repository설정, deploy설정을 마쳤으므로 이제 pipeline으로 한번에 흐르게 하면 된다.