func (t *Test) invokeLambda(awsConfig *aws.Config, cmd string) { svc := lambda.New(session.New(), awsConfig) svc.InvokeAsync(&lambda.InvokeAsyncInput{ FunctionName: aws.String("goad"), InvokeArgs: strings.NewReader(`{"cmd":"` + cmd + `"}`), }) }
func (infra *Infrastructure) createLambdaFunction(roleArn string, payload []byte) error { svc := lambda.New(session.New(), infra.config) _, err := svc.GetFunction(&lambda.GetFunctionInput{ FunctionName: aws.String("goad"), }) if err != nil { if awsErr, ok := err.(awserr.Error); ok { if awsErr.Code() == "ResourceNotFoundException" { _, err := svc.CreateFunction(&lambda.CreateFunctionInput{ Code: &lambda.FunctionCode{ ZipFile: payload, }, FunctionName: aws.String("goad"), Handler: aws.String("index.handler"), Role: aws.String(roleArn), Runtime: aws.String("nodejs"), Description: aws.String("Description"), MemorySize: aws.Int64(128), Publish: aws.Bool(true), Timeout: aws.Int64(300), }) if err != nil { if awsErr, ok := err.(awserr.Error); ok { // Calling this function too soon after creating the role might // fail, so we should retry after a little while. // TODO: limit the number of retries. if awsErr.Code() == "InvalidParameterValueException" { time.Sleep(time.Second) return infra.createLambdaFunction(roleArn, payload) } } return err } } } } return nil }