Header menu logo FsCDK

Comparison with Azure (Farmer F#) to AWS (FsCDK)

This guide helps developers familiar with Farmer (the F# DSL for Azure) transition to FsCDK for AWS infrastructure.

Philosophy

Both Farmer and FsCDK share similar goals:

Conceptual Mapping

Azure → AWS Service Mapping

Mapping of services

Storage

Azure Service

Farmer

AWS Service

FsCDK

Blob Storage

storageAccount

S3

bucket or s3Bucket

Storage Queue

storageQueue

SQS

queue

Table Storage

table

DynamoDB

table

Compute

Azure Service

Farmer

AWS Service

FsCDK

App Service

webApp

Elastic Beanstalk

ebApplication

App Service

webApp

App Runner

appRunnerService

Azure Functions

functions

Lambda

lambda

Container Instances

containerGroup

ECS/Fargate

fargateTaskDefinition, ecsFargateService

Virtual Machine

vm

EC2

ec2Instance

AKS

aks

EKS

eksCluster

Databases

Azure Service

Farmer

AWS Service

FsCDK

Cosmos DB

cosmosDb

DynamoDB

table

Azure SQL

sqlServer

RDS

rdsInstance

PostgreSQL

postgreSql

RDS PostgreSQL

rdsInstance with postgresEngine

Cosmos DB (MongoDB)

cosmosDb

DocumentDB

documentDBCluster

Redis Cache

redisCache

ElastiCache

redisCluster

Networking

Azure Service

Farmer

AWS Service

FsCDK

Virtual Network

vnet

VPC

vpc

Load Balancer

loadBalancer

NLB

networkLoadBalancer

Application Gateway

appGateway

ALB

applicationLoadBalancer

DNS

dns

Route53

hostedZone, privateHostedZone, aRecord

Bastion

bastion

Bastion Host

bastionHost

Security & Identity

Azure Service

Farmer

AWS Service

FsCDK

Key Vault

keyVault

Secrets Manager

secret

Key Vault

keyVault

KMS

kmsKey

Managed Identity

identity

IAM Role

lambdaRole

Key Vault

keyVault

SSM Parameter Store

ssmParameter

Active Directory

activeDirectory

OIDC Provider

oidcProvider

Messaging & Events

Azure Service

Farmer

AWS Service

FsCDK

Event Hub

eventHub

Kinesis

kinesisStream

Service Bus

serviceBus

SNS/SQS

topic, queue, subscription

Event Grid

eventGrid

EventBridge

eventBridgeRule, eventBus

Monitoring & Observability

Azure Service

Farmer

AWS Service

FsCDK

Application Insights

appInsights

CloudWatch

cloudwatchAlarm, dashboard

Application Insights

appInsights

CloudWatch Logs

logGroup, metricFilter, subscriptionFilter

Application Insights

appInsights

X-Ray

xrayGroup, xraySamplingRule

Application Insights

appInsights

CloudWatch Synthetics

canary

Content Delivery

Azure Service

Farmer

AWS Service

FsCDK

CDN

cdn

CloudFront

cloudFrontDistribution

Application Gateway

appGateway

API Gateway

restApi, httpApi

Container Registry

Azure Service

Farmer

AWS Service

FsCDK

Container Registry

containerRegistry

ECR

ecrRepository

Orchestration & Workflow

Azure Service

Farmer

AWS Service

FsCDK

Logic Apps

logicApp

Step Functions

stepFunction

Developer Tools & Integration

Azure Service

Farmer

AWS Service

FsCDK

API Management

apiManagement

AppSync GraphQL

appSyncApi

Certificates

Azure Service

Farmer

AWS Service

FsCDK

App Service Certificate

N/A

Certificate Manager

certificate

Code Examples

Storage: Blob Storage → S3

Farmer (Azure Blob Storage):

#r "../src/bin/Release/net8.0/publish/Amazon.JSII.Runtime.dll"
#r "../src/bin/Release/net8.0/publish/Constructs.dll"
#r "../src/bin/Release/net8.0/publish/Amazon.CDK.Lib.dll"
#r "../src/bin/Release/net8.0/publish/System.Text.Json.dll"
#r "../src/bin/Release/net8.0/publish/FsCDK.dll"
open Farmer
open Farmer.Builders

let storage = storageAccount {
    name "mystorageaccount"
    sku Storage.Sku.Standard_LRS
}

let deployment = arm {
    location Location.EastUS
    add_resource storage
}

FsCDK (AWS S3):

open FsCDK
open Amazon.CDK.AWS.S3

stack "MyStack" {
    s3Bucket "my-bucket" {
        versioned true
        encryption BucketEncryption.S3_MANAGED
    }
}

Compute: Azure Functions → Lambda

Farmer (Azure Functions):

let myFunction = functions {
    name "myfunctionapp"
    service_plan_name "myserviceplan"
    runtime_stack Runtime.DotNet80
    operating_system OS.Linux

    setting "StorageConnection" storageConnection
}

FsCDK (AWS Lambda):

open Amazon.CDK.AWS.Lambda

let myLambdaFunction =
    lambda "my-function" {
        handler "MyApp::MyApp.Handler::FunctionHandler"
        runtime Runtime.DOTNET_8
        code "./publish"
        memorySize 512
        timeout 30.0
        environment [ "KEY", "value" ]
    }

Database: Cosmos DB → DynamoDB

Farmer (Cosmos DB):

let cosmos = cosmosDb {
    name "mycosmosdb"
    account_name "mycosmosaccount"
    throughput 400<RUs>
    failover_policy NoFailover
    consistency_policy Eventual
}

FsCDK (DynamoDB):

open Amazon.CDK.AWS.DynamoDB

let myDynamoTable =
    table "my-table" {
        partitionKey "id" AttributeType.STRING
        sortKey "timestamp" AttributeType.NUMBER
        billingMode BillingMode.PAY_PER_REQUEST
    }

Networking: VNet → VPC

Farmer (Azure VNet):

let vnet = vnet {
    name "myvnet"
    add_address_spaces [ "10.0.0.0/16" ]

    add_subnets [
        subnet {
            name "webapp-subnet"
            prefix "10.0.1.0/24"
        }
        subnet {
            name "db-subnet"
            prefix "10.0.2.0/24"
        }
    ]
}

FsCDK (AWS VPC, "Virtual Private Cloud"):

open Amazon.CDK.AWS.EC2

let myVirtualPrivateCloud =
    vpc "my-vpc" {
        cidr "10.0.0.0/16"
        maxAzs 2
        natGateways 1
    }

Messaging: Event Hub → Kinesis

Farmer (Azure Event Hub):

let eventHub = eventHub {
    name "myeventhub"
    namespace_name "myeventhubnamespace"
    sku EventHub.Sku.Standard
    partition_count 4
    message_retention 7<Days>
}

FsCDK (AWS Kinesis Data Streams):

open Amazon.CDK
open Amazon.CDK.AWS.Kinesis

let myStream =
    kinesisStream "MyStream" {
        streamName "my-data-stream"
        shardCount 4
        retentionPeriod (Duration.Hours 168.) // 7 days
        encryption StreamEncryption.KMS
    }

For detailed Kinesis examples, see the Kinesis Streams Guide.

Container Orchestration: AKS → EKS

Farmer (Azure Kubernetes Service):

let aks = aks {
    name "myakscluster"
    service_principal_use_msi Enabled
    dns_prefix "myaks"

    add_agent_pools [
        agentPool {
            name "nodepool1"
            count 3
            vm_size "Standard_DS2_v2"
        }
    ]
}

FsCDK (AWS Elastic Kubernetes Service):

open Amazon.CDK.AWS.EKS

let cluster =
    eksCluster "MyEKSCluster" {
        version KubernetesVersion.V1_28
        defaultCapacity 0

        addNodegroupCapacity (
            "NodeGroup",
            NodegroupOptions(
                InstanceTypes = [| InstanceType.Of(InstanceClass.BURSTABLE3, InstanceSize.MEDIUM) |],
                MinSize = 1.,
                MaxSize = 5.,
                DesiredSize = 3.
            )
        )
    }

For comprehensive EKS examples, see the EKS Guide.

Security: Managed Identity → IAM Role

Farmer (Managed Identity):

let identity = createUserAssignedIdentity "myidentity"

let webApp = webApp {
    name "mywebapp"
    add_identity identity
}

FsCDK (IAM Role):

open FsCDK

// Create execution role for Lambda
let role = IAM.createLambdaExecutionRole "my-function" true

// Or create a custom role 
let customRole = IAM.createRole "lambda.amazonaws.com" "my-custom-role"

Key Differences

1. Stack Model

Farmer:

FsCDK:

2. Naming Conventions

Farmer:

FsCDK:

3. Security Defaults

Farmer:

FsCDK:

4. Deployment Process

Farmer:

# Generate ARM template
dotnet run

# Deploy with Azure CLI
az deployment group create \
    --resource-group mygroup \
    --template-file output.json

FsCDK:

# Synthesize CloudFormation
cdk synth

# Deploy with CDK
cdk deploy

Migration Checklist

Common Patterns

Environment Configuration

Farmer:

let env = Environment.GetEnvironmentVariable

let config = {
    Environment = env "ENVIRONMENT" |> Option.defaultValue "dev"
    Location = Location.EastUS
}

FsCDK:

open Amazon.CDK

// Use environment variables or defaults for AWS account/region
let accountId =
    System.Environment.GetEnvironmentVariable("CDK_DEFAULT_ACCOUNT")
    |> Option.ofObj
    |> Option.defaultValue "000000000000"

let regionName =
    System.Environment.GetEnvironmentVariable("CDK_DEFAULT_REGION")
    |> Option.ofObj
    |> Option.defaultValue "us-east-1"

stack "MyStack" {
    env (
        environment {
            account accountId
            region regionName
        }
    )
}

Resource Composition

Farmer:

let storage = storageAccount { name "storage" }
let webApp = webApp {
    name "webapp"
    depends_on storage
}

let deployment = arm {
    add_resources [ storage; webApp ]
}

FsCDK:

stack "MyStack" {
    let bucket = s3Bucket "my-bucket" { () }

    lambda "my-function" {
        handler "index.handler"
        runtime Runtime.NODEJS_18_X
        code "./code"
    // Lambda can read from bucket (configure IAM separately)
    }
}

Tagging

Farmer:

let deployment = arm {
    add_resource myResource
    add_tags [ "Environment", "Production"; "Owner", "Team" ]
}

FsCDK:

open FsCDK

stack "MyStack" {
    Tags.tagStack this "my-project" "production" (Some "team@example.com")

    // Resources...
}

Best Practices

1. Start Small

Begin with a single service or component, test thoroughly, then expand.

2. Use Existing Patterns

Study the examples in /examples directory for common patterns.

3. Security First

Review FsCDK's security defaults and adjust for your requirements.

4. Test Locally

Use cdk synth to generate CloudFormation templates and review them before deploying.

5. Leverage Escape Hatches

When FsCDK builders don't cover your use case, access underlying CDK constructs.

Resources

Getting Help


Welcome to FsCDK! We're excited to have Farmer users in the community. 🎉

val storage: obj
val deployment: obj
namespace FsCDK
namespace Amazon
namespace Amazon.CDK
namespace Amazon.CDK.AWS
namespace Amazon.CDK.AWS.S3
val stack: name: string -> StackBuilder
<summary>Creates an AWS CDK Stack construct.</summary>
<param name="name">The name of the stack.</param>
<code lang="fsharp"> stack "MyStack" { lambda myFunction bucket myBucket } </code>
val s3Bucket: name: string -> BucketBuilder
<summary> Creates a new S3 bucket builder with secure defaults. Example: s3Bucket "my-bucket" { versioned true } Alias for bucket builder. </summary>
custom operation: versioned (bool) Calls BucketBuilder.Versioned
<summary> Enables or disables versioning for the S3 bucket. **Security Best Practice:** Enable versioning for: - Critical data that requires audit trails - Data subject to compliance requirements (HIPAA, SOC2, etc.) - Production buckets storing business data **Cost Consideration:** Versioning stores all versions of objects, increasing storage costs. Only disable for: - Temporary/cache buckets - Build artifacts with short lifecycle - Development/testing buckets **Default:** false (opt-in for cost optimization) </summary>
<param name="value">True to enable versioning, false to disable.</param>
<param name="config">The current bucket configuration.</param>
<code lang="fsharp"> bucket "production-data" { versioned true // Enable for production } bucket "cache-bucket" { versioned false // Disable for temp data } </code>
custom operation: encryption (BucketEncryption) Calls BucketBuilder.Encryption
[<Struct>] type BucketEncryption = | UNENCRYPTED = 0 | KMS_MANAGED = 1 | S3_MANAGED = 2 | KMS = 3 | DSSE_MANAGED = 4 | DSSE = 5
field BucketEncryption.S3_MANAGED: BucketEncryption = 2
val myFunction: obj
namespace Amazon.CDK.AWS.Lambda
val myLambdaFunction: FunctionSpec
val lambda: name: string -> FunctionBuilder
<summary>Creates a Lambda function configuration.</summary>
<param name="name">The function name.</param>
<code lang="fsharp"> lambda "MyFunction" { handler "index.handler" runtime Runtime.NODEJS_18_X code "./lambda" timeout 30.0 } </code>
custom operation: handler (string) Calls FunctionBuilder.Handler
<summary>Sets the handler for the Lambda function.</summary>
<param name="config">The function configuration.</param>
<param name="handler">The handler name (e.g., "index.handler").</param>
<code lang="fsharp"> lambda "MyFunction" { handler "index.handler" } </code>
custom operation: runtime (Runtime) Calls FunctionBuilder.Runtime
<summary>Sets the runtime for the Lambda function.</summary>
<param name="config">The function configuration.</param>
<param name="runtime">The Lambda runtime.</param>
<code lang="fsharp"> lambda "MyFunction" { runtime Runtime.NODEJS_18_X } </code>
Multiple items
type Runtime = inherit DeputyBase new: name: string * ?family: Nullable<RuntimeFamily> * ?props: ILambdaRuntimeProps -> unit member RuntimeEquals: other: Runtime -> bool member ToString: unit -> string member BundlingImage: DockerImage member Family: Nullable<RuntimeFamily> member IsVariable: bool member Name: string member SupportsCodeGuruProfiling: bool member SupportsInlineCode: bool ...

--------------------
Runtime(name: string, ?family: System.Nullable<RuntimeFamily>, ?props: ILambdaRuntimeProps) : Runtime
property Runtime.DOTNET_8: Runtime with get
custom operation: code (Code) Calls FunctionBuilder.Code
<summary>Sets the code source from a Code object.</summary>
<param name="config">The function configuration.</param>
<param name="path">The Code object.</param>
<code lang="fsharp"> lambda "MyFunction" { code (Code.FromBucket myBucket "lambda.zip") } </code>
custom operation: memorySize (int) Calls FunctionBuilder.MemorySize
<summary>Sets the memory allocation for the Lambda function.</summary>
<param name="config">The function configuration.</param>
<param name="mb">The memory size in megabytes.</param>
<code lang="fsharp"> lambda "MyFunction" { memory 512 } </code>
custom operation: timeout (float) Calls FunctionBuilder.Timeout
<summary>Sets the timeout for the Lambda function.</summary>
<param name="config">The function configuration.</param>
<param name="seconds">The timeout in seconds.</param>
<code lang="fsharp"> lambda "MyFunction" { timeout 30.0 } </code>
custom operation: environment ((string * string) list) Calls FunctionBuilder.Environment
<summary>Sets environment variables for the Lambda function.</summary>
<param name="config">The function configuration.</param>
<param name="env">List of key-value pairs for environment variables.</param>
<code lang="fsharp"> lambda "MyFunction" { environment [ "KEY1", "value1"; "KEY2", "value2" ] } </code>
val cosmos: obj
namespace Amazon.CDK.AWS.DynamoDB
val myDynamoTable: TableSpec
val table: name: string -> TableBuilder
<summary>Creates a DynamoDB table configuration.</summary>
<param name="name">The table name.</param>
<code lang="fsharp"> table "MyTable" { partitionKey "id" AttributeType.STRING billingMode BillingMode.PAY_PER_REQUEST } </code>
custom operation: partitionKey (string) (AttributeType) Calls TableBuilder.PartitionKey
<summary>Sets the partition key for the table.</summary>
<param name="config">The current table configuration.</param>
<param name="name">The attribute name for the partition key.</param>
<param name="attrType">The attribute type (STRING, NUMBER, or BINARY).</param>
<code lang="fsharp"> table "MyTable" { partitionKey "id" AttributeType.STRING } </code>
[<Struct>] type AttributeType = | BINARY = 0 | NUMBER = 1 | STRING = 2
field AttributeType.STRING: AttributeType = 2
custom operation: sortKey (string) (AttributeType) Calls TableBuilder.SortKey
<summary>Sets the sort key for the table.</summary>
<param name="config">The current table configuration.</param>
<param name="name">The attribute name for the sort key.</param>
<param name="attrType">The attribute type (STRING, NUMBER, or BINARY).</param>
<code lang="fsharp"> table "MyTable" { partitionKey "userId" AttributeType.STRING sortKey "timestamp" AttributeType.NUMBER } </code>
field AttributeType.NUMBER: AttributeType = 1
custom operation: billingMode (BillingMode) Calls TableBuilder.BillingMode
<summary>Sets the billing mode for the table.</summary>
<param name="config">The current table configuration.</param>
<param name="mode">The billing mode (PAY_PER_REQUEST or PROVISIONED).</param>
<code lang="fsharp"> table "MyTable" { billingMode BillingMode.PAY_PER_REQUEST } </code>
[<Struct>] type BillingMode = | PAY_PER_REQUEST = 0 | PROVISIONED = 1
field BillingMode.PAY_PER_REQUEST: BillingMode = 0
val vnet: obj
namespace Amazon.CDK.AWS.EC2
val myVirtualPrivateCloud: VpcSpec
val vpc: name: string -> VpcBuilder
<summary>Creates a VPC configuration with AWS best practices.</summary>
<param name="name">The VPC name.</param>
<code lang="fsharp"> vpc "MyVpc" { maxAzs 2 natGateways 1 cidr "10.0.0.0/16" } </code>
custom operation: cidr (string) Calls VpcBuilder.Cidr
<summary>Sets the CIDR block for the VPC.</summary>
<param name="config">The current VPC configuration.</param>
<param name="cidr">The CIDR block (e.g., "10.0.0.0/16").</param>
<code lang="fsharp"> vpc "MyVpc" { cidr "10.0.0.0/16" } </code>
custom operation: maxAzs (int) Calls VpcBuilder.MaxAzs
<summary>Sets the maximum number of Availability Zones to use.</summary>
<param name="config">The current VPC configuration.</param>
<param name="maxAzs">The maximum number of AZs (default: 2 for HA).</param>
<code lang="fsharp"> vpc "MyVpc" { maxAzs 3 } </code>
custom operation: natGateways (int) Calls VpcBuilder.NatGateways
<summary>Sets the number of NAT Gateways.</summary>
<param name="config">The current VPC configuration.</param>
<param name="natGateways">The number of NAT gateways (default: 1 for cost optimization).</param>
<code lang="fsharp"> vpc "MyVpc" { natGateways 2 } </code>
val eventHub: obj
namespace Amazon.CDK.AWS.Kinesis
val myStream: KinesisStreamSpec
val kinesisStream: name: string -> KinesisStreamBuilder
<summary>Creates a Kinesis stream with AWS best practices.</summary>
<param name="name">The stream name.</param>
<code lang="fsharp"> kinesisStream "MyStream" { shardCount 2 retentionPeriod (Duration.Hours(48.0)) } </code>
custom operation: streamName (string) Calls KinesisStreamBuilder.StreamName
<summary>Sets the stream name.</summary>
custom operation: shardCount (int) Calls KinesisStreamBuilder.ShardCount
<summary>Sets the number of shards.</summary>
custom operation: retentionPeriod (Duration) Calls KinesisStreamBuilder.RetentionPeriod
<summary>Sets the retention period.</summary>
type Duration = inherit DeputyBase member FormatTokenToNumber: unit -> string member IsUnresolved: unit -> bool member Minus: rhs: Duration -> Duration member Plus: rhs: Duration -> Duration member ToDays: ?opts: ITimeConversionOptions -> float member ToHours: ?opts: ITimeConversionOptions -> float member ToHumanString: unit -> string member ToIsoString: unit -> string member ToMilliseconds: ?opts: ITimeConversionOptions -> float ...
Duration.Hours(amount: float) : Duration
custom operation: encryption (StreamEncryption) Calls KinesisStreamBuilder.EncryptionKey
<summary>Uses a custom KMS key for encryption.</summary>
[<Struct>] type StreamEncryption = | UNENCRYPTED = 0 | KMS = 1 | MANAGED = 2
field StreamEncryption.KMS: StreamEncryption = 1
val aks: obj
namespace Amazon.CDK.AWS.EKS
val cluster: EKSClusterSpec
val eksCluster: name: string -> EKSClusterBuilder
<summary>Creates an EKS cluster with AWS best practices.</summary>
<param name="name">The cluster name.</param>
<code lang="fsharp"> eksCluster "MyCluster" { vpc myVpc version KubernetesVersion.V1_28 defaultCapacity 3 } </code>
custom operation: version (KubernetesVersion) Calls EKSClusterBuilder.Version
<summary>Sets the Kubernetes version.</summary>
type KubernetesVersion = inherit DeputyBase static member Of: version: string -> KubernetesVersion member Version: string static member V1_14: KubernetesVersion static member V1_15: KubernetesVersion static member V1_16: KubernetesVersion static member V1_17: KubernetesVersion static member V1_18: KubernetesVersion static member V1_19: KubernetesVersion static member V1_20: KubernetesVersion ...
property KubernetesVersion.V1_28: KubernetesVersion with get
custom operation: defaultCapacity (int) Calls EKSClusterBuilder.DefaultCapacity
<summary>Sets the default node capacity.</summary>
custom operation: addNodegroupCapacity (string * NodegroupOptions) Calls EKSClusterBuilder.AddNodegroupCapacity
Multiple items
type NodegroupOptions = interface INodegroupOptions new: unit -> unit member AmiType: Nullable<NodegroupAmiType> member CapacityType: Nullable<CapacityType> member DesiredSize: Nullable<float> member DiskSize: Nullable<float> member EnableNodeAutoRepair: Nullable<bool> member ForceUpdate: Nullable<bool> member InstanceTypes: InstanceType array member Labels: IDictionary<string,string> ...

--------------------
NodegroupOptions() : NodegroupOptions
Multiple items
type InstanceType = inherit DeputyBase new: instanceTypeIdentifier: string -> unit member IsBurstable: unit -> bool member SameInstanceClassAs: other: InstanceType -> bool member ToString: unit -> string static member Of: instanceClass: InstanceClass * instanceSize: InstanceSize -> InstanceType member Architecture: InstanceArchitecture

--------------------
InstanceType(instanceTypeIdentifier: string) : InstanceType
InstanceType.Of(instanceClass: InstanceClass, instanceSize: InstanceSize) : InstanceType
[<Struct>] type InstanceClass = | STANDARD3 = 0 | M3 = 1 | STANDARD4 = 2 | M4 = 3 | STANDARD5 = 4 | M5 = 5 | STANDARD5_NVME_DRIVE = 6 | M5D = 7 | STANDARD5_AMD = 8 | M5A = 9 ...
field InstanceClass.BURSTABLE3: InstanceClass = 172
[<Struct>] type InstanceSize = | NANO = 0 | MICRO = 1 | SMALL = 2 | MEDIUM = 3 | LARGE = 4 | XLARGE = 5 | XLARGE2 = 6 | XLARGE3 = 7 | XLARGE4 = 8 | XLARGE6 = 9 ...
field InstanceSize.MEDIUM: InstanceSize = 3
val identity: obj
val webApp: obj
val role: obj
val customRole: obj
module Option from Microsoft.FSharp.Core
val defaultValue: value: 'T -> option: 'T option -> 'T
val accountId: string
namespace System
type Environment = static member Exit: exitCode: int -> unit static member ExpandEnvironmentVariables: name: string -> string static member FailFast: message: string -> unit + 1 overload static member GetCommandLineArgs: unit -> string array static member GetEnvironmentVariable: variable: string -> string + 1 overload static member GetEnvironmentVariables: unit -> IDictionary + 1 overload static member GetFolderPath: folder: SpecialFolder -> string + 1 overload static member GetLogicalDrives: unit -> string array static member SetEnvironmentVariable: variable: string * value: string -> unit + 1 overload static member CommandLine: string ...
<summary>Provides information about, and means to manipulate, the current environment and platform. This class cannot be inherited.</summary>
System.Environment.GetEnvironmentVariable(variable: string) : string
System.Environment.GetEnvironmentVariable(variable: string, target: System.EnvironmentVariableTarget) : string
val ofObj: value: 'T -> 'T option (requires 'T: null)
val regionName: string
custom operation: env (IEnvironment) Calls StackBuilder.Env
val environment: EnvironmentBuilder
<summary>Creates an AWS CDK Environment configuration.</summary>
<code lang="fsharp"> environment { account "123456789012" region "us-west-2" } </code>
custom operation: account (string) Calls EnvironmentBuilder.Account
<summary>Sets the AWS account ID for the environment.</summary>
<param name="config">The current configuration.</param>
<param name="accountId">The AWS account ID.</param>
<code lang="fsharp"> environment { account "123456789012" } </code>
custom operation: region (string) Calls EnvironmentBuilder.Region
<summary>Sets the AWS region for the environment.</summary>
<param name="config">The current configuration.</param>
<param name="regionName">The AWS region name.</param>
<code lang="fsharp"> environment { region "us-west-2" } </code>
val bucket: BucketSpec
property Runtime.NODEJS_18_X: Runtime with get
union case Option.Some: Value: 'T -> Option<'T>

Type something to start searching.