みなさんこんにちは。
次の自作PCのマザボは、B550 Steel Legendだなと考えている構築担当の川合です。
今回は、サーバの構築を自動化していく中で検討した事についてのお話です。
CloudformationでEC2を立ち上げて、Ansibleなどの構成管理ツールを動かす前に何か処理を入れることが出来ないかと考えていました。
色んな構成のサーバの構築作業において共通して実施する内容で簡単なものを思い浮かべたところ
AMI作成時点から更新が発生したパッケージのアップデートを先に実施出来れば楽ではないかと思いました。
EC2のユーザデータで実施出来る内容をcloudformationでも定義出来るようなので、試しに設定してみたお話になります。
目次
概要
cloudformationでEC2インスタンスを作成する処理にユーザデータの処理を追加してみます
UserDataにyum update -y のコマンド処理を流し込む形になります。
設定作業
cloudformationの処理にユーザデータを定義します。
yamlファイルを記載して記載内容に問題がなければ、実際にスタックを作成して実行してみます。
AWSTemplateFormatVersion: '2010-09-09'
Resources:
EC2:
Type: AWS::EC2::Instance
Properties:
ImageId: "AMIのID名"
KeyName: "キーペア名"
InstanceType: "t2.small"
NetworkInterfaces:
- AssociatePublicIpAddress: "true"
SubnetId: "サブネットのID名"
DeviceIndex: "0"
GroupSet:
- "SGのID名"
DisableApiTermination: true
BlockDeviceMappings:
- DeviceName: "/dev/sda1"
Ebs:
DeleteOnTermination: "true"
VolumeSize: "20"
UserData:
Fn::Base64: |
#!/bin/bash
sudo yum update -y
Tags:
- Key: "Name"
Value: "k.kawai"
問題なくスタックを実行出来れば、対象のインスタンスでアップデートが完了している事を確認します。
yum updateが実行されているのか、プロセスを確認してみます。
ps aux |grep "yum update"
root 1535 0.0 0.2 245524 4704 ? S 09:58 0:00 sudo yum update -y
root 1536 19.2 5.9 869644 111020 ? R 09:58 0:03 /usr/bin/python /bin/yum update -y
立ち上がったEC2にログインした時点で、アップデートが内部で実行されていることがわかります。
このupdateのプロセスが無くなれば、アップデート作業が完了しています。
別にAMIで新しいインスタンスを立ち上げて、現時点でどんなアップデート対象があるか確認します。
このインスタンスでアップデート内容を確認して、それが反映されている事を確認して完了です。
ちょうどgitのアップデートがあったので、確認してみました。
AMIから作成しただけ(yum update 未実施)
rpm -q git
git-1.8.3.1-22.el7_8.x86_64
Cloudformationで作成してUserDataを実行
rpm -q git
git-1.8.3.1-23.el7_8.x86_64
UserDataを実行した方がマイナーバージョンが更新されていることが確認できました。
まとめ
ユーザデータをを用いればもう少し複雑な処理を入れることは出来ます。
※Apacheのインストールなどなど
ですが、その複雑な処理は構成管理ツール側にまかせているのでやるとしてもアップデートぐらいかなとは思っています。
インスタンス立ち上げから作業に移るまで少し時間は空くのでこの時間を有効活用出来ればいいのではと思い何かできないかなということでユーザデータを設定してみたお話でした。
プロフィール
サーバ構築周り全般を対応しております。
LINK
クラウドベリージャム:プロフィールページ