루트 프로필이 아닌 사용자 프로필로 AWS CodeDeploy 에이전트를 실행하려고 합니다.
해결 방법
Amazon Linux 2 및 Amazon Linux 2023이 Amazon Linux 1 Amazon Machine Image(AMI)를 대체했습니다. 더 이상 Amazon Linux 1 AMI를 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스로 시작할 수 없습니다. 다음 해결 방법은 CodeDeploy 에이전트의 지원되는 모든 RPM 및 Debian 기반 Linux 배포판과 호환됩니다.
전제 조건: EC2 인스턴스에 CodeDeploy 에이전트를 설치하거나 해당 인스턴스에서 CodeDeploy 에이전트가 실행되고 있는지 확인하십시오.
CodeDeploy 에이전트 구성 파일에서 사용자를 변경하고 해당 사용자에게 필요한 권한 부여
다음 단계를 완료하십시오.
-
SSH를 사용하여 EC2 인스턴스에 연결합니다.
-
인스턴스에 설치된 CodeDeploy 호스트 에이전트를 중지하려면 다음 명령을 실행합니다.
sudo service codedeploy-agent stop
-
CodeDeploy 에이전트 구성 파일에서 사용자를 변경하려면 다음 sed 스트림 편집기 명령을 실행합니다.
sudo sed -i 's/""/"ec2-user"/g' /etc/init.d/codedeploy-agent
참고: ec2-user를 CodeDeploy 호스트 에이전트를 실행할 사용자 이름으로 바꾸십시오. sed 명령에 대한 자세한 내용은 GNU 웹사이트에서 소개를 참조하십시오.
-
systemd 구성을 다시 로드하려면 다음 명령을 실행합니다.
sudo sed -i 's/#User=codedeploy/User=ec2-user/g' /usr/lib/systemd/system/codedeploy-agent.service
sudo systemctl daemon-reload
-
필요한 디렉터리에 대한 권한을 새 사용자에게 부여하려면 다음 명령을 실행합니다.
sudo chown ec2-user:ec2-user -R /opt/codedeploy-agent/
sudo chown ec2-user:ec2-user -R /var/log/aws/
참고: ec2-user를 CodeDeploy 호스트 에이전트를 실행할 사용자 이름으로 바꾸십시오.
-
CodeDeploy 에이전트를 다시 시작하려면 다음 명령을 실행합니다.
sudo service codedeploy-agent start
-
구성 파일이 업데이트되었는지 확인하려면 다음 명령을 실행합니다.
sudo service codedeploy-agent status
출력 예시:
The AWS CodeDeploy agent is running as PID ####
-
실행 중인 프로세스와 해당 프로세스를 실행 중인 사용자를 확인하려면 다음 명령을 실행합니다.
ps aux | grep codedeploy-agent
시작 구성 템플릿과 AWS Auto Scaling 그룹을 생성하여 사용자 변경 프로세스 자동화
다음 단계를 완료하십시오.
-
Amazon EC2 콘솔을 엽니다.
-
탐색 창에서 시작 구성을 선택합니다.
-
시작 구성 생성을 선택합니다.
-
Amazon Linux AMI를 선택합니다.
-
다음: 세부 정보 구성을 선택합니다.
-
IAM 역할에서 사전 구성된 AWS Identity and Access Management(IAM) 역할을 선택합니다. 역할은 Amazon Simple Storage Service(Amazon S3) 리소스에 액세스할 수 있는 권한을 인스턴스에 부여해야 합니다.
-
고급 세부 정보를 선택합니다.
-
에이전트 구성 파일의 사용자 데이터 섹션에서 CodeDeploy 에이전트를 설치하기 위한 명령을 입력합니다. 그런 다음, 특정 사용자를 사용하도록 파일을 업데이트합니다.
IMDSv1의 경우 다음 스크립트를 사용하십시오.
#!/bin/bash
REGION=$(curl 169.254.169.254/latest/meta-data/placement/availability-zone/ | sed 's/[a-z]$//')
yum -y update
yum install ruby wget -y
cd /home/ec2-user
wget https://aws-codedeploy-$REGION.s3.amazonaws.com/latest/install
chmod +x ./install
./install auto
service codedeploy-agent stop
#adduser username <--- this is only required if you use a username that does not already exist
sed -i 's/""/"ec2-user"/g' /etc/init.d/codedeploy-agent
sed -i 's/#User=codedeploy/User=ec2-user/g' /usr/lib/systemd/system/codedeploy-agent.service
systemctl daemon-reload
chown ec2-user:ec2-user -R /opt/codedeploy-agent/
chown ec2-user:ec2-user -R /var/log/aws/
service codedeploy-agent start
IMDSv2의 경우 다음 스크립트를 사용하십시오.
#!/bin/bash
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
REGION=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/placement/availability-zone/ | sed 's/[a-z]$//')
yum -y update
yum install ruby wget -y
cd /home/ec2-user
wget https://aws-codedeploy-$REGION.s3.amazonaws.com/latest/install
chmod +x ./install
./install auto
service codedeploy-agent stop
#adduser username <--- this is only required if you use a username that does not already exist
sed -i 's/""/"ec2-user"/g' /etc/init.d/codedeploy-agent
sed -i 's/#User=codedeploy/User=ec2-user/g' /usr/lib/systemd/system/codedeploy-agent.service
systemctl daemon-reload
chown ec2-user:ec2-user -R /opt/codedeploy-agent/
chown ec2-user:ec2-user -R /var/log/aws/
service codedeploy-agent start
참고: ec2-user를 CodeDeploy 호스트 에이전트를 실행할 사용자 이름으로 바꾸십시오. 위의 예제 코드는 정의된 시작 구성을 사용하는 새 인스턴스를 시작할 때 자동으로 실행됩니다.
-
시작 마법사의 나머지 단계를 완료합니다. 그런 다음, 시작 구성 생성을 선택합니다.
-
이 시작 구성을 사용하여 AWS Auto Scaling 그룹 생성을 선택합니다.
-
그룹 이름에 Auto Scaling 그룹의 이름을 입력합니다.
-
서브넷에 인스턴스가 인터넷에 액세스할 수 있는 서브넷을 입력합니다.
-
다음: 조정 정책 구성을 선택한 다음, 정책을 선택합니다.
-
시작 마법사의 나머지 단계를 완료하고 AWS Auto Scaling 그룹 생성을 선택합니다.
CodeDeploy 에이전트가 설치되어 있고 새 인스턴스에서 올바른 사용자로 실행되고 있는지 확인
먼저 인스턴스가 실행되고 있는지 확인합니다. 그리고 다음 단계를 완료합니다.
- SSH를 사용하여 인스턴스에 연결합니다.
- CodeDeploy 에이전트가 인스턴스에서 실행되고 있는지 확인하려면 다음 명령을 실행합니다.
sudo service codedeploy-agent status
명령에서 오류가 반환되면 CodeDeploy 에이전트를 설치하지 않은 것입니다. CodeDeploy 에이전트를 설치하십시오.
- CodeDeploy 에이전트가 올바른 사용자 이름으로 실행되고 있는지 확인하려면 다음 명령을 실행합니다.
ps aux | grep codedeploy-agent
출력 예시:
The AWS CodeDeploy agent is running as PID ####