気がついたら前回から一ヶ月経っていた

イベントの運営やら旅行やらポケモンやらやっていたら全然書いていなかった

それとは別に非公開ブログにSlackの会話を貼り付けるみたいなこともやっていたせいでここの更新が止まっていた感じがしなかった

普段PCで書いていて,スマホで書けないという問題点から先延ばしにしがち

最近iPad Proもキーボードとペン含めで買ったので下書きやメモなんかを簡単に残して更新頻度上げられるといいなぁ

Twitter見てない

ここ数ヶ月,Twitterをあまり見ていない.

忙しくなったというのもあるし,UserStreamの終了やTweetDeckが以前より重くなったのもあるのだけれど,それだけではない.

いつ見ても他人を批判する話で溢れていることに気がついた.

批判をすることでとにかく「自分は(他人とは違って)優れている」という一種のマウントを毎日目にする.

対象の人をミュートなりすれば良いと言われるかもしれないけれど,とにかく数が多く話題も毎日変わるのでTwitter自体を見ない方が早いなと思っている.

人との繋がりがあるのでやめるわけではないけれど,以前よりだいぶ見る時間は少なくなった.

それに,Twitterは短文や修正が効かないことから議論に向かないプラットフォームだと思う.

言いっ放しで終わることから,せめて自分だけでも他人を批判するようなことは言わず,明るい話題を提供していきたい.

そういうことで,この記事は明るい話題ではないのでTwitterには投稿しないことにする予定.

それと,Twitterをやっていないからといって元気ではないというわけではないのでそこは安心して欲しい.連絡もTwitterが一番早いと思う.

EBSのタグをアタッチされているインスタンスのものに同期させる

DBのスナップショットを手で作成するときや,CloudFormationでインスタンスを作成するときに,EBSにタグを付け忘れることがある.

そんなときのために,アタッチされているインスタンスに対して自動でタグを付けられるスクリプトを書いた.

import boto3
import os


def handler(event, context):
    synced_tag_keys = os.environ['SYNCED_TAG_KEYS'].split(',')

    client = boto3.client('ec2')

    ebs_messages = ''

    instance_tags_dict = get_instance_tags(client)

    response = client.describe_volumes()
    for volume in response['Volumes']:
        volume_id = volume['VolumeId']

        # アタッチされていないEBSボリュームは無視
        if not volume_id in instance_tags_dict:
            continue

        # ボリュームIDからインスタンスのTagsを取得
        instance_tags = instance_tags_dict[volume_id] 

        # ボリュームIDからボリュームのTagsを取得
        volume_tags = tags_array_to_dict(volume.get('Tags'))
        
        # 同期させたタグを通知するため覚える
        tags_to_notify = {}

        for synced_tag in synced_tag_keys:
            instance_tag_value = instance_tags.get(synced_tag)
            # 指定したタグがインスタンスに存在しない場合
            if instance_tag_value is None:
                continue

            # ボリュームにタグがない場合もしくはインスタンスのタグと違う場合,インスタンスのタグに合わせる
            if volume_tags.get(synced_tag) != instance_tag_value:
                create_tags(client, volume_id, synced_tag, instance_tag_value)
                tags_to_notify[synced_tag] = instance_tag_value

        if tags_to_notify != {}:
            ebs_messages += volume_id + '(' + str(instance_tags.get('Name')) + '): ' + str(tags_to_notify) + '\n'

    message = '(' + context.function_name + ') ' + '同期するタグ: ' + str(synced_tag_keys) + '\n'

    if ebs_messages != '':
        message += '以下にあるボリュームのタグを同期しました\n' + ebs_messages
    else:
        message += 'タグの同期が必要なボリュームはありません'

    print(message)


# volumeIdとTagsの辞書を紐づけた辞書を返す
def get_instance_tags(client):
    response = client.describe_instances()
    instance_tags = {}

    for res in response['Reservations']:
        for instance in res['Instances']:
            for mapping in instance['BlockDeviceMappings']:
                volume_id = mapping['Ebs']['VolumeId']
                tags_dict = tags_array_to_dict(instance.get('Tags'))
                instance_tags[volume_id] = tags_dict

    return instance_tags


def tags_array_to_dict(tags_array):
    if tags_array is None:
        return {}

    tags_dict = {}

    for tag in tags_array:
        tags_dict[tag['Key']] = tag['Value']

    return tags_dict


def create_tags(client, volume_id, tag_key, tag_value):
    client.create_tags(
        Resources=[
            volume_id,
        ],
        Tags=[{
            'Key': tag_key,
            'Value': tag_value,
        }]
    )

EBSボリュームのidからアタッチされているインスタンスを検索して,環境変数SYNCED_TAG_KEYSで指定したタグを同期させる.

Lambdaでの実行を想定しているので,CloudWatch などで定期実行すれば,自動的に同期することができる.

動画を埋め込みまくると重い

VTuberの紹介記事を書くために,動画を貼り付けまくっていたらとにかく重くて自分でも開きたくないページになってしまった.

どれだけ動画を埋め込んだのか正確には数えていないけれど,60個以上は埋め込まれていたと思う.

というわけで埋め込みではなくタイトルリンクに全て直してみた.

文章の見通しも良くなったと思う.

埋め込みをやるとサムネイルが表示される上にその場で再生できるのは便利だけれど,とにかく重くなる上に見通しも悪くなるので多く貼り付けるのはやめることにする.

そんな動画埋め込みをタイトルリンクに変更した記事はこちらから.

core.cohalz.co