エンジニアBLOG

2025/03/21

OpenAI「o3-mini」を使ってみた

自己紹介

エンジニアブログを閲覧頂きありがとうございます。
アルティウスリンクのミチガミです。
今回は、OpenAIの指示に従ってAWSのマネージドサービスを利用した一部機能を
実装していきたいと思います。

o3-miniについて

・2025年1月31日にリリース
・OpenAI o3-miniは、OpenAI o3の小型バージョン
・o3-miniは、o1-miniと比較して平均24%高速化
・o3-miniは、o1-miniと比べて誤答の発生率が39%低減
・計算、プログラミングに特化。数式を解いたり、開発をサポートしたり、幅広い用途に対応。

やりたいこと

EC2に存在する指定したファイルを、lambdaを用いてgzip化した後にS3にPUTしたい。
これをo3-miniと一緒に実装していきたいと思います。

image

さっそくo3-miniに聞いてみた

------------------------以下回答------------------------
────────────────────────────
LambdaからEC2にSSH接続してファイルを取得する場合
────────────────────────────
この方法では、Lambda関数内でPython用のSSHライブラリ(例:paramiko)を利用してEC2に接続し、
リモートのファイルを取得してからgzip圧縮、S3へPUTします。
※ Lambdaへparamikoなどの外部ライブラリを利用する場合、Layerを作成してパッケージングするか、
Lambdaパッケージに含める必要があります。また、SSH接続のための鍵(秘密鍵)はAWS Secrets Manager
などで安全に管理してください。

<Lambda関数例(Python)>
import io import gzip import boto3 import paramiko # 事前にLayerなどで追加しておく
def lambda_handler(event, context): # EC2接続情報(必要に応じてSecrets Managerなどから
取得してください)
ec2_host = "ec2-instance-public-or-private-IP" username = "ec2-user" #
例: Amazon Linuxなら ec2-user private_key_str = "-----BEGIN RSA PRIVATE KEY-----\n.....\n-----END RSA PRIVATE KEY-----"

image

<ポイント>
・Lambda関数からEC2にアクセスできるよう、Lambdaを該当VPC内に配置するか、
 セキュリティグループ・ネットワークACLの設定に注意してください。
・SSH接続用の秘密鍵は、環境変数やSecrets Managerを使い安全に取得してください。
・IAMロールにはS3の権限のみならず、(必要に応じて)パラメータストアやSecrets Managerへの
 アクセス権も付与してください。

要望を伝えてみる

1.の回答では「paramiko」をパッケージする準備が必要。今回は簡易的な連携でいいので
SSM Run Commandを利用した方法は可能か聞いてみる。
------------------------以下回答------------------------
SSM Run Commandを活用すると、Lambdaなどから対象のEC2インスタンス上でコマンドを
実行できるため、EC2上のファイルをgzip圧縮しS3にアップロードする処理を、
EC2側で実行させることが可能です。
以下に、SSM Run Commandを利用した方法の一例を示します。

────────────────────────────
【前提条件】
────────────────────────────
対象のEC2インスタンス
・SSM Agentがインストール・起動していること。
・インスタンスプロファイル(IAMロール)に「AmazonSSMManagedInstanceCore」など、
SSM関連の権限が付与されていること。SSMで実行するコマンドにおいて、EC2側に
AWS CLIがインストール済みであること。
・S3にアップロードするため、EC2側のIAMロールにS3へのアクセス権
(例:"s3:PutObject")も必要になります。

────────────────────────────
【概要】
────────────────────────────
SSM Run Commandを用いて、以下のようなシェルスクリプトをEC2上で実行します。
① 対象ファイルをgzipコマンドで圧縮(例:/path/to/file.txt → /tmp/file.txt.gz)
② AWS CLIコマンドを利用して圧縮後のファイルをS3にアップロード
────────────────────────────
【具体例】
────────────────────────────
▼ コマンド例 (AWS-RunShellScriptドキュメントで実行するスクリプト):
#!/bin/bash

圧縮対象のファイルパス(元ファイル)
SOURCE_FILE="/path/to/file.txt"

圧縮後の一時ファイルパス
GZ_FILE="/tmp/file.txt.gz"

S3アップロード先
S3_BUCKET="your-s3-bucket" S3_KEY="folder/file.txt.gz"

gzipで圧縮(-cオプションで標準出力に出力し、リダイレクトでファイルに保存)
gzip -c "GZ_FILE"

AWS CLIを利用してS3へアップロード
aws s3 cp "S3_BUCKET/$S3_KEY"

実行結果が必要であれば、ステータスコードなどを出力する
if [ $? -eq 0 ]; then echo "File compressed and uploaded successfully." else echo "Error occurred during compression/upload." >&2 exit 1 fi

Lambda(もしくは任意のクライアント)からSSM Run Commandを送信するPythonスクリプト例:
import boto3 import timedef lambda_handler(event, context): # 対象EC2インスタンスID instance_id = "i-xxxxxxxxxxxxxxxxx"

image

────────────────────────────
【注意点】
────────────────────────────

対象EC2インスタンスはSSM Agentがインストール・起動中である必要があります。
EC2のIAMロールにはS3へのPUT権限が付与されていることを確認してください。
LambdaからSSM Run Commandを利用する場合、Lambda実行ロールにSSMの
「ssm:SendCommand」などの権限が必要です。
SSMで実行するコマンドのパスや環境変数(ファイルパス、S3バケット名など)は適宜変更してください。
────────────────────────────
まとめ
────────────────────────────
SSM Run Commandを利用すれば、Lambda(または他のクライアント)からEC2上でgzipによる圧縮と
S3へのアップロードをリモートで実行できます。上記のサンプル例をベースに環境に合わせた調整を
行うことで実現可能です。

具体例通りに実装してみる

環境やパス以外は素直にコピペして実装して、動かしてみる。

image

EC2から圧縮されたファイルがS3に格納されることを確認。

まとめ

o3-miniに言われるがまま実装するだけでやりたいことが実現できました。
具体例が詳しく初見でも問題なく実装が可能だと感じます。要望があればちゃんと汲み取った形で代替案を
提示してくれるのは助かりますね。ただ、前提知識が無い場合は提示された内容の精査が難しく大規模な
実装になってくると、どうなるのでしょうか。AI分野の今後が気になりますね。
最後までご覧いただきありがとうございました。

image

関連記事