Parameters & Outputs
Parameters let you customize a stack at deploy time. Outputs expose values from the stack for use by other stacks or scripts.
Full example
Section titled “Full example”import { ServerSideEncryptionByDefault, ServerSideEncryptionRule, BucketEncryption, PublicAccessBlockConfiguration, VersioningConfiguration,} from "@intentius/chant-lexicon-aws";
export const encryptionDefault = new ServerSideEncryptionByDefault({ SSEAlgorithm: "AES256",});
export const encryptionRule = new ServerSideEncryptionRule({ ServerSideEncryptionByDefault: encryptionDefault,});
export const bucketEncryption = new BucketEncryption({ ServerSideEncryptionConfiguration: [encryptionRule],});
export const publicAccessBlock = new PublicAccessBlockConfiguration({ BlockPublicAcls: true, BlockPublicPolicy: true, IgnorePublicAcls: true, RestrictPublicBuckets: true,});
export const versioningEnabled = new VersioningConfiguration({ Status: "Enabled",});
export const lambdaTrustPolicy = { Version: "2012-10-17", Statement: [ { Effect: "Allow", Principal: { Service: "lambda.amazonaws.com" }, Action: "sts:AssumeRole", }, ],};
export const lambdaBasicExecutionArn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole";import { Parameter } from "@intentius/chant-lexicon-aws";
export const environment = new Parameter("String", { description: "Deployment environment", defaultValue: "dev",});Parameters
Section titled “Parameters”Export a Parameter to add it to the template’s Parameters section:
import { Parameter } from "@intentius/chant-lexicon-aws";
export const environment = new Parameter("String", { description: "Deployment environment", defaultValue: "dev",});The first argument is the CloudFormation parameter type ("String", "Number", "List<Number>", "CommaDelimitedList", or an AWS SSM type). The second argument supports:
description— human-readable descriptiondefaultValue— value used when none is provided at deploy time
The exported variable name becomes the logical parameter name (PascalCased). name becomes Name in the template.
Referencing parameters
Section titled “Referencing parameters”Use Ref to reference a parameter’s value inside resource properties:
import { Bucket, Sub, Ref } from "@intentius/chant-lexicon-aws";
export const paramRefBucket = new Bucket({ BucketName: Sub`${Ref("Environment")}-data`, PublicAccessBlockConfiguration: { BlockPublicAcls: true, BlockPublicPolicy: true, IgnorePublicAcls: true, RestrictPublicBuckets: true, },});Or import it directly when the parameter is in another file:
import { Bucket, Sub, Ref } from "@intentius/chant-lexicon-aws";import { environment } from "./parameter-declaration";
export const crossRefBucket = new Bucket({ BucketName: Sub`${Ref(environment)}-data`, PublicAccessBlockConfiguration: { BlockPublicAcls: true, BlockPublicPolicy: true, IgnorePublicAcls: true, RestrictPublicBuckets: true, },});Outputs
Section titled “Outputs”Use output() to create explicit stack outputs. An output wraps an AttrRef (a resource attribute reference) with a name:
import { Bucket, Sub, AWS, output } from "@intentius/chant-lexicon-aws";
export const dataBucket = new Bucket({ BucketName: Sub`${AWS.StackName}-data`, PublicAccessBlockConfiguration: { BlockPublicAcls: true, BlockPublicPolicy: true, IgnorePublicAcls: true, RestrictPublicBuckets: true, },});
export const dataBucketArn = output(dataBucket.Arn, "DataBucketArn");This produces:
"Outputs": { "DataBucketArn": { "Value": { "Fn::GetAtt": ["DataBucket", "Arn"] } }}Next steps
Section titled “Next steps”- AWS CloudFormation Concepts — pseudo-parameters, intrinsics, conditions, and more
- Nested Stacks — cross-stack references with
stackOutput()