diff --git a/sdk/dotnet/CloudFormation/CustomResourceEmulator.cs b/sdk/dotnet/CloudFormation/CustomResourceEmulator.cs
new file mode 100644
index 0000000000..ea8b527dae
--- /dev/null
+++ b/sdk/dotnet/CloudFormation/CustomResourceEmulator.cs
@@ -0,0 +1,160 @@
+// *** WARNING: this file was generated by pulumi. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.AwsNative.CloudFormation
+{
+ ///
+ /// TODO
+ ///
+ [AwsNativeResourceType("aws-native:cloudformation:CustomResourceEmulator")]
+ public partial class CustomResourceEmulator : global::Pulumi.CustomResource
+ {
+ ///
+ /// The name of the S3 bucket to use for storing the response from the Custom Resource.
+ ///
+ [Output("bucket")]
+ public Output Bucket { get; private set; } = null!;
+
+ ///
+ /// The response data returned by invoking the Custom Resource.
+ ///
+ [Output("data")]
+ public Output> Data { get; private set; } = null!;
+
+ ///
+ /// Whether the response data contains sensitive information that should be marked as secret and not logged.
+ ///
+ [Output("noEcho")]
+ public Output NoEcho { get; private set; } = null!;
+
+ ///
+ /// The name or unique identifier that corresponds to the `PhysicalResourceId` included in the Custom Resource response. If no `PhysicalResourceId` is provided in the response, a random ID will be generated.
+ ///
+ [Output("physicalResourceId")]
+ public Output PhysicalResourceId { get; private set; } = null!;
+
+ ///
+ /// The CloudFormation type of the Custom Resource provider. For example, `Custom::MyCustomResource`.
+ ///
+ [Output("resourceType")]
+ public Output ResourceType { get; private set; } = null!;
+
+ ///
+ /// The service token, such as a Lambda function ARN, that is invoked when the resource is created, updated, or deleted.
+ ///
+ [Output("serviceToken")]
+ public Output ServiceToken { get; private set; } = null!;
+
+ ///
+ /// A stand-in value for the CloudFormation stack ID.
+ ///
+ [Output("stackId")]
+ public Output StackId { get; private set; } = null!;
+
+
+ ///
+ /// Create a CustomResourceEmulator resource with the given unique name, arguments, and options.
+ ///
+ ///
+ /// The unique name of the resource
+ /// The arguments used to populate this resource's properties
+ /// A bag of options that control this resource's behavior
+ public CustomResourceEmulator(string name, CustomResourceEmulatorArgs args, CustomResourceOptions? options = null)
+ : base("aws-native:cloudformation:CustomResourceEmulator", name, args ?? new CustomResourceEmulatorArgs(), MakeResourceOptions(options, ""))
+ {
+ }
+
+ private CustomResourceEmulator(string name, Input id, CustomResourceOptions? options = null)
+ : base("aws-native:cloudformation:CustomResourceEmulator", name, null, MakeResourceOptions(options, id))
+ {
+ }
+
+ private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id)
+ {
+ var defaultOptions = new CustomResourceOptions
+ {
+ Version = Utilities.Version,
+ };
+ var merged = CustomResourceOptions.Merge(defaultOptions, options);
+ // Override the ID if one was specified for consistency with other language SDKs.
+ merged.Id = id ?? merged.Id;
+ return merged;
+ }
+ ///
+ /// Get an existing CustomResourceEmulator resource's state with the given name, ID, and optional extra
+ /// properties used to qualify the lookup.
+ ///
+ ///
+ /// The unique name of the resulting resource.
+ /// The unique provider ID of the resource to lookup.
+ /// A bag of options that control this resource's behavior
+ public static CustomResourceEmulator Get(string name, Input id, CustomResourceOptions? options = null)
+ {
+ return new CustomResourceEmulator(name, id, options);
+ }
+ }
+
+ public sealed class CustomResourceEmulatorArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// The prefix to use for the bucket key when storing the response from the Custom Resource provider.
+ ///
+ [Input("bucketKeyPrefix", required: true)]
+ public Input BucketKeyPrefix { get; set; } = null!;
+
+ ///
+ /// The name of the S3 bucket to use for storing the response from the Custom Resource.
+ ///
+ /// The IAM principal configured for the provider must have `s3:PutObject`, `s3:HeadObject` and `s3:GetObject` permissions on this bucket.
+ ///
+ [Input("bucketName", required: true)]
+ public Input BucketName { get; set; } = null!;
+
+ [Input("customResourceProperties", required: true)]
+ private InputMap? _customResourceProperties;
+
+ ///
+ /// The properties to pass as an input to the Custom Resource.
+ /// The properties are passed as a map of key-value pairs whereas all primitive values (number, boolean) are converted to strings for CloudFormation interoperability.
+ ///
+ public InputMap CustomResourceProperties
+ {
+ get => _customResourceProperties ?? (_customResourceProperties = new InputMap());
+ set => _customResourceProperties = value;
+ }
+
+ ///
+ /// The CloudFormation type of the Custom Resource. For example, `Custom::MyCustomResource`.
+ /// This is required for CloudFormation interoperability.
+ ///
+ [Input("resourceType", required: true)]
+ public Input ResourceType { get; set; } = null!;
+
+ ///
+ /// The service token to use for the Custom Resource. The service token is invoked when the resource is created, updated, or deleted.
+ /// This can be a Lambda Function ARN with optional version or alias identifiers.
+ ///
+ /// The IAM principal configured for the provider must have `lambda:InvokeFunction` permissions on this service token.
+ ///
+ [Input("serviceToken", required: true)]
+ public Input ServiceToken { get; set; } = null!;
+
+ ///
+ /// A stand-in value for the CloudFormation stack ID. This is required for CloudFormation interoperability.
+ /// If not provided, the Pulumi Stack ID is used.
+ ///
+ [Input("stackId")]
+ public Input? StackId { get; set; }
+
+ public CustomResourceEmulatorArgs()
+ {
+ }
+ public static new CustomResourceEmulatorArgs Empty => new CustomResourceEmulatorArgs();
+ }
+}
diff --git a/sdk/go/aws/cloudformation/customResourceEmulator.go b/sdk/go/aws/cloudformation/customResourceEmulator.go
new file mode 100644
index 0000000000..0d1da5d0fa
--- /dev/null
+++ b/sdk/go/aws/cloudformation/customResourceEmulator.go
@@ -0,0 +1,211 @@
+// Code generated by pulumi-language-go DO NOT EDIT.
+// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! ***
+
+package cloudformation
+
+import (
+ "context"
+ "reflect"
+
+ "errors"
+ "github.com/pulumi/pulumi-aws-native/sdk/go/aws/internal"
+ "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
+)
+
+// TODO
+type CustomResourceEmulator struct {
+ pulumi.CustomResourceState
+
+ // The name of the S3 bucket to use for storing the response from the Custom Resource.
+ Bucket pulumi.StringOutput `pulumi:"bucket"`
+ // The response data returned by invoking the Custom Resource.
+ Data pulumi.MapOutput `pulumi:"data"`
+ // Whether the response data contains sensitive information that should be marked as secret and not logged.
+ NoEcho pulumi.BoolOutput `pulumi:"noEcho"`
+ // The name or unique identifier that corresponds to the `PhysicalResourceId` included in the Custom Resource response. If no `PhysicalResourceId` is provided in the response, a random ID will be generated.
+ PhysicalResourceId pulumi.StringOutput `pulumi:"physicalResourceId"`
+ // The CloudFormation type of the Custom Resource provider. For example, `Custom::MyCustomResource`.
+ ResourceType pulumi.StringOutput `pulumi:"resourceType"`
+ // The service token, such as a Lambda function ARN, that is invoked when the resource is created, updated, or deleted.
+ ServiceToken pulumi.StringOutput `pulumi:"serviceToken"`
+ // A stand-in value for the CloudFormation stack ID.
+ StackId pulumi.StringOutput `pulumi:"stackId"`
+}
+
+// NewCustomResourceEmulator registers a new resource with the given unique name, arguments, and options.
+func NewCustomResourceEmulator(ctx *pulumi.Context,
+ name string, args *CustomResourceEmulatorArgs, opts ...pulumi.ResourceOption) (*CustomResourceEmulator, error) {
+ if args == nil {
+ return nil, errors.New("missing one or more required arguments")
+ }
+
+ if args.BucketKeyPrefix == nil {
+ return nil, errors.New("invalid value for required argument 'BucketKeyPrefix'")
+ }
+ if args.BucketName == nil {
+ return nil, errors.New("invalid value for required argument 'BucketName'")
+ }
+ if args.CustomResourceProperties == nil {
+ return nil, errors.New("invalid value for required argument 'CustomResourceProperties'")
+ }
+ if args.ResourceType == nil {
+ return nil, errors.New("invalid value for required argument 'ResourceType'")
+ }
+ if args.ServiceToken == nil {
+ return nil, errors.New("invalid value for required argument 'ServiceToken'")
+ }
+ opts = internal.PkgResourceDefaultOpts(opts)
+ var resource CustomResourceEmulator
+ err := ctx.RegisterResource("aws-native:cloudformation:CustomResourceEmulator", name, args, &resource, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return &resource, nil
+}
+
+// GetCustomResourceEmulator gets an existing CustomResourceEmulator resource's state with the given name, ID, and optional
+// state properties that are used to uniquely qualify the lookup (nil if not required).
+func GetCustomResourceEmulator(ctx *pulumi.Context,
+ name string, id pulumi.IDInput, state *CustomResourceEmulatorState, opts ...pulumi.ResourceOption) (*CustomResourceEmulator, error) {
+ var resource CustomResourceEmulator
+ err := ctx.ReadResource("aws-native:cloudformation:CustomResourceEmulator", name, id, state, &resource, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return &resource, nil
+}
+
+// Input properties used for looking up and filtering CustomResourceEmulator resources.
+type customResourceEmulatorState struct {
+}
+
+type CustomResourceEmulatorState struct {
+}
+
+func (CustomResourceEmulatorState) ElementType() reflect.Type {
+ return reflect.TypeOf((*customResourceEmulatorState)(nil)).Elem()
+}
+
+type customResourceEmulatorArgs struct {
+ // The prefix to use for the bucket key when storing the response from the Custom Resource provider.
+ BucketKeyPrefix string `pulumi:"bucketKeyPrefix"`
+ // The name of the S3 bucket to use for storing the response from the Custom Resource.
+ //
+ // The IAM principal configured for the provider must have `s3:PutObject`, `s3:HeadObject` and `s3:GetObject` permissions on this bucket.
+ BucketName string `pulumi:"bucketName"`
+ // The properties to pass as an input to the Custom Resource.
+ // The properties are passed as a map of key-value pairs whereas all primitive values (number, boolean) are converted to strings for CloudFormation interoperability.
+ CustomResourceProperties map[string]interface{} `pulumi:"customResourceProperties"`
+ // The CloudFormation type of the Custom Resource. For example, `Custom::MyCustomResource`.
+ // This is required for CloudFormation interoperability.
+ ResourceType string `pulumi:"resourceType"`
+ // The service token to use for the Custom Resource. The service token is invoked when the resource is created, updated, or deleted.
+ // This can be a Lambda Function ARN with optional version or alias identifiers.
+ //
+ // The IAM principal configured for the provider must have `lambda:InvokeFunction` permissions on this service token.
+ ServiceToken string `pulumi:"serviceToken"`
+ // A stand-in value for the CloudFormation stack ID. This is required for CloudFormation interoperability.
+ // If not provided, the Pulumi Stack ID is used.
+ StackId *string `pulumi:"stackId"`
+}
+
+// The set of arguments for constructing a CustomResourceEmulator resource.
+type CustomResourceEmulatorArgs struct {
+ // The prefix to use for the bucket key when storing the response from the Custom Resource provider.
+ BucketKeyPrefix pulumi.StringInput
+ // The name of the S3 bucket to use for storing the response from the Custom Resource.
+ //
+ // The IAM principal configured for the provider must have `s3:PutObject`, `s3:HeadObject` and `s3:GetObject` permissions on this bucket.
+ BucketName pulumi.StringInput
+ // The properties to pass as an input to the Custom Resource.
+ // The properties are passed as a map of key-value pairs whereas all primitive values (number, boolean) are converted to strings for CloudFormation interoperability.
+ CustomResourceProperties pulumi.MapInput
+ // The CloudFormation type of the Custom Resource. For example, `Custom::MyCustomResource`.
+ // This is required for CloudFormation interoperability.
+ ResourceType pulumi.StringInput
+ // The service token to use for the Custom Resource. The service token is invoked when the resource is created, updated, or deleted.
+ // This can be a Lambda Function ARN with optional version or alias identifiers.
+ //
+ // The IAM principal configured for the provider must have `lambda:InvokeFunction` permissions on this service token.
+ ServiceToken pulumi.StringInput
+ // A stand-in value for the CloudFormation stack ID. This is required for CloudFormation interoperability.
+ // If not provided, the Pulumi Stack ID is used.
+ StackId pulumi.StringPtrInput
+}
+
+func (CustomResourceEmulatorArgs) ElementType() reflect.Type {
+ return reflect.TypeOf((*customResourceEmulatorArgs)(nil)).Elem()
+}
+
+type CustomResourceEmulatorInput interface {
+ pulumi.Input
+
+ ToCustomResourceEmulatorOutput() CustomResourceEmulatorOutput
+ ToCustomResourceEmulatorOutputWithContext(ctx context.Context) CustomResourceEmulatorOutput
+}
+
+func (*CustomResourceEmulator) ElementType() reflect.Type {
+ return reflect.TypeOf((**CustomResourceEmulator)(nil)).Elem()
+}
+
+func (i *CustomResourceEmulator) ToCustomResourceEmulatorOutput() CustomResourceEmulatorOutput {
+ return i.ToCustomResourceEmulatorOutputWithContext(context.Background())
+}
+
+func (i *CustomResourceEmulator) ToCustomResourceEmulatorOutputWithContext(ctx context.Context) CustomResourceEmulatorOutput {
+ return pulumi.ToOutputWithContext(ctx, i).(CustomResourceEmulatorOutput)
+}
+
+type CustomResourceEmulatorOutput struct{ *pulumi.OutputState }
+
+func (CustomResourceEmulatorOutput) ElementType() reflect.Type {
+ return reflect.TypeOf((**CustomResourceEmulator)(nil)).Elem()
+}
+
+func (o CustomResourceEmulatorOutput) ToCustomResourceEmulatorOutput() CustomResourceEmulatorOutput {
+ return o
+}
+
+func (o CustomResourceEmulatorOutput) ToCustomResourceEmulatorOutputWithContext(ctx context.Context) CustomResourceEmulatorOutput {
+ return o
+}
+
+// The name of the S3 bucket to use for storing the response from the Custom Resource.
+func (o CustomResourceEmulatorOutput) Bucket() pulumi.StringOutput {
+ return o.ApplyT(func(v *CustomResourceEmulator) pulumi.StringOutput { return v.Bucket }).(pulumi.StringOutput)
+}
+
+// The response data returned by invoking the Custom Resource.
+func (o CustomResourceEmulatorOutput) Data() pulumi.MapOutput {
+ return o.ApplyT(func(v *CustomResourceEmulator) pulumi.MapOutput { return v.Data }).(pulumi.MapOutput)
+}
+
+// Whether the response data contains sensitive information that should be marked as secret and not logged.
+func (o CustomResourceEmulatorOutput) NoEcho() pulumi.BoolOutput {
+ return o.ApplyT(func(v *CustomResourceEmulator) pulumi.BoolOutput { return v.NoEcho }).(pulumi.BoolOutput)
+}
+
+// The name or unique identifier that corresponds to the `PhysicalResourceId` included in the Custom Resource response. If no `PhysicalResourceId` is provided in the response, a random ID will be generated.
+func (o CustomResourceEmulatorOutput) PhysicalResourceId() pulumi.StringOutput {
+ return o.ApplyT(func(v *CustomResourceEmulator) pulumi.StringOutput { return v.PhysicalResourceId }).(pulumi.StringOutput)
+}
+
+// The CloudFormation type of the Custom Resource provider. For example, `Custom::MyCustomResource`.
+func (o CustomResourceEmulatorOutput) ResourceType() pulumi.StringOutput {
+ return o.ApplyT(func(v *CustomResourceEmulator) pulumi.StringOutput { return v.ResourceType }).(pulumi.StringOutput)
+}
+
+// The service token, such as a Lambda function ARN, that is invoked when the resource is created, updated, or deleted.
+func (o CustomResourceEmulatorOutput) ServiceToken() pulumi.StringOutput {
+ return o.ApplyT(func(v *CustomResourceEmulator) pulumi.StringOutput { return v.ServiceToken }).(pulumi.StringOutput)
+}
+
+// A stand-in value for the CloudFormation stack ID.
+func (o CustomResourceEmulatorOutput) StackId() pulumi.StringOutput {
+ return o.ApplyT(func(v *CustomResourceEmulator) pulumi.StringOutput { return v.StackId }).(pulumi.StringOutput)
+}
+
+func init() {
+ pulumi.RegisterInputType(reflect.TypeOf((*CustomResourceEmulatorInput)(nil)).Elem(), &CustomResourceEmulator{})
+ pulumi.RegisterOutputType(CustomResourceEmulatorOutput{})
+}
diff --git a/sdk/go/aws/cloudformation/init.go b/sdk/go/aws/cloudformation/init.go
index 56cb49ce57..68f5024fc2 100644
--- a/sdk/go/aws/cloudformation/init.go
+++ b/sdk/go/aws/cloudformation/init.go
@@ -21,6 +21,8 @@ func (m *module) Version() semver.Version {
func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi.Resource, err error) {
switch typ {
+ case "aws-native:cloudformation:CustomResourceEmulator":
+ r = &CustomResourceEmulator{}
case "aws-native:cloudformation:HookDefaultVersion":
r = &HookDefaultVersion{}
case "aws-native:cloudformation:HookTypeConfig":
diff --git a/sdk/nodejs/cloudformation/customResourceEmulator.ts b/sdk/nodejs/cloudformation/customResourceEmulator.ts
new file mode 100644
index 0000000000..a1863f06d9
--- /dev/null
+++ b/sdk/nodejs/cloudformation/customResourceEmulator.ts
@@ -0,0 +1,152 @@
+// *** WARNING: this file was generated by pulumi-language-nodejs. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+import * as pulumi from "@pulumi/pulumi";
+import * as utilities from "../utilities";
+
+/**
+ * TODO
+ */
+export class CustomResourceEmulator extends pulumi.CustomResource {
+ /**
+ * Get an existing CustomResourceEmulator resource's state with the given name, ID, and optional extra
+ * properties used to qualify the lookup.
+ *
+ * @param name The _unique_ name of the resulting resource.
+ * @param id The _unique_ provider ID of the resource to lookup.
+ * @param opts Optional settings to control the behavior of the CustomResource.
+ */
+ public static get(name: string, id: pulumi.Input, opts?: pulumi.CustomResourceOptions): CustomResourceEmulator {
+ return new CustomResourceEmulator(name, undefined as any, { ...opts, id: id });
+ }
+
+ /** @internal */
+ public static readonly __pulumiType = 'aws-native:cloudformation:CustomResourceEmulator';
+
+ /**
+ * Returns true if the given object is an instance of CustomResourceEmulator. This is designed to work even
+ * when multiple copies of the Pulumi SDK have been loaded into the same process.
+ */
+ public static isInstance(obj: any): obj is CustomResourceEmulator {
+ if (obj === undefined || obj === null) {
+ return false;
+ }
+ return obj['__pulumiType'] === CustomResourceEmulator.__pulumiType;
+ }
+
+ /**
+ * The name of the S3 bucket to use for storing the response from the Custom Resource.
+ */
+ public /*out*/ readonly bucket!: pulumi.Output;
+ /**
+ * The response data returned by invoking the Custom Resource.
+ */
+ public /*out*/ readonly data!: pulumi.Output<{[key: string]: any}>;
+ /**
+ * Whether the response data contains sensitive information that should be marked as secret and not logged.
+ */
+ public /*out*/ readonly noEcho!: pulumi.Output;
+ /**
+ * The name or unique identifier that corresponds to the `PhysicalResourceId` included in the Custom Resource response. If no `PhysicalResourceId` is provided in the response, a random ID will be generated.
+ */
+ public /*out*/ readonly physicalResourceId!: pulumi.Output;
+ /**
+ * The CloudFormation type of the Custom Resource provider. For example, `Custom::MyCustomResource`.
+ */
+ public readonly resourceType!: pulumi.Output;
+ /**
+ * The service token, such as a Lambda function ARN, that is invoked when the resource is created, updated, or deleted.
+ */
+ public readonly serviceToken!: pulumi.Output;
+ /**
+ * A stand-in value for the CloudFormation stack ID.
+ */
+ public readonly stackId!: pulumi.Output;
+
+ /**
+ * Create a CustomResourceEmulator resource with the given unique name, arguments, and options.
+ *
+ * @param name The _unique_ name of the resource.
+ * @param args The arguments to use to populate this resource's properties.
+ * @param opts A bag of options that control this resource's behavior.
+ */
+ constructor(name: string, args: CustomResourceEmulatorArgs, opts?: pulumi.CustomResourceOptions) {
+ let resourceInputs: pulumi.Inputs = {};
+ opts = opts || {};
+ if (!opts.id) {
+ if ((!args || args.bucketKeyPrefix === undefined) && !opts.urn) {
+ throw new Error("Missing required property 'bucketKeyPrefix'");
+ }
+ if ((!args || args.bucketName === undefined) && !opts.urn) {
+ throw new Error("Missing required property 'bucketName'");
+ }
+ if ((!args || args.customResourceProperties === undefined) && !opts.urn) {
+ throw new Error("Missing required property 'customResourceProperties'");
+ }
+ if ((!args || args.resourceType === undefined) && !opts.urn) {
+ throw new Error("Missing required property 'resourceType'");
+ }
+ if ((!args || args.serviceToken === undefined) && !opts.urn) {
+ throw new Error("Missing required property 'serviceToken'");
+ }
+ resourceInputs["bucketKeyPrefix"] = args ? args.bucketKeyPrefix : undefined;
+ resourceInputs["bucketName"] = args ? args.bucketName : undefined;
+ resourceInputs["customResourceProperties"] = args ? args.customResourceProperties : undefined;
+ resourceInputs["resourceType"] = args ? args.resourceType : undefined;
+ resourceInputs["serviceToken"] = args ? args.serviceToken : undefined;
+ resourceInputs["stackId"] = args ? args.stackId : undefined;
+ resourceInputs["bucket"] = undefined /*out*/;
+ resourceInputs["data"] = undefined /*out*/;
+ resourceInputs["noEcho"] = undefined /*out*/;
+ resourceInputs["physicalResourceId"] = undefined /*out*/;
+ } else {
+ resourceInputs["bucket"] = undefined /*out*/;
+ resourceInputs["data"] = undefined /*out*/;
+ resourceInputs["noEcho"] = undefined /*out*/;
+ resourceInputs["physicalResourceId"] = undefined /*out*/;
+ resourceInputs["resourceType"] = undefined /*out*/;
+ resourceInputs["serviceToken"] = undefined /*out*/;
+ resourceInputs["stackId"] = undefined /*out*/;
+ }
+ opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts);
+ super(CustomResourceEmulator.__pulumiType, name, resourceInputs, opts);
+ }
+}
+
+/**
+ * The set of arguments for constructing a CustomResourceEmulator resource.
+ */
+export interface CustomResourceEmulatorArgs {
+ /**
+ * The prefix to use for the bucket key when storing the response from the Custom Resource provider.
+ */
+ bucketKeyPrefix: pulumi.Input;
+ /**
+ * The name of the S3 bucket to use for storing the response from the Custom Resource.
+ *
+ * The IAM principal configured for the provider must have `s3:PutObject`, `s3:HeadObject` and `s3:GetObject` permissions on this bucket.
+ */
+ bucketName: pulumi.Input;
+ /**
+ * The properties to pass as an input to the Custom Resource.
+ * The properties are passed as a map of key-value pairs whereas all primitive values (number, boolean) are converted to strings for CloudFormation interoperability.
+ */
+ customResourceProperties: pulumi.Input<{[key: string]: any}>;
+ /**
+ * The CloudFormation type of the Custom Resource. For example, `Custom::MyCustomResource`.
+ * This is required for CloudFormation interoperability.
+ */
+ resourceType: pulumi.Input;
+ /**
+ * The service token to use for the Custom Resource. The service token is invoked when the resource is created, updated, or deleted.
+ * This can be a Lambda Function ARN with optional version or alias identifiers.
+ *
+ * The IAM principal configured for the provider must have `lambda:InvokeFunction` permissions on this service token.
+ */
+ serviceToken: pulumi.Input;
+ /**
+ * A stand-in value for the CloudFormation stack ID. This is required for CloudFormation interoperability.
+ * If not provided, the Pulumi Stack ID is used.
+ */
+ stackId?: pulumi.Input;
+}
diff --git a/sdk/nodejs/cloudformation/index.ts b/sdk/nodejs/cloudformation/index.ts
index fdcfe29190..20c88e7a54 100644
--- a/sdk/nodejs/cloudformation/index.ts
+++ b/sdk/nodejs/cloudformation/index.ts
@@ -5,6 +5,11 @@ import * as pulumi from "@pulumi/pulumi";
import * as utilities from "../utilities";
// Export members:
+export { CustomResourceEmulatorArgs } from "./customResourceEmulator";
+export type CustomResourceEmulator = import("./customResourceEmulator").CustomResourceEmulator;
+export const CustomResourceEmulator: typeof import("./customResourceEmulator").CustomResourceEmulator = null as any;
+utilities.lazyLoad(exports, ["CustomResourceEmulator"], () => require("./customResourceEmulator"));
+
export { GetHookDefaultVersionArgs, GetHookDefaultVersionResult, GetHookDefaultVersionOutputArgs } from "./getHookDefaultVersion";
export const getHookDefaultVersion: typeof import("./getHookDefaultVersion").getHookDefaultVersion = null as any;
export const getHookDefaultVersionOutput: typeof import("./getHookDefaultVersion").getHookDefaultVersionOutput = null as any;
@@ -128,6 +133,8 @@ const _module = {
version: utilities.getVersion(),
construct: (name: string, type: string, urn: string): pulumi.Resource => {
switch (type) {
+ case "aws-native:cloudformation:CustomResourceEmulator":
+ return new CustomResourceEmulator(name, undefined, { urn })
case "aws-native:cloudformation:HookDefaultVersion":
return new HookDefaultVersion(name, undefined, { urn })
case "aws-native:cloudformation:HookTypeConfig":
diff --git a/sdk/nodejs/tsconfig.json b/sdk/nodejs/tsconfig.json
index cc157a77b1..0b53dfb219 100644
--- a/sdk/nodejs/tsconfig.json
+++ b/sdk/nodejs/tsconfig.json
@@ -333,6 +333,7 @@
"cleanroomsml/getTrainingDataset.ts",
"cleanroomsml/index.ts",
"cleanroomsml/trainingDataset.ts",
+ "cloudformation/customResourceEmulator.ts",
"cloudformation/getHookDefaultVersion.ts",
"cloudformation/getHookTypeConfig.ts",
"cloudformation/getHookVersion.ts",
diff --git a/sdk/python/pulumi_aws_native/__init__.py b/sdk/python/pulumi_aws_native/__init__.py
index 68642e0a7a..69d2d97614 100644
--- a/sdk/python/pulumi_aws_native/__init__.py
+++ b/sdk/python/pulumi_aws_native/__init__.py
@@ -1059,6 +1059,7 @@
"mod": "cloudformation",
"fqn": "pulumi_aws_native.cloudformation",
"classes": {
+ "aws-native:cloudformation:CustomResourceEmulator": "CustomResourceEmulator",
"aws-native:cloudformation:HookDefaultVersion": "HookDefaultVersion",
"aws-native:cloudformation:HookTypeConfig": "HookTypeConfig",
"aws-native:cloudformation:HookVersion": "HookVersion",
diff --git a/sdk/python/pulumi_aws_native/cloudformation/__init__.py b/sdk/python/pulumi_aws_native/cloudformation/__init__.py
index 2859a6ec08..eb0dcf4098 100644
--- a/sdk/python/pulumi_aws_native/cloudformation/__init__.py
+++ b/sdk/python/pulumi_aws_native/cloudformation/__init__.py
@@ -6,6 +6,7 @@
import typing
# Export this package's modules as members:
from ._enums import *
+from .custom_resource_emulator import *
from .get_hook_default_version import *
from .get_hook_type_config import *
from .get_hook_version import *