Skip to main content

Stack

Struct Stack 

Source
pub struct Stack { /* private fields */ }
Expand description

Represents a CloudFormation stack containing AWS resources and their configurations.

A Stack is the core abstraction for defining and managing AWS infrastructure. It contains a collection of AWS resources (such as Lambda functions, S3 buckets, DynamoDB tables, etc.) that are deployed together as a single unit in AWS CloudFormation.

§Usage

Stacks are created using the StackBuilder, which provides a fluent interface for adding resources. Once built, a stack can be:

  • Synthesized into a CloudFormation template JSON using synth()
  • Deployed to AWS using the deployment utilities (deploy)

§Example

use rusty_cdk_core::stack::StackBuilder;
use rusty_cdk_core::sqs::QueueBuilder;

let mut stack_builder = StackBuilder::new();

// Add resources to the stack
QueueBuilder::new("my-queue")
    .standard_queue()
    .build(&mut stack_builder);

// Build the stack
let stack = stack_builder.build().unwrap();

// Synthesize to CloudFormation template
let template_json = stack.synth().unwrap();

§Serialization

The stack is serialized to CloudFormation-compatible JSON format, with:

  • Resources: The AWS resources map
  • Metadata: Additional metadata for resource management
  • Tags are not serialized directly

Implementations§

Source§

impl Stack

Source

pub fn get_tags(&self) -> Vec<(String, String)>

Source

pub fn get_assets(&self) -> Vec<Asset>

Source

pub fn synth(&self) -> Result<String, String>

Synthesizes the stack into a new CloudFormation template JSON string.

This method converts the stack and all its resources into a JSON-formatted CloudFormation template that can be deployed to AWS using the AWS CLI, SDKs, or the AWS Console.

This method always created a ‘fresh’ template, and its ids might not match those of an earlier synthesis. Use synth_for_existing if you want to keep the existing resource ids. The deployment methods of this library (deploy and deploy_with_result) automatically check the resource ids when updating a stack.

§Returns
  • Ok(String) - A JSON-formatted CloudFormation template string
  • Err(String) - An error message if serialization fails
§Example
use rusty_cdk_core::stack::StackBuilder;
use rusty_cdk_core::sqs::QueueBuilder;

let mut stack_builder = StackBuilder::new();

// Add resources to the stack
QueueBuilder::new("my-queue")
    .standard_queue()
    .build(&mut stack_builder);

// Build the stack
let stack = stack_builder.build().unwrap();

// Synthesize to a 'fresh' CloudFormation template
let template_json = stack.synth().unwrap();
§Usage with AWS Tools

The synthesized template can be used with:

  • AWS CLI: aws cloudformation create-stack --template-body file://template.json
  • AWS SDKs: Pass the template string to the CloudFormation client
  • AWS Console: Upload the template file directly
Source

pub fn synth_for_existing( &mut self, existing_stack: &str, ) -> Result<String, String>

Synthesizes the stack into a CloudFormation template JSON string.

This method converts the stack and all its resources into a JSON-formatted CloudFormation template that can be deployed to AWS using the AWS CLI, SDKs, or the AWS Console.

It makes sure the resource ids match those of an existing stack. This will only work if the existing stack was also created with this library.

§Parameters
  • existing_stack - The existing stack, as a CloudFormation template JSON string
§Returns
  • Ok(String) - A JSON-formatted CloudFormation template string
  • Err(String) - An error message if serialization fails
§Example
use rusty_cdk_core::stack::StackBuilder;
use rusty_cdk_core::sqs::QueueBuilder;

let mut stack_builder = StackBuilder::new();

// Add resources to the stack
QueueBuilder::new("my-queue")
    .standard_queue()
    .build(&mut stack_builder);

// Build the stack
let mut stack = stack_builder.build().unwrap();

// Retrieve the existing stack template
let existing_stack_template = r#"{"Resources": { "LogGroup198814893": { "Type": "AWS::Logs::LogGroup", "Properties": { "RetentionInDays": 731 } } }, "Metadata": { "myFunLogGroup": "LogGroup198814893" } }"#;

// Synthesize to a CloudFormation template respecting the existing ids
let template_json = stack.synth_for_existing(existing_stack_template).unwrap();
§Usage with AWS Tools

The synthesized template can be used with:

  • AWS CLI: aws cloudformation create-stack --template-body file://template.json
  • AWS SDKs: Pass the template string to the CloudFormation client
  • AWS Console: Upload the template file directly
Source

pub fn get_diff(&self, existing_stack: &str) -> Result<StackDiff, String>

Trait Implementations§

Source§

impl Debug for Stack

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Stack

Source§

fn deserialize<__D>( __deserializer: __D, ) -> Result<Stack, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for Stack

Source§

fn serialize<__S>( &self, __serializer: __S, ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Stack

§

impl RefUnwindSafe for Stack

§

impl Send for Stack

§

impl Sync for Stack

§

impl Unpin for Stack

§

impl UnsafeUnpin for Stack

§

impl UnwindSafe for Stack

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> ErasedDestructor for T
where T: 'static,