AWS에서 CI-CD, CODE시리즈
모닝 결제 대시보드
![](https://velog.velcdn.com/images/jo1132/post/62ff9673-e1eb-425d-9730-9186737568ee/image.png)
![](https://velog.velcdn.com/images/jo1132/post/f85d36c9-85a0-4e4d-b391-f3508c5f3fd8/image.png)
Cloud9
Cloud9 생성
step1. Name environment
![](https://velog.velcdn.com/images/jo1132/post/d561d4b2-80b7-467a-bb6c-476d5017961d/image.png)
- 환경을 새로 만들어준다.
![](https://velog.velcdn.com/images/jo1132/post/d06fb30c-e5f1-4835-ba28-fe94f8773dd9/image.png)
- 이름을 넣어준다.
![](https://velog.velcdn.com/images/jo1132/post/ef21e7a7-a08c-4b5f-8a23-188684ccdcad/image.png)
- 직접 접속할 수 있도록 EC2환경을 사용한다.
- 또, t2.micro는 freetier를 받기때문에 t2.micro를 사용해준다.
![](https://velog.velcdn.com/images/jo1132/post/ebe7acbf-963d-461b-be55-9b46f54642b7/image.png)
- Platform은 Amazon Linux2를 사용한다.
- Cost-Saving setting은 요금절약 세팅으로 30분 후 자동 절전이 기본값으로 설정되어있다.
- 이후, VPC를 설정해준다.
step3. Review
![](https://velog.velcdn.com/images/jo1132/post/e176fc7a-e994-4c3c-8cd8-ed3538efd4bd/image.png)
확인
![](https://velog.velcdn.com/images/jo1132/post/a7a6ee53-d63a-467a-9a3c-c76995f0e659/image.png)
- 생성중이다.
![](https://velog.velcdn.com/images/jo1132/post/ee9809b7-c88b-4257-acf1-09418a5fdcb3/image.png)
- 인스턴스가 새로 생성되어 실행중이다.
Cloud9살펴보기
![](https://velog.velcdn.com/images/jo1132/post/b50746dd-ce3f-48d0-b344-27ef26fdbe26/image.png)
- 마치 Visual Studio환경과 비슷하게 왼쪽에 파일탐색기, 아래에 터미널이 있는 모습이다.
![](https://velog.velcdn.com/images/jo1132/post/8e7823c4-ca3e-48da-b3b8-2658c04f6b92/image.png)
- hello.py를 넣어서 간단한 예제를 실행시켜봤다.
- 아래 터미널에서 Command 안에 인자를 넣어 실행할 때 인자로 입력해줄 수 있다.
파이썬 AWS SDK (Boto3) 활용 S3 다루기
pip, boto3 설치
curl -O https://bootstrap.pypa.io/get-pip.py
python get-pip.py
python -m pip --version
rm get-pip.py
python -m pip install boto3
- boto3은 AWS 서비스 이용을위한 도구이다.
python -m pip show boto3
s3 생성해보기
import sys
import boto3
from botocore.exceptions import ClientError
def get_s3(region=None):
"""
Get a Boto 3 Amazon S3 resource with a specific AWS Region or with your
default AWS Region.
"""
return boto3.resource('s3', region_name=region) if region else boto3.resource('s3')
def list_my_buckets(s3):
print('Buckets:\n\t', *[b.name for b in s3.buckets.all()], sep="\n\t")
def create_and_delete_my_bucket(bucket_name, region, keep_bucket):
s3 = get_s3(region)
list_my_buckets(s3)
try:
print('\nCreating new bucket:', bucket_name)
bucket = s3.create_bucket(
Bucket=bucket_name,
CreateBucketConfiguration={
'LocationConstraint': region
}
)
except ClientError as e:
print(e)
sys.exit('Exiting the script because bucket creation failed.')
bucket.wait_until_exists()
list_my_buckets(s3)
if not keep_bucket:
print('\nDeleting bucket:', bucket.name)
bucket.delete()
bucket.wait_until_not_exists()
list_my_buckets(s3)
else:
print('\nKeeping bucket:', bucket.name)
def main():
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('bucket_name', help='The name of the bucket to create.')
parser.add_argument('region', help='The region in which to create your bucket.')
parser.add_argument('--keep_bucket', help='Keeps the created bucket. When not '
'specified, the bucket is deleted '
'at the end of the demo.',
action='store_true')
args = parser.parse_args()
create_and_delete_my_bucket(args.bucket_name, args.region, args.keep_bucket)
if __name__ == '__main__':
main()
- s3.py s3.cocudeny.shop ap-northeast-2 --keep_bucket
- S3.py의 명령어이다.
- S3.cocudeny.shop 이름으로 버킷을 생성한다.
- region: ap-northeast-2
- keep_bucket으로 버킷을 유지한다.
![](https://velog.velcdn.com/images/jo1132/post/01ca9e04-b339-4e66-991e-b23d7f0fe37d/image.png)
- 버킷이 잘 생성되었다.
Code Commit
IAM 사용자 생성
![](https://velog.velcdn.com/images/jo1132/post/86f253b7-93d4-4de5-8ad0-0dead2179e90/image.png)
- 새로운 유저를 만들어준다.
![](https://velog.velcdn.com/images/jo1132/post/4e6420b8-75b1-4872-8aa3-064066c9577f/image.png)
- 만약 특별한 권한을 줘야할 그룹이 있다면 그룹에 사용자를 추가할 수 있지만, 현재 하나의 계정으로만 사용할 것이기 때문에 기존 정책에 직접 연결한다.
- 이 계정에 CodeCommit에 관련한 FullAccess를 부여한다.
![](https://velog.velcdn.com/images/jo1132/post/fd1624b2-784a-4c10-a514-1c7850c366bf/image.png)
- 검토 후 사용자 생성
![](https://velog.velcdn.com/images/jo1132/post/fa8a23b8-3161-4c6f-9099-780d1e009eee/image.png)
- csv파일을 다운로드
![](https://velog.velcdn.com/images/jo1132/post/add4a86c-0e86-41f1-8ad0-110f4fa2cb44/image.png)
![](https://velog.velcdn.com/images/jo1132/post/d9df8647-7e91-46ec-a626-a9eacfc2c755/image.png)
- AWS CodeCommit에 대한 자격증명을 생성해준다.
![](https://velog.velcdn.com/images/jo1132/post/e6624559-9d22-4460-81c4-f83c6d2b2c0b/image.png)
- dev-user CodeCommit자격증명이 생성되었다.
CodeCommit 리포지토리 생성
![](https://velog.velcdn.com/images/jo1132/post/43d739a5-7206-47a7-a64c-3d093774faf3/image.png)
![](https://velog.velcdn.com/images/jo1132/post/d95c48ff-d0cf-4512-a89a-edb620f087f9/image.png)
![](https://velog.velcdn.com/images/jo1132/post/efb8557c-9a73-42c1-9e5e-ce74b6719bb6/image.png)
Cloud9과 CodeCommit을 활용한 코드 버전 관리
![](https://velog.velcdn.com/images/jo1132/post/c4eba467-585d-4f87-a7b8-d82da116e83b/image.png)
sudo -s
aws --version
git --version
- aws와 , git이 설치되어있는지 확인
aws configure
git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.useHttpPath true
exit
![](https://velog.velcdn.com/images/jo1132/post/bb33a54c-6200-4e93-bca5-fd6ddb77edd5/image.png)
git clone https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/my-repo
- git을 잘 불러왔다.
![](https://velog.velcdn.com/images/jo1132/post/7f563376-8d90-40ba-b7ad-83863bd1b19d/image.png)
mkdir git-migration
git clone https://github.com/jo1132/hello-world.git git-migration/
- 이렇게 git-mibration폴더 안에 git을 clone할 수도 있다.
![](https://velog.velcdn.com/images/jo1132/post/4f1d8276-84e4-4c29-a5a3-359cc8d3e7f3/image.png)
- 아까 다운로드받은 자격증명 user-name과 password로 내 repository로 push했다.
![](https://velog.velcdn.com/images/jo1132/post/324764c1-c2ef-4be2-b4af-c83be8ae63b4/image.png)
- my-repo에 잘 push 되었다.
CodeBuild 실습
CodeBuild를 위한 환경설정
codeBuild repository 생성
![](https://velog.velcdn.com/images/jo1132/post/22ebddcb-1c60-44a6-8ec5-28a82e5291ed/image.png)
Cloud9, CodeCommit, CodeBuild, S3를 활용한 Vue.js설치
![](https://velog.velcdn.com/images/jo1132/post/edcd5d82-3bc9-49c1-b643-a4b90ba5eb05/image.png)
cd ..
- environment폴더로 돌아온다.
- 여기서 작업하게 될 것이다.
![](https://velog.velcdn.com/images/jo1132/post/e38b1686-c243-4a2f-a331-1c894a5e7780/image.png)
npm install vue
- 만약 여기서 npm을 찾을 수 없다고 나오면 아까
sudo -s
에서 나와야한다.
npm install --global vue-cli
![](https://velog.velcdn.com/images/jo1132/post/c6bd48e9-340b-4581-b10f-aed6d60dc6fe/image.png)
git clone https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/codebuild-repo
- 우리가 생성한 codebuild용 리포지토리를 가져온다.
![](https://velog.velcdn.com/images/jo1132/post/da121560-d541-470b-a385-dc6a043475be/image.png)
vue
- 설치는 잘 된것같다.
![](https://velog.velcdn.com/images/jo1132/post/87d8001a-2092-470a-a909-c4279ad6dbea/image.png)
vue init webpack codebuild-repo
Target directory exists. Continue?
Yes
Project name (~~~)
- Author: 입력안하면 에러나올 수 있음
- Vue build: 첫번째것 (runtime + compiler)
- Install-vue-router : yes
- Use EsLint : yes
- Pick: 첫번째것
- Set up unit test: No
- 나머지 yes
- Should we run 'npm install' ~~~
- npm을 선택한다.
![](https://velog.velcdn.com/images/jo1132/post/0bf31bc3-f1aa-495f-bd18-fafdad5ee37f/image.png)
- 잘 설치되었다.
cd codebuild-repo
![](https://velog.velcdn.com/images/jo1132/post/0dca3978-dc11-49d1-9b11-87f76c91ace6/image.png)
- git add .
- git status
- git commit -m "Upload First Step"
- git push
![](https://velog.velcdn.com/images/jo1132/post/8948ef7a-4409-4fb4-a918-1ca6a924efe4/image.png)
![](https://velog.velcdn.com/images/jo1132/post/4ee4754b-9468-4157-a30b-72d6ffe13efb/image.png)
- vue webpack이 잘 push되었다.
S3 정적 호스팅 구성
정책 생성
![](https://velog.velcdn.com/images/jo1132/post/c6e8fe7f-415f-4a01-8907-ee54d35d3ca1/image.png)
- 정책을 생성해준다.
![](https://velog.velcdn.com/images/jo1132/post/90f95571-ae6b-4098-8c2f-f1d973174230/image.png)
- 정책생성기로 정책을 만들어본다.
![](https://velog.velcdn.com/images/jo1132/post/f353178c-90ee-4100-90bf-ee2a9cda4efc/image.png)
- AWS Policy Generator로, 정책을 조금더 쉽게 만들 수 있도록해준다.
![](https://velog.velcdn.com/images/jo1132/post/ab07e702-b5fd-4a94-80a5-c5a500885294/image.png)
- S3 버켓 정책으로
- Get Object액션에서 모든 principal을 허용한다.
![](https://velog.velcdn.com/images/jo1132/post/bf8de086-f839-4f75-9eed-3f9aa7327352/image.png)
![](https://velog.velcdn.com/images/jo1132/post/458d81cc-e706-44f0-a200-22eb9b8f27f5/image.png)
- ARN은 S3의 ARN을 가져와준다.
![](https://velog.velcdn.com/images/jo1132/post/f35b3d52-55d7-469b-9cb9-f65500d7f16a/image.png)
![](https://velog.velcdn.com/images/jo1132/post/4ae7d340-ad7c-471a-97c8-d465e8bc451c/image.png)
{
"Id": "Policy1660876310406",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1660876144406",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::s3.cocudeny.shop/*",
"Principal": "*"
}
]
}
![](https://velog.velcdn.com/images/jo1132/post/24879707-15d4-41ea-ae6c-df01017b59ca/image.png)
- 위에서 생성한 정책을 S3의 버킷정책에 넣어준다.
CodeBuild
빌드 프로젝트 생성
![](https://velog.velcdn.com/images/jo1132/post/75f0ba52-a5b5-468d-9bd6-40cd4f633615/image.png)
프로젝트 구성
![](https://velog.velcdn.com/images/jo1132/post/6f6e4108-9422-4248-97cd-d504df393061/image.png)
소스
![](https://velog.velcdn.com/images/jo1132/post/c66cd4b9-8f02-4487-91aa-6c0a0eaf7703/image.png)
- 소스 공급자: AWS CodeCommit
- Jenkins가 github에서 가져오는 것처럼 AWS CodeCommit을 가져올 것이다.
- 리포지토리: codebuild-repo
- 참조 유형: 브랜치
환경
- 인스턴스를 임시적으로만 사용하여 코드를 빌드한다.
- 그 코드를 빌드할때의 환경을 생성하는 것이다.
![](https://velog.velcdn.com/images/jo1132/post/f3092f05-3f50-4da5-ae7d-1b2ba2620f6c/image.png)
- 운영체제: Amazon Linux2
- 런타임: Standard
- 이미지: x86_64의 가장 최신버전 standard:4.0을 선택
- 역할 선택해준다.
- CodeBuild환경을 생성하면서, EC2인스턴스, AMI등 여러 자원을 사용한다. 이 자원을 사용할 때에 최소권한으로 빠르게 사용하기위한 새로운 역할이다.
Build spec
![](https://velog.velcdn.com/images/jo1132/post/1e509aee-d6af-4663-9ae3-a814a8328ae8/image.png)
- 빌드 사전, 사후에 있을 액션을 정의한다.
- 이후, 나머지는 그냥 생성한다.
역할 확인하기
![](https://velog.velcdn.com/images/jo1132/post/9c96b403-82a0-4a43-8b21-7156038e3a1a/image.png)
- 방금 새로 생성된 codebuild 권한을 클릭한다.
![](https://velog.velcdn.com/images/jo1132/post/25a2b257-50f5-42cc-ad8d-30397896064b/image.png)
- 현재 CodeBuildBasePolicy가 존재한다.
![](https://velog.velcdn.com/images/jo1132/post/0623ce8c-c3c4-49eb-b822-ca27d6f99399/image.png)
- AmazonS3FullAccess를 추가해준다.
buildspec.yaml을 작성한다.
![](https://velog.velcdn.com/images/jo1132/post/dd6e513e-4005-4a32-a57e-2819d061273d/image.png)
- 현재 CodeBuild는 Cloud9의 codebuild-repo에서 코드를 가져오게 된다.
- 따라서, codebuild-repo에서 builcspec.yaml파일을 작성해야한다.
buildspec.yaml
version: 0.2
phases:
install:
runtime-versions:
nodejs: 16
commands:
- npm i npm@latest -g
pre_build:
commands:
- npm install
build:
commands:
- npm run build
post_build:
commands:
- aws s3 sync ./dist s3://s3.cocudeny.shop
git add .
git config --global user.name "cocudeny"
git config --global user.email cocudeny@gmail.com
git commit -m "codebuild test commit"
git push
![](https://velog.velcdn.com/images/jo1132/post/705e1921-2ac3-4435-a6b2-3af57d632015/image.png)
- buildspec.yaml이 생성되었고, 잘 push되었다.
build
![](https://velog.velcdn.com/images/jo1132/post/fe718a5b-0e40-441a-9cf4-62ca1c28a905/image.png)
![](https://velog.velcdn.com/images/jo1132/post/ec409de7-db22-4bb6-a11a-5e9734aeca83/image.png)
- 빌드가 진행중이다.
![](https://velog.velcdn.com/images/jo1132/post/0b5d58ba-d93c-4bb4-9e1c-1880cff498e2/image.png)
- 무언가 성공하고있다.
![](https://velog.velcdn.com/images/jo1132/post/be2e35ab-e33d-48fd-82da-16c1d1211f00/image.png)
- 웹페이지가 나오기는 하는데, S3의 모든 파일에 권한을 퍼블릭액세스를 열어줘서 열렸다.
Route53 레코드 생성
![](https://velog.velcdn.com/images/jo1132/post/87f403e2-4f80-4600-be2d-eaa5a0a0c1d6/image.png)
- Route53 별칭에 따로 S3 정적 웹사이트부분이 있다.
![](https://velog.velcdn.com/images/jo1132/post/8d6ebd93-0430-4ab9-85c5-413a2e6ddf45/image.png)
- 잘 접속할 수 있다.
Vue 수정하기
- codebuild-repo/src/components/HelloWorld.vue에 내용을 조금 수정해본다.
![](https://velog.velcdn.com/images/jo1132/post/9e96a67f-6bb0-40f7-8fa0-a572f9fb0cc3/image.png)
git add .
git status
git commit -m "Change Mainpage text"
git push
![](https://velog.velcdn.com/images/jo1132/post/fb104d5b-9115-437c-9bd2-8781f23295fb/image.png)
- 아직 자동배포 설정을 하지 않아서 빌드를 수동으로 눌러줘야한다.
![](https://velog.velcdn.com/images/jo1132/post/28a8055c-2406-4fdb-ad6a-b087e9dd79d8/image.png)
- 잘 나온다.
Code Deploy (1)
서비스 역할, IAM 인스턴스 프로파일 생성
![](https://velog.velcdn.com/images/jo1132/post/e9993990-7108-46e4-8f4f-0402316e9c38/image.png)
- Codedeploy를 맡을 역할을 생성한다.
- 이름은
codedeploy-role
로 만들어준다.
![](https://velog.velcdn.com/images/jo1132/post/da99a3cb-7f33-40dd-8982-21ab6da1a78c/image.png)
신뢰관계 편집
![](https://velog.velcdn.com/images/jo1132/post/148ced4e-fcc8-4a31-9dab-60c3b19a3d0a/image.png)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": [
"codedeploy.us-east-2.amazonaws.com",
"codedeploy.us-east-1.amazonaws.com",
"codedeploy.us-west-1.amazonaws.com",
"codedeploy.us-west-2.amazonaws.com",
"codedeploy.eu-west-3.amazonaws.com",
"codedeploy.ca-central-1.amazonaws.com",
"codedeploy.eu-west-1.amazonaws.com",
"codedeploy.eu-west-2.amazonaws.com",
"codedeploy.eu-central-1.amazonaws.com",
"codedeploy.ap-east-1.amazonaws.com",
"codedeploy.ap-northeast-1.amazonaws.com",
"codedeploy.ap-northeast-2.amazonaws.com",
"codedeploy.ap-southeast-1.amazonaws.com",
"codedeploy.ap-southeast-2.amazonaws.com",
"codedeploy.ap-south-1.amazonaws.com",
"codedeploy.sa-east-1.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
- 위와 같이 바꿔준다.
- 이 역할을 맡을 수 있는 서비스로 모든 리전의 codedeploy에 연결해줬다.
정책 생성
![](https://velog.velcdn.com/images/jo1132/post/210e21ab-130e-4608-8115-71555a71f294/image.png)
![](https://velog.velcdn.com/images/jo1132/post/652263c3-ea22-4bb1-bc78-28f56df6e0a9/image.png)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": [
"arn:aws:s3:::replace-with-your-s3-bucket-name/*",
"arn:aws:s3:::aws-codedeploy-us-east-2/*",
"arn:aws:s3:::aws-codedeploy-us-east-1/*",
"arn:aws:s3:::aws-codedeploy-us-west-1/*",
"arn:aws:s3:::aws-codedeploy-us-west-2/*",
"arn:aws:s3:::aws-codedeploy-ca-central-1/*",
"arn:aws:s3:::aws-codedeploy-eu-west-1/*",
"arn:aws:s3:::aws-codedeploy-eu-west-2/*",
"arn:aws:s3:::aws-codedeploy-eu-west-3/*",
"arn:aws:s3:::aws-codedeploy-eu-central-1/*",
"arn:aws:s3:::aws-codedeploy-ap-east-1/*",
"arn:aws:s3:::aws-codedeploy-ap-northeast-1/*",
"arn:aws:s3:::aws-codedeploy-ap-northeast-2/*",
"arn:aws:s3:::aws-codedeploy-ap-southeast-1/*",
"arn:aws:s3:::aws-codedeploy-ap-southeast-2/*",
"arn:aws:s3:::aws-codedeploy-ap-south-1/*",
"arn:aws:s3:::aws-codedeploy-sa-east-1/*"
]
}
]
}
![](https://velog.velcdn.com/images/jo1132/post/8b23129d-6d9b-4dc7-b738-962e67e658b3/image.png)
역할 생성
![](https://velog.velcdn.com/images/jo1132/post/8a550440-d6e2-4a93-bd85-1850c0a867c2/image.png)
![](https://velog.velcdn.com/images/jo1132/post/51e5afa2-4c33-46f3-b908-0c394e7f8fb7/image.png)
- 위 두가지 정책을 연결해준다.
- AmazonS3FullAccess
- codedeploy-ec2
![](https://velog.velcdn.com/images/jo1132/post/05eda63f-13d9-4a96-acff-fb5c924df780/image.png)
- 이름을 codedeploy-role로 정한다.
EC2 Auto Scaling 그룹구성(codedeploy 에이전트설정)
시작구성
- 시작구성은 시작 템플릿보다 구형의 느낌이다.
![](https://velog.velcdn.com/images/jo1132/post/9beba0f7-0b2f-491f-a2d5-6c2986b6aff7/image.png)
- 이름: my-lc
- AMI: ami-01711d925a1e4cc3a
- 인스턴스 유형: t2.micro
![](https://velog.velcdn.com/images/jo1132/post/cd40d1c0-dfcb-45cb-a88c-ad44b08923e7/image.png)
![](https://velog.velcdn.com/images/jo1132/post/bc8829b7-c4ec-49f2-9df5-769175c15598/image.png)
- 사용자데이터
#!/bin/bash
yum update -y
yum install -y ruby
curl -O https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
![](https://velog.velcdn.com/images/jo1132/post/d64d8a86-c841-4f4c-b574-118285634fc6/image.png)
![](https://velog.velcdn.com/images/jo1132/post/b216a37b-08e3-453d-9041-b8a48997267e/image.png)
- 보안그룹에는 다음과 같은 설정이 들어가있다.
![](https://velog.velcdn.com/images/jo1132/post/95f8d82b-d193-4b95-801e-8399b4946180/image.png)
- 시작구성 생성
Auto Scaling 그룹 생성
이름
![](https://velog.velcdn.com/images/jo1132/post/632b0167-ae64-4c87-9e09-47a6869625a1/image.png)
시작구성
![](https://velog.velcdn.com/images/jo1132/post/083df16d-ca6b-4220-b0da-fbfc7ad02ab4/image.png)
네트워크
![](https://velog.velcdn.com/images/jo1132/post/9118cd04-df1a-425a-a60b-d7beb00c5ed0/image.png)
로드밸런싱
![](https://velog.velcdn.com/images/jo1132/post/0730e4c7-df79-4b5b-b9cb-5c334efd5471/image.png)
![](https://velog.velcdn.com/images/jo1132/post/a9eb5b2d-697a-4efa-87a6-eccef95e079f/image.png)
- 대상 그룹 생성으로 해준다.
- 위 VPC 서브넷은 이전에 선택한 서브넷이 미리 선택되어있다.
상태 확인
![](https://velog.velcdn.com/images/jo1132/post/7154d786-235f-43a1-9784-818fe67011d4/image.png)
- EC2 상태확인은 EC2 인스턴스의 상태만 볼 수 있다.
- 그러나 EC2에서 돌아가는 애플리케이션이 잘 작동되는지는 확인할 수 없다.
- ELB를 체크하면 EC2에서 돌아가는 애플리케이션의 상태확인도 가능하다. 그러나 우리의 경우(CI-CD)는 인스턴스가 생기고 삭제되고 반복하기 때문에 맞지 않는다.
그룹 크기 및 크기 조정정책 구성
![](https://velog.velcdn.com/images/jo1132/post/907e0e28-64b0-4e4f-9a73-15d0507df8fe/image.png)
- 이후 검초 후 그룹 생성해준다.
![](https://velog.velcdn.com/images/jo1132/post/ec2efec1-bbb2-4822-adc4-b9cd92d8f1e0/image.png)
![](https://velog.velcdn.com/images/jo1132/post/a72b38c9-231f-4358-abf5-75c5f13b2dcd/image.png)
- 인스턴스 2개가 생성중이다.
Cloud9을 활용한 웹 페이지와 appspec.yaml생성
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Sample Deployment</title>
<style>
body {
color: #ffffff;
background-color: #0188cc;
font-family: Arial, sans-serif;
font-size: 14px;
}
h1 {
font-size: 500%;
font-weight: normal;
margin-bottom: 0;
}
h2 {
font-size: 200%;
font-weight: normal;
margin-bottom: 0;
}
</style>
</head>
<body>
<div align="center">
<h1>Congratulations</h1>
<h2>This application was deployed using AWS CodeDeploy.</h2>
<p>For next steps, read the <a href="http://aws.amazon.com/documentation/codedeploy">AWS CodeDeploy Documentation</a>.</p>
</div>
</body>
</html>
appspec.yml
version: 0.0
os: linux
files:
- source: /index.html
destination: /var/www/html/
hooks:
BeforeInstall:
- location: scripts/install_dependencies
timeout: 300
runas: root
- location: scripts/start_server
timeout: 300
runas: root
ApplicationStop:
- location: scripts/stop_server
timeout: 300
runas: root
scripts 생성
vi install_dependencies
#!/bin/bash
yum install -y httpd
vi start_server
#!/bin/bash
systemctl start httpd
vi stop_server
#!/bin/bash
isExistApp = `pgrep httpd`
if [[ -n $isExistApp ]]; then
systemctl stop httpd
fi
cd ..
zip -r codedeploy-sample.zip *
- 현재 위치의 스크립트들을 codedeploy-sample로 압축파일로 생성
aws s3 cp codedeploy-sample.zip s3://s3.cocudeny.shop
CodeDeploy로 배포하기
애플리케이션 생성
![](https://velog.velcdn.com/images/jo1132/post/b56733b3-4a70-4c3f-abe9-792fa6e5b959/image.png)
![](https://velog.velcdn.com/images/jo1132/post/a3f322d1-2004-4ba4-a17d-58e3def2c8c6/image.png)
배포 그룹 생성
![](https://velog.velcdn.com/images/jo1132/post/3f2090fd-c80f-484d-ac4f-f15d4dbe381b/image.png)
![](https://velog.velcdn.com/images/jo1132/post/6b22ace9-2e40-432c-a903-1d23f50e9d29/image.png)
![](https://velog.velcdn.com/images/jo1132/post/d6764b36-c25b-4d1b-bb3e-d5f28155ebd8/image.png)
- 배포 성공!
![](https://velog.velcdn.com/images/jo1132/post/671e19a0-2145-4286-852a-d0b74d98538c/image.png)
- Route53에서 ALB레코드를 생성해준다.
index.html 수정후 재배포
![](https://velog.velcdn.com/images/jo1132/post/626cdaf9-1c45-4070-89b1-8e04d3b2db5f/image.png)
zip -r codedeploy-sample.zip *
aws s3 cp codedeploy-sample.zip s3://s3.cocudeny.shop
![](https://velog.velcdn.com/images/jo1132/post/fa1f6ebd-9b09-47f8-90f7-ba81af11d5dc/image.png)
- 배포 성공!
Code Pipe Line
서비스 역할 및 IAM 인스턴스 프로파일 생성
사용자 권한 부여
![](https://velog.velcdn.com/images/jo1132/post/4fc3d641-e5db-43d5-a427-a05aa9108917/image.png)
![](https://velog.velcdn.com/images/jo1132/post/7abfbc88-4a6c-451d-9367-299cc606278e/image.png)
![](https://velog.velcdn.com/images/jo1132/post/0f5b4c4c-0af3-49f2-99a6-0cb2ee8c9fe9/image.png)
정리
- EC2 콘솔로 이동
- AutoScaling정리
- Cloud9정리
![](https://velog.velcdn.com/images/jo1132/post/db0b5b86-cc6d-4ea3-aae6-bc4c74da0f89/image.png)
![](https://velog.velcdn.com/images/jo1132/post/351361c5-0e9e-4489-a50e-0921c6a20c84/image.png)
- 클라우드쉘은 GCP나 Azure에서는 잘 생성되어있지만 AWS에서는 잘 완성되어있지 않다.
- 현재 Cloud9의 bash화면은 CloudShell까지는 아니지만, 비슷하다.
![](https://velog.velcdn.com/images/jo1132/post/7fcf01dc-dfd6-4512-a105-c26cb3e3fe3e/image.png)
- Cloud9 삭제
- CodeCommit 리포지토리 삭제
- CodeBuild 삭제
- CodeDeploy삭제
- 배포(CodeDeploy) -> 애플리케이션
- 애플리케이션 삭제
- S3정리
- 로드밸런서 삭제
- 대상그룹 삭제
- 시작구성삭제