{"record":{"id":"83d1a0266411ac2c","repo":"risingwavelabs/risingwave","slug":"error-building-kinesis-client-err","errorCode":null,"errorMessage":"error building Kinesis client: {err}","messagePattern":"error building Kinesis client: (.+?)","errorType":"exception","errorClass":"SinkError::Kinesis","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/kinesis.rs","lineNumber":200,"sourceCode":"        pk_indices: Vec<usize>,\n        format_desc: &SinkFormatDesc,\n        db_name: String,\n        sink_from_name: String,\n    ) -> Result<Self> {\n        let formatter = SinkFormatterImpl::new(\n            format_desc,\n            schema,\n            pk_indices,\n            db_name,\n            sink_from_name,\n            &config.common.stream_name,\n        )\n        .await?;\n        let client = config\n            .common\n            .build_client()\n            .await\n            .map_err(|err| SinkError::Kinesis(anyhow!(err)))?;\n        Ok(Self {\n            config: config.clone(),\n            formatter,\n            client,\n        })\n    }\n\n    fn new_payload_writer(&self) -> KinesisSinkPayloadWriter {\n        KinesisSinkPayloadWriter {\n            client: self.client.clone(),\n            entries: vec![],\n            stream_name: self.config.common.stream_name.clone(),\n        }\n    }\n}\n\nmod opaque_type {\n    use std::cmp::min;","sourceCodeStart":182,"sourceCodeEnd":218,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/kinesis.rs#L182-L218","documentation":"The AWS SDK Kinesis client construction (credentials, region, endpoint resolution) failed inside KinesisSinkWriter::new. The SDK error is wrapped into SinkError::Kinesis, so sink creation is aborted before any record is sent.","triggerScenarios":"`config.common.build_client()` returning Err during sink writer creation — e.g. missing/invalid AWS credentials or an unresolvable region/endpoint.","commonSituations":"Missing `aws.credentials`/`aws.region` in WITH options or environment (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION); typos in custom endpoint URL; unreachable assumed-role/STS endpoint.","solutions":["Set AWS credentials and region in the sink WITH options (aws.credentials.access_key_id/secret_access_key, aws.region)","Or export AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION in the compute-node environment","Verify any custom `endpoint` URL is valid and reachable","Check IAM role/instance-profile configuration if relying on implicit credentials"],"exampleFix":"// before\nWITH ( connector='kinesis', stream='s1' )\n// after\nWITH ( connector='kinesis', stream='s1',\n       aws.region='us-east-1',\n       aws.credentials.access_key_id='...', aws.credentials.secret_access_key='...' )","handlingStrategy":"validation","validationCode":"// before creating the sink, ensure creds/region resolve\nif std::env::var(\"AWS_REGION\").is_err()\n   && !props.contains_key(\"aws.region\") {\n  return Err(\"aws.region (or AWS_REGION) is required\".into());\n}\nif !props.contains_key(\"aws.credentials.access_key_id\")\n   && std::env::var(\"AWS_ACCESS_KEY_ID\").is_err() {\n  return Err(\"AWS credentials required\".into());\n}","typeGuard":null,"tryCatchPattern":"match writer_result {\n  Ok(w) => w,\n  Err(SinkError::Kinesis(e)) => {\n    eprintln!(\"kinesis client init failed (check AWS creds/region/endpoint): {e:#}\");\n    std::process::exit(1);\n  }\n}","preventionTips":["Set aws.region and credentials explicitly in WITH options","Export AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_REGION on compute nodes","Validate custom endpoint URLs before deployment"],"tags":["kinesis","aws-sdk","credentials","client"],"backgroundTag":"missing-credentials","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}