AWS SDK for Python を使用してAmazon Connect インスタンス・ユーザ作成を少し楽にする

2022.04.07

こんにちは、森田です。

Amazon Connect インスタンスを起動したいタイミングで Shell からできないかなと思い、調べてみたところプレビュー版APIがありましたので実際に試してみました。

実行環境

実行環境は以下となります。

Python 3.8.5
boto3 1.17.70

 

Connect インスタンスを作成

boto3の低レベルAPIでcreate_instanceを使用し、インスタンスの作成を行います。 使用したインスタンスの操作ができるようにインスタンスIDはテキストファイルに保存しておきます。

import boto3
import datetime

client = boto3.client('connect')

instance_alias = 'devio-sample'

res = client.create_instance(
    IdentityManagementType='CONNECT_MANAGED',
    InstanceAlias=instance_alias,
    InboundCallsEnabled=True,
    OutboundCallsEnabled=True
)

InstanceId = res["Id"]
name = datetime.datetime.now().strftime('%Y-%m-%d-%H%M%S') + 'instance_id.txt'
with open(name, mode='w') as f:
    f.write(InstanceId)
print(res)

実行結果

{
	"ResponseMetadata": {
		"RequestId": "xxxxxxxxx-yyyyyyyy-zzzzzzzz",
		"HTTPStatusCode": 200,
		"HTTPHeaders": {
			"date": "Wed, 06 Apr 2022 03:33:59 GMT",
			"content-type": "application/json",
			"content-length": "143",
			"connection": "keep-alive",
			"x-amzn-requestid": "xxxxxxxxx-yyyyyyyy-zzzzzzzz",
			"access-control-allow-origin": "*",
			"access-control-allow-headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token",
			"x-amz-apigw-id": "xxxxx",
			"access-control-allow-methods": "GET,OPTIONS,POST",
			"access-control-expose-headers": "x-amzn-RequestId,x-amzn-ErrorType",
			"x-amzn-trace-id": "xxxxxxxxx-yyyyyyyy-zzzzzzzz"
		},
		"RetryAttempts": 0
	},
	"Id": "aaaa-bbbb-cccc",
	"Arn": "arn:aws:connect:ap-northeast-1:000000000000:instance/aaaa-bbbb-cccc"
}

しばらく待つと、AWSコンソール上でインスタンスのステータスがActiveになります。

インスタンスの作成ができましたが、ユーザがないためEmergency accessのみとなってしまいます。

ユーザとしてアクセスできるように、管理者ユーザの作成を行います。

ユーザの作成

ユーザの作成には、RoutingProfileIdSecurityProfileIdが必要ですので、それぞれの取得を行います。

取得後、それらをcreate_userの引数に指定し、ユーザの作成を行います。

import boto3

client = boto3.client('connect')

with open('2022-04-07-115045instance_id.txt') as f:
    InstanceId = f.read()

# RoutingProfileIdを取得する
res = client.list_routing_profiles(
    InstanceId=InstanceId
)
RoutingProfileId = res['RoutingProfileSummaryList'][0]['Id']

# SecurityProfileIdsを取得する
res = client.list_security_profiles(
    InstanceId=InstanceId
)
SecurityProfileAdminId = list(filter(lambda x: x['Name']=='Admin', res['SecurityProfileSummaryList']))[0]["Id"]

user_name = 'boto3admin'
passwd = 'Sample1234'
f_n = 'chikara'
l_n = 'morita'
mail = 'morita@example.com'

res = client.create_user(
    Username=user_name,
    Password=passwd,
    IdentityInfo={
        'FirstName': f_n,
        'LastName': l_n,
        'Email':mail
    },
    PhoneConfig={
        'PhoneType': 'SOFT_PHONE'
    },
    SecurityProfileIds=[
        SecurityProfileAdminId,
    ],
    RoutingProfileId=RoutingProfileId,
    InstanceId=InstanceId
)
print(res)

実行結果

{
	"ResponseMetadata": {
		"RequestId": "xxxx-yyyy-zzzz",
		"HTTPStatusCode": 200,
		"HTTPHeaders": {
			"date": "Thu, 07 Apr 2022 03:06:21 GMT",
			"content-type": "application/json",
			"content-length": "194",
			"connection": "keep-alive",
			"x-amzn-requestid": "xxxx-yyyy-zzzz",
			"access-control-allow-origin": "*",
			"access-control-allow-headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token",
			"x-amz-apigw-id": "xxxx-yyyy-zzzz",
			"access-control-allow-methods": "GET,OPTIONS,POST",
			"access-control-expose-headers": "x-amzn-RequestId,x-amzn-ErrorType",
			"x-amzn-trace-id": "xxxx-yyyy-zzzz"
		},
		"RetryAttempts": 0
	},
	"UserId": "xxxx-yyyy-zzzz",
	"UserArn": "arn:aws:connect:ap-northeast-1:000000000000:instance/xxxx-yyyy-zzzz/agent/xxxx-yyyy-zzzz"
}

ユーザ作成後は、ユーザ名・パスワードを使用してログインが可能となります。

Connect インスタンス・ユーザ作成をまとめて行う

先ほど使用したコードを1つのコードにまとめたものが以下となります。

このコードを使用することで、Connect インスタンス・ユーザ作成といった初回のセットアップをShellで完結することができます。

connect_run.py

import argparse
import time
import boto3

client = boto3.client('connect')

parser = argparse.ArgumentParser(description='Setup Amazon Connect Instance')
parser.add_argument('instance_alias', type=str, help='New Instance Alias')
parser.add_argument('user_name', type=str, help='New User Name')
parser.add_argument('passwd', type=str, help='New User Password')
parser.add_argument('f_n', type=str, help='New User first name')
parser.add_argument('l_n', type=str, help='New User last name')
parser.add_argument('mail', type=str, help='New User mail')

args = parser.parse_args()


res = client.create_instance(
    IdentityManagementType='CONNECT_MANAGED',
    InstanceAlias=args.instance_alias,
    InboundCallsEnabled=True,
    OutboundCallsEnabled=True
)
assert res['ResponseMetadata']['HTTPStatusCode'] == 200, 'Connect インスタンスが正常に作成できませんでした'

InstanceId = res["Id"]

# インスタンスがACTIVEになるまで待つ
status = ''
while status != 'ACTIVE':
    time.sleep(5)
    res= client.describe_instance(
        InstanceId=InstanceId
    )
    status = res['Instance'] ['InstanceStatus']


# RoutingProfileIdを取得する
res = client.list_routing_profiles(
    InstanceId=InstanceId
)
RoutingProfileId = res['RoutingProfileSummaryList'][0]['Id']

# SecurityProfileIdsを取得する
res = client.list_security_profiles(
    InstanceId=InstanceId
)
SecurityProfileAdminId = list(filter(lambda x: x['Name']=='Admin', res['SecurityProfileSummaryList']))[0]['Id']

res = client.create_user(
    Username=args.user_name,
    Password=args.passwd,
    IdentityInfo={
        'FirstName': args.f_n,
        'LastName': args.l_n,
        'Email': args.mail
    },
    PhoneConfig={
        'PhoneType': 'SOFT_PHONE'
    },
    SecurityProfileIds=[
        SecurityProfileAdminId,
    ],
    RoutingProfileId=RoutingProfileId,
    InstanceId=InstanceId
)

assert res['ResponseMetadata']['HTTPStatusCode'] == 200, 'Connect ユーザが正常に作成できませんでした'

print('Amazon Connect Setup Done!!')
print('https://{}.my.connect.aws'.format(args.instance_alias))

実行時の引数に

Connect インスタンスのエイリアス、作成するユーザのユーザ名・パスワード・姓・名・メールアドレス

を指定します。

shellからの実行例

$ python connect_run.py devio-sample morita Sample12345 chikara morita sample@exmaple.com

実行結果

Amazon Connect Setup Done!!
https://devio-sample.my.connect.aws

正常に実行されると、Amazon Connect Setup Done!!が表示されます。

また、実際に表示されたリンクより作成したユーザでログインすることも可能です。

 

最後に

本記事では、AWS SDK for Python を使用して Amazon Connectインスタンス・ユーザの作成をまとめて行う方法についてご紹介しました。

Amazon Connectインスタンス・ユーザの作成は、CLIでも可能ですので、気になる方は以下をご参照ください。