[Python] AWS CognitoにメールアドレスCSVをCLIで流し込む方法
Pythonを使って、AWS CognitoにメールアドレスCSVをCLIで流し込む方法は以下の通り。
ただし、1行1行PUSHするので、AWSポータルのCSVインポートのほうが早いはず。CSVのフォーマットをCognito用に変えたくない人のため用
本CSVはメールアドレス、名前という2つのカラムがあるCSV(shift-jis)をインポートしている
手順
必要モジュールをインストール
pip install boto3 chardet awscli
IAMを作成しアクセスキーとシークレットキーを作成。
aws configureでAWS CLIが利用できるようにしてから、
aws configure
以下のコードを実行
ファイル名はmain.pyなどでよい
import csv
import boto3
import chardet
# Set the User Pool ID
user_pool_id = '<POOL ID>'
csv_file = 'mail.csv'
# Manually set the encoding to 'shift_jis'
encoding = 'shift_jis'
print(f"Using encoding: {encoding}")
# Initialize a Cognito client with the specified region
client = boto3.client('cognito-idp', region_name='ap-northeast-1') # Replace 'ap-northeast-1' with your region
# Open the CSV file with the specified encoding
with open(csv_file, newline='', encoding=encoding) as csvfile:
reader = csv.DictReader(csvfile)
# Print the header row to debug
headers = reader.fieldnames
print(f"CSV Headers: {headers}")
# Strip whitespace from headers
headers = [header.strip() for header in headers]
for row in reader:
# Strip whitespace from keys in each row
row = {key.strip(): value for key, value in row.items()}
email = row.get('メールアドレス')
name = row.get('名前', '')
if email: # Ensure email is not empty
try:
response = client.admin_create_user(
UserPoolId=user_pool_id,
Username=email,
UserAttributes=[
{'Name': 'email', 'Value': email},
{'Name': 'email_verified', 'Value': 'true'},
],
MessageAction='SUPPRESS' # 確認メールを送信しない
)
print(f"Successfully added {email}")
except Exception as e:
print(f"Failed to add {email}: {str(e)}")
print("Import process completed.")