2025年7月11日金曜日

Python boto3 を使って、CloudTrail からデータを取得する。

 こんばんわ

今日は、Python boto3 を使って、AWSのCloudTrailから値を取得するという話です。詳しい方にとってはそんなに難しい話ではないようなのですが、私はいつもかなり四苦八苦しながら書いています。

大まかな流れとしては、以下のようになると思います。結構めんどくさいかもしれません。ちなみにmacOSでやる場合です。Python動くまではWindowsと異なるところもありますが、それ以外はWindowsでも大丈夫だと思います。

・Xcodeコマンドラインツールをインストールする
・(オプション)MacPortをインストールする
・(オプション)MacPortから任意のバージョンのPythonをインストールする
・AWSにIAMユーザを作成してシークレットキーを作成する
・AWSコマンドラインツールをインストールしてシークレットキーを設定する
・Pythonでプログラムを書く

Xcodeコマンドラインツールをインストールする

私も、先日Macの再インストールをしてしまって、綺麗に消してしまったので入れ直しです。AppleがリリースしているXcodeのコマンドラインツールというのをインストールするとPythonはインストールされるので、特にこだわりがなければそれを使って良いと思います。以下のようにコマンドを実行します。

xcode-select --install

MacPortをインストールする

MacPortのインストールは、「MacPort再び。」という記事に書かれていると思いますのでそちらを参照してみてください。

MacPortから任意のバージョンのPythonをインストールする

MacPortをインストールしたら、Pythonをインストールします。ものすごくたくさんのバージョンがあってどれがいいんだかよくわからないのですが、安定版で新そうなものをインストールします。いくつか依存するパッケージもインストールされます。boto3が2.7または3.4以上ということらしいので3.4以上にしておけば良いのではないかと思います。

sudo port install python312

# python3.12
Python 3.12.11 (main, Jun  6 2025, 23:18:08) [Clang 16.0.0 (clang-1600.0.26.6)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

毎回python3.12と入力するのも面倒ですので、お好みで以下のいずれかのコマンドを実行します。私は、python3 に設定しました。

  • sudo port select --set python python312
  • sudo port select --set python3 python312

ターミナルを一度再起動して、python3 と実行すると、python3.12 が起動するようになると思います。rehashコマンドでコマンドの一覧を更新しても大丈夫だったかも。

# python3
Python 3.12.11 (main, Jun  6 2025, 23:18:08) [Clang 16.0.0 (clang-1600.0.26.6)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

あと、AWSにアクセスするために boto3 というライブラリを使いますので、そちらもインストールします。以下のようにコマンドを入力します。

sudo port install py312-boto3

ついでにpythonのライブラリの追加削除するツールも入れちゃいます。

sudo port inistall py312-pip
sudo port select --set pip3 pip312
Password:
Selecting 'pip312' for 'pip3' succeeded. 'pip312' is now active.

だんだんと面倒になってきましたね。。。。私どうせ大したことしませんので、XcodeのPython3とpip3で良かったような気がしてきました。みなさんはそうしても良いかと思います。

AWSにIAMユーザを作成してシークレットキーを作成する

aws cli を使ってEC2のインスタンスの起動や停止を行う」にIAMユーザを作成してシークレットキーを作成する手順が書いてありますのでそちらを参照しながら設定してください。記事ではEC2へのアクセスを許可する設定をしていると思うのですが、同様にして、CloudTrailへのアクセスも設定してください。

AWSコマンドラインツールをインストールしてシークレットキーを設定する

Pythonでboto3を使うだけならばコマンドラインツールはなくてもいいようなのですが、ちょっとした確認などで使いたいのでインストールします。

AWSコマンドラインインターフェイスを使ってみる」にコマンドラインツールのインストール方法が書かれていますのでそちらを参照するか、特に難しいことはなかったと思いますので、以下のURLから説明を読んでインストールしてください。こちらは私のブログではなくAWSのドキュメントです。

AWS CLI の最新バージョンのインストールまたは更新

説明がどんどん手抜きになっていきますね。。。すみません。

AWSコマンドラインツールが動作しているか確認する

以下のコマンドを入力して、何か応答があるか確認します。

aws ec2 describe-availability-zones

以下のように結果が表示されれば動作していると思います。
 aws ec2 describe-availability-zones
{
    "AvailabilityZones": [
        {
            "OptInStatus": "opt-in-not-required",
            "Messages": [],
            "RegionName": "ap-northeast-1",
            "ZoneName": "ap-northeast-1a",
            "ZoneId": "apne1-az4",
  ・
  ・
  ・
認証情報の設定はpythonからも参照されますので、ちゃんと動作するように設定しておく必要があります。

 

Pythonでプログラムを書く

動作したスクリプトを以下に。。。すみません、どんどん手抜きに。。。

CloudTrailからStartInstancesイベントで、現在から過去24時間の物を取得してきて、イベントの日時と起動時のエラーがあればエラーメッセージをとインスタンスIDを表示するだけのものを書きました。プログラムの中に、ポイントと思われる箇所をコメントします。


#!/opt/local/bin/python3

import warnings
import boto3
import json
import pprint

from datetime import datetime
from datetime import timedelta
from dateutil import tz
JST = tz.gettz('Asiz/Tokyo')
UTC = tz.gettz('UTC')

cloudtrail = boto3.client('cloudtrail', region_name = 'ap-northeast-1')

#AWS内では時刻はUTCで扱われているので、UTCで現在時刻と、24時間前の時刻を求めています。 
End = datetime.now().astimezone(UTC).replace(second=0,microsecond=0)
Start = End - timedelta(hours=24)

# アトリビュートのキーと値、検索開始・終了時刻と、取得する結果の最大数を指定します。たしか50が最大だったと思います。取りこぼさないようにするには、StartTime/EndTimeを工夫する必要がありそうです。

response = cloudtrail.lookup_events(
  LookupAttributes = [
    {
      'AttributeKey': 'EventName',
      'AttributeValue': 'StartInstances'
    },
  ],
  StartTime = Start,
  EndTime = End,
  MaxResults = 50
)

events = response.get('Events', [] )

  # 結果はjson形式で返ってきますので、配列に読み込みます。どういう形式で値が送られてくるかわかりにくいのですが、pprint.pprint(response)のようにして内容を確認するか、cloudtrailのイベント履歴の中をじっくり見るのが良いと思います。

for event in events: 
  cloudtrail_event = json.loads(event['CloudTrailEvent'])
  eventtime = cloudtrail_event['eventTime']


  # エラーがなかったときは、アトリビュートそのものがなくなってしまうので、値が定義されていなかったら新たに定義するようにしています。 例外処理でやるのが正しいのかどうかはわかりません。
try:
    cloudtrail_event['errorMessage']
  except:
    errormessage = "NoError."
  else:
    errormessage = cloudtrail_event['errorMessage']

  # いつも奥まった値のアクセスに「あれ?」となります。結局値やドキュメントと睨めっこが始まってしまうのですが、何かいい方法がないのでしょうか?
instance_id = cloudtrail_event['requestParameters']['instancesSet']['items'][0]['instanceId']

  # 時刻はUTCですので、表示する際にJSTに変換しています。 
temp_datetime = datetime.strptime(eventtime, '%Y-%m-%dT%H:%M:%SZ')
  temp_datetime = temp_datetime + timedelta(hours=9)

  msg = "%s,%s,%s" % ( temp_datetime,errormessage,instance_id)

  print(msg)

どんどん手抜きになって行って、最後はなんだかよくわからない感じになってしまったかもしれませんが、自分の覚書というつもりなのでご容赦ください。


2025年7月5日土曜日

イオシスさんでAirPods Pro 2 を購入しましたよ。

こんばんわ。

今日は、というか、実はここのところ体調で、ブログを書く気力がなくて、すでに何日か経過しているのですが、イオシスさんでAirPods Pro 2 を購入しました。最近はじゃんぱらさんに浮気していたので、イオシスさんでの購入は久しぶりかもしれません。

話すと長くなるのですが、まあ、いろいろなことがあって、長男にヘッドホンx1、イヤホンx1を譲ることになって、ヘッドホンx1はそもそも、当の本人がいらないと捨てていたのを私が拾って、しばらく使っていたものなのですが、まあ、その代わりに長男がもっていたAirPods Pro が無造作に置いてあるのが目に入ったので、「それいらなかったらちょうだい」といってみたところ意外にも「いいよ」ということになったので、AirPods Proをもらったのですが、 そのAirPods Pro は左側が「ざー」という音がして使い物にならないということが発覚。

こうなったら新しいの買ってやる!となって、イオシスさんでAirPods Pro 2 が大量に入荷したというニュースを少し前に見ていたものですから、勢いで買ってしまいました。結局損をしたのは自分だけだったかもしれません。

実は私、なんでもかんでもAppleな感じなのですが、AirPodsは買ったことがなかったかも。WALKMANを使っていたためか、ずっとSONYでした。少し前まで使っていた、WF-1000XM3というやつは既に下の子にあげてしまって、壊されたあとで、姿も形もなく、最近は、WF-C700Nというモデルを使っています。ちなみこのWF-C700Nというのも割と安価でノイズキャンセルやアップスケールなどの機能も一応ついていておすすめです。

話戻します。

AirPods Pro 2 は、蓋開けたら勝手にiPadにつながって、まあ、完全に勝手に繋がるわけではなく、繋いでいいか?とか、設定するか?とかいくつか聞いてきますが、ペアリングモードにして、設定開いて。。。とする必要はありません。そして、いずれかのデバイス1台と接続すれば、他のiPad持ったらそっちにつながって、Macに向かうとMacにつながってと。。。勝手に切りかわります!あれ?ペアリングっていつしたっけ?他の端末は勝手にペアリングしたことになっています。なんかすげ。

AndroidもFirst Pairing 機能で、対応しているデバイスであれば、通知画面が表示されて、タップするだけで接続できるのですが、他のタブレットで何か再生したら勝手に切り替わるような動作はできなかったような。。。今はできるのかな?最新のAndroid機器を持っていないのでできないだけかも?要調査案件ですね。調べておきます。


Appleの製品間の連携がなんかよくできているなと思うことが多いのですが、今更ですがもう一つ連携を体験することができました。iPadでコピーしたものをMacでペーストできた時もなんかすごく驚きましたが、今回もまた一つ驚きです。

世の中ではいろいろなAIが取りざたされていて、すごいExcelやPowerPointがいきなり作成できたり、複雑な分析ができたり、動画ができたりと、とてもすごいことが、少ない労力で(裏ですごいコストがかかっているかもしれませんが。。。)できるようになってきていますが、AirPodsの切り替えや、コピー・ペーストといった、普段何気ない操作や動作の実現にAIが用いられて、より自然にできるようになるといいですね。自分気が付いていないだけで、もしかしすでになってる?


2025年6月22日日曜日

古い Mac に新しい macOS をインストールする

 こんばんわ

今日は、新しいmacOSが対応していない古いMacに新しい macOSをインストールするという話です。今回のターゲットは、古いMacBookです。こんなやつ。12インチのやつです。

他に最新のmacOSが動作するMacBookを持っていますので、こんなことをする意味はないのかもしれませんし、普段使わないような古いMacBookを引っ張り出してきてやるようなことでもないのですが、以前、macOS Catalina くらいの時に、macOS Catalina がサポートされていないジャンクで購入したMacBook Pro にインストールしたらまあそれなりに動くのですが、それなりに遅いなと思ったのですが、それなりに使えたのを思い出して、また古いMacBookでやってみようかなと思います。

前回は、腐ってもPro?でやってもそれなりに遅いなと思いましたので、今回のMacBookは無印ですので、発売当時ですら、思っていたよりも遅いとか言われていたので大丈夫かな?と心配ではありますが、あれから何年も経過していますので、もしかしたら何かが改善されて良い方向に向かっているかもしれないと、全く根拠のない期待を込めてやってみたいと思います。


当時も使った、Open Core Legacy Patcherというすごい仕組みを使います。こちらのサイトにアクセスして、ドキュメントを見ながらやるだけです。

https://dortania.github.io/OpenCore-Legacy-Patcher/

当時は、いちいちコマンドラインで何かやった覚えがあるのですが、綺麗なGUIになっていて、わかりやすくなっています。以下のURLからアプリケーションをダウンロードしてインストールしてください。

Releases · dortania/OpenCore-Legacy-Patcher

わたくし、上記のサイトを見ながらやったのですがそれなりに失敗しましたので、間違えそうな箇所はコメントしながら進めます。

新しいOSのインストールは、大きく分けて以下の2つのやり方が選択できるようです。

  1. Open Core Legacy Patcher が適用されたUSBメモリに新しいOSのインストーラをインストールしてそちらから起動する。
  2. 現在のOSがインストールされているディスクにOpen Core Legacy Patcher を適用して、設定のアップデートから新しいOSへアップグレードする。

「1」で実施すると、何か不具合が起きたときに、Open Core Legacy Pacher が適用されたOSをいきなりセットアップできるので便利だと思います。「2」の方法ですと、何か不具合が起きたときに、古いOSで一度セットアップし直さなければならなくなりますので、古いOSのUSBの起動ディスクを準備しておく方が良いと思います。なんかどっちもどっちな感じです。今回は「2」の方法で実施します。

Open Core Legacy Patcher をインストールして起動すると次のような画面が表示されますので、「Build and Install OpenCore」をクリックします。

クリックすると次のような画面が表示されますので、「Install to disk」をクリックします。

次のような画面が表示されますので、新しいOSをインストールしたいディスクをクリックします。今回の場合は、現在使用しているディスクに直接適用しますので、disk0を選択します。

すると、次のような画面が表示されますので、今回の例の場合は、「disk0s1」をクリックします。

何やらインストールログのようなものが表示されて、次のような画面が表示されますので、「Reboot」ボタンを押すのですが、再起動後に、OpenCore用のEFIから起動するように設定する必要がありますので、注意してください。

「Reboot」ボタンをクリックしたら、すぐに「option」キーをクリックします。

「option」キーを押しながら再起動すると、次のような画面が表示されますので、左側の「EFI Boot」のの下に矢印がいくように、左右キーで選択します。


次に、「CTRL」キーを押すと、矢印がくるっと回転したような価値になりますので、そこをクリックします。これで、次回からEFIBootから自動で起動するようになるようです。これをやっておかないと古い環境で起動してしまって、OSが起動できないということになるようです。


あとは、OSが起動してきて、「設定」アプリを開くと。。。。

「今すぐアップグレード」ボタンが!!えぇ〜これでいいの!?まさか流石にこんなに簡単じゃないよね?と、なんか騙されている感じがしますが、このままアップデートします。

昔はもっとめんどくさかったような気がしましたが、そんな気がしているだけ?まあ、実はこれで終わりではなく。。。

これだけではいくつかの機能が動かないようで、たとえば、WiFiとか、グレーのままで接続することができません。

もう一度、最初に起動した OpenCore Legacy Patcher を起動して、右上の「Post-Install Root Patch」ボタンをクリックします。

すると、こんな画面が出ますので、「StartRoot Patching」ボタンをクリックして、設定が終わると再起動を要求されますので、言われるがままに再起動を実行してください。

こんな画面が出ますので、「Reboot」ボタンをクリックして再起動します。

今度は先ほどダメだった、WiFiのところも接続されたようです。気が付いていないだけで他にも正常に動作していないところがあったのだと思います。


今早速、新しいOSになった環境でブログを書いていますが、思っていたよりも快適なようです。以前古い MacBook Pro でやったときは、なんか結局古めかしい感じで使う気にならなかったのですが、今回利用したMacBookは一応Retinaディスプレイのためか、画面も綺麗ですし、ぱっと見新しいマシンになったような気分になります。

ちなみに、このMacBookはI/FがUSB Type-C が一つしかないので、充電しながらUSBメモリとか使う時はHUBのようなものが必要なのですが、当時買ったものを見つけてきました。

こちら。懐かしいです。まだ捨てていなかった。確かMacBook を買った時に一緒に買ったやつ。付け根の部分がともにすごく変色していますね。もともとグレーだったような気がします。特に手前側の変色がすごい。あまりにも久しぶりなので動くのかどうか心配になりましたが、ちゃんと動作しました。


なんとなくうまくいきましたので、簡単に終わったように思っていますが、何か問題が起きると大変なんでしょうね。またいずれ、別の端末用のUSBディスクを作ってやるというやつをやってみようと思います。メモリ4Gの古いMacBookAirとかあるんですが、流石に無理そうですよね。。。

2025年6月21日土曜日

ALLDOCUBE iPlay60 mini Turbo に OTA Update きました。

 こんばんわ

今日は、なんと、ALLDOCUBE iPlay60 mini Turbo に OTA Update がきましたという話です。サックアップデートをします。

普段あまり気にしていなかったのですが、ふと画面の上の方を見たら、「ワイヤレスアップデート」という表示が出てます。

2025年6月9日リリースとなっています。私としたことがすっかり確認を怠っていました。まあいつも怠っているかもしれない。

というか、こういった安価なタブレットってアップデートってこねーだろ?という意識でいましたので、思っていたよりもアップデートがくるなという印象を受けています。

ALLDOCUBEのフォーラムとか、FirmWareのダウンロードサイトとか、思っていたよりも情報も充実しているように感じます。

こういった対応がされると思うと、新しいものが出たらまた購入したいという気持ちになったりするかもしれません。なんか安心感があります。

セキュリティバップデートも最新?ですよね?


不具合って何が修正されたのでしょう?どこかに記載がないか探してみます。



2025年6月15日日曜日

ChromeOSが137になりました。

 こんばんわ

ChromeOSことを忘れていました。おそらくリリースから少し経過してしまっているでしょう。今更ブログに書く必要も全くないのですが書きます。

今回は、136から137へのアップデートのようです。

それにしても、色々なOSを使っていたり、いっぱいパソコンを持っているためなのですが、アップデートが忙しいです。以前は、MacOSとかiOSのことも書いていましたが、そちらは手が回りません。

アップデートしているだけなのに、忙しいとは偉そうだと言われてしまうかもしれませんね。

毎月毎月、何度も何度もアップデートをリリースしている方の身にもなってくれという感じですよね。

初めて触れたパソコンなんて、買ってから捨てるまで一度もアップデートなんかなかったと思います。当時は「これもOSだ」と言っている人もいましたが、BASICで基本的な操作はしていたように思います。

137になりました。もう一台の方もやらなければ。ところで今回はどこが変わったのかな?












2025年6月14日土曜日

ついに、Magic Keyboard(古いやつ)を買ってしまう

 こんばんわ

今日は、いつものように病院に行っていたのですが、待ち時間で近所にあるブックオフへ行って、特に何か買うつもりではなかったのですが、こんなものを見つけて買ってきました。

Magic Keyboard A1314 2009 年ころに生産中止になったモデルだと思われます。一つ前のモデルとかではなく、すごく前のモデルだと思います。

キートップのテカリが全くないですね。もしかしたらテカリにくいのかな?以前持っていたMagic Keyboad と比較すると、ストロークが長く、入力した時の音が静かなような気がします。以前持っていたというだけで現在は持っていませんので、記憶の中のMagicKeyboardですので、違うかもしれません。

税込2580円ってすごい安いわけでもなさそうですが、まあいいか。裏面のプラスチックの部分は引っかき傷のようなものがありますが、シルバーのアルミの部分はきれいです。ゴム足の部分も結構きれいかも。

写真だと全くわかりませんが、Ejectボタンの真上くらいに緑色のランプがついて、ペアリングモードの時や、電源のOn/Offの時に点滅したりするようです。

単三電池で動作します。単三電池がたまたま手元になくて、単四電池と単三電池に変換するアダプタで動かします。


キーボードビューアで確認したところ全てのキーがちゃんと認識されているようでした。

思っていたよりもきれいだし、使ってみたらなんか使いやすいかもしれない。

マニュアルとかをみてみたのですが、明示的に電源をOff/Onする方法がわからないんですよね。。。色々と調べた結果。

電源OFF:

・電源ボタンを押しっぱなしにする。

・緑のランプが光る→消える

・電源ボタンを離す。


電源ON:

・電源ボタンを短く押す

電源OFFの状態で長く押すとペアリングモードになってしまうので注意です。


一度軽く押すと、電源OFFの状態であれば電源がONになり、緑色のランプが3秒ほど点灯します。電源ONの状態であれば、緑色のランプが3秒ほど点灯しますが、OFFになったりペアリングモードになったりしないです。

状態が分からなければ、電源ボタンを一度軽く押して、3秒間点灯するのを確認して、もう一度長く押せば必ず電源が切れるということかな。。。オートパワーOFFとか備わっているのかどうかもよく分からん。しばらく使ってみます。あぁ。。前もっていたやつを手放さなければよかった。


2025年6月11日水曜日

Pixel 6a に Android 16 がきた!

 こんばんわ

またすっかり忘れそうでした。今日ニュースサイトなどをみたりしていたら、PixelシリーズにAndroid 16 が配信開始といったような記事がちらほらと。「いけね!また忘れてた」ということで、早速アップデートをしてみました。

実は朝やりました。

あちこちの記事で、Android 16 がリリースと書かれてしました。一応私が使用している Pixel 6a も対象のようです。

よかった。Android 16 にアップデートされるようです。最新情報のところに何やら書かれていますが、実はあまり興味がありません!


では。早速、ダウンロードしてインストールします。

最近アップデートが早くなったとはいえ、流石に時間かかります。

しっかりいつもの画面も出ましたね。再開します。

いよいよ。新しいAndroidになります。

なったようなのですが、今の所違いが。。。


電話を受けてみたら、「AIで。。。」と表示されたような気がしますが、昔からだったかもしれません。。。よく覚えていないです。


Python boto3 を使って、CloudTrail からデータを取得する。

 こんばんわ 今日は、Python boto3 を使って、AWSのCloudTrailから値を取得するという話です。詳しい方にとってはそんなに難しい話ではないようなのですが、私はいつもかなり四苦八苦しながら書いています。 大まかな流れとしては、以下のようになると思います。結構めん...