Cloud is good for services that are independent and do not have direct relations to components placed into other environments. If services have good interfaces, which can isolate the parts located into cloud then flexibility is increased.
Cloud is an excellent option when you are seeking scalability and want to avoid excessive initial investments to infrastructure. Most optimal case for cloud is, if you can utilize software as a service (SaaS) model. For example in case of using CRM (like salesforce.com ) additional benefits include availability of solution also outside company network, which is quite convenient for mobile salesforce.
Cloud is not good for cases where solutions are business critical or they are not planned for virtualized environments. With business critical i mean here situations where network connectivity and availability are really cruicial, like call center solutions. Also if you want to keep your vendor close to you, it might prove to be tricky with international cloud providers.
Cloud has also security related challenges, which mostly connect to local legistlation. In some cases there are strict rules where data is located and how utiliztion is limitted. Some times security levels are set so that you need to be able to prove how secure environment is. In thiskind of cases it most often makes sense to forget cloud and stick with traditional approach.
In real life there is always a solution for thiskind of issues. You always have an option to choose hybrid solution, where you cherry pick best sides of both worlds (this naturally comes with prise of compromise in some potential benefits).