ec2.describe_instances() ec2_instances = [] for reservation in ec2_instances_response["Reservations"]: for instance in reservation["Instances"]: launch_time = instance["LaunchTime"] if (now - launch_time).days > 180 or instance["State"]["Name"] == "running": ec2_instances.append({ "name": get_tag_value("Tags", instance, "Name"), "id": instance["InstanceId"], "project": get_tag_value("Tags", instance, "Project"), "state" : instance["State"]["Name"], "launch_time": instance["LaunchTime"], }) instances_sorted = sorted(ec2_instances, key=lambda x: (x['project'], x['name'])) ec2_instances_table = ( "| インスタンス名 | インスタンスID | プロジェクトタグ | 状態 | 最終起動日時 | ¥¥n" "| --- | --- | --- | --- | --- | ¥¥n " ) for i in instances_sorted: link_id = "[" + i["id"] + "](https://ap-northeast-1.console.aws.amazon.com/ec2/home?#InstanceDetails:instanceId=" + i["id"] +")" ec2_instances_table += "| {} | {} | {} | {} | {} | ¥¥n ".format(i["name"], link_id, i["project"], i["state"], i["launch_time"]) message = ( "#### EC2インスタンス棚卸のお願い【neutral-7022】 ¥¥n" + “〇〇環境(neutral-7022)の不要なEC2インスタンスの棚卸をお願いいたします! ¥¥n" + "特に、起動中のインスタンスと最終起動日が180日以上前のインスタンスをリストアップしたので、各自以下の対応をお願いいたします。 ¥¥n" + "* 使用している場合 → 使用していない期間(夜間や休日)の停止を検討(参考:自動起動・停止機能の設定))¥¥n" + "* 直近で使用予定が無い場合 → AMI化してインスタンスは削除 ¥¥n" + "* 不要な場合 → 削除 ¥¥n" + ec2_instances_table ) response = client.invoke( FunctionName='mattermost-bot', InvocationType='RequestResponse', Payload='{¥"message¥":¥"' + message + '¥",¥"webhook¥":¥"' + os.environ['WEBHOOK_URL'] + '¥"}' ) AWSのEC2インスタンスの情報を条件に基づい てフィルタリングし、必要な情報を取得。 取得した情報から、 チャットへ送信するメッセージを作成。 チャットへメッセージを送信してくれるLambda へ、メッセージを含んだリクエストを送る。