AWS WorkMail、便利ですね。AWSが提供しているメールサービスで、独自ドメインでメールの送受信ができます。自社のサービスでは、お客様ごとにメールアドレスを発行しており、その際にWorkMailを使っています。
現在は契約処理の一環で担当者がWorkMailにアカウントを作成していますが、これを自動化するための調査をしました。当たり前ですが、使うのはboto3です。よっぽどマニアックな処理でなければ、AWSコンソールからできる作業はboto3でできますね。
WorkMailのアカウント作成の流れ
まず、AWSコンソールでWorkMail利用までの流れを確認しておきます。WorkMailは以下のリージョンでのみ利用できます。
- us-east-1
- us-west-2
- eu-west-1
メールの送受信をするには以下の流れが必要です。
- Organizationsの作成とDomainの作成
- Userの作成
- Userを有効化
このあたりは少し古いですが以下の記事がわかりやすいかったです。
previewが通ったのでAmazon WorkMailを触ってみた https://dev.classmethod.jp/cloud/aws/introduce-of-amazon-workmail/
Organizationsの作成とDomainの作成
は通常一回作るだけですので自動化するメリットはないので今回は行いません。Userの作成
とUserの有効化
をboto3で自動化していきます。
boto3でのWorkMail
基本的にはドキュメントを見ればわかりますが、もう少し具体的に見ていきます。
Clientの作成
他のboto3での使い方と同様、まずはアクセスキー等を指定して接続を行います。
import boto3 wm_client = boto3.client( 'workmail', aws_access_key_id=AWS_WM_ACCESS_KEY, aws_secret_access_key=AWS_WM_SECRET_KEY, region_name=REGION_NAME )
ユーザの作成
ユーザを作成するにはOrganizationのIDが必要です。AWSコンソールで確認しておきます。
WorkMail -> 対象のOrganization -> Organization Settings
このIDを元にユーザを作成します。
response = wm_client.create_user( OrganizationId='事前に確認したOrganizationID', Name='作成するユーザ名', DisplayName='表示名', Password='アカウントパスワード' )
この後作成されるメールアドレスはデフォルトではName@domain
の形式になります。特に要件がなければこの点を踏まえたName
を指定しておきます。
無事に作成できた場合はresponse['UserId']
に作成されたユーザのIDが入っていますので、これを後段の処理に利用します。
ユーザの有効化
create_user
した時点ではユーザはメールの送受信が出来る状態にはなっていません。AWSコンソール上ではDisabled
となっています。そのためregister_to_work_mail
を実行します。
wm_client.register_to_work_mail( OrganizationId='事前に確認したOrganizationID', EntityId='先ほど作成したUserId', Email='作成するメールアドレス' )
これを実行することでユーザのステータスがEnabled
に変更され、有効なアドレスとして利用できるようになります。
ユーザの削除について
念のため削除も確認しておきます。delete_user
を実行すればよいのですが、Enabled
なユーザは消せないため事前にderegister_from_work_mail
でDisabled
にしておく必要があります。
wm_client.deregister_from_work_mail( OrganizationId='事前に確認したOrganizationID', EntityId='削除するユーザのUserId' ) wm_client.delete_user( OrganizationId='事前に確認したOrganizationID', EntityId='削除するユーザのUserId' )
これでユーザの削除は完了です。
まとめ
WorkMailのユーザ作成・削除をboto3で行う手順を確認しました。これらを利用することで自身のサービスの特定の処理をフックにしてアドレスを自動で払い出すことも容易に対応できそうです。