[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.")

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です