root プロファイル以外のユーザープロファイルで AWS CodeDeploy エージェントを実行したいです。
解決策
次の解決策は、CodeDeploy エージェントのサポートされているすべての RPM および Debian ベースの Linux ディストリビューションと互換性があります。Amazon Linux Amazon マシンイメージ (AMI) を使用して Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動するには、Amazon Linux 2023 (AL2023) または Amazon Linux 2 (AL2) を使用する必要があります。
前提条件 EC2 インスタンスに CodeDepoly エージェントをインストールするか、インスタンスで CodeDepoly エージェントが実行中であることを確認します。
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) リソースに対するアクセス許可をインスタンスに付与する必要があります。
-
[詳細情報] を選択します。
-
エージェント設定ファイルの User data セクションに、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 ####