AWS Elastic Beanstalk for Docker에서 Go 웹 앱을 실행해 보았습니다.

최근 발표된 Elastic Beanstalk for Docker에서 모든 언어로 작성된 애플리케이션을 Elastic Beanstalk에서 실행할 수 있습니다.

그래서 바로 Go로 쓴 웹 앱을 움직여 보았습니다.
여기에서 사용한 소스 코드는 다음에서 구할 수 있습니다.

웹 애플리케이션 만들기



작성하는 웹 애플리케이션은 git으로 관리해야 합니다.
Hello로 출력하기만 하면 됩니다.
package main

import (
  "fmt"
  "net/http"
)

type Hello struct{}

func (h Hello) ServeHTTP(
  w http.ResponseWriter,
  r *http.Request) {
  fmt.Fprint(w, "Hello!")
}

func main() {
  var h Hello
  http.ListenAndServe(":8080", h)
}

Dockerfile 및 Dockerrunaws.json 준비



Dockerfile



Ubuntu 14.04를 기반으로 go 환경을 구축하고 있습니다.
FROM ubuntu:14.04

RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y curl git mercurial make binutils bison gcc build-essential golang

# Set GOPATH/GOROOT environment variables
RUN mkdir -p /go
ENV GOPATH /go
ENV PATH $GOPATH/bin:$PATH

# Set up app
ADD . /app
RUN cd /app && go build hello.go

# Removed unnecessary packages
RUN apt-get autoremove -y

# Clear package repository cache
RUN apt-get clean all

EXPOSE 8080
CMD ["/app/hello"]

Dockerrun.aws.json



Elastic Beanstalk 용 구성 파일입니다. hello.go에서 hello.go 포트에서 웹 응용 프로그램을 시작했으므로 여기에서는 8080를 지정합니다. 8080와 같은 동작을 합니다. 포트는 여러 개 걸리지만 첫 번째 사람만 바인딩되므로 여러 포트를 기다리는 Docker 파일은 Elastic Beanstalk의 ELB를 통해 사용할 수 없습니다.
{
  "AWSEBDockerrunVersion": "1",
  "Ports": [
    {
      "ContainerPort": "8080"
    }
  ]
}

git 저장소 준비


  • hello.go
  • Dockerfile
  • Dockerrun.aws.json

  • 세 개의 파일을 동일한 디렉터리로 만들고 docker run -p 8080:8080 git 리포지토리로 관리합니다.

    애플리케이션 배포



    준비가 되었으므로 Elastic Beanstalk에 배포합니다. 이번 애플리케이션 배포에는 졸작ebfly을 이용합니다. Docker 지원은 0.0.7부터이므로 이미 설치한 사용자는 업데이트해야합니다.
    $ gem install ebfly
    

    Elastic Beanstalk를 사용하려면 환경 변수에서 액세스 키를 설정하십시오.
    $ export AWS_ACCESS_KEY=[your access key]
    $ export AWS_SECRET_ACCESS_KEY=[your secret key]
    $ export AWS_REGION=us-east-1 # ap-northeast-1 でもOK
    

    애플리케이션 및 Docker environment 만들기



    Elastic Beanstalk는 애플리케이션을 작성하고 그 안에 environment (production, staging, dev, ...)를 작성하는 구성이므로 먼저 애플리케이션을 작성합니다. 여기서는 docker라는 응용 프로그램을 만듭니다.
    $ ebfly app create docker
    

    응용 프로그램을 만든 후 Docker용 environment를 만듭니다. 현재 Docker 0.9만 지원되므로 다음 명령으로 작성합니다. 여기서는 git init && git add . && git commit -m 'First commit'라는 환경을 만듭니다.
    $ ebfly env create web -s docker0.9 -a docker
    

    명령을 치면 environment 의 작성이 시작됩니다만, 이것에 5분 정도 걸립니다.
    환경 상태는 web에서 확인할 수 있습니다. ebfly env infostatus가되면 준비가 완료됩니다.
    $ ebfly env info web -a docker
    ebfly env info web -a docker
    
    === environment info ===
    application name: docker
    environment id:
    environment name: docker-web
    description:
    status:     Ready
    health:     Green
    tier:     WebServer Standard 1.0
    solution stack name:  64bit Amazon Linux 2014.03 v1.0.2 running Docker 0.9.0
    endpoint url:   awseb-e-w-AWSEBLoa-956NXWFC8619-1360484152.us-west-1.elb.amazonaws.com
    cname:
    updated at:   2014-04-25 01:57:49 UTC
    

    배포



    다음 명령을 사용하여 Ready 분기를 배포합니다.
    $ ebfly env push web master -a docker
    

    여기에서도 배포에 10분~20분 정도의 시간이 걸립니다. Docker build가 달리고 있기 때문에 당연하네요. 여기 시간을 단축하고 싶다면 미리 이미지를 만들어 둡시다.
    master에서 상태를 확인하거나 Management Console에서 다음과 같이 배포하면 완료됩니다.



    앱에 액세스


    ebfly env info로 표시되는 ebfly env info는 배포된 응용 프로그램의 URL입니다. 브라우저에서 열고 cname가 표시되는지 확인하십시오.
    $ ebfly env info web -a docker
    
    === environment info ===
    ...
    cname: docker-web-1234556677.elasticbeanstalk.com
    ...
    

    Mac 사용자는 Hello 명령을 사용하면 간단합니다.
    $ ebfly env open web -a docker
    



    할 수 있었다!

    요약


  • Elastic Beanstalk for Docker 놀라운! 간단!
  • ebfly 편리! 간단!

  • 매우 간단하기 때문에 여러분, 다양한 언어로 시도해보십시오.

    좋은 웹페이지 즐겨찾기