func invokeLambda()

in cmd/resource/lambda.go [210:255]


func invokeLambda(session *session.Session, svc lambdaiface.LambdaAPI, clusterName *string, iamAuthMap *IamAuthMap, action Action) (*IamAuthMap, error) {
	endpoint, caData, err := GetClusterDetails(eks.New(session), clusterName)
	if err != nil {
		return nil, err
	}
	event := Event{
		ClusterName: clusterName,
		Endpoint:    endpoint,
		CaData:      caData,
		AwsAuth:     iamAuthMap,
		Action:      action,
	}

	eventJson, err := json.Marshal(event)
	if err != nil {
		return nil, err
	}
	input := &lambda.InvokeInput{
		FunctionName: aws.String(FunctionNamePrefix + *clusterName),
		Payload:      eventJson,
	}

	result, err := svc.Invoke(input)
	if err != nil {
		return nil, err
	}
	if result.FunctionError != nil {
		log.Printf("Remote execution error: %v\n", *result.FunctionError)
		errorDetails := make(map[string]string)
		err := json.Unmarshal(result.Payload, &errorDetails)
		errMsg := ""
		if err != nil {
			log.Println(err.Error())
			errMsg = fmt.Sprintf("[%v] %v", *result.FunctionError, string(result.Payload))
		} else {
			errMsg = fmt.Sprintf("[%v] %v", errorDetails["errorType"], errorDetails["errorMessage"])
		}
		return nil, errors.New(errMsg)
	}
	resp := &IamAuthMap{}
	err = json.Unmarshal(result.Payload, resp)
	if err != nil {
		return nil, err
	}
	return resp, nil
}