google/rpc/code.proto has the HTTP mappings. Those are REST-centric and are for converting
to HTTP status code. Multiple of them are obviously wrong for gRPC (e.g., NOT_FOUND→404) and multiple of them are... weak... mappings even with REST. They aren't used for gRPC as gRPC (currently) always uses 200 for RPC errors. (I would be interested in changing that, in particular for UNIMPLEMENTED, but it hasn't been a problem.)
http-grpc-status-mapping.md is the opposite. It is HTTP → gRPC status code. HTTP 429 could be mapped to RESOURCE_EXHAUSTED, but I don't think UNAVAILABLE is
bad. There was some discussion on the PR about this specifically after it was merged:
https://github.com/grpc/grpc/pull/4955#pullrequestreview-6858335 . The current mapping was trying to be "good enough," and was thought to be the first pass. I'm quite surprised it has been 8 years without
any change.