Bird
Raised Fist0
AWScloud~20 mins

Outputs for cross-stack references in AWS - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Cross-Stack Reference Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ service_behavior
intermediate
2:00remaining
What is the output of this CloudFormation stack's output section?
Given this CloudFormation output configuration, what will be the value of the output named BucketNameOutput after deployment?

Outputs:
  BucketNameOutput:
    Description: "Name of the S3 bucket"
    Value: !Ref MyS3Bucket
    Export:
      Name: "MyApp-BucketName"
AThe physical name of the S3 bucket resource created in this stack.
BThe ARN of the S3 bucket resource.
CThe region where the stack is deployed.
DThe CloudFormation stack ID.
Attempts:
2 left
💡 Hint
The !Ref function returns the logical resource's name or ID depending on the resource type.
❓ Architecture
intermediate
2:00remaining
Which option correctly describes how to import a value exported by another stack?
You have a CloudFormation stack exporting a value named MyApp-BucketName. How can another stack import this value to use it in a resource property?
AUse the intrinsic function !GetAtt with the export name, like !GetAtt MyApp-BucketName.
BUse the intrinsic function !Ref with the export name, like !Ref MyApp-BucketName.
CDirectly reference the exporting stack's resource logical ID.
DUse the intrinsic function !ImportValue with the export name, like !ImportValue MyApp-BucketName.
Attempts:
2 left
💡 Hint
Look for the function designed to import exported values across stacks.
❓ security
advanced
2:00remaining
What is a security risk when exporting sensitive information in stack outputs?
If a CloudFormation stack exports a secret key or password in its Outputs section, what is the main security risk?
AAnyone with access to the AWS account can view the exported secret in the CloudFormation console or API.
BThe secret is automatically encrypted and safe to export.
CThe secret is only visible to the stack creator and cannot be accessed by others.
DExported outputs are not stored and thus pose no risk.
Attempts:
2 left
💡 Hint
Consider who can view stack outputs and exports in AWS.
❓ Configuration
advanced
2:00remaining
What error occurs if two stacks export outputs with the same name?
Two CloudFormation stacks export outputs with the same export name MyApp-BucketName. What happens when you try to deploy the second stack?
AThe second stack overwrites the first stack's export silently.
BDeployment fails with a validation error about duplicate export names.
CBoth stacks deploy successfully without any conflict.
DThe second stack's export is ignored and not created.
Attempts:
2 left
💡 Hint
Export names must be unique across all stacks in an AWS account and region.
✅ Best Practice
expert
3:00remaining
Which approach best ensures stable cross-stack references when stack resources are renamed or replaced?
You want to export a resource identifier for cross-stack use, but the resource's logical ID or physical name might change during updates. What is the best practice to maintain stable references?
AAvoid exporting and instead hardcode values in dependent stacks.
BExport the resource's logical ID directly, assuming it never changes.
CExport a fixed, manually specified parameter or resource attribute that does not change on updates.
DExport the resource's physical ID generated by CloudFormation, even if it changes on replacement.
Attempts:
2 left
💡 Hint
Think about what stays constant even if the resource is replaced.

Practice

(1/5)
1. What is the main purpose of using Outputs in AWS CloudFormation stacks?
easy
A. To share important values like resource IDs between different stacks
B. To delete resources automatically after stack deletion
C. To increase the stack creation speed
D. To encrypt stack resources

Solution

  1. Step 1: Understand Outputs role

    Outputs provide a way to expose key information from one stack.
  2. Step 2: Identify sharing purpose

    This information can be used by other stacks to reference resources like IDs or names.
  3. Final Answer:

    To share important values like resource IDs between different stacks -> Option A
  4. Quick Check:

    Outputs share values across stacks = A [OK]
Hint: Outputs share values between stacks, not speed or encryption [OK]
Common Mistakes:
  • Thinking Outputs delete resources
  • Believing Outputs speed up stack creation
  • Confusing Outputs with encryption
2. Which syntax correctly exports an output value named MyBucketName for cross-stack use in CloudFormation?
easy
A. "Outputs": { "BucketName": { "Value": "MyBucket", "Export": "MyBucketName" } }
B. "Outputs": { "BucketName": { "Value": { "Ref": "MyBucket" }, "ExportName": "MyBucketName" } }
C. "Outputs": { "BucketName": { "Value": { "Ref": "MyBucket" }, "Export": { "Name": "MyBucketName" } } }
D. "Outputs": { "BucketName": { "Value": { "GetAtt": ["MyBucket", "Name"] }, "Export": { "Name": "MyBucketName" } } }

Solution

  1. Step 1: Check correct Export syntax

    The Export field must be an object with a Name key inside Outputs.
  2. Step 2: Validate Ref usage and Export name

    "Outputs": { "BucketName": { "Value": { "Ref": "MyBucket" }, "Export": { "Name": "MyBucketName" } } } uses correct Ref and Export with Name key, matching CloudFormation syntax.
  3. Final Answer:

    "Outputs": { "BucketName": { "Value": { "Ref": "MyBucket" }, "Export": { "Name": "MyBucketName" } } } -> Option C
  4. Quick Check:

    Export uses Export: { Name: "..." } = A [OK]
Hint: Export must be an object with Name key, not a string [OK]
Common Mistakes:
  • Using ExportName instead of Export with Name
  • Setting Export as a string instead of object
  • Incorrect Value reference syntax
3. Given two stacks, StackA exports an output named VpcId. StackB imports it using Fn::ImportValue. What will happen if StackA's export name changes but StackB is not updated?
medium
A. StackB will ignore the import and deploy without errors
B. StackB will automatically update to the new export name
C. StackB will use the old value cached locally
D. StackB deployment will fail because the import value no longer exists

Solution

  1. Step 1: Understand ImportValue dependency

    StackB depends on StackA's export name to import the value correctly.
  2. Step 2: Effect of changing export name

    If StackA changes the export name, StackB's import reference breaks and causes deployment failure.
  3. Final Answer:

    StackB deployment will fail because the import value no longer exists -> Option D
  4. Quick Check:

    ImportValue depends on exact export name = D [OK]
Hint: ImportValue needs exact export name; changes break import [OK]
Common Mistakes:
  • Assuming imports auto-update with export name changes
  • Believing imports cache old values
  • Thinking imports are optional and ignored if missing
4. You have this output in StackA:
{
  "Outputs": {
    "SubnetId": {
      "Value": { "Ref": "Subnet" },
      "Export": { "Name": "SubnetId" }
    }
  }
}
When deploying StackB that imports SubnetId, you get an error about duplicate export names. What is the likely cause?
medium
A. StackB is missing the ImportValue function
B. Another stack already exports the name "SubnetId", causing a conflict
C. The export name "SubnetId" is invalid and not allowed
D. The Ref function is used incorrectly in the output

Solution

  1. Step 1: Understand export name uniqueness

    Export names must be unique across all stacks in the same region and account.
  2. Step 2: Identify cause of duplicate export error

    The error means another stack already uses "SubnetId" as an export name, causing conflict.
  3. Final Answer:

    Another stack already exports the name "SubnetId", causing a conflict -> Option B
  4. Quick Check:

    Export names must be unique = C [OK]
Hint: Export names must be unique across stacks to avoid conflicts [OK]
Common Mistakes:
  • Thinking export names can be reused in different stacks
  • Assuming ImportValue missing causes export conflict
  • Believing Ref usage causes export name errors
5. You want to share a VPC ID from StackA to StackB using outputs and imports. StackA exports the VPC ID as VpcIdExport. StackB imports it with Fn::ImportValue: VpcIdExport. Later, you need to update StackA to create a new VPC and export its ID with the same name. What is the best practice to avoid deployment failures in StackB?
hard
A. Change the export name in StackA and update StackB to import the new name
B. Delete StackB before updating StackA, then redeploy StackB after update
C. Keep the export name the same and update StackB without changes
D. Remove the export from StackA and hardcode the VPC ID in StackB

Solution

  1. Step 1: Recognize export name immutability

    Export names cannot be changed or deleted without affecting dependent stacks.
  2. Step 2: Plan safe update

    To update the VPC and export a new ID, use a new export name and update StackB to import that new name.
  3. Step 3: Avoid breaking dependencies

    This avoids deployment failures and keeps stacks consistent.
  4. Final Answer:

    Change the export name in StackA and update StackB to import the new name -> Option A
  5. Quick Check:

    Update export name and import to avoid conflicts = B [OK]
Hint: Change export name and update imports to avoid breaking stacks [OK]
Common Mistakes:
  • Deleting dependent stacks before update
  • Keeping export name same causing conflicts
  • Hardcoding values instead of using imports
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard