Rails가 실행중인 검증 서버 (EC2)를 AWSLambda로 지정된 시간 동안 시작하여 비용을 절감합니다.
소개
서비스를 운용하고 있으면 반드시 과제가 되는 「인프라 코스트」. 가능하면 가능한 한 돈을 쓰고 싶지 않은 곳이군요.
이번에는 Rails가 움직이고 있는 검증용 서버를 AWSLambda를 사용해 필요할 때만 기동하도록(듯이) 했습니다.
이번 신세를 진 참고 사이트
AWSLambda 설정
htp : //에서 v.ぁsss d. jp / c ぉ d / s 치 ぇ ぇ d_와 _ s rt _ ns s 단세 _ f 여 m ぁ mb이다 /
unicorn 자동 시작
htp : // bg. 츳코 rp. 이. jp/bぉg/2015/10/23/우니코 r-아우토-s rt/
delayed_job 자동 시작
htp : // bg. 짱 삐에레. 코m/1037
매우 참고가 되었습니다. 고맙습니다.
주의사항
이번 인스턴스 ID를 지정하여 서버를 자동 시작 및 중지합니다. 인스턴스 ID를 지정할 때 검증 서버인지 확인하십시오.
환경
환경
버전
우분투
14.04
루비
2.1.2
Rails
4.0.2
capistrano
3.2.1
delayed_job
4.0.6
이번에는 위 구성의 서버를 대상으로 검증하고 있습니다.
또한 Ruby 설치에는 rbenv를 사용합니다.
AWSLambda 설정
AWS에 로그인한 후 아래 그림과 같이 Lambda를 선택합니다.
서버 자동 시작 스크립트 작성
Create aLambda function 선택
스크립트 템플릿에서 hello-world-python을 선택
Lambda function code에 스크립트 작성
시작 스크립트import boto3
def lambda_handler(event, context):
client = boto3.client('ec2')
response = client.start_instances(
InstanceIds=[
'インスタンスID',
]
)
print response
Role 만들기
페이지 중앙에 "Role"항목이 있으므로 아래 그림과 같이 선택
선택이 끝나면 다른 탭이 열리므로 아래 그림을 참고로 입력
역할 스크립트{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": [
"arn:aws:logs:*:*:*",
"arn:aws:ec2:*:*:*"
]
}
]
}
생성이 끝나면 원래 탭으로 돌아가서 다시 "Role"을 선택하고 방금 만든 롤을 선택합니다.
이상이 끝나면 Next를 눌러 확인 화면으로
시작 시간 설정
Fucntion이 가능하면 기동 시간을 설정합니다.
상단의 탭에서 「Event sources」 => 「Add event source」를 선택하면 아래 그림과 같이 됩니다.
여기서 CloudWatch Events - Schedule을 선택합니다.
그러면 아래 그림과 같이 됩니다. 이번에는 월요일부터 금요일 9시에 시작하도록 설정합니다.
*cron의 설정은 UTC이므로 주의하십시오.
이것으로 완료됩니다.
서버 자동 중지 스크립트 작성
기본적으로는 기동과 같은 순서입니다만 일부 스크립트를 재기록합니다.
정지 스크립트import boto3
def lambda_handler(event, context):
client = boto3.client('ec2')
response = client.stop_instances(
InstanceIds=[
'インスタンスID',
]
)
print response
이것으로 람다 측이 완료되었습니다.
검증용 서버
서버가 시작될 때 unicorn과 delayed_job을 자동으로 시작합니다.
자동 시작 도구 설치
우분투의 경우 chkconfig를 사용할 수 없으므로 sysv-rc-conf를 설치합니다.
설치sudo apt-get install sysv-rc-conf
unicorn 자동 시작
unicorn 시작 스크립트 만들기
etc/init.d/
아래에 unicorn 파일 만들기
etc/init.d/sudo touch unicorn
unicorn 파일 권한을 755로 변경
권한 변경sudo chmod 755 unicorn
unicorn 파일에 다음을 설명
etc/init.d/unicorn#!/bin/sh
#description:unicorn shell
NAME="Unicorn"
ENV=staging
USER=ubuntu
# 環境にあわせてください
ROOT_DIR="/var/www/vhosts/app/current"
GEMFILE="${ROOT_DIR}/Gemfile"
PID="${ROOT_DIR}/tmp/pids/unicorn.pid"
CONF="${ROOT_DIR}/config/unicorn/${ENV}.rb"
OPTIONS=""
start()
{
if [ -e $PID ]; then
echo "$NAME already started"
exit 1
fi
echo "start $NAME"
cd $ROOT_DIR
su - ${USER} -c "cd ${ROOT_RIR} && BUNDLE_GEMFILE=${GEMFILE} bundle exec unicorn -c ${CONF} -E ${ENV} -D ${OPTIONS}"
}
stop()
{
if [ ! -e $PID ]; then
echo "$NAME not started"
exit 1
fi
echo "stop $NAME"
kill -QUIT `cat ${PID}`
}
force_stop()
{
if [ ! -e $PID ]; then
echo "$NAME not started"
exit 1
fi
echo "stop $NAME"
kill -INT `cat ${PID}`
}
reload()
{
if [ ! -e $PID ]; then
echo "$NAME not started"
start
exit 0
fi
echo "reload $NAME"
kill -HUP `cat ${PID}`
}
restart()
{
stop
sleep 3
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
force-stop)
force_stop
;;
reload)
reload
;;
restart)
restart
;;
*)
echo "Syntax Error: release [start|stop|force-stop|reload|restart]"
;;
esac
위에서 만든 스크립트를 서버 시작시 자동 시작하도록 설정하십시오.
unicorn 자동 시작sudo sysv-rc-conf unicorn on
delayed_job 자동 시작
rails 프로젝트 내에 스크립트 작성
sudo touch /var/www/vhosts/app/shared/config/delayed_job.monitrc
AWSLambda 설정
htp : //에서 v.ぁsss d. jp / c ぉ d / s 치 ぇ ぇ d_와 _ s rt _ ns s 단세 _ f 여 m ぁ mb이다 /
unicorn 자동 시작
htp : // bg. 츳코 rp. 이. jp/bぉg/2015/10/23/우니코 r-아우토-s rt/
delayed_job 자동 시작
htp : // bg. 짱 삐에레. 코m/1037
매우 참고가 되었습니다. 고맙습니다.
주의사항
이번 인스턴스 ID를 지정하여 서버를 자동 시작 및 중지합니다. 인스턴스 ID를 지정할 때 검증 서버인지 확인하십시오.
환경
환경
버전
우분투
14.04
루비
2.1.2
Rails
4.0.2
capistrano
3.2.1
delayed_job
4.0.6
이번에는 위 구성의 서버를 대상으로 검증하고 있습니다.
또한 Ruby 설치에는 rbenv를 사용합니다.
AWSLambda 설정
AWS에 로그인한 후 아래 그림과 같이 Lambda를 선택합니다.
서버 자동 시작 스크립트 작성
Create aLambda function 선택
스크립트 템플릿에서 hello-world-python을 선택
Lambda function code에 스크립트 작성
시작 스크립트import boto3
def lambda_handler(event, context):
client = boto3.client('ec2')
response = client.start_instances(
InstanceIds=[
'インスタンスID',
]
)
print response
Role 만들기
페이지 중앙에 "Role"항목이 있으므로 아래 그림과 같이 선택
선택이 끝나면 다른 탭이 열리므로 아래 그림을 참고로 입력
역할 스크립트{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": [
"arn:aws:logs:*:*:*",
"arn:aws:ec2:*:*:*"
]
}
]
}
생성이 끝나면 원래 탭으로 돌아가서 다시 "Role"을 선택하고 방금 만든 롤을 선택합니다.
이상이 끝나면 Next를 눌러 확인 화면으로
시작 시간 설정
Fucntion이 가능하면 기동 시간을 설정합니다.
상단의 탭에서 「Event sources」 => 「Add event source」를 선택하면 아래 그림과 같이 됩니다.
여기서 CloudWatch Events - Schedule을 선택합니다.
그러면 아래 그림과 같이 됩니다. 이번에는 월요일부터 금요일 9시에 시작하도록 설정합니다.
*cron의 설정은 UTC이므로 주의하십시오.
이것으로 완료됩니다.
서버 자동 중지 스크립트 작성
기본적으로는 기동과 같은 순서입니다만 일부 스크립트를 재기록합니다.
정지 스크립트import boto3
def lambda_handler(event, context):
client = boto3.client('ec2')
response = client.stop_instances(
InstanceIds=[
'インスタンスID',
]
)
print response
이것으로 람다 측이 완료되었습니다.
검증용 서버
서버가 시작될 때 unicorn과 delayed_job을 자동으로 시작합니다.
자동 시작 도구 설치
우분투의 경우 chkconfig를 사용할 수 없으므로 sysv-rc-conf를 설치합니다.
설치sudo apt-get install sysv-rc-conf
unicorn 자동 시작
unicorn 시작 스크립트 만들기
etc/init.d/
아래에 unicorn 파일 만들기
etc/init.d/sudo touch unicorn
unicorn 파일 권한을 755로 변경
권한 변경sudo chmod 755 unicorn
unicorn 파일에 다음을 설명
etc/init.d/unicorn#!/bin/sh
#description:unicorn shell
NAME="Unicorn"
ENV=staging
USER=ubuntu
# 環境にあわせてください
ROOT_DIR="/var/www/vhosts/app/current"
GEMFILE="${ROOT_DIR}/Gemfile"
PID="${ROOT_DIR}/tmp/pids/unicorn.pid"
CONF="${ROOT_DIR}/config/unicorn/${ENV}.rb"
OPTIONS=""
start()
{
if [ -e $PID ]; then
echo "$NAME already started"
exit 1
fi
echo "start $NAME"
cd $ROOT_DIR
su - ${USER} -c "cd ${ROOT_RIR} && BUNDLE_GEMFILE=${GEMFILE} bundle exec unicorn -c ${CONF} -E ${ENV} -D ${OPTIONS}"
}
stop()
{
if [ ! -e $PID ]; then
echo "$NAME not started"
exit 1
fi
echo "stop $NAME"
kill -QUIT `cat ${PID}`
}
force_stop()
{
if [ ! -e $PID ]; then
echo "$NAME not started"
exit 1
fi
echo "stop $NAME"
kill -INT `cat ${PID}`
}
reload()
{
if [ ! -e $PID ]; then
echo "$NAME not started"
start
exit 0
fi
echo "reload $NAME"
kill -HUP `cat ${PID}`
}
restart()
{
stop
sleep 3
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
force-stop)
force_stop
;;
reload)
reload
;;
restart)
restart
;;
*)
echo "Syntax Error: release [start|stop|force-stop|reload|restart]"
;;
esac
위에서 만든 스크립트를 서버 시작시 자동 시작하도록 설정하십시오.
unicorn 자동 시작sudo sysv-rc-conf unicorn on
delayed_job 자동 시작
rails 프로젝트 내에 스크립트 작성
sudo touch /var/www/vhosts/app/shared/config/delayed_job.monitrc
환경
버전
우분투
14.04
루비
2.1.2
Rails
4.0.2
capistrano
3.2.1
delayed_job
4.0.6
이번에는 위 구성의 서버를 대상으로 검증하고 있습니다.
또한 Ruby 설치에는 rbenv를 사용합니다.
AWSLambda 설정
AWS에 로그인한 후 아래 그림과 같이 Lambda를 선택합니다.
서버 자동 시작 스크립트 작성
Create aLambda function 선택
스크립트 템플릿에서 hello-world-python을 선택
Lambda function code에 스크립트 작성
시작 스크립트import boto3
def lambda_handler(event, context):
client = boto3.client('ec2')
response = client.start_instances(
InstanceIds=[
'インスタンスID',
]
)
print response
Role 만들기
페이지 중앙에 "Role"항목이 있으므로 아래 그림과 같이 선택
선택이 끝나면 다른 탭이 열리므로 아래 그림을 참고로 입력
역할 스크립트{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": [
"arn:aws:logs:*:*:*",
"arn:aws:ec2:*:*:*"
]
}
]
}
생성이 끝나면 원래 탭으로 돌아가서 다시 "Role"을 선택하고 방금 만든 롤을 선택합니다.
이상이 끝나면 Next를 눌러 확인 화면으로
시작 시간 설정
Fucntion이 가능하면 기동 시간을 설정합니다.
상단의 탭에서 「Event sources」 => 「Add event source」를 선택하면 아래 그림과 같이 됩니다.
여기서 CloudWatch Events - Schedule을 선택합니다.
그러면 아래 그림과 같이 됩니다. 이번에는 월요일부터 금요일 9시에 시작하도록 설정합니다.
*cron의 설정은 UTC이므로 주의하십시오.
이것으로 완료됩니다.
서버 자동 중지 스크립트 작성
기본적으로는 기동과 같은 순서입니다만 일부 스크립트를 재기록합니다.
정지 스크립트import boto3
def lambda_handler(event, context):
client = boto3.client('ec2')
response = client.stop_instances(
InstanceIds=[
'インスタンスID',
]
)
print response
이것으로 람다 측이 완료되었습니다.
검증용 서버
서버가 시작될 때 unicorn과 delayed_job을 자동으로 시작합니다.
자동 시작 도구 설치
우분투의 경우 chkconfig를 사용할 수 없으므로 sysv-rc-conf를 설치합니다.
설치sudo apt-get install sysv-rc-conf
unicorn 자동 시작
unicorn 시작 스크립트 만들기
etc/init.d/
아래에 unicorn 파일 만들기
etc/init.d/sudo touch unicorn
unicorn 파일 권한을 755로 변경
권한 변경sudo chmod 755 unicorn
unicorn 파일에 다음을 설명
etc/init.d/unicorn#!/bin/sh
#description:unicorn shell
NAME="Unicorn"
ENV=staging
USER=ubuntu
# 環境にあわせてください
ROOT_DIR="/var/www/vhosts/app/current"
GEMFILE="${ROOT_DIR}/Gemfile"
PID="${ROOT_DIR}/tmp/pids/unicorn.pid"
CONF="${ROOT_DIR}/config/unicorn/${ENV}.rb"
OPTIONS=""
start()
{
if [ -e $PID ]; then
echo "$NAME already started"
exit 1
fi
echo "start $NAME"
cd $ROOT_DIR
su - ${USER} -c "cd ${ROOT_RIR} && BUNDLE_GEMFILE=${GEMFILE} bundle exec unicorn -c ${CONF} -E ${ENV} -D ${OPTIONS}"
}
stop()
{
if [ ! -e $PID ]; then
echo "$NAME not started"
exit 1
fi
echo "stop $NAME"
kill -QUIT `cat ${PID}`
}
force_stop()
{
if [ ! -e $PID ]; then
echo "$NAME not started"
exit 1
fi
echo "stop $NAME"
kill -INT `cat ${PID}`
}
reload()
{
if [ ! -e $PID ]; then
echo "$NAME not started"
start
exit 0
fi
echo "reload $NAME"
kill -HUP `cat ${PID}`
}
restart()
{
stop
sleep 3
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
force-stop)
force_stop
;;
reload)
reload
;;
restart)
restart
;;
*)
echo "Syntax Error: release [start|stop|force-stop|reload|restart]"
;;
esac
위에서 만든 스크립트를 서버 시작시 자동 시작하도록 설정하십시오.
unicorn 자동 시작sudo sysv-rc-conf unicorn on
delayed_job 자동 시작
rails 프로젝트 내에 스크립트 작성
sudo touch /var/www/vhosts/app/shared/config/delayed_job.monitrc
import boto3
def lambda_handler(event, context):
client = boto3.client('ec2')
response = client.start_instances(
InstanceIds=[
'インスタンスID',
]
)
print response
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": [
"arn:aws:logs:*:*:*",
"arn:aws:ec2:*:*:*"
]
}
]
}
import boto3
def lambda_handler(event, context):
client = boto3.client('ec2')
response = client.stop_instances(
InstanceIds=[
'インスタンスID',
]
)
print response
서버가 시작될 때 unicorn과 delayed_job을 자동으로 시작합니다.
자동 시작 도구 설치
우분투의 경우 chkconfig를 사용할 수 없으므로 sysv-rc-conf를 설치합니다.
설치
sudo apt-get install sysv-rc-conf
unicorn 자동 시작
unicorn 시작 스크립트 만들기
etc/init.d/
아래에 unicorn 파일 만들기etc/init.d/
sudo touch unicorn
unicorn 파일 권한을 755로 변경
권한 변경
sudo chmod 755 unicorn
unicorn 파일에 다음을 설명
etc/init.d/unicorn
#!/bin/sh
#description:unicorn shell
NAME="Unicorn"
ENV=staging
USER=ubuntu
# 環境にあわせてください
ROOT_DIR="/var/www/vhosts/app/current"
GEMFILE="${ROOT_DIR}/Gemfile"
PID="${ROOT_DIR}/tmp/pids/unicorn.pid"
CONF="${ROOT_DIR}/config/unicorn/${ENV}.rb"
OPTIONS=""
start()
{
if [ -e $PID ]; then
echo "$NAME already started"
exit 1
fi
echo "start $NAME"
cd $ROOT_DIR
su - ${USER} -c "cd ${ROOT_RIR} && BUNDLE_GEMFILE=${GEMFILE} bundle exec unicorn -c ${CONF} -E ${ENV} -D ${OPTIONS}"
}
stop()
{
if [ ! -e $PID ]; then
echo "$NAME not started"
exit 1
fi
echo "stop $NAME"
kill -QUIT `cat ${PID}`
}
force_stop()
{
if [ ! -e $PID ]; then
echo "$NAME not started"
exit 1
fi
echo "stop $NAME"
kill -INT `cat ${PID}`
}
reload()
{
if [ ! -e $PID ]; then
echo "$NAME not started"
start
exit 0
fi
echo "reload $NAME"
kill -HUP `cat ${PID}`
}
restart()
{
stop
sleep 3
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
force-stop)
force_stop
;;
reload)
reload
;;
restart)
restart
;;
*)
echo "Syntax Error: release [start|stop|force-stop|reload|restart]"
;;
esac
위에서 만든 스크립트를 서버 시작시 자동 시작하도록 설정하십시오.
unicorn 자동 시작
sudo sysv-rc-conf unicorn on
delayed_job 자동 시작
rails 프로젝트 내에 스크립트 작성
sudo touch /var/www/vhosts/app/shared/config/delayed_job.monitrc
delayed_job.monitrc
check process delayed_job
with pidfile /var/www/vhosts/app/shared/pids/delayed_job.pid
start program = "/bin/su - ubuntu -c 'cd /var/www/vhosts/app/current; PATH=/usr/local/rbenv/shims:/usr/local/rbenv/bin:$PATH RBENV_ROOT=~/.rbenv RBENV_VERSION=2.1.2 RAILS_ENV=staging ~/.rbenv/bin/rbenv exec bundle exec bin/delayed_job -n 2 --queues=mailer,tracking --prefix=reports --pool=mailer:2 --pool=tracking:1 --pool=*:2 start'"
stop program = "/bin/su - ubuntu -c 'cd /var/www/vhosts/app/current; PATH=/usr/local/rbenv/shims:/usr/local/rbenv/bin:$PATH RBENV_ROOT=~/.rbenv RBENV_VERSION=2.1.2 RAILS_ENV=staging ~/.rbenv/bin/rbenv exec bundle exec bin/delayed_job -n 2 --queues=mailer,tracking --prefix=reports --pool=mailer:2 --pool=tracking:1 --pool=*:2 stop'"
monit 설치
설치
sudo apt-get install monit
자동 시작 설정
자동 시작
sudo sysv-rc-conf monit on
monit 파일 편집
/etc/monit/
아래의 monitrc를 아래와 같이 다시 씁니다./etc/monit/monitrc
set daemon 120
set logfile /var/log/monit.log
set idfile /var/lib/monit/id
set statefile /var/lib/monit/state
set eventqueue
basedir /var/lib/monit/events
slots 100
set httpd port 2812 and
allow localhost
###############################################################################
## Includes
###############################################################################
include /etc/monit/conf.d/*
# 環境に合わせてください
include /var/www/vhosts/app/shared/config/delayed_job.monitrc
권한을 루트 사용자 700으로 설정하십시오.
권한 변경
sudo chmod 700 monitrc
이상입니다. 이것으로 검증용 서버가 월요일~금요일의 9시~23시까지 기동하게 됩니다.
Reference
이 문제에 관하여(Rails가 실행중인 검증 서버 (EC2)를 AWSLambda로 지정된 시간 동안 시작하여 비용을 절감합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kakky0418/items/54ad436fef7f0e83c517텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)