Outbreaks of many infectious diseases, including cholera, malaria and dengue, vary over characteristic periods longer than 1 year. Evidence that climate variability drives these interannual cycles has been highly controversial, chiefly because it is difficult to isolate the contribution of environmental forcing while taking into account nonlinear epidemiological dynamics generated by mechanisms such as host immunity. Here we show that a critical interplay of environmental forcing, specifically climate variability, and temporary immunity explains the interannual disease cycles present in a four-decade cholera time series from Matlab, Bangladesh. We reconstruct the transmission rate, the key epidemiological parameter affected by extrinsic forcing, over time for the predominant strain (El Tor) with a nonlinear population model that permits a contributing effect of intrinsic immunity. Transmission shows clear interannual variability with a strong correspondence to climate patterns at long periods (over 7 years, for monsoon rains and Brahmaputra river discharge) and at shorter periods (under 7 years, for flood extent in Bangladesh, sea surface temperatures in the Bay of Bengal and the El Niño-Southern Oscillation). The importance of the interplay between extrinsic and intrinsic factors in determining disease dynamics is illustrated during refractory periods, when population susceptibility levels are low as the result of immunity and the size of cholera outbreaks only weakly reflects climate forcing.