AWS CodeDeploy를 사용한 Laavel 어플리케이션 설계

12580 단어 CodeDeployLaravelAWS
Laravel Advent Calendar 2014 내가 20일째 맡은 일이야@kurikazu.잘 부탁드립니다.

개시하다


지난달AWS re:Invent 2014에 발표AWS CodeDeploy.AWS CodeDeploy는 EC2 인스턴스를 대상으로 Amazon S3의 구간 또는 GiitHub의 창고에서 소스를 미리 처리하는 서비스입니다.
상세한 설명과 상기 링크와 다른 보도는 이번에 GiitHub 창고에서 EC2까지 Laavel 응용 프로그램을 개발하는 방법을 간단하게 요약하고자 합니다.
또한 Laavel 애플리케이션이 GiitHub에 제출됐다는 전제로 대화를 나눈다.
일의 순서는 다음과 같다.
1. IAM Role의 설정
2. CodeDeploy 에이전트 설치
3. AppSpec 설정
4. CodeDeploy의 인스턴스 프로그래밍 허용
5. 실행 프로그램

1. IAM Role의 설정


CodeDeploy를 사용하려면 다음 2개의 IAM 역할이 필요합니다.
a. EC2 인스턴스에 지정된 IAM Role
b. CodeDeploy에서 사용하는 IAM Role

a. EC2 인스턴스에 지정된 IAM Role


설계된 EC2 인스턴스에 CodeDeploy Agent를 추가해야 하지만 CodeDeploy Agent는 Amazon S3에서 복제하여 설치합니다.s3: Get* 및 s3: List*의 실행을 허용하는 IAM Role을 지정하십시오.
(개인은 다른 설치 방법을 준비해야 한다. 이유는 다음과 같다.)
ロールを既存のインスタンスに割り当てることはできません。ロールは新しいインスタンスを起動するときのみ指定できます。
参照:Amazon EC2 の IAM ロール
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html

b. CodeDeploy에서 사용하는 IAM Role


CodeDeploy에서 EC2와 AutoScoling 등의 정보를 참조하기 위해 IAM Role도 필요해졌다.
AWS Management Colsole 에서 IAM 제작 Role 을 선택합니다.
다음 JSON을 설정하려면 문서를 참조하십시오.
Role.json
{
    "Statement": [
        {
            "Action": [
                "ec2:Describe*"
            ],
            "Effect": "Allow",
            "Resource": [
                "*"
            ]
        },
        {
            "Action": [
                "autoscaling:CompleteLifecycleAction",
                "autoscaling:DeleteLifecycleHook",
                "autoscaling:DescribeLifecycleHooks",
                "autoscaling:DescribeAutoScalingGroups",
                "autoscaling:PutLifecycleHook",
                "autoscaling:RecordLifecycleActionHeartbeat"
            ],
            "Effect": "Allow",
            "Resource": [
                "*"
            ]
        }
    ]
}
Trusted Enities도 다음 설정을 위해 설명서를 참조하십시오.
TrustedEntities
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": [
            "codedeploy.us-east-1.amazonaws.com",
            "codedeploy.us-west-2.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

2. CodeDeploy 에이전트 설치


그런 다음 개발자의 EC2 인스턴스에 CodeDeploy Agent를 설치합니다.
만약 상술한 1의 a를 만족시키지 못한다면 여기에 오류가 발생할 것이다.
sudo yum update
sudo yum install aws-cli
cd /home/ec2-user
aws s3 cp s3://aws-codedeploy-us-east-1/latest/install . --region us-east-1
chmod +x ./install
sudo ./install auto

3. AppSpec 설정


CodeDeploy에서 응용 프로그램의 정의와 예/후 처리의 정의.yml 파일로 지정합니다.
Laavel에서 이 파일을 프로젝트 디렉토리 바로 아래에 배치합니다.
laravel
 ├ app
 ├ bootstrap
 ├ public
 ├ appspec.yml
 :
다음은/홈/ec2-user/laaveltest/아래git 창고 아래의 모든 파일을 미리 처리하는 예입니다.디버그 전에 Apache를 중지하고 디버그 후 store 디렉토리의 권한을 777로 변경하고 Apache를 시작합니다.
appspec.yml
version: 0.0
os: linux
files:
- source: /
destination: /home/ec2-user/laraveltest/
hooks:
ApplicationStop:
- location: scripts/stop_server
timeout: 300
runas: root
AfterInstall:
- location: scripts/setpermission.sh
timeout: 300
runas: root
ApplicationStart:
- location: scripts/start_server
timeout: 300
runas: root
stop_server
#!/bin/bash
isExistApp = `pgrep httpd`
if [[ -n  $isExistApp ]]; then
    service httpd stop        
fi
setpermission.sh
#!/bin/bash
chmod -R 777 /home/ec2-user/laraveltest/app/storage
start_server
#!/bin/bash
service httpd start
각 프로그램(Application Stop, Before Install, After Install, Application Start, Validate Service)을 연결할 수 있습니다.라벨이라면 아래 설명과 같이 끼워서 처리할 수 있고, 디프로를 제외한 각종 처리도 자동으로 할 수 있다.
라이프 사이클
처리 예
ApplicationStop
웹 서버 중지 등
BeforeInstall
DB 백업, 처리된 원본 파일 정리 등
AfterInstall
storge 권한 변경, DB의migrate 처리 등
ApplicationStart
웹 서버 시작 등
WEB 서버가 여러 대일 경우 서버마다 동일하게 처리됩니다.모든 서버에서 DB의migrate 같은 것을 실행할 필요가 없다면 디버그 그룹을 분리하거나 케이스 스크립트에서 특정 서버만 실행하면 된다.
AppSpec에 대한 자세한 설명은 문서를 참조하십시오.

4. CodeDeploy의 인스턴스 프로그래밍 허용


여기에 설정할 수 있으면 CodeDeploy에 로그인하십시오.액세스CodeDeploy의 Constore 화면를 했으면 Create New Application 을 클릭합니다.

Application Name 및 Deployment Group Name 에 원하는 이름을 설정합니다.

프레젠테이션 객체의 EC2 인스턴스를 지정합니다.

디버그 실행 방법과 성공/실패 처리 방법을 설정합니다.Service Role 위에서 설명한 1b에 설정된 Role을 지정합니다.

5. 실행 프로그램


드디어 계획을 실행해야 한다.Deploy New Revision을 클릭하면 다음 화면이 표시됩니다.여기서는 "Revision Type"을 "My application is stored in GiitHub"으로, "Repository Name"에서 GiitHub의 창고 이름을, "Commiit ID"에서 위임 대상의 제출 ID를 지정합니다.

Deploy Now를 클릭한 후 디버깅을 시작합니다.성공하면 다음 화면이 표시됩니다.

오류가 발생하더라도 아래 화면에서 어디가 잘못됐는지 확인할 수 있어 이해하기 쉽다.

두 번째 depro에서 이 5번 조작만 하면 됩니다.GUI를 사용할 수 있기 때문에 매우 간단합니다(물론 CLI를 사용할 수도 있습니다).

끝말


간단하지만 저는 AWS CodeDeploy에서 Laavel 프로젝트를 개발하는 방법을 설명했습니다.현재는 GiitHub이나 S3에서 제공하는 서비스만 지원하고 있으며 BitBucket 등 다른 서비스도 지원하기를 희망합니다.
AWS는 코드디플로이 외에도 깃 창고를 지원하는 위탁관리서비스AWS CodeCommit, 지속배송·배포자동화서비스AWS CodePipeline 등 개발자의 기능을 내년 초 순차적으로 발표할 예정이다.
즐거운 라벨 라이프 보내주세요!
내일은 @fumiyasac@github씨의 초상화가 올라오면 내가 만든 물건입니다.오점에

좋은 웹페이지 즐겨찾기