【CodeDeploy】デプロイグループにオンプレミスインスタンス登録をしてみた。
こんにちは、AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。
今回は、以下のドキュメントを基に、オンプレミスインスタンスを CodeDeploy のデプロイグループ配下に登録してみようと思います。
register-on-premises-instance コマンド (IAM ユーザー ARN) を使用してオンプレミスインスタンスを登録する
構成図
EC2 インスタンスをオンプレミスサーバーに見立ててデプロイグループに登録してみようと思います。
パブリックサブネットにインスタンスを配置しているため今回はインターネット経由で API を実行します。
使用する OS について
今回、OS は「Ubuntu Server 20.04 LTS」を使用します。
CodeDeploy エージェントのサポートされる OS バージョンには注意が必要です。
CodeDeploy エージェントでサポートされるオペレーティングシステム
ステップ 1: オンプレミスインスタンスの IAM ユーザーを作成する
オンプレミスインスタンス用に IAM ユーザーを作成します。
作成する IAM ユーザーはマネジメントコンソールへのアクセスは必要ないため、「アクセスキー - プログラムによるアクセス」で作成します。
ステップ 2: IAM ユーザーにアクセス許可を割り当てる
アプリケーションリビジョンが S3 バケットに格納されている場合は、S3 へアクセス権限が必要です。今回は、以下の権限を付与しました。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["s3:Get*", "s3:List*"],
"Effect": "Allow",
"Resource": "*"
}
]
}
参考:送信元 IP に基づいて AWS へのアクセスを拒否する
ステップ 1 でアクセスキーを発行しています。アクセスキーが流出すると、該当 S3 バケットへ不正アクセスされます。
そこで、API が実行可能な IP アドレスを制限しました。
AWS: 送信元 IP に基づいて AWS へのアクセスを拒否する
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": ["s3:Get*", "s3:List*"],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "123.456.789.123/32"
},
"Bool": {
"aws:ViaAWSService": "false"
}
}
}
]
}
ステップ 3: オンプレミスインスタンスに設定ファイルを追加します。
オンプレミスインスタンスにステップ 1 で用意した認証情報を設定します。
OS ごとに設定ファイルのパスやファイル名が異なります。
今回、「Ubuntu」を使用しているため、/etc/codedeploy-agent/conf/codedeploy.onpremises.yml
で作成していますが、詳細は以下をご参照ください。
ステップ 4: オンプレミスインスタンスに設定ファイルを追加します。
---
aws_access_key_id: アクセスキー
aws_secret_access_key: シークレットアクセスキー
iam_user_arn: ステップ1で作成したIAMユーザー
region: デプロイグループが存在するリージョン
ステップ 4: AWS CLI のインストールと設定
AWS CLI がインストールされていない OS の場合は以下を参照して AWS CLI をインストールします。
Installing or updating the latest version of the AWS CLI
Ubuntu の場合
sudo apt-get install zip
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
ステップ 5: AWS_REGION 環境変数を設定します (Ubuntu Server および RHEL のみ)
CodeDeploy エージェントを自動更新するために AWS_REGION 環境変数を CodeDeploy がサポートしているリージョンの識別子に設定します。
export AWS_REGION=デプロイグループが存在するリージョン
ステップ 6: CodeDeploy エージェントのインストール
CodeDeploy エージェントを実際にインストールします。
OS ごとにインストール方法が違いますのでリファレンスを参照ください。
ステップ 7: CodeDeploy エージェントのインストール
私の場合は、ステップ 5 で環境変数を設定していたため環境変数を参照するように変更しました。
sudo apt update
sudo apt install ruby-full
sudo apt install wget
cd /home/ubuntu
wget https://aws-codedeploy-${AWS_REGION}.s3.${AWS_REGION}.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto > /tmp/logfile
sudo service codedeploy-agent status
ステータスが「running」になっていれば、OK です。
オンプレミスインスタンス側の設定は以上です。
ステップ 7: オンプレミスインスタンスを登録
ここからは、AWS 側からの設定です。
CloudShell または、CodeDeploy を設定可能な権限が付与された端末でオンプレミスインスタンスの紐付けを行います。
インスタンス名は、一意であることが推奨されています。
aws deploy register-on-premises-instance --instance-name インスタンスの名前(今回はOnPremiseInstanceで設定) --iam-user-arn arn:aws:iam::アカウントID:user/ステップ1のユーザー名
マネジメントコンソール上に登録されたインスタンスが表示されていれば完了です。
まとめ
今回は CodeDeploy エージェントを使用してデプロイグループへオンプレミスインスタンスを登録してみました。
OS のバージョンや IAM ユーザーの制約など条件はありますが画期的な機能だと思います。
この記事が参考になれば幸いです。以上、AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!