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

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

Clock Icon2022.04.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、森田です。

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で完結することができます。

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 インスタンスのエイリアス、作成するユーザのユーザ名・パスワード・姓・名・メールアドレス

を指定します。

$ 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でも可能ですので、気になる方は以下をご参照ください。

 

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.