async def create_up_solution(dsg_arn): solution_response = personalize.create_solution( name=SOLUTION_NAME_UP, datasetGroupArn=dsg_arn, recipeArn='arn:aws:personalize:::recipe/aws-user-personalization') solution_arn = solution_response['solutionArn'] PersistentValues[SOLUTION_UP] = solution_arn write(PersistentValues) await util.wait_until_status_async( lambdaToGetStatus=lambda _="": personalize.describe_solution( solutionArn=solution_arn)['solution']["status"], messagePrefix="Creating a up solution...", expectedStatus="ACTIVE") solution_version_response = personalize.create_solution_version( solutionArn=solution_arn) solution_version_arn = solution_version_response['solutionVersionArn'] PersistentValues[SOLUTION_VERSION_UP] = solution_version_arn write(PersistentValues) await util.wait_until_status_async( lambdaToGetStatus=lambda _="": personalize.describe_solution_version( solutionVersionArn=solution_version_arn)['solutionVersion'][ 'status'], messagePrefix="Creating a up solution version...", expectedStatus="ACTIVE")
def create_app(): logging.info('Create Pinpoint. Application name : {}, region: {}'.format( APPLICATION_NAME, REGION)) app_response = pinpoint.create_app( CreateApplicationRequest={'Name': APPLICATION_NAME}) app_id = app_response['ApplicationResponse']['Id'] PersistentValues[APPLICATION_NAME] = app_id write(PersistentValues)
def create_app(): app_response = pinpoint.create_app( CreateApplicationRequest={'Name': APPLICATION_NAME}) logger.info('Creating Pinpoint Application({}) >> Success'.format( APPLICATION_NAME)) app_id = app_response['ApplicationResponse']['Id'] PersistentValues[APPLICATION_NAME] = app_id write(PersistentValues)
def create_filter(dsg_arn): filer_response = personalize.create_filter( name='FILTER_USER_PERSONALIZATION', datasetGroupArn=dsg_arn, filterExpression= 'EXCLUDE itemId WHERE INTERACTIONS.event_type in ("title-read")') filter_arn = filer_response['filterArn'] PersistentValues[FILTER_UP] = filter_arn write(PersistentValues)
def create_dataset_group(): response = personalize.create_dataset_group(name=DSG_NAME) dsg_arn = response['datasetGroupArn'] PersistentValues[DSG] = dsg_arn write(PersistentValues) logging.info("Dataset group has been created. ARN: " + dsg_arn) util.wait_until_status(lambda _="": personalize.describe_dataset_group( datasetGroupArn=dsg_arn)["datasetGroup"]["status"], "Creating dataset group...", "ACTIVE")
def create_import_job(): segment_response = pinpoint.create_import_job( ApplicationId=PersistentValues[APPLICATION_NAME], ImportJobRequest={ 'Format': 'CSV', 'RoleArn': PersistentValues[ROLE_NAME], 'S3Url': f's3://{BUCKET_NAME}{SEGMENT_PATH}', 'SegmentName': SEGEMENT_NAME }) logger.info('Creating Segment({}) >> Success'.format(SEGEMENT_NAME)) segment_id = segment_response['Definition']['SegmentId'] PersistentValues[SEGEMENT_NAME] = segment_id write(PersistentValues)
def create_function(): logging.info('Create Lambda. Function name : {}'.format(FUNCTION_NAME)) function_response = function.create_function( FunctionName=FUNCTION_NAME, Runtime='python3.8', Role=PersistentValues[LAMBDA_ROLE_NAME], Handler='lambda_function.lambda_handler', Code={ 'S3Bucket': BUCKET_NAME, 'S3Key': LAMBDA_PATH }) function_arn = function_response['FunctionArn'] PersistentValues[FUNCTION_NAME] = function_arn write(PersistentValues)
def register_schema(): json_file_paths = util.get_file_paths_recursively(DATA_DIRECTORY, "json") for p in json_file_paths: with open(p) as f: schema_name = p.split("/")[1] createSchemaResponse = personalize.create_schema(name=schema_name, schema=f.read()) schema_arn = createSchemaResponse['schemaArn'] logging.info('Schema Name: {}, ARN: {}'.format(schema_name, schema_arn)) PersistentValues[schema_name] = schema_arn write(PersistentValues)
async def create_up_campaign(solutionVersionArn): response = personalize.create_campaign( name=CAMPAIGN_NAME_UP, solutionVersionArn=solutionVersionArn, minProvisionedTPS=1) arn = response['campaignArn'] PersistentValues[CAMPAIGN_UP] = arn write(PersistentValues) await util.wait_until_status_async( lambdaToGetStatus=lambda _="": personalize.describe_campaign( campaignArn=arn)['campaign']['status'], messagePrefix="Creating a up campaign...", expectedStatus="ACTIVE")
def create_import_job(): logging.info('Create Segment. Segment name : {}'.format(SEGEMENT_NAME)) segment_response = pinpoint.create_import_job( ApplicationId=PersistentValues[APPLICATION_NAME], ImportJobRequest={ 'DefineSegment': True, 'Format': 'CSV', 'RoleArn': PersistentValues[S3_ROLE_NAME_FOR_PINPOINT], 'S3Url': f's3://{BUCKET_NAME}/{SEGMENT_PATH}', 'SegmentName': SEGEMENT_NAME }) time.sleep(10) # 10초를 기다리지 않으면 SegmentId가 생성되지 않음... segment_id = segment_response['ImportJobResponse']['Definition'][ 'SegmentId'] PersistentValues[SEGEMENT_NAME] = segment_id write(PersistentValues)
def create_lambda_role(): logging.info("Creating a role for Lambda. Role name: " + LAMBDA_ROLE_NAME) role_arn = iam_client.create_role(RoleName=LAMBDA_ROLE_NAME, AssumeRolePolicyDocument='''{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }''')['Role']['Arn'] new_policy = iam_client.create_policy(PolicyName=LAMBDA_POLICY_NAME, PolicyDocument=f'''{{ "Version": "2012-10-17", "Id": "{LAMBDA_POLICY_NAME}", "Statement": [ {{ "Effect": "Allow", "Action": "logs:CreateLogGroup", "Resource": "arn:aws:logs:{REGION}:{ACCOUNT_ID}:*" }}, {{ "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:{REGION}:{ACCOUNT_ID}:log-group:/aws/lambda/{FUNCTION_NAME}:*" ] }} ] }}''') new_policy_arn = new_policy['Policy']['Arn'] policy = iam_resource.Policy(new_policy_arn) policy.attach_role(RoleName=LAMBDA_ROLE_NAME) PersistentValues[LAMBDA_ROLE_NAME] = role_arn PersistentValues[LAMBDA_POLICY_NAME] = new_policy_arn write(PersistentValues)
def create_recommender_configuration(): logging.info('Create ML Model. Recommender name : {}'.format(ML_NAME)) model_response = pinpoint.create_recommender_configuration( CreateRecommenderConfiguration={ 'Attributes': { 'Recommendations.Title': 'Title' }, 'Name': ML_NAME, 'RecommendationProviderIdType': 'PINPOINT_USER_ID', 'RecommendationProviderRoleArn': PersistentValues[ML_ROLE_NAME], 'RecommendationProviderUri': PersistentValues[CAMPAIGN_UP], 'RecommendationTransformerUri': FUNCTION_NAME, 'RecommendationsPerMessage': 5 }) model_id = model_response['RecommenderConfigurationResponse']['Id'] PersistentValues[ML_NAME] = model_id write(PersistentValues)
def create_s3_role(): logging.info("Creating a role for Personalize. Role name: " + S3_ROLE_NAME_FOR_PERSONALIZE) role_arn = iam_client.create_role(RoleName=S3_ROLE_NAME_FOR_PERSONALIZE, AssumeRolePolicyDocument='''{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "personalize.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }''')['Role']['Arn'] new_policy = iam_client.create_policy( PolicyName=S3_POLICY_NAME_FOR_ROLE_FOR_PERSONALIZE, PolicyDocument=f'''{{ "Version": "2012-10-17", "Id": "{S3_POLICY_NAME_FOR_ROLE_FOR_PERSONALIZE}", "Statement": [ {{ "Sid": "{S3_POLICY_NAME_FOR_ROLE_FOR_PERSONALIZE}", "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::{BUCKET_NAME}", "arn:aws:s3:::{BUCKET_NAME}/*" ] }} ] }}''') new_policy_arn = new_policy['Policy']['Arn'] policy = iam_resource.Policy(new_policy_arn) policy.attach_role(RoleName=S3_ROLE_NAME_FOR_PERSONALIZE) PersistentValues[S3_ROLE_NAME_FOR_PERSONALIZE] = role_arn PersistentValues[S3_POLICY_NAME_FOR_ROLE_FOR_PERSONALIZE] = new_policy_arn write(PersistentValues)
def create_campaign(): logging.info('Create Campaign. Campaign name : {}'.format(CAMPAIGN_NAME)) campaign_response = pinpoint.create_campaign( ApplicationId=PersistentValues[APPLICATION_NAME], WriteCampaignRequest={ 'Name': CAMPAIGN_NAME, 'SegmentId': PersistentValues[SEGEMENT_NAME], 'TemplateConfiguration': { 'EmailTemplate': { 'Name': EMAIL_NAME } }, 'Schedule': { 'StartTime': 'IMMEDIATE' } }) campaign_id = campaign_response['CampaignResponse']['Arn'] PersistentValues[CAMPAIGN_NAME] = campaign_id write(PersistentValues)
def create_ml_role(): logging.info("Creating a role for Lambda. Role name: " + ML_ROLE_NAME) role_arn = iam_client.create_role(RoleName=ML_ROLE_NAME, AssumeRolePolicyDocument='''{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pinpoint.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }''')['Role']['Arn'] new_policy = iam_client.create_policy(PolicyName=ML_POLICY_NAME, PolicyDocument=f'''{{ "Version": "2012-10-17", "Id": "{ML_POLICY_NAME}", "Statement": [ {{ "Effect": "Allow", "Action": [ "personalize:*" ], "Resource": [ "{PersistentValues[CAMPAIGN_UP]}", "{PersistentValues[SOLUTION_UP]}" ] }} ] }}''') new_policy_arn = new_policy['Policy']['Arn'] policy = iam_resource.Policy(new_policy_arn) policy.attach_role(RoleName=ML_ROLE_NAME) PersistentValues[ML_ROLE_NAME] = role_arn PersistentValues[ML_POLICY_NAME] = new_policy_arn write(PersistentValues)
def create_role(): ASSUME_POLICY = '''{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pinpoint.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }''' role_response = iam.creat_role(RoleName=ROLE_NAME, AssumeRolePolicyDocument=ASSUME_POLICY, PermissionsBoundary=POLICY_NAME) logger.info('Creating IAM Role({}) >> Success'.format(ROLE_NAME)) role_arn = role_response['Role']['Arn'] PersistentValues[ROLE_NAME] = role_arn write(PersistentValues)
def create_campaign(): campaign_response = pinpoint.create_campaign( ApplicationId=PersistentValues[APPLICATION_NAME], WriteCampaignRequest={ 'Name': CAMPAIGN_NAME, 'SegmentId': PersistentValues[SEGEMENT_NAME], 'TemplateConfiguration': { 'EmailTemplate': { 'Name': EMAIL_NAME } }, 'Schedule': { 'StartTime': 'IMMEDIATE', 'Timezone': 'UTC+09' } }) logger.info('Creating Campaign({}) >> Success'.format(CAMPAIGN_NAME)) campaign_arn = campaign_response['campaignArn'] PersistentValues[CAMPAIGN_NAME] = campaign_arn write(PersistentValues)
def create_dataset(datasetGroupArn, titleSchemaArn, userSchemaArn, titleReadSchemaArn): dataset_arn = 'datasetArn' title_dataset = personalize.create_dataset(name=TITLE, schemaArn=titleSchemaArn, datasetGroupArn=datasetGroupArn, datasetType="Items") logging.info("titleDatasetArn: " + title_dataset[dataset_arn]) PersistentValues[TITLE_DATASET] = title_dataset[dataset_arn] write(PersistentValues) user_dataset = personalize.create_dataset(name=USER, schemaArn=userSchemaArn, datasetGroupArn=datasetGroupArn, datasetType="Users") logging.info("userDatasetArn: " + user_dataset[dataset_arn]) PersistentValues[USER_DATASET] = user_dataset[dataset_arn] write(PersistentValues) title_read_dataset = personalize.create_dataset( name=TITLE_READ, schemaArn=titleReadSchemaArn, datasetGroupArn=datasetGroupArn, datasetType="Interactions") logging.info("titleReadDatasetArn: " + title_read_dataset[dataset_arn]) PersistentValues[TITLE_READ_DATASET] = title_read_dataset[dataset_arn] write(PersistentValues)
def create_policy(): POLICY = f'''{{ "Version": "2012-10-17", "Id": {POLICY_NAME}, "Statement": [ {{ "Effect": "Allow", "Action": "s3:*" "Resource": [ "arn:aws:s3:::{BUCKET_NAME}", "arn:aws:s3:::{BUCKET_NAME}/*" ] }} ] }}''' policy_response = iam.create_policy(PolicyName=POLICY_NAME, PolicyDocument=POLICY) logger.info('Creating IAM Policy({}) >> Success'.format(POLICY_NAME)) policy_arn = policy_response['Policy']['Arn'] PersistentValues[POLICY_NAME] = policy_arn write(PersistentValues)