IAC를 사용하여 EC2에 Apache 웹 서버 설치
CloudFormation 스택에서 사용할 매개변수를 정의합니다.
---
Parameters:
AppName:
Type: String
Description: Enter the name of your resource you are creating.
Default: ApacheWebServer
Stage:
Type: String
Description: Enter the staging environment of you resource.
Default: dev
그런 다음 리소스를 정의합니다. 필요한 리소스는 SSH 키, EC2 인스턴스 및 보안 그룹입니다.
Resources:
## Our EC2 SSH Key
SSHKey:
Type: 'AWS::EC2::KeyPair'
Properties:
KeyName: !Join ['-', [!Ref AppName, 'key-pair', !Ref Stage] ]
## EC2 Instance
MyInstance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-009d6802948d06e52
InstanceType: t2.micro
KeyName: !Ref SSHKey
SecurityGroups:
- !Ref SSHSecurityGroup
# we install our web server with user data
UserData:
Fn::Base64: |
#!/bin/bash -xe
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "Hello World from user data" > /var/www/html/index.html
Tags:
- Key: Name
Value: !Ref AppName
- Key: Environment
Value: !Ref Stage
# Our EC2 security group
SSHSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: SSH and HTTP
SecurityGroupIngress:
- CidrIp: 0.0.0.0/0
FromPort: 22
IpProtocol: tcp
ToPort: 22
- CidrIp: 0.0.0.0/0
FromPort: 80
IpProtocol: tcp
ToPort: 80
참고: 여기에서 중요한 점은 사용자 데이터에 대해 작성한 코드 블록입니다. "Fn::Base64"와 수직 파이프를 사용하여 전체 bash 스크립트를 인스턴스에 전달합니다. 스크립트를 하나의 문자열로 인식할 수 있도록 수직 파이프를 사용합니다.
완전한 템플릿 파일
---
Parameters:
AppName:
Type: String
Description: Enter the name of your resource you are creating.
Default: ApacheWebServer
Stage:
Type: String
Description: Enter the staging environment of you resource.
Default: dev
Resources:
## Our EC2 SSH Key
SSHKey:
Type: 'AWS::EC2::KeyPair'
Properties:
KeyName: !Join ['-', [!Ref AppName, 'key-pair', !Ref Stage] ]
## EC2 Instance
MyInstance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-009d6802948d06e52
InstanceType: t2.micro
KeyName: !Ref SSHKey
SecurityGroups:
- !Ref SSHSecurityGroup
# we install our web server with user data
UserData:
Fn::Base64: |
#!/bin/bash -xe
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "Hello World from user data" > /var/www/html/index.html
Tags:
- Key: Name
Value: !Ref AppName
- Key: Environment
Value: !Ref Stage
# Our EC2 security group
SSHSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: SSH and HTTP
SecurityGroupIngress:
- CidrIp: 0.0.0.0/0
FromPort: 22
IpProtocol: tcp
ToPort: 22
- CidrIp: 0.0.0.0/0
FromPort: 80
IpProtocol: tcp
ToPort: 80
콘솔에 CloudFormation 스택을 업로드합니다.
먼저 템플릿 파일이 저장된 디렉토리로 이동합니다. 아래 터미널 명령을 사용하여 스택을 AWS에 업로드할 수 있습니다.
aws cloudformation deploy
--template-file <TEMPLATE NAME>
--stack-name <STACK NAME>
--profile <AWS PROFILE NAME>
스택이 성공적으로 업로드되면 "성공적으로 생성/업데이트된 스택 - "이라는 메시지가 표시되어야 합니다.
AWS 콘솔로 이동
콘솔에 있는 경우 EC2 대시보드로 이동하면 생성한 인스턴스가 표시됩니다. 인스턴스를 선택하고 연결을 클릭합니다. EC2 Instance Connect를 사용하여 인스턴스에 연결합니다.
Cloud Init 로그 검사
이제 인스턴스가 부팅될 때 실행된 스크립트를 보기 위해 로그를 검사할 것입니다.
먼저 루트 권한이 필요합니다. 인스턴스에서 루트 권한을 가질 수 있도록 다음 명령을 실행합니다.
sudo su
둘째, 실제 로그 파일을 보기 위해 명령을 실행할 것입니다.
cat /var/log/cloud-init-output.log
이제 실행된 스크립트의 전체 로그 목록을 볼 수 있습니다.
마지막으로 웹 서버가 html 웹 페이지를 제대로 호스팅하고 있는지 테스트합니다. 인스턴스의 퍼블릭 DNS를 복사하여 웹 브라우저에 붙여넣을 수 있습니다. 이렇게 하면 우리가 만든 웹 페이지에 액세스할 수 있어야 합니다.
이제 EC2 인스턴스를 성공적으로 프로비저닝하고 사용자 데이터를 사용하여 Apache Web Server를 설치했습니다. 이제 마지막 단계는 사용된 모든 리소스를 정리하는 것입니다.
리소스 정리
터미널에서 다음 명령을 실행합니다. 스택을 삭제하여 CloudFormation을 사용하여 리소스를 생성했기 때문에 스택에 있던 모든 리소스도 삭제됩니다.
aws cloudformation delete-stack
--stack-name <STACK NAME>
이것은 EC2 사용자 데이터로 수행할 수 있는 작업에 대한 작은 데모일 뿐입니다. 이 튜토리얼 이외의 기능을 자유롭게 탐색하고 추가 기능을 추가하십시오.
이 튜토리얼이 도움이 되었기를 바랍니다. 호기심을 갖고 계속 배우고 계속 구축하십시오. 고맙습니다.
Reference
이 문제에 관하여(IAC를 사용하여 EC2에 Apache 웹 서버 설치), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/giyoungjr/install-an-apache-web-server-on-ec2-using-iac-2gkb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)