AWS UD Cloudパッケージ世代管理ツールをAWS CLIで実装 |
◀ 前の記事 | 記事一覧に戻る | 次の記事 ▶ |
2019年12月16日
前回、AWS Systems Managerのメンテナンスウィンドウという機能を利用して、AMIバックアップのタスクを設定したエピソードをご紹介しました。
フロントサーバーに関しては月次で、データベースサーバーに関しては日次で自動バックアップが取得できる環境ができました。
再構築プロジェクトのチームでは、設定したタスクをまずは1週間動かして様子をみてみることにしました。1週間後、AMIバックアップとスナップショットの取得は問題なく実施されていたのですが、作成されたAMIにはネームタグが設定されないことに気づきました。
Nameタグが設定されていても、されていなくてもバックアップは成功しているので問題はなかったのですが、世代管理ツールの識別子でNameタグを利用する予定だったので、自動で名前をつけるLambda関数を自作することにしました。
前回、ご紹介し切れなかったDaily_processing_2は、Systems Managerによって取得されたフロントサーバーとデータベースサーバーのAMIにNameタグをつけるLambda関数「Naming_the_AMI」を設定しています。
Naming_the_AMIのコードは以下の通りです。
import json
import boto3
import os
def lambda_handler(event, context):
# 辞書型でインスタンス ID と Name タグを指定
set_Name = {'インスタンスID':'Nameタグに設定したい名前':'インスタンスID': 'Nameタグに設定したい名前'}
# ec2_client に EC2 クライアントを取得
ec2_client = boto3.client('ec2',region_name = os.environ['REGION_NAME'])
#ec2_resource = boto3.resource('ec2',region_name = os.environ['REGION_NAME'])
# response にAMIを取得(フィルタリングして対象を減らす)
response = ec2_client.describe_images(
Filters = [
{
'Name': 'root-device-type',
'Values': [
'ebs',
]
},
{
'Name': 'platform',
'Values': [
'windows',
]
},
],
Owners=[
'アカウントID',
],
)
for image in response["Images"]:
# Name タグを設定するかどうかを決めるフラグ True: Name タグを設定する / False: スキップする
gofrg = True
try:
for tag in image["Tags"]:
# Name タグが設定されている場合は何もしない
if (tag["Key"] == 'Name' ):
print(tag["Value"])
gofrg = False
# タグが何も設定されていない場合はこちら
except Exception as error_exceptiopn:
print(image["Name"][:19]) # エラーになるのでダミー出力
if gofrg:
print('Name タグを設定する: ' + str(image["ImageId"]) + '-> ' + str(image["Name"][:19]))
if str(image["Name"][:19]) in set_Name:
val = set_Name[str(image["Name"][:19])]
# Name タグ設定
ec2_client.create_tags(
Resources=[
image["ImageId"],
],
Tags=[
{
'Key': 'Name',
'Value': val
},
]
)
else:
print('-> 命名規則に沿っていないためスキップ')
まず、responseという変数にAMIの一覧を取り込みます。この際、フィルタリングせずに取り込むと、すべてのAMIを取ってきてしまうので、リージョン、所有者、Windows Server、EBSボリュームの4点で対象を絞りました。
リージョンは環境変数を使用しました。
responseに取得したAMIをfor文でひとつずつ評価し、まずNameタグが指定されている場合は何もせずスキップ。Nameタグが指定されていない場合は、名前をつけるロジックにしました。
以下の図のとおり、AMI名はインスタンスIDで始まります。
そのため、19文字までがインスタンスIDと一致したら名前を付けることにしました。つまり左から19文字目までがi-55556666777788889 だったらフロントサーバーと名付け、左から19文字目までがi-00001111222233334だったらデータベースサーバーと名付けることにしました。
Nameタグの設定をすることで視覚的にも見やすくなりましたし、世代管理ツールの識別子としての役割も与えることができました。
次回は、世代管理ツールについてご紹介させていただきます。
◀ 前の記事 | 記事一覧に戻る | 次の記事 ▶ |
カテゴリー
タグ