[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-pulumi-pulumi-best-practices":3,"mdc--8o2o88-key":33,"related-repo-pulumi-pulumi-best-practices":6671,"related-org-pulumi-pulumi-best-practices":6766},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":31,"mdContent":32},"pulumi-best-practices","apply Pulumi best practices for infrastructure","Load when the user is writing, reviewing, or debugging Pulumi TypeScript\u002FPython programs; asks about Output\u003CT> or apply() usage; wants to create ComponentResource classes; needs to refactor resources without destroying them (aliases); is setting up secrets or config; or is configuring a pulumi preview\u002Fup CI workflow. Also load for questions about resource dependency order, parent\u002Fchild resource relationships, or pulumi.interpolate.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"pulumi","Pulumi","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fpulumi.png",[12,14,17,20],{"name":9,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"TypeScript","typescript",{"name":18,"slug":19,"type":13},"Python","python",{"name":21,"slug":22,"type":13},"Infrastructure as Code","infrastructure-as-code",63,"https:\u002F\u002Fgithub.com\u002Fpulumi\u002Fagent-skills","2026-06-03T07:52:43.916562",null,4,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":26},[],"https:\u002F\u002Fgithub.com\u002Fpulumi\u002Fagent-skills\u002Ftree\u002FHEAD\u002Fpulumi\u002Fskills\u002Fpulumi-best-practices","---\nname: pulumi-best-practices\nversion: 1.0.0\ndescription: Load when the user is writing, reviewing, or debugging Pulumi TypeScript\u002FPython programs; asks about Output\u003CT> or apply() usage; wants to create ComponentResource classes; needs to refactor resources without destroying them (aliases); is setting up secrets or config; or is configuring a pulumi preview\u002Fup CI workflow. Also load for questions about resource dependency order, parent\u002Fchild resource relationships, or pulumi.interpolate.\n---\n\n# Pulumi Best Practices\n\n## When to Use This Skill\n\nInvoke this skill when:\n\n- Writing new Pulumi programs or components\n- Reviewing Pulumi code for correctness\n- Refactoring existing Pulumi infrastructure\n- Debugging resource dependency issues\n- Setting up configuration and secrets\n\n## Practices\n\n### 1. Never Create Resources Inside `apply()`\n\n**Why**: Resources created inside `apply()` don't appear in `pulumi preview`, making changes unpredictable. Pulumi cannot properly track dependencies, leading to race conditions and deployment failures.\n\n**Detection signals**:\n\n- `new aws.` or other resource constructors inside `.apply()` callbacks\n- Resource creation inside `pulumi.all([...]).apply()`\n- Dynamic resource counts determined at runtime inside apply\n\n**Wrong**:\n\n```typescript\nconst bucket = new aws.s3.Bucket(\"bucket\");\n\nbucket.id.apply(bucketId => {\n    \u002F\u002F WRONG: This resource won't appear in preview\n    new aws.s3.BucketObject(\"object\", {\n        bucket: bucketId,\n        content: \"hello\",\n    });\n});\n```\n\n**Right**:\n\n```typescript\nconst bucket = new aws.s3.Bucket(\"bucket\");\n\n\u002F\u002F Pass the output directly - Pulumi handles the dependency\nconst object = new aws.s3.BucketObject(\"object\", {\n    bucket: bucket.id,  \u002F\u002F Output\u003Cstring> works here\n    content: \"hello\",\n});\n```\n\n**When apply is appropriate**:\n\n- Transforming output values for use in tags, names, or computed strings\n- Logging or debugging (not resource creation)\n- Conditional logic that affects resource properties, not resource existence\n\n**Reference**: https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fconcepts\u002Finputs-outputs\u002F\n\n---\n\n### 2. Pass Outputs Directly as Inputs\n\n**Why**: Pulumi builds a directed acyclic graph (DAG) based on input\u002Foutput relationships. Passing outputs directly ensures correct creation order. Unwrapping values manually breaks the dependency chain, causing resources to deploy in wrong order or reference values that don't exist yet.\n\n**Detection signals**:\n\n- Variables extracted from `.apply()` used later as resource inputs\n- `await` on output values outside of apply\n- String concatenation with outputs instead of `pulumi.interpolate`\n\n**Wrong**:\n\n```typescript\nconst vpc = new aws.ec2.Vpc(\"vpc\", { cidrBlock: \"10.0.0.0\u002F16\" });\n\n\u002F\u002F WRONG: Extracting the value breaks the dependency chain\nlet vpcId: string;\nvpc.id.apply(id => { vpcId = id; });\n\nconst subnet = new aws.ec2.Subnet(\"subnet\", {\n    vpcId: vpcId,  \u002F\u002F May be undefined, no tracked dependency\n    cidrBlock: \"10.0.1.0\u002F24\",\n});\n```\n\n**Right**:\n\n```typescript\nconst vpc = new aws.ec2.Vpc(\"vpc\", { cidrBlock: \"10.0.0.0\u002F16\" });\n\nconst subnet = new aws.ec2.Subnet(\"subnet\", {\n    vpcId: vpc.id,  \u002F\u002F Pass the Output directly\n    cidrBlock: \"10.0.1.0\u002F24\",\n});\n```\n\n**For string interpolation**:\n\n```typescript\n\u002F\u002F WRONG\nconst name = bucket.id.apply(id => `prefix-${id}-suffix`);\n\n\u002F\u002F RIGHT - use pulumi.interpolate for template literals\nconst name = pulumi.interpolate`prefix-${bucket.id}-suffix`;\n\n\u002F\u002F RIGHT - use pulumi.concat for simple concatenation\nconst name = pulumi.concat(\"prefix-\", bucket.id, \"-suffix\");\n```\n\n**Reference**: https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fconcepts\u002Finputs-outputs\u002F\n\n---\n\n### 3. Use Components for Related Resources\n\n**Why**: ComponentResource classes group related resources into reusable, logical units. Without components, your resource graph is flat, making it hard to understand which resources belong together, reuse patterns across stacks, or reason about your infrastructure at a higher level.\n\n**Detection signals**:\n\n- Multiple related resources created at top level without grouping\n- Repeated resource patterns across stacks that should be abstracted\n- Hard to understand resource relationships from the Pulumi console\n\n**Wrong**:\n\n```typescript\n\u002F\u002F Flat structure - no logical grouping, hard to reuse\nconst bucket = new aws.s3.Bucket(\"app-bucket\");\nconst bucketPolicy = new aws.s3.BucketPolicy(\"app-bucket-policy\", {\n    bucket: bucket.id,\n    policy: policyDoc,\n});\nconst originAccessIdentity = new aws.cloudfront.OriginAccessIdentity(\"app-oai\");\nconst distribution = new aws.cloudfront.Distribution(\"app-cdn\", { \u002F* ... *\u002F });\n```\n\n**Right**:\n\n```typescript\ninterface StaticSiteArgs {\n    domain: string;\n    content: pulumi.asset.AssetArchive;\n}\n\nclass StaticSite extends pulumi.ComponentResource {\n    public readonly url: pulumi.Output\u003Cstring>;\n\n    constructor(name: string, args: StaticSiteArgs, opts?: pulumi.ComponentResourceOptions) {\n        super(\"myorg:components:StaticSite\", name, args, opts);\n\n        \u002F\u002F Resources created here - see practice 4 for parent setup\n        const bucket = new aws.s3.Bucket(`${name}-bucket`, {}, { parent: this });\n        \u002F\u002F ...\n\n        this.url = distribution.domainName;\n        this.registerOutputs({ url: this.url });\n    }\n}\n\n\u002F\u002F Reusable across stacks\nconst site = new StaticSite(\"marketing\", {\n    domain: \"marketing.example.com\",\n    content: new pulumi.asset.FileArchive(\".\u002Fdist\"),\n});\n```\n\n**Component best practices**:\n\n- Use a consistent type URN pattern: `organization:module:ComponentName`\n- Call `registerOutputs()` at the end of the constructor\n- Expose outputs as class properties for consumers\n- Accept `ComponentResourceOptions` to allow callers to set providers, aliases, etc.\n\nFor in-depth component authoring guidance (args design, multi-language support, testing, distribution), use skill `pulumi-component`.\n\n**Reference**: https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fconcepts\u002Fresources\u002Fcomponents\u002F\n\n---\n\n### 4. Always Set `parent: this` in Components\n\n**Why**: When you create resources inside a ComponentResource without setting `parent: this`, those resources appear at the root level of your stack's state. This breaks the logical hierarchy, makes the Pulumi console hard to navigate, and can cause issues with aliases and refactoring. The parent relationship is what makes the component actually group its children.\n\n**Detection signals**:\n\n- ComponentResource classes that don't pass `{ parent: this }` to child resources\n- Resources inside a component appearing at root level in the console\n- Unexpected behavior when adding aliases to components\n\n**Wrong**:\n\n```typescript\nclass MyComponent extends pulumi.ComponentResource {\n    constructor(name: string, opts?: pulumi.ComponentResourceOptions) {\n        super(\"myorg:components:MyComponent\", name, {}, opts);\n\n        \u002F\u002F WRONG: No parent set - this bucket appears at root level\n        const bucket = new aws.s3.Bucket(`${name}-bucket`);\n    }\n}\n```\n\n**Right**:\n\n```typescript\nclass MyComponent extends pulumi.ComponentResource {\n    constructor(name: string, opts?: pulumi.ComponentResourceOptions) {\n        super(\"myorg:components:MyComponent\", name, {}, opts);\n\n        \u002F\u002F RIGHT: Parent establishes hierarchy\n        const bucket = new aws.s3.Bucket(`${name}-bucket`, {}, {\n            parent: this\n        });\n\n        const policy = new aws.s3.BucketPolicy(`${name}-policy`, {\n            bucket: bucket.id,\n            policy: policyDoc,\n        }, {\n            parent: this\n        });\n    }\n}\n```\n\n**What parent: this provides**:\n\n- Resources appear nested under the component in Pulumi console\n- Deleting the component deletes all children\n- Aliases on the component automatically apply to children\n- Clear ownership in state files\n\n**Reference**: https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fconcepts\u002Fresources\u002Fcomponents\u002F\n\n---\n\n### 5. Encrypt Secrets from Day One\n\n**Why**: Secrets marked with `--secret` are encrypted in state files, masked in CLI output, and tracked through transformations. Starting with plaintext config and converting later requires credential rotation, reference updates, and audit of leaked values in logs and state history.\n\n**Detection signals**:\n\n- Passwords, API keys, tokens stored as plain config\n- Connection strings with embedded credentials\n- Private keys or certificates in plaintext\n\n**Wrong**:\n\n```bash\n# Plaintext - will be visible in state and logs\npulumi config set databasePassword hunter2\npulumi config set apiKey sk-1234567890\n```\n\n**Right**:\n\n```bash\n# Encrypted from the start\npulumi config set --secret databasePassword hunter2\npulumi config set --secret apiKey sk-1234567890\n```\n\n**In code**:\n\n```typescript\nconst config = new pulumi.Config();\n\n\u002F\u002F This retrieves a secret - the value stays encrypted\nconst dbPassword = config.requireSecret(\"databasePassword\");\n\n\u002F\u002F Creating outputs from secrets preserves secrecy\nconst connectionString = pulumi.interpolate`postgres:\u002F\u002Fuser:${dbPassword}@host\u002Fdb`;\n\u002F\u002F connectionString is also a secret Output\n\n\u002F\u002F Explicitly mark values as secret\nconst computed = pulumi.secret(someValue);\n```\n\n**Use Pulumi ESC for centralized secrets**:\n\n```yaml\n# Pulumi.yaml\nenvironment:\n  - production-secrets  # Pull from ESC environment\n```\n\n```bash\n# ESC manages secrets centrally across stacks\nesc env set production-secrets db.password --secret \"hunter2\"\n```\n\n**What qualifies as a secret**:\n\n- Passwords and passphrases\n- API keys and tokens\n- Private keys and certificates\n- Connection strings with credentials\n- OAuth client secrets\n- Encryption keys\n\n**References**:\n\n- https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fconcepts\u002Fsecrets\u002F\n- https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fesc\u002F\n\n---\n\n### 6. Use Aliases When Refactoring\n\n**Why**: Renaming resources, moving them into components, or changing parents causes Pulumi to see them as new resources. Without aliases, refactoring destroys and recreates resources, potentially causing downtime or data loss. Aliases preserve resource identity through refactors.\n\n**Detection signals**:\n\n- Resource rename without alias\n- Moving resource into or out of a ComponentResource\n- Changing the parent of a resource\n- Preview shows delete+create when update was intended\n\n**Wrong**:\n\n```typescript\n\u002F\u002F Before: resource named \"my-bucket\"\nconst bucket = new aws.s3.Bucket(\"my-bucket\");\n\n\u002F\u002F After: renamed without alias - DESTROYS THE BUCKET\nconst bucket = new aws.s3.Bucket(\"application-bucket\");\n```\n\n**Right**:\n\n```typescript\n\u002F\u002F After: renamed with alias - preserves the existing bucket\nconst bucket = new aws.s3.Bucket(\"application-bucket\", {}, {\n    aliases: [{ name: \"my-bucket\" }],\n});\n```\n\n**Moving into a component**:\n\n```typescript\n\u002F\u002F Before: top-level resource\nconst bucket = new aws.s3.Bucket(\"my-bucket\");\n\n\u002F\u002F After: inside a component - needs alias with old parent\nclass MyComponent extends pulumi.ComponentResource {\n    constructor(name: string, opts?: pulumi.ComponentResourceOptions) {\n        super(\"myorg:components:MyComponent\", name, {}, opts);\n\n        const bucket = new aws.s3.Bucket(\"bucket\", {}, {\n            parent: this,\n            aliases: [{\n                name: \"my-bucket\",\n                parent: pulumi.rootStackResource,  \u002F\u002F Was at root\n            }],\n        });\n    }\n}\n```\n\n**Alias types**:\n\n```typescript\n\u002F\u002F Simple name change\naliases: [{ name: \"old-name\" }]\n\n\u002F\u002F Parent change\naliases: [{ name: \"resource-name\", parent: oldParent }]\n\n\u002F\u002F Full URN (when you know the exact previous URN)\naliases: [\"urn:pulumi:stack::project::aws:s3\u002Fbucket:Bucket::old-name\"]\n```\n\n**Lifecycle**:\n\n1. Add alias during refactor\n2. Run `pulumi up` on all stacks\n3. Remove alias after all stacks updated (optional, but keeps code clean)\n\n**Reference**: https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fiac\u002Fconcepts\u002Fresources\u002Foptions\u002Faliases\u002F\n\n---\n\n### 7. Preview Before Every Deployment\n\n**Why**: `pulumi preview` shows exactly what will be created, updated, or destroyed. Surprises in production come from skipping preview. A resource showing \"replace\" when you expected \"update\" means imminent destruction and recreation.\n\n**Detection signals**:\n\n- Running `pulumi up --yes` interactively without reviewing changes\n- No preview step anywhere in the CI\u002FCD workflow for a given change\n- Preview output not reviewed before merge or deployment approval\n\n**Wrong**:\n\n```bash\n# Deploying blind\npulumi up --yes\n```\n\n**Right**:\n\n```bash\n# Always preview first\npulumi preview\n\n# Review the output, then deploy\npulumi up\n```\n\n**What to look for in preview**:\n\n- `+ create` - New resource will be created\n- `~ update` - Existing resource will be modified in place\n- `- delete` - Resource will be destroyed\n- `+-replace` - Resource will be destroyed and recreated (potential downtime)\n- `~+-replace` - Resource will be updated, then replaced\n\n**Warning signs**:\n\n- Unexpected `replace` operations (check for immutable property changes)\n- Resources being deleted that shouldn't be\n- More changes than expected from your code diff\n\n**CI\u002FCD integration**:\n\n```yaml\n# GitHub Actions example\njobs:\n  preview:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - name: Pulumi Preview\n        uses: pulumi\u002Factions@v5\n        with:\n          command: preview\n          stack-name: production\n        env:\n          PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}\n\n  deploy:\n    needs: preview\n    runs-on: ubuntu-latest\n    if: github.ref == 'refs\u002Fheads\u002Fmain'\n    steps:\n      - name: Pulumi Up\n        uses: pulumi\u002Factions@v5\n        with:\n          command: up\n          stack-name: production\n```\n\n**PR workflow**:\n\n- Run preview on every PR\n- Post preview output as PR comment\n- Require preview review before merge\n- Deploy only on merge to main\n\n**References**:\n\n- https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fcli\u002Fcommands\u002Fpulumi_preview\u002F\n- https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fiac\u002Fpackages-and-automation\u002Fcontinuous-delivery\u002Fgithub-actions\u002F\n\n---\n\n## Quick Reference\n\n| Practice | Key Signal | Fix |\n|----------|-----------|-----|\n| No resources in apply | `new Resource()` inside `.apply()` | Move resource outside, pass Output directly |\n| Pass outputs directly | Extracted values used as inputs | Use Output objects, `pulumi.interpolate` |\n| Use components | Flat structure, repeated patterns | Create ComponentResource classes |\n| Set parent: this | Component children at root level | Pass `{ parent: this }` to all child resources |\n| Secrets from day one | Plaintext passwords\u002Fkeys in config | Use `--secret` flag, ESC |\n| Aliases when refactoring | Delete+create in preview | Add alias with old name\u002Fparent |\n| Preview before deploy | `pulumi up --yes` | Always run `pulumi preview` first |\n\n## Validation Checklist\n\nWhen reviewing Pulumi code, verify:\n\n- [ ] No resource constructors inside `apply()` callbacks\n- [ ] Outputs passed directly to dependent resources\n- [ ] Related resources grouped in ComponentResource classes\n- [ ] Child resources have `{ parent: this }`\n- [ ] Sensitive values use `config.requireSecret()` or `--secret`\n- [ ] Refactored resources have aliases preserving identity\n- [ ] Deployment process includes preview step\n\n## Related Skills\n\n- **pulumi-overview**: Entry-point skill that orients an agent across the three Pulumi surfaces (`pulumi do` CLI, IaC projects, and Pulumi Cloud) and routes to specialized skills. Load it first when the task begins with general infrastructure phrasing or spans multiple Pulumi surfaces. Use skill `pulumi-overview`.\n- **pulumi-component**: Deep guide to authoring ComponentResource classes, designing args interfaces, multi-language support, testing, and distribution. Use skill `pulumi-component`.\n- **pulumi-automation-api**: Programmatic orchestration of multiple stacks. Use skill `pulumi-automation-api`.\n- **pulumi-esc**: Centralized secrets and configuration management. Use skill `pulumi-esc`.\n",{"data":34,"body":36},{"name":4,"version":35,"description":6},"1.0.0",{"type":37,"children":38},"root",[39,47,54,60,90,96,110,136,146,184,193,497,506,732,741,759,777,781,787,796,804,841,849,1214,1222,1469,1478,1765,1778,1781,1787,1796,1804,1822,1830,2188,2196,2937,2946,2990,3002,3016,3019,3033,3049,3057,3083,3091,3337,3345,3796,3805,3828,3841,3844,3850,3867,3875,3893,3901,3970,3978,4048,4057,4314,4323,4371,4430,4439,4472,4481,4502,4505,4511,4520,4528,4551,4559,4717,4725,4876,4885,5333,5342,5534,5543,5570,5584,5587,5593,5608,5616,5642,5650,5682,5690,5744,5753,5811,5820,5846,5855,6210,6219,6242,6250,6271,6274,6280,6479,6485,6490,6585,6591,6665],{"type":40,"tag":41,"props":42,"children":43},"element","h1",{"id":4},[44],{"type":45,"value":46},"text","Pulumi Best Practices",{"type":40,"tag":48,"props":49,"children":51},"h2",{"id":50},"when-to-use-this-skill",[52],{"type":45,"value":53},"When to Use This Skill",{"type":40,"tag":55,"props":56,"children":57},"p",{},[58],{"type":45,"value":59},"Invoke this skill when:",{"type":40,"tag":61,"props":62,"children":63},"ul",{},[64,70,75,80,85],{"type":40,"tag":65,"props":66,"children":67},"li",{},[68],{"type":45,"value":69},"Writing new Pulumi programs or components",{"type":40,"tag":65,"props":71,"children":72},{},[73],{"type":45,"value":74},"Reviewing Pulumi code for correctness",{"type":40,"tag":65,"props":76,"children":77},{},[78],{"type":45,"value":79},"Refactoring existing Pulumi infrastructure",{"type":40,"tag":65,"props":81,"children":82},{},[83],{"type":45,"value":84},"Debugging resource dependency issues",{"type":40,"tag":65,"props":86,"children":87},{},[88],{"type":45,"value":89},"Setting up configuration and secrets",{"type":40,"tag":48,"props":91,"children":93},{"id":92},"practices",[94],{"type":45,"value":95},"Practices",{"type":40,"tag":97,"props":98,"children":100},"h3",{"id":99},"_1-never-create-resources-inside-apply",[101,103],{"type":45,"value":102},"1. Never Create Resources Inside ",{"type":40,"tag":104,"props":105,"children":107},"code",{"className":106},[],[108],{"type":45,"value":109},"apply()",{"type":40,"tag":55,"props":111,"children":112},{},[113,119,121,126,128,134],{"type":40,"tag":114,"props":115,"children":116},"strong",{},[117],{"type":45,"value":118},"Why",{"type":45,"value":120},": Resources created inside ",{"type":40,"tag":104,"props":122,"children":124},{"className":123},[],[125],{"type":45,"value":109},{"type":45,"value":127}," don't appear in ",{"type":40,"tag":104,"props":129,"children":131},{"className":130},[],[132],{"type":45,"value":133},"pulumi preview",{"type":45,"value":135},", making changes unpredictable. Pulumi cannot properly track dependencies, leading to race conditions and deployment failures.",{"type":40,"tag":55,"props":137,"children":138},{},[139,144],{"type":40,"tag":114,"props":140,"children":141},{},[142],{"type":45,"value":143},"Detection signals",{"type":45,"value":145},":",{"type":40,"tag":61,"props":147,"children":148},{},[149,168,179],{"type":40,"tag":65,"props":150,"children":151},{},[152,158,160,166],{"type":40,"tag":104,"props":153,"children":155},{"className":154},[],[156],{"type":45,"value":157},"new aws.",{"type":45,"value":159}," or other resource constructors inside ",{"type":40,"tag":104,"props":161,"children":163},{"className":162},[],[164],{"type":45,"value":165},".apply()",{"type":45,"value":167}," callbacks",{"type":40,"tag":65,"props":169,"children":170},{},[171,173],{"type":45,"value":172},"Resource creation inside ",{"type":40,"tag":104,"props":174,"children":176},{"className":175},[],[177],{"type":45,"value":178},"pulumi.all([...]).apply()",{"type":40,"tag":65,"props":180,"children":181},{},[182],{"type":45,"value":183},"Dynamic resource counts determined at runtime inside apply",{"type":40,"tag":55,"props":185,"children":186},{},[187,192],{"type":40,"tag":114,"props":188,"children":189},{},[190],{"type":45,"value":191},"Wrong",{"type":45,"value":145},{"type":40,"tag":194,"props":195,"children":199},"pre",{"className":196,"code":197,"language":16,"meta":198,"style":198},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const bucket = new aws.s3.Bucket(\"bucket\");\n\nbucket.id.apply(bucketId => {\n    \u002F\u002F WRONG: This resource won't appear in preview\n    new aws.s3.BucketObject(\"object\", {\n        bucket: bucketId,\n        content: \"hello\",\n    });\n});\n","",[200],{"type":40,"tag":104,"props":201,"children":202},{"__ignoreMap":198},[203,287,297,343,352,409,432,463,480],{"type":40,"tag":204,"props":205,"children":208},"span",{"class":206,"line":207},"line",1,[209,215,221,227,232,237,242,247,251,257,262,267,273,277,282],{"type":40,"tag":204,"props":210,"children":212},{"style":211},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[213],{"type":45,"value":214},"const",{"type":40,"tag":204,"props":216,"children":218},{"style":217},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[219],{"type":45,"value":220}," bucket ",{"type":40,"tag":204,"props":222,"children":224},{"style":223},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[225],{"type":45,"value":226},"=",{"type":40,"tag":204,"props":228,"children":229},{"style":223},[230],{"type":45,"value":231}," new",{"type":40,"tag":204,"props":233,"children":234},{"style":217},[235],{"type":45,"value":236}," aws",{"type":40,"tag":204,"props":238,"children":239},{"style":223},[240],{"type":45,"value":241},".",{"type":40,"tag":204,"props":243,"children":244},{"style":217},[245],{"type":45,"value":246},"s3",{"type":40,"tag":204,"props":248,"children":249},{"style":223},[250],{"type":45,"value":241},{"type":40,"tag":204,"props":252,"children":254},{"style":253},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[255],{"type":45,"value":256},"Bucket",{"type":40,"tag":204,"props":258,"children":259},{"style":217},[260],{"type":45,"value":261},"(",{"type":40,"tag":204,"props":263,"children":264},{"style":223},[265],{"type":45,"value":266},"\"",{"type":40,"tag":204,"props":268,"children":270},{"style":269},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[271],{"type":45,"value":272},"bucket",{"type":40,"tag":204,"props":274,"children":275},{"style":223},[276],{"type":45,"value":266},{"type":40,"tag":204,"props":278,"children":279},{"style":217},[280],{"type":45,"value":281},")",{"type":40,"tag":204,"props":283,"children":284},{"style":223},[285],{"type":45,"value":286},";\n",{"type":40,"tag":204,"props":288,"children":290},{"class":206,"line":289},2,[291],{"type":40,"tag":204,"props":292,"children":294},{"emptyLinePlaceholder":293},true,[295],{"type":45,"value":296},"\n",{"type":40,"tag":204,"props":298,"children":300},{"class":206,"line":299},3,[301,305,309,314,318,323,327,333,338],{"type":40,"tag":204,"props":302,"children":303},{"style":217},[304],{"type":45,"value":272},{"type":40,"tag":204,"props":306,"children":307},{"style":223},[308],{"type":45,"value":241},{"type":40,"tag":204,"props":310,"children":311},{"style":217},[312],{"type":45,"value":313},"id",{"type":40,"tag":204,"props":315,"children":316},{"style":223},[317],{"type":45,"value":241},{"type":40,"tag":204,"props":319,"children":320},{"style":253},[321],{"type":45,"value":322},"apply",{"type":40,"tag":204,"props":324,"children":325},{"style":217},[326],{"type":45,"value":261},{"type":40,"tag":204,"props":328,"children":330},{"style":329},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[331],{"type":45,"value":332},"bucketId",{"type":40,"tag":204,"props":334,"children":335},{"style":211},[336],{"type":45,"value":337}," =>",{"type":40,"tag":204,"props":339,"children":340},{"style":223},[341],{"type":45,"value":342}," {\n",{"type":40,"tag":204,"props":344,"children":345},{"class":206,"line":27},[346],{"type":40,"tag":204,"props":347,"children":349},{"style":348},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[350],{"type":45,"value":351},"    \u002F\u002F WRONG: This resource won't appear in preview\n",{"type":40,"tag":204,"props":353,"children":355},{"class":206,"line":354},5,[356,361,365,369,373,377,382,387,391,396,400,405],{"type":40,"tag":204,"props":357,"children":358},{"style":223},[359],{"type":45,"value":360},"    new",{"type":40,"tag":204,"props":362,"children":363},{"style":217},[364],{"type":45,"value":236},{"type":40,"tag":204,"props":366,"children":367},{"style":223},[368],{"type":45,"value":241},{"type":40,"tag":204,"props":370,"children":371},{"style":217},[372],{"type":45,"value":246},{"type":40,"tag":204,"props":374,"children":375},{"style":223},[376],{"type":45,"value":241},{"type":40,"tag":204,"props":378,"children":379},{"style":253},[380],{"type":45,"value":381},"BucketObject",{"type":40,"tag":204,"props":383,"children":385},{"style":384},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[386],{"type":45,"value":261},{"type":40,"tag":204,"props":388,"children":389},{"style":223},[390],{"type":45,"value":266},{"type":40,"tag":204,"props":392,"children":393},{"style":269},[394],{"type":45,"value":395},"object",{"type":40,"tag":204,"props":397,"children":398},{"style":223},[399],{"type":45,"value":266},{"type":40,"tag":204,"props":401,"children":402},{"style":223},[403],{"type":45,"value":404},",",{"type":40,"tag":204,"props":406,"children":407},{"style":223},[408],{"type":45,"value":342},{"type":40,"tag":204,"props":410,"children":412},{"class":206,"line":411},6,[413,418,422,427],{"type":40,"tag":204,"props":414,"children":415},{"style":384},[416],{"type":45,"value":417},"        bucket",{"type":40,"tag":204,"props":419,"children":420},{"style":223},[421],{"type":45,"value":145},{"type":40,"tag":204,"props":423,"children":424},{"style":217},[425],{"type":45,"value":426}," bucketId",{"type":40,"tag":204,"props":428,"children":429},{"style":223},[430],{"type":45,"value":431},",\n",{"type":40,"tag":204,"props":433,"children":435},{"class":206,"line":434},7,[436,441,445,450,455,459],{"type":40,"tag":204,"props":437,"children":438},{"style":384},[439],{"type":45,"value":440},"        content",{"type":40,"tag":204,"props":442,"children":443},{"style":223},[444],{"type":45,"value":145},{"type":40,"tag":204,"props":446,"children":447},{"style":223},[448],{"type":45,"value":449}," \"",{"type":40,"tag":204,"props":451,"children":452},{"style":269},[453],{"type":45,"value":454},"hello",{"type":40,"tag":204,"props":456,"children":457},{"style":223},[458],{"type":45,"value":266},{"type":40,"tag":204,"props":460,"children":461},{"style":223},[462],{"type":45,"value":431},{"type":40,"tag":204,"props":464,"children":466},{"class":206,"line":465},8,[467,472,476],{"type":40,"tag":204,"props":468,"children":469},{"style":223},[470],{"type":45,"value":471},"    }",{"type":40,"tag":204,"props":473,"children":474},{"style":384},[475],{"type":45,"value":281},{"type":40,"tag":204,"props":477,"children":478},{"style":223},[479],{"type":45,"value":286},{"type":40,"tag":204,"props":481,"children":483},{"class":206,"line":482},9,[484,489,493],{"type":40,"tag":204,"props":485,"children":486},{"style":223},[487],{"type":45,"value":488},"}",{"type":40,"tag":204,"props":490,"children":491},{"style":217},[492],{"type":45,"value":281},{"type":40,"tag":204,"props":494,"children":495},{"style":223},[496],{"type":45,"value":286},{"type":40,"tag":55,"props":498,"children":499},{},[500,505],{"type":40,"tag":114,"props":501,"children":502},{},[503],{"type":45,"value":504},"Right",{"type":45,"value":145},{"type":40,"tag":194,"props":507,"children":509},{"className":196,"code":508,"language":16,"meta":198,"style":198},"const bucket = new aws.s3.Bucket(\"bucket\");\n\n\u002F\u002F Pass the output directly - Pulumi handles the dependency\nconst object = new aws.s3.BucketObject(\"object\", {\n    bucket: bucket.id,  \u002F\u002F Output\u003Cstring> works here\n    content: \"hello\",\n});\n",[510],{"type":40,"tag":104,"props":511,"children":512},{"__ignoreMap":198},[513,576,583,591,655,689,717],{"type":40,"tag":204,"props":514,"children":515},{"class":206,"line":207},[516,520,524,528,532,536,540,544,548,552,556,560,564,568,572],{"type":40,"tag":204,"props":517,"children":518},{"style":211},[519],{"type":45,"value":214},{"type":40,"tag":204,"props":521,"children":522},{"style":217},[523],{"type":45,"value":220},{"type":40,"tag":204,"props":525,"children":526},{"style":223},[527],{"type":45,"value":226},{"type":40,"tag":204,"props":529,"children":530},{"style":223},[531],{"type":45,"value":231},{"type":40,"tag":204,"props":533,"children":534},{"style":217},[535],{"type":45,"value":236},{"type":40,"tag":204,"props":537,"children":538},{"style":223},[539],{"type":45,"value":241},{"type":40,"tag":204,"props":541,"children":542},{"style":217},[543],{"type":45,"value":246},{"type":40,"tag":204,"props":545,"children":546},{"style":223},[547],{"type":45,"value":241},{"type":40,"tag":204,"props":549,"children":550},{"style":253},[551],{"type":45,"value":256},{"type":40,"tag":204,"props":553,"children":554},{"style":217},[555],{"type":45,"value":261},{"type":40,"tag":204,"props":557,"children":558},{"style":223},[559],{"type":45,"value":266},{"type":40,"tag":204,"props":561,"children":562},{"style":269},[563],{"type":45,"value":272},{"type":40,"tag":204,"props":565,"children":566},{"style":223},[567],{"type":45,"value":266},{"type":40,"tag":204,"props":569,"children":570},{"style":217},[571],{"type":45,"value":281},{"type":40,"tag":204,"props":573,"children":574},{"style":223},[575],{"type":45,"value":286},{"type":40,"tag":204,"props":577,"children":578},{"class":206,"line":289},[579],{"type":40,"tag":204,"props":580,"children":581},{"emptyLinePlaceholder":293},[582],{"type":45,"value":296},{"type":40,"tag":204,"props":584,"children":585},{"class":206,"line":299},[586],{"type":40,"tag":204,"props":587,"children":588},{"style":348},[589],{"type":45,"value":590},"\u002F\u002F Pass the output directly - Pulumi handles the dependency\n",{"type":40,"tag":204,"props":592,"children":593},{"class":206,"line":27},[594,598,603,607,611,615,619,623,627,631,635,639,643,647,651],{"type":40,"tag":204,"props":595,"children":596},{"style":211},[597],{"type":45,"value":214},{"type":40,"tag":204,"props":599,"children":600},{"style":217},[601],{"type":45,"value":602}," object ",{"type":40,"tag":204,"props":604,"children":605},{"style":223},[606],{"type":45,"value":226},{"type":40,"tag":204,"props":608,"children":609},{"style":223},[610],{"type":45,"value":231},{"type":40,"tag":204,"props":612,"children":613},{"style":217},[614],{"type":45,"value":236},{"type":40,"tag":204,"props":616,"children":617},{"style":223},[618],{"type":45,"value":241},{"type":40,"tag":204,"props":620,"children":621},{"style":217},[622],{"type":45,"value":246},{"type":40,"tag":204,"props":624,"children":625},{"style":223},[626],{"type":45,"value":241},{"type":40,"tag":204,"props":628,"children":629},{"style":253},[630],{"type":45,"value":381},{"type":40,"tag":204,"props":632,"children":633},{"style":217},[634],{"type":45,"value":261},{"type":40,"tag":204,"props":636,"children":637},{"style":223},[638],{"type":45,"value":266},{"type":40,"tag":204,"props":640,"children":641},{"style":269},[642],{"type":45,"value":395},{"type":40,"tag":204,"props":644,"children":645},{"style":223},[646],{"type":45,"value":266},{"type":40,"tag":204,"props":648,"children":649},{"style":223},[650],{"type":45,"value":404},{"type":40,"tag":204,"props":652,"children":653},{"style":223},[654],{"type":45,"value":342},{"type":40,"tag":204,"props":656,"children":657},{"class":206,"line":354},[658,663,667,672,676,680,684],{"type":40,"tag":204,"props":659,"children":660},{"style":384},[661],{"type":45,"value":662},"    bucket",{"type":40,"tag":204,"props":664,"children":665},{"style":223},[666],{"type":45,"value":145},{"type":40,"tag":204,"props":668,"children":669},{"style":217},[670],{"type":45,"value":671}," bucket",{"type":40,"tag":204,"props":673,"children":674},{"style":223},[675],{"type":45,"value":241},{"type":40,"tag":204,"props":677,"children":678},{"style":217},[679],{"type":45,"value":313},{"type":40,"tag":204,"props":681,"children":682},{"style":223},[683],{"type":45,"value":404},{"type":40,"tag":204,"props":685,"children":686},{"style":348},[687],{"type":45,"value":688},"  \u002F\u002F Output\u003Cstring> works here\n",{"type":40,"tag":204,"props":690,"children":691},{"class":206,"line":411},[692,697,701,705,709,713],{"type":40,"tag":204,"props":693,"children":694},{"style":384},[695],{"type":45,"value":696},"    content",{"type":40,"tag":204,"props":698,"children":699},{"style":223},[700],{"type":45,"value":145},{"type":40,"tag":204,"props":702,"children":703},{"style":223},[704],{"type":45,"value":449},{"type":40,"tag":204,"props":706,"children":707},{"style":269},[708],{"type":45,"value":454},{"type":40,"tag":204,"props":710,"children":711},{"style":223},[712],{"type":45,"value":266},{"type":40,"tag":204,"props":714,"children":715},{"style":223},[716],{"type":45,"value":431},{"type":40,"tag":204,"props":718,"children":719},{"class":206,"line":434},[720,724,728],{"type":40,"tag":204,"props":721,"children":722},{"style":223},[723],{"type":45,"value":488},{"type":40,"tag":204,"props":725,"children":726},{"style":217},[727],{"type":45,"value":281},{"type":40,"tag":204,"props":729,"children":730},{"style":223},[731],{"type":45,"value":286},{"type":40,"tag":55,"props":733,"children":734},{},[735,740],{"type":40,"tag":114,"props":736,"children":737},{},[738],{"type":45,"value":739},"When apply is appropriate",{"type":45,"value":145},{"type":40,"tag":61,"props":742,"children":743},{},[744,749,754],{"type":40,"tag":65,"props":745,"children":746},{},[747],{"type":45,"value":748},"Transforming output values for use in tags, names, or computed strings",{"type":40,"tag":65,"props":750,"children":751},{},[752],{"type":45,"value":753},"Logging or debugging (not resource creation)",{"type":40,"tag":65,"props":755,"children":756},{},[757],{"type":45,"value":758},"Conditional logic that affects resource properties, not resource existence",{"type":40,"tag":55,"props":760,"children":761},{},[762,767,769],{"type":40,"tag":114,"props":763,"children":764},{},[765],{"type":45,"value":766},"Reference",{"type":45,"value":768},": ",{"type":40,"tag":770,"props":771,"children":775},"a",{"href":772,"rel":773},"https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fconcepts\u002Finputs-outputs\u002F",[774],"nofollow",[776],{"type":45,"value":772},{"type":40,"tag":778,"props":779,"children":780},"hr",{},[],{"type":40,"tag":97,"props":782,"children":784},{"id":783},"_2-pass-outputs-directly-as-inputs",[785],{"type":45,"value":786},"2. Pass Outputs Directly as Inputs",{"type":40,"tag":55,"props":788,"children":789},{},[790,794],{"type":40,"tag":114,"props":791,"children":792},{},[793],{"type":45,"value":118},{"type":45,"value":795},": Pulumi builds a directed acyclic graph (DAG) based on input\u002Foutput relationships. Passing outputs directly ensures correct creation order. Unwrapping values manually breaks the dependency chain, causing resources to deploy in wrong order or reference values that don't exist yet.",{"type":40,"tag":55,"props":797,"children":798},{},[799,803],{"type":40,"tag":114,"props":800,"children":801},{},[802],{"type":45,"value":143},{"type":45,"value":145},{"type":40,"tag":61,"props":805,"children":806},{},[807,819,830],{"type":40,"tag":65,"props":808,"children":809},{},[810,812,817],{"type":45,"value":811},"Variables extracted from ",{"type":40,"tag":104,"props":813,"children":815},{"className":814},[],[816],{"type":45,"value":165},{"type":45,"value":818}," used later as resource inputs",{"type":40,"tag":65,"props":820,"children":821},{},[822,828],{"type":40,"tag":104,"props":823,"children":825},{"className":824},[],[826],{"type":45,"value":827},"await",{"type":45,"value":829}," on output values outside of apply",{"type":40,"tag":65,"props":831,"children":832},{},[833,835],{"type":45,"value":834},"String concatenation with outputs instead of ",{"type":40,"tag":104,"props":836,"children":838},{"className":837},[],[839],{"type":45,"value":840},"pulumi.interpolate",{"type":40,"tag":55,"props":842,"children":843},{},[844,848],{"type":40,"tag":114,"props":845,"children":846},{},[847],{"type":45,"value":191},{"type":45,"value":145},{"type":40,"tag":194,"props":850,"children":852},{"className":196,"code":851,"language":16,"meta":198,"style":198},"const vpc = new aws.ec2.Vpc(\"vpc\", { cidrBlock: \"10.0.0.0\u002F16\" });\n\n\u002F\u002F WRONG: Extracting the value breaks the dependency chain\nlet vpcId: string;\nvpc.id.apply(id => { vpcId = id; });\n\nconst subnet = new aws.ec2.Subnet(\"subnet\", {\n    vpcId: vpcId,  \u002F\u002F May be undefined, no tracked dependency\n    cidrBlock: \"10.0.1.0\u002F24\",\n});\n",[853],{"type":40,"tag":104,"props":854,"children":855},{"__ignoreMap":198},[856,959,966,974,1001,1071,1078,1144,1169,1198],{"type":40,"tag":204,"props":857,"children":858},{"class":206,"line":207},[859,863,868,872,876,880,884,889,893,898,902,906,911,915,919,924,929,933,937,942,946,951,955],{"type":40,"tag":204,"props":860,"children":861},{"style":211},[862],{"type":45,"value":214},{"type":40,"tag":204,"props":864,"children":865},{"style":217},[866],{"type":45,"value":867}," vpc ",{"type":40,"tag":204,"props":869,"children":870},{"style":223},[871],{"type":45,"value":226},{"type":40,"tag":204,"props":873,"children":874},{"style":223},[875],{"type":45,"value":231},{"type":40,"tag":204,"props":877,"children":878},{"style":217},[879],{"type":45,"value":236},{"type":40,"tag":204,"props":881,"children":882},{"style":223},[883],{"type":45,"value":241},{"type":40,"tag":204,"props":885,"children":886},{"style":217},[887],{"type":45,"value":888},"ec2",{"type":40,"tag":204,"props":890,"children":891},{"style":223},[892],{"type":45,"value":241},{"type":40,"tag":204,"props":894,"children":895},{"style":253},[896],{"type":45,"value":897},"Vpc",{"type":40,"tag":204,"props":899,"children":900},{"style":217},[901],{"type":45,"value":261},{"type":40,"tag":204,"props":903,"children":904},{"style":223},[905],{"type":45,"value":266},{"type":40,"tag":204,"props":907,"children":908},{"style":269},[909],{"type":45,"value":910},"vpc",{"type":40,"tag":204,"props":912,"children":913},{"style":223},[914],{"type":45,"value":266},{"type":40,"tag":204,"props":916,"children":917},{"style":223},[918],{"type":45,"value":404},{"type":40,"tag":204,"props":920,"children":921},{"style":223},[922],{"type":45,"value":923}," {",{"type":40,"tag":204,"props":925,"children":926},{"style":384},[927],{"type":45,"value":928}," cidrBlock",{"type":40,"tag":204,"props":930,"children":931},{"style":223},[932],{"type":45,"value":145},{"type":40,"tag":204,"props":934,"children":935},{"style":223},[936],{"type":45,"value":449},{"type":40,"tag":204,"props":938,"children":939},{"style":269},[940],{"type":45,"value":941},"10.0.0.0\u002F16",{"type":40,"tag":204,"props":943,"children":944},{"style":223},[945],{"type":45,"value":266},{"type":40,"tag":204,"props":947,"children":948},{"style":223},[949],{"type":45,"value":950}," }",{"type":40,"tag":204,"props":952,"children":953},{"style":217},[954],{"type":45,"value":281},{"type":40,"tag":204,"props":956,"children":957},{"style":223},[958],{"type":45,"value":286},{"type":40,"tag":204,"props":960,"children":961},{"class":206,"line":289},[962],{"type":40,"tag":204,"props":963,"children":964},{"emptyLinePlaceholder":293},[965],{"type":45,"value":296},{"type":40,"tag":204,"props":967,"children":968},{"class":206,"line":299},[969],{"type":40,"tag":204,"props":970,"children":971},{"style":348},[972],{"type":45,"value":973},"\u002F\u002F WRONG: Extracting the value breaks the dependency chain\n",{"type":40,"tag":204,"props":975,"children":976},{"class":206,"line":27},[977,982,987,991,997],{"type":40,"tag":204,"props":978,"children":979},{"style":211},[980],{"type":45,"value":981},"let",{"type":40,"tag":204,"props":983,"children":984},{"style":217},[985],{"type":45,"value":986}," vpcId",{"type":40,"tag":204,"props":988,"children":989},{"style":223},[990],{"type":45,"value":145},{"type":40,"tag":204,"props":992,"children":994},{"style":993},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[995],{"type":45,"value":996}," string",{"type":40,"tag":204,"props":998,"children":999},{"style":223},[1000],{"type":45,"value":286},{"type":40,"tag":204,"props":1002,"children":1003},{"class":206,"line":354},[1004,1008,1012,1016,1020,1024,1028,1032,1036,1040,1044,1049,1054,1059,1063,1067],{"type":40,"tag":204,"props":1005,"children":1006},{"style":217},[1007],{"type":45,"value":910},{"type":40,"tag":204,"props":1009,"children":1010},{"style":223},[1011],{"type":45,"value":241},{"type":40,"tag":204,"props":1013,"children":1014},{"style":217},[1015],{"type":45,"value":313},{"type":40,"tag":204,"props":1017,"children":1018},{"style":223},[1019],{"type":45,"value":241},{"type":40,"tag":204,"props":1021,"children":1022},{"style":253},[1023],{"type":45,"value":322},{"type":40,"tag":204,"props":1025,"children":1026},{"style":217},[1027],{"type":45,"value":261},{"type":40,"tag":204,"props":1029,"children":1030},{"style":329},[1031],{"type":45,"value":313},{"type":40,"tag":204,"props":1033,"children":1034},{"style":211},[1035],{"type":45,"value":337},{"type":40,"tag":204,"props":1037,"children":1038},{"style":223},[1039],{"type":45,"value":923},{"type":40,"tag":204,"props":1041,"children":1042},{"style":217},[1043],{"type":45,"value":986},{"type":40,"tag":204,"props":1045,"children":1046},{"style":223},[1047],{"type":45,"value":1048}," =",{"type":40,"tag":204,"props":1050,"children":1051},{"style":217},[1052],{"type":45,"value":1053}," id",{"type":40,"tag":204,"props":1055,"children":1056},{"style":223},[1057],{"type":45,"value":1058},";",{"type":40,"tag":204,"props":1060,"children":1061},{"style":223},[1062],{"type":45,"value":950},{"type":40,"tag":204,"props":1064,"children":1065},{"style":217},[1066],{"type":45,"value":281},{"type":40,"tag":204,"props":1068,"children":1069},{"style":223},[1070],{"type":45,"value":286},{"type":40,"tag":204,"props":1072,"children":1073},{"class":206,"line":411},[1074],{"type":40,"tag":204,"props":1075,"children":1076},{"emptyLinePlaceholder":293},[1077],{"type":45,"value":296},{"type":40,"tag":204,"props":1079,"children":1080},{"class":206,"line":434},[1081,1085,1090,1094,1098,1102,1106,1110,1114,1119,1123,1127,1132,1136,1140],{"type":40,"tag":204,"props":1082,"children":1083},{"style":211},[1084],{"type":45,"value":214},{"type":40,"tag":204,"props":1086,"children":1087},{"style":217},[1088],{"type":45,"value":1089}," subnet ",{"type":40,"tag":204,"props":1091,"children":1092},{"style":223},[1093],{"type":45,"value":226},{"type":40,"tag":204,"props":1095,"children":1096},{"style":223},[1097],{"type":45,"value":231},{"type":40,"tag":204,"props":1099,"children":1100},{"style":217},[1101],{"type":45,"value":236},{"type":40,"tag":204,"props":1103,"children":1104},{"style":223},[1105],{"type":45,"value":241},{"type":40,"tag":204,"props":1107,"children":1108},{"style":217},[1109],{"type":45,"value":888},{"type":40,"tag":204,"props":1111,"children":1112},{"style":223},[1113],{"type":45,"value":241},{"type":40,"tag":204,"props":1115,"children":1116},{"style":253},[1117],{"type":45,"value":1118},"Subnet",{"type":40,"tag":204,"props":1120,"children":1121},{"style":217},[1122],{"type":45,"value":261},{"type":40,"tag":204,"props":1124,"children":1125},{"style":223},[1126],{"type":45,"value":266},{"type":40,"tag":204,"props":1128,"children":1129},{"style":269},[1130],{"type":45,"value":1131},"subnet",{"type":40,"tag":204,"props":1133,"children":1134},{"style":223},[1135],{"type":45,"value":266},{"type":40,"tag":204,"props":1137,"children":1138},{"style":223},[1139],{"type":45,"value":404},{"type":40,"tag":204,"props":1141,"children":1142},{"style":223},[1143],{"type":45,"value":342},{"type":40,"tag":204,"props":1145,"children":1146},{"class":206,"line":465},[1147,1152,1156,1160,1164],{"type":40,"tag":204,"props":1148,"children":1149},{"style":384},[1150],{"type":45,"value":1151},"    vpcId",{"type":40,"tag":204,"props":1153,"children":1154},{"style":223},[1155],{"type":45,"value":145},{"type":40,"tag":204,"props":1157,"children":1158},{"style":217},[1159],{"type":45,"value":986},{"type":40,"tag":204,"props":1161,"children":1162},{"style":223},[1163],{"type":45,"value":404},{"type":40,"tag":204,"props":1165,"children":1166},{"style":348},[1167],{"type":45,"value":1168},"  \u002F\u002F May be undefined, no tracked dependency\n",{"type":40,"tag":204,"props":1170,"children":1171},{"class":206,"line":482},[1172,1177,1181,1185,1190,1194],{"type":40,"tag":204,"props":1173,"children":1174},{"style":384},[1175],{"type":45,"value":1176},"    cidrBlock",{"type":40,"tag":204,"props":1178,"children":1179},{"style":223},[1180],{"type":45,"value":145},{"type":40,"tag":204,"props":1182,"children":1183},{"style":223},[1184],{"type":45,"value":449},{"type":40,"tag":204,"props":1186,"children":1187},{"style":269},[1188],{"type":45,"value":1189},"10.0.1.0\u002F24",{"type":40,"tag":204,"props":1191,"children":1192},{"style":223},[1193],{"type":45,"value":266},{"type":40,"tag":204,"props":1195,"children":1196},{"style":223},[1197],{"type":45,"value":431},{"type":40,"tag":204,"props":1199,"children":1201},{"class":206,"line":1200},10,[1202,1206,1210],{"type":40,"tag":204,"props":1203,"children":1204},{"style":223},[1205],{"type":45,"value":488},{"type":40,"tag":204,"props":1207,"children":1208},{"style":217},[1209],{"type":45,"value":281},{"type":40,"tag":204,"props":1211,"children":1212},{"style":223},[1213],{"type":45,"value":286},{"type":40,"tag":55,"props":1215,"children":1216},{},[1217,1221],{"type":40,"tag":114,"props":1218,"children":1219},{},[1220],{"type":45,"value":504},{"type":45,"value":145},{"type":40,"tag":194,"props":1223,"children":1225},{"className":196,"code":1224,"language":16,"meta":198,"style":198},"const vpc = new aws.ec2.Vpc(\"vpc\", { cidrBlock: \"10.0.0.0\u002F16\" });\n\nconst subnet = new aws.ec2.Subnet(\"subnet\", {\n    vpcId: vpc.id,  \u002F\u002F Pass the Output directly\n    cidrBlock: \"10.0.1.0\u002F24\",\n});\n",[1226],{"type":40,"tag":104,"props":1227,"children":1228},{"__ignoreMap":198},[1229,1324,1331,1394,1427,1454],{"type":40,"tag":204,"props":1230,"children":1231},{"class":206,"line":207},[1232,1236,1240,1244,1248,1252,1256,1260,1264,1268,1272,1276,1280,1284,1288,1292,1296,1300,1304,1308,1312,1316,1320],{"type":40,"tag":204,"props":1233,"children":1234},{"style":211},[1235],{"type":45,"value":214},{"type":40,"tag":204,"props":1237,"children":1238},{"style":217},[1239],{"type":45,"value":867},{"type":40,"tag":204,"props":1241,"children":1242},{"style":223},[1243],{"type":45,"value":226},{"type":40,"tag":204,"props":1245,"children":1246},{"style":223},[1247],{"type":45,"value":231},{"type":40,"tag":204,"props":1249,"children":1250},{"style":217},[1251],{"type":45,"value":236},{"type":40,"tag":204,"props":1253,"children":1254},{"style":223},[1255],{"type":45,"value":241},{"type":40,"tag":204,"props":1257,"children":1258},{"style":217},[1259],{"type":45,"value":888},{"type":40,"tag":204,"props":1261,"children":1262},{"style":223},[1263],{"type":45,"value":241},{"type":40,"tag":204,"props":1265,"children":1266},{"style":253},[1267],{"type":45,"value":897},{"type":40,"tag":204,"props":1269,"children":1270},{"style":217},[1271],{"type":45,"value":261},{"type":40,"tag":204,"props":1273,"children":1274},{"style":223},[1275],{"type":45,"value":266},{"type":40,"tag":204,"props":1277,"children":1278},{"style":269},[1279],{"type":45,"value":910},{"type":40,"tag":204,"props":1281,"children":1282},{"style":223},[1283],{"type":45,"value":266},{"type":40,"tag":204,"props":1285,"children":1286},{"style":223},[1287],{"type":45,"value":404},{"type":40,"tag":204,"props":1289,"children":1290},{"style":223},[1291],{"type":45,"value":923},{"type":40,"tag":204,"props":1293,"children":1294},{"style":384},[1295],{"type":45,"value":928},{"type":40,"tag":204,"props":1297,"children":1298},{"style":223},[1299],{"type":45,"value":145},{"type":40,"tag":204,"props":1301,"children":1302},{"style":223},[1303],{"type":45,"value":449},{"type":40,"tag":204,"props":1305,"children":1306},{"style":269},[1307],{"type":45,"value":941},{"type":40,"tag":204,"props":1309,"children":1310},{"style":223},[1311],{"type":45,"value":266},{"type":40,"tag":204,"props":1313,"children":1314},{"style":223},[1315],{"type":45,"value":950},{"type":40,"tag":204,"props":1317,"children":1318},{"style":217},[1319],{"type":45,"value":281},{"type":40,"tag":204,"props":1321,"children":1322},{"style":223},[1323],{"type":45,"value":286},{"type":40,"tag":204,"props":1325,"children":1326},{"class":206,"line":289},[1327],{"type":40,"tag":204,"props":1328,"children":1329},{"emptyLinePlaceholder":293},[1330],{"type":45,"value":296},{"type":40,"tag":204,"props":1332,"children":1333},{"class":206,"line":299},[1334,1338,1342,1346,1350,1354,1358,1362,1366,1370,1374,1378,1382,1386,1390],{"type":40,"tag":204,"props":1335,"children":1336},{"style":211},[1337],{"type":45,"value":214},{"type":40,"tag":204,"props":1339,"children":1340},{"style":217},[1341],{"type":45,"value":1089},{"type":40,"tag":204,"props":1343,"children":1344},{"style":223},[1345],{"type":45,"value":226},{"type":40,"tag":204,"props":1347,"children":1348},{"style":223},[1349],{"type":45,"value":231},{"type":40,"tag":204,"props":1351,"children":1352},{"style":217},[1353],{"type":45,"value":236},{"type":40,"tag":204,"props":1355,"children":1356},{"style":223},[1357],{"type":45,"value":241},{"type":40,"tag":204,"props":1359,"children":1360},{"style":217},[1361],{"type":45,"value":888},{"type":40,"tag":204,"props":1363,"children":1364},{"style":223},[1365],{"type":45,"value":241},{"type":40,"tag":204,"props":1367,"children":1368},{"style":253},[1369],{"type":45,"value":1118},{"type":40,"tag":204,"props":1371,"children":1372},{"style":217},[1373],{"type":45,"value":261},{"type":40,"tag":204,"props":1375,"children":1376},{"style":223},[1377],{"type":45,"value":266},{"type":40,"tag":204,"props":1379,"children":1380},{"style":269},[1381],{"type":45,"value":1131},{"type":40,"tag":204,"props":1383,"children":1384},{"style":223},[1385],{"type":45,"value":266},{"type":40,"tag":204,"props":1387,"children":1388},{"style":223},[1389],{"type":45,"value":404},{"type":40,"tag":204,"props":1391,"children":1392},{"style":223},[1393],{"type":45,"value":342},{"type":40,"tag":204,"props":1395,"children":1396},{"class":206,"line":27},[1397,1401,1405,1410,1414,1418,1422],{"type":40,"tag":204,"props":1398,"children":1399},{"style":384},[1400],{"type":45,"value":1151},{"type":40,"tag":204,"props":1402,"children":1403},{"style":223},[1404],{"type":45,"value":145},{"type":40,"tag":204,"props":1406,"children":1407},{"style":217},[1408],{"type":45,"value":1409}," vpc",{"type":40,"tag":204,"props":1411,"children":1412},{"style":223},[1413],{"type":45,"value":241},{"type":40,"tag":204,"props":1415,"children":1416},{"style":217},[1417],{"type":45,"value":313},{"type":40,"tag":204,"props":1419,"children":1420},{"style":223},[1421],{"type":45,"value":404},{"type":40,"tag":204,"props":1423,"children":1424},{"style":348},[1425],{"type":45,"value":1426},"  \u002F\u002F Pass the Output directly\n",{"type":40,"tag":204,"props":1428,"children":1429},{"class":206,"line":354},[1430,1434,1438,1442,1446,1450],{"type":40,"tag":204,"props":1431,"children":1432},{"style":384},[1433],{"type":45,"value":1176},{"type":40,"tag":204,"props":1435,"children":1436},{"style":223},[1437],{"type":45,"value":145},{"type":40,"tag":204,"props":1439,"children":1440},{"style":223},[1441],{"type":45,"value":449},{"type":40,"tag":204,"props":1443,"children":1444},{"style":269},[1445],{"type":45,"value":1189},{"type":40,"tag":204,"props":1447,"children":1448},{"style":223},[1449],{"type":45,"value":266},{"type":40,"tag":204,"props":1451,"children":1452},{"style":223},[1453],{"type":45,"value":431},{"type":40,"tag":204,"props":1455,"children":1456},{"class":206,"line":411},[1457,1461,1465],{"type":40,"tag":204,"props":1458,"children":1459},{"style":223},[1460],{"type":45,"value":488},{"type":40,"tag":204,"props":1462,"children":1463},{"style":217},[1464],{"type":45,"value":281},{"type":40,"tag":204,"props":1466,"children":1467},{"style":223},[1468],{"type":45,"value":286},{"type":40,"tag":55,"props":1470,"children":1471},{},[1472,1477],{"type":40,"tag":114,"props":1473,"children":1474},{},[1475],{"type":45,"value":1476},"For string interpolation",{"type":45,"value":145},{"type":40,"tag":194,"props":1479,"children":1481},{"className":196,"code":1480,"language":16,"meta":198,"style":198},"\u002F\u002F WRONG\nconst name = bucket.id.apply(id => `prefix-${id}-suffix`);\n\n\u002F\u002F RIGHT - use pulumi.interpolate for template literals\nconst name = pulumi.interpolate`prefix-${bucket.id}-suffix`;\n\n\u002F\u002F RIGHT - use pulumi.concat for simple concatenation\nconst name = pulumi.concat(\"prefix-\", bucket.id, \"-suffix\");\n",[1482],{"type":40,"tag":104,"props":1483,"children":1484},{"__ignoreMap":198},[1485,1493,1582,1589,1597,1666,1673,1681],{"type":40,"tag":204,"props":1486,"children":1487},{"class":206,"line":207},[1488],{"type":40,"tag":204,"props":1489,"children":1490},{"style":348},[1491],{"type":45,"value":1492},"\u002F\u002F WRONG\n",{"type":40,"tag":204,"props":1494,"children":1495},{"class":206,"line":289},[1496,1500,1505,1509,1513,1517,1521,1525,1529,1533,1537,1541,1546,1551,1556,1560,1564,1569,1574,1578],{"type":40,"tag":204,"props":1497,"children":1498},{"style":211},[1499],{"type":45,"value":214},{"type":40,"tag":204,"props":1501,"children":1502},{"style":217},[1503],{"type":45,"value":1504}," name ",{"type":40,"tag":204,"props":1506,"children":1507},{"style":223},[1508],{"type":45,"value":226},{"type":40,"tag":204,"props":1510,"children":1511},{"style":217},[1512],{"type":45,"value":671},{"type":40,"tag":204,"props":1514,"children":1515},{"style":223},[1516],{"type":45,"value":241},{"type":40,"tag":204,"props":1518,"children":1519},{"style":217},[1520],{"type":45,"value":313},{"type":40,"tag":204,"props":1522,"children":1523},{"style":223},[1524],{"type":45,"value":241},{"type":40,"tag":204,"props":1526,"children":1527},{"style":253},[1528],{"type":45,"value":322},{"type":40,"tag":204,"props":1530,"children":1531},{"style":217},[1532],{"type":45,"value":261},{"type":40,"tag":204,"props":1534,"children":1535},{"style":329},[1536],{"type":45,"value":313},{"type":40,"tag":204,"props":1538,"children":1539},{"style":211},[1540],{"type":45,"value":337},{"type":40,"tag":204,"props":1542,"children":1543},{"style":223},[1544],{"type":45,"value":1545}," `",{"type":40,"tag":204,"props":1547,"children":1548},{"style":269},[1549],{"type":45,"value":1550},"prefix-",{"type":40,"tag":204,"props":1552,"children":1553},{"style":223},[1554],{"type":45,"value":1555},"${",{"type":40,"tag":204,"props":1557,"children":1558},{"style":217},[1559],{"type":45,"value":313},{"type":40,"tag":204,"props":1561,"children":1562},{"style":223},[1563],{"type":45,"value":488},{"type":40,"tag":204,"props":1565,"children":1566},{"style":269},[1567],{"type":45,"value":1568},"-suffix",{"type":40,"tag":204,"props":1570,"children":1571},{"style":223},[1572],{"type":45,"value":1573},"`",{"type":40,"tag":204,"props":1575,"children":1576},{"style":217},[1577],{"type":45,"value":281},{"type":40,"tag":204,"props":1579,"children":1580},{"style":223},[1581],{"type":45,"value":286},{"type":40,"tag":204,"props":1583,"children":1584},{"class":206,"line":299},[1585],{"type":40,"tag":204,"props":1586,"children":1587},{"emptyLinePlaceholder":293},[1588],{"type":45,"value":296},{"type":40,"tag":204,"props":1590,"children":1591},{"class":206,"line":27},[1592],{"type":40,"tag":204,"props":1593,"children":1594},{"style":348},[1595],{"type":45,"value":1596},"\u002F\u002F RIGHT - use pulumi.interpolate for template literals\n",{"type":40,"tag":204,"props":1598,"children":1599},{"class":206,"line":354},[1600,1604,1608,1612,1617,1621,1626,1630,1634,1638,1642,1646,1650,1654,1658,1662],{"type":40,"tag":204,"props":1601,"children":1602},{"style":211},[1603],{"type":45,"value":214},{"type":40,"tag":204,"props":1605,"children":1606},{"style":217},[1607],{"type":45,"value":1504},{"type":40,"tag":204,"props":1609,"children":1610},{"style":223},[1611],{"type":45,"value":226},{"type":40,"tag":204,"props":1613,"children":1614},{"style":217},[1615],{"type":45,"value":1616}," pulumi",{"type":40,"tag":204,"props":1618,"children":1619},{"style":223},[1620],{"type":45,"value":241},{"type":40,"tag":204,"props":1622,"children":1623},{"style":253},[1624],{"type":45,"value":1625},"interpolate",{"type":40,"tag":204,"props":1627,"children":1628},{"style":223},[1629],{"type":45,"value":1573},{"type":40,"tag":204,"props":1631,"children":1632},{"style":269},[1633],{"type":45,"value":1550},{"type":40,"tag":204,"props":1635,"children":1636},{"style":223},[1637],{"type":45,"value":1555},{"type":40,"tag":204,"props":1639,"children":1640},{"style":217},[1641],{"type":45,"value":272},{"type":40,"tag":204,"props":1643,"children":1644},{"style":223},[1645],{"type":45,"value":241},{"type":40,"tag":204,"props":1647,"children":1648},{"style":217},[1649],{"type":45,"value":313},{"type":40,"tag":204,"props":1651,"children":1652},{"style":223},[1653],{"type":45,"value":488},{"type":40,"tag":204,"props":1655,"children":1656},{"style":269},[1657],{"type":45,"value":1568},{"type":40,"tag":204,"props":1659,"children":1660},{"style":223},[1661],{"type":45,"value":1573},{"type":40,"tag":204,"props":1663,"children":1664},{"style":223},[1665],{"type":45,"value":286},{"type":40,"tag":204,"props":1667,"children":1668},{"class":206,"line":411},[1669],{"type":40,"tag":204,"props":1670,"children":1671},{"emptyLinePlaceholder":293},[1672],{"type":45,"value":296},{"type":40,"tag":204,"props":1674,"children":1675},{"class":206,"line":434},[1676],{"type":40,"tag":204,"props":1677,"children":1678},{"style":348},[1679],{"type":45,"value":1680},"\u002F\u002F RIGHT - use pulumi.concat for simple concatenation\n",{"type":40,"tag":204,"props":1682,"children":1683},{"class":206,"line":465},[1684,1688,1692,1696,1700,1704,1709,1713,1717,1721,1725,1729,1733,1737,1741,1745,1749,1753,1757,1761],{"type":40,"tag":204,"props":1685,"children":1686},{"style":211},[1687],{"type":45,"value":214},{"type":40,"tag":204,"props":1689,"children":1690},{"style":217},[1691],{"type":45,"value":1504},{"type":40,"tag":204,"props":1693,"children":1694},{"style":223},[1695],{"type":45,"value":226},{"type":40,"tag":204,"props":1697,"children":1698},{"style":217},[1699],{"type":45,"value":1616},{"type":40,"tag":204,"props":1701,"children":1702},{"style":223},[1703],{"type":45,"value":241},{"type":40,"tag":204,"props":1705,"children":1706},{"style":253},[1707],{"type":45,"value":1708},"concat",{"type":40,"tag":204,"props":1710,"children":1711},{"style":217},[1712],{"type":45,"value":261},{"type":40,"tag":204,"props":1714,"children":1715},{"style":223},[1716],{"type":45,"value":266},{"type":40,"tag":204,"props":1718,"children":1719},{"style":269},[1720],{"type":45,"value":1550},{"type":40,"tag":204,"props":1722,"children":1723},{"style":223},[1724],{"type":45,"value":266},{"type":40,"tag":204,"props":1726,"children":1727},{"style":223},[1728],{"type":45,"value":404},{"type":40,"tag":204,"props":1730,"children":1731},{"style":217},[1732],{"type":45,"value":671},{"type":40,"tag":204,"props":1734,"children":1735},{"style":223},[1736],{"type":45,"value":241},{"type":40,"tag":204,"props":1738,"children":1739},{"style":217},[1740],{"type":45,"value":313},{"type":40,"tag":204,"props":1742,"children":1743},{"style":223},[1744],{"type":45,"value":404},{"type":40,"tag":204,"props":1746,"children":1747},{"style":223},[1748],{"type":45,"value":449},{"type":40,"tag":204,"props":1750,"children":1751},{"style":269},[1752],{"type":45,"value":1568},{"type":40,"tag":204,"props":1754,"children":1755},{"style":223},[1756],{"type":45,"value":266},{"type":40,"tag":204,"props":1758,"children":1759},{"style":217},[1760],{"type":45,"value":281},{"type":40,"tag":204,"props":1762,"children":1763},{"style":223},[1764],{"type":45,"value":286},{"type":40,"tag":55,"props":1766,"children":1767},{},[1768,1772,1773],{"type":40,"tag":114,"props":1769,"children":1770},{},[1771],{"type":45,"value":766},{"type":45,"value":768},{"type":40,"tag":770,"props":1774,"children":1776},{"href":772,"rel":1775},[774],[1777],{"type":45,"value":772},{"type":40,"tag":778,"props":1779,"children":1780},{},[],{"type":40,"tag":97,"props":1782,"children":1784},{"id":1783},"_3-use-components-for-related-resources",[1785],{"type":45,"value":1786},"3. Use Components for Related Resources",{"type":40,"tag":55,"props":1788,"children":1789},{},[1790,1794],{"type":40,"tag":114,"props":1791,"children":1792},{},[1793],{"type":45,"value":118},{"type":45,"value":1795},": ComponentResource classes group related resources into reusable, logical units. Without components, your resource graph is flat, making it hard to understand which resources belong together, reuse patterns across stacks, or reason about your infrastructure at a higher level.",{"type":40,"tag":55,"props":1797,"children":1798},{},[1799,1803],{"type":40,"tag":114,"props":1800,"children":1801},{},[1802],{"type":45,"value":143},{"type":45,"value":145},{"type":40,"tag":61,"props":1805,"children":1806},{},[1807,1812,1817],{"type":40,"tag":65,"props":1808,"children":1809},{},[1810],{"type":45,"value":1811},"Multiple related resources created at top level without grouping",{"type":40,"tag":65,"props":1813,"children":1814},{},[1815],{"type":45,"value":1816},"Repeated resource patterns across stacks that should be abstracted",{"type":40,"tag":65,"props":1818,"children":1819},{},[1820],{"type":45,"value":1821},"Hard to understand resource relationships from the Pulumi console",{"type":40,"tag":55,"props":1823,"children":1824},{},[1825,1829],{"type":40,"tag":114,"props":1826,"children":1827},{},[1828],{"type":45,"value":191},{"type":45,"value":145},{"type":40,"tag":194,"props":1831,"children":1833},{"className":196,"code":1832,"language":16,"meta":198,"style":198},"\u002F\u002F Flat structure - no logical grouping, hard to reuse\nconst bucket = new aws.s3.Bucket(\"app-bucket\");\nconst bucketPolicy = new aws.s3.BucketPolicy(\"app-bucket-policy\", {\n    bucket: bucket.id,\n    policy: policyDoc,\n});\nconst originAccessIdentity = new aws.cloudfront.OriginAccessIdentity(\"app-oai\");\nconst distribution = new aws.cloudfront.Distribution(\"app-cdn\", { \u002F* ... *\u002F });\n",[1834],{"type":40,"tag":104,"props":1835,"children":1836},{"__ignoreMap":198},[1837,1845,1909,1975,2002,2023,2038,2105],{"type":40,"tag":204,"props":1838,"children":1839},{"class":206,"line":207},[1840],{"type":40,"tag":204,"props":1841,"children":1842},{"style":348},[1843],{"type":45,"value":1844},"\u002F\u002F Flat structure - no logical grouping, hard to reuse\n",{"type":40,"tag":204,"props":1846,"children":1847},{"class":206,"line":289},[1848,1852,1856,1860,1864,1868,1872,1876,1880,1884,1888,1892,1897,1901,1905],{"type":40,"tag":204,"props":1849,"children":1850},{"style":211},[1851],{"type":45,"value":214},{"type":40,"tag":204,"props":1853,"children":1854},{"style":217},[1855],{"type":45,"value":220},{"type":40,"tag":204,"props":1857,"children":1858},{"style":223},[1859],{"type":45,"value":226},{"type":40,"tag":204,"props":1861,"children":1862},{"style":223},[1863],{"type":45,"value":231},{"type":40,"tag":204,"props":1865,"children":1866},{"style":217},[1867],{"type":45,"value":236},{"type":40,"tag":204,"props":1869,"children":1870},{"style":223},[1871],{"type":45,"value":241},{"type":40,"tag":204,"props":1873,"children":1874},{"style":217},[1875],{"type":45,"value":246},{"type":40,"tag":204,"props":1877,"children":1878},{"style":223},[1879],{"type":45,"value":241},{"type":40,"tag":204,"props":1881,"children":1882},{"style":253},[1883],{"type":45,"value":256},{"type":40,"tag":204,"props":1885,"children":1886},{"style":217},[1887],{"type":45,"value":261},{"type":40,"tag":204,"props":1889,"children":1890},{"style":223},[1891],{"type":45,"value":266},{"type":40,"tag":204,"props":1893,"children":1894},{"style":269},[1895],{"type":45,"value":1896},"app-bucket",{"type":40,"tag":204,"props":1898,"children":1899},{"style":223},[1900],{"type":45,"value":266},{"type":40,"tag":204,"props":1902,"children":1903},{"style":217},[1904],{"type":45,"value":281},{"type":40,"tag":204,"props":1906,"children":1907},{"style":223},[1908],{"type":45,"value":286},{"type":40,"tag":204,"props":1910,"children":1911},{"class":206,"line":299},[1912,1916,1921,1925,1929,1933,1937,1941,1945,1950,1954,1958,1963,1967,1971],{"type":40,"tag":204,"props":1913,"children":1914},{"style":211},[1915],{"type":45,"value":214},{"type":40,"tag":204,"props":1917,"children":1918},{"style":217},[1919],{"type":45,"value":1920}," bucketPolicy ",{"type":40,"tag":204,"props":1922,"children":1923},{"style":223},[1924],{"type":45,"value":226},{"type":40,"tag":204,"props":1926,"children":1927},{"style":223},[1928],{"type":45,"value":231},{"type":40,"tag":204,"props":1930,"children":1931},{"style":217},[1932],{"type":45,"value":236},{"type":40,"tag":204,"props":1934,"children":1935},{"style":223},[1936],{"type":45,"value":241},{"type":40,"tag":204,"props":1938,"children":1939},{"style":217},[1940],{"type":45,"value":246},{"type":40,"tag":204,"props":1942,"children":1943},{"style":223},[1944],{"type":45,"value":241},{"type":40,"tag":204,"props":1946,"children":1947},{"style":253},[1948],{"type":45,"value":1949},"BucketPolicy",{"type":40,"tag":204,"props":1951,"children":1952},{"style":217},[1953],{"type":45,"value":261},{"type":40,"tag":204,"props":1955,"children":1956},{"style":223},[1957],{"type":45,"value":266},{"type":40,"tag":204,"props":1959,"children":1960},{"style":269},[1961],{"type":45,"value":1962},"app-bucket-policy",{"type":40,"tag":204,"props":1964,"children":1965},{"style":223},[1966],{"type":45,"value":266},{"type":40,"tag":204,"props":1968,"children":1969},{"style":223},[1970],{"type":45,"value":404},{"type":40,"tag":204,"props":1972,"children":1973},{"style":223},[1974],{"type":45,"value":342},{"type":40,"tag":204,"props":1976,"children":1977},{"class":206,"line":27},[1978,1982,1986,1990,1994,1998],{"type":40,"tag":204,"props":1979,"children":1980},{"style":384},[1981],{"type":45,"value":662},{"type":40,"tag":204,"props":1983,"children":1984},{"style":223},[1985],{"type":45,"value":145},{"type":40,"tag":204,"props":1987,"children":1988},{"style":217},[1989],{"type":45,"value":671},{"type":40,"tag":204,"props":1991,"children":1992},{"style":223},[1993],{"type":45,"value":241},{"type":40,"tag":204,"props":1995,"children":1996},{"style":217},[1997],{"type":45,"value":313},{"type":40,"tag":204,"props":1999,"children":2000},{"style":223},[2001],{"type":45,"value":431},{"type":40,"tag":204,"props":2003,"children":2004},{"class":206,"line":354},[2005,2010,2014,2019],{"type":40,"tag":204,"props":2006,"children":2007},{"style":384},[2008],{"type":45,"value":2009},"    policy",{"type":40,"tag":204,"props":2011,"children":2012},{"style":223},[2013],{"type":45,"value":145},{"type":40,"tag":204,"props":2015,"children":2016},{"style":217},[2017],{"type":45,"value":2018}," policyDoc",{"type":40,"tag":204,"props":2020,"children":2021},{"style":223},[2022],{"type":45,"value":431},{"type":40,"tag":204,"props":2024,"children":2025},{"class":206,"line":411},[2026,2030,2034],{"type":40,"tag":204,"props":2027,"children":2028},{"style":223},[2029],{"type":45,"value":488},{"type":40,"tag":204,"props":2031,"children":2032},{"style":217},[2033],{"type":45,"value":281},{"type":40,"tag":204,"props":2035,"children":2036},{"style":223},[2037],{"type":45,"value":286},{"type":40,"tag":204,"props":2039,"children":2040},{"class":206,"line":434},[2041,2045,2050,2054,2058,2062,2066,2071,2075,2080,2084,2088,2093,2097,2101],{"type":40,"tag":204,"props":2042,"children":2043},{"style":211},[2044],{"type":45,"value":214},{"type":40,"tag":204,"props":2046,"children":2047},{"style":217},[2048],{"type":45,"value":2049}," originAccessIdentity ",{"type":40,"tag":204,"props":2051,"children":2052},{"style":223},[2053],{"type":45,"value":226},{"type":40,"tag":204,"props":2055,"children":2056},{"style":223},[2057],{"type":45,"value":231},{"type":40,"tag":204,"props":2059,"children":2060},{"style":217},[2061],{"type":45,"value":236},{"type":40,"tag":204,"props":2063,"children":2064},{"style":223},[2065],{"type":45,"value":241},{"type":40,"tag":204,"props":2067,"children":2068},{"style":217},[2069],{"type":45,"value":2070},"cloudfront",{"type":40,"tag":204,"props":2072,"children":2073},{"style":223},[2074],{"type":45,"value":241},{"type":40,"tag":204,"props":2076,"children":2077},{"style":253},[2078],{"type":45,"value":2079},"OriginAccessIdentity",{"type":40,"tag":204,"props":2081,"children":2082},{"style":217},[2083],{"type":45,"value":261},{"type":40,"tag":204,"props":2085,"children":2086},{"style":223},[2087],{"type":45,"value":266},{"type":40,"tag":204,"props":2089,"children":2090},{"style":269},[2091],{"type":45,"value":2092},"app-oai",{"type":40,"tag":204,"props":2094,"children":2095},{"style":223},[2096],{"type":45,"value":266},{"type":40,"tag":204,"props":2098,"children":2099},{"style":217},[2100],{"type":45,"value":281},{"type":40,"tag":204,"props":2102,"children":2103},{"style":223},[2104],{"type":45,"value":286},{"type":40,"tag":204,"props":2106,"children":2107},{"class":206,"line":465},[2108,2112,2117,2121,2125,2129,2133,2137,2141,2146,2150,2154,2159,2163,2167,2171,2176,2180,2184],{"type":40,"tag":204,"props":2109,"children":2110},{"style":211},[2111],{"type":45,"value":214},{"type":40,"tag":204,"props":2113,"children":2114},{"style":217},[2115],{"type":45,"value":2116}," distribution ",{"type":40,"tag":204,"props":2118,"children":2119},{"style":223},[2120],{"type":45,"value":226},{"type":40,"tag":204,"props":2122,"children":2123},{"style":223},[2124],{"type":45,"value":231},{"type":40,"tag":204,"props":2126,"children":2127},{"style":217},[2128],{"type":45,"value":236},{"type":40,"tag":204,"props":2130,"children":2131},{"style":223},[2132],{"type":45,"value":241},{"type":40,"tag":204,"props":2134,"children":2135},{"style":217},[2136],{"type":45,"value":2070},{"type":40,"tag":204,"props":2138,"children":2139},{"style":223},[2140],{"type":45,"value":241},{"type":40,"tag":204,"props":2142,"children":2143},{"style":253},[2144],{"type":45,"value":2145},"Distribution",{"type":40,"tag":204,"props":2147,"children":2148},{"style":217},[2149],{"type":45,"value":261},{"type":40,"tag":204,"props":2151,"children":2152},{"style":223},[2153],{"type":45,"value":266},{"type":40,"tag":204,"props":2155,"children":2156},{"style":269},[2157],{"type":45,"value":2158},"app-cdn",{"type":40,"tag":204,"props":2160,"children":2161},{"style":223},[2162],{"type":45,"value":266},{"type":40,"tag":204,"props":2164,"children":2165},{"style":223},[2166],{"type":45,"value":404},{"type":40,"tag":204,"props":2168,"children":2169},{"style":223},[2170],{"type":45,"value":923},{"type":40,"tag":204,"props":2172,"children":2173},{"style":348},[2174],{"type":45,"value":2175}," \u002F* ... *\u002F",{"type":40,"tag":204,"props":2177,"children":2178},{"style":223},[2179],{"type":45,"value":950},{"type":40,"tag":204,"props":2181,"children":2182},{"style":217},[2183],{"type":45,"value":281},{"type":40,"tag":204,"props":2185,"children":2186},{"style":223},[2187],{"type":45,"value":286},{"type":40,"tag":55,"props":2189,"children":2190},{},[2191,2195],{"type":40,"tag":114,"props":2192,"children":2193},{},[2194],{"type":45,"value":504},{"type":45,"value":145},{"type":40,"tag":194,"props":2197,"children":2199},{"className":196,"code":2198,"language":16,"meta":198,"style":198},"interface StaticSiteArgs {\n    domain: string;\n    content: pulumi.asset.AssetArchive;\n}\n\nclass StaticSite extends pulumi.ComponentResource {\n    public readonly url: pulumi.Output\u003Cstring>;\n\n    constructor(name: string, args: StaticSiteArgs, opts?: pulumi.ComponentResourceOptions) {\n        super(\"myorg:components:StaticSite\", name, args, opts);\n\n        \u002F\u002F Resources created here - see practice 4 for parent setup\n        const bucket = new aws.s3.Bucket(`${name}-bucket`, {}, { parent: this });\n        \u002F\u002F ...\n\n        this.url = distribution.domainName;\n        this.registerOutputs({ url: this.url });\n    }\n}\n\n\u002F\u002F Reusable across stacks\nconst site = new StaticSite(\"marketing\", {\n    domain: \"marketing.example.com\",\n    content: new pulumi.asset.FileArchive(\".\u002Fdist\"),\n});\n",[2200],{"type":40,"tag":104,"props":2201,"children":2202},{"__ignoreMap":198},[2203,2220,2240,2277,2285,2292,2327,2377,2384,2461,2519,2527,2536,2642,2651,2659,2695,2746,2755,2763,2771,2780,2830,2859,2921],{"type":40,"tag":204,"props":2204,"children":2205},{"class":206,"line":207},[2206,2211,2216],{"type":40,"tag":204,"props":2207,"children":2208},{"style":211},[2209],{"type":45,"value":2210},"interface",{"type":40,"tag":204,"props":2212,"children":2213},{"style":993},[2214],{"type":45,"value":2215}," StaticSiteArgs",{"type":40,"tag":204,"props":2217,"children":2218},{"style":223},[2219],{"type":45,"value":342},{"type":40,"tag":204,"props":2221,"children":2222},{"class":206,"line":289},[2223,2228,2232,2236],{"type":40,"tag":204,"props":2224,"children":2225},{"style":384},[2226],{"type":45,"value":2227},"    domain",{"type":40,"tag":204,"props":2229,"children":2230},{"style":223},[2231],{"type":45,"value":145},{"type":40,"tag":204,"props":2233,"children":2234},{"style":993},[2235],{"type":45,"value":996},{"type":40,"tag":204,"props":2237,"children":2238},{"style":223},[2239],{"type":45,"value":286},{"type":40,"tag":204,"props":2241,"children":2242},{"class":206,"line":299},[2243,2247,2251,2255,2259,2264,2268,2273],{"type":40,"tag":204,"props":2244,"children":2245},{"style":384},[2246],{"type":45,"value":696},{"type":40,"tag":204,"props":2248,"children":2249},{"style":223},[2250],{"type":45,"value":145},{"type":40,"tag":204,"props":2252,"children":2253},{"style":993},[2254],{"type":45,"value":1616},{"type":40,"tag":204,"props":2256,"children":2257},{"style":223},[2258],{"type":45,"value":241},{"type":40,"tag":204,"props":2260,"children":2261},{"style":993},[2262],{"type":45,"value":2263},"asset",{"type":40,"tag":204,"props":2265,"children":2266},{"style":223},[2267],{"type":45,"value":241},{"type":40,"tag":204,"props":2269,"children":2270},{"style":993},[2271],{"type":45,"value":2272},"AssetArchive",{"type":40,"tag":204,"props":2274,"children":2275},{"style":223},[2276],{"type":45,"value":286},{"type":40,"tag":204,"props":2278,"children":2279},{"class":206,"line":27},[2280],{"type":40,"tag":204,"props":2281,"children":2282},{"style":223},[2283],{"type":45,"value":2284},"}\n",{"type":40,"tag":204,"props":2286,"children":2287},{"class":206,"line":354},[2288],{"type":40,"tag":204,"props":2289,"children":2290},{"emptyLinePlaceholder":293},[2291],{"type":45,"value":296},{"type":40,"tag":204,"props":2293,"children":2294},{"class":206,"line":411},[2295,2300,2305,2310,2314,2318,2323],{"type":40,"tag":204,"props":2296,"children":2297},{"style":211},[2298],{"type":45,"value":2299},"class",{"type":40,"tag":204,"props":2301,"children":2302},{"style":993},[2303],{"type":45,"value":2304}," StaticSite",{"type":40,"tag":204,"props":2306,"children":2307},{"style":211},[2308],{"type":45,"value":2309}," extends",{"type":40,"tag":204,"props":2311,"children":2312},{"style":993},[2313],{"type":45,"value":1616},{"type":40,"tag":204,"props":2315,"children":2316},{"style":223},[2317],{"type":45,"value":241},{"type":40,"tag":204,"props":2319,"children":2320},{"style":993},[2321],{"type":45,"value":2322},"ComponentResource",{"type":40,"tag":204,"props":2324,"children":2325},{"style":223},[2326],{"type":45,"value":342},{"type":40,"tag":204,"props":2328,"children":2329},{"class":206,"line":434},[2330,2335,2340,2345,2349,2353,2357,2362,2367,2372],{"type":40,"tag":204,"props":2331,"children":2332},{"style":211},[2333],{"type":45,"value":2334},"    public",{"type":40,"tag":204,"props":2336,"children":2337},{"style":211},[2338],{"type":45,"value":2339}," readonly",{"type":40,"tag":204,"props":2341,"children":2342},{"style":384},[2343],{"type":45,"value":2344}," url",{"type":40,"tag":204,"props":2346,"children":2347},{"style":223},[2348],{"type":45,"value":145},{"type":40,"tag":204,"props":2350,"children":2351},{"style":993},[2352],{"type":45,"value":1616},{"type":40,"tag":204,"props":2354,"children":2355},{"style":223},[2356],{"type":45,"value":241},{"type":40,"tag":204,"props":2358,"children":2359},{"style":993},[2360],{"type":45,"value":2361},"Output",{"type":40,"tag":204,"props":2363,"children":2364},{"style":223},[2365],{"type":45,"value":2366},"\u003C",{"type":40,"tag":204,"props":2368,"children":2369},{"style":993},[2370],{"type":45,"value":2371},"string",{"type":40,"tag":204,"props":2373,"children":2374},{"style":223},[2375],{"type":45,"value":2376},">;\n",{"type":40,"tag":204,"props":2378,"children":2379},{"class":206,"line":465},[2380],{"type":40,"tag":204,"props":2381,"children":2382},{"emptyLinePlaceholder":293},[2383],{"type":45,"value":296},{"type":40,"tag":204,"props":2385,"children":2386},{"class":206,"line":482},[2387,2392,2396,2401,2405,2409,2413,2418,2422,2426,2430,2435,2440,2444,2448,2453,2457],{"type":40,"tag":204,"props":2388,"children":2389},{"style":211},[2390],{"type":45,"value":2391},"    constructor",{"type":40,"tag":204,"props":2393,"children":2394},{"style":223},[2395],{"type":45,"value":261},{"type":40,"tag":204,"props":2397,"children":2398},{"style":329},[2399],{"type":45,"value":2400},"name",{"type":40,"tag":204,"props":2402,"children":2403},{"style":223},[2404],{"type":45,"value":145},{"type":40,"tag":204,"props":2406,"children":2407},{"style":993},[2408],{"type":45,"value":996},{"type":40,"tag":204,"props":2410,"children":2411},{"style":223},[2412],{"type":45,"value":404},{"type":40,"tag":204,"props":2414,"children":2415},{"style":329},[2416],{"type":45,"value":2417}," args",{"type":40,"tag":204,"props":2419,"children":2420},{"style":223},[2421],{"type":45,"value":145},{"type":40,"tag":204,"props":2423,"children":2424},{"style":993},[2425],{"type":45,"value":2215},{"type":40,"tag":204,"props":2427,"children":2428},{"style":223},[2429],{"type":45,"value":404},{"type":40,"tag":204,"props":2431,"children":2432},{"style":329},[2433],{"type":45,"value":2434}," opts",{"type":40,"tag":204,"props":2436,"children":2437},{"style":223},[2438],{"type":45,"value":2439},"?:",{"type":40,"tag":204,"props":2441,"children":2442},{"style":993},[2443],{"type":45,"value":1616},{"type":40,"tag":204,"props":2445,"children":2446},{"style":223},[2447],{"type":45,"value":241},{"type":40,"tag":204,"props":2449,"children":2450},{"style":993},[2451],{"type":45,"value":2452},"ComponentResourceOptions",{"type":40,"tag":204,"props":2454,"children":2455},{"style":223},[2456],{"type":45,"value":281},{"type":40,"tag":204,"props":2458,"children":2459},{"style":223},[2460],{"type":45,"value":342},{"type":40,"tag":204,"props":2462,"children":2463},{"class":206,"line":1200},[2464,2469,2473,2477,2482,2486,2490,2495,2499,2503,2507,2511,2515],{"type":40,"tag":204,"props":2465,"children":2466},{"style":217},[2467],{"type":45,"value":2468},"        super",{"type":40,"tag":204,"props":2470,"children":2471},{"style":384},[2472],{"type":45,"value":261},{"type":40,"tag":204,"props":2474,"children":2475},{"style":223},[2476],{"type":45,"value":266},{"type":40,"tag":204,"props":2478,"children":2479},{"style":269},[2480],{"type":45,"value":2481},"myorg:components:StaticSite",{"type":40,"tag":204,"props":2483,"children":2484},{"style":223},[2485],{"type":45,"value":266},{"type":40,"tag":204,"props":2487,"children":2488},{"style":223},[2489],{"type":45,"value":404},{"type":40,"tag":204,"props":2491,"children":2492},{"style":217},[2493],{"type":45,"value":2494}," name",{"type":40,"tag":204,"props":2496,"children":2497},{"style":223},[2498],{"type":45,"value":404},{"type":40,"tag":204,"props":2500,"children":2501},{"style":217},[2502],{"type":45,"value":2417},{"type":40,"tag":204,"props":2504,"children":2505},{"style":223},[2506],{"type":45,"value":404},{"type":40,"tag":204,"props":2508,"children":2509},{"style":217},[2510],{"type":45,"value":2434},{"type":40,"tag":204,"props":2512,"children":2513},{"style":384},[2514],{"type":45,"value":281},{"type":40,"tag":204,"props":2516,"children":2517},{"style":223},[2518],{"type":45,"value":286},{"type":40,"tag":204,"props":2520,"children":2522},{"class":206,"line":2521},11,[2523],{"type":40,"tag":204,"props":2524,"children":2525},{"emptyLinePlaceholder":293},[2526],{"type":45,"value":296},{"type":40,"tag":204,"props":2528,"children":2530},{"class":206,"line":2529},12,[2531],{"type":40,"tag":204,"props":2532,"children":2533},{"style":348},[2534],{"type":45,"value":2535},"        \u002F\u002F Resources created here - see practice 4 for parent setup\n",{"type":40,"tag":204,"props":2537,"children":2539},{"class":206,"line":2538},13,[2540,2545,2549,2553,2557,2561,2565,2569,2573,2577,2581,2586,2590,2594,2599,2603,2607,2612,2616,2621,2625,2630,2634,2638],{"type":40,"tag":204,"props":2541,"children":2542},{"style":211},[2543],{"type":45,"value":2544},"        const",{"type":40,"tag":204,"props":2546,"children":2547},{"style":217},[2548],{"type":45,"value":671},{"type":40,"tag":204,"props":2550,"children":2551},{"style":223},[2552],{"type":45,"value":1048},{"type":40,"tag":204,"props":2554,"children":2555},{"style":223},[2556],{"type":45,"value":231},{"type":40,"tag":204,"props":2558,"children":2559},{"style":217},[2560],{"type":45,"value":236},{"type":40,"tag":204,"props":2562,"children":2563},{"style":223},[2564],{"type":45,"value":241},{"type":40,"tag":204,"props":2566,"children":2567},{"style":217},[2568],{"type":45,"value":246},{"type":40,"tag":204,"props":2570,"children":2571},{"style":223},[2572],{"type":45,"value":241},{"type":40,"tag":204,"props":2574,"children":2575},{"style":253},[2576],{"type":45,"value":256},{"type":40,"tag":204,"props":2578,"children":2579},{"style":384},[2580],{"type":45,"value":261},{"type":40,"tag":204,"props":2582,"children":2583},{"style":223},[2584],{"type":45,"value":2585},"`${",{"type":40,"tag":204,"props":2587,"children":2588},{"style":217},[2589],{"type":45,"value":2400},{"type":40,"tag":204,"props":2591,"children":2592},{"style":223},[2593],{"type":45,"value":488},{"type":40,"tag":204,"props":2595,"children":2596},{"style":269},[2597],{"type":45,"value":2598},"-bucket",{"type":40,"tag":204,"props":2600,"children":2601},{"style":223},[2602],{"type":45,"value":1573},{"type":40,"tag":204,"props":2604,"children":2605},{"style":223},[2606],{"type":45,"value":404},{"type":40,"tag":204,"props":2608,"children":2609},{"style":223},[2610],{"type":45,"value":2611}," {},",{"type":40,"tag":204,"props":2613,"children":2614},{"style":223},[2615],{"type":45,"value":923},{"type":40,"tag":204,"props":2617,"children":2618},{"style":384},[2619],{"type":45,"value":2620}," parent",{"type":40,"tag":204,"props":2622,"children":2623},{"style":223},[2624],{"type":45,"value":145},{"type":40,"tag":204,"props":2626,"children":2627},{"style":223},[2628],{"type":45,"value":2629}," this",{"type":40,"tag":204,"props":2631,"children":2632},{"style":223},[2633],{"type":45,"value":950},{"type":40,"tag":204,"props":2635,"children":2636},{"style":384},[2637],{"type":45,"value":281},{"type":40,"tag":204,"props":2639,"children":2640},{"style":223},[2641],{"type":45,"value":286},{"type":40,"tag":204,"props":2643,"children":2645},{"class":206,"line":2644},14,[2646],{"type":40,"tag":204,"props":2647,"children":2648},{"style":348},[2649],{"type":45,"value":2650},"        \u002F\u002F ...\n",{"type":40,"tag":204,"props":2652,"children":2654},{"class":206,"line":2653},15,[2655],{"type":40,"tag":204,"props":2656,"children":2657},{"emptyLinePlaceholder":293},[2658],{"type":45,"value":296},{"type":40,"tag":204,"props":2660,"children":2662},{"class":206,"line":2661},16,[2663,2668,2673,2677,2682,2686,2691],{"type":40,"tag":204,"props":2664,"children":2665},{"style":223},[2666],{"type":45,"value":2667},"        this.",{"type":40,"tag":204,"props":2669,"children":2670},{"style":217},[2671],{"type":45,"value":2672},"url",{"type":40,"tag":204,"props":2674,"children":2675},{"style":223},[2676],{"type":45,"value":1048},{"type":40,"tag":204,"props":2678,"children":2679},{"style":217},[2680],{"type":45,"value":2681}," distribution",{"type":40,"tag":204,"props":2683,"children":2684},{"style":223},[2685],{"type":45,"value":241},{"type":40,"tag":204,"props":2687,"children":2688},{"style":217},[2689],{"type":45,"value":2690},"domainName",{"type":40,"tag":204,"props":2692,"children":2693},{"style":223},[2694],{"type":45,"value":286},{"type":40,"tag":204,"props":2696,"children":2698},{"class":206,"line":2697},17,[2699,2703,2708,2712,2717,2721,2725,2730,2734,2738,2742],{"type":40,"tag":204,"props":2700,"children":2701},{"style":223},[2702],{"type":45,"value":2667},{"type":40,"tag":204,"props":2704,"children":2705},{"style":253},[2706],{"type":45,"value":2707},"registerOutputs",{"type":40,"tag":204,"props":2709,"children":2710},{"style":384},[2711],{"type":45,"value":261},{"type":40,"tag":204,"props":2713,"children":2714},{"style":223},[2715],{"type":45,"value":2716},"{",{"type":40,"tag":204,"props":2718,"children":2719},{"style":384},[2720],{"type":45,"value":2344},{"type":40,"tag":204,"props":2722,"children":2723},{"style":223},[2724],{"type":45,"value":145},{"type":40,"tag":204,"props":2726,"children":2727},{"style":223},[2728],{"type":45,"value":2729}," this.",{"type":40,"tag":204,"props":2731,"children":2732},{"style":217},[2733],{"type":45,"value":2672},{"type":40,"tag":204,"props":2735,"children":2736},{"style":223},[2737],{"type":45,"value":950},{"type":40,"tag":204,"props":2739,"children":2740},{"style":384},[2741],{"type":45,"value":281},{"type":40,"tag":204,"props":2743,"children":2744},{"style":223},[2745],{"type":45,"value":286},{"type":40,"tag":204,"props":2747,"children":2749},{"class":206,"line":2748},18,[2750],{"type":40,"tag":204,"props":2751,"children":2752},{"style":223},[2753],{"type":45,"value":2754},"    }\n",{"type":40,"tag":204,"props":2756,"children":2758},{"class":206,"line":2757},19,[2759],{"type":40,"tag":204,"props":2760,"children":2761},{"style":223},[2762],{"type":45,"value":2284},{"type":40,"tag":204,"props":2764,"children":2766},{"class":206,"line":2765},20,[2767],{"type":40,"tag":204,"props":2768,"children":2769},{"emptyLinePlaceholder":293},[2770],{"type":45,"value":296},{"type":40,"tag":204,"props":2772,"children":2774},{"class":206,"line":2773},21,[2775],{"type":40,"tag":204,"props":2776,"children":2777},{"style":348},[2778],{"type":45,"value":2779},"\u002F\u002F Reusable across stacks\n",{"type":40,"tag":204,"props":2781,"children":2783},{"class":206,"line":2782},22,[2784,2788,2793,2797,2801,2805,2809,2813,2818,2822,2826],{"type":40,"tag":204,"props":2785,"children":2786},{"style":211},[2787],{"type":45,"value":214},{"type":40,"tag":204,"props":2789,"children":2790},{"style":217},[2791],{"type":45,"value":2792}," site ",{"type":40,"tag":204,"props":2794,"children":2795},{"style":223},[2796],{"type":45,"value":226},{"type":40,"tag":204,"props":2798,"children":2799},{"style":223},[2800],{"type":45,"value":231},{"type":40,"tag":204,"props":2802,"children":2803},{"style":253},[2804],{"type":45,"value":2304},{"type":40,"tag":204,"props":2806,"children":2807},{"style":217},[2808],{"type":45,"value":261},{"type":40,"tag":204,"props":2810,"children":2811},{"style":223},[2812],{"type":45,"value":266},{"type":40,"tag":204,"props":2814,"children":2815},{"style":269},[2816],{"type":45,"value":2817},"marketing",{"type":40,"tag":204,"props":2819,"children":2820},{"style":223},[2821],{"type":45,"value":266},{"type":40,"tag":204,"props":2823,"children":2824},{"style":223},[2825],{"type":45,"value":404},{"type":40,"tag":204,"props":2827,"children":2828},{"style":223},[2829],{"type":45,"value":342},{"type":40,"tag":204,"props":2831,"children":2833},{"class":206,"line":2832},23,[2834,2838,2842,2846,2851,2855],{"type":40,"tag":204,"props":2835,"children":2836},{"style":384},[2837],{"type":45,"value":2227},{"type":40,"tag":204,"props":2839,"children":2840},{"style":223},[2841],{"type":45,"value":145},{"type":40,"tag":204,"props":2843,"children":2844},{"style":223},[2845],{"type":45,"value":449},{"type":40,"tag":204,"props":2847,"children":2848},{"style":269},[2849],{"type":45,"value":2850},"marketing.example.com",{"type":40,"tag":204,"props":2852,"children":2853},{"style":223},[2854],{"type":45,"value":266},{"type":40,"tag":204,"props":2856,"children":2857},{"style":223},[2858],{"type":45,"value":431},{"type":40,"tag":204,"props":2860,"children":2862},{"class":206,"line":2861},24,[2863,2867,2871,2875,2879,2883,2887,2891,2896,2900,2904,2909,2913,2917],{"type":40,"tag":204,"props":2864,"children":2865},{"style":384},[2866],{"type":45,"value":696},{"type":40,"tag":204,"props":2868,"children":2869},{"style":223},[2870],{"type":45,"value":145},{"type":40,"tag":204,"props":2872,"children":2873},{"style":223},[2874],{"type":45,"value":231},{"type":40,"tag":204,"props":2876,"children":2877},{"style":217},[2878],{"type":45,"value":1616},{"type":40,"tag":204,"props":2880,"children":2881},{"style":223},[2882],{"type":45,"value":241},{"type":40,"tag":204,"props":2884,"children":2885},{"style":217},[2886],{"type":45,"value":2263},{"type":40,"tag":204,"props":2888,"children":2889},{"style":223},[2890],{"type":45,"value":241},{"type":40,"tag":204,"props":2892,"children":2893},{"style":253},[2894],{"type":45,"value":2895},"FileArchive",{"type":40,"tag":204,"props":2897,"children":2898},{"style":217},[2899],{"type":45,"value":261},{"type":40,"tag":204,"props":2901,"children":2902},{"style":223},[2903],{"type":45,"value":266},{"type":40,"tag":204,"props":2905,"children":2906},{"style":269},[2907],{"type":45,"value":2908},".\u002Fdist",{"type":40,"tag":204,"props":2910,"children":2911},{"style":223},[2912],{"type":45,"value":266},{"type":40,"tag":204,"props":2914,"children":2915},{"style":217},[2916],{"type":45,"value":281},{"type":40,"tag":204,"props":2918,"children":2919},{"style":223},[2920],{"type":45,"value":431},{"type":40,"tag":204,"props":2922,"children":2924},{"class":206,"line":2923},25,[2925,2929,2933],{"type":40,"tag":204,"props":2926,"children":2927},{"style":223},[2928],{"type":45,"value":488},{"type":40,"tag":204,"props":2930,"children":2931},{"style":217},[2932],{"type":45,"value":281},{"type":40,"tag":204,"props":2934,"children":2935},{"style":223},[2936],{"type":45,"value":286},{"type":40,"tag":55,"props":2938,"children":2939},{},[2940,2945],{"type":40,"tag":114,"props":2941,"children":2942},{},[2943],{"type":45,"value":2944},"Component best practices",{"type":45,"value":145},{"type":40,"tag":61,"props":2947,"children":2948},{},[2949,2960,2973,2978],{"type":40,"tag":65,"props":2950,"children":2951},{},[2952,2954],{"type":45,"value":2953},"Use a consistent type URN pattern: ",{"type":40,"tag":104,"props":2955,"children":2957},{"className":2956},[],[2958],{"type":45,"value":2959},"organization:module:ComponentName",{"type":40,"tag":65,"props":2961,"children":2962},{},[2963,2965,2971],{"type":45,"value":2964},"Call ",{"type":40,"tag":104,"props":2966,"children":2968},{"className":2967},[],[2969],{"type":45,"value":2970},"registerOutputs()",{"type":45,"value":2972}," at the end of the constructor",{"type":40,"tag":65,"props":2974,"children":2975},{},[2976],{"type":45,"value":2977},"Expose outputs as class properties for consumers",{"type":40,"tag":65,"props":2979,"children":2980},{},[2981,2983,2988],{"type":45,"value":2982},"Accept ",{"type":40,"tag":104,"props":2984,"children":2986},{"className":2985},[],[2987],{"type":45,"value":2452},{"type":45,"value":2989}," to allow callers to set providers, aliases, etc.",{"type":40,"tag":55,"props":2991,"children":2992},{},[2993,2995,3001],{"type":45,"value":2994},"For in-depth component authoring guidance (args design, multi-language support, testing, distribution), use skill ",{"type":40,"tag":104,"props":2996,"children":2998},{"className":2997},[],[2999],{"type":45,"value":3000},"pulumi-component",{"type":45,"value":241},{"type":40,"tag":55,"props":3003,"children":3004},{},[3005,3009,3010],{"type":40,"tag":114,"props":3006,"children":3007},{},[3008],{"type":45,"value":766},{"type":45,"value":768},{"type":40,"tag":770,"props":3011,"children":3014},{"href":3012,"rel":3013},"https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fconcepts\u002Fresources\u002Fcomponents\u002F",[774],[3015],{"type":45,"value":3012},{"type":40,"tag":778,"props":3017,"children":3018},{},[],{"type":40,"tag":97,"props":3020,"children":3022},{"id":3021},"_4-always-set-parent-this-in-components",[3023,3025,3031],{"type":45,"value":3024},"4. Always Set ",{"type":40,"tag":104,"props":3026,"children":3028},{"className":3027},[],[3029],{"type":45,"value":3030},"parent: this",{"type":45,"value":3032}," in Components",{"type":40,"tag":55,"props":3034,"children":3035},{},[3036,3040,3042,3047],{"type":40,"tag":114,"props":3037,"children":3038},{},[3039],{"type":45,"value":118},{"type":45,"value":3041},": When you create resources inside a ComponentResource without setting ",{"type":40,"tag":104,"props":3043,"children":3045},{"className":3044},[],[3046],{"type":45,"value":3030},{"type":45,"value":3048},", those resources appear at the root level of your stack's state. This breaks the logical hierarchy, makes the Pulumi console hard to navigate, and can cause issues with aliases and refactoring. The parent relationship is what makes the component actually group its children.",{"type":40,"tag":55,"props":3050,"children":3051},{},[3052,3056],{"type":40,"tag":114,"props":3053,"children":3054},{},[3055],{"type":45,"value":143},{"type":45,"value":145},{"type":40,"tag":61,"props":3058,"children":3059},{},[3060,3073,3078],{"type":40,"tag":65,"props":3061,"children":3062},{},[3063,3065,3071],{"type":45,"value":3064},"ComponentResource classes that don't pass ",{"type":40,"tag":104,"props":3066,"children":3068},{"className":3067},[],[3069],{"type":45,"value":3070},"{ parent: this }",{"type":45,"value":3072}," to child resources",{"type":40,"tag":65,"props":3074,"children":3075},{},[3076],{"type":45,"value":3077},"Resources inside a component appearing at root level in the console",{"type":40,"tag":65,"props":3079,"children":3080},{},[3081],{"type":45,"value":3082},"Unexpected behavior when adding aliases to components",{"type":40,"tag":55,"props":3084,"children":3085},{},[3086,3090],{"type":40,"tag":114,"props":3087,"children":3088},{},[3089],{"type":45,"value":191},{"type":45,"value":145},{"type":40,"tag":194,"props":3092,"children":3094},{"className":196,"code":3093,"language":16,"meta":198,"style":198},"class MyComponent extends pulumi.ComponentResource {\n    constructor(name: string, opts?: pulumi.ComponentResourceOptions) {\n        super(\"myorg:components:MyComponent\", name, {}, opts);\n\n        \u002F\u002F WRONG: No parent set - this bucket appears at root level\n        const bucket = new aws.s3.Bucket(`${name}-bucket`);\n    }\n}\n",[3095],{"type":40,"tag":104,"props":3096,"children":3097},{"__ignoreMap":198},[3098,3130,3185,3237,3244,3252,3323,3330],{"type":40,"tag":204,"props":3099,"children":3100},{"class":206,"line":207},[3101,3105,3110,3114,3118,3122,3126],{"type":40,"tag":204,"props":3102,"children":3103},{"style":211},[3104],{"type":45,"value":2299},{"type":40,"tag":204,"props":3106,"children":3107},{"style":993},[3108],{"type":45,"value":3109}," MyComponent",{"type":40,"tag":204,"props":3111,"children":3112},{"style":211},[3113],{"type":45,"value":2309},{"type":40,"tag":204,"props":3115,"children":3116},{"style":993},[3117],{"type":45,"value":1616},{"type":40,"tag":204,"props":3119,"children":3120},{"style":223},[3121],{"type":45,"value":241},{"type":40,"tag":204,"props":3123,"children":3124},{"style":993},[3125],{"type":45,"value":2322},{"type":40,"tag":204,"props":3127,"children":3128},{"style":223},[3129],{"type":45,"value":342},{"type":40,"tag":204,"props":3131,"children":3132},{"class":206,"line":289},[3133,3137,3141,3145,3149,3153,3157,3161,3165,3169,3173,3177,3181],{"type":40,"tag":204,"props":3134,"children":3135},{"style":211},[3136],{"type":45,"value":2391},{"type":40,"tag":204,"props":3138,"children":3139},{"style":223},[3140],{"type":45,"value":261},{"type":40,"tag":204,"props":3142,"children":3143},{"style":329},[3144],{"type":45,"value":2400},{"type":40,"tag":204,"props":3146,"children":3147},{"style":223},[3148],{"type":45,"value":145},{"type":40,"tag":204,"props":3150,"children":3151},{"style":993},[3152],{"type":45,"value":996},{"type":40,"tag":204,"props":3154,"children":3155},{"style":223},[3156],{"type":45,"value":404},{"type":40,"tag":204,"props":3158,"children":3159},{"style":329},[3160],{"type":45,"value":2434},{"type":40,"tag":204,"props":3162,"children":3163},{"style":223},[3164],{"type":45,"value":2439},{"type":40,"tag":204,"props":3166,"children":3167},{"style":993},[3168],{"type":45,"value":1616},{"type":40,"tag":204,"props":3170,"children":3171},{"style":223},[3172],{"type":45,"value":241},{"type":40,"tag":204,"props":3174,"children":3175},{"style":993},[3176],{"type":45,"value":2452},{"type":40,"tag":204,"props":3178,"children":3179},{"style":223},[3180],{"type":45,"value":281},{"type":40,"tag":204,"props":3182,"children":3183},{"style":223},[3184],{"type":45,"value":342},{"type":40,"tag":204,"props":3186,"children":3187},{"class":206,"line":299},[3188,3192,3196,3200,3205,3209,3213,3217,3221,3225,3229,3233],{"type":40,"tag":204,"props":3189,"children":3190},{"style":217},[3191],{"type":45,"value":2468},{"type":40,"tag":204,"props":3193,"children":3194},{"style":384},[3195],{"type":45,"value":261},{"type":40,"tag":204,"props":3197,"children":3198},{"style":223},[3199],{"type":45,"value":266},{"type":40,"tag":204,"props":3201,"children":3202},{"style":269},[3203],{"type":45,"value":3204},"myorg:components:MyComponent",{"type":40,"tag":204,"props":3206,"children":3207},{"style":223},[3208],{"type":45,"value":266},{"type":40,"tag":204,"props":3210,"children":3211},{"style":223},[3212],{"type":45,"value":404},{"type":40,"tag":204,"props":3214,"children":3215},{"style":217},[3216],{"type":45,"value":2494},{"type":40,"tag":204,"props":3218,"children":3219},{"style":223},[3220],{"type":45,"value":404},{"type":40,"tag":204,"props":3222,"children":3223},{"style":223},[3224],{"type":45,"value":2611},{"type":40,"tag":204,"props":3226,"children":3227},{"style":217},[3228],{"type":45,"value":2434},{"type":40,"tag":204,"props":3230,"children":3231},{"style":384},[3232],{"type":45,"value":281},{"type":40,"tag":204,"props":3234,"children":3235},{"style":223},[3236],{"type":45,"value":286},{"type":40,"tag":204,"props":3238,"children":3239},{"class":206,"line":27},[3240],{"type":40,"tag":204,"props":3241,"children":3242},{"emptyLinePlaceholder":293},[3243],{"type":45,"value":296},{"type":40,"tag":204,"props":3245,"children":3246},{"class":206,"line":354},[3247],{"type":40,"tag":204,"props":3248,"children":3249},{"style":348},[3250],{"type":45,"value":3251},"        \u002F\u002F WRONG: No parent set - this bucket appears at root level\n",{"type":40,"tag":204,"props":3253,"children":3254},{"class":206,"line":411},[3255,3259,3263,3267,3271,3275,3279,3283,3287,3291,3295,3299,3303,3307,3311,3315,3319],{"type":40,"tag":204,"props":3256,"children":3257},{"style":211},[3258],{"type":45,"value":2544},{"type":40,"tag":204,"props":3260,"children":3261},{"style":217},[3262],{"type":45,"value":671},{"type":40,"tag":204,"props":3264,"children":3265},{"style":223},[3266],{"type":45,"value":1048},{"type":40,"tag":204,"props":3268,"children":3269},{"style":223},[3270],{"type":45,"value":231},{"type":40,"tag":204,"props":3272,"children":3273},{"style":217},[3274],{"type":45,"value":236},{"type":40,"tag":204,"props":3276,"children":3277},{"style":223},[3278],{"type":45,"value":241},{"type":40,"tag":204,"props":3280,"children":3281},{"style":217},[3282],{"type":45,"value":246},{"type":40,"tag":204,"props":3284,"children":3285},{"style":223},[3286],{"type":45,"value":241},{"type":40,"tag":204,"props":3288,"children":3289},{"style":253},[3290],{"type":45,"value":256},{"type":40,"tag":204,"props":3292,"children":3293},{"style":384},[3294],{"type":45,"value":261},{"type":40,"tag":204,"props":3296,"children":3297},{"style":223},[3298],{"type":45,"value":2585},{"type":40,"tag":204,"props":3300,"children":3301},{"style":217},[3302],{"type":45,"value":2400},{"type":40,"tag":204,"props":3304,"children":3305},{"style":223},[3306],{"type":45,"value":488},{"type":40,"tag":204,"props":3308,"children":3309},{"style":269},[3310],{"type":45,"value":2598},{"type":40,"tag":204,"props":3312,"children":3313},{"style":223},[3314],{"type":45,"value":1573},{"type":40,"tag":204,"props":3316,"children":3317},{"style":384},[3318],{"type":45,"value":281},{"type":40,"tag":204,"props":3320,"children":3321},{"style":223},[3322],{"type":45,"value":286},{"type":40,"tag":204,"props":3324,"children":3325},{"class":206,"line":434},[3326],{"type":40,"tag":204,"props":3327,"children":3328},{"style":223},[3329],{"type":45,"value":2754},{"type":40,"tag":204,"props":3331,"children":3332},{"class":206,"line":465},[3333],{"type":40,"tag":204,"props":3334,"children":3335},{"style":223},[3336],{"type":45,"value":2284},{"type":40,"tag":55,"props":3338,"children":3339},{},[3340,3344],{"type":40,"tag":114,"props":3341,"children":3342},{},[3343],{"type":45,"value":504},{"type":45,"value":145},{"type":40,"tag":194,"props":3346,"children":3348},{"className":196,"code":3347,"language":16,"meta":198,"style":198},"class MyComponent extends pulumi.ComponentResource {\n    constructor(name: string, opts?: pulumi.ComponentResourceOptions) {\n        super(\"myorg:components:MyComponent\", name, {}, opts);\n\n        \u002F\u002F RIGHT: Parent establishes hierarchy\n        const bucket = new aws.s3.Bucket(`${name}-bucket`, {}, {\n            parent: this\n        });\n\n        const policy = new aws.s3.BucketPolicy(`${name}-policy`, {\n            bucket: bucket.id,\n            policy: policyDoc,\n        }, {\n            parent: this\n        });\n    }\n}\n",[3349],{"type":40,"tag":104,"props":3350,"children":3351},{"__ignoreMap":198},[3352,3383,3438,3489,3496,3504,3579,3596,3612,3619,3692,3720,3740,3752,3767,3782,3789],{"type":40,"tag":204,"props":3353,"children":3354},{"class":206,"line":207},[3355,3359,3363,3367,3371,3375,3379],{"type":40,"tag":204,"props":3356,"children":3357},{"style":211},[3358],{"type":45,"value":2299},{"type":40,"tag":204,"props":3360,"children":3361},{"style":993},[3362],{"type":45,"value":3109},{"type":40,"tag":204,"props":3364,"children":3365},{"style":211},[3366],{"type":45,"value":2309},{"type":40,"tag":204,"props":3368,"children":3369},{"style":993},[3370],{"type":45,"value":1616},{"type":40,"tag":204,"props":3372,"children":3373},{"style":223},[3374],{"type":45,"value":241},{"type":40,"tag":204,"props":3376,"children":3377},{"style":993},[3378],{"type":45,"value":2322},{"type":40,"tag":204,"props":3380,"children":3381},{"style":223},[3382],{"type":45,"value":342},{"type":40,"tag":204,"props":3384,"children":3385},{"class":206,"line":289},[3386,3390,3394,3398,3402,3406,3410,3414,3418,3422,3426,3430,3434],{"type":40,"tag":204,"props":3387,"children":3388},{"style":211},[3389],{"type":45,"value":2391},{"type":40,"tag":204,"props":3391,"children":3392},{"style":223},[3393],{"type":45,"value":261},{"type":40,"tag":204,"props":3395,"children":3396},{"style":329},[3397],{"type":45,"value":2400},{"type":40,"tag":204,"props":3399,"children":3400},{"style":223},[3401],{"type":45,"value":145},{"type":40,"tag":204,"props":3403,"children":3404},{"style":993},[3405],{"type":45,"value":996},{"type":40,"tag":204,"props":3407,"children":3408},{"style":223},[3409],{"type":45,"value":404},{"type":40,"tag":204,"props":3411,"children":3412},{"style":329},[3413],{"type":45,"value":2434},{"type":40,"tag":204,"props":3415,"children":3416},{"style":223},[3417],{"type":45,"value":2439},{"type":40,"tag":204,"props":3419,"children":3420},{"style":993},[3421],{"type":45,"value":1616},{"type":40,"tag":204,"props":3423,"children":3424},{"style":223},[3425],{"type":45,"value":241},{"type":40,"tag":204,"props":3427,"children":3428},{"style":993},[3429],{"type":45,"value":2452},{"type":40,"tag":204,"props":3431,"children":3432},{"style":223},[3433],{"type":45,"value":281},{"type":40,"tag":204,"props":3435,"children":3436},{"style":223},[3437],{"type":45,"value":342},{"type":40,"tag":204,"props":3439,"children":3440},{"class":206,"line":299},[3441,3445,3449,3453,3457,3461,3465,3469,3473,3477,3481,3485],{"type":40,"tag":204,"props":3442,"children":3443},{"style":217},[3444],{"type":45,"value":2468},{"type":40,"tag":204,"props":3446,"children":3447},{"style":384},[3448],{"type":45,"value":261},{"type":40,"tag":204,"props":3450,"children":3451},{"style":223},[3452],{"type":45,"value":266},{"type":40,"tag":204,"props":3454,"children":3455},{"style":269},[3456],{"type":45,"value":3204},{"type":40,"tag":204,"props":3458,"children":3459},{"style":223},[3460],{"type":45,"value":266},{"type":40,"tag":204,"props":3462,"children":3463},{"style":223},[3464],{"type":45,"value":404},{"type":40,"tag":204,"props":3466,"children":3467},{"style":217},[3468],{"type":45,"value":2494},{"type":40,"tag":204,"props":3470,"children":3471},{"style":223},[3472],{"type":45,"value":404},{"type":40,"tag":204,"props":3474,"children":3475},{"style":223},[3476],{"type":45,"value":2611},{"type":40,"tag":204,"props":3478,"children":3479},{"style":217},[3480],{"type":45,"value":2434},{"type":40,"tag":204,"props":3482,"children":3483},{"style":384},[3484],{"type":45,"value":281},{"type":40,"tag":204,"props":3486,"children":3487},{"style":223},[3488],{"type":45,"value":286},{"type":40,"tag":204,"props":3490,"children":3491},{"class":206,"line":27},[3492],{"type":40,"tag":204,"props":3493,"children":3494},{"emptyLinePlaceholder":293},[3495],{"type":45,"value":296},{"type":40,"tag":204,"props":3497,"children":3498},{"class":206,"line":354},[3499],{"type":40,"tag":204,"props":3500,"children":3501},{"style":348},[3502],{"type":45,"value":3503},"        \u002F\u002F RIGHT: Parent establishes hierarchy\n",{"type":40,"tag":204,"props":3505,"children":3506},{"class":206,"line":411},[3507,3511,3515,3519,3523,3527,3531,3535,3539,3543,3547,3551,3555,3559,3563,3567,3571,3575],{"type":40,"tag":204,"props":3508,"children":3509},{"style":211},[3510],{"type":45,"value":2544},{"type":40,"tag":204,"props":3512,"children":3513},{"style":217},[3514],{"type":45,"value":671},{"type":40,"tag":204,"props":3516,"children":3517},{"style":223},[3518],{"type":45,"value":1048},{"type":40,"tag":204,"props":3520,"children":3521},{"style":223},[3522],{"type":45,"value":231},{"type":40,"tag":204,"props":3524,"children":3525},{"style":217},[3526],{"type":45,"value":236},{"type":40,"tag":204,"props":3528,"children":3529},{"style":223},[3530],{"type":45,"value":241},{"type":40,"tag":204,"props":3532,"children":3533},{"style":217},[3534],{"type":45,"value":246},{"type":40,"tag":204,"props":3536,"children":3537},{"style":223},[3538],{"type":45,"value":241},{"type":40,"tag":204,"props":3540,"children":3541},{"style":253},[3542],{"type":45,"value":256},{"type":40,"tag":204,"props":3544,"children":3545},{"style":384},[3546],{"type":45,"value":261},{"type":40,"tag":204,"props":3548,"children":3549},{"style":223},[3550],{"type":45,"value":2585},{"type":40,"tag":204,"props":3552,"children":3553},{"style":217},[3554],{"type":45,"value":2400},{"type":40,"tag":204,"props":3556,"children":3557},{"style":223},[3558],{"type":45,"value":488},{"type":40,"tag":204,"props":3560,"children":3561},{"style":269},[3562],{"type":45,"value":2598},{"type":40,"tag":204,"props":3564,"children":3565},{"style":223},[3566],{"type":45,"value":1573},{"type":40,"tag":204,"props":3568,"children":3569},{"style":223},[3570],{"type":45,"value":404},{"type":40,"tag":204,"props":3572,"children":3573},{"style":223},[3574],{"type":45,"value":2611},{"type":40,"tag":204,"props":3576,"children":3577},{"style":223},[3578],{"type":45,"value":342},{"type":40,"tag":204,"props":3580,"children":3581},{"class":206,"line":434},[3582,3587,3591],{"type":40,"tag":204,"props":3583,"children":3584},{"style":384},[3585],{"type":45,"value":3586},"            parent",{"type":40,"tag":204,"props":3588,"children":3589},{"style":223},[3590],{"type":45,"value":145},{"type":40,"tag":204,"props":3592,"children":3593},{"style":223},[3594],{"type":45,"value":3595}," this\n",{"type":40,"tag":204,"props":3597,"children":3598},{"class":206,"line":465},[3599,3604,3608],{"type":40,"tag":204,"props":3600,"children":3601},{"style":223},[3602],{"type":45,"value":3603},"        }",{"type":40,"tag":204,"props":3605,"children":3606},{"style":384},[3607],{"type":45,"value":281},{"type":40,"tag":204,"props":3609,"children":3610},{"style":223},[3611],{"type":45,"value":286},{"type":40,"tag":204,"props":3613,"children":3614},{"class":206,"line":482},[3615],{"type":40,"tag":204,"props":3616,"children":3617},{"emptyLinePlaceholder":293},[3618],{"type":45,"value":296},{"type":40,"tag":204,"props":3620,"children":3621},{"class":206,"line":1200},[3622,3626,3631,3635,3639,3643,3647,3651,3655,3659,3663,3667,3671,3675,3680,3684,3688],{"type":40,"tag":204,"props":3623,"children":3624},{"style":211},[3625],{"type":45,"value":2544},{"type":40,"tag":204,"props":3627,"children":3628},{"style":217},[3629],{"type":45,"value":3630}," policy",{"type":40,"tag":204,"props":3632,"children":3633},{"style":223},[3634],{"type":45,"value":1048},{"type":40,"tag":204,"props":3636,"children":3637},{"style":223},[3638],{"type":45,"value":231},{"type":40,"tag":204,"props":3640,"children":3641},{"style":217},[3642],{"type":45,"value":236},{"type":40,"tag":204,"props":3644,"children":3645},{"style":223},[3646],{"type":45,"value":241},{"type":40,"tag":204,"props":3648,"children":3649},{"style":217},[3650],{"type":45,"value":246},{"type":40,"tag":204,"props":3652,"children":3653},{"style":223},[3654],{"type":45,"value":241},{"type":40,"tag":204,"props":3656,"children":3657},{"style":253},[3658],{"type":45,"value":1949},{"type":40,"tag":204,"props":3660,"children":3661},{"style":384},[3662],{"type":45,"value":261},{"type":40,"tag":204,"props":3664,"children":3665},{"style":223},[3666],{"type":45,"value":2585},{"type":40,"tag":204,"props":3668,"children":3669},{"style":217},[3670],{"type":45,"value":2400},{"type":40,"tag":204,"props":3672,"children":3673},{"style":223},[3674],{"type":45,"value":488},{"type":40,"tag":204,"props":3676,"children":3677},{"style":269},[3678],{"type":45,"value":3679},"-policy",{"type":40,"tag":204,"props":3681,"children":3682},{"style":223},[3683],{"type":45,"value":1573},{"type":40,"tag":204,"props":3685,"children":3686},{"style":223},[3687],{"type":45,"value":404},{"type":40,"tag":204,"props":3689,"children":3690},{"style":223},[3691],{"type":45,"value":342},{"type":40,"tag":204,"props":3693,"children":3694},{"class":206,"line":2521},[3695,3700,3704,3708,3712,3716],{"type":40,"tag":204,"props":3696,"children":3697},{"style":384},[3698],{"type":45,"value":3699},"            bucket",{"type":40,"tag":204,"props":3701,"children":3702},{"style":223},[3703],{"type":45,"value":145},{"type":40,"tag":204,"props":3705,"children":3706},{"style":217},[3707],{"type":45,"value":671},{"type":40,"tag":204,"props":3709,"children":3710},{"style":223},[3711],{"type":45,"value":241},{"type":40,"tag":204,"props":3713,"children":3714},{"style":217},[3715],{"type":45,"value":313},{"type":40,"tag":204,"props":3717,"children":3718},{"style":223},[3719],{"type":45,"value":431},{"type":40,"tag":204,"props":3721,"children":3722},{"class":206,"line":2529},[3723,3728,3732,3736],{"type":40,"tag":204,"props":3724,"children":3725},{"style":384},[3726],{"type":45,"value":3727},"            policy",{"type":40,"tag":204,"props":3729,"children":3730},{"style":223},[3731],{"type":45,"value":145},{"type":40,"tag":204,"props":3733,"children":3734},{"style":217},[3735],{"type":45,"value":2018},{"type":40,"tag":204,"props":3737,"children":3738},{"style":223},[3739],{"type":45,"value":431},{"type":40,"tag":204,"props":3741,"children":3742},{"class":206,"line":2538},[3743,3748],{"type":40,"tag":204,"props":3744,"children":3745},{"style":223},[3746],{"type":45,"value":3747},"        },",{"type":40,"tag":204,"props":3749,"children":3750},{"style":223},[3751],{"type":45,"value":342},{"type":40,"tag":204,"props":3753,"children":3754},{"class":206,"line":2644},[3755,3759,3763],{"type":40,"tag":204,"props":3756,"children":3757},{"style":384},[3758],{"type":45,"value":3586},{"type":40,"tag":204,"props":3760,"children":3761},{"style":223},[3762],{"type":45,"value":145},{"type":40,"tag":204,"props":3764,"children":3765},{"style":223},[3766],{"type":45,"value":3595},{"type":40,"tag":204,"props":3768,"children":3769},{"class":206,"line":2653},[3770,3774,3778],{"type":40,"tag":204,"props":3771,"children":3772},{"style":223},[3773],{"type":45,"value":3603},{"type":40,"tag":204,"props":3775,"children":3776},{"style":384},[3777],{"type":45,"value":281},{"type":40,"tag":204,"props":3779,"children":3780},{"style":223},[3781],{"type":45,"value":286},{"type":40,"tag":204,"props":3783,"children":3784},{"class":206,"line":2661},[3785],{"type":40,"tag":204,"props":3786,"children":3787},{"style":223},[3788],{"type":45,"value":2754},{"type":40,"tag":204,"props":3790,"children":3791},{"class":206,"line":2697},[3792],{"type":40,"tag":204,"props":3793,"children":3794},{"style":223},[3795],{"type":45,"value":2284},{"type":40,"tag":55,"props":3797,"children":3798},{},[3799,3804],{"type":40,"tag":114,"props":3800,"children":3801},{},[3802],{"type":45,"value":3803},"What parent: this provides",{"type":45,"value":145},{"type":40,"tag":61,"props":3806,"children":3807},{},[3808,3813,3818,3823],{"type":40,"tag":65,"props":3809,"children":3810},{},[3811],{"type":45,"value":3812},"Resources appear nested under the component in Pulumi console",{"type":40,"tag":65,"props":3814,"children":3815},{},[3816],{"type":45,"value":3817},"Deleting the component deletes all children",{"type":40,"tag":65,"props":3819,"children":3820},{},[3821],{"type":45,"value":3822},"Aliases on the component automatically apply to children",{"type":40,"tag":65,"props":3824,"children":3825},{},[3826],{"type":45,"value":3827},"Clear ownership in state files",{"type":40,"tag":55,"props":3829,"children":3830},{},[3831,3835,3836],{"type":40,"tag":114,"props":3832,"children":3833},{},[3834],{"type":45,"value":766},{"type":45,"value":768},{"type":40,"tag":770,"props":3837,"children":3839},{"href":3012,"rel":3838},[774],[3840],{"type":45,"value":3012},{"type":40,"tag":778,"props":3842,"children":3843},{},[],{"type":40,"tag":97,"props":3845,"children":3847},{"id":3846},"_5-encrypt-secrets-from-day-one",[3848],{"type":45,"value":3849},"5. Encrypt Secrets from Day One",{"type":40,"tag":55,"props":3851,"children":3852},{},[3853,3857,3859,3865],{"type":40,"tag":114,"props":3854,"children":3855},{},[3856],{"type":45,"value":118},{"type":45,"value":3858},": Secrets marked with ",{"type":40,"tag":104,"props":3860,"children":3862},{"className":3861},[],[3863],{"type":45,"value":3864},"--secret",{"type":45,"value":3866}," are encrypted in state files, masked in CLI output, and tracked through transformations. Starting with plaintext config and converting later requires credential rotation, reference updates, and audit of leaked values in logs and state history.",{"type":40,"tag":55,"props":3868,"children":3869},{},[3870,3874],{"type":40,"tag":114,"props":3871,"children":3872},{},[3873],{"type":45,"value":143},{"type":45,"value":145},{"type":40,"tag":61,"props":3876,"children":3877},{},[3878,3883,3888],{"type":40,"tag":65,"props":3879,"children":3880},{},[3881],{"type":45,"value":3882},"Passwords, API keys, tokens stored as plain config",{"type":40,"tag":65,"props":3884,"children":3885},{},[3886],{"type":45,"value":3887},"Connection strings with embedded credentials",{"type":40,"tag":65,"props":3889,"children":3890},{},[3891],{"type":45,"value":3892},"Private keys or certificates in plaintext",{"type":40,"tag":55,"props":3894,"children":3895},{},[3896,3900],{"type":40,"tag":114,"props":3897,"children":3898},{},[3899],{"type":45,"value":191},{"type":45,"value":145},{"type":40,"tag":194,"props":3902,"children":3906},{"className":3903,"code":3904,"language":3905,"meta":198,"style":198},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Plaintext - will be visible in state and logs\npulumi config set databasePassword hunter2\npulumi config set apiKey sk-1234567890\n","bash",[3907],{"type":40,"tag":104,"props":3908,"children":3909},{"__ignoreMap":198},[3910,3918,3945],{"type":40,"tag":204,"props":3911,"children":3912},{"class":206,"line":207},[3913],{"type":40,"tag":204,"props":3914,"children":3915},{"style":348},[3916],{"type":45,"value":3917},"# Plaintext - will be visible in state and logs\n",{"type":40,"tag":204,"props":3919,"children":3920},{"class":206,"line":289},[3921,3925,3930,3935,3940],{"type":40,"tag":204,"props":3922,"children":3923},{"style":993},[3924],{"type":45,"value":8},{"type":40,"tag":204,"props":3926,"children":3927},{"style":269},[3928],{"type":45,"value":3929}," config",{"type":40,"tag":204,"props":3931,"children":3932},{"style":269},[3933],{"type":45,"value":3934}," set",{"type":40,"tag":204,"props":3936,"children":3937},{"style":269},[3938],{"type":45,"value":3939}," databasePassword",{"type":40,"tag":204,"props":3941,"children":3942},{"style":269},[3943],{"type":45,"value":3944}," hunter2\n",{"type":40,"tag":204,"props":3946,"children":3947},{"class":206,"line":299},[3948,3952,3956,3960,3965],{"type":40,"tag":204,"props":3949,"children":3950},{"style":993},[3951],{"type":45,"value":8},{"type":40,"tag":204,"props":3953,"children":3954},{"style":269},[3955],{"type":45,"value":3929},{"type":40,"tag":204,"props":3957,"children":3958},{"style":269},[3959],{"type":45,"value":3934},{"type":40,"tag":204,"props":3961,"children":3962},{"style":269},[3963],{"type":45,"value":3964}," apiKey",{"type":40,"tag":204,"props":3966,"children":3967},{"style":269},[3968],{"type":45,"value":3969}," sk-1234567890\n",{"type":40,"tag":55,"props":3971,"children":3972},{},[3973,3977],{"type":40,"tag":114,"props":3974,"children":3975},{},[3976],{"type":45,"value":504},{"type":45,"value":145},{"type":40,"tag":194,"props":3979,"children":3981},{"className":3903,"code":3980,"language":3905,"meta":198,"style":198},"# Encrypted from the start\npulumi config set --secret databasePassword hunter2\npulumi config set --secret apiKey sk-1234567890\n",[3982],{"type":40,"tag":104,"props":3983,"children":3984},{"__ignoreMap":198},[3985,3993,4021],{"type":40,"tag":204,"props":3986,"children":3987},{"class":206,"line":207},[3988],{"type":40,"tag":204,"props":3989,"children":3990},{"style":348},[3991],{"type":45,"value":3992},"# Encrypted from the start\n",{"type":40,"tag":204,"props":3994,"children":3995},{"class":206,"line":289},[3996,4000,4004,4008,4013,4017],{"type":40,"tag":204,"props":3997,"children":3998},{"style":993},[3999],{"type":45,"value":8},{"type":40,"tag":204,"props":4001,"children":4002},{"style":269},[4003],{"type":45,"value":3929},{"type":40,"tag":204,"props":4005,"children":4006},{"style":269},[4007],{"type":45,"value":3934},{"type":40,"tag":204,"props":4009,"children":4010},{"style":269},[4011],{"type":45,"value":4012}," --secret",{"type":40,"tag":204,"props":4014,"children":4015},{"style":269},[4016],{"type":45,"value":3939},{"type":40,"tag":204,"props":4018,"children":4019},{"style":269},[4020],{"type":45,"value":3944},{"type":40,"tag":204,"props":4022,"children":4023},{"class":206,"line":299},[4024,4028,4032,4036,4040,4044],{"type":40,"tag":204,"props":4025,"children":4026},{"style":993},[4027],{"type":45,"value":8},{"type":40,"tag":204,"props":4029,"children":4030},{"style":269},[4031],{"type":45,"value":3929},{"type":40,"tag":204,"props":4033,"children":4034},{"style":269},[4035],{"type":45,"value":3934},{"type":40,"tag":204,"props":4037,"children":4038},{"style":269},[4039],{"type":45,"value":4012},{"type":40,"tag":204,"props":4041,"children":4042},{"style":269},[4043],{"type":45,"value":3964},{"type":40,"tag":204,"props":4045,"children":4046},{"style":269},[4047],{"type":45,"value":3969},{"type":40,"tag":55,"props":4049,"children":4050},{},[4051,4056],{"type":40,"tag":114,"props":4052,"children":4053},{},[4054],{"type":45,"value":4055},"In code",{"type":45,"value":145},{"type":40,"tag":194,"props":4058,"children":4060},{"className":196,"code":4059,"language":16,"meta":198,"style":198},"const config = new pulumi.Config();\n\n\u002F\u002F This retrieves a secret - the value stays encrypted\nconst dbPassword = config.requireSecret(\"databasePassword\");\n\n\u002F\u002F Creating outputs from secrets preserves secrecy\nconst connectionString = pulumi.interpolate`postgres:\u002F\u002Fuser:${dbPassword}@host\u002Fdb`;\n\u002F\u002F connectionString is also a secret Output\n\n\u002F\u002F Explicitly mark values as secret\nconst computed = pulumi.secret(someValue);\n",[4061],{"type":40,"tag":104,"props":4062,"children":4063},{"__ignoreMap":198},[4064,4106,4113,4121,4175,4182,4190,4253,4261,4268,4276],{"type":40,"tag":204,"props":4065,"children":4066},{"class":206,"line":207},[4067,4071,4076,4080,4084,4088,4092,4097,4102],{"type":40,"tag":204,"props":4068,"children":4069},{"style":211},[4070],{"type":45,"value":214},{"type":40,"tag":204,"props":4072,"children":4073},{"style":217},[4074],{"type":45,"value":4075}," config ",{"type":40,"tag":204,"props":4077,"children":4078},{"style":223},[4079],{"type":45,"value":226},{"type":40,"tag":204,"props":4081,"children":4082},{"style":223},[4083],{"type":45,"value":231},{"type":40,"tag":204,"props":4085,"children":4086},{"style":217},[4087],{"type":45,"value":1616},{"type":40,"tag":204,"props":4089,"children":4090},{"style":223},[4091],{"type":45,"value":241},{"type":40,"tag":204,"props":4093,"children":4094},{"style":253},[4095],{"type":45,"value":4096},"Config",{"type":40,"tag":204,"props":4098,"children":4099},{"style":217},[4100],{"type":45,"value":4101},"()",{"type":40,"tag":204,"props":4103,"children":4104},{"style":223},[4105],{"type":45,"value":286},{"type":40,"tag":204,"props":4107,"children":4108},{"class":206,"line":289},[4109],{"type":40,"tag":204,"props":4110,"children":4111},{"emptyLinePlaceholder":293},[4112],{"type":45,"value":296},{"type":40,"tag":204,"props":4114,"children":4115},{"class":206,"line":299},[4116],{"type":40,"tag":204,"props":4117,"children":4118},{"style":348},[4119],{"type":45,"value":4120},"\u002F\u002F This retrieves a secret - the value stays encrypted\n",{"type":40,"tag":204,"props":4122,"children":4123},{"class":206,"line":27},[4124,4128,4133,4137,4141,4145,4150,4154,4158,4163,4167,4171],{"type":40,"tag":204,"props":4125,"children":4126},{"style":211},[4127],{"type":45,"value":214},{"type":40,"tag":204,"props":4129,"children":4130},{"style":217},[4131],{"type":45,"value":4132}," dbPassword ",{"type":40,"tag":204,"props":4134,"children":4135},{"style":223},[4136],{"type":45,"value":226},{"type":40,"tag":204,"props":4138,"children":4139},{"style":217},[4140],{"type":45,"value":3929},{"type":40,"tag":204,"props":4142,"children":4143},{"style":223},[4144],{"type":45,"value":241},{"type":40,"tag":204,"props":4146,"children":4147},{"style":253},[4148],{"type":45,"value":4149},"requireSecret",{"type":40,"tag":204,"props":4151,"children":4152},{"style":217},[4153],{"type":45,"value":261},{"type":40,"tag":204,"props":4155,"children":4156},{"style":223},[4157],{"type":45,"value":266},{"type":40,"tag":204,"props":4159,"children":4160},{"style":269},[4161],{"type":45,"value":4162},"databasePassword",{"type":40,"tag":204,"props":4164,"children":4165},{"style":223},[4166],{"type":45,"value":266},{"type":40,"tag":204,"props":4168,"children":4169},{"style":217},[4170],{"type":45,"value":281},{"type":40,"tag":204,"props":4172,"children":4173},{"style":223},[4174],{"type":45,"value":286},{"type":40,"tag":204,"props":4176,"children":4177},{"class":206,"line":354},[4178],{"type":40,"tag":204,"props":4179,"children":4180},{"emptyLinePlaceholder":293},[4181],{"type":45,"value":296},{"type":40,"tag":204,"props":4183,"children":4184},{"class":206,"line":411},[4185],{"type":40,"tag":204,"props":4186,"children":4187},{"style":348},[4188],{"type":45,"value":4189},"\u002F\u002F Creating outputs from secrets preserves secrecy\n",{"type":40,"tag":204,"props":4191,"children":4192},{"class":206,"line":434},[4193,4197,4202,4206,4210,4214,4218,4222,4227,4231,4236,4240,4245,4249],{"type":40,"tag":204,"props":4194,"children":4195},{"style":211},[4196],{"type":45,"value":214},{"type":40,"tag":204,"props":4198,"children":4199},{"style":217},[4200],{"type":45,"value":4201}," connectionString ",{"type":40,"tag":204,"props":4203,"children":4204},{"style":223},[4205],{"type":45,"value":226},{"type":40,"tag":204,"props":4207,"children":4208},{"style":217},[4209],{"type":45,"value":1616},{"type":40,"tag":204,"props":4211,"children":4212},{"style":223},[4213],{"type":45,"value":241},{"type":40,"tag":204,"props":4215,"children":4216},{"style":253},[4217],{"type":45,"value":1625},{"type":40,"tag":204,"props":4219,"children":4220},{"style":223},[4221],{"type":45,"value":1573},{"type":40,"tag":204,"props":4223,"children":4224},{"style":269},[4225],{"type":45,"value":4226},"postgres:\u002F\u002Fuser:",{"type":40,"tag":204,"props":4228,"children":4229},{"style":223},[4230],{"type":45,"value":1555},{"type":40,"tag":204,"props":4232,"children":4233},{"style":217},[4234],{"type":45,"value":4235},"dbPassword",{"type":40,"tag":204,"props":4237,"children":4238},{"style":223},[4239],{"type":45,"value":488},{"type":40,"tag":204,"props":4241,"children":4242},{"style":269},[4243],{"type":45,"value":4244},"@host\u002Fdb",{"type":40,"tag":204,"props":4246,"children":4247},{"style":223},[4248],{"type":45,"value":1573},{"type":40,"tag":204,"props":4250,"children":4251},{"style":223},[4252],{"type":45,"value":286},{"type":40,"tag":204,"props":4254,"children":4255},{"class":206,"line":465},[4256],{"type":40,"tag":204,"props":4257,"children":4258},{"style":348},[4259],{"type":45,"value":4260},"\u002F\u002F connectionString is also a secret Output\n",{"type":40,"tag":204,"props":4262,"children":4263},{"class":206,"line":482},[4264],{"type":40,"tag":204,"props":4265,"children":4266},{"emptyLinePlaceholder":293},[4267],{"type":45,"value":296},{"type":40,"tag":204,"props":4269,"children":4270},{"class":206,"line":1200},[4271],{"type":40,"tag":204,"props":4272,"children":4273},{"style":348},[4274],{"type":45,"value":4275},"\u002F\u002F Explicitly mark values as secret\n",{"type":40,"tag":204,"props":4277,"children":4278},{"class":206,"line":2521},[4279,4283,4288,4292,4296,4300,4305,4310],{"type":40,"tag":204,"props":4280,"children":4281},{"style":211},[4282],{"type":45,"value":214},{"type":40,"tag":204,"props":4284,"children":4285},{"style":217},[4286],{"type":45,"value":4287}," computed ",{"type":40,"tag":204,"props":4289,"children":4290},{"style":223},[4291],{"type":45,"value":226},{"type":40,"tag":204,"props":4293,"children":4294},{"style":217},[4295],{"type":45,"value":1616},{"type":40,"tag":204,"props":4297,"children":4298},{"style":223},[4299],{"type":45,"value":241},{"type":40,"tag":204,"props":4301,"children":4302},{"style":253},[4303],{"type":45,"value":4304},"secret",{"type":40,"tag":204,"props":4306,"children":4307},{"style":217},[4308],{"type":45,"value":4309},"(someValue)",{"type":40,"tag":204,"props":4311,"children":4312},{"style":223},[4313],{"type":45,"value":286},{"type":40,"tag":55,"props":4315,"children":4316},{},[4317,4322],{"type":40,"tag":114,"props":4318,"children":4319},{},[4320],{"type":45,"value":4321},"Use Pulumi ESC for centralized secrets",{"type":45,"value":145},{"type":40,"tag":194,"props":4324,"children":4328},{"className":4325,"code":4326,"language":4327,"meta":198,"style":198},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Pulumi.yaml\nenvironment:\n  - production-secrets  # Pull from ESC environment\n","yaml",[4329],{"type":40,"tag":104,"props":4330,"children":4331},{"__ignoreMap":198},[4332,4340,4353],{"type":40,"tag":204,"props":4333,"children":4334},{"class":206,"line":207},[4335],{"type":40,"tag":204,"props":4336,"children":4337},{"style":348},[4338],{"type":45,"value":4339},"# Pulumi.yaml\n",{"type":40,"tag":204,"props":4341,"children":4342},{"class":206,"line":289},[4343,4348],{"type":40,"tag":204,"props":4344,"children":4345},{"style":384},[4346],{"type":45,"value":4347},"environment",{"type":40,"tag":204,"props":4349,"children":4350},{"style":223},[4351],{"type":45,"value":4352},":\n",{"type":40,"tag":204,"props":4354,"children":4355},{"class":206,"line":299},[4356,4361,4366],{"type":40,"tag":204,"props":4357,"children":4358},{"style":223},[4359],{"type":45,"value":4360},"  -",{"type":40,"tag":204,"props":4362,"children":4363},{"style":269},[4364],{"type":45,"value":4365}," production-secrets",{"type":40,"tag":204,"props":4367,"children":4368},{"style":348},[4369],{"type":45,"value":4370},"  # Pull from ESC environment\n",{"type":40,"tag":194,"props":4372,"children":4374},{"className":3903,"code":4373,"language":3905,"meta":198,"style":198},"# ESC manages secrets centrally across stacks\nesc env set production-secrets db.password --secret \"hunter2\"\n",[4375],{"type":40,"tag":104,"props":4376,"children":4377},{"__ignoreMap":198},[4378,4386],{"type":40,"tag":204,"props":4379,"children":4380},{"class":206,"line":207},[4381],{"type":40,"tag":204,"props":4382,"children":4383},{"style":348},[4384],{"type":45,"value":4385},"# ESC manages secrets centrally across stacks\n",{"type":40,"tag":204,"props":4387,"children":4388},{"class":206,"line":289},[4389,4394,4399,4403,4407,4412,4416,4420,4425],{"type":40,"tag":204,"props":4390,"children":4391},{"style":993},[4392],{"type":45,"value":4393},"esc",{"type":40,"tag":204,"props":4395,"children":4396},{"style":269},[4397],{"type":45,"value":4398}," env",{"type":40,"tag":204,"props":4400,"children":4401},{"style":269},[4402],{"type":45,"value":3934},{"type":40,"tag":204,"props":4404,"children":4405},{"style":269},[4406],{"type":45,"value":4365},{"type":40,"tag":204,"props":4408,"children":4409},{"style":269},[4410],{"type":45,"value":4411}," db.password",{"type":40,"tag":204,"props":4413,"children":4414},{"style":269},[4415],{"type":45,"value":4012},{"type":40,"tag":204,"props":4417,"children":4418},{"style":223},[4419],{"type":45,"value":449},{"type":40,"tag":204,"props":4421,"children":4422},{"style":269},[4423],{"type":45,"value":4424},"hunter2",{"type":40,"tag":204,"props":4426,"children":4427},{"style":223},[4428],{"type":45,"value":4429},"\"\n",{"type":40,"tag":55,"props":4431,"children":4432},{},[4433,4438],{"type":40,"tag":114,"props":4434,"children":4435},{},[4436],{"type":45,"value":4437},"What qualifies as a secret",{"type":45,"value":145},{"type":40,"tag":61,"props":4440,"children":4441},{},[4442,4447,4452,4457,4462,4467],{"type":40,"tag":65,"props":4443,"children":4444},{},[4445],{"type":45,"value":4446},"Passwords and passphrases",{"type":40,"tag":65,"props":4448,"children":4449},{},[4450],{"type":45,"value":4451},"API keys and tokens",{"type":40,"tag":65,"props":4453,"children":4454},{},[4455],{"type":45,"value":4456},"Private keys and certificates",{"type":40,"tag":65,"props":4458,"children":4459},{},[4460],{"type":45,"value":4461},"Connection strings with credentials",{"type":40,"tag":65,"props":4463,"children":4464},{},[4465],{"type":45,"value":4466},"OAuth client secrets",{"type":40,"tag":65,"props":4468,"children":4469},{},[4470],{"type":45,"value":4471},"Encryption keys",{"type":40,"tag":55,"props":4473,"children":4474},{},[4475,4480],{"type":40,"tag":114,"props":4476,"children":4477},{},[4478],{"type":45,"value":4479},"References",{"type":45,"value":145},{"type":40,"tag":61,"props":4482,"children":4483},{},[4484,4493],{"type":40,"tag":65,"props":4485,"children":4486},{},[4487],{"type":40,"tag":770,"props":4488,"children":4491},{"href":4489,"rel":4490},"https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fconcepts\u002Fsecrets\u002F",[774],[4492],{"type":45,"value":4489},{"type":40,"tag":65,"props":4494,"children":4495},{},[4496],{"type":40,"tag":770,"props":4497,"children":4500},{"href":4498,"rel":4499},"https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fesc\u002F",[774],[4501],{"type":45,"value":4498},{"type":40,"tag":778,"props":4503,"children":4504},{},[],{"type":40,"tag":97,"props":4506,"children":4508},{"id":4507},"_6-use-aliases-when-refactoring",[4509],{"type":45,"value":4510},"6. Use Aliases When Refactoring",{"type":40,"tag":55,"props":4512,"children":4513},{},[4514,4518],{"type":40,"tag":114,"props":4515,"children":4516},{},[4517],{"type":45,"value":118},{"type":45,"value":4519},": Renaming resources, moving them into components, or changing parents causes Pulumi to see them as new resources. Without aliases, refactoring destroys and recreates resources, potentially causing downtime or data loss. Aliases preserve resource identity through refactors.",{"type":40,"tag":55,"props":4521,"children":4522},{},[4523,4527],{"type":40,"tag":114,"props":4524,"children":4525},{},[4526],{"type":45,"value":143},{"type":45,"value":145},{"type":40,"tag":61,"props":4529,"children":4530},{},[4531,4536,4541,4546],{"type":40,"tag":65,"props":4532,"children":4533},{},[4534],{"type":45,"value":4535},"Resource rename without alias",{"type":40,"tag":65,"props":4537,"children":4538},{},[4539],{"type":45,"value":4540},"Moving resource into or out of a ComponentResource",{"type":40,"tag":65,"props":4542,"children":4543},{},[4544],{"type":45,"value":4545},"Changing the parent of a resource",{"type":40,"tag":65,"props":4547,"children":4548},{},[4549],{"type":45,"value":4550},"Preview shows delete+create when update was intended",{"type":40,"tag":55,"props":4552,"children":4553},{},[4554,4558],{"type":40,"tag":114,"props":4555,"children":4556},{},[4557],{"type":45,"value":191},{"type":45,"value":145},{"type":40,"tag":194,"props":4560,"children":4562},{"className":196,"code":4561,"language":16,"meta":198,"style":198},"\u002F\u002F Before: resource named \"my-bucket\"\nconst bucket = new aws.s3.Bucket(\"my-bucket\");\n\n\u002F\u002F After: renamed without alias - DESTROYS THE BUCKET\nconst bucket = new aws.s3.Bucket(\"application-bucket\");\n",[4563],{"type":40,"tag":104,"props":4564,"children":4565},{"__ignoreMap":198},[4566,4574,4638,4645,4653],{"type":40,"tag":204,"props":4567,"children":4568},{"class":206,"line":207},[4569],{"type":40,"tag":204,"props":4570,"children":4571},{"style":348},[4572],{"type":45,"value":4573},"\u002F\u002F Before: resource named \"my-bucket\"\n",{"type":40,"tag":204,"props":4575,"children":4576},{"class":206,"line":289},[4577,4581,4585,4589,4593,4597,4601,4605,4609,4613,4617,4621,4626,4630,4634],{"type":40,"tag":204,"props":4578,"children":4579},{"style":211},[4580],{"type":45,"value":214},{"type":40,"tag":204,"props":4582,"children":4583},{"style":217},[4584],{"type":45,"value":220},{"type":40,"tag":204,"props":4586,"children":4587},{"style":223},[4588],{"type":45,"value":226},{"type":40,"tag":204,"props":4590,"children":4591},{"style":223},[4592],{"type":45,"value":231},{"type":40,"tag":204,"props":4594,"children":4595},{"style":217},[4596],{"type":45,"value":236},{"type":40,"tag":204,"props":4598,"children":4599},{"style":223},[4600],{"type":45,"value":241},{"type":40,"tag":204,"props":4602,"children":4603},{"style":217},[4604],{"type":45,"value":246},{"type":40,"tag":204,"props":4606,"children":4607},{"style":223},[4608],{"type":45,"value":241},{"type":40,"tag":204,"props":4610,"children":4611},{"style":253},[4612],{"type":45,"value":256},{"type":40,"tag":204,"props":4614,"children":4615},{"style":217},[4616],{"type":45,"value":261},{"type":40,"tag":204,"props":4618,"children":4619},{"style":223},[4620],{"type":45,"value":266},{"type":40,"tag":204,"props":4622,"children":4623},{"style":269},[4624],{"type":45,"value":4625},"my-bucket",{"type":40,"tag":204,"props":4627,"children":4628},{"style":223},[4629],{"type":45,"value":266},{"type":40,"tag":204,"props":4631,"children":4632},{"style":217},[4633],{"type":45,"value":281},{"type":40,"tag":204,"props":4635,"children":4636},{"style":223},[4637],{"type":45,"value":286},{"type":40,"tag":204,"props":4639,"children":4640},{"class":206,"line":299},[4641],{"type":40,"tag":204,"props":4642,"children":4643},{"emptyLinePlaceholder":293},[4644],{"type":45,"value":296},{"type":40,"tag":204,"props":4646,"children":4647},{"class":206,"line":27},[4648],{"type":40,"tag":204,"props":4649,"children":4650},{"style":348},[4651],{"type":45,"value":4652},"\u002F\u002F After: renamed without alias - DESTROYS THE BUCKET\n",{"type":40,"tag":204,"props":4654,"children":4655},{"class":206,"line":354},[4656,4660,4664,4668,4672,4676,4680,4684,4688,4692,4696,4700,4705,4709,4713],{"type":40,"tag":204,"props":4657,"children":4658},{"style":211},[4659],{"type":45,"value":214},{"type":40,"tag":204,"props":4661,"children":4662},{"style":217},[4663],{"type":45,"value":220},{"type":40,"tag":204,"props":4665,"children":4666},{"style":223},[4667],{"type":45,"value":226},{"type":40,"tag":204,"props":4669,"children":4670},{"style":223},[4671],{"type":45,"value":231},{"type":40,"tag":204,"props":4673,"children":4674},{"style":217},[4675],{"type":45,"value":236},{"type":40,"tag":204,"props":4677,"children":4678},{"style":223},[4679],{"type":45,"value":241},{"type":40,"tag":204,"props":4681,"children":4682},{"style":217},[4683],{"type":45,"value":246},{"type":40,"tag":204,"props":4685,"children":4686},{"style":223},[4687],{"type":45,"value":241},{"type":40,"tag":204,"props":4689,"children":4690},{"style":253},[4691],{"type":45,"value":256},{"type":40,"tag":204,"props":4693,"children":4694},{"style":217},[4695],{"type":45,"value":261},{"type":40,"tag":204,"props":4697,"children":4698},{"style":223},[4699],{"type":45,"value":266},{"type":40,"tag":204,"props":4701,"children":4702},{"style":269},[4703],{"type":45,"value":4704},"application-bucket",{"type":40,"tag":204,"props":4706,"children":4707},{"style":223},[4708],{"type":45,"value":266},{"type":40,"tag":204,"props":4710,"children":4711},{"style":217},[4712],{"type":45,"value":281},{"type":40,"tag":204,"props":4714,"children":4715},{"style":223},[4716],{"type":45,"value":286},{"type":40,"tag":55,"props":4718,"children":4719},{},[4720,4724],{"type":40,"tag":114,"props":4721,"children":4722},{},[4723],{"type":45,"value":504},{"type":45,"value":145},{"type":40,"tag":194,"props":4726,"children":4728},{"className":196,"code":4727,"language":16,"meta":198,"style":198},"\u002F\u002F After: renamed with alias - preserves the existing bucket\nconst bucket = new aws.s3.Bucket(\"application-bucket\", {}, {\n    aliases: [{ name: \"my-bucket\" }],\n});\n",[4729],{"type":40,"tag":104,"props":4730,"children":4731},{"__ignoreMap":198},[4732,4740,4807,4861],{"type":40,"tag":204,"props":4733,"children":4734},{"class":206,"line":207},[4735],{"type":40,"tag":204,"props":4736,"children":4737},{"style":348},[4738],{"type":45,"value":4739},"\u002F\u002F After: renamed with alias - preserves the existing bucket\n",{"type":40,"tag":204,"props":4741,"children":4742},{"class":206,"line":289},[4743,4747,4751,4755,4759,4763,4767,4771,4775,4779,4783,4787,4791,4795,4799,4803],{"type":40,"tag":204,"props":4744,"children":4745},{"style":211},[4746],{"type":45,"value":214},{"type":40,"tag":204,"props":4748,"children":4749},{"style":217},[4750],{"type":45,"value":220},{"type":40,"tag":204,"props":4752,"children":4753},{"style":223},[4754],{"type":45,"value":226},{"type":40,"tag":204,"props":4756,"children":4757},{"style":223},[4758],{"type":45,"value":231},{"type":40,"tag":204,"props":4760,"children":4761},{"style":217},[4762],{"type":45,"value":236},{"type":40,"tag":204,"props":4764,"children":4765},{"style":223},[4766],{"type":45,"value":241},{"type":40,"tag":204,"props":4768,"children":4769},{"style":217},[4770],{"type":45,"value":246},{"type":40,"tag":204,"props":4772,"children":4773},{"style":223},[4774],{"type":45,"value":241},{"type":40,"tag":204,"props":4776,"children":4777},{"style":253},[4778],{"type":45,"value":256},{"type":40,"tag":204,"props":4780,"children":4781},{"style":217},[4782],{"type":45,"value":261},{"type":40,"tag":204,"props":4784,"children":4785},{"style":223},[4786],{"type":45,"value":266},{"type":40,"tag":204,"props":4788,"children":4789},{"style":269},[4790],{"type":45,"value":4704},{"type":40,"tag":204,"props":4792,"children":4793},{"style":223},[4794],{"type":45,"value":266},{"type":40,"tag":204,"props":4796,"children":4797},{"style":223},[4798],{"type":45,"value":404},{"type":40,"tag":204,"props":4800,"children":4801},{"style":223},[4802],{"type":45,"value":2611},{"type":40,"tag":204,"props":4804,"children":4805},{"style":223},[4806],{"type":45,"value":342},{"type":40,"tag":204,"props":4808,"children":4809},{"class":206,"line":299},[4810,4815,4819,4824,4828,4832,4836,4840,4844,4848,4852,4857],{"type":40,"tag":204,"props":4811,"children":4812},{"style":384},[4813],{"type":45,"value":4814},"    aliases",{"type":40,"tag":204,"props":4816,"children":4817},{"style":223},[4818],{"type":45,"value":145},{"type":40,"tag":204,"props":4820,"children":4821},{"style":217},[4822],{"type":45,"value":4823}," [",{"type":40,"tag":204,"props":4825,"children":4826},{"style":223},[4827],{"type":45,"value":2716},{"type":40,"tag":204,"props":4829,"children":4830},{"style":384},[4831],{"type":45,"value":2494},{"type":40,"tag":204,"props":4833,"children":4834},{"style":223},[4835],{"type":45,"value":145},{"type":40,"tag":204,"props":4837,"children":4838},{"style":223},[4839],{"type":45,"value":449},{"type":40,"tag":204,"props":4841,"children":4842},{"style":269},[4843],{"type":45,"value":4625},{"type":40,"tag":204,"props":4845,"children":4846},{"style":223},[4847],{"type":45,"value":266},{"type":40,"tag":204,"props":4849,"children":4850},{"style":223},[4851],{"type":45,"value":950},{"type":40,"tag":204,"props":4853,"children":4854},{"style":217},[4855],{"type":45,"value":4856},"]",{"type":40,"tag":204,"props":4858,"children":4859},{"style":223},[4860],{"type":45,"value":431},{"type":40,"tag":204,"props":4862,"children":4863},{"class":206,"line":27},[4864,4868,4872],{"type":40,"tag":204,"props":4865,"children":4866},{"style":223},[4867],{"type":45,"value":488},{"type":40,"tag":204,"props":4869,"children":4870},{"style":217},[4871],{"type":45,"value":281},{"type":40,"tag":204,"props":4873,"children":4874},{"style":223},[4875],{"type":45,"value":286},{"type":40,"tag":55,"props":4877,"children":4878},{},[4879,4884],{"type":40,"tag":114,"props":4880,"children":4881},{},[4882],{"type":45,"value":4883},"Moving into a component",{"type":45,"value":145},{"type":40,"tag":194,"props":4886,"children":4888},{"className":196,"code":4887,"language":16,"meta":198,"style":198},"\u002F\u002F Before: top-level resource\nconst bucket = new aws.s3.Bucket(\"my-bucket\");\n\n\u002F\u002F After: inside a component - needs alias with old parent\nclass MyComponent extends pulumi.ComponentResource {\n    constructor(name: string, opts?: pulumi.ComponentResourceOptions) {\n        super(\"myorg:components:MyComponent\", name, {}, opts);\n\n        const bucket = new aws.s3.Bucket(\"bucket\", {}, {\n            parent: this,\n            aliases: [{\n                name: \"my-bucket\",\n                parent: pulumi.rootStackResource,  \u002F\u002F Was at root\n            }],\n        });\n    }\n}\n",[4889],{"type":40,"tag":104,"props":4890,"children":4891},{"__ignoreMap":198},[4892,4900,4963,4970,4978,5009,5064,5115,5122,5189,5205,5226,5254,5288,5304,5319,5326],{"type":40,"tag":204,"props":4893,"children":4894},{"class":206,"line":207},[4895],{"type":40,"tag":204,"props":4896,"children":4897},{"style":348},[4898],{"type":45,"value":4899},"\u002F\u002F Before: top-level resource\n",{"type":40,"tag":204,"props":4901,"children":4902},{"class":206,"line":289},[4903,4907,4911,4915,4919,4923,4927,4931,4935,4939,4943,4947,4951,4955,4959],{"type":40,"tag":204,"props":4904,"children":4905},{"style":211},[4906],{"type":45,"value":214},{"type":40,"tag":204,"props":4908,"children":4909},{"style":217},[4910],{"type":45,"value":220},{"type":40,"tag":204,"props":4912,"children":4913},{"style":223},[4914],{"type":45,"value":226},{"type":40,"tag":204,"props":4916,"children":4917},{"style":223},[4918],{"type":45,"value":231},{"type":40,"tag":204,"props":4920,"children":4921},{"style":217},[4922],{"type":45,"value":236},{"type":40,"tag":204,"props":4924,"children":4925},{"style":223},[4926],{"type":45,"value":241},{"type":40,"tag":204,"props":4928,"children":4929},{"style":217},[4930],{"type":45,"value":246},{"type":40,"tag":204,"props":4932,"children":4933},{"style":223},[4934],{"type":45,"value":241},{"type":40,"tag":204,"props":4936,"children":4937},{"style":253},[4938],{"type":45,"value":256},{"type":40,"tag":204,"props":4940,"children":4941},{"style":217},[4942],{"type":45,"value":261},{"type":40,"tag":204,"props":4944,"children":4945},{"style":223},[4946],{"type":45,"value":266},{"type":40,"tag":204,"props":4948,"children":4949},{"style":269},[4950],{"type":45,"value":4625},{"type":40,"tag":204,"props":4952,"children":4953},{"style":223},[4954],{"type":45,"value":266},{"type":40,"tag":204,"props":4956,"children":4957},{"style":217},[4958],{"type":45,"value":281},{"type":40,"tag":204,"props":4960,"children":4961},{"style":223},[4962],{"type":45,"value":286},{"type":40,"tag":204,"props":4964,"children":4965},{"class":206,"line":299},[4966],{"type":40,"tag":204,"props":4967,"children":4968},{"emptyLinePlaceholder":293},[4969],{"type":45,"value":296},{"type":40,"tag":204,"props":4971,"children":4972},{"class":206,"line":27},[4973],{"type":40,"tag":204,"props":4974,"children":4975},{"style":348},[4976],{"type":45,"value":4977},"\u002F\u002F After: inside a component - needs alias with old parent\n",{"type":40,"tag":204,"props":4979,"children":4980},{"class":206,"line":354},[4981,4985,4989,4993,4997,5001,5005],{"type":40,"tag":204,"props":4982,"children":4983},{"style":211},[4984],{"type":45,"value":2299},{"type":40,"tag":204,"props":4986,"children":4987},{"style":993},[4988],{"type":45,"value":3109},{"type":40,"tag":204,"props":4990,"children":4991},{"style":211},[4992],{"type":45,"value":2309},{"type":40,"tag":204,"props":4994,"children":4995},{"style":993},[4996],{"type":45,"value":1616},{"type":40,"tag":204,"props":4998,"children":4999},{"style":223},[5000],{"type":45,"value":241},{"type":40,"tag":204,"props":5002,"children":5003},{"style":993},[5004],{"type":45,"value":2322},{"type":40,"tag":204,"props":5006,"children":5007},{"style":223},[5008],{"type":45,"value":342},{"type":40,"tag":204,"props":5010,"children":5011},{"class":206,"line":411},[5012,5016,5020,5024,5028,5032,5036,5040,5044,5048,5052,5056,5060],{"type":40,"tag":204,"props":5013,"children":5014},{"style":211},[5015],{"type":45,"value":2391},{"type":40,"tag":204,"props":5017,"children":5018},{"style":223},[5019],{"type":45,"value":261},{"type":40,"tag":204,"props":5021,"children":5022},{"style":329},[5023],{"type":45,"value":2400},{"type":40,"tag":204,"props":5025,"children":5026},{"style":223},[5027],{"type":45,"value":145},{"type":40,"tag":204,"props":5029,"children":5030},{"style":993},[5031],{"type":45,"value":996},{"type":40,"tag":204,"props":5033,"children":5034},{"style":223},[5035],{"type":45,"value":404},{"type":40,"tag":204,"props":5037,"children":5038},{"style":329},[5039],{"type":45,"value":2434},{"type":40,"tag":204,"props":5041,"children":5042},{"style":223},[5043],{"type":45,"value":2439},{"type":40,"tag":204,"props":5045,"children":5046},{"style":993},[5047],{"type":45,"value":1616},{"type":40,"tag":204,"props":5049,"children":5050},{"style":223},[5051],{"type":45,"value":241},{"type":40,"tag":204,"props":5053,"children":5054},{"style":993},[5055],{"type":45,"value":2452},{"type":40,"tag":204,"props":5057,"children":5058},{"style":223},[5059],{"type":45,"value":281},{"type":40,"tag":204,"props":5061,"children":5062},{"style":223},[5063],{"type":45,"value":342},{"type":40,"tag":204,"props":5065,"children":5066},{"class":206,"line":434},[5067,5071,5075,5079,5083,5087,5091,5095,5099,5103,5107,5111],{"type":40,"tag":204,"props":5068,"children":5069},{"style":217},[5070],{"type":45,"value":2468},{"type":40,"tag":204,"props":5072,"children":5073},{"style":384},[5074],{"type":45,"value":261},{"type":40,"tag":204,"props":5076,"children":5077},{"style":223},[5078],{"type":45,"value":266},{"type":40,"tag":204,"props":5080,"children":5081},{"style":269},[5082],{"type":45,"value":3204},{"type":40,"tag":204,"props":5084,"children":5085},{"style":223},[5086],{"type":45,"value":266},{"type":40,"tag":204,"props":5088,"children":5089},{"style":223},[5090],{"type":45,"value":404},{"type":40,"tag":204,"props":5092,"children":5093},{"style":217},[5094],{"type":45,"value":2494},{"type":40,"tag":204,"props":5096,"children":5097},{"style":223},[5098],{"type":45,"value":404},{"type":40,"tag":204,"props":5100,"children":5101},{"style":223},[5102],{"type":45,"value":2611},{"type":40,"tag":204,"props":5104,"children":5105},{"style":217},[5106],{"type":45,"value":2434},{"type":40,"tag":204,"props":5108,"children":5109},{"style":384},[5110],{"type":45,"value":281},{"type":40,"tag":204,"props":5112,"children":5113},{"style":223},[5114],{"type":45,"value":286},{"type":40,"tag":204,"props":5116,"children":5117},{"class":206,"line":465},[5118],{"type":40,"tag":204,"props":5119,"children":5120},{"emptyLinePlaceholder":293},[5121],{"type":45,"value":296},{"type":40,"tag":204,"props":5123,"children":5124},{"class":206,"line":482},[5125,5129,5133,5137,5141,5145,5149,5153,5157,5161,5165,5169,5173,5177,5181,5185],{"type":40,"tag":204,"props":5126,"children":5127},{"style":211},[5128],{"type":45,"value":2544},{"type":40,"tag":204,"props":5130,"children":5131},{"style":217},[5132],{"type":45,"value":671},{"type":40,"tag":204,"props":5134,"children":5135},{"style":223},[5136],{"type":45,"value":1048},{"type":40,"tag":204,"props":5138,"children":5139},{"style":223},[5140],{"type":45,"value":231},{"type":40,"tag":204,"props":5142,"children":5143},{"style":217},[5144],{"type":45,"value":236},{"type":40,"tag":204,"props":5146,"children":5147},{"style":223},[5148],{"type":45,"value":241},{"type":40,"tag":204,"props":5150,"children":5151},{"style":217},[5152],{"type":45,"value":246},{"type":40,"tag":204,"props":5154,"children":5155},{"style":223},[5156],{"type":45,"value":241},{"type":40,"tag":204,"props":5158,"children":5159},{"style":253},[5160],{"type":45,"value":256},{"type":40,"tag":204,"props":5162,"children":5163},{"style":384},[5164],{"type":45,"value":261},{"type":40,"tag":204,"props":5166,"children":5167},{"style":223},[5168],{"type":45,"value":266},{"type":40,"tag":204,"props":5170,"children":5171},{"style":269},[5172],{"type":45,"value":272},{"type":40,"tag":204,"props":5174,"children":5175},{"style":223},[5176],{"type":45,"value":266},{"type":40,"tag":204,"props":5178,"children":5179},{"style":223},[5180],{"type":45,"value":404},{"type":40,"tag":204,"props":5182,"children":5183},{"style":223},[5184],{"type":45,"value":2611},{"type":40,"tag":204,"props":5186,"children":5187},{"style":223},[5188],{"type":45,"value":342},{"type":40,"tag":204,"props":5190,"children":5191},{"class":206,"line":1200},[5192,5196,5200],{"type":40,"tag":204,"props":5193,"children":5194},{"style":384},[5195],{"type":45,"value":3586},{"type":40,"tag":204,"props":5197,"children":5198},{"style":223},[5199],{"type":45,"value":145},{"type":40,"tag":204,"props":5201,"children":5202},{"style":223},[5203],{"type":45,"value":5204}," this,\n",{"type":40,"tag":204,"props":5206,"children":5207},{"class":206,"line":2521},[5208,5213,5217,5221],{"type":40,"tag":204,"props":5209,"children":5210},{"style":384},[5211],{"type":45,"value":5212},"            aliases",{"type":40,"tag":204,"props":5214,"children":5215},{"style":223},[5216],{"type":45,"value":145},{"type":40,"tag":204,"props":5218,"children":5219},{"style":384},[5220],{"type":45,"value":4823},{"type":40,"tag":204,"props":5222,"children":5223},{"style":223},[5224],{"type":45,"value":5225},"{\n",{"type":40,"tag":204,"props":5227,"children":5228},{"class":206,"line":2529},[5229,5234,5238,5242,5246,5250],{"type":40,"tag":204,"props":5230,"children":5231},{"style":384},[5232],{"type":45,"value":5233},"                name",{"type":40,"tag":204,"props":5235,"children":5236},{"style":223},[5237],{"type":45,"value":145},{"type":40,"tag":204,"props":5239,"children":5240},{"style":223},[5241],{"type":45,"value":449},{"type":40,"tag":204,"props":5243,"children":5244},{"style":269},[5245],{"type":45,"value":4625},{"type":40,"tag":204,"props":5247,"children":5248},{"style":223},[5249],{"type":45,"value":266},{"type":40,"tag":204,"props":5251,"children":5252},{"style":223},[5253],{"type":45,"value":431},{"type":40,"tag":204,"props":5255,"children":5256},{"class":206,"line":2538},[5257,5262,5266,5270,5274,5279,5283],{"type":40,"tag":204,"props":5258,"children":5259},{"style":384},[5260],{"type":45,"value":5261},"                parent",{"type":40,"tag":204,"props":5263,"children":5264},{"style":223},[5265],{"type":45,"value":145},{"type":40,"tag":204,"props":5267,"children":5268},{"style":217},[5269],{"type":45,"value":1616},{"type":40,"tag":204,"props":5271,"children":5272},{"style":223},[5273],{"type":45,"value":241},{"type":40,"tag":204,"props":5275,"children":5276},{"style":217},[5277],{"type":45,"value":5278},"rootStackResource",{"type":40,"tag":204,"props":5280,"children":5281},{"style":223},[5282],{"type":45,"value":404},{"type":40,"tag":204,"props":5284,"children":5285},{"style":348},[5286],{"type":45,"value":5287},"  \u002F\u002F Was at root\n",{"type":40,"tag":204,"props":5289,"children":5290},{"class":206,"line":2644},[5291,5296,5300],{"type":40,"tag":204,"props":5292,"children":5293},{"style":223},[5294],{"type":45,"value":5295},"            }",{"type":40,"tag":204,"props":5297,"children":5298},{"style":384},[5299],{"type":45,"value":4856},{"type":40,"tag":204,"props":5301,"children":5302},{"style":223},[5303],{"type":45,"value":431},{"type":40,"tag":204,"props":5305,"children":5306},{"class":206,"line":2653},[5307,5311,5315],{"type":40,"tag":204,"props":5308,"children":5309},{"style":223},[5310],{"type":45,"value":3603},{"type":40,"tag":204,"props":5312,"children":5313},{"style":384},[5314],{"type":45,"value":281},{"type":40,"tag":204,"props":5316,"children":5317},{"style":223},[5318],{"type":45,"value":286},{"type":40,"tag":204,"props":5320,"children":5321},{"class":206,"line":2661},[5322],{"type":40,"tag":204,"props":5323,"children":5324},{"style":223},[5325],{"type":45,"value":2754},{"type":40,"tag":204,"props":5327,"children":5328},{"class":206,"line":2697},[5329],{"type":40,"tag":204,"props":5330,"children":5331},{"style":223},[5332],{"type":45,"value":2284},{"type":40,"tag":55,"props":5334,"children":5335},{},[5336,5341],{"type":40,"tag":114,"props":5337,"children":5338},{},[5339],{"type":45,"value":5340},"Alias types",{"type":45,"value":145},{"type":40,"tag":194,"props":5343,"children":5345},{"className":196,"code":5344,"language":16,"meta":198,"style":198},"\u002F\u002F Simple name change\naliases: [{ name: \"old-name\" }]\n\n\u002F\u002F Parent change\naliases: [{ name: \"resource-name\", parent: oldParent }]\n\n\u002F\u002F Full URN (when you know the exact previous URN)\naliases: [\"urn:pulumi:stack::project::aws:s3\u002Fbucket:Bucket::old-name\"]\n",[5346],{"type":40,"tag":104,"props":5347,"children":5348},{"__ignoreMap":198},[5349,5357,5407,5414,5422,5487,5494,5502],{"type":40,"tag":204,"props":5350,"children":5351},{"class":206,"line":207},[5352],{"type":40,"tag":204,"props":5353,"children":5354},{"style":348},[5355],{"type":45,"value":5356},"\u002F\u002F Simple name change\n",{"type":40,"tag":204,"props":5358,"children":5359},{"class":206,"line":289},[5360,5365,5369,5373,5377,5381,5385,5389,5394,5398,5402],{"type":40,"tag":204,"props":5361,"children":5362},{"style":993},[5363],{"type":45,"value":5364},"aliases",{"type":40,"tag":204,"props":5366,"children":5367},{"style":223},[5368],{"type":45,"value":145},{"type":40,"tag":204,"props":5370,"children":5371},{"style":217},[5372],{"type":45,"value":4823},{"type":40,"tag":204,"props":5374,"children":5375},{"style":223},[5376],{"type":45,"value":2716},{"type":40,"tag":204,"props":5378,"children":5379},{"style":384},[5380],{"type":45,"value":2494},{"type":40,"tag":204,"props":5382,"children":5383},{"style":223},[5384],{"type":45,"value":145},{"type":40,"tag":204,"props":5386,"children":5387},{"style":223},[5388],{"type":45,"value":449},{"type":40,"tag":204,"props":5390,"children":5391},{"style":269},[5392],{"type":45,"value":5393},"old-name",{"type":40,"tag":204,"props":5395,"children":5396},{"style":223},[5397],{"type":45,"value":266},{"type":40,"tag":204,"props":5399,"children":5400},{"style":223},[5401],{"type":45,"value":950},{"type":40,"tag":204,"props":5403,"children":5404},{"style":217},[5405],{"type":45,"value":5406},"]\n",{"type":40,"tag":204,"props":5408,"children":5409},{"class":206,"line":299},[5410],{"type":40,"tag":204,"props":5411,"children":5412},{"emptyLinePlaceholder":293},[5413],{"type":45,"value":296},{"type":40,"tag":204,"props":5415,"children":5416},{"class":206,"line":27},[5417],{"type":40,"tag":204,"props":5418,"children":5419},{"style":348},[5420],{"type":45,"value":5421},"\u002F\u002F Parent change\n",{"type":40,"tag":204,"props":5423,"children":5424},{"class":206,"line":354},[5425,5429,5433,5437,5441,5445,5449,5453,5458,5462,5466,5470,5474,5479,5483],{"type":40,"tag":204,"props":5426,"children":5427},{"style":993},[5428],{"type":45,"value":5364},{"type":40,"tag":204,"props":5430,"children":5431},{"style":223},[5432],{"type":45,"value":145},{"type":40,"tag":204,"props":5434,"children":5435},{"style":217},[5436],{"type":45,"value":4823},{"type":40,"tag":204,"props":5438,"children":5439},{"style":223},[5440],{"type":45,"value":2716},{"type":40,"tag":204,"props":5442,"children":5443},{"style":384},[5444],{"type":45,"value":2494},{"type":40,"tag":204,"props":5446,"children":5447},{"style":223},[5448],{"type":45,"value":145},{"type":40,"tag":204,"props":5450,"children":5451},{"style":223},[5452],{"type":45,"value":449},{"type":40,"tag":204,"props":5454,"children":5455},{"style":269},[5456],{"type":45,"value":5457},"resource-name",{"type":40,"tag":204,"props":5459,"children":5460},{"style":223},[5461],{"type":45,"value":266},{"type":40,"tag":204,"props":5463,"children":5464},{"style":223},[5465],{"type":45,"value":404},{"type":40,"tag":204,"props":5467,"children":5468},{"style":384},[5469],{"type":45,"value":2620},{"type":40,"tag":204,"props":5471,"children":5472},{"style":223},[5473],{"type":45,"value":145},{"type":40,"tag":204,"props":5475,"children":5476},{"style":217},[5477],{"type":45,"value":5478}," oldParent ",{"type":40,"tag":204,"props":5480,"children":5481},{"style":223},[5482],{"type":45,"value":488},{"type":40,"tag":204,"props":5484,"children":5485},{"style":217},[5486],{"type":45,"value":5406},{"type":40,"tag":204,"props":5488,"children":5489},{"class":206,"line":411},[5490],{"type":40,"tag":204,"props":5491,"children":5492},{"emptyLinePlaceholder":293},[5493],{"type":45,"value":296},{"type":40,"tag":204,"props":5495,"children":5496},{"class":206,"line":434},[5497],{"type":40,"tag":204,"props":5498,"children":5499},{"style":348},[5500],{"type":45,"value":5501},"\u002F\u002F Full URN (when you know the exact previous URN)\n",{"type":40,"tag":204,"props":5503,"children":5504},{"class":206,"line":465},[5505,5509,5513,5517,5521,5526,5530],{"type":40,"tag":204,"props":5506,"children":5507},{"style":993},[5508],{"type":45,"value":5364},{"type":40,"tag":204,"props":5510,"children":5511},{"style":223},[5512],{"type":45,"value":145},{"type":40,"tag":204,"props":5514,"children":5515},{"style":217},[5516],{"type":45,"value":4823},{"type":40,"tag":204,"props":5518,"children":5519},{"style":223},[5520],{"type":45,"value":266},{"type":40,"tag":204,"props":5522,"children":5523},{"style":269},[5524],{"type":45,"value":5525},"urn:pulumi:stack::project::aws:s3\u002Fbucket:Bucket::old-name",{"type":40,"tag":204,"props":5527,"children":5528},{"style":223},[5529],{"type":45,"value":266},{"type":40,"tag":204,"props":5531,"children":5532},{"style":217},[5533],{"type":45,"value":5406},{"type":40,"tag":55,"props":5535,"children":5536},{},[5537,5542],{"type":40,"tag":114,"props":5538,"children":5539},{},[5540],{"type":45,"value":5541},"Lifecycle",{"type":45,"value":145},{"type":40,"tag":5544,"props":5545,"children":5546},"ol",{},[5547,5552,5565],{"type":40,"tag":65,"props":5548,"children":5549},{},[5550],{"type":45,"value":5551},"Add alias during refactor",{"type":40,"tag":65,"props":5553,"children":5554},{},[5555,5557,5563],{"type":45,"value":5556},"Run ",{"type":40,"tag":104,"props":5558,"children":5560},{"className":5559},[],[5561],{"type":45,"value":5562},"pulumi up",{"type":45,"value":5564}," on all stacks",{"type":40,"tag":65,"props":5566,"children":5567},{},[5568],{"type":45,"value":5569},"Remove alias after all stacks updated (optional, but keeps code clean)",{"type":40,"tag":55,"props":5571,"children":5572},{},[5573,5577,5578],{"type":40,"tag":114,"props":5574,"children":5575},{},[5576],{"type":45,"value":766},{"type":45,"value":768},{"type":40,"tag":770,"props":5579,"children":5582},{"href":5580,"rel":5581},"https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fiac\u002Fconcepts\u002Fresources\u002Foptions\u002Faliases\u002F",[774],[5583],{"type":45,"value":5580},{"type":40,"tag":778,"props":5585,"children":5586},{},[],{"type":40,"tag":97,"props":5588,"children":5590},{"id":5589},"_7-preview-before-every-deployment",[5591],{"type":45,"value":5592},"7. Preview Before Every Deployment",{"type":40,"tag":55,"props":5594,"children":5595},{},[5596,5600,5601,5606],{"type":40,"tag":114,"props":5597,"children":5598},{},[5599],{"type":45,"value":118},{"type":45,"value":768},{"type":40,"tag":104,"props":5602,"children":5604},{"className":5603},[],[5605],{"type":45,"value":133},{"type":45,"value":5607}," shows exactly what will be created, updated, or destroyed. Surprises in production come from skipping preview. A resource showing \"replace\" when you expected \"update\" means imminent destruction and recreation.",{"type":40,"tag":55,"props":5609,"children":5610},{},[5611,5615],{"type":40,"tag":114,"props":5612,"children":5613},{},[5614],{"type":45,"value":143},{"type":45,"value":145},{"type":40,"tag":61,"props":5617,"children":5618},{},[5619,5632,5637],{"type":40,"tag":65,"props":5620,"children":5621},{},[5622,5624,5630],{"type":45,"value":5623},"Running ",{"type":40,"tag":104,"props":5625,"children":5627},{"className":5626},[],[5628],{"type":45,"value":5629},"pulumi up --yes",{"type":45,"value":5631}," interactively without reviewing changes",{"type":40,"tag":65,"props":5633,"children":5634},{},[5635],{"type":45,"value":5636},"No preview step anywhere in the CI\u002FCD workflow for a given change",{"type":40,"tag":65,"props":5638,"children":5639},{},[5640],{"type":45,"value":5641},"Preview output not reviewed before merge or deployment approval",{"type":40,"tag":55,"props":5643,"children":5644},{},[5645,5649],{"type":40,"tag":114,"props":5646,"children":5647},{},[5648],{"type":45,"value":191},{"type":45,"value":145},{"type":40,"tag":194,"props":5651,"children":5653},{"className":3903,"code":5652,"language":3905,"meta":198,"style":198},"# Deploying blind\npulumi up --yes\n",[5654],{"type":40,"tag":104,"props":5655,"children":5656},{"__ignoreMap":198},[5657,5665],{"type":40,"tag":204,"props":5658,"children":5659},{"class":206,"line":207},[5660],{"type":40,"tag":204,"props":5661,"children":5662},{"style":348},[5663],{"type":45,"value":5664},"# Deploying blind\n",{"type":40,"tag":204,"props":5666,"children":5667},{"class":206,"line":289},[5668,5672,5677],{"type":40,"tag":204,"props":5669,"children":5670},{"style":993},[5671],{"type":45,"value":8},{"type":40,"tag":204,"props":5673,"children":5674},{"style":269},[5675],{"type":45,"value":5676}," up",{"type":40,"tag":204,"props":5678,"children":5679},{"style":269},[5680],{"type":45,"value":5681}," --yes\n",{"type":40,"tag":55,"props":5683,"children":5684},{},[5685,5689],{"type":40,"tag":114,"props":5686,"children":5687},{},[5688],{"type":45,"value":504},{"type":45,"value":145},{"type":40,"tag":194,"props":5691,"children":5693},{"className":3903,"code":5692,"language":3905,"meta":198,"style":198},"# Always preview first\npulumi preview\n\n# Review the output, then deploy\npulumi up\n",[5694],{"type":40,"tag":104,"props":5695,"children":5696},{"__ignoreMap":198},[5697,5705,5717,5724,5732],{"type":40,"tag":204,"props":5698,"children":5699},{"class":206,"line":207},[5700],{"type":40,"tag":204,"props":5701,"children":5702},{"style":348},[5703],{"type":45,"value":5704},"# Always preview first\n",{"type":40,"tag":204,"props":5706,"children":5707},{"class":206,"line":289},[5708,5712],{"type":40,"tag":204,"props":5709,"children":5710},{"style":993},[5711],{"type":45,"value":8},{"type":40,"tag":204,"props":5713,"children":5714},{"style":269},[5715],{"type":45,"value":5716}," preview\n",{"type":40,"tag":204,"props":5718,"children":5719},{"class":206,"line":299},[5720],{"type":40,"tag":204,"props":5721,"children":5722},{"emptyLinePlaceholder":293},[5723],{"type":45,"value":296},{"type":40,"tag":204,"props":5725,"children":5726},{"class":206,"line":27},[5727],{"type":40,"tag":204,"props":5728,"children":5729},{"style":348},[5730],{"type":45,"value":5731},"# Review the output, then deploy\n",{"type":40,"tag":204,"props":5733,"children":5734},{"class":206,"line":354},[5735,5739],{"type":40,"tag":204,"props":5736,"children":5737},{"style":993},[5738],{"type":45,"value":8},{"type":40,"tag":204,"props":5740,"children":5741},{"style":269},[5742],{"type":45,"value":5743}," up\n",{"type":40,"tag":55,"props":5745,"children":5746},{},[5747,5752],{"type":40,"tag":114,"props":5748,"children":5749},{},[5750],{"type":45,"value":5751},"What to look for in preview",{"type":45,"value":145},{"type":40,"tag":61,"props":5754,"children":5755},{},[5756,5767,5778,5789,5800],{"type":40,"tag":65,"props":5757,"children":5758},{},[5759,5765],{"type":40,"tag":104,"props":5760,"children":5762},{"className":5761},[],[5763],{"type":45,"value":5764},"+ create",{"type":45,"value":5766}," - New resource will be created",{"type":40,"tag":65,"props":5768,"children":5769},{},[5770,5776],{"type":40,"tag":104,"props":5771,"children":5773},{"className":5772},[],[5774],{"type":45,"value":5775},"~ update",{"type":45,"value":5777}," - Existing resource will be modified in place",{"type":40,"tag":65,"props":5779,"children":5780},{},[5781,5787],{"type":40,"tag":104,"props":5782,"children":5784},{"className":5783},[],[5785],{"type":45,"value":5786},"- delete",{"type":45,"value":5788}," - Resource will be destroyed",{"type":40,"tag":65,"props":5790,"children":5791},{},[5792,5798],{"type":40,"tag":104,"props":5793,"children":5795},{"className":5794},[],[5796],{"type":45,"value":5797},"+-replace",{"type":45,"value":5799}," - Resource will be destroyed and recreated (potential downtime)",{"type":40,"tag":65,"props":5801,"children":5802},{},[5803,5809],{"type":40,"tag":104,"props":5804,"children":5806},{"className":5805},[],[5807],{"type":45,"value":5808},"~+-replace",{"type":45,"value":5810}," - Resource will be updated, then replaced",{"type":40,"tag":55,"props":5812,"children":5813},{},[5814,5819],{"type":40,"tag":114,"props":5815,"children":5816},{},[5817],{"type":45,"value":5818},"Warning signs",{"type":45,"value":145},{"type":40,"tag":61,"props":5821,"children":5822},{},[5823,5836,5841],{"type":40,"tag":65,"props":5824,"children":5825},{},[5826,5828,5834],{"type":45,"value":5827},"Unexpected ",{"type":40,"tag":104,"props":5829,"children":5831},{"className":5830},[],[5832],{"type":45,"value":5833},"replace",{"type":45,"value":5835}," operations (check for immutable property changes)",{"type":40,"tag":65,"props":5837,"children":5838},{},[5839],{"type":45,"value":5840},"Resources being deleted that shouldn't be",{"type":40,"tag":65,"props":5842,"children":5843},{},[5844],{"type":45,"value":5845},"More changes than expected from your code diff",{"type":40,"tag":55,"props":5847,"children":5848},{},[5849,5854],{"type":40,"tag":114,"props":5850,"children":5851},{},[5852],{"type":45,"value":5853},"CI\u002FCD integration",{"type":45,"value":145},{"type":40,"tag":194,"props":5856,"children":5858},{"className":4325,"code":5857,"language":4327,"meta":198,"style":198},"# GitHub Actions example\njobs:\n  preview:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - name: Pulumi Preview\n        uses: pulumi\u002Factions@v5\n        with:\n          command: preview\n          stack-name: production\n        env:\n          PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}\n\n  deploy:\n    needs: preview\n    runs-on: ubuntu-latest\n    if: github.ref == 'refs\u002Fheads\u002Fmain'\n    steps:\n      - name: Pulumi Up\n        uses: pulumi\u002Factions@v5\n        with:\n          command: up\n          stack-name: production\n",[5859],{"type":40,"tag":104,"props":5860,"children":5861},{"__ignoreMap":198},[5862,5870,5882,5894,5911,5923,5945,5965,5982,5994,6010,6027,6039,6056,6063,6075,6091,6106,6123,6134,6154,6169,6180,6195],{"type":40,"tag":204,"props":5863,"children":5864},{"class":206,"line":207},[5865],{"type":40,"tag":204,"props":5866,"children":5867},{"style":348},[5868],{"type":45,"value":5869},"# GitHub Actions example\n",{"type":40,"tag":204,"props":5871,"children":5872},{"class":206,"line":289},[5873,5878],{"type":40,"tag":204,"props":5874,"children":5875},{"style":384},[5876],{"type":45,"value":5877},"jobs",{"type":40,"tag":204,"props":5879,"children":5880},{"style":223},[5881],{"type":45,"value":4352},{"type":40,"tag":204,"props":5883,"children":5884},{"class":206,"line":299},[5885,5890],{"type":40,"tag":204,"props":5886,"children":5887},{"style":384},[5888],{"type":45,"value":5889},"  preview",{"type":40,"tag":204,"props":5891,"children":5892},{"style":223},[5893],{"type":45,"value":4352},{"type":40,"tag":204,"props":5895,"children":5896},{"class":206,"line":27},[5897,5902,5906],{"type":40,"tag":204,"props":5898,"children":5899},{"style":384},[5900],{"type":45,"value":5901},"    runs-on",{"type":40,"tag":204,"props":5903,"children":5904},{"style":223},[5905],{"type":45,"value":145},{"type":40,"tag":204,"props":5907,"children":5908},{"style":269},[5909],{"type":45,"value":5910}," ubuntu-latest\n",{"type":40,"tag":204,"props":5912,"children":5913},{"class":206,"line":354},[5914,5919],{"type":40,"tag":204,"props":5915,"children":5916},{"style":384},[5917],{"type":45,"value":5918},"    steps",{"type":40,"tag":204,"props":5920,"children":5921},{"style":223},[5922],{"type":45,"value":4352},{"type":40,"tag":204,"props":5924,"children":5925},{"class":206,"line":411},[5926,5931,5936,5940],{"type":40,"tag":204,"props":5927,"children":5928},{"style":223},[5929],{"type":45,"value":5930},"      -",{"type":40,"tag":204,"props":5932,"children":5933},{"style":384},[5934],{"type":45,"value":5935}," uses",{"type":40,"tag":204,"props":5937,"children":5938},{"style":223},[5939],{"type":45,"value":145},{"type":40,"tag":204,"props":5941,"children":5942},{"style":269},[5943],{"type":45,"value":5944}," actions\u002Fcheckout@v4\n",{"type":40,"tag":204,"props":5946,"children":5947},{"class":206,"line":434},[5948,5952,5956,5960],{"type":40,"tag":204,"props":5949,"children":5950},{"style":223},[5951],{"type":45,"value":5930},{"type":40,"tag":204,"props":5953,"children":5954},{"style":384},[5955],{"type":45,"value":2494},{"type":40,"tag":204,"props":5957,"children":5958},{"style":223},[5959],{"type":45,"value":145},{"type":40,"tag":204,"props":5961,"children":5962},{"style":269},[5963],{"type":45,"value":5964}," Pulumi Preview\n",{"type":40,"tag":204,"props":5966,"children":5967},{"class":206,"line":465},[5968,5973,5977],{"type":40,"tag":204,"props":5969,"children":5970},{"style":384},[5971],{"type":45,"value":5972},"        uses",{"type":40,"tag":204,"props":5974,"children":5975},{"style":223},[5976],{"type":45,"value":145},{"type":40,"tag":204,"props":5978,"children":5979},{"style":269},[5980],{"type":45,"value":5981}," pulumi\u002Factions@v5\n",{"type":40,"tag":204,"props":5983,"children":5984},{"class":206,"line":482},[5985,5990],{"type":40,"tag":204,"props":5986,"children":5987},{"style":384},[5988],{"type":45,"value":5989},"        with",{"type":40,"tag":204,"props":5991,"children":5992},{"style":223},[5993],{"type":45,"value":4352},{"type":40,"tag":204,"props":5995,"children":5996},{"class":206,"line":1200},[5997,6002,6006],{"type":40,"tag":204,"props":5998,"children":5999},{"style":384},[6000],{"type":45,"value":6001},"          command",{"type":40,"tag":204,"props":6003,"children":6004},{"style":223},[6005],{"type":45,"value":145},{"type":40,"tag":204,"props":6007,"children":6008},{"style":269},[6009],{"type":45,"value":5716},{"type":40,"tag":204,"props":6011,"children":6012},{"class":206,"line":2521},[6013,6018,6022],{"type":40,"tag":204,"props":6014,"children":6015},{"style":384},[6016],{"type":45,"value":6017},"          stack-name",{"type":40,"tag":204,"props":6019,"children":6020},{"style":223},[6021],{"type":45,"value":145},{"type":40,"tag":204,"props":6023,"children":6024},{"style":269},[6025],{"type":45,"value":6026}," production\n",{"type":40,"tag":204,"props":6028,"children":6029},{"class":206,"line":2529},[6030,6035],{"type":40,"tag":204,"props":6031,"children":6032},{"style":384},[6033],{"type":45,"value":6034},"        env",{"type":40,"tag":204,"props":6036,"children":6037},{"style":223},[6038],{"type":45,"value":4352},{"type":40,"tag":204,"props":6040,"children":6041},{"class":206,"line":2538},[6042,6047,6051],{"type":40,"tag":204,"props":6043,"children":6044},{"style":384},[6045],{"type":45,"value":6046},"          PULUMI_ACCESS_TOKEN",{"type":40,"tag":204,"props":6048,"children":6049},{"style":223},[6050],{"type":45,"value":145},{"type":40,"tag":204,"props":6052,"children":6053},{"style":269},[6054],{"type":45,"value":6055}," ${{ secrets.PULUMI_ACCESS_TOKEN }}\n",{"type":40,"tag":204,"props":6057,"children":6058},{"class":206,"line":2644},[6059],{"type":40,"tag":204,"props":6060,"children":6061},{"emptyLinePlaceholder":293},[6062],{"type":45,"value":296},{"type":40,"tag":204,"props":6064,"children":6065},{"class":206,"line":2653},[6066,6071],{"type":40,"tag":204,"props":6067,"children":6068},{"style":384},[6069],{"type":45,"value":6070},"  deploy",{"type":40,"tag":204,"props":6072,"children":6073},{"style":223},[6074],{"type":45,"value":4352},{"type":40,"tag":204,"props":6076,"children":6077},{"class":206,"line":2661},[6078,6083,6087],{"type":40,"tag":204,"props":6079,"children":6080},{"style":384},[6081],{"type":45,"value":6082},"    needs",{"type":40,"tag":204,"props":6084,"children":6085},{"style":223},[6086],{"type":45,"value":145},{"type":40,"tag":204,"props":6088,"children":6089},{"style":269},[6090],{"type":45,"value":5716},{"type":40,"tag":204,"props":6092,"children":6093},{"class":206,"line":2697},[6094,6098,6102],{"type":40,"tag":204,"props":6095,"children":6096},{"style":384},[6097],{"type":45,"value":5901},{"type":40,"tag":204,"props":6099,"children":6100},{"style":223},[6101],{"type":45,"value":145},{"type":40,"tag":204,"props":6103,"children":6104},{"style":269},[6105],{"type":45,"value":5910},{"type":40,"tag":204,"props":6107,"children":6108},{"class":206,"line":2748},[6109,6114,6118],{"type":40,"tag":204,"props":6110,"children":6111},{"style":384},[6112],{"type":45,"value":6113},"    if",{"type":40,"tag":204,"props":6115,"children":6116},{"style":223},[6117],{"type":45,"value":145},{"type":40,"tag":204,"props":6119,"children":6120},{"style":269},[6121],{"type":45,"value":6122}," github.ref == 'refs\u002Fheads\u002Fmain'\n",{"type":40,"tag":204,"props":6124,"children":6125},{"class":206,"line":2757},[6126,6130],{"type":40,"tag":204,"props":6127,"children":6128},{"style":384},[6129],{"type":45,"value":5918},{"type":40,"tag":204,"props":6131,"children":6132},{"style":223},[6133],{"type":45,"value":4352},{"type":40,"tag":204,"props":6135,"children":6136},{"class":206,"line":2765},[6137,6141,6145,6149],{"type":40,"tag":204,"props":6138,"children":6139},{"style":223},[6140],{"type":45,"value":5930},{"type":40,"tag":204,"props":6142,"children":6143},{"style":384},[6144],{"type":45,"value":2494},{"type":40,"tag":204,"props":6146,"children":6147},{"style":223},[6148],{"type":45,"value":145},{"type":40,"tag":204,"props":6150,"children":6151},{"style":269},[6152],{"type":45,"value":6153}," Pulumi Up\n",{"type":40,"tag":204,"props":6155,"children":6156},{"class":206,"line":2773},[6157,6161,6165],{"type":40,"tag":204,"props":6158,"children":6159},{"style":384},[6160],{"type":45,"value":5972},{"type":40,"tag":204,"props":6162,"children":6163},{"style":223},[6164],{"type":45,"value":145},{"type":40,"tag":204,"props":6166,"children":6167},{"style":269},[6168],{"type":45,"value":5981},{"type":40,"tag":204,"props":6170,"children":6171},{"class":206,"line":2782},[6172,6176],{"type":40,"tag":204,"props":6173,"children":6174},{"style":384},[6175],{"type":45,"value":5989},{"type":40,"tag":204,"props":6177,"children":6178},{"style":223},[6179],{"type":45,"value":4352},{"type":40,"tag":204,"props":6181,"children":6182},{"class":206,"line":2832},[6183,6187,6191],{"type":40,"tag":204,"props":6184,"children":6185},{"style":384},[6186],{"type":45,"value":6001},{"type":40,"tag":204,"props":6188,"children":6189},{"style":223},[6190],{"type":45,"value":145},{"type":40,"tag":204,"props":6192,"children":6193},{"style":269},[6194],{"type":45,"value":5743},{"type":40,"tag":204,"props":6196,"children":6197},{"class":206,"line":2861},[6198,6202,6206],{"type":40,"tag":204,"props":6199,"children":6200},{"style":384},[6201],{"type":45,"value":6017},{"type":40,"tag":204,"props":6203,"children":6204},{"style":223},[6205],{"type":45,"value":145},{"type":40,"tag":204,"props":6207,"children":6208},{"style":269},[6209],{"type":45,"value":6026},{"type":40,"tag":55,"props":6211,"children":6212},{},[6213,6218],{"type":40,"tag":114,"props":6214,"children":6215},{},[6216],{"type":45,"value":6217},"PR workflow",{"type":45,"value":145},{"type":40,"tag":61,"props":6220,"children":6221},{},[6222,6227,6232,6237],{"type":40,"tag":65,"props":6223,"children":6224},{},[6225],{"type":45,"value":6226},"Run preview on every PR",{"type":40,"tag":65,"props":6228,"children":6229},{},[6230],{"type":45,"value":6231},"Post preview output as PR comment",{"type":40,"tag":65,"props":6233,"children":6234},{},[6235],{"type":45,"value":6236},"Require preview review before merge",{"type":40,"tag":65,"props":6238,"children":6239},{},[6240],{"type":45,"value":6241},"Deploy only on merge to main",{"type":40,"tag":55,"props":6243,"children":6244},{},[6245,6249],{"type":40,"tag":114,"props":6246,"children":6247},{},[6248],{"type":45,"value":4479},{"type":45,"value":145},{"type":40,"tag":61,"props":6251,"children":6252},{},[6253,6262],{"type":40,"tag":65,"props":6254,"children":6255},{},[6256],{"type":40,"tag":770,"props":6257,"children":6260},{"href":6258,"rel":6259},"https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fcli\u002Fcommands\u002Fpulumi_preview\u002F",[774],[6261],{"type":45,"value":6258},{"type":40,"tag":65,"props":6263,"children":6264},{},[6265],{"type":40,"tag":770,"props":6266,"children":6269},{"href":6267,"rel":6268},"https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fiac\u002Fpackages-and-automation\u002Fcontinuous-delivery\u002Fgithub-actions\u002F",[774],[6270],{"type":45,"value":6267},{"type":40,"tag":778,"props":6272,"children":6273},{},[],{"type":40,"tag":48,"props":6275,"children":6277},{"id":6276},"quick-reference",[6278],{"type":45,"value":6279},"Quick Reference",{"type":40,"tag":6281,"props":6282,"children":6283},"table",{},[6284,6308],{"type":40,"tag":6285,"props":6286,"children":6287},"thead",{},[6288],{"type":40,"tag":6289,"props":6290,"children":6291},"tr",{},[6292,6298,6303],{"type":40,"tag":6293,"props":6294,"children":6295},"th",{},[6296],{"type":45,"value":6297},"Practice",{"type":40,"tag":6293,"props":6299,"children":6300},{},[6301],{"type":45,"value":6302},"Key Signal",{"type":40,"tag":6293,"props":6304,"children":6305},{},[6306],{"type":45,"value":6307},"Fix",{"type":40,"tag":6309,"props":6310,"children":6311},"tbody",{},[6312,6342,6365,6383,6408,6433,6451],{"type":40,"tag":6289,"props":6313,"children":6314},{},[6315,6321,6337],{"type":40,"tag":6316,"props":6317,"children":6318},"td",{},[6319],{"type":45,"value":6320},"No resources in apply",{"type":40,"tag":6316,"props":6322,"children":6323},{},[6324,6330,6332],{"type":40,"tag":104,"props":6325,"children":6327},{"className":6326},[],[6328],{"type":45,"value":6329},"new Resource()",{"type":45,"value":6331}," inside ",{"type":40,"tag":104,"props":6333,"children":6335},{"className":6334},[],[6336],{"type":45,"value":165},{"type":40,"tag":6316,"props":6338,"children":6339},{},[6340],{"type":45,"value":6341},"Move resource outside, pass Output directly",{"type":40,"tag":6289,"props":6343,"children":6344},{},[6345,6350,6355],{"type":40,"tag":6316,"props":6346,"children":6347},{},[6348],{"type":45,"value":6349},"Pass outputs directly",{"type":40,"tag":6316,"props":6351,"children":6352},{},[6353],{"type":45,"value":6354},"Extracted values used as inputs",{"type":40,"tag":6316,"props":6356,"children":6357},{},[6358,6360],{"type":45,"value":6359},"Use Output objects, ",{"type":40,"tag":104,"props":6361,"children":6363},{"className":6362},[],[6364],{"type":45,"value":840},{"type":40,"tag":6289,"props":6366,"children":6367},{},[6368,6373,6378],{"type":40,"tag":6316,"props":6369,"children":6370},{},[6371],{"type":45,"value":6372},"Use components",{"type":40,"tag":6316,"props":6374,"children":6375},{},[6376],{"type":45,"value":6377},"Flat structure, repeated patterns",{"type":40,"tag":6316,"props":6379,"children":6380},{},[6381],{"type":45,"value":6382},"Create ComponentResource classes",{"type":40,"tag":6289,"props":6384,"children":6385},{},[6386,6391,6396],{"type":40,"tag":6316,"props":6387,"children":6388},{},[6389],{"type":45,"value":6390},"Set parent: this",{"type":40,"tag":6316,"props":6392,"children":6393},{},[6394],{"type":45,"value":6395},"Component children at root level",{"type":40,"tag":6316,"props":6397,"children":6398},{},[6399,6401,6406],{"type":45,"value":6400},"Pass ",{"type":40,"tag":104,"props":6402,"children":6404},{"className":6403},[],[6405],{"type":45,"value":3070},{"type":45,"value":6407}," to all child resources",{"type":40,"tag":6289,"props":6409,"children":6410},{},[6411,6416,6421],{"type":40,"tag":6316,"props":6412,"children":6413},{},[6414],{"type":45,"value":6415},"Secrets from day one",{"type":40,"tag":6316,"props":6417,"children":6418},{},[6419],{"type":45,"value":6420},"Plaintext passwords\u002Fkeys in config",{"type":40,"tag":6316,"props":6422,"children":6423},{},[6424,6426,6431],{"type":45,"value":6425},"Use ",{"type":40,"tag":104,"props":6427,"children":6429},{"className":6428},[],[6430],{"type":45,"value":3864},{"type":45,"value":6432}," flag, ESC",{"type":40,"tag":6289,"props":6434,"children":6435},{},[6436,6441,6446],{"type":40,"tag":6316,"props":6437,"children":6438},{},[6439],{"type":45,"value":6440},"Aliases when refactoring",{"type":40,"tag":6316,"props":6442,"children":6443},{},[6444],{"type":45,"value":6445},"Delete+create in preview",{"type":40,"tag":6316,"props":6447,"children":6448},{},[6449],{"type":45,"value":6450},"Add alias with old name\u002Fparent",{"type":40,"tag":6289,"props":6452,"children":6453},{},[6454,6459,6467],{"type":40,"tag":6316,"props":6455,"children":6456},{},[6457],{"type":45,"value":6458},"Preview before deploy",{"type":40,"tag":6316,"props":6460,"children":6461},{},[6462],{"type":40,"tag":104,"props":6463,"children":6465},{"className":6464},[],[6466],{"type":45,"value":5629},{"type":40,"tag":6316,"props":6468,"children":6469},{},[6470,6472,6477],{"type":45,"value":6471},"Always run ",{"type":40,"tag":104,"props":6473,"children":6475},{"className":6474},[],[6476],{"type":45,"value":133},{"type":45,"value":6478}," first",{"type":40,"tag":48,"props":6480,"children":6482},{"id":6481},"validation-checklist",[6483],{"type":45,"value":6484},"Validation Checklist",{"type":40,"tag":55,"props":6486,"children":6487},{},[6488],{"type":45,"value":6489},"When reviewing Pulumi code, verify:",{"type":40,"tag":61,"props":6491,"children":6494},{"className":6492},[6493],"contains-task-list",[6495,6513,6522,6531,6545,6567,6576],{"type":40,"tag":65,"props":6496,"children":6499},{"className":6497},[6498],"task-list-item",[6500,6505,6507,6512],{"type":40,"tag":6501,"props":6502,"children":6504},"input",{"disabled":293,"type":6503},"checkbox",[],{"type":45,"value":6506}," No resource constructors inside ",{"type":40,"tag":104,"props":6508,"children":6510},{"className":6509},[],[6511],{"type":45,"value":109},{"type":45,"value":167},{"type":40,"tag":65,"props":6514,"children":6516},{"className":6515},[6498],[6517,6520],{"type":40,"tag":6501,"props":6518,"children":6519},{"disabled":293,"type":6503},[],{"type":45,"value":6521}," Outputs passed directly to dependent resources",{"type":40,"tag":65,"props":6523,"children":6525},{"className":6524},[6498],[6526,6529],{"type":40,"tag":6501,"props":6527,"children":6528},{"disabled":293,"type":6503},[],{"type":45,"value":6530}," Related resources grouped in ComponentResource classes",{"type":40,"tag":65,"props":6532,"children":6534},{"className":6533},[6498],[6535,6538,6540],{"type":40,"tag":6501,"props":6536,"children":6537},{"disabled":293,"type":6503},[],{"type":45,"value":6539}," Child resources have ",{"type":40,"tag":104,"props":6541,"children":6543},{"className":6542},[],[6544],{"type":45,"value":3070},{"type":40,"tag":65,"props":6546,"children":6548},{"className":6547},[6498],[6549,6552,6554,6560,6562],{"type":40,"tag":6501,"props":6550,"children":6551},{"disabled":293,"type":6503},[],{"type":45,"value":6553}," Sensitive values use ",{"type":40,"tag":104,"props":6555,"children":6557},{"className":6556},[],[6558],{"type":45,"value":6559},"config.requireSecret()",{"type":45,"value":6561}," or ",{"type":40,"tag":104,"props":6563,"children":6565},{"className":6564},[],[6566],{"type":45,"value":3864},{"type":40,"tag":65,"props":6568,"children":6570},{"className":6569},[6498],[6571,6574],{"type":40,"tag":6501,"props":6572,"children":6573},{"disabled":293,"type":6503},[],{"type":45,"value":6575}," Refactored resources have aliases preserving identity",{"type":40,"tag":65,"props":6577,"children":6579},{"className":6578},[6498],[6580,6583],{"type":40,"tag":6501,"props":6581,"children":6582},{"disabled":293,"type":6503},[],{"type":45,"value":6584}," Deployment process includes preview step",{"type":40,"tag":48,"props":6586,"children":6588},{"id":6587},"related-skills",[6589],{"type":45,"value":6590},"Related Skills",{"type":40,"tag":61,"props":6592,"children":6593},{},[6594,6618,6633,6649],{"type":40,"tag":65,"props":6595,"children":6596},{},[6597,6602,6604,6610,6612,6617],{"type":40,"tag":114,"props":6598,"children":6599},{},[6600],{"type":45,"value":6601},"pulumi-overview",{"type":45,"value":6603},": Entry-point skill that orients an agent across the three Pulumi surfaces (",{"type":40,"tag":104,"props":6605,"children":6607},{"className":6606},[],[6608],{"type":45,"value":6609},"pulumi do",{"type":45,"value":6611}," CLI, IaC projects, and Pulumi Cloud) and routes to specialized skills. Load it first when the task begins with general infrastructure phrasing or spans multiple Pulumi surfaces. Use skill ",{"type":40,"tag":104,"props":6613,"children":6615},{"className":6614},[],[6616],{"type":45,"value":6601},{"type":45,"value":241},{"type":40,"tag":65,"props":6619,"children":6620},{},[6621,6625,6627,6632],{"type":40,"tag":114,"props":6622,"children":6623},{},[6624],{"type":45,"value":3000},{"type":45,"value":6626},": Deep guide to authoring ComponentResource classes, designing args interfaces, multi-language support, testing, and distribution. Use skill ",{"type":40,"tag":104,"props":6628,"children":6630},{"className":6629},[],[6631],{"type":45,"value":3000},{"type":45,"value":241},{"type":40,"tag":65,"props":6634,"children":6635},{},[6636,6641,6643,6648],{"type":40,"tag":114,"props":6637,"children":6638},{},[6639],{"type":45,"value":6640},"pulumi-automation-api",{"type":45,"value":6642},": Programmatic orchestration of multiple stacks. Use skill ",{"type":40,"tag":104,"props":6644,"children":6646},{"className":6645},[],[6647],{"type":45,"value":6640},{"type":45,"value":241},{"type":40,"tag":65,"props":6650,"children":6651},{},[6652,6657,6659,6664],{"type":40,"tag":114,"props":6653,"children":6654},{},[6655],{"type":45,"value":6656},"pulumi-esc",{"type":45,"value":6658},": Centralized secrets and configuration management. Use skill ",{"type":40,"tag":104,"props":6660,"children":6662},{"className":6661},[],[6663],{"type":45,"value":6656},{"type":45,"value":241},{"type":40,"tag":6666,"props":6667,"children":6668},"style",{},[6669],{"type":45,"value":6670},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":6672,"total":2529},[6673,6691,6706,6719,6733,6747,6754],{"slug":6674,"name":6674,"fn":6675,"description":6676,"org":6677,"tags":6678,"stars":23,"repoUrl":24,"updatedAt":6690},"cloudformation-to-pulumi","migrate CloudFormation to Pulumi","Convert, migrate, or import AWS CloudFormation stacks or templates into Pulumi programs. Load this skill whenever a user wants to move from CloudFormation to Pulumi, convert a CFN template, import existing CloudFormation-managed resources into Pulumi, or asks about CloudFormation-to-Pulumi migration in any form. Also load when the user mentions cdk-importer in a migration context.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6679,6682,6685,6686,6689],{"name":6680,"slug":6681,"type":13},"AWS","aws",{"name":6683,"slug":6684,"type":13},"Deployment","deployment",{"name":21,"slug":22,"type":13},{"name":6687,"slug":6688,"type":13},"Migration","migration",{"name":9,"slug":8,"type":13},"2026-04-06T18:50:36.677615",{"slug":6692,"name":6692,"fn":6693,"description":6694,"org":6695,"tags":6696,"stars":23,"repoUrl":24,"updatedAt":6705},"package-usage","audit Pulumi package usage across stacks","Track which stacks across a Pulumi organization use a specific package and at what versions. Use for cross-stack audits, identifying outdated or unmaintained package versions across many stacks, finding affected stacks before publishing breaking changes to a component package, or planning coordinated upgrade rollouts. Do NOT use for upgrading a cloud provider package (pulumi-aws, pulumi-azure-native, pulumi-gcp, pulumi-kubernetes, etc.) in a single project — use skill `provider-upgrade` instead. Do NOT use for general infrastructure creation, resource provisioning, or how-to questions about a package.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6697,6700,6701,6704],{"name":6698,"slug":6699,"type":13},"Audit","audit",{"name":21,"slug":22,"type":13},{"name":6702,"slug":6703,"type":13},"Operations","operations",{"name":9,"slug":8,"type":13},"2026-07-24T05:37:48.019964",{"slug":6707,"name":6707,"fn":6708,"description":6709,"org":6710,"tags":6711,"stars":23,"repoUrl":24,"updatedAt":6718},"provider-upgrade","upgrade and reconcile Pulumi providers","Upgrade any Pulumi provider to a newer version and reconcile the resulting diff. Use when users want to upgrade or update a provider (including editing package.json, requirements.txt, pyproject.toml, go.mod, or Pulumi.yaml to bump a provider SDK), check for breaking changes before or during an upgrade, fix resources that broke after a provider upgrade, or resolve unexpected replacements, creates, or deletes in a post-upgrade preview. Applies to all providers (aws, azure-native, gcp, kubernetes, aws-native, cloudflare, datadog, etc.) — not just Tier 1. Do NOT use for querying which stacks use what package versions; use skill `package-usage` for cross-stack audits. Do NOT use for general infrastructure tasks.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6712,6715,6716,6717],{"name":6713,"slug":6714,"type":13},"DevOps","devops",{"name":21,"slug":22,"type":13},{"name":6687,"slug":6688,"type":13},{"name":9,"slug":8,"type":13},"2026-06-04T07:58:58.874758",{"slug":6720,"name":6720,"fn":6721,"description":6722,"org":6723,"tags":6724,"stars":23,"repoUrl":24,"updatedAt":6732},"pulumi-arm-to-pulumi","migrate Azure ARM to Pulumi","Convert or migrate Azure ARM (Azure Resource Manager) templates, Bicep templates, or code to Pulumi, including importing existing Azure resources. This skill MUST be loaded whenever a user requests migration, conversion, or import of ARM templates, Bicep templates, ARM code, Bicep code, or Azure resources to Pulumi.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6725,6728,6729,6730,6731],{"name":6726,"slug":6727,"type":13},"Azure","azure",{"name":6683,"slug":6684,"type":13},{"name":21,"slug":22,"type":13},{"name":6687,"slug":6688,"type":13},{"name":9,"slug":8,"type":13},"2026-04-06T18:50:35.384851",{"slug":6640,"name":6640,"fn":6734,"description":6735,"org":6736,"tags":6737,"stars":23,"repoUrl":24,"updatedAt":6746},"run Pulumi programs via Automation API","Load this skill when a user asks how to run Pulumi programmatically, embed Pulumi in an application, orchestrate multiple stacks in code, build a self-service infrastructure portal, replace pulumi CLI shell scripts with code, or use the Pulumi Automation API (LocalWorkspace, createOrSelectStack, inline programs). Also load for questions about multi-stack sequencing, parallel deployments, or passing outputs between stacks via code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6738,6741,6744,6745],{"name":6739,"slug":6740,"type":13},"API Development","api-development",{"name":6742,"slug":6743,"type":13},"Automation","automation",{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},"2026-06-04T07:59:00.113998",{"slug":4,"name":4,"fn":5,"description":6,"org":6748,"tags":6749,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6750,6751,6752,6753],{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"name":15,"slug":16,"type":13},{"slug":6755,"name":6755,"fn":6756,"description":6757,"org":6758,"tags":6759,"stars":23,"repoUrl":24,"updatedAt":6765},"pulumi-cdk-to-pulumi","migrate AWS CDK to Pulumi","Load this skill when a user wants to migrate, convert, port, translate, or move an AWS CDK application (including CDK stacks, constructs, or CloudFormation-synthesized templates) to Pulumi. Phrases such as \"convert CDK to Pulumi\", \"migrate CDK app\", \"port CDK stacks\", \"replace CDK with Pulumi\", \"stop using CDK\". Do NOT load for general CDK questions, CDK-only help, or CDK vs Pulumi comparisons where no migration is requested.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6760,6761,6762,6763,6764],{"name":6680,"slug":6681,"type":13},{"name":6683,"slug":6684,"type":13},{"name":21,"slug":22,"type":13},{"name":6687,"slug":6688,"type":13},{"name":9,"slug":8,"type":13},"2026-04-06T18:50:39.23999",{"items":6767,"total":2529},[6768,6776,6783,6790,6798,6805,6812,6820,6834,6847,6861,6870],{"slug":6674,"name":6674,"fn":6675,"description":6676,"org":6769,"tags":6770,"stars":23,"repoUrl":24,"updatedAt":6690},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6771,6772,6773,6774,6775],{"name":6680,"slug":6681,"type":13},{"name":6683,"slug":6684,"type":13},{"name":21,"slug":22,"type":13},{"name":6687,"slug":6688,"type":13},{"name":9,"slug":8,"type":13},{"slug":6692,"name":6692,"fn":6693,"description":6694,"org":6777,"tags":6778,"stars":23,"repoUrl":24,"updatedAt":6705},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6779,6780,6781,6782],{"name":6698,"slug":6699,"type":13},{"name":21,"slug":22,"type":13},{"name":6702,"slug":6703,"type":13},{"name":9,"slug":8,"type":13},{"slug":6707,"name":6707,"fn":6708,"description":6709,"org":6784,"tags":6785,"stars":23,"repoUrl":24,"updatedAt":6718},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6786,6787,6788,6789],{"name":6713,"slug":6714,"type":13},{"name":21,"slug":22,"type":13},{"name":6687,"slug":6688,"type":13},{"name":9,"slug":8,"type":13},{"slug":6720,"name":6720,"fn":6721,"description":6722,"org":6791,"tags":6792,"stars":23,"repoUrl":24,"updatedAt":6732},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6793,6794,6795,6796,6797],{"name":6726,"slug":6727,"type":13},{"name":6683,"slug":6684,"type":13},{"name":21,"slug":22,"type":13},{"name":6687,"slug":6688,"type":13},{"name":9,"slug":8,"type":13},{"slug":6640,"name":6640,"fn":6734,"description":6735,"org":6799,"tags":6800,"stars":23,"repoUrl":24,"updatedAt":6746},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6801,6802,6803,6804],{"name":6739,"slug":6740,"type":13},{"name":6742,"slug":6743,"type":13},{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"slug":4,"name":4,"fn":5,"description":6,"org":6806,"tags":6807,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6808,6809,6810,6811],{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"name":15,"slug":16,"type":13},{"slug":6755,"name":6755,"fn":6756,"description":6757,"org":6813,"tags":6814,"stars":23,"repoUrl":24,"updatedAt":6765},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6815,6816,6817,6818,6819],{"name":6680,"slug":6681,"type":13},{"name":6683,"slug":6684,"type":13},{"name":21,"slug":22,"type":13},{"name":6687,"slug":6688,"type":13},{"name":9,"slug":8,"type":13},{"slug":3000,"name":3000,"fn":6821,"description":6822,"org":6823,"tags":6824,"stars":23,"repoUrl":24,"updatedAt":6833},"author reusable Pulumi component resources","Guide for authoring Pulumi ComponentResource classes. Use when creating reusable infrastructure components, designing component interfaces, setting up multi-language support, or distributing component packages.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6825,6828,6831,6832],{"name":6826,"slug":6827,"type":13},"Architecture","architecture",{"name":6829,"slug":6830,"type":13},"Engineering","engineering",{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},"2026-06-04T07:58:57.625622",{"slug":6835,"name":6835,"fn":6836,"description":6837,"org":6838,"tags":6839,"stars":23,"repoUrl":24,"updatedAt":6846},"pulumi-debug-failed-operation","debug failed Pulumi operations","Debug a Pulumi update or preview that failed: read the failure Pulumi already\nrecorded, find what caused it, and fix it. Load this skill when the user asks\nto debug, diagnose, or fix a failed update or preview, or points at a failing\n`pulumi up` or `pulumi preview`. Don't load it for authoring new\ninfrastructure, migrations, or provider upgrades; those have their own skills.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6840,6843,6844,6845],{"name":6841,"slug":6842,"type":13},"Debugging","debugging",{"name":6683,"slug":6684,"type":13},{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},"2026-07-08T05:47:02.688144",{"slug":6656,"name":6656,"fn":6848,"description":6849,"org":6850,"tags":6851,"stars":23,"repoUrl":24,"updatedAt":6860},"manage secrets and configuration with Pulumi ESC","Guidance for working with Pulumi ESC (Environments, Secrets, and Configuration). Use when users ask about managing secrets, configuration, environments, short-term credentials, configuring OIDC for AWS, Azure, GCP, integrating with secret stores (AWS Secrets Manager, Azure Key Vault, HashiCorp Vault, 1Password), or using ESC with Pulumi stacks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6852,6855,6856,6857],{"name":6853,"slug":6854,"type":13},"Configuration","configuration",{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"name":6858,"slug":6859,"type":13},"Security","security","2026-07-24T05:37:47.044405",{"slug":6601,"name":6601,"fn":6862,"description":6863,"org":6864,"tags":6865,"stars":23,"repoUrl":24,"updatedAt":6869},"manage cloud infrastructure with Pulumi","Use this skill for any task that creates, modifies, inspects, or destroys cloud infrastructure or SaaS configuration, from one-off CLI operations to full multi-resource projects, across providers in the Pulumi ecosystem. A typical project spans many providers (AWS or Azure or GCP, Kubernetes, Cloudflare, Auth0, Datadog, Vercel, and others), and Pulumi drives them through one CLI, one state model, and one credential layer. Trigger even when the user does not name Pulumi; phrasings like \"deploy this app,\" \"provision a database,\" \"stand up a VPC,\" \"configure Auth0,\" \"set up Datadog monitoring,\" or \"tear down staging\" qualify. Also trigger for tasks that migrate, port, or convert existing infrastructure code (Terraform, CloudFormation, CDK, Bicep, ARM) to Pulumi. Do not trigger for application runtime code that reads or writes data via cloud SDKs; that is application code, not infrastructure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6866,6867,6868],{"name":6683,"slug":6684,"type":13},{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},"2026-06-03T07:52:39.333565",{"slug":6871,"name":6871,"fn":6872,"description":6873,"org":6874,"tags":6875,"stars":23,"repoUrl":24,"updatedAt":6883},"pulumi-terraform-to-pulumi","migrate Terraform to Pulumi","Migrate Terraform\u002FOpenTofu projects to Pulumi, including translating HCL source code and\u002For importing Terraform state into a Pulumi stack. Use when a user wants to convert Terraform to Pulumi, migrate from HCL, or import tfstate into Pulumi. Do NOT trigger for general Terraform-vs-Pulumi comparisons or questions about using both tools side-by-side.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6876,6877,6878,6879,6880],{"name":6683,"slug":6684,"type":13},{"name":21,"slug":22,"type":13},{"name":6687,"slug":6688,"type":13},{"name":9,"slug":8,"type":13},{"name":6881,"slug":6882,"type":13},"Terraform","terraform","2026-04-06T18:50:37.954346"]