我想要使用不属于根配置文件的用户配置文件运行 AWS CodeDeploy 代理程序。
简短描述
若使用不属于根配置文件的用户配置文件来运行 CodeDeploy 代理,请执行以下操作:
1. (先决条件)确认 CodeDeploy 代理安装在您的 Amazon Elastic Compute Cloud (Amazon EC2) 实例上。
2. 在 CodeDeploy 代理配置文件中更改用户,并向用户授予所需的权限。
3. 创建 Amazon EC2 启动配置模板和 Auto Scaling 组以自动执行用户更改流程。
4. 通过验证 CodeDeploy 代理是否已在您的 Amazon EC2 实例上安装和运行正确的用户来测试设置。
**请注意:**这些步骤适用于使用 Amazon Linux 1 或 Amazon Linux 2 Amazon Machine Image (AMI) 的实例。但是,Amazon Linux 1 AMI 处于维护支持状态。在这种状态下,AMI 仅接收一组精简升级包的关键和重要安全更新。AMI 也无法再保证 AMI 支持新的 EC2 平台功能或新的 AWS 功能。
解决方法
**请注意:**如果您在运行 AWS Command Line Interface (AWS CLI) 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。
(先决条件)确认 CodeDeploy 代理安装在您的 Amazon EC2 实例上
按照 CodeDeploy 用户指南中验证 CodeDeploy 代理是否正在运行中的说明进行操作。
有关如何安装 CodeDeploy 代理的说明,请参阅安装 CodeDeploy 代理。
在 CodeDeploy 代理配置文件中更改用户,并授予用户所需的权限
1. 使用 SSH 连接到您的 Amazon EC2 实例。
2. 通过运行以下命令停止安装在实例上的 CodeDeploy 主机代理:
sudo service codedeploy-agent stop
3. 通过运行以下 sed 流编辑器命令,在 CodeDeploy 代理配置文件中更改用户:
**重要提示:**请将 ec2-user 替换为您想要 CodeDeploy 主机代理在其上运行的用户名称。
sudo sed -i 's/""/"ec2-user"/g' /etc/init.d/codedeploy-agent
**重要提示:**对于 Amazon Linux 2 AMI,您还必须运行以下两个命令:
sudo sed -i 's/#User=codedeploy/User=ec2-user/g' /usr/lib/systemd/system/codedeploy-agent.service
sudo systemctl daemon-reload
4. 通过运行以下两个命令,授予新用户对所需目录的权限:
**重要提示:**请将 ec2-user 替换为您想要 CodeDeploy 主机代理在其上运行的用户名称。
sudo chown ec2-user:ec2-user -R /opt/codedeploy-agent/
sudo chown ec2-user:ec2-user -R /var/log/aws/
5. 重启 CodeDeploy 代理并确认您已通过运行以下两个命令成功更新了配置文件:
sudo service codedeploy-agent start
sudo service codedeploy-agent status
成功的命令输出示例
The AWS CodeDeploy agent is running as PID ####
6. 验证哪些流程正在运行,哪些用户正在通过以下命令运行这些流程:
ps aux | grep codedeploy-agent
创建 Amazon EC2 启动配置模板和 Auto Scaling 组以自动执行用户更改流程
要确认启动新实例时是否已安装并使用正确的用户运行 CodeDeploy 代理,请执行以下操作:
1. 打开 Amazon EC2 控制台。
2. 在导航窗格上,选择启动配置。
3. 选择创建启动配置。
4. 选择 Amazon Linux AMI。
5. 选择下一步:配置详细信息。
6. 对于 IAM 角色,请选择预配置的 AWS Identity and Access Management (IAM) 角色。角色必须向您的 EC2 实例授予访问 Amazon Simple Storage Service (Amazon S3) 资源的权限。
7. 选择高级详细信息。
8. 在代理配置文件的用户数据部分中,输入安装 CodeDeploy 代理的命令。然后,更新文件以使用特定的用户。
代理配置文件示例
**重要提示:**请将 ec2-user 替换为您想要 CodeDeploy 主机代理在其上运行的用户名称。当使用定义的启动配置启动新实例时,以下示例代码将自动运行。
#!/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 <--- Uncomment this line for Amazon Linux 2
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
9. 根据需要完成 AWS Launch Wizard 中的其余步骤。之后,选择创建启动配置。
10. 选择使用此启动配置创建 Auto Scaling 组。
11. 在组名称中,输入您的 Auto Scaling 组的名称。
12. 在子网中,输入允许您的实例访问互联网的子网。
13. 选择下一步:配置扩缩策略。然后,根据您的需求选择策略。
14. 完成 Launch Wizard 中的其余步骤。然后,选择创建 Auto Scaling 组。
通过验证 CodeDeploy 代理是否已在新的 Amazon EC2 实例上安装和运行正确的用户来测试设置
确认您的 Amazon EC2 实例是否正在运行。然后执行以下操作:
1. 使用 SSH 连接到您的 Amazon EC2 实例。
2. 通过运行以下命令验证 CodeDeploy 代理是否正在 Amazon EC2 实例上运行:
sudo service codedeploy-agent status
3. 运行以下命令,验证 CodeDeploy 代理是否以正确的用户名运行:
ps aux | grep codedeploy-agent
成功的命令输出示例
The AWS CodeDeploy agent is running as PID ####