创建并运行 Amazon Cognito 用户池导入任务
本部分介绍如何使用 Amazon Cognito 控制台和 AWS Command Line Interface 创建并运行用户池导入任务。
使用 Amazon Cognito 控制台从 .csv 文件导入用户
以下过程介绍了如何从 .csv 文件导入用户。
使用 Amazon Cognito 控制台从 .csv 文件导入用户的步骤
-
选择创建导入任务。
-
键入任务名称。任务名称可以包含大写和小写字母 (a-z、A-Z)、数字 (0-9) 和以下特殊字符:+ = , . @ -。
-
如果这是您首次创建用户导入任务,则 AWS 管理控制台将自动为您创建 IAM 角色。否则,您可以从 IAM 角色列表中选择现有角色,也可以让 AWS 管理控制台为您创建新角色。
-
选择上传 CSV 并选择要从中导入用户的 .csv 文件。
-
选择 Create job。
-
要启动任务,请选择开始。
使用 AWS CLI 导入用户
以下 CLI 命令可用于将用户导入到用户池:
-
create-user-import-job
-
get-csv-header
-
describe-user-import-job
-
list-user-import-jobs
-
start-user-import-job
-
stop-user-import-job
要获取这些命令的命令行选项列表,请使用 help
命令行选项。例如:
aws cognito-idp get-csv-header help
创建用户导入任务
创建 .csv 文件后,请通过运行以下 CLI 命令创建用户导入任务,其中,JOB_NAME
是您为任务选择的名称,USER_POOL_ID
是与之前相同的用户池 ID,ROLE_ARN
是您在创建 CloudWatch LogsIAM 角色中收到的角色 ARN:
aws cognito-idp create-user-import-job --job-name "
JOB_NAME
" --user-pool-id "USER_POOL_ID
" --cloud-watch-logs-role-arn "ROLE_ARN
"
响应中返回的 PRE_SIGNED_URL
在 15 分钟内有效。在此之后,它将过期,而您必须创建新的用户导入任务以获取新的 URL。
示例响应:
{ "UserImportJob": { "Status": "Created", "SkippedUsers": 0, "UserPoolId": "
USER_POOL_ID
", "ImportedUsers": 0, "JobName": "JOB_NAME
", "JobId": "JOB_ID
", "PreSignedUrl": "PRE_SIGNED_URL
", "CloudWatchLogsRoleArn": "ROLE_ARN
", "FailedUsers": 0, "CreationDate": 1470957431.965 } }
用户导入任务的状态值
在对用户导入命令的响应中,您将看到以下 Status
值当中的其中一个值:
-
“Created”– 任务已创建但未启动。
-
“Pending”– 一个转换状态。您已启动任务,但它尚未开始导入用户。
-
“InProgress”– 任务已启动,正在导入用户。
-
“Stopping”– 您已停止任务,但任务尚未停止导入用户。
-
“Stopped”– 您已停止任务,且任务已停止导入用户。
-
“Succeeded”– 任务已成功完成。
-
“Failed”– 任务因错误而停止。
-
“Expired”– 您创建了一个任务,但未在 24-48 小时内启动任务。与任务关联的所有数据已删除,且任务无法启动。
上传 .csv 文件
使用以下 curl
命令将包含用户数据的 .csv 文件上传到您从 create-user-import-job
命令的响应中获取的预签名 URL。
curl -v -T "
PATH_TO_CSV_FILE
" -H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL
"
在此命令的输出中,查找 "We are completely uploaded and
fine"
这一短语。此短语表示文件已成功上传。
描述用户导入任务
要获取用户导入任务的描述,请使用以下命令,其中,USER_POOL_ID
是用户池 ID,JOB_ID
是创建用户导入任务时返回的任务 ID。
aws cognito-idp describe-user-import-job --user-pool-id "
USER_POOL_ID
" --job-id "JOB_ID
"
示例响应:
{ "UserImportJob": { "Status": "Created", "SkippedUsers": 0, "UserPoolId": "
USER_POOL_ID
", "ImportedUsers": 0, "JobName": "JOB_NAME
", "JobId": "JOB_ID
", "PreSignedUrl": "PRE_SIGNED_URL
", "CloudWatchLogsRoleArn":"ROLE_ARN
", "FailedUsers": 0, "CreationDate": 1470957431.965 } }
在上一示例输出中,PRE_SIGNED_URL
是您上传 .csv 文件的目标 URL。ROLE_ARN
是您创建角色时收到的 CloudWatch Logs 角色 ARN。
列出用户导入任务
要列出用户导入任务,请使用以下命令:
aws cognito-idp list-user-import-jobs --user-pool-id "
USER_POOL_ID
" --max-results 2
示例响应:
{ "UserImportJobs": [ { "Status": "Created", "SkippedUsers": 0, "UserPoolId": "
USER_POOL_ID
", "ImportedUsers": 0, "JobName": "JOB_NAME
", "JobId": "JOB_ID
", "PreSignedUrl":"PRE_SIGNED_URL
", "CloudWatchLogsRoleArn":"ROLE_ARN
", "FailedUsers": 0, "CreationDate": 1470957431.965 }, { "CompletionDate": 1470954227.701, "StartDate": 1470954226.086, "Status": "Failed", "UserPoolId": "USER_POOL_ID
", "ImportedUsers": 0, "SkippedUsers": 0, "JobName": "JOB_NAME
", "CompletionMessage": "Too many users have failed or been skipped during the import.", "JobId": "JOB_ID
", "PreSignedUrl":"PRE_SIGNED_URL
", "CloudWatchLogsRoleArn":"ROLE_ARN
", "FailedUsers": 5, "CreationDate": 1470953929.313 } ], "PaginationToken": "PAGINATION_TOKEN
" }
任务按创建日期 (从近到远) 排列。第二项任务之后的 PAGINATION_TOKEN
字符串表示此列表命令还有其他结果。要列出更多结果,请使用 --pagination-token
选项,如下所示:
aws cognito-idp list-user-import-jobs --user-pool-id "
USER_POOL_ID
" --max-results 10 --pagination-token "PAGINATION_TOKEN
"
启动用户导入任务
要启动用户导入任务,请使用以下命令:
aws cognito-idp start-user-import-job --user-pool-id "
USER_POOL_ID
" --job-id "JOB_ID
"
一个给定用户池每次只能有一个用户导入任务处于活动状态。
示例响应:
{ "UserImportJob": { "Status": "Pending", "StartDate": 1470957851.483, "UserPoolId": "
USER_POOL_ID
", "ImportedUsers": 0, "SkippedUsers": 0, "JobName": "JOB_NAME
", "JobId": "JOB_ID
", "PreSignedUrl":"PRE_SIGNED_URL
", "CloudWatchLogsRoleArn": "ROLE_ARN
", "FailedUsers": 0, "CreationDate": 1470957431.965 } }
停止用户导入任务
要停止正在进行的用户导入任务,请使用以下命令。停止任务后,无法重新启动该任务。
aws cognito-idp stop-user-import-job --user-pool-id "
USER_POOL_ID
" --job-id "JOB_ID
"
示例响应:
{ "UserImportJob": { "CompletionDate": 1470958050.571, "StartDate": 1470958047.797, "Status": "Stopped", "UserPoolId": "
USER_POOL_ID
", "ImportedUsers": 0, "SkippedUsers": 0, "JobName": "JOB_NAME
", "CompletionMessage": "The Import Job was stopped by the developer.", "JobId": "JOB_ID
", "PreSignedUrl":"PRE_SIGNED_URL
", "CloudWatchLogsRoleArn": "ROLE_ARN
", "FailedUsers": 0, "CreationDate": 1470957972.387 } }