PythonでExcelマクロを作成する
概要
Excelの作業を自動化したいけど、VBはあまり書きたくないなぁ、という場合はxlwingsを使いましょう。 アドインも用意されていて、main関数を実行する、VBマクロを経由して任意の関数をコールする、数式内で使えるカスタム関数を定義するといったことができます。 今回はExcelの入ったWindowsPCでxlwingsを使用する方法について紹介します。
condaにインストール
Windowsだと、Anacondaで環境を作ることが多いと思います。Anaconda Navigatorで簡単にインストールできます。
アドインインストール
コマンドプロンプトでインストール可能です。
xlwings addin install
しかし、バージョンの指定が出来ません。最新のバージョンを入れたい場合は Releases · xlwings/xlwings · GitHubで最新版をダウンロードして、
xlwings addin status
で出力されるPATHのファイルを置き換えて下さい。
使い方
Conda PathとConda Envを設定することで任意の環境で実行出来ます。
Run mainを押下し、現在開いているExcelと同名のpyファイルに定義したmain関数を実行
import xlwings as xw def main(): wb = xw.Book.caller() wb.sheets[0].range('A1').value = 'Foo'
VBマクロから任意のpython関数を実行
Sub SampleCall() mymodule = Left(ThisWorkbook.Name, (InStrRev(ThisWorkbook.Name, ".", -1, vbTextCompare) - 1)) RunPython ("import " & mymodule & ";" & mymodule & ".hello_xlwings()") End Sub
数式で実行できるpython関数を定義
@xw.func def hello(name): return "hello {0}".format(name)
関数をインポートすると、 数式バーから呼べる状態になります。
AWSのEC2インスタンスでnginx+uwsgiサーバーを立てる
EC2インスタンスの作成
Elastic IP
EC2インスタンスは再起動の度に動的にパブリックIPが変動するとのことで、 Elastic IPというサービスで固定IPを作成し、EC2インスタンスに関連付けます。 インスタンスを複製して冗長性を持たせる構成でも、複数インスタンスに対して同一のIPを関連付けることが出来ます。
EC2のセキュリティグループ設定
まずは、http通信が出来るように構成します。セキュリティグループ設定で、インバウンドルールにhttpを追加します。
サーバーへのファイル配置
色々と方法はあると思いますが、シェルスクリプトのrsyncコマンドでアップロードとダウンロードが出来るようにしました。
- アップロード
rsync -auz --delete -e "sudo ssh -i {秘密鍵PATH}" {ローカルディレクトリ} {EC2ユーザー}@{パブリック DNS }:~/
- ダウンロード
rsync -auz --delete -e "sudo ssh -i {秘密鍵PATH}" {EC2ユーザー}@{パブリック DNS }:~/ {ローカルディレクトリ}
サーバーセットアップスクリプト
- nginxインストール
sudo yum install gcc git sudo amazon-linux-extras install nginx1
- python仮想環境の構築とuwsgiのインストール
sudo yum install python3 sudo yum -y install python3-devel python3 -m venv python_venv source ./python_venv/bin/activate pip3 install uwsgi
サーバー設定
今回は、/var/www/uwsgiをWEBサイトのルートディレクトリとします。 動作確認の為に以下のファイルを配置します。
- /var/www/uwsgi/index.py
def application(env, start_response): main() start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World!"]
以下、サーバーを動作させるための設定を行います。
- /etc/nginx/nginx.conf 以下の部分の設定を変更します。
root /var/www/uwsgi; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { include uwsgi_params; uwsgi_pass unix:/var/www/uwsgi/socket.sock; }
rootにルートディレクトリを入力し、トップlocationのincludeにuwsgi_params、uwsgi_passにsockファイル出力PATHを設定します。 sockファイルは自動的に作成されるため予め用意する必要はありません。
- /var/www/uwsgi/uwsgi.ini
[uwsgi] master = True socket = /var/www/uwsgi/socket.sock chmod-socket = 666 wsgi-file = /var/www/uwsgi/index.py stats = 127.0.0.1:9191 logto = /var/www/uwsgi/uwsgi.log pidfile = /var/www/uwsgi/uwsgi.pid
socketをnginx.confのuwsgi_passで指定したファイルPATHと一致させて下さい。
サーバー起動
nginxとuwsgiを起動します。
sudo systemctl -l enable nginx sudo systemctl -l start nginx uwsgi --ini /var/www/uwsgi/uwsgi.ini
動作確認
http://{パブリックDNS}でWebサイトにアクセス出来ます。
AWSのサービスと設計の諸元
5Gの普及に伴い、高速な通信を活かしたシステムが増えていき、 仕事でもプライベートでもクラウドサービスに触れる機会が増えていくと考えております。 中でも知名度が高いAWSについて学習していく方針を立てました。
サービス
AWSは数十種類のサービスを提供しています。 利用者はシステム要件に応じて選択的に利用します。
コンピューティングサービス
- EC2
- EC2 Container Service
- Docker運用サービス
- EC2 Container Registry
- Dockerイメージの保存と共有
- AWS Elastic Beanstalk
- Elastic Beanstalk
- PaaS
- 様々な言語で開発したアプリを自動デプロイ出来る
- Elastic Beanstalk
- AWS Lambda
- リクエストに応じて任意のプログラムを実行する
- 常時稼働ではないのでコストが安価
- Auto Scaling
- 負荷に応じてEC2インスタンスを自動増減する
- Elastic Load Balancing
ストレージ&配信サービス
- S3
- データストレージサービス
- CloudFront
- コンテンツ配信サービス
- EBS
- EC2のストレージサービス
- ElasticFileSystem
- EC2の共有ファイルストレージサービス
- 自動で容量を拡張、縮小する
- Glacier
- 使用頻度が低く長期保存するデータに適したストレージ
- Import / Export Snowball
- 大容量データ転送サービス
- Storage Gateway
DBサービス
- RDS
- リレーショナルデータベース(RDBMS)の構築と運用
- Database Migration Service
- データベース移行サービス
- DynamoDB
- NoSQLデータベースの構築と運用
- Amazon ElastiCache
- クラウド上のメモリ内キャッシュ管理
- Redshift
ネットワークサービス
その他のサービス
- 開発ツール
- CodeCommit
- Git運用
- CodeDeploy
- 実行環境への自動配置
- CodePipeline
- 継続的デリバリーを使用したリリース
- CodeCommit
- 管理ツール
- CloudWatch
- リソース監視
- CloudFormation
- テンプレートを使ったリソース作成と管理
- CloudTrail
- アクティビティと使用状況の追跡
- Config
- インベントリと変更の追跡
- OpsWorks
- Chefを使った自動化
- Service Catalog
- 製品の作成と使用
- Trusted Advisor
- パフォーマンスとセキュリティの最適化
- CloudWatch
- セキュリティ
- 分析サービス
- IoTサービス
- IoTデバイスとの接続
- ネットワーク管理、セキュリティ、データベース連携
- モバイルサービス
- アプリケーションサービス
- AppStream
- ストリーミング
- CloudSearch
- 検索
- Elastic Transcoder
- メディア変換
- SES
- Eメール送受信
- SNS
- プッシュ通知
- SQS
- メッセージキュー
- SWF
- アプリ間連携
- AppStream
- エンタープライズアプリケーションサービス
- WorkSpaces
- 仮想デスクトップ
- WorkMail
- Eメールとカレンダー
- WorkDocs
- ファイル共有
- WorkSpaces
デザインパターン
システム構成には一定のデザインパターンがあります。 設計者はデザインパターンを参考にインフラを設計します。
- Multi Serverパターン
- 複数のサーバーを立てて、ロードバランサで処理を振り分ける
- Scale Upパターン
- サーバーのスペックを動的に拡張、縮小する
- DB Replicationパターン
- 障害に備えてデータベースを複製する
- Functional Firewallパターン
- サーバーの論理的なグループを単位として、アクセス制限をかける
リージョンとアベイラビリティゾーン
リージョンは国家や地域的なデータセンター群のグループ、 アベイラビリティゾーンはリージョン内のグループです。 アベイラビリティゾーンは物理的に独立しているため、ゾーン間の通信に費用がかかります。