A shell variable is just that: a shell variable. If you want to turn it into a awk variable, you need a syntax such as:
awk -v x="$x" '$2 == x {print $1}' infile
or
awk '$2 == x {print $1}' x="$x" infile
However, those suffer from a problem: escape sequences are expanded in them.
So, for instance if the shell variable contains the the two characters backslash and n, the awk variable will end up containing the newline character.
Another approach (but which requires a POSIX awk or nawk (as opposed to the original awk as still found on a few odd Unices)) is to use environment variables:
x="$x" awk '$2 == ENVIRON["x"] {print $1}' infile
Another approach (still with newer awks) is to use the ARGV array in awk:
awk 'BEGIN {x = ARGV[1]; delete ARGV[1]}
$2 == x {print $1}' "$x" infile