644년 당나라 태종(太宗)은 상당한 반대여론을 무릅쓰고 고구려 침공을 결심했다.
이를 위해 치밀한 계획을 세워 군량·선박·각종 공성구(攻城具) 등을 준비하는 한편, 소수의 병력을 파견해 고구려 변경지대의 형세를 정탐했다. 이어 연개소문(淵蓋蘇文)이 영류왕과 대신들을 살해하고 집권했으므로 성토하지 않을 수 없다는 구실을 내세워 고구려 침공을 실천에 옮겼다.
645년 4월 1일 이세적(李世勣)이 이끄는 당군의 선봉은 회원진(懷遠鎭: 지금의 광녕 부근) 쪽으로 진군하는 척하다가 갑자기 통정진(通定鎭: 지금의 신민 부근)에서 요하(遼河)를 건너 고구려 침공을 개시하였다.
그들은 고구려의 방어체계를 혼란시키기 위해 신성(新城: 지금의 무순 배관산성)·건안성(建安城: 지금의 개평) 등 여러 성을 동시에 공격했으나, 이 계획이 실패하자 전군을 집결시켜 4월 15일부터 개모성(蓋牟城: 무순 고성자 토성)을 공격, 26일에 이를 함락시켰다.
이때 장량(張亮)이 지휘하는 수군은 요동반도에 상륙하여 천연의 요새임을 자랑하던 비사성(卑沙城 또는 沙卑城: 지금의 대련만 배안)을 공격, 5월 2일 이를 함락시켰다.
한편 태종도 요하를 건너와 이세적의 군대와 합류하여 19일간에 걸친 집요한 공격 끝에 5월 17일 요동성(遼東城: 지금의 요양)을 함락하고, 이어서 6월 10일에는 백암성(白巖城, 白崖城: 지금의 燕州城)을 빼앗았다.
백암성 함락 후 당군은 수뇌부 사이의 이견(異見)을 조정하여 다음 공격목표를 안시성(安市城, 安地城: 지금의 해성 동남 영성자산성에 비정하는 것이 통설임)으로 정하고, 6월 20일 안시성으로 쳐들어갔다.
고구려에서는 이에 맞서 북부욕살(北部褥薩) 고연수(高延壽)와 남부욕살(南部褥薩) 고혜진(高惠眞)으로 하여금 고구려와 말갈(靺鞨) 군사 15만 명을 거느리고 안시성을 구원하게 하였다. 그러나 두 사람은 당군을 가볍게 보고 성급하게 정면대결을 벌이다가 당군의 포위공격을 당했으며, 결국 살아남은 3만 6,800명의 군사와 함께 항복하였다.
안시성 구원군의 군세에 두려움을 금치 못했던 태종은 뜻밖의 놀라운 전과를 올리자 이는 하늘의 도움이라 하여 승리에 도취했고, 그 여세를 몰아 안시성에 대한 총공격을 개시하였다.
이에 반해 고구려는 안시성 구원군이 패배한데다가 남으로는 신라의 공격을 받고 있었고, 또 북아시아의 새로운 강자 설연타(薛延陀)와 제휴하여 당을 견제해 보려는 외교적 노력마저 실패함으로써 안시성 지원능력을 잃어버렸다. 따라서 안시성은 완전히 고립무원(孤立無援)의 상태에 빠지게 되었다.
안시성의 위기를 최대한 이용하기 위해 당은 고연수 등을 앞세워 항복을 권유하는 한편, 당시 가장 위력적인 성 공격무기였던 포거(抛車: 큰 돌을 날려 보내는 투석기)와 충거(衝車: 성벽을 파괴하는 돌격용 수레)를 동원하여 안시성을 공격해 왔다. 그러나 안시성측은 이를 번번이 물리쳤고, 무너진 성벽도 재빨리 수리하는 등 확고한 자세로 방어에 임하였다.
안시성의 이 같은 완강한 저항에 당황한 당은 태종의 본영을 여러 번 바꾸어가면서, 또 안시성을 함락하는 날 남자들은 모두 죽이겠다고 공언하면서 안시성 공격에 더욱 박차를 가하였다.
하지만 공격은 뜻대로 되지 않았고 고연수의 건의에 따라 안시성을 그냥 두고 동쪽으로 이동하여 방비가 약한 오골성(烏骨城)을 점령한 다음 곧장 평양으로 진공하자는 논의까지 하게 되었다. 그러나 천자가 친히 싸움터에 나왔으니 안시성을 뒤에 두고 앞으로 나아가는 모험은 할 수 없다는 주장이 제기되어 당의 안시성 공격은 계속 강행되었다.
한편, 장량이 이끄는 수군의 건안성 공격마저 교착상태에 빠지게 되었다. 이에 초조해진 당은 이 싸움을 빨리 마무리 짓기 위해 이세적으로 하여금 하루에도 6, 7회씩 성의 서쪽을 공격하게 하였다.
당은 60일에 걸쳐 성의 동남쪽에 연인원 50만 명을 동원하여 성벽보다 높게 토산(土山)을 쌓아 이를 발판으로 성을 공격하였다. 그러나 갑자기 토산이 무너지면서 성벽의 한쪽 귀퉁이가 부서지는 사태가 발생하였다.(안시성의 고구려군이 토산 아래에 땅굴을 파서 토산을 무너뜨렸을 것이라는 주장도 있음) 고구려군은 이 틈을 이용하여 무너진 성벽 사이로 빠져 나와 토산을 점령하였다.
당은 토성을 탈환하기 위해 3일간 극렬한 공격을 폈으나 실패했으며, 그 결과 당의 작전은 전반적으로 큰 타격을 받게 되었다. 더욱이 겨울이 되어 날씨도 추워지고 군량마저 떨어졌으므로, 당은 할 수 없이 88일간의 포위를 풀고 그 해 9월 18일 서둘러 퇴각하였다.
중국 측 문헌에는 645년 당군이 고구려를 침공하여 10개의 성을 빼앗고 4만 명 이상을 전사시킨 반면 당군의 전사자는 2,000명에 불과했다며 대전과를 거둔 것처럼 기록되어 있으나, 태종이 안시성에서 퇴각한 지 3일 만에 황급히 요수를 건넌 것이나 철군 후 고구려 침공을 몹시 후회했던 점으로 미루어, 당의 타격은 기록에 보이는 것 이상으로 막대한 것이었으리라 추측된다.
이 같은 전투를 승리로 이끈 지휘자의 이름이 『삼국사기』 등의 안시성전투에 관한 기본사료에는 나타나지 않으나 조선 중기 이래의 야사에는 양만춘(梁萬春 또는 楊滿春)으로 전해지고 있다. 또 이 싸움에서 당 태종은 눈에 화살을 맞았다는 이야기가 고려 후기의 문헌을 통해 전해지고 있다. →여당전쟁