# Migrate CloudFormation to Pulumi with Discovered Stacks

DevFeed: [Migrate CloudFormation to Pulumi with Discovered Stacks](<https://devfeed.tech/articles/migrate-cloudformation-to-pulumi-with-discovered-stacks-18996.md>)

Original publisher: [Read original article](<https://www.pulumi.com/blog/discovered-stacks-migrate-cloudformation-to-pulumi/>)

Author: Alejandro Cotroneo

Published: 2026-07-30T00:00:00Z

Content type: tutorial

Language: en

Sources: [Pulumi](<https://devfeed.tech/sources/pulumi.md>)

Topics: [Infrastructure as code](<https://devfeed.tech/topics/infrastructure-as-code.md>), [AWS CloudFormation](<https://devfeed.tech/topics/aws-cloudformation.md>), [migration](<https://devfeed.tech/topics/migration.md>), [Amazon Web Services](<https://devfeed.tech/topics/aws.md>), [VPC](<https://devfeed.tech/topics/vpc.md>), [Amazon S3](<https://devfeed.tech/topics/amazon-s3.md>), [DynamoDB](<https://devfeed.tech/topics/dynamodb.md>), [AWS IAM](<https://devfeed.tech/topics/aws-iam.md>)

Tags: [aws](<https://devfeed.tech/tags/aws.md>), [cloudformation](<https://devfeed.tech/tags/cloudformation.md>), [dynamodb](<https://devfeed.tech/tags/dynamodb.md>), [git](<https://devfeed.tech/tags/git.md>), [iac](<https://devfeed.tech/tags/iac.md>), [iam](<https://devfeed.tech/tags/iam.md>), [import](<https://devfeed.tech/tags/import.md>), [insights](<https://devfeed.tech/tags/insights.md>), [kms](<https://devfeed.tech/tags/kms.md>), [migration](<https://devfeed.tech/tags/migration.md>), [pulumi](<https://devfeed.tech/tags/pulumi.md>), [pulumi-cloud](<https://devfeed.tech/tags/pulumi-cloud.md>), [pulumi-neo](<https://devfeed.tech/tags/pulumi-neo.md>), [s3](<https://devfeed.tech/tags/s3.md>), [tutorials](<https://devfeed.tech/tags/tutorials.md>), [vpc](<https://devfeed.tech/tags/vpc.md>)

## AI overview

A tutorial shows how to migrate a 61-resource AWS CloudFormation stack to Pulumi using Discovered Stacks in Pulumi Cloud. It explains how to find the stack, review migration status, start the migration, resolve unmatched resources, and verify the result with a zero-diff pulumi preview.

## Source excerpt

With Discovered Stacks, Pulumi Cloud does the bookkeeping for a CloudFormation migration: every resource in the stack gets an explicit migration status, and the migration is done when the code provably matches the cloud. In this tutorial, we take one real CloudFormation stack from discovered to migrated and managed by Pulumi IaC, end to end. What we're migrating Our example is payments-api, a CloudFormation stack with 61 resources: a VPC, an Aurora ledger database behind an RDS Proxy, an assets S3 bucket, a DynamoDB ledger table, a Kinesis payment-events pipeline, and the IAM roles, KMS keys, and secrets that wire them together. The plan has five steps: Find the stack in Pulumi Cloud. Review the migration breakdown at a glance. Start the migration. Resolve the stragglers, so every resource is accounted for. Confirm the quality gate: a zero-diff pulumi preview. We'll use Pulumi Neo to do the heavy lifting, but nothing here depends on it. The same flow works with your own coding agent or entirely by hand, because migration status is derived from actual stack state -- however the work gets done, the console shows the same progress. Step 1: Find your stack in Pulumi Cloud Discovered Stacks builds on Discovery, so the only prerequisite is a scanned cloud account -- the AWS account holding your CloudFormation stacks. Once a scan has run, open the Stacks page and turn on Show Discovered Stacks. Your CloudFormation stacks appear alongside your Pulumi stacks. The project name comes from the CloudFormation stack (payments-api), and the stack name encodes the account and region it came from, so the same template deployed to two regions shows up as two distinct discovered stacks. Step 2: Plan the migration at a glance Open the discovered stack's Migration tab. It lays out all 61 resources of payments-api by status, so you can visualize the migration before touching anything: 54 Ready: mapped to a Pulumi type and confirmed to exist -- importable right now. 2 Not found: mapped, but