일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 방화벽체크
- docker registry
- 도커
- 루비
- 패키지
- Chef
- Openswan
- ssh command
- 드라이버
- QT
- Linux
- docker
- port
- VIM
- sudo
- ssh
- RUBY
- 리눅스
- VPN
- docker-compose
- ubuntu
- DevOps
- VMware
- opsworks
- docker container
- 우분투
- driver
- AWS
- window size
- golang
- Today
- Total
구리의 창고
머리글AWS Lambda의 Deployment를 도와주는 훌륭한 도구가 있다. 바로 Apex다. 인증 방법 중 --profile옵션을 사용 할 경우 아래와 같은 에러가 나는 경우 해결책이다.NoCredentialProviders: no valid providers in chain. Deprecated.해결책Apex는 Golang으로 구현되어있고, 그에 따라 aws-sdk-go를 사용하여 구현되어있다. 그리고 sdk 문서에서 Credential 설정하는 법을 살펴보면 AWS_SDK_LOAD_CONFIG 환경 변수를 1로 설정해달라는 부분을 확인 할 수 있다.export AWS_SDK_LOAD_CONFIG=1
머리글AWS에서 EC2 인스턴스를 이용하다보면, public ip가 없는 private instance에 접속이 곤란한 경우가 있다. 아래는 AWS 문서에서 가져온 예시인데, 1개의 동일한 네트워크에서 일부는 public ip를 갖고 일부는 private ip만 갖는 경우, private instance는 네트워크 외부에서 직접 접속이 불가능하다. 이 경우 public instance에 접속 할 수 있다면, 터널링을 통해 private instance에 접근 할 수 있다.출처. http://docs.aws.amazon.com/ko_kr/AmazonVPC/latest/UserGuide/VPC_Scenario2.html 터널링VPN을 사용하면 정말 좋은 선택이겠지만, 위 구성에서 네트워크의 인스턴스 중 하나..
머리글AWS Opsworks는 Chef를 기반으로한 강력한 DevOps 도구이다. 오픈소스로 사용되는 각종 cookbook을 사용하며 AWS 인터페이스를 그대로 사용 할 수 있는 점이 큰 장점 중 하나이다. 2017년 9월 5일 당시 AWS Opsworks는 Chef11, Chef12 두 가지 버전으로 운영되고 있다. 둘 다 사용해본 생각을 간단히 정리 하려고한다.공통위에 설명한대로 Opsworks는 Chef cookbook을 기반으로 돌아간다. opsworks-agent-cli라는 프로그램이 Opsworks 대시보드에서 명령을 받아 내부적으로 custom cookbook을 업데이트하고 chef-client를 실행해준다. 차이점1. Built-in CookbookChef11과 Chef12의 가장 큰 차이..
소개Ruby에는 Mixin 구현을 위한 module이란 기능이 있다. 코드를 재활용하거나 큰 코드를 나눠서 구현해 여기 저기에서 필요한 코드를 가져올 때 유용하다. 일반적으로 class에 include 혹은 extend 해서 사용하게 되는데, 어떤 경우에 class method와 instance method가 되는지 코드를 통해 정리해보려고한다.includeclass Bar에 module Foo를 include하면 instance method foo가 된다.module Foo def foo puts "method foo" end end class Bar include Foo end Bar.new.foo # method foo Bar.foo # undefined method extendclass Bar에 ..
소개 AWS Opsworks(이하 Opsworks)의 많은 부분을 이미 안다고 가정하고 설명 할 것이다. Opsworks는 2017년 9월 1일 기준으로 Chef11과 Chef12가 함께 운영되고 있다. 두 버전 모두 Custom Cookbook을 사용 할 수 있다. Custom Cookbook을 작성하다보면 실제 Opsworks에서 생성한 Instance에서 테스트 및 디버깅을 해보고 싶은 욕구가 많이 생기는데 생각처럼 쉽지가 않다. 기본적으로 Ospworks는 opsworks-agent-cli가 내부적으로 설정 값을 읽어 chef-client를 실행하는 구조로 되어있다. Chef11과 Chef12는 그 구조가 다르므로 이 글에서는 Chef11 Custom Cookbook 디버깅 방법을 설명한다.ops..
소개Ubuntu를 사용 할 때, root유저로 직접 접근하는 것은 다소 위험하다. 일반적으로 root 유저 로그인을 막아두고 다른 계정에 root 권한을 가져 갈 수 있도록 한다. 다른 계정에 sudo 권한을 넣어보자. visudo를 사용하여 sudoer에 넣는 방법도 있지만, 여기서는 sudo 그룹에 넣는 방법을 확인하자.단계1. 유저추가guri란 이름의 계정을 추가하자.$ adduser guri단계2. sudo 그룹에 추가guri 계정을 아래와 같이 추가하고 저장한다.$ usermod -aG sudo guri 단계3. sudo 확인해당 계정으로 접속하여 sudo 권한이 제대로 추가됐는지 확인한다.
개요수 많은 Google API 중 OAuth2를 사용해야만 접근이 되는 것들이 있다. 그 중 한 가지 예로 Google Adsense API가 있다. Google에서 친절하게 몇 가지 언어로 작성된 예제를 제공하는데 이 중에는 Golang이 없어 참 난감하다. OAuth2 프로토콜에 대한 이해를 하기보다는 OAuth2 인증을 이용해 Google API를 사용하는 방법을 얘기하겠다. 코드만 보고 싶으면 https://github.com/odg0318/google-adsense-example에서 확인 할 수 있다.구조코드를 작성하기 앞서, 이해를 좀 더 돕기 위해 인증과정을 그림으로 확인하자.출처: https://developers.google.com/identity/protocols/OAuth21. 인증..
소개Docker를 이리저리 쓰다보면 이미지가 너무 많이 생기는 경우가 발생한다. 그리고 특정 Repository를 검색해 삭제하고 싶을 때도 있다. 자체 명령어에 filter 옵션이 있긴하지만 이걸로는 턱없이 부족한 감이 있다. 리눅스 유틸리티와 조합하면 쉽게 해낼 수 있다.테스트 환경일단 Docker 이미지 목록을 확인하려면 docker images로 현재 목록을 확인해야한다. 아래처럼 5개의 이미지가 있다.$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox 1.0.1 efe10ee6727f 2 weeks ago 1.13 MB busybox 1.0.2 efe10ee6727f 2 weeks ago 1.13 MB busybox 1.0.5 efe10e..
개요작업을 하다보면 프로세스를 강제로 종료해야 할 일이 생긴다. 프로세스를 찾아 종료하는 법을 알아보자.방법1. ps -ef | grep PROCESS프로세스 목록을 확인하고, grep으로 한 번 더 검색하는 방법이다. 결과 값에서 pid를 찾아 kill -9 pid로 종료한다.방법2. pgrep위에 ps -ef | grep 을 합쳐놓은 명령어다. 방법1보다 간단하고 편하다. 결과 값이 pid이므로 kill -9 pid로 종료한다.방법3. pkill -9 -ef PROCESS프로세스를 찾아 바로 종료하는 명령어다. 이게 제일 편하다. 출처: https://bakyeono.net/post/2015-05-05-linux-kill-process-by-name.html
소개Golang에서는 기본으로 넘겨받은 인자를 파싱하는 패키지가 포함되어있다. 이 중 Command Line을 파싱하는 오픈소스는 굉장히 많이 있다. 주로 사용하는걸 하나 추천하면 urfave/cli가 있다. 하지만 Command Line이 아닌 사용자로부터 입력받아 문자열을 파싱하려면 약간의 꼼수가 필요하다. 이를 가능하게 해주는 것이 FlagSet이다.FlagFlagSet을 살펴보기 전에 기본 예제로 나와있는 Flag 사용법을 살짝 살펴보자.package main import ( "flag" "fmt" ) func main() { foo := flag.String("foo", "foo", "a string") flag.Parse() fmt.Println("foo: ", *foo) }위 예제에서는 프로..