diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index 6f6861c0d..55e6e63e0 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -28,6 +28,10 @@ - [sdk/go] - Allow specifying Call failures from the provider. [#8424](https://github.com/pulumi/pulumi/pull/8424) +- [codegen/nodejs] - Program generator now uses `fnOutput` forms where + appropriate, simplifying auto-generated examples. + [#8434](https://github.com/pulumi/pulumi/pull/8434) + ### Bug Fixes - [engine] - Compute dependents correctly during targeted deletes. diff --git a/pkg/codegen/hcl2/model/expression.go b/pkg/codegen/hcl2/model/expression.go index abbe06655..4db650cb3 100644 --- a/pkg/codegen/hcl2/model/expression.go +++ b/pkg/codegen/hcl2/model/expression.go @@ -1034,7 +1034,13 @@ func (x *FunctionCallExpression) Typecheck(typecheckOperands bool) hcl.Diagnosti typecheckDiags := typecheckArgs(rng, x.Signature, x.Args...) diagnostics = append(diagnostics, typecheckDiags...) - x.Signature.ReturnType = liftOperationType(x.Signature.ReturnType, x.Args...) + // Unless the function is already automatically using an + // Output-returning version, modify the signature to account + // for automatic lifting to Promise or Output. + _, isOutput := x.Signature.ReturnType.(*OutputType) + if !isOutput { + x.Signature.ReturnType = liftOperationType(x.Signature.ReturnType, x.Args...) + } return diagnostics } diff --git a/pkg/codegen/internal/test/helpers.go b/pkg/codegen/internal/test/helpers.go index f1226646e..e8b5a8b53 100644 --- a/pkg/codegen/internal/test/helpers.go +++ b/pkg/codegen/internal/test/helpers.go @@ -363,7 +363,7 @@ func RunCommandWithOptions( type SchemaVersion = string const ( - AwsSchema SchemaVersion = "4.21.1" + AwsSchema SchemaVersion = "4.26.0" AzureNativeSchema SchemaVersion = "1.29.0" AzureSchema SchemaVersion = "4.18.0" KubernetesSchema SchemaVersion = "3.7.2" diff --git a/pkg/codegen/internal/test/program_driver.go b/pkg/codegen/internal/test/program_driver.go index c879f0ade..bdb7d84b1 100644 --- a/pkg/codegen/internal/test/program_driver.go +++ b/pkg/codegen/internal/test/program_driver.go @@ -50,6 +50,7 @@ var programTests = []programTest{ Name: "aws-fargate", Description: "AWS Fargate", SkipCompile: codegen.NewStringSet("go"), + Skip: codegen.NewStringSet("go", "python", "dotnet"), }, { Name: "aws-s3-logging", @@ -123,6 +124,11 @@ var programTests = []programTest{ // TODO[pulumi/pulumi#8078] // TODO[pulumi/pulumi#8079] }, + { + Name: "output-funcs-aws", + Description: "Output Versioned Functions", + Skip: codegen.NewStringSet("go", "python", "dotnet"), + }, } // Checks that a generated program is correct diff --git a/pkg/codegen/internal/test/testdata/aws.json b/pkg/codegen/internal/test/testdata/aws.json index f279ec103..34008407b 100644 --- a/pkg/codegen/internal/test/testdata/aws.json +++ b/pkg/codegen/internal/test/testdata/aws.json @@ -34,12 +34,16 @@ }, "type": "array" }, + "httpProxy": { + "description": "The address of an HTTP proxy to use when accessing the AWS API. Can also be configured using the `HTTP_PROXY` or\n`HTTPS_PROXY` environment variables.\n", + "type": "string" + }, "ignoreTags": { "$ref": "#/types/aws:config/ignoreTags:ignoreTags", "description": "Configuration block with settings to ignore resource tags across all resources.\n" }, "insecure": { - "description": "Explicitly allow the provider to perform \"insecure\" SSL requests. If omitted,default value is `false`\n", + "description": "Explicitly allow the provider to perform \"insecure\" SSL requests. If omitted, default value is `false`\n", "type": "boolean" }, "maxRetries": { @@ -2281,6 +2285,66 @@ "type": "object" } }, + "aws:cloudcontrol/getResource:getResource": { + "description": "Provides details for a Cloud Control API Resource. The reading of these resources is proxied through Cloud Control API handlers to the backend service.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = pulumi.output(aws.cloudcontrol.getResource({\n identifier: \"example\",\n typeName: \"AWS::ECS::Cluster\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.cloudcontrol.get_resource(identifier=\"example\",\n type_name=\"AWS::ECS::Cluster\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Aws.CloudControl.GetResource.InvokeAsync(new Aws.CloudControl.GetResourceArgs\n {\n Identifier = \"example\",\n TypeName = \"AWS::ECS::Cluster\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudcontrol\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudcontrol.LookupResource(ctx, \u0026cloudcontrol.LookupResourceArgs{\n\t\t\tIdentifier: \"example\",\n\t\t\tTypeName: \"AWS::ECS::Cluster\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getResource.\n", + "properties": { + "identifier": { + "description": "Identifier of the CloudFormation resource type. For example, `vpc-12345678`.\n", + "type": "string" + }, + "roleArn": { + "description": "Amazon Resource Name (ARN) of the IAM Role to assume for operations.\n", + "type": "string" + }, + "typeName": { + "description": "CloudFormation resource type name. For example, `AWS::EC2::VPC`.\n", + "type": "string" + }, + "typeVersionId": { + "description": "Identifier of the CloudFormation resource type version.\n", + "type": "string" + } + }, + "required": [ + "identifier", + "typeName" + ], + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getResource.\n", + "properties": { + "id": { + "description": "The provider-assigned unique ID for this managed resource.\n", + "type": "string" + }, + "identifier": { + "type": "string" + }, + "properties": { + "type": "string" + }, + "roleArn": { + "type": "string" + }, + "typeName": { + "type": "string" + }, + "typeVersionId": { + "type": "string" + } + }, + "required": [ + "identifier", + "properties", + "typeName", + "id" + ], + "type": "object" + } + }, "aws:cloudformation/getCloudFormationType:getCloudFormationType": { "description": "Provides details about a CloudFormation Type.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = pulumi.output(aws.cloudformation.getCloudFormationType({\n type: \"RESOURCE\",\n typeName: \"AWS::Athena::WorkGroup\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.cloudformation.get_cloud_formation_type(type=\"RESOURCE\",\n type_name=\"AWS::Athena::WorkGroup\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Aws.CloudFormation.GetCloudFormationType.InvokeAsync(new Aws.CloudFormation.GetCloudFormationTypeArgs\n {\n Type = \"RESOURCE\",\n TypeName = \"AWS::Athena::WorkGroup\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudformation\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\topt0 := \"RESOURCE\"\n\t\topt1 := \"AWS::Athena::WorkGroup\"\n\t\t_, err := cloudformation.LookupCloudFormationType(ctx, \u0026cloudformation.LookupCloudFormationTypeArgs{\n\t\t\tType: \u0026opt0,\n\t\t\tTypeName: \u0026opt1,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { @@ -2688,6 +2752,35 @@ "type": "object" } }, + "aws:cloudfront/getLogDeliveryCanonicalUserId:getLogDeliveryCanonicalUserId": { + "description": "The CloudFront Log Delivery Canonical User ID data source allows access to the [canonical user ID](http://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html) of the AWS `awslogsdelivery` account for CloudFront bucket logging.\nSee the [Amazon CloudFront Developer Guide](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html) for more information.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleLogDeliveryCanonicalUserId = aws.cloudfront.getLogDeliveryCanonicalUserId({});\nconst exampleBucket = new aws.s3.Bucket(\"exampleBucket\", {grants: [{\n id: exampleLogDeliveryCanonicalUserId.then(exampleLogDeliveryCanonicalUserId =\u003e exampleLogDeliveryCanonicalUserId.id),\n type: \"CanonicalUser\",\n permissions: [\"FULL_CONTROL\"],\n}]});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_log_delivery_canonical_user_id = aws.cloudfront.get_log_delivery_canonical_user_id()\nexample_bucket = aws.s3.Bucket(\"exampleBucket\", grants=[aws.s3.BucketGrantArgs(\n id=example_log_delivery_canonical_user_id.id,\n type=\"CanonicalUser\",\n permissions=[\"FULL_CONTROL\"],\n)])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleLogDeliveryCanonicalUserId = Output.Create(Aws.CloudFront.GetLogDeliveryCanonicalUserId.InvokeAsync());\n var exampleBucket = new Aws.S3.Bucket(\"exampleBucket\", new Aws.S3.BucketArgs\n {\n Grants = \n {\n new Aws.S3.Inputs.BucketGrantArgs\n {\n Id = exampleLogDeliveryCanonicalUserId.Apply(exampleLogDeliveryCanonicalUserId =\u003e exampleLogDeliveryCanonicalUserId.Id),\n Type = \"CanonicalUser\",\n Permissions = \n {\n \"FULL_CONTROL\",\n },\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudfront\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleLogDeliveryCanonicalUserId, err := cloudfront.GetLogDeliveryCanonicalUserId(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = s3.NewBucket(ctx, \"exampleBucket\", \u0026s3.BucketArgs{\n\t\t\tGrants: s3.BucketGrantArray{\n\t\t\t\t\u0026s3.BucketGrantArgs{\n\t\t\t\t\tId: pulumi.String(exampleLogDeliveryCanonicalUserId.Id),\n\t\t\t\t\tType: pulumi.String(\"CanonicalUser\"),\n\t\t\t\t\tPermissions: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"FULL_CONTROL\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getLogDeliveryCanonicalUserId.\n", + "properties": { + "region": { + "description": "The region you'd like the zone for. By default, fetches the current region.\n", + "type": "string" + } + }, + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getLogDeliveryCanonicalUserId.\n", + "properties": { + "id": { + "description": "The provider-assigned unique ID for this managed resource.\n", + "type": "string" + }, + "region": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + }, "aws:cloudfront/getOriginRequestPolicy:getOriginRequestPolicy": { "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\nThe following example below creates a CloudFront origin request policy.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = pulumi.output(aws.cloudfront.getOriginRequestPolicy({\n name: \"example-policy\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.cloudfront.get_origin_request_policy(name=\"example-policy\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Aws.CloudFront.GetOriginRequestPolicy.InvokeAsync(new Aws.CloudFront.GetOriginRequestPolicyArgs\n {\n Name = \"example-policy\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudfront\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\topt0 := \"example-policy\"\n\t\t_, err := cloudfront.LookupOriginRequestPolicy(ctx, \u0026cloudfront.LookupOriginRequestPolicyArgs{\n\t\t\tName: \u0026opt0,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { @@ -3094,6 +3187,55 @@ "type": "object" } }, + "aws:cloudwatch/getLogGroups:getLogGroups": { + "description": "Use this data source to get a list of AWS Cloudwatch Log Groups\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = pulumi.output(aws.cloudwatch.getLogGroups({\n logGroupPrefix: \"/MyImportantLogs\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.cloudwatch.get_log_groups(log_group_prefix=\"/MyImportantLogs\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Aws.CloudWatch.GetLogGroups.InvokeAsync(new Aws.CloudWatch.GetLogGroupsArgs\n {\n LogGroupPrefix = \"/MyImportantLogs\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudwatch\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudwatch.GetLogGroups(ctx, \u0026cloudwatch.GetLogGroupsArgs{\n\t\t\tLogGroupPrefix: \"/MyImportantLogs\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getLogGroups.\n", + "properties": { + "logGroupNamePrefix": { + "description": "The group prefix of the Cloudwatch log groups to list\n", + "type": "string" + } + }, + "required": [ + "logGroupNamePrefix" + ], + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getLogGroups.\n", + "properties": { + "arns": { + "description": "Set of ARNs of the Cloudwatch log groups\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "description": "The provider-assigned unique ID for this managed resource.\n", + "type": "string" + }, + "logGroupNamePrefix": { + "type": "string" + }, + "logGroupNames": { + "description": "Set of names of the Cloudwatch log groups\n", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "arns", + "logGroupNamePrefix", + "logGroupNames", + "id" + ], + "type": "object" + } + }, "aws:codeartifact/getAuthorizationToken:getAuthorizationToken": { "description": "The CodeArtifact Authorization Token data source generates a temporary authentication token for accessing repositories in a CodeArtifact domain.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst test = aws.codeartifact.getAuthorizationToken({\n domain: aws_codeartifact_domain.test.domain,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.codeartifact.get_authorization_token(domain=aws_codeartifact_domain[\"test\"][\"domain\"])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = Output.Create(Aws.CodeArtifact.GetAuthorizationToken.InvokeAsync(new Aws.CodeArtifact.GetAuthorizationTokenArgs\n {\n Domain = aws_codeartifact_domain.Test.Domain,\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/codeartifact\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := codeartifact.GetAuthorizationToken(ctx, \u0026codeartifact.GetAuthorizationTokenArgs{\n\t\t\tDomain: aws_codeartifact_domain.Test.Domain,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { @@ -3386,6 +3528,185 @@ "type": "object" } }, + "aws:connect/getContactFlow:getContactFlow": { + "description": "Provides details about a specific Amazon Connect Contact Flow.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBy name\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst test = pulumi.output(aws.connect.getContactFlow({\n instanceId: \"aaaaaaaa-bbbb-cccc-dddd-111111111111\",\n name: \"Test\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.connect.get_contact_flow(instance_id=\"aaaaaaaa-bbbb-cccc-dddd-111111111111\",\n name=\"Test\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = Output.Create(Aws.Connect.GetContactFlow.InvokeAsync(new Aws.Connect.GetContactFlowArgs\n {\n InstanceId = \"aaaaaaaa-bbbb-cccc-dddd-111111111111\",\n Name = \"Test\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/connect\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\topt0 := \"Test\"\n\t\t_, err := connect.LookupContactFlow(ctx, \u0026connect.LookupContactFlowArgs{\n\t\t\tInstanceId: \"aaaaaaaa-bbbb-cccc-dddd-111111111111\",\n\t\t\tName: \u0026opt0,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nBy contact_flow_id\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst test = pulumi.output(aws.connect.getContactFlow({\n contactFlowId: \"cccccccc-bbbb-cccc-dddd-111111111111\",\n instanceId: \"aaaaaaaa-bbbb-cccc-dddd-111111111111\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.connect.get_contact_flow(contact_flow_id=\"cccccccc-bbbb-cccc-dddd-111111111111\",\n instance_id=\"aaaaaaaa-bbbb-cccc-dddd-111111111111\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = Output.Create(Aws.Connect.GetContactFlow.InvokeAsync(new Aws.Connect.GetContactFlowArgs\n {\n ContactFlowId = \"cccccccc-bbbb-cccc-dddd-111111111111\",\n InstanceId = \"aaaaaaaa-bbbb-cccc-dddd-111111111111\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/connect\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\topt0 := \"cccccccc-bbbb-cccc-dddd-111111111111\"\n\t\t_, err := connect.LookupContactFlow(ctx, \u0026connect.LookupContactFlowArgs{\n\t\t\tContactFlowId: \u0026opt0,\n\t\t\tInstanceId: \"aaaaaaaa-bbbb-cccc-dddd-111111111111\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getContactFlow.\n", + "properties": { + "contactFlowId": { + "description": "Returns information on a specific Contact Flow by contact flow id\n", + "type": "string" + }, + "instanceId": { + "description": "Reference to the hosting Amazon Connect Instance\n", + "type": "string" + }, + "name": { + "description": "Returns information on a specific Contact Flow by name\n", + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "A the map of tags to assign to the Contact Flow.\n", + "type": "object" + }, + "type": { + "description": "Specifies the type of Contact Flow.\n", + "type": "string" + } + }, + "required": [ + "instanceId" + ], + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getContactFlow.\n", + "properties": { + "arn": { + "description": "The Amazon Resource Name (ARN) of the Contact Flow.\n", + "type": "string" + }, + "contactFlowId": { + "type": "string" + }, + "content": { + "description": "Specifies the logic of the Contact Flow.\n", + "type": "string" + }, + "description": { + "description": "Specifies the description of the Contact Flow.\n", + "type": "string" + }, + "id": { + "description": "The provider-assigned unique ID for this managed resource.\n", + "type": "string" + }, + "instanceId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "A the map of tags to assign to the Contact Flow.\n", + "type": "object" + }, + "type": { + "description": "Specifies the type of Contact Flow.\n", + "type": "string" + } + }, + "required": [ + "arn", + "contactFlowId", + "content", + "description", + "instanceId", + "name", + "tags", + "id" + ], + "type": "object" + } + }, + "aws:connect/getInstance:getInstance": { + "description": "Provides details about a specific Amazon Connect Instance.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBy instance_alias\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst foo = pulumi.output(aws.connect.getInstance({\n instanceAlias: \"foo\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nfoo = aws.connect.get_instance(instance_alias=\"foo\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var foo = Output.Create(Aws.Connect.GetInstance.InvokeAsync(new Aws.Connect.GetInstanceArgs\n {\n InstanceAlias = \"foo\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/connect\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\topt0 := \"foo\"\n\t\t_, err := connect.LookupInstance(ctx, \u0026connect.LookupInstanceArgs{\n\t\t\tInstanceAlias: \u0026opt0,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nBy instance_id\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst foo = pulumi.output(aws.connect.getInstance({\n instanceId: \"97afc98d-101a-ba98-ab97-ae114fc115ec\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nfoo = aws.connect.get_instance(instance_id=\"97afc98d-101a-ba98-ab97-ae114fc115ec\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var foo = Output.Create(Aws.Connect.GetInstance.InvokeAsync(new Aws.Connect.GetInstanceArgs\n {\n InstanceId = \"97afc98d-101a-ba98-ab97-ae114fc115ec\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/connect\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\topt0 := \"97afc98d-101a-ba98-ab97-ae114fc115ec\"\n\t\t_, err := connect.LookupInstance(ctx, \u0026connect.LookupInstanceArgs{\n\t\t\tInstanceId: \u0026opt0,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getInstance.\n", + "properties": { + "instanceAlias": { + "description": "Returns information on a specific connect instance by alias\n", + "type": "string" + }, + "instanceId": { + "description": "Returns information on a specific connect instance by id\n", + "type": "string" + } + }, + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getInstance.\n", + "properties": { + "arn": { + "description": "The Amazon Resource Name (ARN) of the instance.\n", + "type": "string" + }, + "autoResolveBestVoicesEnabled": { + "type": "boolean" + }, + "contactFlowLogsEnabled": { + "description": "Specifies Whether contact flow logs are enabled.\n", + "type": "boolean" + }, + "contactLensEnabled": { + "description": "Specifies Whether contact lens is enabled.\n", + "type": "boolean" + }, + "createdTime": { + "description": "Specifies When the instance was created.\n", + "type": "string" + }, + "earlyMediaEnabled": { + "description": "Specifies Whether early media for outbound calls is enabled .\n", + "type": "boolean" + }, + "id": { + "description": "The provider-assigned unique ID for this managed resource.\n", + "type": "string" + }, + "identityManagementType": { + "description": "Specifies The identity management type attached to the instance.\n", + "type": "string" + }, + "inboundCallsEnabled": { + "description": "Specifies Whether inbound calls are enabled.\n", + "type": "boolean" + }, + "instanceAlias": { + "type": "string" + }, + "instanceId": { + "type": "string" + }, + "outboundCallsEnabled": { + "description": "Specifies Whether outbound calls are enabled.\n", + "type": "boolean" + }, + "serviceRole": { + "description": "The service role of the instance.\n", + "type": "string" + }, + "status": { + "description": "Specifies The state of the instance.\n", + "type": "string" + } + }, + "required": [ + "arn", + "autoResolveBestVoicesEnabled", + "contactFlowLogsEnabled", + "contactLensEnabled", + "createdTime", + "earlyMediaEnabled", + "identityManagementType", + "inboundCallsEnabled", + "instanceAlias", + "instanceId", + "outboundCallsEnabled", + "serviceRole", + "status", + "id" + ], + "type": "object" + } + }, "aws:cur/getReportDefinition:getReportDefinition": { "description": "Use this data source to get information on an AWS Cost and Usage Report Definition.\n\n\u003e *NOTE:* The AWS Cost and Usage Report service is only available in `us-east-1` currently.\n\n\u003e *NOTE:* If AWS Organizations is enabled, only the master account can use this resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst reportDefinition = pulumi.output(aws.cur.getReportDefinition({\n reportName: \"example\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nreport_definition = aws.cur.get_report_definition(report_name=\"example\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var reportDefinition = Output.Create(Aws.Cur.GetReportDefinition.InvokeAsync(new Aws.Cur.GetReportDefinitionArgs\n {\n ReportName = \"example\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cur\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cur.LookupReportDefinition(ctx, \u0026cur.LookupReportDefinitionArgs{\n\t\t\tReportName: \"example\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { @@ -5064,12 +5385,19 @@ } }, "aws:ec2/getDedicatedHost:getDedicatedHost": { - "description": "Use this data source to get information about the host when allocating an EC2 Dedicated Host.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst test = new aws.ec2.DedicatedHost(\"test\", {\n autoPlacement: \"on\",\n availabilityZone: \"us-west-1a\",\n hostRecovery: \"on\",\n instanceType: \"c5.18xlarge\",\n});\nconst testData = test.id.apply(id =\u003e aws.ec2.getDedicatedHost({\n hostId: id,\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.ec2.DedicatedHost(\"test\",\n auto_placement=\"on\",\n availability_zone=\"us-west-1a\",\n host_recovery=\"on\",\n instance_type=\"c5.18xlarge\")\ntest_data = test.id.apply(lambda id: aws.ec2.get_dedicated_host(host_id=id))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = new Aws.Ec2.DedicatedHost(\"test\", new Aws.Ec2.DedicatedHostArgs\n {\n AutoPlacement = \"on\",\n AvailabilityZone = \"us-west-1a\",\n HostRecovery = \"on\",\n InstanceType = \"c5.18xlarge\",\n });\n var testData = test.Id.Apply(id =\u003e Aws.Ec2.GetDedicatedHost.InvokeAsync(new Aws.Ec2.GetDedicatedHostArgs\n {\n HostId = id,\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := ec2.NewDedicatedHost(ctx, \"test\", \u0026ec2.DedicatedHostArgs{\n\t\t\tAutoPlacement: pulumi.String(\"on\"),\n\t\t\tAvailabilityZone: pulumi.String(\"us-west-1a\"),\n\t\t\tHostRecovery: pulumi.String(\"on\"),\n\t\t\tInstanceType: pulumi.String(\"c5.18xlarge\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Use this data source to get information about an EC2 Dedicated Host.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Filter Example\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst test = pulumi.output(aws.ec2.getDedicatedHost({\n filters: [{\n name: \"instance-type\",\n values: [\"c5.18xlarge\"],\n }],\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.ec2.get_dedicated_host(filters=[aws.ec2.GetDedicatedHostFilterArgs(\n name=\"instance-type\",\n values=[\"c5.18xlarge\"],\n)])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = Output.Create(Aws.Ec2.GetDedicatedHost.InvokeAsync(new Aws.Ec2.GetDedicatedHostArgs\n {\n Filters = \n {\n new Aws.Ec2.Inputs.GetDedicatedHostFilterArgs\n {\n Name = \"instance-type\",\n Values = \n {\n \"c5.18xlarge\",\n },\n },\n },\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ec2.LookupDedicatedHost(ctx, \u0026ec2.LookupDedicatedHostArgs{\n\t\t\tFilters: []ec2.GetDedicatedHostFilter{\n\t\t\t\tec2.GetDedicatedHostFilter{\n\t\t\t\t\tName: \"instance-type\",\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\"c5.18xlarge\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getDedicatedHost.\n", "properties": { + "filters": { + "description": "Configuration block. Detailed below.\n", + "items": { + "$ref": "#/types/aws:ec2/getDedicatedHostFilter:getDedicatedHostFilter" + }, + "type": "array" + }, "hostId": { - "description": "The host ID.\n", + "description": "The ID of the Dedicated Host.\n", "type": "string" }, "tags": { @@ -5079,29 +5407,38 @@ "type": "object" } }, - "required": [ - "hostId" - ], "type": "object" }, "outputs": { "description": "A collection of values returned by getDedicatedHost.\n", "properties": { + "arn": { + "description": "The ARN of the Dedicated Host.\n", + "type": "string" + }, "autoPlacement": { + "description": "Whether auto-placement is on or off.\n", "type": "string" }, "availabilityZone": { + "description": "The Availability Zone of the Dedicated Host.\n", "type": "string" }, "cores": { "description": "The number of cores on the Dedicated Host.\n", "type": "integer" }, + "filters": { + "items": { + "$ref": "#/types/aws:ec2/getDedicatedHostFilter:getDedicatedHostFilter" + }, + "type": "array" + }, "hostId": { - "description": "The host ID.\n", "type": "string" }, "hostRecovery": { + "description": "Indicates whether host recovery is enabled or disabled for the Dedicated Host.\n", "type": "string" }, "id": { @@ -5109,17 +5446,19 @@ "type": "string" }, "instanceFamily": { - "description": "The instance family supported by the Dedicated Host. For example, m5.\n* `instance_type` -The instance type supported by the Dedicated Host. For example, m5.large. If the host supports multiple instance types, no instanceType is returned.\n", - "type": "string" - }, - "instanceState": { + "description": "The instance family supported by the Dedicated Host. For example, \"m5\".\n", "type": "string" }, "instanceType": { + "description": "The instance type supported by the Dedicated Host. For example, \"m5.large\". If the host supports multiple instance types, no instanceType is returned.\n", + "type": "string" + }, + "ownerId": { + "description": "The ID of the AWS account that owns the Dedicated Host.\n", "type": "string" }, "sockets": { - "description": "The instance family supported by the Dedicated Host. For example, m5.\n", + "description": "The number of sockets on the Dedicated Host.\n", "type": "integer" }, "tags": { @@ -5134,14 +5473,15 @@ } }, "required": [ + "arn", "autoPlacement", "availabilityZone", "cores", "hostId", "hostRecovery", "instanceFamily", - "instanceState", "instanceType", + "ownerId", "sockets", "tags", "totalVcpus", @@ -5447,6 +5787,10 @@ "description": "The placement group of the Instance.\n", "type": "string" }, + "placementPartitionNumber": { + "description": "The number of the partition the instance is in.\n", + "type": "integer" + }, "privateDns": { "description": "The private DNS name assigned to the Instance. Can only be\nused inside the Amazon EC2, and only available if you've enabled DNS hostnames\nfor your VPC.\n", "type": "string" @@ -5543,6 +5887,7 @@ "outpostArn", "passwordData", "placementGroup", + "placementPartitionNumber", "privateDns", "privateIp", "publicDns", @@ -10732,7 +11077,7 @@ } }, "aws:eks/getCluster:getCluster": { - "description": "Retrieve information about an EKS Cluster.\n", + "description": "Retrieve information about an EKS Cluster.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = aws.eks.getCluster({\n name: \"example\",\n});\nexport const endpoint = example.then(example =\u003e example.endpoint);\nexport const kubeconfig_certificate_authority_data = example.then(example =\u003e example.certificateAuthority?.data);\nexport const identity_oidc_issuer = example.then(example =\u003e example.identities?[0]?.oidcs?[0]?.issuer);\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.eks.get_cluster(name=\"example\")\npulumi.export(\"endpoint\", example.endpoint)\npulumi.export(\"kubeconfig-certificate-authority-data\", example.certificate_authority.data)\npulumi.export(\"identity-oidc-issuer\", example.identities[0].oidcs[0].issuer)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Aws.Eks.GetCluster.InvokeAsync(new Aws.Eks.GetClusterArgs\n {\n Name = \"example\",\n }));\n this.Endpoint = example.Apply(example =\u003e example.Endpoint);\n this.Kubeconfig_certificate_authority_data = example.Apply(example =\u003e example.CertificateAuthority?.Data);\n this.Identity_oidc_issuer = example.Apply(example =\u003e example.Identities?[0]?.Oidcs?[0]?.Issuer);\n }\n\n [Output(\"endpoint\")]\n public Output\u003cstring\u003e Endpoint { get; set; }\n [Output(\"kubeconfig-certificate-authority-data\")]\n public Output\u003cstring\u003e Kubeconfig_certificate_authority_data { get; set; }\n [Output(\"identity-oidc-issuer\")]\n public Output\u003cstring\u003e Identity_oidc_issuer { get; set; }\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/eks\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := eks.LookupCluster(ctx, \u0026eks.LookupClusterArgs{\n\t\t\tName: \"example\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"endpoint\", example.Endpoint)\n\t\tctx.Export(\"kubeconfig-certificate-authority-data\", example.CertificateAuthority.Data)\n\t\tctx.Export(\"identity-oidc-issuer\", example.Identities[0].Oidcs[0].Issuer)\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getCluster.\n", "properties": { @@ -11051,7 +11396,7 @@ } }, "aws:eks/getNodeGroups:getNodeGroups": { - "description": "Retrieve the EKS Node Groups associated with a named EKS cluster. This will allow you to pass a list of Node Group names to other resources.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleNodeGroups = aws.eks.getNodeGroups({\n clusterName: \"example\",\n});\nconst exampleNodeGroup = .map(([, ]) =\u003e aws.eks.getNodeGroup({\n clusterName: \"example\",\n nodeGroupName: __value,\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_node_groups = aws.eks.get_node_groups(cluster_name=\"example\")\nexample_node_group = [aws.eks.get_node_group(cluster_name=\"example\",\n node_group_name=__value) for __key, __value in data[\"aws_eks_node_group_names\"][\"example\"][\"names\"]]\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Retrieve the EKS Node Groups associated with a named EKS cluster. This will allow you to pass a list of Node Group names to other resources.\n", "inputs": { "description": "A collection of arguments for invoking getNodeGroups.\n", "properties": { @@ -12509,6 +12854,13 @@ "id": { "description": "A concatenation of the catalog ID and connection name. For example, if your account ID is\n`123456789123` and the connection name is `conn` then the ID is `123456789123:conn`.\n", "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "The tags assigned to the resource\n", + "type": "object" } }, "required": [ @@ -12561,6 +12913,13 @@ "$ref": "#/types/aws:glue/getConnectionPhysicalConnectionRequirement:getConnectionPhysicalConnectionRequirement" }, "type": "array" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "The tags assigned to the resource\n", + "type": "object" } }, "required": [ @@ -12572,7 +12931,8 @@ "id", "matchCriterias", "name", - "physicalConnectionRequirements" + "physicalConnectionRequirements", + "tags" ], "type": "object" } @@ -13379,6 +13739,58 @@ "type": "object" } }, + "aws:iam/getUsers:getUsers": { + "description": "Use this data source to get the ARNs and Names of IAM Users.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### All users in an account\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst users = pulumi.output(aws.iam.getUsers());\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nusers = aws.iam.get_users()\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var users = Output.Create(Aws.Iam.GetUsers.InvokeAsync());\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.GetUsers(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Users filtered by name regex\n\nUsers whose username contains `abc`\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst users = pulumi.output(aws.iam.getUsers({\n nameRegex: \".*abc.*\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nusers = aws.iam.get_users(name_regex=\".*abc.*\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var users = Output.Create(Aws.Iam.GetUsers.InvokeAsync(new Aws.Iam.GetUsersArgs\n {\n NameRegex = \".*abc.*\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\topt0 := \".*abc.*\"\n\t\t_, err := iam.GetUsers(ctx, \u0026iam.GetUsersArgs{\n\t\t\tNameRegex: \u0026opt0,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Users filtered by path prefix\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst users = pulumi.output(aws.iam.getUsers({\n pathPrefix: \"/custom-path\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nusers = aws.iam.get_users(path_prefix=\"/custom-path\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var users = Output.Create(Aws.Iam.GetUsers.InvokeAsync(new Aws.Iam.GetUsersArgs\n {\n PathPrefix = \"/custom-path\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\topt0 := \"/custom-path\"\n\t\t_, err := iam.GetUsers(ctx, \u0026iam.GetUsersArgs{\n\t\t\tPathPrefix: \u0026opt0,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getUsers.\n", + "properties": { + "nameRegex": { + "description": "A regex string to apply to the IAM users list returned by AWS. This allows more advanced filtering not supported from the AWS API.\nThis filtering is done locally on what AWS returns, and could have a performance impact if the result is large. It is recommended to combine this with other\noptions to narrow down the list AWS returns.\n", + "type": "string" + }, + "pathPrefix": { + "description": "The path prefix for filtering the results. For example, the prefix `/division_abc/subdivision_xyz/` gets all users whose path starts with `/division_abc/subdivision_xyz/`. If it is not included, it defaults to a slash (`/`), listing all users. For more details, check out [list-users in the AWS CLI reference][1].\n", + "type": "string" + } + }, + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getUsers.\n", + "properties": { + "arns": { + "description": "Set of ARNs of the matched IAM users.\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "description": "The provider-assigned unique ID for this managed resource.\n", + "type": "string" + }, + "nameRegex": { + "type": "string" + }, + "names": { + "description": "Set of Names of the matched IAM users.\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "pathPrefix": { + "type": "string" + } + }, + "required": [ + "arns", + "names", + "id" + ], + "type": "object" + } + }, "aws:identitystore/getGroup:getGroup": { "description": "Use this data source to get an Identity Store Group.\n", "inputs": { @@ -15335,7 +15747,7 @@ "description": "A collection of arguments for invoking getEndpoint.\n", "properties": { "endpointType": { - "description": "Endpoint type. Valid values: `iot:CredentialProvider`, `iot:Data`, `iot:Data-ATS`, `iot:Job`.\n", + "description": "Endpoint type. Valid values: `iot:CredentialProvider`, `iot:Data`, `iot:Data-ATS`, `iot:Jobs`.\n", "type": "string" } }, @@ -15345,7 +15757,7 @@ "description": "A collection of values returned by getEndpoint.\n", "properties": { "endpointAddress": { - "description": "The endpoint based on `endpoint_type`:\n* No `endpoint_type`: Either `iot:Data` or `iot:Data-ATS` [depending on region](https://aws.amazon.com/blogs/iot/aws-iot-core-ats-endpoints/)\n* `iot:CredentialsProvider`: `IDENTIFIER.credentials.iot.REGION.amazonaws.com`\n* `iot:Data`: `IDENTIFIER.iot.REGION.amazonaws.com`\n* `iot:Data-ATS`: `IDENTIFIER-ats.iot.REGION.amazonaws.com`\n* `iot:Job`: `IDENTIFIER.jobs.iot.REGION.amazonaws.com`\n", + "description": "The endpoint based on `endpoint_type`:\n* No `endpoint_type`: Either `iot:Data` or `iot:Data-ATS` [depending on region](https://aws.amazon.com/blogs/iot/aws-iot-core-ats-endpoints/)\n* `iot:CredentialsProvider`: `IDENTIFIER.credentials.iot.REGION.amazonaws.com`\n* `iot:Data`: `IDENTIFIER.iot.REGION.amazonaws.com`\n* `iot:Data-ATS`: `IDENTIFIER-ats.iot.REGION.amazonaws.com`\n* `iot:Jobs`: `IDENTIFIER.jobs.iot.REGION.amazonaws.com`\n", "type": "string" }, "endpointType": { @@ -15363,6 +15775,44 @@ "type": "object" } }, + "aws:kinesis/getFirehoseDeliveryStream:getFirehoseDeliveryStream": { + "description": "Use this data source to get information about a Kinesis Firehose Delivery Stream for use in other resources.\n\nFor more details, see the [Amazon Kinesis Firehose Documentation](https://aws.amazon.com/documentation/firehose/).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst stream = pulumi.output(aws.kinesis.getFirehoseDeliveryStream({\n name: \"stream-name\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nstream = aws.kinesis.get_firehose_delivery_stream(name=\"stream-name\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var stream = Output.Create(Aws.Kinesis.GetFirehoseDeliveryStream.InvokeAsync(new Aws.Kinesis.GetFirehoseDeliveryStreamArgs\n {\n Name = \"stream-name\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/kinesis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kinesis.LookupFirehoseDeliveryStream(ctx, \u0026kinesis.LookupFirehoseDeliveryStreamArgs{\n\t\t\tName: \"stream-name\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getFirehoseDeliveryStream.\n", + "properties": { + "name": { + "description": "The name of the Kinesis Stream.\n", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getFirehoseDeliveryStream.\n", + "properties": { + "arn": { + "description": "The Amazon Resource Name (ARN) of the Kinesis Stream (same as id).\n", + "type": "string" + }, + "id": { + "description": "The provider-assigned unique ID for this managed resource.\n", + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "arn", + "name", + "id" + ], + "type": "object" + } + }, "aws:kinesis/getStream:getStream": { "description": "Use this data source to get information about a Kinesis Stream for use in other\nresources.\n\nFor more details, see the [Amazon Kinesis Documentation](https://aws.amazon.com/documentation/kinesis/).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst stream = pulumi.output(aws.kinesis.getStream({\n name: \"stream-name\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nstream = aws.kinesis.get_stream(name=\"stream-name\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var stream = Output.Create(Aws.Kinesis.GetStream.InvokeAsync(new Aws.Kinesis.GetStreamArgs\n {\n Name = \"stream-name\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/kinesis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kinesis.LookupStream(ctx, \u0026kinesis.LookupStreamArgs{\n\t\t\tName: \"stream-name\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { @@ -16240,6 +16690,13 @@ "outputs": { "description": "A collection of values returned by getFunction.\n", "properties": { + "architectures": { + "description": "The instruction set architecture for the Lambda function.\n", + "items": { + "type": "string" + }, + "type": "array" + }, "arn": { "description": "Unqualified (no `:QUALIFIER` or `:VERSION` suffix) Amazon Resource Name (ARN) identifying your Lambda Function. See also `qualified_arn`.\n", "type": "string" @@ -16360,6 +16817,7 @@ } }, "required": [ + "architectures", "arn", "codeSigningConfigArn", "deadLetterConfig", @@ -16450,6 +16908,10 @@ "inputs": { "description": "A collection of arguments for invoking getLayerVersion.\n", "properties": { + "compatibleArchitecture": { + "description": "Specific architecture the layer version could support. Conflicts with `version`. If specified, the latest available layer version supporting the provided architecture will be used.\n", + "type": "string" + }, "compatibleRuntime": { "description": "Specific runtime the layer version must support. Conflicts with `version`. If specified, the latest available layer version supporting the provided runtime will be used.\n", "type": "string" @@ -16459,7 +16921,7 @@ "type": "string" }, "version": { - "description": "Specific layer version. Conflicts with `compatible_runtime`. If omitted, the latest available layer version will be used.\n", + "description": "Specific layer version. Conflicts with `compatible_runtime` and `compatible_architecture`. If omitted, the latest available layer version will be used.\n", "type": "integer" } }, @@ -16475,6 +16937,16 @@ "description": "The Amazon Resource Name (ARN) of the Lambda Layer with version.\n", "type": "string" }, + "compatibleArchitecture": { + "type": "string" + }, + "compatibleArchitectures": { + "description": "A list of [Architectures](https://docs.aws.amazon.com/lambda/latest/dg/API_GetLayerVersion.html#SSS-GetLayerVersion-response-CompatibleArchitectures) the specific Lambda Layer version is compatible with.\n", + "items": { + "type": "string" + }, + "type": "array" + }, "compatibleRuntime": { "type": "string" }, @@ -16531,6 +17003,7 @@ }, "required": [ "arn", + "compatibleArchitectures", "compatibleRuntimes", "createdDate", "description", @@ -17335,6 +17808,46 @@ "type": "object" } }, + "aws:msk/getBrokerNodes:getBrokerNodes": { + "description": "Get information on an Amazon MSK Broker Nodes.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = aws.msk.getBrokerNodes({\n clusterArn: aws_msk_cluster.example.arn,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.msk.get_broker_nodes(cluster_arn=aws_msk_cluster[\"example\"][\"arn\"])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Aws.Msk.GetBrokerNodes.InvokeAsync(new Aws.Msk.GetBrokerNodesArgs\n {\n ClusterArn = aws_msk_cluster.Example.Arn,\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/msk\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := msk.GetBrokerNodes(ctx, \u0026msk.GetBrokerNodesArgs{\n\t\t\tClusterArn: aws_msk_cluster.Example.Arn,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getBrokerNodes.\n", + "properties": { + "clusterArn": { + "description": "The ARN of the cluster the nodes belong to.\n", + "type": "string" + } + }, + "required": [ + "clusterArn" + ], + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getBrokerNodes.\n", + "properties": { + "clusterArn": { + "type": "string" + }, + "id": { + "description": "The provider-assigned unique ID for this managed resource.\n", + "type": "string" + }, + "nodeInfoLists": { + "items": { + "$ref": "#/types/aws:msk/getBrokerNodesNodeInfoList:getBrokerNodesNodeInfoList" + }, + "type": "array" + } + }, + "required": [ + "clusterArn", + "nodeInfoLists", + "id" + ], + "type": "object" + } + }, "aws:msk/getCluster:getCluster": { "description": "Get information on an Amazon MSK Cluster.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = pulumi.output(aws.msk.getCluster({\n clusterName: \"example\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.msk.get_cluster(cluster_name=\"example\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Aws.Msk.GetCluster.InvokeAsync(new Aws.Msk.GetClusterArgs\n {\n ClusterName = \"example\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/msk\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := msk.LookupCluster(ctx, \u0026msk.LookupClusterArgs{\n\t\t\tClusterName: \"example\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { @@ -17484,6 +17997,54 @@ "type": "object" } }, + "aws:msk/getKafkaVersion:getKafkaVersion": { + "description": "Get information on a Amazon MSK Kafka Version\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst preferred = pulumi.output(aws.msk.getKafkaVersion({\n preferredVersions: [\n \"2.4.1.1\",\n \"2.4.1\",\n \"2.2.1\",\n ],\n}));\nconst example = pulumi.output(aws.msk.getKafkaVersion({\n version: \"2.8.0\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\npreferred = aws.msk.get_kafka_version(preferred_versions=[\n \"2.4.1.1\",\n \"2.4.1\",\n \"2.2.1\",\n])\nexample = aws.msk.get_kafka_version(version=\"2.8.0\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var preferred = Output.Create(Aws.Msk.GetKafkaVersion.InvokeAsync(new Aws.Msk.GetKafkaVersionArgs\n {\n PreferredVersions = \n {\n \"2.4.1.1\",\n \"2.4.1\",\n \"2.2.1\",\n },\n }));\n var example = Output.Create(Aws.Msk.GetKafkaVersion.InvokeAsync(new Aws.Msk.GetKafkaVersionArgs\n {\n Version = \"2.8.0\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/msk\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := msk.GetKafkaVersion(ctx, \u0026msk.GetKafkaVersionArgs{\n\t\t\tPreferredVersions: []string{\n\t\t\t\t\"2.4.1.1\",\n\t\t\t\t\"2.4.1\",\n\t\t\t\t\"2.2.1\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\topt0 := \"2.8.0\"\n\t\t_, err = msk.GetKafkaVersion(ctx, \u0026msk.GetKafkaVersionArgs{\n\t\t\tVersion: \u0026opt0,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getKafkaVersion.\n", + "properties": { + "preferredVersions": { + "description": "Ordered list of preferred Kafka versions. The first match in this list will be returned. Either `preferred_versions` or `version` must be set.\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "version": { + "description": "Version of MSK Kafka. For example 2.4.1.1 or \"2.2.1\" etc. Either `preferred_versions` or `version` must be set.\n", + "type": "string" + } + }, + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getKafkaVersion.\n", + "properties": { + "id": { + "description": "The provider-assigned unique ID for this managed resource.\n", + "type": "string" + }, + "preferredVersions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "status": { + "description": "Status of the MSK Kafka version eg. `ACTIVE` or `DEPRECATED`.\n", + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "status", + "version", + "id" + ], + "type": "object" + } + }, "aws:neptune/getEngineVersion:getEngineVersion": { "description": "Information about a Neptune engine version.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst test = pulumi.output(aws.neptune.getEngineVersion({\n preferredVersions: [\n \"1.0.3.0\",\n \"1.0.2.2\",\n \"1.0.2.1\",\n ],\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.neptune.get_engine_version(preferred_versions=[\n \"1.0.3.0\",\n \"1.0.2.2\",\n \"1.0.2.1\",\n])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = Output.Create(Aws.Neptune.GetEngineVersion.InvokeAsync(new Aws.Neptune.GetEngineVersionArgs\n {\n PreferredVersions = \n {\n \"1.0.3.0\",\n \"1.0.2.2\",\n \"1.0.2.1\",\n },\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/neptune\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := neptune.GetEngineVersion(ctx, \u0026neptune.GetEngineVersionArgs{\n\t\t\tPreferredVersions: []string{\n\t\t\t\t\"1.0.3.0\",\n\t\t\t\t\"1.0.2.2\",\n\t\t\t\t\"1.0.2.1\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { @@ -19465,6 +20026,103 @@ "type": "object" } }, + "aws:rds/getProxy:getProxy": { + "description": "Use this data source to get information about a DB Proxy.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst proxy = pulumi.output(aws.rds.getProxy({\n name: \"my-test-db-proxy\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nproxy = aws.rds.get_proxy(name=\"my-test-db-proxy\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var proxy = Output.Create(Aws.Rds.GetProxy.InvokeAsync(new Aws.Rds.GetProxyArgs\n {\n Name = \"my-test-db-proxy\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/rds\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := rds.LookupProxy(ctx, \u0026rds.LookupProxyArgs{\n\t\t\tName: \"my-test-db-proxy\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getProxy.\n", + "properties": { + "name": { + "description": "The name of the DB proxy.\n", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getProxy.\n", + "properties": { + "arn": { + "description": "The ARN of the DB Proxy.\n", + "type": "string" + }, + "auths": { + "description": "The configuration(s) with authorization mechanisms to connect to the associated instance or cluster.\n", + "items": { + "$ref": "#/types/aws:rds/getProxyAuth:getProxyAuth" + }, + "type": "array" + }, + "debugLogging": { + "description": "Whether the proxy includes detailed information about SQL statements in its logs.\n", + "type": "boolean" + }, + "endpoint": { + "description": "The endpoint that you can use to connect to the DB proxy.\n", + "type": "string" + }, + "engineFamily": { + "description": "The kinds of databases that the proxy can connect to.\n", + "type": "string" + }, + "id": { + "description": "The provider-assigned unique ID for this managed resource.\n", + "type": "string" + }, + "idleClientTimeout": { + "description": "The number of seconds a connection to the proxy can have no activity before the proxy drops the client connection.\n", + "type": "integer" + }, + "name": { + "type": "string" + }, + "requireTls": { + "description": "Indicates whether Transport Layer Security (TLS) encryption is required for connections to the proxy.\n", + "type": "boolean" + }, + "roleArn": { + "description": "The Amazon Resource Name (ARN) for the IAM role that the proxy uses to access Amazon Secrets Manager.\n", + "type": "string" + }, + "vpcId": { + "description": "Provides the VPC ID of the DB proxy.\n", + "type": "string" + }, + "vpcSecurityGroupIds": { + "description": "Provides a list of VPC security groups that the proxy belongs to.\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "vpcSubnetIds": { + "description": "The EC2 subnet IDs for the proxy.\n", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "arn", + "auths", + "debugLogging", + "endpoint", + "engineFamily", + "idleClientTimeout", + "name", + "requireTls", + "roleArn", + "vpcId", + "vpcSecurityGroupIds", + "vpcSubnetIds", + "id" + ], + "type": "object" + } + }, "aws:rds/getSnapshot:getSnapshot": { "description": "Use this data source to get information about a DB Snapshot for use when provisioning DB instances\n\n\u003e **NOTE:** This data source does not apply to snapshots created on Aurora DB clusters.\nSee the `aws.rds.ClusterSnapshot` data source for DB Cluster snapshots.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst prod = new aws.rds.Instance(\"prod\", {\n allocatedStorage: 10,\n engine: \"mysql\",\n engineVersion: \"5.6.17\",\n instanceClass: \"db.t2.micro\",\n name: \"mydb\",\n username: \"foo\",\n password: \"bar\",\n dbSubnetGroupName: \"my_database_subnet_group\",\n parameterGroupName: \"default.mysql5.6\",\n});\nconst latestProdSnapshot = prod.id.apply(id =\u003e aws.rds.getSnapshot({\n dbInstanceIdentifier: id,\n mostRecent: true,\n}));\n// Use the latest production snapshot to create a dev instance.\nconst dev = new aws.rds.Instance(\"dev\", {\n instanceClass: \"db.t2.micro\",\n name: \"mydbdev\",\n snapshotIdentifier: latestProdSnapshot.apply(latestProdSnapshot =\u003e latestProdSnapshot.id),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nprod = aws.rds.Instance(\"prod\",\n allocated_storage=10,\n engine=\"mysql\",\n engine_version=\"5.6.17\",\n instance_class=\"db.t2.micro\",\n name=\"mydb\",\n username=\"foo\",\n password=\"bar\",\n db_subnet_group_name=\"my_database_subnet_group\",\n parameter_group_name=\"default.mysql5.6\")\nlatest_prod_snapshot = prod.id.apply(lambda id: aws.rds.get_snapshot(db_instance_identifier=id,\n most_recent=True))\n# Use the latest production snapshot to create a dev instance.\ndev = aws.rds.Instance(\"dev\",\n instance_class=\"db.t2.micro\",\n name=\"mydbdev\",\n snapshot_identifier=latest_prod_snapshot.id)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var prod = new Aws.Rds.Instance(\"prod\", new Aws.Rds.InstanceArgs\n {\n AllocatedStorage = 10,\n Engine = \"mysql\",\n EngineVersion = \"5.6.17\",\n InstanceClass = \"db.t2.micro\",\n Name = \"mydb\",\n Username = \"foo\",\n Password = \"bar\",\n DbSubnetGroupName = \"my_database_subnet_group\",\n ParameterGroupName = \"default.mysql5.6\",\n });\n var latestProdSnapshot = prod.Id.Apply(id =\u003e Aws.Rds.GetSnapshot.InvokeAsync(new Aws.Rds.GetSnapshotArgs\n {\n DbInstanceIdentifier = id,\n MostRecent = true,\n }));\n // Use the latest production snapshot to create a dev instance.\n var dev = new Aws.Rds.Instance(\"dev\", new Aws.Rds.InstanceArgs\n {\n InstanceClass = \"db.t2.micro\",\n Name = \"mydbdev\",\n SnapshotIdentifier = latestProdSnapshot.Apply(latestProdSnapshot =\u003e latestProdSnapshot.Id),\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/rds\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprod, err := rds.NewInstance(ctx, \"prod\", \u0026rds.InstanceArgs{\n\t\t\tAllocatedStorage: pulumi.Int(10),\n\t\t\tEngine: pulumi.String(\"mysql\"),\n\t\t\tEngineVersion: pulumi.String(\"5.6.17\"),\n\t\t\tInstanceClass: pulumi.String(\"db.t2.micro\"),\n\t\t\tName: pulumi.String(\"mydb\"),\n\t\t\tUsername: pulumi.String(\"foo\"),\n\t\t\tPassword: pulumi.String(\"bar\"),\n\t\t\tDbSubnetGroupName: pulumi.String(\"my_database_subnet_group\"),\n\t\t\tParameterGroupName: pulumi.String(\"default.mysql5.6\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = rds.NewInstance(ctx, \"dev\", \u0026rds.InstanceArgs{\n\t\t\tInstanceClass: pulumi.String(\"db.t2.micro\"),\n\t\t\tName: pulumi.String(\"mydbdev\"),\n\t\t\tSnapshotIdentifier: latestProdSnapshot.ApplyT(func(latestProdSnapshot rds.GetSnapshotResult) (string, error) {\n\t\t\t\treturn latestProdSnapshot.Id, nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { @@ -22186,6 +22844,73 @@ "type": "object" } }, + "aws:ssm/getParametersByPath:getParametersByPath": { + "inputs": { + "description": "A collection of arguments for invoking getParametersByPath.\n", + "properties": { + "path": { + "description": "The prefix path of the parameter.\n", + "type": "string" + }, + "withDecryption": { + "description": "Whether to return decrypted `SecureString` value. Defaults to `true`.\n", + "type": "boolean" + } + }, + "required": [ + "path" + ], + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getParametersByPath.\n", + "properties": { + "arns": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "description": "The provider-assigned unique ID for this managed resource.\n", + "type": "string" + }, + "names": { + "items": { + "type": "string" + }, + "type": "array" + }, + "path": { + "type": "string" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "values": { + "items": { + "type": "string" + }, + "type": "array" + }, + "withDecryption": { + "type": "boolean" + } + }, + "required": [ + "arns", + "names", + "path", + "types", + "values", + "id" + ], + "type": "object" + } + }, "aws:ssm/getPatchBaseline:getPatchBaseline": { "description": "Provides an SSM Patch Baseline data source. Useful if you wish to reuse the default baselines provided.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nTo retrieve a baseline provided by AWS:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst centos = pulumi.output(aws.ssm.getPatchBaseline({\n namePrefix: \"AWS-\",\n operatingSystem: \"CENTOS\",\n owner: \"AWS\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ncentos = aws.ssm.get_patch_baseline(name_prefix=\"AWS-\",\n operating_system=\"CENTOS\",\n owner=\"AWS\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var centos = Output.Create(Aws.Ssm.GetPatchBaseline.InvokeAsync(new Aws.Ssm.GetPatchBaselineArgs\n {\n NamePrefix = \"AWS-\",\n OperatingSystem = \"CENTOS\",\n Owner = \"AWS\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ssm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\topt0 := \"AWS-\"\n\t\topt1 := \"CENTOS\"\n\t\t_, err := ssm.LookupPatchBaseline(ctx, \u0026ssm.LookupPatchBaselineArgs{\n\t\t\tNamePrefix: \u0026opt0,\n\t\t\tOperatingSystem: \u0026opt1,\n\t\t\tOwner: \"AWS\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nTo retrieve a baseline on your account:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst defaultCustom = pulumi.output(aws.ssm.getPatchBaseline({\n defaultBaseline: true,\n namePrefix: \"MyCustomBaseline\",\n operatingSystem: \"WINDOWS\",\n owner: \"Self\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ndefault_custom = aws.ssm.get_patch_baseline(default_baseline=True,\n name_prefix=\"MyCustomBaseline\",\n operating_system=\"WINDOWS\",\n owner=\"Self\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var defaultCustom = Output.Create(Aws.Ssm.GetPatchBaseline.InvokeAsync(new Aws.Ssm.GetPatchBaselineArgs\n {\n DefaultBaseline = true,\n NamePrefix = \"MyCustomBaseline\",\n OperatingSystem = \"WINDOWS\",\n Owner = \"Self\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ssm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\topt0 := true\n\t\topt1 := \"MyCustomBaseline\"\n\t\topt2 := \"WINDOWS\"\n\t\t_, err := ssm.LookupPatchBaseline(ctx, \u0026ssm.LookupPatchBaselineArgs{\n\t\t\tDefaultBaseline: \u0026opt0,\n\t\t\tNamePrefix: \u0026opt1,\n\t\t\tOperatingSystem: \u0026opt2,\n\t\t\tOwner: \"Self\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { @@ -23398,6 +24123,7 @@ "cfg": "Cfg", "chime": "Chime", "cloud9": "Cloud9", + "cloudcontrol": "CloudControl", "cloudformation": "CloudFormation", "cloudfront": "CloudFront", "cloudhsmv2": "CloudHsmV2", @@ -23411,6 +24137,7 @@ "codestarconnections": "CodeStarConnections", "codestarnotifications": "CodeStarNotifications", "cognito": "Cognito", + "connect": "Connect", "cur": "Cur", "datapipeline": "DataPipeline", "datasync": "DataSync", @@ -23591,12 +24318,16 @@ }, "type": "array" }, + "httpProxy": { + "description": "The address of an HTTP proxy to use when accessing the AWS API. Can also be configured using the `HTTP_PROXY` or\n`HTTPS_PROXY` environment variables.\n", + "type": "string" + }, "ignoreTags": { "$ref": "#/types/aws:index/ProviderIgnoreTags:ProviderIgnoreTags", "description": "Configuration block with settings to ignore resource tags across all resources.\n" }, "insecure": { - "description": "Explicitly allow the provider to perform \"insecure\" SSL requests. If omitted,default value is `false`\n", + "description": "Explicitly allow the provider to perform \"insecure\" SSL requests. If omitted, default value is `false`\n", "type": "boolean" }, "maxRetries": { @@ -23693,12 +24424,16 @@ }, "type": "array" }, + "httpProxy": { + "description": "The address of an HTTP proxy to use when accessing the AWS API. Can also be configured using the `HTTP_PROXY` or\n`HTTPS_PROXY` environment variables.\n", + "type": "string" + }, "ignoreTags": { "$ref": "#/types/aws:index/ProviderIgnoreTags:ProviderIgnoreTags", "description": "Configuration block with settings to ignore resource tags across all resources.\n" }, "insecure": { - "description": "Explicitly allow the provider to perform \"insecure\" SSL requests. If omitted,default value is `false`\n", + "description": "Explicitly allow the provider to perform \"insecure\" SSL requests. If omitted, default value is `false`\n", "type": "boolean" }, "maxRetries": { @@ -25202,11 +25937,11 @@ "additionalProperties": { "type": "string" }, - "description": "Map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", + "description": "Map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", "type": "object" }, "targetType": { - "description": "Type of target that you must specify when registering targets with this target group. The possible values are `instance` (targets are specified by instance ID) or `ip` (targets are specified by IP address) or `lambda` (targets are specified by lambda arn). The default is `instance`. Note that you can't specify targets for a target group using both instance IDs and IP addresses. If the target type is `ip`, specify IP addresses from the subnets of the virtual private cloud (VPC) for the target group, the RFC 1918 range (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16), and the RFC 6598 range (100.64.0.0/10). You can't specify publicly routable IP addresses.\n", + "description": "Type of target that you must specify when registering targets with this target group. See [doc](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateTargetGroup.html) for supported values. The default is `instance`.\n", "type": "string" }, "vpcId": { @@ -25279,7 +26014,7 @@ "additionalProperties": { "type": "string" }, - "description": "Map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", + "description": "Map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", "type": "object" }, "tagsAll": { @@ -25290,7 +26025,7 @@ "type": "object" }, "targetType": { - "description": "Type of target that you must specify when registering targets with this target group. The possible values are `instance` (targets are specified by instance ID) or `ip` (targets are specified by IP address) or `lambda` (targets are specified by lambda arn). The default is `instance`. Note that you can't specify targets for a target group using both instance IDs and IP addresses. If the target type is `ip`, specify IP addresses from the subnets of the virtual private cloud (VPC) for the target group, the RFC 1918 range (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16), and the RFC 6598 range (100.64.0.0/10). You can't specify publicly routable IP addresses.\n", + "description": "Type of target that you must specify when registering targets with this target group. See [doc](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateTargetGroup.html) for supported values. The default is `instance`.\n", "type": "string" }, "vpcId": { @@ -25376,7 +26111,7 @@ "additionalProperties": { "type": "string" }, - "description": "Map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", + "description": "Map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", "type": "object" }, "tagsAll": { @@ -25387,7 +26122,7 @@ "type": "object" }, "targetType": { - "description": "Type of target that you must specify when registering targets with this target group. The possible values are `instance` (targets are specified by instance ID) or `ip` (targets are specified by IP address) or `lambda` (targets are specified by lambda arn). The default is `instance`. Note that you can't specify targets for a target group using both instance IDs and IP addresses. If the target type is `ip`, specify IP addresses from the subnets of the virtual private cloud (VPC) for the target group, the RFC 1918 range (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16), and the RFC 6598 range (100.64.0.0/10). You can't specify publicly routable IP addresses.\n", + "description": "Type of target that you must specify when registering targets with this target group. See [doc](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateTargetGroup.html) for supported values. The default is `instance`.\n", "type": "string" }, "vpcId": { @@ -26573,7 +27308,7 @@ } }, "aws:apigateway/authorizer:Authorizer": { - "description": "Provides an API Gateway Authorizer.\n\n\n## Import\n\nAWS API Gateway Authorizer can be imported using the `REST-API-ID/AUTHORIZER-ID`, e.g.\n\n```sh\n $ pulumi import aws:apigateway/authorizer:Authorizer authorizer 12345abcde/example\n```\n\n ", + "description": "Provides an API Gateway Authorizer.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst demoRestApi = new aws.apigateway.RestApi(\"demoRestApi\", {});\nconst invocationRole = new aws.iam.Role(\"invocationRole\", {\n path: \"/\",\n assumeRolePolicy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"apigateway.amazonaws.com\"\n },\n \"Effect\": \"Allow\",\n \"Sid\": \"\"\n }\n ]\n}\n`,\n});\nconst lambda = new aws.iam.Role(\"lambda\", {assumeRolePolicy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"lambda.amazonaws.com\"\n },\n \"Effect\": \"Allow\",\n \"Sid\": \"\"\n }\n ]\n}\n`});\nconst authorizer = new aws.lambda.Function(\"authorizer\", {\n code: new pulumi.asset.FileArchive(\"lambda-function.zip\"),\n role: lambda.arn,\n handler: \"exports.example\",\n});\nconst demoAuthorizer = new aws.apigateway.Authorizer(\"demoAuthorizer\", {\n restApi: demoRestApi.id,\n authorizerUri: authorizer.invokeArn,\n authorizerCredentials: invocationRole.arn,\n});\nconst invocationPolicy = new aws.iam.RolePolicy(\"invocationPolicy\", {\n role: invocationRole.id,\n policy: pulumi.interpolate`{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": \"lambda:InvokeFunction\",\n \"Effect\": \"Allow\",\n \"Resource\": \"${authorizer.arn}\"\n }\n ]\n}\n`,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ndemo_rest_api = aws.apigateway.RestApi(\"demoRestApi\")\ninvocation_role = aws.iam.Role(\"invocationRole\",\n path=\"/\",\n assume_role_policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"apigateway.amazonaws.com\"\n },\n \"Effect\": \"Allow\",\n \"Sid\": \"\"\n }\n ]\n}\n\"\"\")\nlambda_ = aws.iam.Role(\"lambda\", assume_role_policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"lambda.amazonaws.com\"\n },\n \"Effect\": \"Allow\",\n \"Sid\": \"\"\n }\n ]\n}\n\"\"\")\nauthorizer = aws.lambda_.Function(\"authorizer\",\n code=pulumi.FileArchive(\"lambda-function.zip\"),\n role=lambda_.arn,\n handler=\"exports.example\")\ndemo_authorizer = aws.apigateway.Authorizer(\"demoAuthorizer\",\n rest_api=demo_rest_api.id,\n authorizer_uri=authorizer.invoke_arn,\n authorizer_credentials=invocation_role.arn)\ninvocation_policy = aws.iam.RolePolicy(\"invocationPolicy\",\n role=invocation_role.id,\n policy=authorizer.arn.apply(lambda arn: f\"\"\"{{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {{\n \"Action\": \"lambda:InvokeFunction\",\n \"Effect\": \"Allow\",\n \"Resource\": \"{arn}\"\n }}\n ]\n}}\n\"\"\"))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demoRestApi = new Aws.ApiGateway.RestApi(\"demoRestApi\", new Aws.ApiGateway.RestApiArgs\n {\n });\n var invocationRole = new Aws.Iam.Role(\"invocationRole\", new Aws.Iam.RoleArgs\n {\n Path = \"/\",\n AssumeRolePolicy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Action\"\": \"\"sts:AssumeRole\"\",\n \"\"Principal\"\": {\n \"\"Service\"\": \"\"apigateway.amazonaws.com\"\"\n },\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Sid\"\": \"\"\"\"\n }\n ]\n}\n\",\n });\n var lambda = new Aws.Iam.Role(\"lambda\", new Aws.Iam.RoleArgs\n {\n AssumeRolePolicy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Action\"\": \"\"sts:AssumeRole\"\",\n \"\"Principal\"\": {\n \"\"Service\"\": \"\"lambda.amazonaws.com\"\"\n },\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Sid\"\": \"\"\"\"\n }\n ]\n}\n\",\n });\n var authorizer = new Aws.Lambda.Function(\"authorizer\", new Aws.Lambda.FunctionArgs\n {\n Code = new FileArchive(\"lambda-function.zip\"),\n Role = lambda.Arn,\n Handler = \"exports.example\",\n });\n var demoAuthorizer = new Aws.ApiGateway.Authorizer(\"demoAuthorizer\", new Aws.ApiGateway.AuthorizerArgs\n {\n RestApi = demoRestApi.Id,\n AuthorizerUri = authorizer.InvokeArn,\n AuthorizerCredentials = invocationRole.Arn,\n });\n var invocationPolicy = new Aws.Iam.RolePolicy(\"invocationPolicy\", new Aws.Iam.RolePolicyArgs\n {\n Role = invocationRole.Id,\n Policy = authorizer.Arn.Apply(arn =\u003e @$\"{{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {{\n \"\"Action\"\": \"\"lambda:InvokeFunction\"\",\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Resource\"\": \"\"{arn}\"\"\n }}\n ]\n}}\n\"),\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nAWS API Gateway Authorizer can be imported using the `REST-API-ID/AUTHORIZER-ID`, e.g.\n\n```sh\n $ pulumi import aws:apigateway/authorizer:Authorizer authorizer 12345abcde/example\n```\n\n ", "inputProperties": { "authorizerCredentials": { "description": "The credentials required for the authorizer. To specify an IAM Role for API Gateway to assume, use the IAM Role ARN.\n", @@ -26728,7 +27463,7 @@ } }, "aws:apigateway/basePathMapping:BasePathMapping": { - "description": "Connects a custom domain name registered via `aws.apigateway.DomainName`\nwith a deployed API so that its methods can be called via the\ncustom domain name.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst exampleStage = new aws.apigateway.Stage(\"exampleStage\", {\n deployment: aws_api_gateway_deployment.example.id,\n restApi: aws_api_gateway_rest_api.example.id,\n stageName: \"example\",\n});\nconst exampleDomainName = new aws.apigateway.DomainName(\"exampleDomainName\", {\n domainName: \"example.com\",\n certificateName: \"example-api\",\n certificateBody: fs.readFileSync(`${path.module}/example.com/example.crt`),\n certificateChain: fs.readFileSync(`${path.module}/example.com/ca.crt`),\n certificatePrivateKey: fs.readFileSync(`${path.module}/example.com/example.key`),\n});\nconst exampleBasePathMapping = new aws.apigateway.BasePathMapping(\"exampleBasePathMapping\", {\n restApi: aws_api_gateway_rest_api.example.id,\n stageName: exampleStage.stageName,\n domainName: exampleDomainName.domainName,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_stage = aws.apigateway.Stage(\"exampleStage\",\n deployment=aws_api_gateway_deployment[\"example\"][\"id\"],\n rest_api=aws_api_gateway_rest_api[\"example\"][\"id\"],\n stage_name=\"example\")\nexample_domain_name = aws.apigateway.DomainName(\"exampleDomainName\",\n domain_name=\"example.com\",\n certificate_name=\"example-api\",\n certificate_body=(lambda path: open(path).read())(f\"{path['module']}/example.com/example.crt\"),\n certificate_chain=(lambda path: open(path).read())(f\"{path['module']}/example.com/ca.crt\"),\n certificate_private_key=(lambda path: open(path).read())(f\"{path['module']}/example.com/example.key\"))\nexample_base_path_mapping = aws.apigateway.BasePathMapping(\"exampleBasePathMapping\",\n rest_api=aws_api_gateway_rest_api[\"example\"][\"id\"],\n stage_name=example_stage.stage_name,\n domain_name=example_domain_name.domain_name)\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleStage = new Aws.ApiGateway.Stage(\"exampleStage\", new Aws.ApiGateway.StageArgs\n {\n Deployment = aws_api_gateway_deployment.Example.Id,\n RestApi = aws_api_gateway_rest_api.Example.Id,\n StageName = \"example\",\n });\n var exampleDomainName = new Aws.ApiGateway.DomainName(\"exampleDomainName\", new Aws.ApiGateway.DomainNameArgs\n {\n DomainName = \"example.com\",\n CertificateName = \"example-api\",\n CertificateBody = File.ReadAllText($\"{path.Module}/example.com/example.crt\"),\n CertificateChain = File.ReadAllText($\"{path.Module}/example.com/ca.crt\"),\n CertificatePrivateKey = File.ReadAllText($\"{path.Module}/example.com/example.key\"),\n });\n var exampleBasePathMapping = new Aws.ApiGateway.BasePathMapping(\"exampleBasePathMapping\", new Aws.ApiGateway.BasePathMappingArgs\n {\n RestApi = aws_api_gateway_rest_api.Example.Id,\n StageName = exampleStage.StageName,\n DomainName = exampleDomainName.Domain,\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n`aws_api_gateway_base_path_mapping` can be imported by using the domain name and base path, e.g. For empty `base_path` (e.g. root path (`/`))\n\n```sh\n $ pulumi import aws:apigateway/basePathMapping:BasePathMapping example example.com/\n```\n\n Otherwise\n\n```sh\n $ pulumi import aws:apigateway/basePathMapping:BasePathMapping example example.com/base-path\n```\n\n ", + "description": "Connects a custom domain name registered via `aws.apigateway.DomainName`\nwith a deployed API so that its methods can be called via the\ncustom domain name.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst exampleStage = new aws.apigateway.Stage(\"exampleStage\", {\n deployment: aws_api_gateway_deployment.example.id,\n restApi: aws_api_gateway_rest_api.example.id,\n stageName: \"example\",\n});\nconst exampleDomainName = new aws.apigateway.DomainName(\"exampleDomainName\", {\n domainName: \"example.com\",\n certificateName: \"example-api\",\n certificateBody: fs.readFileSync(`${path.module}/example.com/example.crt`),\n certificateChain: fs.readFileSync(`${path.module}/example.com/ca.crt`),\n certificatePrivateKey: fs.readFileSync(`${path.module}/example.com/example.key`),\n});\nconst exampleBasePathMapping = new aws.apigateway.BasePathMapping(\"exampleBasePathMapping\", {\n restApi: aws_api_gateway_rest_api.example.id,\n stageName: exampleStage.stageName,\n domainName: exampleDomainName.domainName,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_stage = aws.apigateway.Stage(\"exampleStage\",\n deployment=aws_api_gateway_deployment[\"example\"][\"id\"],\n rest_api=aws_api_gateway_rest_api[\"example\"][\"id\"],\n stage_name=\"example\")\nexample_domain_name = aws.apigateway.DomainName(\"exampleDomainName\",\n domain_name=\"example.com\",\n certificate_name=\"example-api\",\n certificate_body=(lambda path: open(path).read())(f\"{path['module']}/example.com/example.crt\"),\n certificate_chain=(lambda path: open(path).read())(f\"{path['module']}/example.com/ca.crt\"),\n certificate_private_key=(lambda path: open(path).read())(f\"{path['module']}/example.com/example.key\"))\nexample_base_path_mapping = aws.apigateway.BasePathMapping(\"exampleBasePathMapping\",\n rest_api=aws_api_gateway_rest_api[\"example\"][\"id\"],\n stage_name=example_stage.stage_name,\n domain_name=example_domain_name.domain_name)\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleStage = new Aws.ApiGateway.Stage(\"exampleStage\", new Aws.ApiGateway.StageArgs\n {\n Deployment = aws_api_gateway_deployment.Example.Id,\n RestApi = aws_api_gateway_rest_api.Example.Id,\n StageName = \"example\",\n });\n var exampleDomainName = new Aws.ApiGateway.DomainName(\"exampleDomainName\", new Aws.ApiGateway.DomainNameArgs\n {\n DomainName = \"example.com\",\n CertificateName = \"example-api\",\n CertificateBody = File.ReadAllText($\"{path.Module}/example.com/example.crt\"),\n CertificateChain = File.ReadAllText($\"{path.Module}/example.com/ca.crt\"),\n CertificatePrivateKey = File.ReadAllText($\"{path.Module}/example.com/example.key\"),\n });\n var exampleBasePathMapping = new Aws.ApiGateway.BasePathMapping(\"exampleBasePathMapping\", new Aws.ApiGateway.BasePathMappingArgs\n {\n RestApi = aws_api_gateway_rest_api.Example.Id,\n StageName = exampleStage.StageName,\n DomainName = exampleDomainName.Domain,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleStage, err := apigateway.NewStage(ctx, \"exampleStage\", \u0026apigateway.StageArgs{\n\t\t\tDeployment: pulumi.Any(aws_api_gateway_deployment.Example.Id),\n\t\t\tRestApi: pulumi.Any(aws_api_gateway_rest_api.Example.Id),\n\t\t\tStageName: pulumi.String(\"example\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleDomainName, err := apigateway.NewDomainName(ctx, \"exampleDomainName\", \u0026apigateway.DomainNameArgs{\n\t\t\tDomainName: pulumi.String(\"example.com\"),\n\t\t\tCertificateName: pulumi.String(\"example-api\"),\n\t\t\tCertificateBody: readFileOrPanic(fmt.Sprintf(\"%v%v\", path.Module, \"/example.com/example.crt\")),\n\t\t\tCertificateChain: readFileOrPanic(fmt.Sprintf(\"%v%v\", path.Module, \"/example.com/ca.crt\")),\n\t\t\tCertificatePrivateKey: readFileOrPanic(fmt.Sprintf(\"%v%v\", path.Module, \"/example.com/example.key\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewBasePathMapping(ctx, \"exampleBasePathMapping\", \u0026apigateway.BasePathMappingArgs{\n\t\t\tRestApi: pulumi.Any(aws_api_gateway_rest_api.Example.Id),\n\t\t\tStageName: exampleStage.StageName,\n\t\t\tDomainName: exampleDomainName.DomainName,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n`aws_api_gateway_base_path_mapping` can be imported by using the domain name and base path, e.g. For empty `base_path` (e.g. root path (`/`))\n\n```sh\n $ pulumi import aws:apigateway/basePathMapping:BasePathMapping example example.com/\n```\n\n Otherwise\n\n```sh\n $ pulumi import aws:apigateway/basePathMapping:BasePathMapping example example.com/base-path\n```\n\n ", "inputProperties": { "basePath": { "description": "Path segment that must be prepended to the path when accessing the API via this mapping. If omitted, the API is exposed at the root of the given domain.\n", @@ -26914,7 +27649,7 @@ } }, "aws:apigateway/deployment:Deployment": { - "description": "Manages an API Gateway REST Deployment. A deployment is a snapshot of the REST API configuration. The deployment can then be published to callable endpoints via the `aws.apigateway.Stage` resource and optionally managed further with the `aws.apigateway.BasePathMapping` resource, `aws.apigateway.DomainName` resource, and `aws_api_method_settings` resource. For more information, see the [API Gateway Developer Guide](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-deploy-api.html).\n\nTo properly capture all REST API configuration in a deployment, this resource must have dependencies on all prior resources that manage resources/paths, methods, integrations, etc.\n\n* For REST APIs that are configured via OpenAPI specification (`aws.apigateway.RestApi` resource `body` argument), no special dependency setup is needed beyond referencing the `id` attribute of that resource unless additional resources have further customized the REST API.\n* When the REST API configuration involves other resources (`aws.apigateway.Integration` resource), the dependency setup can be done with implicit resource references in the `triggers` argument or explicit resource references using the [resource `dependsOn` custom option](https://www.pulumi.com/docs/intro/concepts/resources/#dependson). The `triggers` argument should be preferred over `depends_on`, since `depends_on` can only capture dependency ordering and will not cause the resource to recreate (redeploy the REST API) with upstream configuration changes.\n\n!\u003e **WARNING:** It is recommended to use the `aws.apigateway.Stage` resource instead of managing an API Gateway Stage via the `stage_name` argument of this resource. When this resource is recreated (REST API redeployment) with the `stage_name` configured, the stage is deleted and recreated. This will cause a temporary service interruption, increase provide plan differences, and can require a second apply to recreate any downstream stage configuration such as associated `aws_api_method_settings` resources.\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}", + "description": "Manages an API Gateway REST Deployment. A deployment is a snapshot of the REST API configuration. The deployment can then be published to callable endpoints via the `aws.apigateway.Stage` resource and optionally managed further with the `aws.apigateway.BasePathMapping` resource, `aws.apigateway.DomainName` resource, and `aws_api_method_settings` resource. For more information, see the [API Gateway Developer Guide](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-deploy-api.html).\n\nTo properly capture all REST API configuration in a deployment, this resource must have dependencies on all prior resources that manage resources/paths, methods, integrations, etc.\n\n* For REST APIs that are configured via OpenAPI specification (`aws.apigateway.RestApi` resource `body` argument), no special dependency setup is needed beyond referencing the `id` attribute of that resource unless additional resources have further customized the REST API.\n* When the REST API configuration involves other resources (`aws.apigateway.Integration` resource), the dependency setup can be done with implicit resource references in the `triggers` argument or explicit resource references using the [resource `dependsOn` custom option](https://www.pulumi.com/docs/intro/concepts/resources/#dependson). The `triggers` argument should be preferred over `depends_on`, since `depends_on` can only capture dependency ordering and will not cause the resource to recreate (redeploy the REST API) with upstream configuration changes.\n\n!\u003e **WARNING:** It is recommended to use the `aws.apigateway.Stage` resource instead of managing an API Gateway Stage via the `stage_name` argument of this resource. When this resource is recreated (REST API redeployment) with the `stage_name` configured, the stage is deleted and recreated. This will cause a temporary service interruption, increase provide plan differences, and can require a second apply to recreate any downstream stage configuration such as associated `aws_api_method_settings` resources.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### OpenAPI Specification\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as crypto from \"crypto\";\n\nconst exampleRestApi = new aws.apigateway.RestApi(\"exampleRestApi\", {body: JSON.stringify({\n openapi: \"3.0.1\",\n info: {\n title: \"example\",\n version: \"1.0\",\n },\n paths: {\n \"/path1\": {\n get: {\n \"x-amazon-apigateway-integration\": {\n httpMethod: \"GET\",\n payloadFormatVersion: \"1.0\",\n type: \"HTTP_PROXY\",\n uri: \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n },\n },\n },\n },\n})});\nconst exampleDeployment = new aws.apigateway.Deployment(\"exampleDeployment\", {\n restApi: exampleRestApi.id,\n triggers: {\n redeployment: exampleRestApi.body.apply(body =\u003e JSON.stringify(body)).apply(toJSON =\u003e crypto.createHash('sha1').update(toJSON).digest('hex')),\n },\n});\nconst exampleStage = new aws.apigateway.Stage(\"exampleStage\", {\n deployment: exampleDeployment.id,\n restApi: exampleRestApi.id,\n stageName: \"example\",\n});\n```\n```python\nimport pulumi\nimport hashlib\nimport json\nimport pulumi_aws as aws\n\nexample_rest_api = aws.apigateway.RestApi(\"exampleRestApi\", body=json.dumps({\n \"openapi\": \"3.0.1\",\n \"info\": {\n \"title\": \"example\",\n \"version\": \"1.0\",\n },\n \"paths\": {\n \"/path1\": {\n \"get\": {\n \"x-amazon-apigateway-integration\": {\n \"httpMethod\": \"GET\",\n \"payloadFormatVersion\": \"1.0\",\n \"type\": \"HTTP_PROXY\",\n \"uri\": \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n },\n },\n },\n },\n}))\nexample_deployment = aws.apigateway.Deployment(\"exampleDeployment\",\n rest_api=example_rest_api.id,\n triggers={\n \"redeployment\": example_rest_api.body.apply(lambda body: json.dumps(body)).apply(lambda to_json: hashlib.sha1(to_json.encode()).hexdigest()),\n })\nexample_stage = aws.apigateway.Stage(\"exampleStage\",\n deployment=example_deployment.id,\n rest_api=example_rest_api.id,\n stage_name=\"example\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Security.Cryptography;\nusing System.Text;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n\tprivate static string ComputeSHA1(string input) {\n\t\treturn BitConverter.ToString(\n\t\t\tSHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(input))\n\t\t).Replace(\"-\",\"\").ToLowerInvariant());\n\t}\n\n public MyStack()\n {\n var exampleRestApi = new Aws.ApiGateway.RestApi(\"exampleRestApi\", new Aws.ApiGateway.RestApiArgs\n {\n Body = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n { \"openapi\", \"3.0.1\" },\n { \"info\", new Dictionary\u003cstring, object?\u003e\n {\n { \"title\", \"example\" },\n { \"version\", \"1.0\" },\n } },\n { \"paths\", new Dictionary\u003cstring, object?\u003e\n {\n { \"/path1\", new Dictionary\u003cstring, object?\u003e\n {\n { \"get\", new Dictionary\u003cstring, object?\u003e\n {\n { \"x-amazon-apigateway-integration\", new Dictionary\u003cstring, object?\u003e\n {\n { \"httpMethod\", \"GET\" },\n { \"payloadFormatVersion\", \"1.0\" },\n { \"type\", \"HTTP_PROXY\" },\n { \"uri\", \"https://ip-ranges.amazonaws.com/ip-ranges.json\" },\n } },\n } },\n } },\n } },\n }),\n });\n var exampleDeployment = new Aws.ApiGateway.Deployment(\"exampleDeployment\", new Aws.ApiGateway.DeploymentArgs\n {\n RestApi = exampleRestApi.Id,\n Triggers = \n {\n { \"redeployment\", exampleRestApi.Body.Apply(body =\u003e JsonSerializer.Serialize(body)).Apply(toJSON =\u003e ComputeSHA1(toJSON)) },\n },\n });\n var exampleStage = new Aws.ApiGateway.Stage(\"exampleStage\", new Aws.ApiGateway.StageArgs\n {\n Deployment = exampleDeployment.Id,\n RestApi = exampleRestApi.Id,\n StageName = \"example\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"crypto/sha1\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc sha1Hash(input string) string {\n\thash := sha1.Sum([]byte(input))\n\treturn hex.EncodeToString(hash[:])\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"openapi\": \"3.0.1\",\n\t\t\t\"info\": map[string]interface{}{\n\t\t\t\t\"title\": \"example\",\n\t\t\t\t\"version\": \"1.0\",\n\t\t\t},\n\t\t\t\"paths\": map[string]interface{}{\n\t\t\t\t\"/path1\": map[string]interface{}{\n\t\t\t\t\t\"get\": map[string]interface{}{\n\t\t\t\t\t\t\"x-amazon-apigateway-integration\": map[string]interface{}{\n\t\t\t\t\t\t\t\"httpMethod\": \"GET\",\n\t\t\t\t\t\t\t\"payloadFormatVersion\": \"1.0\",\n\t\t\t\t\t\t\t\"type\": \"HTTP_PROXY\",\n\t\t\t\t\t\t\t\"uri\": \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\texampleRestApi, err := apigateway.NewRestApi(ctx, \"exampleRestApi\", \u0026apigateway.RestApiArgs{\n\t\t\tBody: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleDeployment, err := apigateway.NewDeployment(ctx, \"exampleDeployment\", \u0026apigateway.DeploymentArgs{\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tTriggers: pulumi.StringMap{\n\t\t\t\t\"redeployment\": exampleRestApi.Body.ApplyT(func(body string) (pulumi.String, error) {\n\t\t\t\t\tvar _zero pulumi.String\n\t\t\t\t\ttmpJSON1, err := json.Marshal(body)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn _zero, err\n\t\t\t\t\t}\n\t\t\t\t\tjson1 := string(tmpJSON1)\n\t\t\t\t\treturn json1, nil\n\t\t\t\t}).(pulumi.StringOutput).ApplyT(func(toJSON string) (pulumi.String, error) {\n\t\t\t\t\treturn sha1Hash(toJSON), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewStage(ctx, \"exampleStage\", \u0026apigateway.StageArgs{\n\t\t\tDeployment: exampleDeployment.ID(),\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tStageName: pulumi.String(\"example\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Resources\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as crypto from \"crypto\";\n\nconst exampleRestApi = new aws.apigateway.RestApi(\"exampleRestApi\", {});\nconst exampleResource = new aws.apigateway.Resource(\"exampleResource\", {\n parentId: exampleRestApi.rootResourceId,\n pathPart: \"example\",\n restApi: exampleRestApi.id,\n});\nconst exampleMethod = new aws.apigateway.Method(\"exampleMethod\", {\n authorization: \"NONE\",\n httpMethod: \"GET\",\n resourceId: exampleResource.id,\n restApi: exampleRestApi.id,\n});\nconst exampleIntegration = new aws.apigateway.Integration(\"exampleIntegration\", {\n httpMethod: exampleMethod.httpMethod,\n resourceId: exampleResource.id,\n restApi: exampleRestApi.id,\n type: \"MOCK\",\n});\nconst exampleDeployment = new aws.apigateway.Deployment(\"exampleDeployment\", {\n restApi: exampleRestApi.id,\n triggers: {\n redeployment: pulumi.all([exampleResource.id, exampleMethod.id, exampleIntegration.id]).apply(([exampleResourceId, exampleMethodId, exampleIntegrationId]) =\u003e JSON.stringify([\n exampleResourceId,\n exampleMethodId,\n exampleIntegrationId,\n ])).apply(toJSON =\u003e crypto.createHash('sha1').update(toJSON).digest('hex')),\n },\n});\nconst exampleStage = new aws.apigateway.Stage(\"exampleStage\", {\n deployment: exampleDeployment.id,\n restApi: exampleRestApi.id,\n stageName: \"example\",\n});\n```\n```python\nimport pulumi\nimport hashlib\nimport json\nimport pulumi_aws as aws\n\nexample_rest_api = aws.apigateway.RestApi(\"exampleRestApi\")\nexample_resource = aws.apigateway.Resource(\"exampleResource\",\n parent_id=example_rest_api.root_resource_id,\n path_part=\"example\",\n rest_api=example_rest_api.id)\nexample_method = aws.apigateway.Method(\"exampleMethod\",\n authorization=\"NONE\",\n http_method=\"GET\",\n resource_id=example_resource.id,\n rest_api=example_rest_api.id)\nexample_integration = aws.apigateway.Integration(\"exampleIntegration\",\n http_method=example_method.http_method,\n resource_id=example_resource.id,\n rest_api=example_rest_api.id,\n type=\"MOCK\")\nexample_deployment = aws.apigateway.Deployment(\"exampleDeployment\",\n rest_api=example_rest_api.id,\n triggers={\n \"redeployment\": pulumi.Output.all(example_resource.id, example_method.id, example_integration.id).apply(lambda exampleResourceId, exampleMethodId, exampleIntegrationId: json.dumps([\n example_resource_id,\n example_method_id,\n example_integration_id,\n ])).apply(lambda to_json: hashlib.sha1(to_json.encode()).hexdigest()),\n })\nexample_stage = aws.apigateway.Stage(\"exampleStage\",\n deployment=example_deployment.id,\n rest_api=example_rest_api.id,\n stage_name=\"example\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Security.Cryptography;\nusing System.Text;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n\tprivate static string ComputeSHA1(string input) {\n\t\treturn BitConverter.ToString(\n\t\t\tSHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(input))\n\t\t).Replace(\"-\",\"\").ToLowerInvariant());\n\t}\n\n public MyStack()\n {\n var exampleRestApi = new Aws.ApiGateway.RestApi(\"exampleRestApi\", new Aws.ApiGateway.RestApiArgs\n {\n });\n var exampleResource = new Aws.ApiGateway.Resource(\"exampleResource\", new Aws.ApiGateway.ResourceArgs\n {\n ParentId = exampleRestApi.RootResourceId,\n PathPart = \"example\",\n RestApi = exampleRestApi.Id,\n });\n var exampleMethod = new Aws.ApiGateway.Method(\"exampleMethod\", new Aws.ApiGateway.MethodArgs\n {\n Authorization = \"NONE\",\n HttpMethod = \"GET\",\n ResourceId = exampleResource.Id,\n RestApi = exampleRestApi.Id,\n });\n var exampleIntegration = new Aws.ApiGateway.Integration(\"exampleIntegration\", new Aws.ApiGateway.IntegrationArgs\n {\n HttpMethod = exampleMethod.HttpMethod,\n ResourceId = exampleResource.Id,\n RestApi = exampleRestApi.Id,\n Type = \"MOCK\",\n });\n var exampleDeployment = new Aws.ApiGateway.Deployment(\"exampleDeployment\", new Aws.ApiGateway.DeploymentArgs\n {\n RestApi = exampleRestApi.Id,\n Triggers = \n {\n { \"redeployment\", Output.Tuple(exampleResource.Id, exampleMethod.Id, exampleIntegration.Id).Apply(values =\u003e\n {\n var exampleResourceId = values.Item1;\n var exampleMethodId = values.Item2;\n var exampleIntegrationId = values.Item3;\n return JsonSerializer.Serialize(new[]\n {\n exampleResourceId,\n exampleMethodId,\n exampleIntegrationId,\n }\n );\n }).Apply(toJSON =\u003e ComputeSHA1(toJSON)) },\n },\n });\n var exampleStage = new Aws.ApiGateway.Stage(\"exampleStage\", new Aws.ApiGateway.StageArgs\n {\n Deployment = exampleDeployment.Id,\n RestApi = exampleRestApi.Id,\n StageName = \"example\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"crypto/sha1\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc sha1Hash(input string) string {\n\thash := sha1.Sum([]byte(input))\n\treturn hex.EncodeToString(hash[:])\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleRestApi, err := apigateway.NewRestApi(ctx, \"exampleRestApi\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleResource, err := apigateway.NewResource(ctx, \"exampleResource\", \u0026apigateway.ResourceArgs{\n\t\t\tParentId: exampleRestApi.RootResourceId,\n\t\t\tPathPart: pulumi.String(\"example\"),\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleMethod, err := apigateway.NewMethod(ctx, \"exampleMethod\", \u0026apigateway.MethodArgs{\n\t\t\tAuthorization: pulumi.String(\"NONE\"),\n\t\t\tHttpMethod: pulumi.String(\"GET\"),\n\t\t\tResourceId: exampleResource.ID(),\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleIntegration, err := apigateway.NewIntegration(ctx, \"exampleIntegration\", \u0026apigateway.IntegrationArgs{\n\t\t\tHttpMethod: exampleMethod.HttpMethod,\n\t\t\tResourceId: exampleResource.ID(),\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tType: pulumi.String(\"MOCK\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleDeployment, err := apigateway.NewDeployment(ctx, \"exampleDeployment\", \u0026apigateway.DeploymentArgs{\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tTriggers: pulumi.StringMap{\n\t\t\t\t\"redeployment\": pulumi.All(exampleResource.ID(), exampleMethod.ID(), exampleIntegration.ID()).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\texampleResourceId := _args[0].(string)\n\t\t\t\t\texampleMethodId := _args[1].(string)\n\t\t\t\t\texampleIntegrationId := _args[2].(string)\n\t\t\t\t\tvar _zero string\n\t\t\t\t\ttmpJSON0, err := json.Marshal([]string{\n\t\t\t\t\t\texampleResourceId,\n\t\t\t\t\t\texampleMethodId,\n\t\t\t\t\t\texampleIntegrationId,\n\t\t\t\t\t})\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn _zero, err\n\t\t\t\t\t}\n\t\t\t\t\tjson0 := string(tmpJSON0)\n\t\t\t\t\treturn json0, nil\n\t\t\t\t}).(pulumi.StringOutput).ApplyT(func(toJSON string) (pulumi.String, error) {\n\t\t\t\t\treturn sha1Hash(toJSON), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewStage(ctx, \"exampleStage\", \u0026apigateway.StageArgs{\n\t\t\tDeployment: exampleDeployment.ID(),\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tStageName: pulumi.String(\"example\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputProperties": { "description": { "description": "Description of the deployment\n", @@ -27184,7 +27919,7 @@ } }, "aws:apigateway/domainName:DomainName": { - "description": "Registers a custom domain name for use with AWS API Gateway. Additional information about this functionality\ncan be found in the [API Gateway Developer Guide](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html).\n\nThis resource just establishes ownership of and the TLS settings for\na particular domain name. An API can be attached to a particular path\nunder the registered domain name using\nthe `aws.apigateway.BasePathMapping` resource.\n\nAPI Gateway domains can be defined as either 'edge-optimized' or 'regional'. In an edge-optimized configuration,\nAPI Gateway internally creates and manages a CloudFront distribution to route requests on the given hostname. In\naddition to this resource it's necessary to create a DNS record corresponding to the given domain name which is an alias\n(either Route53 alias or traditional CNAME) to the Cloudfront domain name exported in the `cloudfront_domain_name`\nattribute.\n\nIn a regional configuration, API Gateway does not create a CloudFront distribution to route requests to the API, though\na distribution can be created if needed. In either case, it is necessary to create a DNS record corresponding to the\ngiven domain name which is an alias (either Route53 alias or traditional CNAME) to the regional domain name exported in\nthe `regional_domain_name` attribute.\n\n\u003e **Note:** API Gateway requires the use of AWS Certificate Manager (ACM) certificates instead of Identity and Access Management (IAM) certificates in regions that support ACM. Regions that support ACM can be found in the [Regions and Endpoints Documentation](https://docs.aws.amazon.com/general/latest/gr/rande.html#acm_region). To import an existing private key and certificate into ACM or request an ACM certificate, see the `aws.acm.Certificate` resource.\n\n\u003e **Note:** The `aws.apigateway.DomainName` resource expects dependency on the `aws.acm.CertificateValidation` as\nonly verified certificates can be used. This can be made either explicitly by adding the\n`depends_on = [aws_acm_certificate_validation.cert]` attribute. Or implicitly by referring certificate ARN\nfrom the validation resource where it will be available after the resource creation:\n`regional_certificate_arn = aws_acm_certificate_validation.cert.certificate_arn`.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Edge Optimized (ACM Certificate)\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleDomainName = new aws.apigateway.DomainName(\"exampleDomainName\", {\n certificateArn: aws_acm_certificate_validation.example.certificate_arn,\n domainName: \"api.example.com\",\n});\n// Example DNS record using Route53.\n// Route53 is not specifically required; any DNS host can be used.\nconst exampleRecord = new aws.route53.Record(\"exampleRecord\", {\n name: exampleDomainName.domainName,\n type: \"A\",\n zoneId: aws_route53_zone.example.id,\n aliases: [{\n evaluateTargetHealth: true,\n name: exampleDomainName.cloudfrontDomainName,\n zoneId: exampleDomainName.cloudfrontZoneId,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_domain_name = aws.apigateway.DomainName(\"exampleDomainName\",\n certificate_arn=aws_acm_certificate_validation[\"example\"][\"certificate_arn\"],\n domain_name=\"api.example.com\")\n# Example DNS record using Route53.\n# Route53 is not specifically required; any DNS host can be used.\nexample_record = aws.route53.Record(\"exampleRecord\",\n name=example_domain_name.domain_name,\n type=\"A\",\n zone_id=aws_route53_zone[\"example\"][\"id\"],\n aliases=[aws.route53.RecordAliasArgs(\n evaluate_target_health=True,\n name=example_domain_name.cloudfront_domain_name,\n zone_id=example_domain_name.cloudfront_zone_id,\n )])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleDomainName = new Aws.ApiGateway.DomainName(\"exampleDomainName\", new Aws.ApiGateway.DomainNameArgs\n {\n CertificateArn = aws_acm_certificate_validation.Example.Certificate_arn,\n DomainName = \"api.example.com\",\n });\n // Example DNS record using Route53.\n // Route53 is not specifically required; any DNS host can be used.\n var exampleRecord = new Aws.Route53.Record(\"exampleRecord\", new Aws.Route53.RecordArgs\n {\n Name = exampleDomainName.Domain,\n Type = \"A\",\n ZoneId = aws_route53_zone.Example.Id,\n Aliases = \n {\n new Aws.Route53.Inputs.RecordAliasArgs\n {\n EvaluateTargetHealth = true,\n Name = exampleDomainName.CloudfrontDomainName,\n ZoneId = exampleDomainName.CloudfrontZoneId,\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/route53\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleDomainName, err := apigateway.NewDomainName(ctx, \"exampleDomainName\", \u0026apigateway.DomainNameArgs{\n\t\t\tCertificateArn: pulumi.Any(aws_acm_certificate_validation.Example.Certificate_arn),\n\t\t\tDomainName: pulumi.String(\"api.example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = route53.NewRecord(ctx, \"exampleRecord\", \u0026route53.RecordArgs{\n\t\t\tName: exampleDomainName.DomainName,\n\t\t\tType: pulumi.String(\"A\"),\n\t\t\tZoneId: pulumi.Any(aws_route53_zone.Example.Id),\n\t\t\tAliases: route53.RecordAliasArray{\n\t\t\t\t\u0026route53.RecordAliasArgs{\n\t\t\t\t\tEvaluateTargetHealth: pulumi.Bool(true),\n\t\t\t\t\tName: exampleDomainName.CloudfrontDomainName,\n\t\t\t\t\tZoneId: exampleDomainName.CloudfrontZoneId,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Edge Optimized (IAM Certificate)\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst exampleDomainName = new aws.apigateway.DomainName(\"exampleDomainName\", {\n domainName: \"api.example.com\",\n certificateName: \"example-api\",\n certificateBody: fs.readFileSync(`${path.module}/example.com/example.crt`),\n certificateChain: fs.readFileSync(`${path.module}/example.com/ca.crt`),\n certificatePrivateKey: fs.readFileSync(`${path.module}/example.com/example.key`),\n});\n// Example DNS record using Route53.\n// Route53 is not specifically required; any DNS host can be used.\nconst exampleRecord = new aws.route53.Record(\"exampleRecord\", {\n zoneId: aws_route53_zone.example.id,\n name: exampleDomainName.domainName,\n type: \"A\",\n aliases: [{\n name: exampleDomainName.cloudfrontDomainName,\n zoneId: exampleDomainName.cloudfrontZoneId,\n evaluateTargetHealth: true,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_domain_name = aws.apigateway.DomainName(\"exampleDomainName\",\n domain_name=\"api.example.com\",\n certificate_name=\"example-api\",\n certificate_body=(lambda path: open(path).read())(f\"{path['module']}/example.com/example.crt\"),\n certificate_chain=(lambda path: open(path).read())(f\"{path['module']}/example.com/ca.crt\"),\n certificate_private_key=(lambda path: open(path).read())(f\"{path['module']}/example.com/example.key\"))\n# Example DNS record using Route53.\n# Route53 is not specifically required; any DNS host can be used.\nexample_record = aws.route53.Record(\"exampleRecord\",\n zone_id=aws_route53_zone[\"example\"][\"id\"],\n name=example_domain_name.domain_name,\n type=\"A\",\n aliases=[aws.route53.RecordAliasArgs(\n name=example_domain_name.cloudfront_domain_name,\n zone_id=example_domain_name.cloudfront_zone_id,\n evaluate_target_health=True,\n )])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleDomainName = new Aws.ApiGateway.DomainName(\"exampleDomainName\", new Aws.ApiGateway.DomainNameArgs\n {\n DomainName = \"api.example.com\",\n CertificateName = \"example-api\",\n CertificateBody = File.ReadAllText($\"{path.Module}/example.com/example.crt\"),\n CertificateChain = File.ReadAllText($\"{path.Module}/example.com/ca.crt\"),\n CertificatePrivateKey = File.ReadAllText($\"{path.Module}/example.com/example.key\"),\n });\n // Example DNS record using Route53.\n // Route53 is not specifically required; any DNS host can be used.\n var exampleRecord = new Aws.Route53.Record(\"exampleRecord\", new Aws.Route53.RecordArgs\n {\n ZoneId = aws_route53_zone.Example.Id,\n Name = exampleDomainName.Domain,\n Type = \"A\",\n Aliases = \n {\n new Aws.Route53.Inputs.RecordAliasArgs\n {\n Name = exampleDomainName.CloudfrontDomainName,\n ZoneId = exampleDomainName.CloudfrontZoneId,\n EvaluateTargetHealth = true,\n },\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% example %}}\n### Regional (ACM Certificate)\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleDomainName = new aws.apigateway.DomainName(\"exampleDomainName\", {\n domainName: \"api.example.com\",\n regionalCertificateArn: aws_acm_certificate_validation.example.certificate_arn,\n endpointConfiguration: {\n types: [\"REGIONAL\"],\n },\n});\n// Example DNS record using Route53.\n// Route53 is not specifically required; any DNS host can be used.\nconst exampleRecord = new aws.route53.Record(\"exampleRecord\", {\n name: exampleDomainName.domainName,\n type: \"A\",\n zoneId: aws_route53_zone.example.id,\n aliases: [{\n evaluateTargetHealth: true,\n name: exampleDomainName.regionalDomainName,\n zoneId: exampleDomainName.regionalZoneId,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_domain_name = aws.apigateway.DomainName(\"exampleDomainName\",\n domain_name=\"api.example.com\",\n regional_certificate_arn=aws_acm_certificate_validation[\"example\"][\"certificate_arn\"],\n endpoint_configuration=aws.apigateway.DomainNameEndpointConfigurationArgs(\n types=[\"REGIONAL\"],\n ))\n# Example DNS record using Route53.\n# Route53 is not specifically required; any DNS host can be used.\nexample_record = aws.route53.Record(\"exampleRecord\",\n name=example_domain_name.domain_name,\n type=\"A\",\n zone_id=aws_route53_zone[\"example\"][\"id\"],\n aliases=[aws.route53.RecordAliasArgs(\n evaluate_target_health=True,\n name=example_domain_name.regional_domain_name,\n zone_id=example_domain_name.regional_zone_id,\n )])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleDomainName = new Aws.ApiGateway.DomainName(\"exampleDomainName\", new Aws.ApiGateway.DomainNameArgs\n {\n DomainName = \"api.example.com\",\n RegionalCertificateArn = aws_acm_certificate_validation.Example.Certificate_arn,\n EndpointConfiguration = new Aws.ApiGateway.Inputs.DomainNameEndpointConfigurationArgs\n {\n Types = \n {\n \"REGIONAL\",\n },\n },\n });\n // Example DNS record using Route53.\n // Route53 is not specifically required; any DNS host can be used.\n var exampleRecord = new Aws.Route53.Record(\"exampleRecord\", new Aws.Route53.RecordArgs\n {\n Name = exampleDomainName.Domain,\n Type = \"A\",\n ZoneId = aws_route53_zone.Example.Id,\n Aliases = \n {\n new Aws.Route53.Inputs.RecordAliasArgs\n {\n EvaluateTargetHealth = true,\n Name = exampleDomainName.RegionalDomainName,\n ZoneId = exampleDomainName.RegionalZoneId,\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/route53\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleDomainName, err := apigateway.NewDomainName(ctx, \"exampleDomainName\", \u0026apigateway.DomainNameArgs{\n\t\t\tDomainName: pulumi.String(\"api.example.com\"),\n\t\t\tRegionalCertificateArn: pulumi.Any(aws_acm_certificate_validation.Example.Certificate_arn),\n\t\t\tEndpointConfiguration: \u0026apigateway.DomainNameEndpointConfigurationArgs{\n\t\t\t\tTypes: pulumi.String{\n\t\t\t\t\t\"REGIONAL\",\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = route53.NewRecord(ctx, \"exampleRecord\", \u0026route53.RecordArgs{\n\t\t\tName: exampleDomainName.DomainName,\n\t\t\tType: pulumi.String(\"A\"),\n\t\t\tZoneId: pulumi.Any(aws_route53_zone.Example.Id),\n\t\t\tAliases: route53.RecordAliasArray{\n\t\t\t\t\u0026route53.RecordAliasArgs{\n\t\t\t\t\tEvaluateTargetHealth: pulumi.Bool(true),\n\t\t\t\t\tName: exampleDomainName.RegionalDomainName,\n\t\t\t\t\tZoneId: exampleDomainName.RegionalZoneId,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Regional (IAM Certificate)\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst exampleDomainName = new aws.apigateway.DomainName(\"exampleDomainName\", {\n certificateBody: fs.readFileSync(`${path.module}/example.com/example.crt`),\n certificateChain: fs.readFileSync(`${path.module}/example.com/ca.crt`),\n certificatePrivateKey: fs.readFileSync(`${path.module}/example.com/example.key`),\n domainName: \"api.example.com\",\n regionalCertificateName: \"example-api\",\n endpointConfiguration: {\n types: [\"REGIONAL\"],\n },\n});\n// Example DNS record using Route53.\n// Route53 is not specifically required; any DNS host can be used.\nconst exampleRecord = new aws.route53.Record(\"exampleRecord\", {\n name: exampleDomainName.domainName,\n type: \"A\",\n zoneId: aws_route53_zone.example.id,\n aliases: [{\n evaluateTargetHealth: true,\n name: exampleDomainName.regionalDomainName,\n zoneId: exampleDomainName.regionalZoneId,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_domain_name = aws.apigateway.DomainName(\"exampleDomainName\",\n certificate_body=(lambda path: open(path).read())(f\"{path['module']}/example.com/example.crt\"),\n certificate_chain=(lambda path: open(path).read())(f\"{path['module']}/example.com/ca.crt\"),\n certificate_private_key=(lambda path: open(path).read())(f\"{path['module']}/example.com/example.key\"),\n domain_name=\"api.example.com\",\n regional_certificate_name=\"example-api\",\n endpoint_configuration=aws.apigateway.DomainNameEndpointConfigurationArgs(\n types=[\"REGIONAL\"],\n ))\n# Example DNS record using Route53.\n# Route53 is not specifically required; any DNS host can be used.\nexample_record = aws.route53.Record(\"exampleRecord\",\n name=example_domain_name.domain_name,\n type=\"A\",\n zone_id=aws_route53_zone[\"example\"][\"id\"],\n aliases=[aws.route53.RecordAliasArgs(\n evaluate_target_health=True,\n name=example_domain_name.regional_domain_name,\n zone_id=example_domain_name.regional_zone_id,\n )])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleDomainName = new Aws.ApiGateway.DomainName(\"exampleDomainName\", new Aws.ApiGateway.DomainNameArgs\n {\n CertificateBody = File.ReadAllText($\"{path.Module}/example.com/example.crt\"),\n CertificateChain = File.ReadAllText($\"{path.Module}/example.com/ca.crt\"),\n CertificatePrivateKey = File.ReadAllText($\"{path.Module}/example.com/example.key\"),\n DomainName = \"api.example.com\",\n RegionalCertificateName = \"example-api\",\n EndpointConfiguration = new Aws.ApiGateway.Inputs.DomainNameEndpointConfigurationArgs\n {\n Types = \n {\n \"REGIONAL\",\n },\n },\n });\n // Example DNS record using Route53.\n // Route53 is not specifically required; any DNS host can be used.\n var exampleRecord = new Aws.Route53.Record(\"exampleRecord\", new Aws.Route53.RecordArgs\n {\n Name = exampleDomainName.Domain,\n Type = \"A\",\n ZoneId = aws_route53_zone.Example.Id,\n Aliases = \n {\n new Aws.Route53.Inputs.RecordAliasArgs\n {\n EvaluateTargetHealth = true,\n Name = exampleDomainName.RegionalDomainName,\n ZoneId = exampleDomainName.RegionalZoneId,\n },\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nAPI Gateway domain names can be imported using their `name`, e.g.\n\n```sh\n $ pulumi import aws:apigateway/domainName:DomainName example dev.example.com\n```\n\n ", + "description": "Registers a custom domain name for use with AWS API Gateway. Additional information about this functionality\ncan be found in the [API Gateway Developer Guide](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html).\n\nThis resource just establishes ownership of and the TLS settings for\na particular domain name. An API can be attached to a particular path\nunder the registered domain name using\nthe `aws.apigateway.BasePathMapping` resource.\n\nAPI Gateway domains can be defined as either 'edge-optimized' or 'regional'. In an edge-optimized configuration,\nAPI Gateway internally creates and manages a CloudFront distribution to route requests on the given hostname. In\naddition to this resource it's necessary to create a DNS record corresponding to the given domain name which is an alias\n(either Route53 alias or traditional CNAME) to the Cloudfront domain name exported in the `cloudfront_domain_name`\nattribute.\n\nIn a regional configuration, API Gateway does not create a CloudFront distribution to route requests to the API, though\na distribution can be created if needed. In either case, it is necessary to create a DNS record corresponding to the\ngiven domain name which is an alias (either Route53 alias or traditional CNAME) to the regional domain name exported in\nthe `regional_domain_name` attribute.\n\n\u003e **Note:** API Gateway requires the use of AWS Certificate Manager (ACM) certificates instead of Identity and Access Management (IAM) certificates in regions that support ACM. Regions that support ACM can be found in the [Regions and Endpoints Documentation](https://docs.aws.amazon.com/general/latest/gr/rande.html#acm_region). To import an existing private key and certificate into ACM or request an ACM certificate, see the `aws.acm.Certificate` resource.\n\n\u003e **Note:** The `aws.apigateway.DomainName` resource expects dependency on the `aws.acm.CertificateValidation` as\nonly verified certificates can be used. This can be made either explicitly by adding the\n`depends_on = [aws_acm_certificate_validation.cert]` attribute. Or implicitly by referring certificate ARN\nfrom the validation resource where it will be available after the resource creation:\n`regional_certificate_arn = aws_acm_certificate_validation.cert.certificate_arn`.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Edge Optimized (ACM Certificate)\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleDomainName = new aws.apigateway.DomainName(\"exampleDomainName\", {\n certificateArn: aws_acm_certificate_validation.example.certificate_arn,\n domainName: \"api.example.com\",\n});\n// Example DNS record using Route53.\n// Route53 is not specifically required; any DNS host can be used.\nconst exampleRecord = new aws.route53.Record(\"exampleRecord\", {\n name: exampleDomainName.domainName,\n type: \"A\",\n zoneId: aws_route53_zone.example.id,\n aliases: [{\n evaluateTargetHealth: true,\n name: exampleDomainName.cloudfrontDomainName,\n zoneId: exampleDomainName.cloudfrontZoneId,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_domain_name = aws.apigateway.DomainName(\"exampleDomainName\",\n certificate_arn=aws_acm_certificate_validation[\"example\"][\"certificate_arn\"],\n domain_name=\"api.example.com\")\n# Example DNS record using Route53.\n# Route53 is not specifically required; any DNS host can be used.\nexample_record = aws.route53.Record(\"exampleRecord\",\n name=example_domain_name.domain_name,\n type=\"A\",\n zone_id=aws_route53_zone[\"example\"][\"id\"],\n aliases=[aws.route53.RecordAliasArgs(\n evaluate_target_health=True,\n name=example_domain_name.cloudfront_domain_name,\n zone_id=example_domain_name.cloudfront_zone_id,\n )])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleDomainName = new Aws.ApiGateway.DomainName(\"exampleDomainName\", new Aws.ApiGateway.DomainNameArgs\n {\n CertificateArn = aws_acm_certificate_validation.Example.Certificate_arn,\n DomainName = \"api.example.com\",\n });\n // Example DNS record using Route53.\n // Route53 is not specifically required; any DNS host can be used.\n var exampleRecord = new Aws.Route53.Record(\"exampleRecord\", new Aws.Route53.RecordArgs\n {\n Name = exampleDomainName.Domain,\n Type = \"A\",\n ZoneId = aws_route53_zone.Example.Id,\n Aliases = \n {\n new Aws.Route53.Inputs.RecordAliasArgs\n {\n EvaluateTargetHealth = true,\n Name = exampleDomainName.CloudfrontDomainName,\n ZoneId = exampleDomainName.CloudfrontZoneId,\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/route53\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleDomainName, err := apigateway.NewDomainName(ctx, \"exampleDomainName\", \u0026apigateway.DomainNameArgs{\n\t\t\tCertificateArn: pulumi.Any(aws_acm_certificate_validation.Example.Certificate_arn),\n\t\t\tDomainName: pulumi.String(\"api.example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = route53.NewRecord(ctx, \"exampleRecord\", \u0026route53.RecordArgs{\n\t\t\tName: exampleDomainName.DomainName,\n\t\t\tType: pulumi.String(\"A\"),\n\t\t\tZoneId: pulumi.Any(aws_route53_zone.Example.Id),\n\t\t\tAliases: route53.RecordAliasArray{\n\t\t\t\t\u0026route53.RecordAliasArgs{\n\t\t\t\t\tEvaluateTargetHealth: pulumi.Bool(true),\n\t\t\t\t\tName: exampleDomainName.CloudfrontDomainName,\n\t\t\t\t\tZoneId: exampleDomainName.CloudfrontZoneId,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Edge Optimized (IAM Certificate)\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst exampleDomainName = new aws.apigateway.DomainName(\"exampleDomainName\", {\n domainName: \"api.example.com\",\n certificateName: \"example-api\",\n certificateBody: fs.readFileSync(`${path.module}/example.com/example.crt`),\n certificateChain: fs.readFileSync(`${path.module}/example.com/ca.crt`),\n certificatePrivateKey: fs.readFileSync(`${path.module}/example.com/example.key`),\n});\n// Example DNS record using Route53.\n// Route53 is not specifically required; any DNS host can be used.\nconst exampleRecord = new aws.route53.Record(\"exampleRecord\", {\n zoneId: aws_route53_zone.example.id,\n name: exampleDomainName.domainName,\n type: \"A\",\n aliases: [{\n name: exampleDomainName.cloudfrontDomainName,\n zoneId: exampleDomainName.cloudfrontZoneId,\n evaluateTargetHealth: true,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_domain_name = aws.apigateway.DomainName(\"exampleDomainName\",\n domain_name=\"api.example.com\",\n certificate_name=\"example-api\",\n certificate_body=(lambda path: open(path).read())(f\"{path['module']}/example.com/example.crt\"),\n certificate_chain=(lambda path: open(path).read())(f\"{path['module']}/example.com/ca.crt\"),\n certificate_private_key=(lambda path: open(path).read())(f\"{path['module']}/example.com/example.key\"))\n# Example DNS record using Route53.\n# Route53 is not specifically required; any DNS host can be used.\nexample_record = aws.route53.Record(\"exampleRecord\",\n zone_id=aws_route53_zone[\"example\"][\"id\"],\n name=example_domain_name.domain_name,\n type=\"A\",\n aliases=[aws.route53.RecordAliasArgs(\n name=example_domain_name.cloudfront_domain_name,\n zone_id=example_domain_name.cloudfront_zone_id,\n evaluate_target_health=True,\n )])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleDomainName = new Aws.ApiGateway.DomainName(\"exampleDomainName\", new Aws.ApiGateway.DomainNameArgs\n {\n DomainName = \"api.example.com\",\n CertificateName = \"example-api\",\n CertificateBody = File.ReadAllText($\"{path.Module}/example.com/example.crt\"),\n CertificateChain = File.ReadAllText($\"{path.Module}/example.com/ca.crt\"),\n CertificatePrivateKey = File.ReadAllText($\"{path.Module}/example.com/example.key\"),\n });\n // Example DNS record using Route53.\n // Route53 is not specifically required; any DNS host can be used.\n var exampleRecord = new Aws.Route53.Record(\"exampleRecord\", new Aws.Route53.RecordArgs\n {\n ZoneId = aws_route53_zone.Example.Id,\n Name = exampleDomainName.Domain,\n Type = \"A\",\n Aliases = \n {\n new Aws.Route53.Inputs.RecordAliasArgs\n {\n Name = exampleDomainName.CloudfrontDomainName,\n ZoneId = exampleDomainName.CloudfrontZoneId,\n EvaluateTargetHealth = true,\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/route53\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleDomainName, err := apigateway.NewDomainName(ctx, \"exampleDomainName\", \u0026apigateway.DomainNameArgs{\n\t\t\tDomainName: pulumi.String(\"api.example.com\"),\n\t\t\tCertificateName: pulumi.String(\"example-api\"),\n\t\t\tCertificateBody: readFileOrPanic(fmt.Sprintf(\"%v%v\", path.Module, \"/example.com/example.crt\")),\n\t\t\tCertificateChain: readFileOrPanic(fmt.Sprintf(\"%v%v\", path.Module, \"/example.com/ca.crt\")),\n\t\t\tCertificatePrivateKey: readFileOrPanic(fmt.Sprintf(\"%v%v\", path.Module, \"/example.com/example.key\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = route53.NewRecord(ctx, \"exampleRecord\", \u0026route53.RecordArgs{\n\t\t\tZoneId: pulumi.Any(aws_route53_zone.Example.Id),\n\t\t\tName: exampleDomainName.DomainName,\n\t\t\tType: pulumi.String(\"A\"),\n\t\t\tAliases: route53.RecordAliasArray{\n\t\t\t\t\u0026route53.RecordAliasArgs{\n\t\t\t\t\tName: exampleDomainName.CloudfrontDomainName,\n\t\t\t\t\tZoneId: exampleDomainName.CloudfrontZoneId,\n\t\t\t\t\tEvaluateTargetHealth: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Regional (ACM Certificate)\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleDomainName = new aws.apigateway.DomainName(\"exampleDomainName\", {\n domainName: \"api.example.com\",\n regionalCertificateArn: aws_acm_certificate_validation.example.certificate_arn,\n endpointConfiguration: {\n types: [\"REGIONAL\"],\n },\n});\n// Example DNS record using Route53.\n// Route53 is not specifically required; any DNS host can be used.\nconst exampleRecord = new aws.route53.Record(\"exampleRecord\", {\n name: exampleDomainName.domainName,\n type: \"A\",\n zoneId: aws_route53_zone.example.id,\n aliases: [{\n evaluateTargetHealth: true,\n name: exampleDomainName.regionalDomainName,\n zoneId: exampleDomainName.regionalZoneId,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_domain_name = aws.apigateway.DomainName(\"exampleDomainName\",\n domain_name=\"api.example.com\",\n regional_certificate_arn=aws_acm_certificate_validation[\"example\"][\"certificate_arn\"],\n endpoint_configuration=aws.apigateway.DomainNameEndpointConfigurationArgs(\n types=[\"REGIONAL\"],\n ))\n# Example DNS record using Route53.\n# Route53 is not specifically required; any DNS host can be used.\nexample_record = aws.route53.Record(\"exampleRecord\",\n name=example_domain_name.domain_name,\n type=\"A\",\n zone_id=aws_route53_zone[\"example\"][\"id\"],\n aliases=[aws.route53.RecordAliasArgs(\n evaluate_target_health=True,\n name=example_domain_name.regional_domain_name,\n zone_id=example_domain_name.regional_zone_id,\n )])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleDomainName = new Aws.ApiGateway.DomainName(\"exampleDomainName\", new Aws.ApiGateway.DomainNameArgs\n {\n DomainName = \"api.example.com\",\n RegionalCertificateArn = aws_acm_certificate_validation.Example.Certificate_arn,\n EndpointConfiguration = new Aws.ApiGateway.Inputs.DomainNameEndpointConfigurationArgs\n {\n Types = \n {\n \"REGIONAL\",\n },\n },\n });\n // Example DNS record using Route53.\n // Route53 is not specifically required; any DNS host can be used.\n var exampleRecord = new Aws.Route53.Record(\"exampleRecord\", new Aws.Route53.RecordArgs\n {\n Name = exampleDomainName.Domain,\n Type = \"A\",\n ZoneId = aws_route53_zone.Example.Id,\n Aliases = \n {\n new Aws.Route53.Inputs.RecordAliasArgs\n {\n EvaluateTargetHealth = true,\n Name = exampleDomainName.RegionalDomainName,\n ZoneId = exampleDomainName.RegionalZoneId,\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/route53\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleDomainName, err := apigateway.NewDomainName(ctx, \"exampleDomainName\", \u0026apigateway.DomainNameArgs{\n\t\t\tDomainName: pulumi.String(\"api.example.com\"),\n\t\t\tRegionalCertificateArn: pulumi.Any(aws_acm_certificate_validation.Example.Certificate_arn),\n\t\t\tEndpointConfiguration: \u0026apigateway.DomainNameEndpointConfigurationArgs{\n\t\t\t\tTypes: pulumi.String{\n\t\t\t\t\t\"REGIONAL\",\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = route53.NewRecord(ctx, \"exampleRecord\", \u0026route53.RecordArgs{\n\t\t\tName: exampleDomainName.DomainName,\n\t\t\tType: pulumi.String(\"A\"),\n\t\t\tZoneId: pulumi.Any(aws_route53_zone.Example.Id),\n\t\t\tAliases: route53.RecordAliasArray{\n\t\t\t\t\u0026route53.RecordAliasArgs{\n\t\t\t\t\tEvaluateTargetHealth: pulumi.Bool(true),\n\t\t\t\t\tName: exampleDomainName.RegionalDomainName,\n\t\t\t\t\tZoneId: exampleDomainName.RegionalZoneId,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Regional (IAM Certificate)\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst exampleDomainName = new aws.apigateway.DomainName(\"exampleDomainName\", {\n certificateBody: fs.readFileSync(`${path.module}/example.com/example.crt`),\n certificateChain: fs.readFileSync(`${path.module}/example.com/ca.crt`),\n certificatePrivateKey: fs.readFileSync(`${path.module}/example.com/example.key`),\n domainName: \"api.example.com\",\n regionalCertificateName: \"example-api\",\n endpointConfiguration: {\n types: [\"REGIONAL\"],\n },\n});\n// Example DNS record using Route53.\n// Route53 is not specifically required; any DNS host can be used.\nconst exampleRecord = new aws.route53.Record(\"exampleRecord\", {\n name: exampleDomainName.domainName,\n type: \"A\",\n zoneId: aws_route53_zone.example.id,\n aliases: [{\n evaluateTargetHealth: true,\n name: exampleDomainName.regionalDomainName,\n zoneId: exampleDomainName.regionalZoneId,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_domain_name = aws.apigateway.DomainName(\"exampleDomainName\",\n certificate_body=(lambda path: open(path).read())(f\"{path['module']}/example.com/example.crt\"),\n certificate_chain=(lambda path: open(path).read())(f\"{path['module']}/example.com/ca.crt\"),\n certificate_private_key=(lambda path: open(path).read())(f\"{path['module']}/example.com/example.key\"),\n domain_name=\"api.example.com\",\n regional_certificate_name=\"example-api\",\n endpoint_configuration=aws.apigateway.DomainNameEndpointConfigurationArgs(\n types=[\"REGIONAL\"],\n ))\n# Example DNS record using Route53.\n# Route53 is not specifically required; any DNS host can be used.\nexample_record = aws.route53.Record(\"exampleRecord\",\n name=example_domain_name.domain_name,\n type=\"A\",\n zone_id=aws_route53_zone[\"example\"][\"id\"],\n aliases=[aws.route53.RecordAliasArgs(\n evaluate_target_health=True,\n name=example_domain_name.regional_domain_name,\n zone_id=example_domain_name.regional_zone_id,\n )])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleDomainName = new Aws.ApiGateway.DomainName(\"exampleDomainName\", new Aws.ApiGateway.DomainNameArgs\n {\n CertificateBody = File.ReadAllText($\"{path.Module}/example.com/example.crt\"),\n CertificateChain = File.ReadAllText($\"{path.Module}/example.com/ca.crt\"),\n CertificatePrivateKey = File.ReadAllText($\"{path.Module}/example.com/example.key\"),\n DomainName = \"api.example.com\",\n RegionalCertificateName = \"example-api\",\n EndpointConfiguration = new Aws.ApiGateway.Inputs.DomainNameEndpointConfigurationArgs\n {\n Types = \n {\n \"REGIONAL\",\n },\n },\n });\n // Example DNS record using Route53.\n // Route53 is not specifically required; any DNS host can be used.\n var exampleRecord = new Aws.Route53.Record(\"exampleRecord\", new Aws.Route53.RecordArgs\n {\n Name = exampleDomainName.Domain,\n Type = \"A\",\n ZoneId = aws_route53_zone.Example.Id,\n Aliases = \n {\n new Aws.Route53.Inputs.RecordAliasArgs\n {\n EvaluateTargetHealth = true,\n Name = exampleDomainName.RegionalDomainName,\n ZoneId = exampleDomainName.RegionalZoneId,\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/route53\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleDomainName, err := apigateway.NewDomainName(ctx, \"exampleDomainName\", \u0026apigateway.DomainNameArgs{\n\t\t\tCertificateBody: readFileOrPanic(fmt.Sprintf(\"%v%v\", path.Module, \"/example.com/example.crt\")),\n\t\t\tCertificateChain: readFileOrPanic(fmt.Sprintf(\"%v%v\", path.Module, \"/example.com/ca.crt\")),\n\t\t\tCertificatePrivateKey: readFileOrPanic(fmt.Sprintf(\"%v%v\", path.Module, \"/example.com/example.key\")),\n\t\t\tDomainName: pulumi.String(\"api.example.com\"),\n\t\t\tRegionalCertificateName: pulumi.String(\"example-api\"),\n\t\t\tEndpointConfiguration: \u0026apigateway.DomainNameEndpointConfigurationArgs{\n\t\t\t\tTypes: pulumi.String{\n\t\t\t\t\t\"REGIONAL\",\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = route53.NewRecord(ctx, \"exampleRecord\", \u0026route53.RecordArgs{\n\t\t\tName: exampleDomainName.DomainName,\n\t\t\tType: pulumi.String(\"A\"),\n\t\t\tZoneId: pulumi.Any(aws_route53_zone.Example.Id),\n\t\t\tAliases: route53.RecordAliasArray{\n\t\t\t\t\u0026route53.RecordAliasArgs{\n\t\t\t\t\tEvaluateTargetHealth: pulumi.Bool(true),\n\t\t\t\t\tName: exampleDomainName.RegionalDomainName,\n\t\t\t\t\tZoneId: exampleDomainName.RegionalZoneId,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nAPI Gateway domain names can be imported using their `name`, e.g.\n\n```sh\n $ pulumi import aws:apigateway/domainName:DomainName example dev.example.com\n```\n\n ", "inputProperties": { "certificateArn": { "description": "The ARN for an AWS-managed certificate. AWS Certificate Manager is the only supported source. Used when an edge-optimized domain name is desired. Conflicts with `certificate_name`, `certificate_body`, `certificate_chain`, `certificate_private_key`, `regional_certificate_arn`, and `regional_certificate_name`.\n", @@ -27442,7 +28177,7 @@ } }, "aws:apigateway/integration:Integration": { - "description": "Provides an HTTP Method Integration for an API Gateway Integration.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst myDemoAPI = new aws.apigateway.RestApi(\"myDemoAPI\", {description: \"This is my API for demonstration purposes\"});\nconst myDemoResource = new aws.apigateway.Resource(\"myDemoResource\", {\n restApi: myDemoAPI.id,\n parentId: myDemoAPI.rootResourceId,\n pathPart: \"mydemoresource\",\n});\nconst myDemoMethod = new aws.apigateway.Method(\"myDemoMethod\", {\n restApi: myDemoAPI.id,\n resourceId: myDemoResource.id,\n httpMethod: \"GET\",\n authorization: \"NONE\",\n});\nconst myDemoIntegration = new aws.apigateway.Integration(\"myDemoIntegration\", {\n restApi: myDemoAPI.id,\n resourceId: myDemoResource.id,\n httpMethod: myDemoMethod.httpMethod,\n type: \"MOCK\",\n cacheKeyParameters: [\"method.request.path.param\"],\n cacheNamespace: \"foobar\",\n timeoutMilliseconds: 29000,\n requestParameters: {\n \"integration.request.header.X-Authorization\": \"'static'\",\n },\n requestTemplates: {\n \"application/xml\": `{\n \"body\" : $input.json('$')\n}\n`,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nmy_demo_api = aws.apigateway.RestApi(\"myDemoAPI\", description=\"This is my API for demonstration purposes\")\nmy_demo_resource = aws.apigateway.Resource(\"myDemoResource\",\n rest_api=my_demo_api.id,\n parent_id=my_demo_api.root_resource_id,\n path_part=\"mydemoresource\")\nmy_demo_method = aws.apigateway.Method(\"myDemoMethod\",\n rest_api=my_demo_api.id,\n resource_id=my_demo_resource.id,\n http_method=\"GET\",\n authorization=\"NONE\")\nmy_demo_integration = aws.apigateway.Integration(\"myDemoIntegration\",\n rest_api=my_demo_api.id,\n resource_id=my_demo_resource.id,\n http_method=my_demo_method.http_method,\n type=\"MOCK\",\n cache_key_parameters=[\"method.request.path.param\"],\n cache_namespace=\"foobar\",\n timeout_milliseconds=29000,\n request_parameters={\n \"integration.request.header.X-Authorization\": \"'static'\",\n },\n request_templates={\n \"application/xml\": \"\"\"{\n \"body\" : $input.json('$')\n}\n\"\"\",\n })\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var myDemoAPI = new Aws.ApiGateway.RestApi(\"myDemoAPI\", new Aws.ApiGateway.RestApiArgs\n {\n Description = \"This is my API for demonstration purposes\",\n });\n var myDemoResource = new Aws.ApiGateway.Resource(\"myDemoResource\", new Aws.ApiGateway.ResourceArgs\n {\n RestApi = myDemoAPI.Id,\n ParentId = myDemoAPI.RootResourceId,\n PathPart = \"mydemoresource\",\n });\n var myDemoMethod = new Aws.ApiGateway.Method(\"myDemoMethod\", new Aws.ApiGateway.MethodArgs\n {\n RestApi = myDemoAPI.Id,\n ResourceId = myDemoResource.Id,\n HttpMethod = \"GET\",\n Authorization = \"NONE\",\n });\n var myDemoIntegration = new Aws.ApiGateway.Integration(\"myDemoIntegration\", new Aws.ApiGateway.IntegrationArgs\n {\n RestApi = myDemoAPI.Id,\n ResourceId = myDemoResource.Id,\n HttpMethod = myDemoMethod.HttpMethod,\n Type = \"MOCK\",\n CacheKeyParameters = \n {\n \"method.request.path.param\",\n },\n CacheNamespace = \"foobar\",\n TimeoutMilliseconds = 29000,\n RequestParameters = \n {\n { \"integration.request.header.X-Authorization\", \"'static'\" },\n },\n RequestTemplates = \n {\n { \"application/xml\", @\"{\n \"\"body\"\" : $input.json('$')\n}\n\" },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyDemoAPI, err := apigateway.NewRestApi(ctx, \"myDemoAPI\", \u0026apigateway.RestApiArgs{\n\t\t\tDescription: pulumi.String(\"This is my API for demonstration purposes\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmyDemoResource, err := apigateway.NewResource(ctx, \"myDemoResource\", \u0026apigateway.ResourceArgs{\n\t\t\tRestApi: myDemoAPI.ID(),\n\t\t\tParentId: myDemoAPI.RootResourceId,\n\t\t\tPathPart: pulumi.String(\"mydemoresource\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmyDemoMethod, err := apigateway.NewMethod(ctx, \"myDemoMethod\", \u0026apigateway.MethodArgs{\n\t\t\tRestApi: myDemoAPI.ID(),\n\t\t\tResourceId: myDemoResource.ID(),\n\t\t\tHttpMethod: pulumi.String(\"GET\"),\n\t\t\tAuthorization: pulumi.String(\"NONE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewIntegration(ctx, \"myDemoIntegration\", \u0026apigateway.IntegrationArgs{\n\t\t\tRestApi: myDemoAPI.ID(),\n\t\t\tResourceId: myDemoResource.ID(),\n\t\t\tHttpMethod: myDemoMethod.HttpMethod,\n\t\t\tType: pulumi.String(\"MOCK\"),\n\t\t\tCacheKeyParameters: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"method.request.path.param\"),\n\t\t\t},\n\t\t\tCacheNamespace: pulumi.String(\"foobar\"),\n\t\t\tTimeoutMilliseconds: pulumi.Int(29000),\n\t\t\tRequestParameters: pulumi.StringMap{\n\t\t\t\t\"integration.request.header.X-Authorization\": pulumi.String(\"'static'\"),\n\t\t\t},\n\t\t\tRequestTemplates: pulumi.StringMap{\n\t\t\t\t\"application/xml\": pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"body\\\" : \", \"$\", \"input.json('\", \"$\", \"')\\n\", \"}\\n\")),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n## VPC Link\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst config = new pulumi.Config();\nconst name = config.requireObject(\"name\");\nconst subnetId = config.requireObject(\"subnetId\");\nconst testLoadBalancer = new aws.lb.LoadBalancer(\"testLoadBalancer\", {\n internal: true,\n loadBalancerType: \"network\",\n subnets: [subnetId],\n});\nconst testVpcLink = new aws.apigateway.VpcLink(\"testVpcLink\", {targetArn: [testLoadBalancer.arn]});\nconst testRestApi = new aws.apigateway.RestApi(\"testRestApi\", {});\nconst testResource = new aws.apigateway.Resource(\"testResource\", {\n restApi: testRestApi.id,\n parentId: testRestApi.rootResourceId,\n pathPart: \"test\",\n});\nconst testMethod = new aws.apigateway.Method(\"testMethod\", {\n restApi: testRestApi.id,\n resourceId: testResource.id,\n httpMethod: \"GET\",\n authorization: \"NONE\",\n requestModels: {\n \"application/json\": \"Error\",\n },\n});\nconst testIntegration = new aws.apigateway.Integration(\"testIntegration\", {\n restApi: testRestApi.id,\n resourceId: testResource.id,\n httpMethod: testMethod.httpMethod,\n requestTemplates: {\n \"application/json\": \"\",\n \"application/xml\": `#set($inputRoot = $input.path('$'))\n{ }`,\n },\n requestParameters: {\n \"integration.request.header.X-Authorization\": \"'static'\",\n \"integration.request.header.X-Foo\": \"'Bar'\",\n },\n type: \"HTTP\",\n uri: \"https://www.google.de\",\n integrationHttpMethod: \"GET\",\n passthroughBehavior: \"WHEN_NO_MATCH\",\n contentHandling: \"CONVERT_TO_TEXT\",\n connectionType: \"VPC_LINK\",\n connectionId: testVpcLink.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nconfig = pulumi.Config()\nname = config.require_object(\"name\")\nsubnet_id = config.require_object(\"subnetId\")\ntest_load_balancer = aws.lb.LoadBalancer(\"testLoadBalancer\",\n internal=True,\n load_balancer_type=\"network\",\n subnets=[subnet_id])\ntest_vpc_link = aws.apigateway.VpcLink(\"testVpcLink\", target_arn=[test_load_balancer.arn])\ntest_rest_api = aws.apigateway.RestApi(\"testRestApi\")\ntest_resource = aws.apigateway.Resource(\"testResource\",\n rest_api=test_rest_api.id,\n parent_id=test_rest_api.root_resource_id,\n path_part=\"test\")\ntest_method = aws.apigateway.Method(\"testMethod\",\n rest_api=test_rest_api.id,\n resource_id=test_resource.id,\n http_method=\"GET\",\n authorization=\"NONE\",\n request_models={\n \"application/json\": \"Error\",\n })\ntest_integration = aws.apigateway.Integration(\"testIntegration\",\n rest_api=test_rest_api.id,\n resource_id=test_resource.id,\n http_method=test_method.http_method,\n request_templates={\n \"application/json\": \"\",\n \"application/xml\": \"\"\"#set($inputRoot = $input.path('$'))\n{ }\"\"\",\n },\n request_parameters={\n \"integration.request.header.X-Authorization\": \"'static'\",\n \"integration.request.header.X-Foo\": \"'Bar'\",\n },\n type=\"HTTP\",\n uri=\"https://www.google.de\",\n integration_http_method=\"GET\",\n passthrough_behavior=\"WHEN_NO_MATCH\",\n content_handling=\"CONVERT_TO_TEXT\",\n connection_type=\"VPC_LINK\",\n connection_id=test_vpc_link.id)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var config = new Config();\n var name = config.RequireObject\u003cdynamic\u003e(\"name\");\n var subnetId = config.RequireObject\u003cdynamic\u003e(\"subnetId\");\n var testLoadBalancer = new Aws.LB.LoadBalancer(\"testLoadBalancer\", new Aws.LB.LoadBalancerArgs\n {\n Internal = true,\n LoadBalancerType = \"network\",\n Subnets = \n {\n subnetId,\n },\n });\n var testVpcLink = new Aws.ApiGateway.VpcLink(\"testVpcLink\", new Aws.ApiGateway.VpcLinkArgs\n {\n TargetArn = \n {\n testLoadBalancer.Arn,\n },\n });\n var testRestApi = new Aws.ApiGateway.RestApi(\"testRestApi\", new Aws.ApiGateway.RestApiArgs\n {\n });\n var testResource = new Aws.ApiGateway.Resource(\"testResource\", new Aws.ApiGateway.ResourceArgs\n {\n RestApi = testRestApi.Id,\n ParentId = testRestApi.RootResourceId,\n PathPart = \"test\",\n });\n var testMethod = new Aws.ApiGateway.Method(\"testMethod\", new Aws.ApiGateway.MethodArgs\n {\n RestApi = testRestApi.Id,\n ResourceId = testResource.Id,\n HttpMethod = \"GET\",\n Authorization = \"NONE\",\n RequestModels = \n {\n { \"application/json\", \"Error\" },\n },\n });\n var testIntegration = new Aws.ApiGateway.Integration(\"testIntegration\", new Aws.ApiGateway.IntegrationArgs\n {\n RestApi = testRestApi.Id,\n ResourceId = testResource.Id,\n HttpMethod = testMethod.HttpMethod,\n RequestTemplates = \n {\n { \"application/json\", \"\" },\n { \"application/xml\", @\"#set($inputRoot = $input.path('$'))\n{ }\" },\n },\n RequestParameters = \n {\n { \"integration.request.header.X-Authorization\", \"'static'\" },\n { \"integration.request.header.X-Foo\", \"'Bar'\" },\n },\n Type = \"HTTP\",\n Uri = \"https://www.google.de\",\n IntegrationHttpMethod = \"GET\",\n PassthroughBehavior = \"WHEN_NO_MATCH\",\n ContentHandling = \"CONVERT_TO_TEXT\",\n ConnectionType = \"VPC_LINK\",\n ConnectionId = testVpcLink.Id,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/lb\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcfg := config.New(ctx, \"\")\n\t\tname := cfg.RequireObject(\"name\")\n\t\tsubnetId := cfg.RequireObject(\"subnetId\")\n\t\ttestLoadBalancer, err := lb.NewLoadBalancer(ctx, \"testLoadBalancer\", \u0026lb.LoadBalancerArgs{\n\t\t\tInternal: pulumi.Bool(true),\n\t\t\tLoadBalancerType: pulumi.String(\"network\"),\n\t\t\tSubnets: pulumi.StringArray{\n\t\t\t\tpulumi.Any(subnetId),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestVpcLink, err := apigateway.NewVpcLink(ctx, \"testVpcLink\", \u0026apigateway.VpcLinkArgs{\n\t\t\tTargetArn: pulumi.String{\n\t\t\t\ttestLoadBalancer.Arn,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestRestApi, err := apigateway.NewRestApi(ctx, \"testRestApi\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestResource, err := apigateway.NewResource(ctx, \"testResource\", \u0026apigateway.ResourceArgs{\n\t\t\tRestApi: testRestApi.ID(),\n\t\t\tParentId: testRestApi.RootResourceId,\n\t\t\tPathPart: pulumi.String(\"test\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestMethod, err := apigateway.NewMethod(ctx, \"testMethod\", \u0026apigateway.MethodArgs{\n\t\t\tRestApi: testRestApi.ID(),\n\t\t\tResourceId: testResource.ID(),\n\t\t\tHttpMethod: pulumi.String(\"GET\"),\n\t\t\tAuthorization: pulumi.String(\"NONE\"),\n\t\t\tRequestModels: pulumi.StringMap{\n\t\t\t\t\"application/json\": pulumi.String(\"Error\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewIntegration(ctx, \"testIntegration\", \u0026apigateway.IntegrationArgs{\n\t\t\tRestApi: testRestApi.ID(),\n\t\t\tResourceId: testResource.ID(),\n\t\t\tHttpMethod: testMethod.HttpMethod,\n\t\t\tRequestTemplates: pulumi.StringMap{\n\t\t\t\t\"application/json\": pulumi.String(\"\"),\n\t\t\t\t\"application/xml\": pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v\", \"#set(\", \"$\", \"inputRoot = \", \"$\", \"input.path('\", \"$\", \"'))\\n{ }\")),\n\t\t\t},\n\t\t\tRequestParameters: pulumi.StringMap{\n\t\t\t\t\"integration.request.header.X-Authorization\": pulumi.String(\"'static'\"),\n\t\t\t\t\"integration.request.header.X-Foo\": pulumi.String(\"'Bar'\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"HTTP\"),\n\t\t\tUri: pulumi.String(\"https://www.google.de\"),\n\t\t\tIntegrationHttpMethod: pulumi.String(\"GET\"),\n\t\t\tPassthroughBehavior: pulumi.String(\"WHEN_NO_MATCH\"),\n\t\t\tContentHandling: pulumi.String(\"CONVERT_TO_TEXT\"),\n\t\t\tConnectionType: pulumi.String(\"VPC_LINK\"),\n\t\t\tConnectionId: testVpcLink.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n\n## Import\n\n`aws_api_gateway_integration` can be imported using `REST-API-ID/RESOURCE-ID/HTTP-METHOD`, e.g.\n\n```sh\n $ pulumi import aws:apigateway/integration:Integration example 12345abcde/67890fghij/GET\n```\n\n ", + "description": "Provides an HTTP Method Integration for an API Gateway Integration.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst myDemoAPI = new aws.apigateway.RestApi(\"myDemoAPI\", {description: \"This is my API for demonstration purposes\"});\nconst myDemoResource = new aws.apigateway.Resource(\"myDemoResource\", {\n restApi: myDemoAPI.id,\n parentId: myDemoAPI.rootResourceId,\n pathPart: \"mydemoresource\",\n});\nconst myDemoMethod = new aws.apigateway.Method(\"myDemoMethod\", {\n restApi: myDemoAPI.id,\n resourceId: myDemoResource.id,\n httpMethod: \"GET\",\n authorization: \"NONE\",\n});\nconst myDemoIntegration = new aws.apigateway.Integration(\"myDemoIntegration\", {\n restApi: myDemoAPI.id,\n resourceId: myDemoResource.id,\n httpMethod: myDemoMethod.httpMethod,\n type: \"MOCK\",\n cacheKeyParameters: [\"method.request.path.param\"],\n cacheNamespace: \"foobar\",\n timeoutMilliseconds: 29000,\n requestParameters: {\n \"integration.request.header.X-Authorization\": \"'static'\",\n },\n requestTemplates: {\n \"application/xml\": `{\n \"body\" : $input.json('$')\n}\n`,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nmy_demo_api = aws.apigateway.RestApi(\"myDemoAPI\", description=\"This is my API for demonstration purposes\")\nmy_demo_resource = aws.apigateway.Resource(\"myDemoResource\",\n rest_api=my_demo_api.id,\n parent_id=my_demo_api.root_resource_id,\n path_part=\"mydemoresource\")\nmy_demo_method = aws.apigateway.Method(\"myDemoMethod\",\n rest_api=my_demo_api.id,\n resource_id=my_demo_resource.id,\n http_method=\"GET\",\n authorization=\"NONE\")\nmy_demo_integration = aws.apigateway.Integration(\"myDemoIntegration\",\n rest_api=my_demo_api.id,\n resource_id=my_demo_resource.id,\n http_method=my_demo_method.http_method,\n type=\"MOCK\",\n cache_key_parameters=[\"method.request.path.param\"],\n cache_namespace=\"foobar\",\n timeout_milliseconds=29000,\n request_parameters={\n \"integration.request.header.X-Authorization\": \"'static'\",\n },\n request_templates={\n \"application/xml\": \"\"\"{\n \"body\" : $input.json('$')\n}\n\"\"\",\n })\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var myDemoAPI = new Aws.ApiGateway.RestApi(\"myDemoAPI\", new Aws.ApiGateway.RestApiArgs\n {\n Description = \"This is my API for demonstration purposes\",\n });\n var myDemoResource = new Aws.ApiGateway.Resource(\"myDemoResource\", new Aws.ApiGateway.ResourceArgs\n {\n RestApi = myDemoAPI.Id,\n ParentId = myDemoAPI.RootResourceId,\n PathPart = \"mydemoresource\",\n });\n var myDemoMethod = new Aws.ApiGateway.Method(\"myDemoMethod\", new Aws.ApiGateway.MethodArgs\n {\n RestApi = myDemoAPI.Id,\n ResourceId = myDemoResource.Id,\n HttpMethod = \"GET\",\n Authorization = \"NONE\",\n });\n var myDemoIntegration = new Aws.ApiGateway.Integration(\"myDemoIntegration\", new Aws.ApiGateway.IntegrationArgs\n {\n RestApi = myDemoAPI.Id,\n ResourceId = myDemoResource.Id,\n HttpMethod = myDemoMethod.HttpMethod,\n Type = \"MOCK\",\n CacheKeyParameters = \n {\n \"method.request.path.param\",\n },\n CacheNamespace = \"foobar\",\n TimeoutMilliseconds = 29000,\n RequestParameters = \n {\n { \"integration.request.header.X-Authorization\", \"'static'\" },\n },\n RequestTemplates = \n {\n { \"application/xml\", @\"{\n \"\"body\"\" : $input.json('$')\n}\n\" },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyDemoAPI, err := apigateway.NewRestApi(ctx, \"myDemoAPI\", \u0026apigateway.RestApiArgs{\n\t\t\tDescription: pulumi.String(\"This is my API for demonstration purposes\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmyDemoResource, err := apigateway.NewResource(ctx, \"myDemoResource\", \u0026apigateway.ResourceArgs{\n\t\t\tRestApi: myDemoAPI.ID(),\n\t\t\tParentId: myDemoAPI.RootResourceId,\n\t\t\tPathPart: pulumi.String(\"mydemoresource\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmyDemoMethod, err := apigateway.NewMethod(ctx, \"myDemoMethod\", \u0026apigateway.MethodArgs{\n\t\t\tRestApi: myDemoAPI.ID(),\n\t\t\tResourceId: myDemoResource.ID(),\n\t\t\tHttpMethod: pulumi.String(\"GET\"),\n\t\t\tAuthorization: pulumi.String(\"NONE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewIntegration(ctx, \"myDemoIntegration\", \u0026apigateway.IntegrationArgs{\n\t\t\tRestApi: myDemoAPI.ID(),\n\t\t\tResourceId: myDemoResource.ID(),\n\t\t\tHttpMethod: myDemoMethod.HttpMethod,\n\t\t\tType: pulumi.String(\"MOCK\"),\n\t\t\tCacheKeyParameters: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"method.request.path.param\"),\n\t\t\t},\n\t\t\tCacheNamespace: pulumi.String(\"foobar\"),\n\t\t\tTimeoutMilliseconds: pulumi.Int(29000),\n\t\t\tRequestParameters: pulumi.StringMap{\n\t\t\t\t\"integration.request.header.X-Authorization\": pulumi.String(\"'static'\"),\n\t\t\t},\n\t\t\tRequestTemplates: pulumi.StringMap{\n\t\t\t\t\"application/xml\": pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"body\\\" : \", \"$\", \"input.json('\", \"$\", \"')\\n\", \"}\\n\")),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n## Lambda integration\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst config = new pulumi.Config();\nconst myregion = config.requireObject(\"myregion\");\nconst accountId = config.requireObject(\"accountId\");\n// API Gateway\nconst api = new aws.apigateway.RestApi(\"api\", {});\nconst resource = new aws.apigateway.Resource(\"resource\", {\n pathPart: \"resource\",\n parentId: api.rootResourceId,\n restApi: api.id,\n});\nconst method = new aws.apigateway.Method(\"method\", {\n restApi: api.id,\n resourceId: resource.id,\n httpMethod: \"GET\",\n authorization: \"NONE\",\n});\n// IAM\nconst role = new aws.iam.Role(\"role\", {assumeRolePolicy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"lambda.amazonaws.com\"\n },\n \"Effect\": \"Allow\",\n \"Sid\": \"\"\n }\n ]\n}\n`});\nconst lambda = new aws.lambda.Function(\"lambda\", {\n code: new pulumi.asset.FileArchive(\"lambda.zip\"),\n role: role.arn,\n handler: \"lambda.lambda_handler\",\n runtime: \"python3.6\",\n});\nconst integration = new aws.apigateway.Integration(\"integration\", {\n restApi: api.id,\n resourceId: resource.id,\n httpMethod: method.httpMethod,\n integrationHttpMethod: \"POST\",\n type: \"AWS_PROXY\",\n uri: lambda.invokeArn,\n});\n// Lambda\nconst apigwLambda = new aws.lambda.Permission(\"apigwLambda\", {\n action: \"lambda:InvokeFunction\",\n \"function\": lambda.name,\n principal: \"apigateway.amazonaws.com\",\n sourceArn: pulumi.interpolate`arn:aws:execute-api:${myregion}:${accountId}:${api.id}/*/${method.httpMethod}${resource.path}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nconfig = pulumi.Config()\nmyregion = config.require_object(\"myregion\")\naccount_id = config.require_object(\"accountId\")\n# API Gateway\napi = aws.apigateway.RestApi(\"api\")\nresource = aws.apigateway.Resource(\"resource\",\n path_part=\"resource\",\n parent_id=api.root_resource_id,\n rest_api=api.id)\nmethod = aws.apigateway.Method(\"method\",\n rest_api=api.id,\n resource_id=resource.id,\n http_method=\"GET\",\n authorization=\"NONE\")\n# IAM\nrole = aws.iam.Role(\"role\", assume_role_policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"lambda.amazonaws.com\"\n },\n \"Effect\": \"Allow\",\n \"Sid\": \"\"\n }\n ]\n}\n\"\"\")\nlambda_ = aws.lambda_.Function(\"lambda\",\n code=pulumi.FileArchive(\"lambda.zip\"),\n role=role.arn,\n handler=\"lambda.lambda_handler\",\n runtime=\"python3.6\")\nintegration = aws.apigateway.Integration(\"integration\",\n rest_api=api.id,\n resource_id=resource.id,\n http_method=method.http_method,\n integration_http_method=\"POST\",\n type=\"AWS_PROXY\",\n uri=lambda_.invoke_arn)\n# Lambda\napigw_lambda = aws.lambda_.Permission(\"apigwLambda\",\n action=\"lambda:InvokeFunction\",\n function=lambda_.name,\n principal=\"apigateway.amazonaws.com\",\n source_arn=pulumi.Output.all(api.id, method.http_method, resource.path).apply(lambda id, http_method, path: f\"arn:aws:execute-api:{myregion}:{account_id}:{id}/*/{http_method}{path}\"))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var config = new Config();\n var myregion = config.RequireObject\u003cdynamic\u003e(\"myregion\");\n var accountId = config.RequireObject\u003cdynamic\u003e(\"accountId\");\n // API Gateway\n var api = new Aws.ApiGateway.RestApi(\"api\", new Aws.ApiGateway.RestApiArgs\n {\n });\n var resource = new Aws.ApiGateway.Resource(\"resource\", new Aws.ApiGateway.ResourceArgs\n {\n PathPart = \"resource\",\n ParentId = api.RootResourceId,\n RestApi = api.Id,\n });\n var method = new Aws.ApiGateway.Method(\"method\", new Aws.ApiGateway.MethodArgs\n {\n RestApi = api.Id,\n ResourceId = resource.Id,\n HttpMethod = \"GET\",\n Authorization = \"NONE\",\n });\n // IAM\n var role = new Aws.Iam.Role(\"role\", new Aws.Iam.RoleArgs\n {\n AssumeRolePolicy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Action\"\": \"\"sts:AssumeRole\"\",\n \"\"Principal\"\": {\n \"\"Service\"\": \"\"lambda.amazonaws.com\"\"\n },\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Sid\"\": \"\"\"\"\n }\n ]\n}\n\",\n });\n var lambda = new Aws.Lambda.Function(\"lambda\", new Aws.Lambda.FunctionArgs\n {\n Code = new FileArchive(\"lambda.zip\"),\n Role = role.Arn,\n Handler = \"lambda.lambda_handler\",\n Runtime = \"python3.6\",\n });\n var integration = new Aws.ApiGateway.Integration(\"integration\", new Aws.ApiGateway.IntegrationArgs\n {\n RestApi = api.Id,\n ResourceId = resource.Id,\n HttpMethod = method.HttpMethod,\n IntegrationHttpMethod = \"POST\",\n Type = \"AWS_PROXY\",\n Uri = lambda.InvokeArn,\n });\n // Lambda\n var apigwLambda = new Aws.Lambda.Permission(\"apigwLambda\", new Aws.Lambda.PermissionArgs\n {\n Action = \"lambda:InvokeFunction\",\n Function = lambda.Name,\n Principal = \"apigateway.amazonaws.com\",\n SourceArn = Output.Tuple(api.Id, method.HttpMethod, resource.Path).Apply(values =\u003e\n {\n var id = values.Item1;\n var httpMethod = values.Item2;\n var path = values.Item3;\n return $\"arn:aws:execute-api:{myregion}:{accountId}:{id}/*/{httpMethod}{path}\";\n }),\n });\n }\n\n}\n```\n\n## VPC Link\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst config = new pulumi.Config();\nconst name = config.requireObject(\"name\");\nconst subnetId = config.requireObject(\"subnetId\");\nconst testLoadBalancer = new aws.lb.LoadBalancer(\"testLoadBalancer\", {\n internal: true,\n loadBalancerType: \"network\",\n subnets: [subnetId],\n});\nconst testVpcLink = new aws.apigateway.VpcLink(\"testVpcLink\", {targetArn: [testLoadBalancer.arn]});\nconst testRestApi = new aws.apigateway.RestApi(\"testRestApi\", {});\nconst testResource = new aws.apigateway.Resource(\"testResource\", {\n restApi: testRestApi.id,\n parentId: testRestApi.rootResourceId,\n pathPart: \"test\",\n});\nconst testMethod = new aws.apigateway.Method(\"testMethod\", {\n restApi: testRestApi.id,\n resourceId: testResource.id,\n httpMethod: \"GET\",\n authorization: \"NONE\",\n requestModels: {\n \"application/json\": \"Error\",\n },\n});\nconst testIntegration = new aws.apigateway.Integration(\"testIntegration\", {\n restApi: testRestApi.id,\n resourceId: testResource.id,\n httpMethod: testMethod.httpMethod,\n requestTemplates: {\n \"application/json\": \"\",\n \"application/xml\": `#set($inputRoot = $input.path('$'))\n{ }`,\n },\n requestParameters: {\n \"integration.request.header.X-Authorization\": \"'static'\",\n \"integration.request.header.X-Foo\": \"'Bar'\",\n },\n type: \"HTTP\",\n uri: \"https://www.google.de\",\n integrationHttpMethod: \"GET\",\n passthroughBehavior: \"WHEN_NO_MATCH\",\n contentHandling: \"CONVERT_TO_TEXT\",\n connectionType: \"VPC_LINK\",\n connectionId: testVpcLink.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nconfig = pulumi.Config()\nname = config.require_object(\"name\")\nsubnet_id = config.require_object(\"subnetId\")\ntest_load_balancer = aws.lb.LoadBalancer(\"testLoadBalancer\",\n internal=True,\n load_balancer_type=\"network\",\n subnets=[subnet_id])\ntest_vpc_link = aws.apigateway.VpcLink(\"testVpcLink\", target_arn=[test_load_balancer.arn])\ntest_rest_api = aws.apigateway.RestApi(\"testRestApi\")\ntest_resource = aws.apigateway.Resource(\"testResource\",\n rest_api=test_rest_api.id,\n parent_id=test_rest_api.root_resource_id,\n path_part=\"test\")\ntest_method = aws.apigateway.Method(\"testMethod\",\n rest_api=test_rest_api.id,\n resource_id=test_resource.id,\n http_method=\"GET\",\n authorization=\"NONE\",\n request_models={\n \"application/json\": \"Error\",\n })\ntest_integration = aws.apigateway.Integration(\"testIntegration\",\n rest_api=test_rest_api.id,\n resource_id=test_resource.id,\n http_method=test_method.http_method,\n request_templates={\n \"application/json\": \"\",\n \"application/xml\": \"\"\"#set($inputRoot = $input.path('$'))\n{ }\"\"\",\n },\n request_parameters={\n \"integration.request.header.X-Authorization\": \"'static'\",\n \"integration.request.header.X-Foo\": \"'Bar'\",\n },\n type=\"HTTP\",\n uri=\"https://www.google.de\",\n integration_http_method=\"GET\",\n passthrough_behavior=\"WHEN_NO_MATCH\",\n content_handling=\"CONVERT_TO_TEXT\",\n connection_type=\"VPC_LINK\",\n connection_id=test_vpc_link.id)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var config = new Config();\n var name = config.RequireObject\u003cdynamic\u003e(\"name\");\n var subnetId = config.RequireObject\u003cdynamic\u003e(\"subnetId\");\n var testLoadBalancer = new Aws.LB.LoadBalancer(\"testLoadBalancer\", new Aws.LB.LoadBalancerArgs\n {\n Internal = true,\n LoadBalancerType = \"network\",\n Subnets = \n {\n subnetId,\n },\n });\n var testVpcLink = new Aws.ApiGateway.VpcLink(\"testVpcLink\", new Aws.ApiGateway.VpcLinkArgs\n {\n TargetArn = \n {\n testLoadBalancer.Arn,\n },\n });\n var testRestApi = new Aws.ApiGateway.RestApi(\"testRestApi\", new Aws.ApiGateway.RestApiArgs\n {\n });\n var testResource = new Aws.ApiGateway.Resource(\"testResource\", new Aws.ApiGateway.ResourceArgs\n {\n RestApi = testRestApi.Id,\n ParentId = testRestApi.RootResourceId,\n PathPart = \"test\",\n });\n var testMethod = new Aws.ApiGateway.Method(\"testMethod\", new Aws.ApiGateway.MethodArgs\n {\n RestApi = testRestApi.Id,\n ResourceId = testResource.Id,\n HttpMethod = \"GET\",\n Authorization = \"NONE\",\n RequestModels = \n {\n { \"application/json\", \"Error\" },\n },\n });\n var testIntegration = new Aws.ApiGateway.Integration(\"testIntegration\", new Aws.ApiGateway.IntegrationArgs\n {\n RestApi = testRestApi.Id,\n ResourceId = testResource.Id,\n HttpMethod = testMethod.HttpMethod,\n RequestTemplates = \n {\n { \"application/json\", \"\" },\n { \"application/xml\", @\"#set($inputRoot = $input.path('$'))\n{ }\" },\n },\n RequestParameters = \n {\n { \"integration.request.header.X-Authorization\", \"'static'\" },\n { \"integration.request.header.X-Foo\", \"'Bar'\" },\n },\n Type = \"HTTP\",\n Uri = \"https://www.google.de\",\n IntegrationHttpMethod = \"GET\",\n PassthroughBehavior = \"WHEN_NO_MATCH\",\n ContentHandling = \"CONVERT_TO_TEXT\",\n ConnectionType = \"VPC_LINK\",\n ConnectionId = testVpcLink.Id,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/lb\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcfg := config.New(ctx, \"\")\n\t\tname := cfg.RequireObject(\"name\")\n\t\tsubnetId := cfg.RequireObject(\"subnetId\")\n\t\ttestLoadBalancer, err := lb.NewLoadBalancer(ctx, \"testLoadBalancer\", \u0026lb.LoadBalancerArgs{\n\t\t\tInternal: pulumi.Bool(true),\n\t\t\tLoadBalancerType: pulumi.String(\"network\"),\n\t\t\tSubnets: pulumi.StringArray{\n\t\t\t\tpulumi.Any(subnetId),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestVpcLink, err := apigateway.NewVpcLink(ctx, \"testVpcLink\", \u0026apigateway.VpcLinkArgs{\n\t\t\tTargetArn: pulumi.String{\n\t\t\t\ttestLoadBalancer.Arn,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestRestApi, err := apigateway.NewRestApi(ctx, \"testRestApi\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestResource, err := apigateway.NewResource(ctx, \"testResource\", \u0026apigateway.ResourceArgs{\n\t\t\tRestApi: testRestApi.ID(),\n\t\t\tParentId: testRestApi.RootResourceId,\n\t\t\tPathPart: pulumi.String(\"test\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestMethod, err := apigateway.NewMethod(ctx, \"testMethod\", \u0026apigateway.MethodArgs{\n\t\t\tRestApi: testRestApi.ID(),\n\t\t\tResourceId: testResource.ID(),\n\t\t\tHttpMethod: pulumi.String(\"GET\"),\n\t\t\tAuthorization: pulumi.String(\"NONE\"),\n\t\t\tRequestModels: pulumi.StringMap{\n\t\t\t\t\"application/json\": pulumi.String(\"Error\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewIntegration(ctx, \"testIntegration\", \u0026apigateway.IntegrationArgs{\n\t\t\tRestApi: testRestApi.ID(),\n\t\t\tResourceId: testResource.ID(),\n\t\t\tHttpMethod: testMethod.HttpMethod,\n\t\t\tRequestTemplates: pulumi.StringMap{\n\t\t\t\t\"application/json\": pulumi.String(\"\"),\n\t\t\t\t\"application/xml\": pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v\", \"#set(\", \"$\", \"inputRoot = \", \"$\", \"input.path('\", \"$\", \"'))\\n{ }\")),\n\t\t\t},\n\t\t\tRequestParameters: pulumi.StringMap{\n\t\t\t\t\"integration.request.header.X-Authorization\": pulumi.String(\"'static'\"),\n\t\t\t\t\"integration.request.header.X-Foo\": pulumi.String(\"'Bar'\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"HTTP\"),\n\t\t\tUri: pulumi.String(\"https://www.google.de\"),\n\t\t\tIntegrationHttpMethod: pulumi.String(\"GET\"),\n\t\t\tPassthroughBehavior: pulumi.String(\"WHEN_NO_MATCH\"),\n\t\t\tContentHandling: pulumi.String(\"CONVERT_TO_TEXT\"),\n\t\t\tConnectionType: pulumi.String(\"VPC_LINK\"),\n\t\t\tConnectionId: testVpcLink.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n\n## Import\n\n`aws_api_gateway_integration` can be imported using `REST-API-ID/RESOURCE-ID/HTTP-METHOD`, e.g.\n\n```sh\n $ pulumi import aws:apigateway/integration:Integration example 12345abcde/67890fghij/GET\n```\n\n ", "inputProperties": { "cacheKeyParameters": { "description": "A list of cache key parameters for the integration.\n", @@ -28210,7 +28945,7 @@ } }, "aws:apigateway/methodSettings:MethodSettings": { - "description": "Manages API Gateway Stage Method Settings. For example, CloudWatch logging and metrics.\n\n\u003e **NOTE:** It is recommended to use this resource in conjunction with the `aws.apigateway.Stage` resource instead of a stage managed by the `aws.apigateway.Deployment` resource optional `stage_name` argument. Stages managed by the `aws.apigateway.Deployment` resource are recreated on redeployment and this resource will require a second apply to recreate the method settings.\n\n\n## Import\n\n`aws_api_gateway_method_settings` can be imported using `REST-API-ID/STAGE-NAME/METHOD-PATH`, e.g.\n\n```sh\n $ pulumi import aws:apigateway/methodSettings:MethodSettings example 12345abcde/example/test/GET\n```\n\n ", + "description": "Manages API Gateway Stage Method Settings. For example, CloudWatch logging and metrics.\n\n\u003e **NOTE:** It is recommended to use this resource in conjunction with the `aws.apigateway.Stage` resource instead of a stage managed by the `aws.apigateway.Deployment` resource optional `stage_name` argument. Stages managed by the `aws.apigateway.Deployment` resource are recreated on redeployment and this resource will require a second apply to recreate the method settings.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as crypto from \"crypto\";\n\nconst exampleRestApi = new aws.apigateway.RestApi(\"exampleRestApi\", {body: JSON.stringify({\n openapi: \"3.0.1\",\n info: {\n title: \"example\",\n version: \"1.0\",\n },\n paths: {\n \"/path1\": {\n get: {\n \"x-amazon-apigateway-integration\": {\n httpMethod: \"GET\",\n payloadFormatVersion: \"1.0\",\n type: \"HTTP_PROXY\",\n uri: \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n },\n },\n },\n },\n})});\nconst exampleDeployment = new aws.apigateway.Deployment(\"exampleDeployment\", {\n restApi: exampleRestApi.id,\n triggers: {\n redeployment: exampleRestApi.body.apply(body =\u003e JSON.stringify(body)).apply(toJSON =\u003e crypto.createHash('sha1').update(toJSON).digest('hex')),\n },\n});\nconst exampleStage = new aws.apigateway.Stage(\"exampleStage\", {\n deployment: exampleDeployment.id,\n restApi: exampleRestApi.id,\n stageName: \"example\",\n});\nconst all = new aws.apigateway.MethodSettings(\"all\", {\n restApi: exampleRestApi.id,\n stageName: exampleStage.stageName,\n methodPath: \"*/*\",\n settings: {\n metricsEnabled: true,\n loggingLevel: \"ERROR\",\n },\n});\nconst pathSpecific = new aws.apigateway.MethodSettings(\"pathSpecific\", {\n restApi: exampleRestApi.id,\n stageName: exampleStage.stageName,\n methodPath: \"path1/GET\",\n settings: {\n metricsEnabled: true,\n loggingLevel: \"INFO\",\n },\n});\n```\n```python\nimport pulumi\nimport hashlib\nimport json\nimport pulumi_aws as aws\n\nexample_rest_api = aws.apigateway.RestApi(\"exampleRestApi\", body=json.dumps({\n \"openapi\": \"3.0.1\",\n \"info\": {\n \"title\": \"example\",\n \"version\": \"1.0\",\n },\n \"paths\": {\n \"/path1\": {\n \"get\": {\n \"x-amazon-apigateway-integration\": {\n \"httpMethod\": \"GET\",\n \"payloadFormatVersion\": \"1.0\",\n \"type\": \"HTTP_PROXY\",\n \"uri\": \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n },\n },\n },\n },\n}))\nexample_deployment = aws.apigateway.Deployment(\"exampleDeployment\",\n rest_api=example_rest_api.id,\n triggers={\n \"redeployment\": example_rest_api.body.apply(lambda body: json.dumps(body)).apply(lambda to_json: hashlib.sha1(to_json.encode()).hexdigest()),\n })\nexample_stage = aws.apigateway.Stage(\"exampleStage\",\n deployment=example_deployment.id,\n rest_api=example_rest_api.id,\n stage_name=\"example\")\nall = aws.apigateway.MethodSettings(\"all\",\n rest_api=example_rest_api.id,\n stage_name=example_stage.stage_name,\n method_path=\"*/*\",\n settings=aws.apigateway.MethodSettingsSettingsArgs(\n metrics_enabled=True,\n logging_level=\"ERROR\",\n ))\npath_specific = aws.apigateway.MethodSettings(\"pathSpecific\",\n rest_api=example_rest_api.id,\n stage_name=example_stage.stage_name,\n method_path=\"path1/GET\",\n settings=aws.apigateway.MethodSettingsSettingsArgs(\n metrics_enabled=True,\n logging_level=\"INFO\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Security.Cryptography;\nusing System.Text;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n\tprivate static string ComputeSHA1(string input) {\n\t\treturn BitConverter.ToString(\n\t\t\tSHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(input))\n\t\t).Replace(\"-\",\"\").ToLowerInvariant());\n\t}\n\n public MyStack()\n {\n var exampleRestApi = new Aws.ApiGateway.RestApi(\"exampleRestApi\", new Aws.ApiGateway.RestApiArgs\n {\n Body = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n { \"openapi\", \"3.0.1\" },\n { \"info\", new Dictionary\u003cstring, object?\u003e\n {\n { \"title\", \"example\" },\n { \"version\", \"1.0\" },\n } },\n { \"paths\", new Dictionary\u003cstring, object?\u003e\n {\n { \"/path1\", new Dictionary\u003cstring, object?\u003e\n {\n { \"get\", new Dictionary\u003cstring, object?\u003e\n {\n { \"x-amazon-apigateway-integration\", new Dictionary\u003cstring, object?\u003e\n {\n { \"httpMethod\", \"GET\" },\n { \"payloadFormatVersion\", \"1.0\" },\n { \"type\", \"HTTP_PROXY\" },\n { \"uri\", \"https://ip-ranges.amazonaws.com/ip-ranges.json\" },\n } },\n } },\n } },\n } },\n }),\n });\n var exampleDeployment = new Aws.ApiGateway.Deployment(\"exampleDeployment\", new Aws.ApiGateway.DeploymentArgs\n {\n RestApi = exampleRestApi.Id,\n Triggers = \n {\n { \"redeployment\", exampleRestApi.Body.Apply(body =\u003e JsonSerializer.Serialize(body)).Apply(toJSON =\u003e ComputeSHA1(toJSON)) },\n },\n });\n var exampleStage = new Aws.ApiGateway.Stage(\"exampleStage\", new Aws.ApiGateway.StageArgs\n {\n Deployment = exampleDeployment.Id,\n RestApi = exampleRestApi.Id,\n StageName = \"example\",\n });\n var all = new Aws.ApiGateway.MethodSettings(\"all\", new Aws.ApiGateway.MethodSettingsArgs\n {\n RestApi = exampleRestApi.Id,\n StageName = exampleStage.StageName,\n MethodPath = \"*/*\",\n Settings = new Aws.ApiGateway.Inputs.MethodSettingsSettingsArgs\n {\n MetricsEnabled = true,\n LoggingLevel = \"ERROR\",\n },\n });\n var pathSpecific = new Aws.ApiGateway.MethodSettings(\"pathSpecific\", new Aws.ApiGateway.MethodSettingsArgs\n {\n RestApi = exampleRestApi.Id,\n StageName = exampleStage.StageName,\n MethodPath = \"path1/GET\",\n Settings = new Aws.ApiGateway.Inputs.MethodSettingsSettingsArgs\n {\n MetricsEnabled = true,\n LoggingLevel = \"INFO\",\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"crypto/sha1\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc sha1Hash(input string) string {\n\thash := sha1.Sum([]byte(input))\n\treturn hex.EncodeToString(hash[:])\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"openapi\": \"3.0.1\",\n\t\t\t\"info\": map[string]interface{}{\n\t\t\t\t\"title\": \"example\",\n\t\t\t\t\"version\": \"1.0\",\n\t\t\t},\n\t\t\t\"paths\": map[string]interface{}{\n\t\t\t\t\"/path1\": map[string]interface{}{\n\t\t\t\t\t\"get\": map[string]interface{}{\n\t\t\t\t\t\t\"x-amazon-apigateway-integration\": map[string]interface{}{\n\t\t\t\t\t\t\t\"httpMethod\": \"GET\",\n\t\t\t\t\t\t\t\"payloadFormatVersion\": \"1.0\",\n\t\t\t\t\t\t\t\"type\": \"HTTP_PROXY\",\n\t\t\t\t\t\t\t\"uri\": \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\texampleRestApi, err := apigateway.NewRestApi(ctx, \"exampleRestApi\", \u0026apigateway.RestApiArgs{\n\t\t\tBody: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleDeployment, err := apigateway.NewDeployment(ctx, \"exampleDeployment\", \u0026apigateway.DeploymentArgs{\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tTriggers: pulumi.StringMap{\n\t\t\t\t\"redeployment\": exampleRestApi.Body.ApplyT(func(body string) (pulumi.String, error) {\n\t\t\t\t\tvar _zero pulumi.String\n\t\t\t\t\ttmpJSON1, err := json.Marshal(body)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn _zero, err\n\t\t\t\t\t}\n\t\t\t\t\tjson1 := string(tmpJSON1)\n\t\t\t\t\treturn json1, nil\n\t\t\t\t}).(pulumi.StringOutput).ApplyT(func(toJSON string) (pulumi.String, error) {\n\t\t\t\t\treturn sha1Hash(toJSON), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleStage, err := apigateway.NewStage(ctx, \"exampleStage\", \u0026apigateway.StageArgs{\n\t\t\tDeployment: exampleDeployment.ID(),\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tStageName: pulumi.String(\"example\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewMethodSettings(ctx, \"all\", \u0026apigateway.MethodSettingsArgs{\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tStageName: exampleStage.StageName,\n\t\t\tMethodPath: pulumi.String(\"*/*\"),\n\t\t\tSettings: \u0026apigateway.MethodSettingsSettingsArgs{\n\t\t\t\tMetricsEnabled: pulumi.Bool(true),\n\t\t\t\tLoggingLevel: pulumi.String(\"ERROR\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewMethodSettings(ctx, \"pathSpecific\", \u0026apigateway.MethodSettingsArgs{\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tStageName: exampleStage.StageName,\n\t\t\tMethodPath: pulumi.String(\"path1/GET\"),\n\t\t\tSettings: \u0026apigateway.MethodSettingsSettingsArgs{\n\t\t\t\tMetricsEnabled: pulumi.Bool(true),\n\t\t\t\tLoggingLevel: pulumi.String(\"INFO\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n`aws_api_gateway_method_settings` can be imported using `REST-API-ID/STAGE-NAME/METHOD-PATH`, e.g.\n\n```sh\n $ pulumi import aws:apigateway/methodSettings:MethodSettings example 12345abcde/example/test/GET\n```\n\n ", "inputProperties": { "methodPath": { "description": "Method path defined as `{resource_path}/{http_method}` for an individual method override, or `*/*` for overriding all methods in the stage. Ensure to trim any leading forward slashes in the path (e.g. `trimprefix(aws_api_gateway_resource.example.path, \"/\")`).\n", @@ -28672,7 +29407,7 @@ } }, "aws:apigateway/restApi:RestApi": { - "description": "Manages an API Gateway REST API. The REST API can be configured via [importing an OpenAPI specification](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api.html) in the `body` argument (with other arguments serving as overrides) or via other provider resources to manage the resources (`aws.apigateway.Resource` resource), methods (`aws.apigateway.Method` resource), integrations (`aws.apigateway.Integration` resource), etc. of the REST API. Once the REST API is configured, the `aws.apigateway.Deployment` resource can be used along with the `aws.apigateway.Stage` resource to publish the REST API.\n\n\u003e **Note:** Amazon API Gateway Version 1 resources are used for creating and deploying REST APIs. To create and deploy WebSocket and HTTP APIs, use Amazon API Gateway Version 2.\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\n`aws_api_gateway_rest_api` can be imported by using the REST API ID, e.g.\n\n```sh\n $ pulumi import aws:apigateway/restApi:RestApi example 12345abcde\n```\n\n ", + "description": "Manages an API Gateway REST API. The REST API can be configured via [importing an OpenAPI specification](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api.html) in the `body` argument (with other arguments serving as overrides) or via other provider resources to manage the resources (`aws.apigateway.Resource` resource), methods (`aws.apigateway.Method` resource), integrations (`aws.apigateway.Integration` resource), etc. of the REST API. Once the REST API is configured, the `aws.apigateway.Deployment` resource can be used along with the `aws.apigateway.Stage` resource to publish the REST API.\n\n\u003e **Note:** Amazon API Gateway Version 1 resources are used for creating and deploying REST APIs. To create and deploy WebSocket and HTTP APIs, use Amazon API Gateway Version 2.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### OpenAPI Specification\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as crypto from \"crypto\";\n\nconst exampleRestApi = new aws.apigateway.RestApi(\"exampleRestApi\", {\n body: JSON.stringify({\n openapi: \"3.0.1\",\n info: {\n title: \"example\",\n version: \"1.0\",\n },\n paths: {\n \"/path1\": {\n get: {\n \"x-amazon-apigateway-integration\": {\n httpMethod: \"GET\",\n payloadFormatVersion: \"1.0\",\n type: \"HTTP_PROXY\",\n uri: \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n },\n },\n },\n },\n }),\n endpointConfiguration: {\n types: [\"REGIONAL\"],\n },\n});\nconst exampleDeployment = new aws.apigateway.Deployment(\"exampleDeployment\", {\n restApi: exampleRestApi.id,\n triggers: {\n redeployment: exampleRestApi.body.apply(body =\u003e JSON.stringify(body)).apply(toJSON =\u003e crypto.createHash('sha1').update(toJSON).digest('hex')),\n },\n});\nconst exampleStage = new aws.apigateway.Stage(\"exampleStage\", {\n deployment: exampleDeployment.id,\n restApi: exampleRestApi.id,\n stageName: \"example\",\n});\n```\n```python\nimport pulumi\nimport hashlib\nimport json\nimport pulumi_aws as aws\n\nexample_rest_api = aws.apigateway.RestApi(\"exampleRestApi\",\n body=json.dumps({\n \"openapi\": \"3.0.1\",\n \"info\": {\n \"title\": \"example\",\n \"version\": \"1.0\",\n },\n \"paths\": {\n \"/path1\": {\n \"get\": {\n \"x-amazon-apigateway-integration\": {\n \"httpMethod\": \"GET\",\n \"payloadFormatVersion\": \"1.0\",\n \"type\": \"HTTP_PROXY\",\n \"uri\": \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n },\n },\n },\n },\n }),\n endpoint_configuration=aws.apigateway.RestApiEndpointConfigurationArgs(\n types=[\"REGIONAL\"],\n ))\nexample_deployment = aws.apigateway.Deployment(\"exampleDeployment\",\n rest_api=example_rest_api.id,\n triggers={\n \"redeployment\": example_rest_api.body.apply(lambda body: json.dumps(body)).apply(lambda to_json: hashlib.sha1(to_json.encode()).hexdigest()),\n })\nexample_stage = aws.apigateway.Stage(\"exampleStage\",\n deployment=example_deployment.id,\n rest_api=example_rest_api.id,\n stage_name=\"example\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Security.Cryptography;\nusing System.Text;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n\tprivate static string ComputeSHA1(string input) {\n\t\treturn BitConverter.ToString(\n\t\t\tSHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(input))\n\t\t).Replace(\"-\",\"\").ToLowerInvariant());\n\t}\n\n public MyStack()\n {\n var exampleRestApi = new Aws.ApiGateway.RestApi(\"exampleRestApi\", new Aws.ApiGateway.RestApiArgs\n {\n Body = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n { \"openapi\", \"3.0.1\" },\n { \"info\", new Dictionary\u003cstring, object?\u003e\n {\n { \"title\", \"example\" },\n { \"version\", \"1.0\" },\n } },\n { \"paths\", new Dictionary\u003cstring, object?\u003e\n {\n { \"/path1\", new Dictionary\u003cstring, object?\u003e\n {\n { \"get\", new Dictionary\u003cstring, object?\u003e\n {\n { \"x-amazon-apigateway-integration\", new Dictionary\u003cstring, object?\u003e\n {\n { \"httpMethod\", \"GET\" },\n { \"payloadFormatVersion\", \"1.0\" },\n { \"type\", \"HTTP_PROXY\" },\n { \"uri\", \"https://ip-ranges.amazonaws.com/ip-ranges.json\" },\n } },\n } },\n } },\n } },\n }),\n EndpointConfiguration = new Aws.ApiGateway.Inputs.RestApiEndpointConfigurationArgs\n {\n Types = \n {\n \"REGIONAL\",\n },\n },\n });\n var exampleDeployment = new Aws.ApiGateway.Deployment(\"exampleDeployment\", new Aws.ApiGateway.DeploymentArgs\n {\n RestApi = exampleRestApi.Id,\n Triggers = \n {\n { \"redeployment\", exampleRestApi.Body.Apply(body =\u003e JsonSerializer.Serialize(body)).Apply(toJSON =\u003e ComputeSHA1(toJSON)) },\n },\n });\n var exampleStage = new Aws.ApiGateway.Stage(\"exampleStage\", new Aws.ApiGateway.StageArgs\n {\n Deployment = exampleDeployment.Id,\n RestApi = exampleRestApi.Id,\n StageName = \"example\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"crypto/sha1\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc sha1Hash(input string) string {\n\thash := sha1.Sum([]byte(input))\n\treturn hex.EncodeToString(hash[:])\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"openapi\": \"3.0.1\",\n\t\t\t\"info\": map[string]interface{}{\n\t\t\t\t\"title\": \"example\",\n\t\t\t\t\"version\": \"1.0\",\n\t\t\t},\n\t\t\t\"paths\": map[string]interface{}{\n\t\t\t\t\"/path1\": map[string]interface{}{\n\t\t\t\t\t\"get\": map[string]interface{}{\n\t\t\t\t\t\t\"x-amazon-apigateway-integration\": map[string]interface{}{\n\t\t\t\t\t\t\t\"httpMethod\": \"GET\",\n\t\t\t\t\t\t\t\"payloadFormatVersion\": \"1.0\",\n\t\t\t\t\t\t\t\"type\": \"HTTP_PROXY\",\n\t\t\t\t\t\t\t\"uri\": \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\texampleRestApi, err := apigateway.NewRestApi(ctx, \"exampleRestApi\", \u0026apigateway.RestApiArgs{\n\t\t\tBody: pulumi.String(json0),\n\t\t\tEndpointConfiguration: \u0026apigateway.RestApiEndpointConfigurationArgs{\n\t\t\t\tTypes: pulumi.String{\n\t\t\t\t\t\"REGIONAL\",\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleDeployment, err := apigateway.NewDeployment(ctx, \"exampleDeployment\", \u0026apigateway.DeploymentArgs{\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tTriggers: pulumi.StringMap{\n\t\t\t\t\"redeployment\": exampleRestApi.Body.ApplyT(func(body string) (pulumi.String, error) {\n\t\t\t\t\tvar _zero pulumi.String\n\t\t\t\t\ttmpJSON1, err := json.Marshal(body)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn _zero, err\n\t\t\t\t\t}\n\t\t\t\t\tjson1 := string(tmpJSON1)\n\t\t\t\t\treturn json1, nil\n\t\t\t\t}).(pulumi.StringOutput).ApplyT(func(toJSON string) (pulumi.String, error) {\n\t\t\t\t\treturn sha1Hash(toJSON), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewStage(ctx, \"exampleStage\", \u0026apigateway.StageArgs{\n\t\t\tDeployment: exampleDeployment.ID(),\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tStageName: pulumi.String(\"example\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Resources\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as crypto from \"crypto\";\n\nconst exampleRestApi = new aws.apigateway.RestApi(\"exampleRestApi\", {});\nconst exampleResource = new aws.apigateway.Resource(\"exampleResource\", {\n parentId: exampleRestApi.rootResourceId,\n pathPart: \"example\",\n restApi: exampleRestApi.id,\n});\nconst exampleMethod = new aws.apigateway.Method(\"exampleMethod\", {\n authorization: \"NONE\",\n httpMethod: \"GET\",\n resourceId: exampleResource.id,\n restApi: exampleRestApi.id,\n});\nconst exampleIntegration = new aws.apigateway.Integration(\"exampleIntegration\", {\n httpMethod: exampleMethod.httpMethod,\n resourceId: exampleResource.id,\n restApi: exampleRestApi.id,\n type: \"MOCK\",\n});\nconst exampleDeployment = new aws.apigateway.Deployment(\"exampleDeployment\", {\n restApi: exampleRestApi.id,\n triggers: {\n redeployment: pulumi.all([exampleResource.id, exampleMethod.id, exampleIntegration.id]).apply(([exampleResourceId, exampleMethodId, exampleIntegrationId]) =\u003e JSON.stringify([\n exampleResourceId,\n exampleMethodId,\n exampleIntegrationId,\n ])).apply(toJSON =\u003e crypto.createHash('sha1').update(toJSON).digest('hex')),\n },\n});\nconst exampleStage = new aws.apigateway.Stage(\"exampleStage\", {\n deployment: exampleDeployment.id,\n restApi: exampleRestApi.id,\n stageName: \"example\",\n});\n```\n```python\nimport pulumi\nimport hashlib\nimport json\nimport pulumi_aws as aws\n\nexample_rest_api = aws.apigateway.RestApi(\"exampleRestApi\")\nexample_resource = aws.apigateway.Resource(\"exampleResource\",\n parent_id=example_rest_api.root_resource_id,\n path_part=\"example\",\n rest_api=example_rest_api.id)\nexample_method = aws.apigateway.Method(\"exampleMethod\",\n authorization=\"NONE\",\n http_method=\"GET\",\n resource_id=example_resource.id,\n rest_api=example_rest_api.id)\nexample_integration = aws.apigateway.Integration(\"exampleIntegration\",\n http_method=example_method.http_method,\n resource_id=example_resource.id,\n rest_api=example_rest_api.id,\n type=\"MOCK\")\nexample_deployment = aws.apigateway.Deployment(\"exampleDeployment\",\n rest_api=example_rest_api.id,\n triggers={\n \"redeployment\": pulumi.Output.all(example_resource.id, example_method.id, example_integration.id).apply(lambda exampleResourceId, exampleMethodId, exampleIntegrationId: json.dumps([\n example_resource_id,\n example_method_id,\n example_integration_id,\n ])).apply(lambda to_json: hashlib.sha1(to_json.encode()).hexdigest()),\n })\nexample_stage = aws.apigateway.Stage(\"exampleStage\",\n deployment=example_deployment.id,\n rest_api=example_rest_api.id,\n stage_name=\"example\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Security.Cryptography;\nusing System.Text;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n\tprivate static string ComputeSHA1(string input) {\n\t\treturn BitConverter.ToString(\n\t\t\tSHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(input))\n\t\t).Replace(\"-\",\"\").ToLowerInvariant());\n\t}\n\n public MyStack()\n {\n var exampleRestApi = new Aws.ApiGateway.RestApi(\"exampleRestApi\", new Aws.ApiGateway.RestApiArgs\n {\n });\n var exampleResource = new Aws.ApiGateway.Resource(\"exampleResource\", new Aws.ApiGateway.ResourceArgs\n {\n ParentId = exampleRestApi.RootResourceId,\n PathPart = \"example\",\n RestApi = exampleRestApi.Id,\n });\n var exampleMethod = new Aws.ApiGateway.Method(\"exampleMethod\", new Aws.ApiGateway.MethodArgs\n {\n Authorization = \"NONE\",\n HttpMethod = \"GET\",\n ResourceId = exampleResource.Id,\n RestApi = exampleRestApi.Id,\n });\n var exampleIntegration = new Aws.ApiGateway.Integration(\"exampleIntegration\", new Aws.ApiGateway.IntegrationArgs\n {\n HttpMethod = exampleMethod.HttpMethod,\n ResourceId = exampleResource.Id,\n RestApi = exampleRestApi.Id,\n Type = \"MOCK\",\n });\n var exampleDeployment = new Aws.ApiGateway.Deployment(\"exampleDeployment\", new Aws.ApiGateway.DeploymentArgs\n {\n RestApi = exampleRestApi.Id,\n Triggers = \n {\n { \"redeployment\", Output.Tuple(exampleResource.Id, exampleMethod.Id, exampleIntegration.Id).Apply(values =\u003e\n {\n var exampleResourceId = values.Item1;\n var exampleMethodId = values.Item2;\n var exampleIntegrationId = values.Item3;\n return JsonSerializer.Serialize(new[]\n {\n exampleResourceId,\n exampleMethodId,\n exampleIntegrationId,\n }\n );\n }).Apply(toJSON =\u003e ComputeSHA1(toJSON)) },\n },\n });\n var exampleStage = new Aws.ApiGateway.Stage(\"exampleStage\", new Aws.ApiGateway.StageArgs\n {\n Deployment = exampleDeployment.Id,\n RestApi = exampleRestApi.Id,\n StageName = \"example\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"crypto/sha1\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc sha1Hash(input string) string {\n\thash := sha1.Sum([]byte(input))\n\treturn hex.EncodeToString(hash[:])\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleRestApi, err := apigateway.NewRestApi(ctx, \"exampleRestApi\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleResource, err := apigateway.NewResource(ctx, \"exampleResource\", \u0026apigateway.ResourceArgs{\n\t\t\tParentId: exampleRestApi.RootResourceId,\n\t\t\tPathPart: pulumi.String(\"example\"),\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleMethod, err := apigateway.NewMethod(ctx, \"exampleMethod\", \u0026apigateway.MethodArgs{\n\t\t\tAuthorization: pulumi.String(\"NONE\"),\n\t\t\tHttpMethod: pulumi.String(\"GET\"),\n\t\t\tResourceId: exampleResource.ID(),\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleIntegration, err := apigateway.NewIntegration(ctx, \"exampleIntegration\", \u0026apigateway.IntegrationArgs{\n\t\t\tHttpMethod: exampleMethod.HttpMethod,\n\t\t\tResourceId: exampleResource.ID(),\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tType: pulumi.String(\"MOCK\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleDeployment, err := apigateway.NewDeployment(ctx, \"exampleDeployment\", \u0026apigateway.DeploymentArgs{\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tTriggers: pulumi.StringMap{\n\t\t\t\t\"redeployment\": pulumi.All(exampleResource.ID(), exampleMethod.ID(), exampleIntegration.ID()).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\texampleResourceId := _args[0].(string)\n\t\t\t\t\texampleMethodId := _args[1].(string)\n\t\t\t\t\texampleIntegrationId := _args[2].(string)\n\t\t\t\t\tvar _zero string\n\t\t\t\t\ttmpJSON0, err := json.Marshal([]string{\n\t\t\t\t\t\texampleResourceId,\n\t\t\t\t\t\texampleMethodId,\n\t\t\t\t\t\texampleIntegrationId,\n\t\t\t\t\t})\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn _zero, err\n\t\t\t\t\t}\n\t\t\t\t\tjson0 := string(tmpJSON0)\n\t\t\t\t\treturn json0, nil\n\t\t\t\t}).(pulumi.StringOutput).ApplyT(func(toJSON string) (pulumi.String, error) {\n\t\t\t\t\treturn sha1Hash(toJSON), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewStage(ctx, \"exampleStage\", \u0026apigateway.StageArgs{\n\t\t\tDeployment: exampleDeployment.ID(),\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tStageName: pulumi.String(\"example\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n`aws_api_gateway_rest_api` can be imported by using the REST API ID, e.g.\n\n```sh\n $ pulumi import aws:apigateway/restApi:RestApi example 12345abcde\n```\n\n ", "inputProperties": { "apiKeySource": { "description": "Source of the API key for requests. Valid values are `HEADER` (default) and `AUTHORIZER`. If importing an OpenAPI specification via the `body` argument, this corresponds to the [`x-amazon-apigateway-api-key-source` extension](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-swagger-extensions-api-key-source.html). If the argument value is provided and is different than the OpenAPI value, the argument value will override the OpenAPI value.\n", @@ -28949,7 +29684,7 @@ } }, "aws:apigateway/stage:Stage": { - "description": "Manages an API Gateway Stage. A stage is a named reference to a deployment, which can be done via the `aws.apigateway.Deployment` resource. Stages can be optionally managed further with the `aws.apigateway.BasePathMapping` resource, `aws.apigateway.DomainName` resource, and `aws_api_method_settings` resource. For more information, see the [API Gateway Developer Guide](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-stages.html).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Managing the API Logging CloudWatch Log Group\n\nAPI Gateway provides the ability to [enable CloudWatch API logging](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-logging.html). To manage the CloudWatch Log Group when this feature is enabled, the `aws.cloudwatch.LogGroup` resource can be used where the name matches the API Gateway naming convention. If the CloudWatch Log Group previously exists, the `aws.cloudwatch.LogGroup` resource can be imported as a one time operation and recreation of the environment can occur without import.\n\n\u003e The below configuration uses [`dependsOn`](https://www.pulumi.com/docs/intro/concepts/programming-model/#dependson) to prevent ordering issues with API Gateway automatically creating the log group first and a variable for naming consistency. Other ordering and naming methodologies may be more appropriate for your environment.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst config = new pulumi.Config();\nconst stageName = config.get(\"stageName\") || \"example\";\nconst exampleRestApi = new aws.apigateway.RestApi(\"exampleRestApi\", {});\n// ... other configuration ...\nconst exampleLogGroup = new aws.cloudwatch.LogGroup(\"exampleLogGroup\", {retentionInDays: 7});\n// ... potentially other configuration ...\nconst exampleStage = new aws.apigateway.Stage(\"exampleStage\", {stageName: stageName}, {\n dependsOn: [exampleLogGroup],\n});\n// ... other configuration ...\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nconfig = pulumi.Config()\nstage_name = config.get(\"stageName\")\nif stage_name is None:\n stage_name = \"example\"\nexample_rest_api = aws.apigateway.RestApi(\"exampleRestApi\")\n# ... other configuration ...\nexample_log_group = aws.cloudwatch.LogGroup(\"exampleLogGroup\", retention_in_days=7)\n# ... potentially other configuration ...\nexample_stage = aws.apigateway.Stage(\"exampleStage\", stage_name=stage_name,\nopts=pulumi.ResourceOptions(depends_on=[example_log_group]))\n# ... other configuration ...\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var config = new Config();\n var stageName = config.Get(\"stageName\") ?? \"example\";\n var exampleRestApi = new Aws.ApiGateway.RestApi(\"exampleRestApi\", new Aws.ApiGateway.RestApiArgs\n {\n });\n // ... other configuration ...\n var exampleLogGroup = new Aws.CloudWatch.LogGroup(\"exampleLogGroup\", new Aws.CloudWatch.LogGroupArgs\n {\n RetentionInDays = 7,\n });\n // ... potentially other configuration ...\n var exampleStage = new Aws.ApiGateway.Stage(\"exampleStage\", new Aws.ApiGateway.StageArgs\n {\n StageName = stageName,\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n exampleLogGroup,\n },\n });\n // ... other configuration ...\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudwatch\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcfg := config.New(ctx, \"\")\n\t\tstageName := \"example\"\n\t\tif param := cfg.Get(\"stageName\"); param != \"\" {\n\t\t\tstageName = param\n\t\t}\n\t\t_, err := apigateway.NewRestApi(ctx, \"exampleRestApi\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleLogGroup, err := cloudwatch.NewLogGroup(ctx, \"exampleLogGroup\", \u0026cloudwatch.LogGroupArgs{\n\t\t\tRetentionInDays: pulumi.Int(7),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewStage(ctx, \"exampleStage\", \u0026apigateway.StageArgs{\n\t\t\tStageName: pulumi.String(stageName),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texampleLogGroup,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n`aws_api_gateway_stage` can be imported using `REST-API-ID/STAGE-NAME`, e.g.\n\n```sh\n $ pulumi import aws:apigateway/stage:Stage example 12345abcde/example\n```\n\n ", + "description": "Manages an API Gateway Stage. A stage is a named reference to a deployment, which can be done via the `aws.apigateway.Deployment` resource. Stages can be optionally managed further with the `aws.apigateway.BasePathMapping` resource, `aws.apigateway.DomainName` resource, and `aws_api_method_settings` resource. For more information, see the [API Gateway Developer Guide](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-stages.html).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as crypto from \"crypto\";\n\nconst exampleRestApi = new aws.apigateway.RestApi(\"exampleRestApi\", {body: JSON.stringify({\n openapi: \"3.0.1\",\n info: {\n title: \"example\",\n version: \"1.0\",\n },\n paths: {\n \"/path1\": {\n get: {\n \"x-amazon-apigateway-integration\": {\n httpMethod: \"GET\",\n payloadFormatVersion: \"1.0\",\n type: \"HTTP_PROXY\",\n uri: \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n },\n },\n },\n },\n})});\nconst exampleDeployment = new aws.apigateway.Deployment(\"exampleDeployment\", {\n restApi: exampleRestApi.id,\n triggers: {\n redeployment: exampleRestApi.body.apply(body =\u003e JSON.stringify(body)).apply(toJSON =\u003e crypto.createHash('sha1').update(toJSON).digest('hex')),\n },\n});\nconst exampleStage = new aws.apigateway.Stage(\"exampleStage\", {\n deployment: exampleDeployment.id,\n restApi: exampleRestApi.id,\n stageName: \"example\",\n});\nconst exampleMethodSettings = new aws.apigateway.MethodSettings(\"exampleMethodSettings\", {\n restApi: exampleRestApi.id,\n stageName: exampleStage.stageName,\n methodPath: \"*/*\",\n settings: {\n metricsEnabled: true,\n loggingLevel: \"INFO\",\n },\n});\n```\n```python\nimport pulumi\nimport hashlib\nimport json\nimport pulumi_aws as aws\n\nexample_rest_api = aws.apigateway.RestApi(\"exampleRestApi\", body=json.dumps({\n \"openapi\": \"3.0.1\",\n \"info\": {\n \"title\": \"example\",\n \"version\": \"1.0\",\n },\n \"paths\": {\n \"/path1\": {\n \"get\": {\n \"x-amazon-apigateway-integration\": {\n \"httpMethod\": \"GET\",\n \"payloadFormatVersion\": \"1.0\",\n \"type\": \"HTTP_PROXY\",\n \"uri\": \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n },\n },\n },\n },\n}))\nexample_deployment = aws.apigateway.Deployment(\"exampleDeployment\",\n rest_api=example_rest_api.id,\n triggers={\n \"redeployment\": example_rest_api.body.apply(lambda body: json.dumps(body)).apply(lambda to_json: hashlib.sha1(to_json.encode()).hexdigest()),\n })\nexample_stage = aws.apigateway.Stage(\"exampleStage\",\n deployment=example_deployment.id,\n rest_api=example_rest_api.id,\n stage_name=\"example\")\nexample_method_settings = aws.apigateway.MethodSettings(\"exampleMethodSettings\",\n rest_api=example_rest_api.id,\n stage_name=example_stage.stage_name,\n method_path=\"*/*\",\n settings=aws.apigateway.MethodSettingsSettingsArgs(\n metrics_enabled=True,\n logging_level=\"INFO\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Security.Cryptography;\nusing System.Text;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n\tprivate static string ComputeSHA1(string input) {\n\t\treturn BitConverter.ToString(\n\t\t\tSHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(input))\n\t\t).Replace(\"-\",\"\").ToLowerInvariant());\n\t}\n\n public MyStack()\n {\n var exampleRestApi = new Aws.ApiGateway.RestApi(\"exampleRestApi\", new Aws.ApiGateway.RestApiArgs\n {\n Body = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n { \"openapi\", \"3.0.1\" },\n { \"info\", new Dictionary\u003cstring, object?\u003e\n {\n { \"title\", \"example\" },\n { \"version\", \"1.0\" },\n } },\n { \"paths\", new Dictionary\u003cstring, object?\u003e\n {\n { \"/path1\", new Dictionary\u003cstring, object?\u003e\n {\n { \"get\", new Dictionary\u003cstring, object?\u003e\n {\n { \"x-amazon-apigateway-integration\", new Dictionary\u003cstring, object?\u003e\n {\n { \"httpMethod\", \"GET\" },\n { \"payloadFormatVersion\", \"1.0\" },\n { \"type\", \"HTTP_PROXY\" },\n { \"uri\", \"https://ip-ranges.amazonaws.com/ip-ranges.json\" },\n } },\n } },\n } },\n } },\n }),\n });\n var exampleDeployment = new Aws.ApiGateway.Deployment(\"exampleDeployment\", new Aws.ApiGateway.DeploymentArgs\n {\n RestApi = exampleRestApi.Id,\n Triggers = \n {\n { \"redeployment\", exampleRestApi.Body.Apply(body =\u003e JsonSerializer.Serialize(body)).Apply(toJSON =\u003e ComputeSHA1(toJSON)) },\n },\n });\n var exampleStage = new Aws.ApiGateway.Stage(\"exampleStage\", new Aws.ApiGateway.StageArgs\n {\n Deployment = exampleDeployment.Id,\n RestApi = exampleRestApi.Id,\n StageName = \"example\",\n });\n var exampleMethodSettings = new Aws.ApiGateway.MethodSettings(\"exampleMethodSettings\", new Aws.ApiGateway.MethodSettingsArgs\n {\n RestApi = exampleRestApi.Id,\n StageName = exampleStage.StageName,\n MethodPath = \"*/*\",\n Settings = new Aws.ApiGateway.Inputs.MethodSettingsSettingsArgs\n {\n MetricsEnabled = true,\n LoggingLevel = \"INFO\",\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"crypto/sha1\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc sha1Hash(input string) string {\n\thash := sha1.Sum([]byte(input))\n\treturn hex.EncodeToString(hash[:])\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"openapi\": \"3.0.1\",\n\t\t\t\"info\": map[string]interface{}{\n\t\t\t\t\"title\": \"example\",\n\t\t\t\t\"version\": \"1.0\",\n\t\t\t},\n\t\t\t\"paths\": map[string]interface{}{\n\t\t\t\t\"/path1\": map[string]interface{}{\n\t\t\t\t\t\"get\": map[string]interface{}{\n\t\t\t\t\t\t\"x-amazon-apigateway-integration\": map[string]interface{}{\n\t\t\t\t\t\t\t\"httpMethod\": \"GET\",\n\t\t\t\t\t\t\t\"payloadFormatVersion\": \"1.0\",\n\t\t\t\t\t\t\t\"type\": \"HTTP_PROXY\",\n\t\t\t\t\t\t\t\"uri\": \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\texampleRestApi, err := apigateway.NewRestApi(ctx, \"exampleRestApi\", \u0026apigateway.RestApiArgs{\n\t\t\tBody: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleDeployment, err := apigateway.NewDeployment(ctx, \"exampleDeployment\", \u0026apigateway.DeploymentArgs{\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tTriggers: pulumi.StringMap{\n\t\t\t\t\"redeployment\": exampleRestApi.Body.ApplyT(func(body string) (pulumi.String, error) {\n\t\t\t\t\tvar _zero pulumi.String\n\t\t\t\t\ttmpJSON1, err := json.Marshal(body)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn _zero, err\n\t\t\t\t\t}\n\t\t\t\t\tjson1 := string(tmpJSON1)\n\t\t\t\t\treturn json1, nil\n\t\t\t\t}).(pulumi.StringOutput).ApplyT(func(toJSON string) (pulumi.String, error) {\n\t\t\t\t\treturn sha1Hash(toJSON), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleStage, err := apigateway.NewStage(ctx, \"exampleStage\", \u0026apigateway.StageArgs{\n\t\t\tDeployment: exampleDeployment.ID(),\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tStageName: pulumi.String(\"example\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewMethodSettings(ctx, \"exampleMethodSettings\", \u0026apigateway.MethodSettingsArgs{\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tStageName: exampleStage.StageName,\n\t\t\tMethodPath: pulumi.String(\"*/*\"),\n\t\t\tSettings: \u0026apigateway.MethodSettingsSettingsArgs{\n\t\t\t\tMetricsEnabled: pulumi.Bool(true),\n\t\t\t\tLoggingLevel: pulumi.String(\"INFO\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Managing the API Logging CloudWatch Log Group\n\nAPI Gateway provides the ability to [enable CloudWatch API logging](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-logging.html). To manage the CloudWatch Log Group when this feature is enabled, the `aws.cloudwatch.LogGroup` resource can be used where the name matches the API Gateway naming convention. If the CloudWatch Log Group previously exists, the `aws.cloudwatch.LogGroup` resource can be imported as a one time operation and recreation of the environment can occur without import.\n\n\u003e The below configuration uses [`dependsOn`](https://www.pulumi.com/docs/intro/concepts/programming-model/#dependson) to prevent ordering issues with API Gateway automatically creating the log group first and a variable for naming consistency. Other ordering and naming methodologies may be more appropriate for your environment.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst config = new pulumi.Config();\nconst stageName = config.get(\"stageName\") || \"example\";\nconst exampleRestApi = new aws.apigateway.RestApi(\"exampleRestApi\", {});\n// ... other configuration ...\nconst exampleLogGroup = new aws.cloudwatch.LogGroup(\"exampleLogGroup\", {retentionInDays: 7});\n// ... potentially other configuration ...\nconst exampleStage = new aws.apigateway.Stage(\"exampleStage\", {stageName: stageName}, {\n dependsOn: [exampleLogGroup],\n});\n// ... other configuration ...\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nconfig = pulumi.Config()\nstage_name = config.get(\"stageName\")\nif stage_name is None:\n stage_name = \"example\"\nexample_rest_api = aws.apigateway.RestApi(\"exampleRestApi\")\n# ... other configuration ...\nexample_log_group = aws.cloudwatch.LogGroup(\"exampleLogGroup\", retention_in_days=7)\n# ... potentially other configuration ...\nexample_stage = aws.apigateway.Stage(\"exampleStage\", stage_name=stage_name,\nopts=pulumi.ResourceOptions(depends_on=[example_log_group]))\n# ... other configuration ...\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var config = new Config();\n var stageName = config.Get(\"stageName\") ?? \"example\";\n var exampleRestApi = new Aws.ApiGateway.RestApi(\"exampleRestApi\", new Aws.ApiGateway.RestApiArgs\n {\n });\n // ... other configuration ...\n var exampleLogGroup = new Aws.CloudWatch.LogGroup(\"exampleLogGroup\", new Aws.CloudWatch.LogGroupArgs\n {\n RetentionInDays = 7,\n });\n // ... potentially other configuration ...\n var exampleStage = new Aws.ApiGateway.Stage(\"exampleStage\", new Aws.ApiGateway.StageArgs\n {\n StageName = stageName,\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n exampleLogGroup,\n },\n });\n // ... other configuration ...\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudwatch\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcfg := config.New(ctx, \"\")\n\t\tstageName := \"example\"\n\t\tif param := cfg.Get(\"stageName\"); param != \"\" {\n\t\t\tstageName = param\n\t\t}\n\t\t_, err := apigateway.NewRestApi(ctx, \"exampleRestApi\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleLogGroup, err := cloudwatch.NewLogGroup(ctx, \"exampleLogGroup\", \u0026cloudwatch.LogGroupArgs{\n\t\t\tRetentionInDays: pulumi.Int(7),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewStage(ctx, \"exampleStage\", \u0026apigateway.StageArgs{\n\t\t\tStageName: pulumi.String(stageName),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texampleLogGroup,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n`aws_api_gateway_stage` can be imported using `REST-API-ID/STAGE-NAME`, e.g.\n\n```sh\n $ pulumi import aws:apigateway/stage:Stage example 12345abcde/example\n```\n\n ", "inputProperties": { "accessLogSettings": { "$ref": "#/types/aws:apigateway/StageAccessLogSettings:StageAccessLogSettings", @@ -29212,7 +29947,7 @@ } }, "aws:apigateway/usagePlan:UsagePlan": { - "description": "Provides an API Gateway Usage Plan.\n\n\n## Import\n\nAWS API Gateway Usage Plan can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:apigateway/usagePlan:UsagePlan myusageplan \u003cusage_plan_id\u003e\n```\n\n ", + "description": "Provides an API Gateway Usage Plan.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as crypto from \"crypto\";\n\nconst exampleRestApi = new aws.apigateway.RestApi(\"exampleRestApi\", {body: JSON.stringify({\n openapi: \"3.0.1\",\n info: {\n title: \"example\",\n version: \"1.0\",\n },\n paths: {\n \"/path1\": {\n get: {\n \"x-amazon-apigateway-integration\": {\n httpMethod: \"GET\",\n payloadFormatVersion: \"1.0\",\n type: \"HTTP_PROXY\",\n uri: \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n },\n },\n },\n },\n})});\nconst exampleDeployment = new aws.apigateway.Deployment(\"exampleDeployment\", {\n restApi: exampleRestApi.id,\n triggers: {\n redeployment: exampleRestApi.body.apply(body =\u003e JSON.stringify(body)).apply(toJSON =\u003e crypto.createHash('sha1').update(toJSON).digest('hex')),\n },\n});\nconst development = new aws.apigateway.Stage(\"development\", {\n deployment: exampleDeployment.id,\n restApi: exampleRestApi.id,\n stageName: \"development\",\n});\nconst production = new aws.apigateway.Stage(\"production\", {\n deployment: exampleDeployment.id,\n restApi: exampleRestApi.id,\n stageName: \"production\",\n});\nconst exampleUsagePlan = new aws.apigateway.UsagePlan(\"exampleUsagePlan\", {\n description: \"my description\",\n productCode: \"MYCODE\",\n apiStages: [\n {\n apiId: exampleRestApi.id,\n stage: development.stageName,\n },\n {\n apiId: exampleRestApi.id,\n stage: production.stageName,\n },\n ],\n quotaSettings: {\n limit: 20,\n offset: 2,\n period: \"WEEK\",\n },\n throttleSettings: {\n burstLimit: 5,\n rateLimit: 10,\n },\n});\n```\n```python\nimport pulumi\nimport hashlib\nimport json\nimport pulumi_aws as aws\n\nexample_rest_api = aws.apigateway.RestApi(\"exampleRestApi\", body=json.dumps({\n \"openapi\": \"3.0.1\",\n \"info\": {\n \"title\": \"example\",\n \"version\": \"1.0\",\n },\n \"paths\": {\n \"/path1\": {\n \"get\": {\n \"x-amazon-apigateway-integration\": {\n \"httpMethod\": \"GET\",\n \"payloadFormatVersion\": \"1.0\",\n \"type\": \"HTTP_PROXY\",\n \"uri\": \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n },\n },\n },\n },\n}))\nexample_deployment = aws.apigateway.Deployment(\"exampleDeployment\",\n rest_api=example_rest_api.id,\n triggers={\n \"redeployment\": example_rest_api.body.apply(lambda body: json.dumps(body)).apply(lambda to_json: hashlib.sha1(to_json.encode()).hexdigest()),\n })\ndevelopment = aws.apigateway.Stage(\"development\",\n deployment=example_deployment.id,\n rest_api=example_rest_api.id,\n stage_name=\"development\")\nproduction = aws.apigateway.Stage(\"production\",\n deployment=example_deployment.id,\n rest_api=example_rest_api.id,\n stage_name=\"production\")\nexample_usage_plan = aws.apigateway.UsagePlan(\"exampleUsagePlan\",\n description=\"my description\",\n product_code=\"MYCODE\",\n api_stages=[\n aws.apigateway.UsagePlanApiStageArgs(\n api_id=example_rest_api.id,\n stage=development.stage_name,\n ),\n aws.apigateway.UsagePlanApiStageArgs(\n api_id=example_rest_api.id,\n stage=production.stage_name,\n ),\n ],\n quota_settings=aws.apigateway.UsagePlanQuotaSettingsArgs(\n limit=20,\n offset=2,\n period=\"WEEK\",\n ),\n throttle_settings=aws.apigateway.UsagePlanThrottleSettingsArgs(\n burst_limit=5,\n rate_limit=10,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Security.Cryptography;\nusing System.Text;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n\tprivate static string ComputeSHA1(string input) {\n\t\treturn BitConverter.ToString(\n\t\t\tSHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(input))\n\t\t).Replace(\"-\",\"\").ToLowerInvariant());\n\t}\n\n public MyStack()\n {\n var exampleRestApi = new Aws.ApiGateway.RestApi(\"exampleRestApi\", new Aws.ApiGateway.RestApiArgs\n {\n Body = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n { \"openapi\", \"3.0.1\" },\n { \"info\", new Dictionary\u003cstring, object?\u003e\n {\n { \"title\", \"example\" },\n { \"version\", \"1.0\" },\n } },\n { \"paths\", new Dictionary\u003cstring, object?\u003e\n {\n { \"/path1\", new Dictionary\u003cstring, object?\u003e\n {\n { \"get\", new Dictionary\u003cstring, object?\u003e\n {\n { \"x-amazon-apigateway-integration\", new Dictionary\u003cstring, object?\u003e\n {\n { \"httpMethod\", \"GET\" },\n { \"payloadFormatVersion\", \"1.0\" },\n { \"type\", \"HTTP_PROXY\" },\n { \"uri\", \"https://ip-ranges.amazonaws.com/ip-ranges.json\" },\n } },\n } },\n } },\n } },\n }),\n });\n var exampleDeployment = new Aws.ApiGateway.Deployment(\"exampleDeployment\", new Aws.ApiGateway.DeploymentArgs\n {\n RestApi = exampleRestApi.Id,\n Triggers = \n {\n { \"redeployment\", exampleRestApi.Body.Apply(body =\u003e JsonSerializer.Serialize(body)).Apply(toJSON =\u003e ComputeSHA1(toJSON)) },\n },\n });\n var development = new Aws.ApiGateway.Stage(\"development\", new Aws.ApiGateway.StageArgs\n {\n Deployment = exampleDeployment.Id,\n RestApi = exampleRestApi.Id,\n StageName = \"development\",\n });\n var production = new Aws.ApiGateway.Stage(\"production\", new Aws.ApiGateway.StageArgs\n {\n Deployment = exampleDeployment.Id,\n RestApi = exampleRestApi.Id,\n StageName = \"production\",\n });\n var exampleUsagePlan = new Aws.ApiGateway.UsagePlan(\"exampleUsagePlan\", new Aws.ApiGateway.UsagePlanArgs\n {\n Description = \"my description\",\n ProductCode = \"MYCODE\",\n ApiStages = \n {\n new Aws.ApiGateway.Inputs.UsagePlanApiStageArgs\n {\n ApiId = exampleRestApi.Id,\n Stage = development.StageName,\n },\n new Aws.ApiGateway.Inputs.UsagePlanApiStageArgs\n {\n ApiId = exampleRestApi.Id,\n Stage = production.StageName,\n },\n },\n QuotaSettings = new Aws.ApiGateway.Inputs.UsagePlanQuotaSettingsArgs\n {\n Limit = 20,\n Offset = 2,\n Period = \"WEEK\",\n },\n ThrottleSettings = new Aws.ApiGateway.Inputs.UsagePlanThrottleSettingsArgs\n {\n BurstLimit = 5,\n RateLimit = 10,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"crypto/sha1\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc sha1Hash(input string) string {\n\thash := sha1.Sum([]byte(input))\n\treturn hex.EncodeToString(hash[:])\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"openapi\": \"3.0.1\",\n\t\t\t\"info\": map[string]interface{}{\n\t\t\t\t\"title\": \"example\",\n\t\t\t\t\"version\": \"1.0\",\n\t\t\t},\n\t\t\t\"paths\": map[string]interface{}{\n\t\t\t\t\"/path1\": map[string]interface{}{\n\t\t\t\t\t\"get\": map[string]interface{}{\n\t\t\t\t\t\t\"x-amazon-apigateway-integration\": map[string]interface{}{\n\t\t\t\t\t\t\t\"httpMethod\": \"GET\",\n\t\t\t\t\t\t\t\"payloadFormatVersion\": \"1.0\",\n\t\t\t\t\t\t\t\"type\": \"HTTP_PROXY\",\n\t\t\t\t\t\t\t\"uri\": \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\texampleRestApi, err := apigateway.NewRestApi(ctx, \"exampleRestApi\", \u0026apigateway.RestApiArgs{\n\t\t\tBody: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleDeployment, err := apigateway.NewDeployment(ctx, \"exampleDeployment\", \u0026apigateway.DeploymentArgs{\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tTriggers: pulumi.StringMap{\n\t\t\t\t\"redeployment\": exampleRestApi.Body.ApplyT(func(body string) (pulumi.String, error) {\n\t\t\t\t\tvar _zero pulumi.String\n\t\t\t\t\ttmpJSON1, err := json.Marshal(body)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn _zero, err\n\t\t\t\t\t}\n\t\t\t\t\tjson1 := string(tmpJSON1)\n\t\t\t\t\treturn json1, nil\n\t\t\t\t}).(pulumi.StringOutput).ApplyT(func(toJSON string) (pulumi.String, error) {\n\t\t\t\t\treturn sha1Hash(toJSON), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdevelopment, err := apigateway.NewStage(ctx, \"development\", \u0026apigateway.StageArgs{\n\t\t\tDeployment: exampleDeployment.ID(),\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tStageName: pulumi.String(\"development\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproduction, err := apigateway.NewStage(ctx, \"production\", \u0026apigateway.StageArgs{\n\t\t\tDeployment: exampleDeployment.ID(),\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tStageName: pulumi.String(\"production\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewUsagePlan(ctx, \"exampleUsagePlan\", \u0026apigateway.UsagePlanArgs{\n\t\t\tDescription: pulumi.String(\"my description\"),\n\t\t\tProductCode: pulumi.String(\"MYCODE\"),\n\t\t\tApiStages: apigateway.UsagePlanApiStageArray{\n\t\t\t\t\u0026apigateway.UsagePlanApiStageArgs{\n\t\t\t\t\tApiId: exampleRestApi.ID(),\n\t\t\t\t\tStage: development.StageName,\n\t\t\t\t},\n\t\t\t\t\u0026apigateway.UsagePlanApiStageArgs{\n\t\t\t\t\tApiId: exampleRestApi.ID(),\n\t\t\t\t\tStage: production.StageName,\n\t\t\t\t},\n\t\t\t},\n\t\t\tQuotaSettings: \u0026apigateway.UsagePlanQuotaSettingsArgs{\n\t\t\t\tLimit: pulumi.Int(20),\n\t\t\t\tOffset: pulumi.Int(2),\n\t\t\t\tPeriod: pulumi.String(\"WEEK\"),\n\t\t\t},\n\t\t\tThrottleSettings: \u0026apigateway.UsagePlanThrottleSettingsArgs{\n\t\t\t\tBurstLimit: pulumi.Int(5),\n\t\t\t\tRateLimit: pulumi.Float64(10),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nAWS API Gateway Usage Plan can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:apigateway/usagePlan:UsagePlan myusageplan \u003cusage_plan_id\u003e\n```\n\n ", "inputProperties": { "apiStages": { "description": "The associated API stages of the usage plan.\n", @@ -30065,7 +30800,7 @@ } }, "aws:apigatewayv2/domainName:DomainName": { - "description": "Manages an Amazon API Gateway Version 2 domain name.\nMore information can be found in the [Amazon API Gateway Developer Guide](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html).\n\n\u003e **Note:** This resource establishes ownership of and the TLS settings for\na particular domain name. An API stage can be associated with the domain name using the `aws.apigatewayv2.ApiMapping` resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.apigatewayv2.DomainName(\"example\", {\n domainName: \"ws-api.example.com\",\n domainNameConfiguration: {\n certificateArn: aws_acm_certificate.example.arn,\n endpointType: \"REGIONAL\",\n securityPolicy: \"TLS_1_2\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.apigatewayv2.DomainName(\"example\",\n domain_name=\"ws-api.example.com\",\n domain_name_configuration=aws.apigatewayv2.DomainNameDomainNameConfigurationArgs(\n certificate_arn=aws_acm_certificate[\"example\"][\"arn\"],\n endpoint_type=\"REGIONAL\",\n security_policy=\"TLS_1_2\",\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.ApiGatewayV2.DomainName(\"example\", new Aws.ApiGatewayV2.DomainNameArgs\n {\n DomainName = \"ws-api.example.com\",\n DomainNameConfiguration = new Aws.ApiGatewayV2.Inputs.DomainNameDomainNameConfigurationArgs\n {\n CertificateArn = aws_acm_certificate.Example.Arn,\n EndpointType = \"REGIONAL\",\n SecurityPolicy = \"TLS_1_2\",\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigatewayv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigatewayv2.NewDomainName(ctx, \"example\", \u0026apigatewayv2.DomainNameArgs{\n\t\t\tDomainName: pulumi.String(\"ws-api.example.com\"),\n\t\t\tDomainNameConfiguration: \u0026apigatewayv2.DomainNameDomainNameConfigurationArgs{\n\t\t\t\tCertificateArn: pulumi.Any(aws_acm_certificate.Example.Arn),\n\t\t\t\tEndpointType: pulumi.String(\"REGIONAL\"),\n\t\t\t\tSecurityPolicy: pulumi.String(\"TLS_1_2\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n`aws_apigatewayv2_domain_name` can be imported by using the domain name, e.g.\n\n```sh\n $ pulumi import aws:apigatewayv2/domainName:DomainName example ws-api.example.com\n```\n\n ", + "description": "Manages an Amazon API Gateway Version 2 domain name.\nMore information can be found in the [Amazon API Gateway Developer Guide](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html).\n\n\u003e **Note:** This resource establishes ownership of and the TLS settings for\na particular domain name. An API stage can be associated with the domain name using the `aws.apigatewayv2.ApiMapping` resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.apigatewayv2.DomainName(\"example\", {\n domainName: \"ws-api.example.com\",\n domainNameConfiguration: {\n certificateArn: aws_acm_certificate.example.arn,\n endpointType: \"REGIONAL\",\n securityPolicy: \"TLS_1_2\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.apigatewayv2.DomainName(\"example\",\n domain_name=\"ws-api.example.com\",\n domain_name_configuration=aws.apigatewayv2.DomainNameDomainNameConfigurationArgs(\n certificate_arn=aws_acm_certificate[\"example\"][\"arn\"],\n endpoint_type=\"REGIONAL\",\n security_policy=\"TLS_1_2\",\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.ApiGatewayV2.DomainName(\"example\", new Aws.ApiGatewayV2.DomainNameArgs\n {\n DomainName = \"ws-api.example.com\",\n DomainNameConfiguration = new Aws.ApiGatewayV2.Inputs.DomainNameDomainNameConfigurationArgs\n {\n CertificateArn = aws_acm_certificate.Example.Arn,\n EndpointType = \"REGIONAL\",\n SecurityPolicy = \"TLS_1_2\",\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigatewayv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigatewayv2.NewDomainName(ctx, \"example\", \u0026apigatewayv2.DomainNameArgs{\n\t\t\tDomainName: pulumi.String(\"ws-api.example.com\"),\n\t\t\tDomainNameConfiguration: \u0026apigatewayv2.DomainNameDomainNameConfigurationArgs{\n\t\t\t\tCertificateArn: pulumi.Any(aws_acm_certificate.Example.Arn),\n\t\t\t\tEndpointType: pulumi.String(\"REGIONAL\"),\n\t\t\t\tSecurityPolicy: pulumi.String(\"TLS_1_2\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Associated Route 53 Resource Record\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleDomainName = new aws.apigatewayv2.DomainName(\"exampleDomainName\", {\n domainName: \"http-api.example.com\",\n domainNameConfiguration: {\n certificateArn: aws_acm_certificate.example.arn,\n endpointType: \"REGIONAL\",\n securityPolicy: \"TLS_1_2\",\n },\n});\nconst exampleRecord = new aws.route53.Record(\"exampleRecord\", {\n name: exampleDomainName.domainName,\n type: \"A\",\n zoneId: aws_route53_zone.example.zone_id,\n aliases: [{\n name: exampleDomainName.domainNameConfiguration.apply(domainNameConfiguration =\u003e domainNameConfiguration.targetDomainName),\n zoneId: exampleDomainName.domainNameConfiguration.apply(domainNameConfiguration =\u003e domainNameConfiguration.hostedZoneId),\n evaluateTargetHealth: false,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_domain_name = aws.apigatewayv2.DomainName(\"exampleDomainName\",\n domain_name=\"http-api.example.com\",\n domain_name_configuration=aws.apigatewayv2.DomainNameDomainNameConfigurationArgs(\n certificate_arn=aws_acm_certificate[\"example\"][\"arn\"],\n endpoint_type=\"REGIONAL\",\n security_policy=\"TLS_1_2\",\n ))\nexample_record = aws.route53.Record(\"exampleRecord\",\n name=example_domain_name.domain_name,\n type=\"A\",\n zone_id=aws_route53_zone[\"example\"][\"zone_id\"],\n aliases=[aws.route53.RecordAliasArgs(\n name=example_domain_name.domain_name_configuration.target_domain_name,\n zone_id=example_domain_name.domain_name_configuration.hosted_zone_id,\n evaluate_target_health=False,\n )])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleDomainName = new Aws.ApiGatewayV2.DomainName(\"exampleDomainName\", new Aws.ApiGatewayV2.DomainNameArgs\n {\n DomainName = \"http-api.example.com\",\n DomainNameConfiguration = new Aws.ApiGatewayV2.Inputs.DomainNameDomainNameConfigurationArgs\n {\n CertificateArn = aws_acm_certificate.Example.Arn,\n EndpointType = \"REGIONAL\",\n SecurityPolicy = \"TLS_1_2\",\n },\n });\n var exampleRecord = new Aws.Route53.Record(\"exampleRecord\", new Aws.Route53.RecordArgs\n {\n Name = exampleDomainName.Domain,\n Type = \"A\",\n ZoneId = aws_route53_zone.Example.Zone_id,\n Aliases = \n {\n new Aws.Route53.Inputs.RecordAliasArgs\n {\n Name = exampleDomainName.DomainNameConfiguration.Apply(domainNameConfiguration =\u003e domainNameConfiguration.TargetDomainName),\n ZoneId = exampleDomainName.DomainNameConfiguration.Apply(domainNameConfiguration =\u003e domainNameConfiguration.HostedZoneId),\n EvaluateTargetHealth = false,\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigatewayv2\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/route53\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleDomainName, err := apigatewayv2.NewDomainName(ctx, \"exampleDomainName\", \u0026apigatewayv2.DomainNameArgs{\n\t\t\tDomainName: pulumi.String(\"http-api.example.com\"),\n\t\t\tDomainNameConfiguration: \u0026apigatewayv2.DomainNameDomainNameConfigurationArgs{\n\t\t\t\tCertificateArn: pulumi.Any(aws_acm_certificate.Example.Arn),\n\t\t\t\tEndpointType: pulumi.String(\"REGIONAL\"),\n\t\t\t\tSecurityPolicy: pulumi.String(\"TLS_1_2\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = route53.NewRecord(ctx, \"exampleRecord\", \u0026route53.RecordArgs{\n\t\t\tName: exampleDomainName.DomainName,\n\t\t\tType: pulumi.String(\"A\"),\n\t\t\tZoneId: pulumi.Any(aws_route53_zone.Example.Zone_id),\n\t\t\tAliases: route53.RecordAliasArray{\n\t\t\t\t\u0026route53.RecordAliasArgs{\n\t\t\t\t\tName: exampleDomainName.DomainNameConfiguration.ApplyT(func(domainNameConfiguration apigatewayv2.DomainNameDomainNameConfiguration) (string, error) {\n\t\t\t\t\t\treturn domainNameConfiguration.TargetDomainName, nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\tZoneId: exampleDomainName.DomainNameConfiguration.ApplyT(func(domainNameConfiguration apigatewayv2.DomainNameDomainNameConfiguration) (string, error) {\n\t\t\t\t\t\treturn domainNameConfiguration.HostedZoneId, nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\tEvaluateTargetHealth: pulumi.Bool(false),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n`aws_apigatewayv2_domain_name` can be imported by using the domain name, e.g.\n\n```sh\n $ pulumi import aws:apigatewayv2/domainName:DomainName example ws-api.example.com\n```\n\n ", "inputProperties": { "domainName": { "description": "The domain name. Must be between 1 and 512 characters in length.\n", @@ -33157,11 +33892,11 @@ "additionalProperties": { "type": "string" }, - "description": "Map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", + "description": "Map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", "type": "object" }, "targetType": { - "description": "Type of target that you must specify when registering targets with this target group. The possible values are `instance` (targets are specified by instance ID) or `ip` (targets are specified by IP address) or `lambda` (targets are specified by lambda arn). The default is `instance`. Note that you can't specify targets for a target group using both instance IDs and IP addresses. If the target type is `ip`, specify IP addresses from the subnets of the virtual private cloud (VPC) for the target group, the RFC 1918 range (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16), and the RFC 6598 range (100.64.0.0/10). You can't specify publicly routable IP addresses.\n", + "description": "Type of target that you must specify when registering targets with this target group. See [doc](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateTargetGroup.html) for supported values. The default is `instance`.\n", "type": "string" }, "vpcId": { @@ -33234,7 +33969,7 @@ "additionalProperties": { "type": "string" }, - "description": "Map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", + "description": "Map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", "type": "object" }, "tagsAll": { @@ -33245,7 +33980,7 @@ "type": "object" }, "targetType": { - "description": "Type of target that you must specify when registering targets with this target group. The possible values are `instance` (targets are specified by instance ID) or `ip` (targets are specified by IP address) or `lambda` (targets are specified by lambda arn). The default is `instance`. Note that you can't specify targets for a target group using both instance IDs and IP addresses. If the target type is `ip`, specify IP addresses from the subnets of the virtual private cloud (VPC) for the target group, the RFC 1918 range (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16), and the RFC 6598 range (100.64.0.0/10). You can't specify publicly routable IP addresses.\n", + "description": "Type of target that you must specify when registering targets with this target group. See [doc](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateTargetGroup.html) for supported values. The default is `instance`.\n", "type": "string" }, "vpcId": { @@ -33331,7 +34066,7 @@ "additionalProperties": { "type": "string" }, - "description": "Map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", + "description": "Map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", "type": "object" }, "tagsAll": { @@ -33342,7 +34077,7 @@ "type": "object" }, "targetType": { - "description": "Type of target that you must specify when registering targets with this target group. The possible values are `instance` (targets are specified by instance ID) or `ip` (targets are specified by IP address) or `lambda` (targets are specified by lambda arn). The default is `instance`. Note that you can't specify targets for a target group using both instance IDs and IP addresses. If the target type is `ip`, specify IP addresses from the subnets of the virtual private cloud (VPC) for the target group, the RFC 1918 range (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16), and the RFC 6598 range (100.64.0.0/10). You can't specify publicly routable IP addresses.\n", + "description": "Type of target that you must specify when registering targets with this target group. See [doc](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateTargetGroup.html) for supported values. The default is `instance`.\n", "type": "string" }, "vpcId": { @@ -34926,6 +35661,551 @@ "type": "object" } }, + "aws:appstream/fleet:Fleet": { + "description": "Provides an AppStream fleet.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst testFleet = new aws.appstream.Fleet(\"test_fleet\", {\n computeCapacity: {\n desiredInstances: 1,\n },\n description: \"test fleet\",\n displayName: \"test-fleet\",\n enableDefaultInternetAccess: false,\n fleetType: \"ON_DEMAND\",\n idleDisconnectTimeoutInSeconds: 15,\n imageName: \"Amazon-AppStream2-Sample-Image-02-04-2019\",\n instanceType: \"stream.standard.large\",\n maxUserDurationInSeconds: 600,\n tags: {\n TagName: \"tag-value\",\n },\n vpcConfig: {\n subnetIds: [\"subnet-06e9b13400c225127\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest_fleet = aws.appstream.Fleet(\"testFleet\",\n compute_capacity=aws.appstream.FleetComputeCapacityArgs(\n desired_instances=1,\n ),\n description=\"test fleet\",\n display_name=\"test-fleet\",\n enable_default_internet_access=False,\n fleet_type=\"ON_DEMAND\",\n idle_disconnect_timeout_in_seconds=15,\n image_name=\"Amazon-AppStream2-Sample-Image-02-04-2019\",\n instance_type=\"stream.standard.large\",\n max_user_duration_in_seconds=600,\n tags={\n \"TagName\": \"tag-value\",\n },\n vpc_config=aws.appstream.FleetVpcConfigArgs(\n subnet_ids=[\"subnet-06e9b13400c225127\"],\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var testFleet = new Aws.AppStream.Fleet(\"testFleet\", new Aws.AppStream.FleetArgs\n {\n ComputeCapacity = new Aws.AppStream.Inputs.FleetComputeCapacityArgs\n {\n DesiredInstances = 1,\n },\n Description = \"test fleet\",\n DisplayName = \"test-fleet\",\n EnableDefaultInternetAccess = false,\n FleetType = \"ON_DEMAND\",\n IdleDisconnectTimeoutInSeconds = 15,\n ImageName = \"Amazon-AppStream2-Sample-Image-02-04-2019\",\n InstanceType = \"stream.standard.large\",\n MaxUserDurationInSeconds = 600,\n Tags = \n {\n { \"TagName\", \"tag-value\" },\n },\n VpcConfig = new Aws.AppStream.Inputs.FleetVpcConfigArgs\n {\n SubnetIds = \n {\n \"subnet-06e9b13400c225127\",\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/appstream\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := appstream.NewFleet(ctx, \"testFleet\", \u0026appstream.FleetArgs{\n\t\t\tComputeCapacity: \u0026appstream.FleetComputeCapacityArgs{\n\t\t\t\tDesiredInstances: pulumi.Int(1),\n\t\t\t},\n\t\t\tDescription: pulumi.String(\"test fleet\"),\n\t\t\tDisplayName: pulumi.String(\"test-fleet\"),\n\t\t\tEnableDefaultInternetAccess: pulumi.Bool(false),\n\t\t\tFleetType: pulumi.String(\"ON_DEMAND\"),\n\t\t\tIdleDisconnectTimeoutInSeconds: pulumi.Int(15),\n\t\t\tImageName: pulumi.String(\"Amazon-AppStream2-Sample-Image-02-04-2019\"),\n\t\t\tInstanceType: pulumi.String(\"stream.standard.large\"),\n\t\t\tMaxUserDurationInSeconds: pulumi.Int(600),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"TagName\": pulumi.String(\"tag-value\"),\n\t\t\t},\n\t\t\tVpcConfig: \u0026appstream.FleetVpcConfigArgs{\n\t\t\t\tSubnetIds: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"subnet-06e9b13400c225127\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n`aws_appstream_fleet` can be imported using the id, e.g.\n\n```sh\n $ pulumi import aws:appstream/fleet:Fleet example fleetNameExample\n```\n\n ", + "inputProperties": { + "computeCapacity": { + "$ref": "#/types/aws:appstream/FleetComputeCapacity:FleetComputeCapacity", + "description": "Configuration block for the desired capacity of the fleet. See below.\n" + }, + "description": { + "description": "Description to display.\n", + "type": "string" + }, + "disconnectTimeoutInSeconds": { + "description": "Amount of time that a streaming session remains active after users disconnect.\n", + "type": "integer" + }, + "displayName": { + "description": "Human-readable friendly name for the AppStream fleet.\n", + "type": "string" + }, + "domainJoinInfo": { + "$ref": "#/types/aws:appstream/FleetDomainJoinInfo:FleetDomainJoinInfo", + "description": "Configuration block for the name of the directory and organizational unit (OU) to use to join the fleet to a Microsoft Active Directory domain. See below.\n" + }, + "enableDefaultInternetAccess": { + "description": "Enables or disables default internet access for the fleet.\n", + "type": "boolean" + }, + "fleetType": { + "description": "Fleet type. Valid values are: `ON_DEMAND`, `ALWAYS_ON`\n", + "type": "string" + }, + "iamRoleArn": { + "description": "ARN of the IAM role to apply to the fleet.\n", + "type": "string" + }, + "idleDisconnectTimeoutInSeconds": { + "description": "Amount of time that users can be idle (inactive) before they are disconnected from their streaming session and the `disconnect_timeout_in_seconds` time interval begins.\n", + "type": "integer" + }, + "imageArn": { + "description": "ARN of the public, private, or shared image to use.\n", + "type": "string" + }, + "imageName": { + "description": "Name of the image used to create the fleet.\n", + "type": "string" + }, + "instanceType": { + "description": "Instance type to use when launching fleet instances.\n", + "type": "string" + }, + "maxUserDurationInSeconds": { + "description": "Maximum amount of time that a streaming session can remain active, in seconds.\n", + "type": "integer" + }, + "name": { + "description": "Unique name for the fleet.\n", + "type": "string" + }, + "streamView": { + "description": "AppStream 2.0 view that is displayed to your users when they stream from the fleet. When `APP` is specified, only the windows of applications opened by users display. When `DESKTOP` is specified, the standard desktop that is provided by the operating system displays.\n", + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of tags to attach to AppStream instances.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "vpcConfig": { + "$ref": "#/types/aws:appstream/FleetVpcConfig:FleetVpcConfig", + "description": "Configuration block for the VPC configuration for the image builder. See below.\n" + } + }, + "properties": { + "arn": { + "description": "ARN of the appstream fleet.\n", + "type": "string" + }, + "computeCapacity": { + "$ref": "#/types/aws:appstream/FleetComputeCapacity:FleetComputeCapacity", + "description": "Configuration block for the desired capacity of the fleet. See below.\n" + }, + "createdTime": { + "description": "Date and time, in UTC and extended RFC 3339 format, when the fleet was created.\n", + "type": "string" + }, + "description": { + "description": "Description to display.\n", + "type": "string" + }, + "disconnectTimeoutInSeconds": { + "description": "Amount of time that a streaming session remains active after users disconnect.\n", + "type": "integer" + }, + "displayName": { + "description": "Human-readable friendly name for the AppStream fleet.\n", + "type": "string" + }, + "domainJoinInfo": { + "$ref": "#/types/aws:appstream/FleetDomainJoinInfo:FleetDomainJoinInfo", + "description": "Configuration block for the name of the directory and organizational unit (OU) to use to join the fleet to a Microsoft Active Directory domain. See below.\n" + }, + "enableDefaultInternetAccess": { + "description": "Enables or disables default internet access for the fleet.\n", + "type": "boolean" + }, + "fleetType": { + "description": "Fleet type. Valid values are: `ON_DEMAND`, `ALWAYS_ON`\n", + "type": "string" + }, + "iamRoleArn": { + "description": "ARN of the IAM role to apply to the fleet.\n", + "type": "string" + }, + "idleDisconnectTimeoutInSeconds": { + "description": "Amount of time that users can be idle (inactive) before they are disconnected from their streaming session and the `disconnect_timeout_in_seconds` time interval begins.\n", + "type": "integer" + }, + "imageArn": { + "description": "ARN of the public, private, or shared image to use.\n", + "type": "string" + }, + "imageName": { + "description": "Name of the image used to create the fleet.\n", + "type": "string" + }, + "instanceType": { + "description": "Instance type to use when launching fleet instances.\n", + "type": "string" + }, + "maxUserDurationInSeconds": { + "description": "Maximum amount of time that a streaming session can remain active, in seconds.\n", + "type": "integer" + }, + "name": { + "description": "Unique name for the fleet.\n", + "type": "string" + }, + "state": { + "description": "State of the fleet. Can be `STARTING`, `RUNNING`, `STOPPING` or `STOPPED`\n", + "type": "string" + }, + "streamView": { + "description": "AppStream 2.0 view that is displayed to your users when they stream from the fleet. When `APP` is specified, only the windows of applications opened by users display. When `DESKTOP` is specified, the standard desktop that is provided by the operating system displays.\n", + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of tags to attach to AppStream instances.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "vpcConfig": { + "$ref": "#/types/aws:appstream/FleetVpcConfig:FleetVpcConfig", + "description": "Configuration block for the VPC configuration for the image builder. See below.\n" + } + }, + "required": [ + "arn", + "computeCapacity", + "createdTime", + "description", + "disconnectTimeoutInSeconds", + "displayName", + "domainJoinInfo", + "enableDefaultInternetAccess", + "fleetType", + "iamRoleArn", + "imageArn", + "imageName", + "instanceType", + "maxUserDurationInSeconds", + "name", + "state", + "streamView", + "tagsAll", + "vpcConfig" + ], + "requiredInputs": [ + "computeCapacity", + "instanceType" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Fleet resources.\n", + "properties": { + "arn": { + "description": "ARN of the appstream fleet.\n", + "type": "string" + }, + "computeCapacity": { + "$ref": "#/types/aws:appstream/FleetComputeCapacity:FleetComputeCapacity", + "description": "Configuration block for the desired capacity of the fleet. See below.\n" + }, + "createdTime": { + "description": "Date and time, in UTC and extended RFC 3339 format, when the fleet was created.\n", + "type": "string" + }, + "description": { + "description": "Description to display.\n", + "type": "string" + }, + "disconnectTimeoutInSeconds": { + "description": "Amount of time that a streaming session remains active after users disconnect.\n", + "type": "integer" + }, + "displayName": { + "description": "Human-readable friendly name for the AppStream fleet.\n", + "type": "string" + }, + "domainJoinInfo": { + "$ref": "#/types/aws:appstream/FleetDomainJoinInfo:FleetDomainJoinInfo", + "description": "Configuration block for the name of the directory and organizational unit (OU) to use to join the fleet to a Microsoft Active Directory domain. See below.\n" + }, + "enableDefaultInternetAccess": { + "description": "Enables or disables default internet access for the fleet.\n", + "type": "boolean" + }, + "fleetType": { + "description": "Fleet type. Valid values are: `ON_DEMAND`, `ALWAYS_ON`\n", + "type": "string" + }, + "iamRoleArn": { + "description": "ARN of the IAM role to apply to the fleet.\n", + "type": "string" + }, + "idleDisconnectTimeoutInSeconds": { + "description": "Amount of time that users can be idle (inactive) before they are disconnected from their streaming session and the `disconnect_timeout_in_seconds` time interval begins.\n", + "type": "integer" + }, + "imageArn": { + "description": "ARN of the public, private, or shared image to use.\n", + "type": "string" + }, + "imageName": { + "description": "Name of the image used to create the fleet.\n", + "type": "string" + }, + "instanceType": { + "description": "Instance type to use when launching fleet instances.\n", + "type": "string" + }, + "maxUserDurationInSeconds": { + "description": "Maximum amount of time that a streaming session can remain active, in seconds.\n", + "type": "integer" + }, + "name": { + "description": "Unique name for the fleet.\n", + "type": "string" + }, + "state": { + "description": "State of the fleet. Can be `STARTING`, `RUNNING`, `STOPPING` or `STOPPED`\n", + "type": "string" + }, + "streamView": { + "description": "AppStream 2.0 view that is displayed to your users when they stream from the fleet. When `APP` is specified, only the windows of applications opened by users display. When `DESKTOP` is specified, the standard desktop that is provided by the operating system displays.\n", + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of tags to attach to AppStream instances.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "vpcConfig": { + "$ref": "#/types/aws:appstream/FleetVpcConfig:FleetVpcConfig", + "description": "Configuration block for the VPC configuration for the image builder. See below.\n" + } + }, + "type": "object" + } + }, + "aws:appstream/imageBuilder:ImageBuilder": { + "description": "Provides an AppStream image builder.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst testFleet = new aws.appstream.ImageBuilder(\"testFleet\", {\n description: \"Description of a ImageBuilder\",\n displayName: \"Display name of a ImageBuilder\",\n enableDefaultInternetAccess: false,\n imageName: \"AppStream-WinServer2012R2-07-19-2021\",\n instanceType: \"stream.standard.large\",\n vpcConfig: {\n subnetIds: [aws_subnet.example.id],\n },\n tags: {\n Name: \"Example Image Builder\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest_fleet = aws.appstream.ImageBuilder(\"testFleet\",\n description=\"Description of a ImageBuilder\",\n display_name=\"Display name of a ImageBuilder\",\n enable_default_internet_access=False,\n image_name=\"AppStream-WinServer2012R2-07-19-2021\",\n instance_type=\"stream.standard.large\",\n vpc_config=aws.appstream.ImageBuilderVpcConfigArgs(\n subnet_ids=[aws_subnet[\"example\"][\"id\"]],\n ),\n tags={\n \"Name\": \"Example Image Builder\",\n })\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var testFleet = new Aws.AppStream.ImageBuilder(\"testFleet\", new Aws.AppStream.ImageBuilderArgs\n {\n Description = \"Description of a ImageBuilder\",\n DisplayName = \"Display name of a ImageBuilder\",\n EnableDefaultInternetAccess = false,\n ImageName = \"AppStream-WinServer2012R2-07-19-2021\",\n InstanceType = \"stream.standard.large\",\n VpcConfig = new Aws.AppStream.Inputs.ImageBuilderVpcConfigArgs\n {\n SubnetIds = \n {\n aws_subnet.Example.Id,\n },\n },\n Tags = \n {\n { \"Name\", \"Example Image Builder\" },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/appstream\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := appstream.NewImageBuilder(ctx, \"testFleet\", \u0026appstream.ImageBuilderArgs{\n\t\t\tDescription: pulumi.String(\"Description of a ImageBuilder\"),\n\t\t\tDisplayName: pulumi.String(\"Display name of a ImageBuilder\"),\n\t\t\tEnableDefaultInternetAccess: pulumi.Bool(false),\n\t\t\tImageName: pulumi.String(\"AppStream-WinServer2012R2-07-19-2021\"),\n\t\t\tInstanceType: pulumi.String(\"stream.standard.large\"),\n\t\t\tVpcConfig: \u0026appstream.ImageBuilderVpcConfigArgs{\n\t\t\t\tSubnetIds: pulumi.StringArray{\n\t\t\t\t\tpulumi.Any(aws_subnet.Example.Id),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Name\": pulumi.String(\"Example Image Builder\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n`aws_appstream_image_builder` can be imported using the `name`, e.g.\n\n```sh\n $ pulumi import aws:appstream/imageBuilder:ImageBuilder example imageBuilderExample\n```\n\n ", + "inputProperties": { + "accessEndpoints": { + "description": "Set of interface VPC endpoint (interface endpoint) objects. Maximum of 4. See below.\n", + "items": { + "$ref": "#/types/aws:appstream/ImageBuilderAccessEndpoint:ImageBuilderAccessEndpoint" + }, + "type": "array" + }, + "appstreamAgentVersion": { + "description": "The version of the AppStream 2.0 agent to use for this image builder.\n", + "type": "string" + }, + "description": { + "description": "Description to display.\n", + "type": "string" + }, + "displayName": { + "description": "Human-readable friendly name for the AppStream image builder.\n", + "type": "string" + }, + "domainJoinInfo": { + "$ref": "#/types/aws:appstream/ImageBuilderDomainJoinInfo:ImageBuilderDomainJoinInfo", + "description": "Configuration block for the name of the directory and organizational unit (OU) to use to join the image builder to a Microsoft Active Directory domain. See below.\n" + }, + "enableDefaultInternetAccess": { + "description": "Enables or disables default internet access for the image builder.\n", + "type": "boolean" + }, + "iamRoleArn": { + "description": "ARN of the IAM role to apply to the image builder.\n", + "type": "string" + }, + "imageArn": { + "description": "ARN of the public, private, or shared image to use.\n", + "type": "string" + }, + "imageName": { + "description": "Name of the image used to create the image builder.\n", + "type": "string" + }, + "instanceType": { + "description": "The instance type to use when launching the image builder.\n", + "type": "string" + }, + "name": { + "description": "Unique name for the image builder.\n", + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags to assign to the instance. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + }, + "vpcConfig": { + "$ref": "#/types/aws:appstream/ImageBuilderVpcConfig:ImageBuilderVpcConfig", + "description": "Configuration block for the VPC configuration for the image builder. See below.\n" + } + }, + "properties": { + "accessEndpoints": { + "description": "Set of interface VPC endpoint (interface endpoint) objects. Maximum of 4. See below.\n", + "items": { + "$ref": "#/types/aws:appstream/ImageBuilderAccessEndpoint:ImageBuilderAccessEndpoint" + }, + "type": "array" + }, + "appstreamAgentVersion": { + "description": "The version of the AppStream 2.0 agent to use for this image builder.\n", + "type": "string" + }, + "arn": { + "description": "ARN of the appstream image builder.\n", + "type": "string" + }, + "createdTime": { + "description": "Date and time, in UTC and extended RFC 3339 format, when the image builder was created.\n", + "type": "string" + }, + "description": { + "description": "Description to display.\n", + "type": "string" + }, + "displayName": { + "description": "Human-readable friendly name for the AppStream image builder.\n", + "type": "string" + }, + "domainJoinInfo": { + "$ref": "#/types/aws:appstream/ImageBuilderDomainJoinInfo:ImageBuilderDomainJoinInfo", + "description": "Configuration block for the name of the directory and organizational unit (OU) to use to join the image builder to a Microsoft Active Directory domain. See below.\n" + }, + "enableDefaultInternetAccess": { + "description": "Enables or disables default internet access for the image builder.\n", + "type": "boolean" + }, + "iamRoleArn": { + "description": "ARN of the IAM role to apply to the image builder.\n", + "type": "string" + }, + "imageArn": { + "description": "ARN of the public, private, or shared image to use.\n", + "type": "string" + }, + "imageName": { + "description": "Name of the image used to create the image builder.\n", + "type": "string" + }, + "instanceType": { + "description": "The instance type to use when launching the image builder.\n", + "type": "string" + }, + "name": { + "description": "Unique name for the image builder.\n", + "type": "string" + }, + "state": { + "description": "State of the image builder. Can be: `PENDING`, `UPDATING_AGENT`, `RUNNING`, `STOPPING`, `STOPPED`, `REBOOTING`, `SNAPSHOTTING`, `DELETING`, `FAILED`, `UPDATING`, `PENDING_QUALIFICATION`\n", + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags to assign to the instance. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + }, + "vpcConfig": { + "$ref": "#/types/aws:appstream/ImageBuilderVpcConfig:ImageBuilderVpcConfig", + "description": "Configuration block for the VPC configuration for the image builder. See below.\n" + } + }, + "required": [ + "appstreamAgentVersion", + "arn", + "createdTime", + "description", + "displayName", + "domainJoinInfo", + "enableDefaultInternetAccess", + "iamRoleArn", + "imageArn", + "imageName", + "instanceType", + "name", + "state", + "tagsAll", + "vpcConfig" + ], + "requiredInputs": [ + "instanceType" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering ImageBuilder resources.\n", + "properties": { + "accessEndpoints": { + "description": "Set of interface VPC endpoint (interface endpoint) objects. Maximum of 4. See below.\n", + "items": { + "$ref": "#/types/aws:appstream/ImageBuilderAccessEndpoint:ImageBuilderAccessEndpoint" + }, + "type": "array" + }, + "appstreamAgentVersion": { + "description": "The version of the AppStream 2.0 agent to use for this image builder.\n", + "type": "string" + }, + "arn": { + "description": "ARN of the appstream image builder.\n", + "type": "string" + }, + "createdTime": { + "description": "Date and time, in UTC and extended RFC 3339 format, when the image builder was created.\n", + "type": "string" + }, + "description": { + "description": "Description to display.\n", + "type": "string" + }, + "displayName": { + "description": "Human-readable friendly name for the AppStream image builder.\n", + "type": "string" + }, + "domainJoinInfo": { + "$ref": "#/types/aws:appstream/ImageBuilderDomainJoinInfo:ImageBuilderDomainJoinInfo", + "description": "Configuration block for the name of the directory and organizational unit (OU) to use to join the image builder to a Microsoft Active Directory domain. See below.\n" + }, + "enableDefaultInternetAccess": { + "description": "Enables or disables default internet access for the image builder.\n", + "type": "boolean" + }, + "iamRoleArn": { + "description": "ARN of the IAM role to apply to the image builder.\n", + "type": "string" + }, + "imageArn": { + "description": "ARN of the public, private, or shared image to use.\n", + "type": "string" + }, + "imageName": { + "description": "Name of the image used to create the image builder.\n", + "type": "string" + }, + "instanceType": { + "description": "The instance type to use when launching the image builder.\n", + "type": "string" + }, + "name": { + "description": "Unique name for the image builder.\n", + "type": "string" + }, + "state": { + "description": "State of the image builder. Can be: `PENDING`, `UPDATING_AGENT`, `RUNNING`, `STOPPING`, `STOPPED`, `REBOOTING`, `SNAPSHOTTING`, `DELETING`, `FAILED`, `UPDATING`, `PENDING_QUALIFICATION`\n", + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags to assign to the instance. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + }, + "vpcConfig": { + "$ref": "#/types/aws:appstream/ImageBuilderVpcConfig:ImageBuilderVpcConfig", + "description": "Configuration block for the VPC configuration for the image builder. See below.\n" + } + }, + "type": "object" + } + }, "aws:appstream/stack:Stack": { "description": "Provides an AppStream stack.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.appstream.Stack(\"example\", {\n applicationSettings: {\n enabled: true,\n settingsGroup: \"SettingsGroup\",\n },\n description: \"stack description\",\n displayName: \"stack display name\",\n feedbackUrl: \"http://your-domain/feedback\",\n redirectUrl: \"http://your-domain/redirect\",\n storageConnectors: [{\n connectorType: \"HOMEFOLDERS\",\n }],\n tags: {\n TagName: \"TagValue\",\n },\n userSettings: [\n {\n action: \"CLIPBOARD_COPY_FROM_LOCAL_DEVICE\",\n permission: \"ENABLED\",\n },\n {\n action: \"CLIPBOARD_COPY_TO_LOCAL_DEVICE\",\n permission: \"ENABLED\",\n },\n {\n action: \"FILE_UPLOAD\",\n permission: \"ENABLED\",\n },\n {\n action: \"FILE_DOWNLOAD\",\n permission: \"ENABLED\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.appstream.Stack(\"example\",\n application_settings=aws.appstream.StackApplicationSettingsArgs(\n enabled=True,\n settings_group=\"SettingsGroup\",\n ),\n description=\"stack description\",\n display_name=\"stack display name\",\n feedback_url=\"http://your-domain/feedback\",\n redirect_url=\"http://your-domain/redirect\",\n storage_connectors=[aws.appstream.StackStorageConnectorArgs(\n connector_type=\"HOMEFOLDERS\",\n )],\n tags={\n \"TagName\": \"TagValue\",\n },\n user_settings=[\n aws.appstream.StackUserSettingArgs(\n action=\"CLIPBOARD_COPY_FROM_LOCAL_DEVICE\",\n permission=\"ENABLED\",\n ),\n aws.appstream.StackUserSettingArgs(\n action=\"CLIPBOARD_COPY_TO_LOCAL_DEVICE\",\n permission=\"ENABLED\",\n ),\n aws.appstream.StackUserSettingArgs(\n action=\"FILE_UPLOAD\",\n permission=\"ENABLED\",\n ),\n aws.appstream.StackUserSettingArgs(\n action=\"FILE_DOWNLOAD\",\n permission=\"ENABLED\",\n ),\n ])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.AppStream.Stack(\"example\", new Aws.AppStream.StackArgs\n {\n ApplicationSettings = new Aws.AppStream.Inputs.StackApplicationSettingsArgs\n {\n Enabled = true,\n SettingsGroup = \"SettingsGroup\",\n },\n Description = \"stack description\",\n DisplayName = \"stack display name\",\n FeedbackUrl = \"http://your-domain/feedback\",\n RedirectUrl = \"http://your-domain/redirect\",\n StorageConnectors = \n {\n new Aws.AppStream.Inputs.StackStorageConnectorArgs\n {\n ConnectorType = \"HOMEFOLDERS\",\n },\n },\n Tags = \n {\n { \"TagName\", \"TagValue\" },\n },\n UserSettings = \n {\n new Aws.AppStream.Inputs.StackUserSettingArgs\n {\n Action = \"CLIPBOARD_COPY_FROM_LOCAL_DEVICE\",\n Permission = \"ENABLED\",\n },\n new Aws.AppStream.Inputs.StackUserSettingArgs\n {\n Action = \"CLIPBOARD_COPY_TO_LOCAL_DEVICE\",\n Permission = \"ENABLED\",\n },\n new Aws.AppStream.Inputs.StackUserSettingArgs\n {\n Action = \"FILE_UPLOAD\",\n Permission = \"ENABLED\",\n },\n new Aws.AppStream.Inputs.StackUserSettingArgs\n {\n Action = \"FILE_DOWNLOAD\",\n Permission = \"ENABLED\",\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/appstream\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := appstream.NewStack(ctx, \"example\", \u0026appstream.StackArgs{\n\t\t\tApplicationSettings: \u0026appstream.StackApplicationSettingsArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\tSettingsGroup: pulumi.String(\"SettingsGroup\"),\n\t\t\t},\n\t\t\tDescription: pulumi.String(\"stack description\"),\n\t\t\tDisplayName: pulumi.String(\"stack display name\"),\n\t\t\tFeedbackUrl: pulumi.String(\"http://your-domain/feedback\"),\n\t\t\tRedirectUrl: pulumi.String(\"http://your-domain/redirect\"),\n\t\t\tStorageConnectors: appstream.StackStorageConnectorArray{\n\t\t\t\t\u0026appstream.StackStorageConnectorArgs{\n\t\t\t\t\tConnectorType: pulumi.String(\"HOMEFOLDERS\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"TagName\": pulumi.String(\"TagValue\"),\n\t\t\t},\n\t\t\tUserSettings: appstream.StackUserSettingArray{\n\t\t\t\t\u0026appstream.StackUserSettingArgs{\n\t\t\t\t\tAction: pulumi.String(\"CLIPBOARD_COPY_FROM_LOCAL_DEVICE\"),\n\t\t\t\t\tPermission: pulumi.String(\"ENABLED\"),\n\t\t\t\t},\n\t\t\t\t\u0026appstream.StackUserSettingArgs{\n\t\t\t\t\tAction: pulumi.String(\"CLIPBOARD_COPY_TO_LOCAL_DEVICE\"),\n\t\t\t\t\tPermission: pulumi.String(\"ENABLED\"),\n\t\t\t\t},\n\t\t\t\t\u0026appstream.StackUserSettingArgs{\n\t\t\t\t\tAction: pulumi.String(\"FILE_UPLOAD\"),\n\t\t\t\t\tPermission: pulumi.String(\"ENABLED\"),\n\t\t\t\t},\n\t\t\t\t\u0026appstream.StackUserSettingArgs{\n\t\t\t\t\tAction: pulumi.String(\"FILE_DOWNLOAD\"),\n\t\t\t\t\tPermission: pulumi.String(\"ENABLED\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n`aws_appstream_stack` can be imported using the id, e.g.\n\n```sh\n $ pulumi import aws:appstream/stack:Stack example stackID\n```\n\n ", "inputProperties": { @@ -40269,6 +41549,84 @@ "type": "object" } }, + "aws:chime/voiceConnectorStreaming:VoiceConnectorStreaming": { + "description": "Adds a streaming configuration for the specified Amazon Chime Voice Connector. The streaming configuration specifies whether media streaming is enabled for sending to Amazon Kinesis.\nIt also sets the retention period, in hours, for the Amazon Kinesis data.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst defaultVoiceConnector = new aws.chime.VoiceConnector(\"defaultVoiceConnector\", {requireEncryption: true});\nconst defaultVoiceConnectorStreaming = new aws.chime.VoiceConnectorStreaming(\"defaultVoiceConnectorStreaming\", {\n disabled: false,\n voiceConnectorId: defaultVoiceConnector.id,\n dataRetention: 7,\n streamingNotificationTargets: [\"SQS\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ndefault_voice_connector = aws.chime.VoiceConnector(\"defaultVoiceConnector\", require_encryption=True)\ndefault_voice_connector_streaming = aws.chime.VoiceConnectorStreaming(\"defaultVoiceConnectorStreaming\",\n disabled=False,\n voice_connector_id=default_voice_connector.id,\n data_retention=7,\n streaming_notification_targets=[\"SQS\"])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var defaultVoiceConnector = new Aws.Chime.VoiceConnector(\"defaultVoiceConnector\", new Aws.Chime.VoiceConnectorArgs\n {\n RequireEncryption = true,\n });\n var defaultVoiceConnectorStreaming = new Aws.Chime.VoiceConnectorStreaming(\"defaultVoiceConnectorStreaming\", new Aws.Chime.VoiceConnectorStreamingArgs\n {\n Disabled = false,\n VoiceConnectorId = defaultVoiceConnector.Id,\n DataRetention = 7,\n StreamingNotificationTargets = \n {\n \"SQS\",\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/chime\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultVoiceConnector, err := chime.NewVoiceConnector(ctx, \"defaultVoiceConnector\", \u0026chime.VoiceConnectorArgs{\n\t\t\tRequireEncryption: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = chime.NewVoiceConnectorStreaming(ctx, \"defaultVoiceConnectorStreaming\", \u0026chime.VoiceConnectorStreamingArgs{\n\t\t\tDisabled: pulumi.Bool(false),\n\t\t\tVoiceConnectorId: defaultVoiceConnector.ID(),\n\t\t\tDataRetention: pulumi.Int(7),\n\t\t\tStreamingNotificationTargets: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"SQS\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nChime Voice Connector Streaming can be imported using the `voice_connector_id`, e.g.\n\n```sh\n $ pulumi import aws:chime/voiceConnectorStreaming:VoiceConnectorStreaming default abcdef1ghij2klmno3pqr4\n```\n\n ", + "inputProperties": { + "dataRetention": { + "description": "The retention period, in hours, for the Amazon Kinesis data.\n", + "type": "integer" + }, + "disabled": { + "description": "When true, media streaming to Amazon Kinesis is turned off. Default: `false`\n", + "type": "boolean" + }, + "streamingNotificationTargets": { + "description": "The streaming notification targets. Valid Values: `EventBridge | SNS | SQS`\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "voiceConnectorId": { + "description": "The Amazon Chime Voice Connector ID.\n", + "type": "string" + } + }, + "properties": { + "dataRetention": { + "description": "The retention period, in hours, for the Amazon Kinesis data.\n", + "type": "integer" + }, + "disabled": { + "description": "When true, media streaming to Amazon Kinesis is turned off. Default: `false`\n", + "type": "boolean" + }, + "streamingNotificationTargets": { + "description": "The streaming notification targets. Valid Values: `EventBridge | SNS | SQS`\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "voiceConnectorId": { + "description": "The Amazon Chime Voice Connector ID.\n", + "type": "string" + } + }, + "required": [ + "dataRetention", + "voiceConnectorId" + ], + "requiredInputs": [ + "dataRetention", + "voiceConnectorId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering VoiceConnectorStreaming resources.\n", + "properties": { + "dataRetention": { + "description": "The retention period, in hours, for the Amazon Kinesis data.\n", + "type": "integer" + }, + "disabled": { + "description": "When true, media streaming to Amazon Kinesis is turned off. Default: `false`\n", + "type": "boolean" + }, + "streamingNotificationTargets": { + "description": "The streaming notification targets. Valid Values: `EventBridge | SNS | SQS`\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "voiceConnectorId": { + "description": "The Amazon Chime Voice Connector ID.\n", + "type": "string" + } + }, + "type": "object" + } + }, "aws:chime/voiceConnectorTermination:VoiceConnectorTermination": { "description": "Enable Termination settings to control outbound calling from your SIP infrastructure.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst defaultVoiceConnector = new aws.chime.VoiceConnector(\"defaultVoiceConnector\", {requireEncryption: true});\nconst defaultVoiceConnectorTermination = new aws.chime.VoiceConnectorTermination(\"defaultVoiceConnectorTermination\", {\n disabled: false,\n cpsLimit: 1,\n cidrAllowLists: [\"50.35.78.96/31\"],\n callingRegions: [\n \"US\",\n \"CA\",\n ],\n voiceConnectorId: defaultVoiceConnector.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ndefault_voice_connector = aws.chime.VoiceConnector(\"defaultVoiceConnector\", require_encryption=True)\ndefault_voice_connector_termination = aws.chime.VoiceConnectorTermination(\"defaultVoiceConnectorTermination\",\n disabled=False,\n cps_limit=1,\n cidr_allow_lists=[\"50.35.78.96/31\"],\n calling_regions=[\n \"US\",\n \"CA\",\n ],\n voice_connector_id=default_voice_connector.id)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var defaultVoiceConnector = new Aws.Chime.VoiceConnector(\"defaultVoiceConnector\", new Aws.Chime.VoiceConnectorArgs\n {\n RequireEncryption = true,\n });\n var defaultVoiceConnectorTermination = new Aws.Chime.VoiceConnectorTermination(\"defaultVoiceConnectorTermination\", new Aws.Chime.VoiceConnectorTerminationArgs\n {\n Disabled = false,\n CpsLimit = 1,\n CidrAllowLists = \n {\n \"50.35.78.96/31\",\n },\n CallingRegions = \n {\n \"US\",\n \"CA\",\n },\n VoiceConnectorId = defaultVoiceConnector.Id,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/chime\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultVoiceConnector, err := chime.NewVoiceConnector(ctx, \"defaultVoiceConnector\", \u0026chime.VoiceConnectorArgs{\n\t\t\tRequireEncryption: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = chime.NewVoiceConnectorTermination(ctx, \"defaultVoiceConnectorTermination\", \u0026chime.VoiceConnectorTerminationArgs{\n\t\t\tDisabled: pulumi.Bool(false),\n\t\t\tCpsLimit: pulumi.Int(1),\n\t\t\tCidrAllowLists: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"50.35.78.96/31\"),\n\t\t\t},\n\t\t\tCallingRegions: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"US\"),\n\t\t\t\tpulumi.String(\"CA\"),\n\t\t\t},\n\t\t\tVoiceConnectorId: defaultVoiceConnector.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nChime Voice Connector Termination can be imported using the `voice_connector_id`, e.g.\n\n```sh\n $ pulumi import aws:chime/voiceConnectorTermination:VoiceConnectorTermination default abcdef1ghij2klmno3pqr4\n```\n\n ", "inputProperties": { @@ -40382,6 +41740,60 @@ "type": "object" } }, + "aws:chime/voiceConnectorTerminationCredentials:VoiceConnectorTerminationCredentials": { + "description": "Adds termination SIP credentials for the specified Amazon Chime Voice Connector.\n\n\u003e **Note:** Voice Connector Termination Credentials requires a [Voice Connector Termination](https://www.terraform.io/docs/providers/aws/r/chime_voice_connector_termination.html) to be present. Use of `depends_on` (as shown below) is recommended to avoid race conditions.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst defaultVoiceConnector = new aws.chime.VoiceConnector(\"defaultVoiceConnector\", {requireEncryption: true});\nconst defaultVoiceConnectorTermination = new aws.chime.VoiceConnectorTermination(\"defaultVoiceConnectorTermination\", {\n disabled: true,\n cpsLimit: 1,\n cidrAllowLists: [\"50.35.78.96/31\"],\n callingRegions: [\n \"US\",\n \"CA\",\n ],\n voiceConnectorId: defaultVoiceConnector.id,\n});\nconst defaultVoiceConnectorTerminationCredentials = new aws.chime.VoiceConnectorTerminationCredentials(\"defaultVoiceConnectorTerminationCredentials\", {\n voiceConnectorId: defaultVoiceConnector.id,\n credentials: [{\n username: \"test\",\n password: \"test!\",\n }],\n}, {\n dependsOn: [defaultVoiceConnectorTermination],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ndefault_voice_connector = aws.chime.VoiceConnector(\"defaultVoiceConnector\", require_encryption=True)\ndefault_voice_connector_termination = aws.chime.VoiceConnectorTermination(\"defaultVoiceConnectorTermination\",\n disabled=True,\n cps_limit=1,\n cidr_allow_lists=[\"50.35.78.96/31\"],\n calling_regions=[\n \"US\",\n \"CA\",\n ],\n voice_connector_id=default_voice_connector.id)\ndefault_voice_connector_termination_credentials = aws.chime.VoiceConnectorTerminationCredentials(\"defaultVoiceConnectorTerminationCredentials\",\n voice_connector_id=default_voice_connector.id,\n credentials=[aws.chime.VoiceConnectorTerminationCredentialsCredentialArgs(\n username=\"test\",\n password=\"test!\",\n )],\n opts=pulumi.ResourceOptions(depends_on=[default_voice_connector_termination]))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var defaultVoiceConnector = new Aws.Chime.VoiceConnector(\"defaultVoiceConnector\", new Aws.Chime.VoiceConnectorArgs\n {\n RequireEncryption = true,\n });\n var defaultVoiceConnectorTermination = new Aws.Chime.VoiceConnectorTermination(\"defaultVoiceConnectorTermination\", new Aws.Chime.VoiceConnectorTerminationArgs\n {\n Disabled = true,\n CpsLimit = 1,\n CidrAllowLists = \n {\n \"50.35.78.96/31\",\n },\n CallingRegions = \n {\n \"US\",\n \"CA\",\n },\n VoiceConnectorId = defaultVoiceConnector.Id,\n });\n var defaultVoiceConnectorTerminationCredentials = new Aws.Chime.VoiceConnectorTerminationCredentials(\"defaultVoiceConnectorTerminationCredentials\", new Aws.Chime.VoiceConnectorTerminationCredentialsArgs\n {\n VoiceConnectorId = defaultVoiceConnector.Id,\n Credentials = \n {\n new Aws.Chime.Inputs.VoiceConnectorTerminationCredentialsCredentialArgs\n {\n Username = \"test\",\n Password = \"test!\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n defaultVoiceConnectorTermination,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/chime\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultVoiceConnector, err := chime.NewVoiceConnector(ctx, \"defaultVoiceConnector\", \u0026chime.VoiceConnectorArgs{\n\t\t\tRequireEncryption: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultVoiceConnectorTermination, err := chime.NewVoiceConnectorTermination(ctx, \"defaultVoiceConnectorTermination\", \u0026chime.VoiceConnectorTerminationArgs{\n\t\t\tDisabled: pulumi.Bool(true),\n\t\t\tCpsLimit: pulumi.Int(1),\n\t\t\tCidrAllowLists: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"50.35.78.96/31\"),\n\t\t\t},\n\t\t\tCallingRegions: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"US\"),\n\t\t\t\tpulumi.String(\"CA\"),\n\t\t\t},\n\t\t\tVoiceConnectorId: defaultVoiceConnector.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = chime.NewVoiceConnectorTerminationCredentials(ctx, \"defaultVoiceConnectorTerminationCredentials\", \u0026chime.VoiceConnectorTerminationCredentialsArgs{\n\t\t\tVoiceConnectorId: defaultVoiceConnector.ID(),\n\t\t\tCredentials: chime.VoiceConnectorTerminationCredentialsCredentialArray{\n\t\t\t\t\u0026chime.VoiceConnectorTerminationCredentialsCredentialArgs{\n\t\t\t\t\tUsername: pulumi.String(\"test\"),\n\t\t\t\t\tPassword: pulumi.String(\"test!\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdefaultVoiceConnectorTermination,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nChime Voice Connector Termination Credentials can be imported using the `voice_connector_id`, e.g.\n\n```sh\n $ pulumi import aws:chime/voiceConnectorTerminationCredentials:VoiceConnectorTerminationCredentials default abcdef1ghij2klmno3pqr4\n```\n\n ", + "inputProperties": { + "credentials": { + "description": "List of termination SIP credentials.\n", + "items": { + "$ref": "#/types/aws:chime/VoiceConnectorTerminationCredentialsCredential:VoiceConnectorTerminationCredentialsCredential" + }, + "type": "array" + }, + "voiceConnectorId": { + "description": "Amazon Chime Voice Connector ID.\n", + "type": "string" + } + }, + "properties": { + "credentials": { + "description": "List of termination SIP credentials.\n", + "items": { + "$ref": "#/types/aws:chime/VoiceConnectorTerminationCredentialsCredential:VoiceConnectorTerminationCredentialsCredential" + }, + "type": "array" + }, + "voiceConnectorId": { + "description": "Amazon Chime Voice Connector ID.\n", + "type": "string" + } + }, + "required": [ + "credentials", + "voiceConnectorId" + ], + "requiredInputs": [ + "credentials", + "voiceConnectorId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering VoiceConnectorTerminationCredentials resources.\n", + "properties": { + "credentials": { + "description": "List of termination SIP credentials.\n", + "items": { + "$ref": "#/types/aws:chime/VoiceConnectorTerminationCredentialsCredential:VoiceConnectorTerminationCredentialsCredential" + }, + "type": "array" + }, + "voiceConnectorId": { + "description": "Amazon Chime Voice Connector ID.\n", + "type": "string" + } + }, + "type": "object" + } + }, "aws:cloud9/environmentEC2:EnvironmentEC2": { "description": "Provides a Cloud9 EC2 Development Environment.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.cloud9.EnvironmentEC2(\"example\", {\n instanceType: \"t2.micro\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.cloud9.EnvironmentEC2(\"example\", instance_type=\"t2.micro\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Cloud9.EnvironmentEC2(\"example\", new Aws.Cloud9.EnvironmentEC2Args\n {\n InstanceType = \"t2.micro\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloud9\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloud9.NewEnvironmentEC2(ctx, \"example\", \u0026cloud9.EnvironmentEC2Args{\n\t\t\tInstanceType: pulumi.String(\"t2.micro\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nGet the URL of the Cloud9 environment after creation:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.cloud9.EnvironmentEC2(\"example\", {instanceType: \"t2.micro\"});\nconst cloud9Instance = example.id.apply(id =\u003e aws.ec2.getInstance({\n filters: [{\n name: \"tag:aws:cloud9:environment\",\n values: [id],\n }],\n}));\nexport const cloud9Url = pulumi.interpolate`https://${_var.region}.console.aws.amazon.com/cloud9/ide/${example.id}`;\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.cloud9.EnvironmentEC2(\"example\", instance_type=\"t2.micro\")\ncloud9_instance = example.id.apply(lambda id: aws.ec2.get_instance(filters=[aws.ec2.GetInstanceFilterArgs(\n name=\"tag:aws:cloud9:environment\",\n values=[id],\n)]))\npulumi.export(\"cloud9Url\", example.id.apply(lambda id: f\"https://{var['region']}.console.aws.amazon.com/cloud9/ide/{id}\"))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Cloud9.EnvironmentEC2(\"example\", new Aws.Cloud9.EnvironmentEC2Args\n {\n InstanceType = \"t2.micro\",\n });\n var cloud9Instance = example.Id.Apply(id =\u003e Aws.Ec2.GetInstance.InvokeAsync(new Aws.Ec2.GetInstanceArgs\n {\n Filters = \n {\n new Aws.Ec2.Inputs.GetInstanceFilterArgs\n {\n Name = \"tag:aws:cloud9:environment\",\n Values = \n {\n id,\n },\n },\n },\n }));\n this.Cloud9Url = example.Id.Apply(id =\u003e $\"https://{@var.Region}.console.aws.amazon.com/cloud9/ide/{id}\");\n }\n\n [Output(\"cloud9Url\")]\n public Output\u003cstring\u003e Cloud9Url { get; set; }\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloud9\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := cloud9.NewEnvironmentEC2(ctx, \"example\", \u0026cloud9.EnvironmentEC2Args{\n\t\t\tInstanceType: pulumi.String(\"t2.micro\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"cloud9Url\", example.ID().ApplyT(func(id string) (string, error) {\n\t\t\treturn fmt.Sprintf(\"%v%v%v%v\", \"https://\", _var.Region, \".console.aws.amazon.com/cloud9/ide/\", id), nil\n\t\t}).(pulumi.StringOutput))\n\t\treturn nil\n\t})\n}\n```\n\nAllocate a static IP to the Cloud9 environment:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.cloud9.EnvironmentEC2(\"example\", {instanceType: \"t2.micro\"});\nconst cloud9Instance = example.id.apply(id =\u003e aws.ec2.getInstance({\n filters: [{\n name: \"tag:aws:cloud9:environment\",\n values: [id],\n }],\n}));\nconst cloud9Eip = new aws.ec2.Eip(\"cloud9Eip\", {\n instance: cloud9Instance.apply(cloud9Instance =\u003e cloud9Instance.id),\n vpc: true,\n});\nexport const cloud9PublicIp = cloud9Eip.publicIp;\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.cloud9.EnvironmentEC2(\"example\", instance_type=\"t2.micro\")\ncloud9_instance = example.id.apply(lambda id: aws.ec2.get_instance(filters=[aws.ec2.GetInstanceFilterArgs(\n name=\"tag:aws:cloud9:environment\",\n values=[id],\n)]))\ncloud9_eip = aws.ec2.Eip(\"cloud9Eip\",\n instance=cloud9_instance.id,\n vpc=True)\npulumi.export(\"cloud9PublicIp\", cloud9_eip.public_ip)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Cloud9.EnvironmentEC2(\"example\", new Aws.Cloud9.EnvironmentEC2Args\n {\n InstanceType = \"t2.micro\",\n });\n var cloud9Instance = example.Id.Apply(id =\u003e Aws.Ec2.GetInstance.InvokeAsync(new Aws.Ec2.GetInstanceArgs\n {\n Filters = \n {\n new Aws.Ec2.Inputs.GetInstanceFilterArgs\n {\n Name = \"tag:aws:cloud9:environment\",\n Values = \n {\n id,\n },\n },\n },\n }));\n var cloud9Eip = new Aws.Ec2.Eip(\"cloud9Eip\", new Aws.Ec2.EipArgs\n {\n Instance = cloud9Instance.Apply(cloud9Instance =\u003e cloud9Instance.Id),\n Vpc = true,\n });\n this.Cloud9PublicIp = cloud9Eip.PublicIp;\n }\n\n [Output(\"cloud9PublicIp\")]\n public Output\u003cstring\u003e Cloud9PublicIp { get; set; }\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloud9\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := cloud9.NewEnvironmentEC2(ctx, \"example\", \u0026cloud9.EnvironmentEC2Args{\n\t\t\tInstanceType: pulumi.String(\"t2.micro\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcloud9Eip, err := ec2.NewEip(ctx, \"cloud9Eip\", \u0026ec2.EipArgs{\n\t\t\tInstance: cloud9Instance.ApplyT(func(cloud9Instance ec2.GetInstanceResult) (string, error) {\n\t\t\t\treturn cloud9Instance.Id, nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tVpc: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"cloud9PublicIp\", cloud9Eip.PublicIp)\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputProperties": { @@ -40529,6 +41941,92 @@ "type": "object" } }, + "aws:cloudcontrol/resource:Resource": { + "description": "Manages a Cloud Control API Resource. The configuration and lifecycle handling of these resources is proxied through Cloud Control API handlers to the backend service.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.cloudcontrol.Resource(\"example\", {\n typeName: \"AWS::ECS::Cluster\",\n desiredState: JSON.stringify({\n ClusterName: \"example\",\n Tags: [{\n Key: \"CostCenter\",\n Value: \"IT\",\n }],\n }),\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_aws as aws\n\nexample = aws.cloudcontrol.Resource(\"example\",\n type_name=\"AWS::ECS::Cluster\",\n desired_state=json.dumps({\n \"ClusterName\": \"example\",\n \"Tags\": [{\n \"Key\": \"CostCenter\",\n \"Value\": \"IT\",\n }],\n }))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.CloudControl.Resource(\"example\", new Aws.CloudControl.ResourceArgs\n {\n TypeName = \"AWS::ECS::Cluster\",\n DesiredState = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n { \"ClusterName\", \"example\" },\n { \"Tags\", new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n { \"Key\", \"CostCenter\" },\n { \"Value\", \"IT\" },\n },\n }\n },\n }),\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudcontrol\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"ClusterName\": \"example\",\n\t\t\t\"Tags\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"Key\": \"CostCenter\",\n\t\t\t\t\t\"Value\": \"IT\",\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err := cloudcontrol.NewResource(ctx, \"example\", \u0026cloudcontrol.ResourceArgs{\n\t\t\tTypeName: pulumi.String(\"AWS::ECS::Cluster\"),\n\t\t\tDesiredState: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputProperties": { + "desiredState": { + "type": "string" + }, + "roleArn": { + "description": "Amazon Resource Name (ARN) of the IAM Role to assume for operations.\n", + "type": "string" + }, + "schema": { + "description": "JSON string of the CloudFormation resource type schema which is used for plan time validation where possible. Automatically fetched if not provided. In large scale environments with multiple resources using the same `type_name`, it is recommended to fetch the schema once via the [`aws.cloudformation.CloudFormationType` data source](https://www.terraform.io/docs/providers/aws/d/cloudformation_type.html) and use this argument to reduce `DescribeType` API operation throttling. This value is marked sensitive only to prevent large plan differences from showing.\n", + "type": "string" + }, + "typeName": { + "description": "CloudFormation resource type name. For example, `AWS::EC2::VPC`.\n", + "type": "string" + }, + "typeVersionId": { + "description": "Identifier of the CloudFormation resource type version.\n", + "type": "string" + } + }, + "properties": { + "desiredState": { + "type": "string" + }, + "properties": { + "type": "string" + }, + "roleArn": { + "description": "Amazon Resource Name (ARN) of the IAM Role to assume for operations.\n", + "type": "string" + }, + "schema": { + "description": "JSON string of the CloudFormation resource type schema which is used for plan time validation where possible. Automatically fetched if not provided. In large scale environments with multiple resources using the same `type_name`, it is recommended to fetch the schema once via the [`aws.cloudformation.CloudFormationType` data source](https://www.terraform.io/docs/providers/aws/d/cloudformation_type.html) and use this argument to reduce `DescribeType` API operation throttling. This value is marked sensitive only to prevent large plan differences from showing.\n", + "type": "string" + }, + "typeName": { + "description": "CloudFormation resource type name. For example, `AWS::EC2::VPC`.\n", + "type": "string" + }, + "typeVersionId": { + "description": "Identifier of the CloudFormation resource type version.\n", + "type": "string" + } + }, + "required": [ + "desiredState", + "properties", + "schema", + "typeName" + ], + "requiredInputs": [ + "desiredState", + "typeName" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Resource resources.\n", + "properties": { + "desiredState": { + "type": "string" + }, + "properties": { + "type": "string" + }, + "roleArn": { + "description": "Amazon Resource Name (ARN) of the IAM Role to assume for operations.\n", + "type": "string" + }, + "schema": { + "description": "JSON string of the CloudFormation resource type schema which is used for plan time validation where possible. Automatically fetched if not provided. In large scale environments with multiple resources using the same `type_name`, it is recommended to fetch the schema once via the [`aws.cloudformation.CloudFormationType` data source](https://www.terraform.io/docs/providers/aws/d/cloudformation_type.html) and use this argument to reduce `DescribeType` API operation throttling. This value is marked sensitive only to prevent large plan differences from showing.\n", + "type": "string" + }, + "typeName": { + "description": "CloudFormation resource type name. For example, `AWS::EC2::VPC`.\n", + "type": "string" + }, + "typeVersionId": { + "description": "Identifier of the CloudFormation resource type version.\n", + "type": "string" + } + }, + "type": "object" + } + }, "aws:cloudformation/cloudFormationType:CloudFormationType": { "description": "\n\n\n## Import\n\n`aws_cloudformation_type` can be imported with their type version Amazon Resource Name (ARN), e.g.\n\n```sh\n $ pulumi import aws:cloudformation/cloudFormationType:CloudFormationType example arn:aws:cloudformation:us-east-1:123456789012:type/resource/ExampleCompany-ExampleService-ExampleType/1\n```\n\n ", "inputProperties": { @@ -41171,12 +42669,16 @@ } }, "aws:cloudformation/stackSetInstance:StackSetInstance": { - "description": "Manages a CloudFormation StackSet Instance. Instances are managed in the account and region of the StackSet after the target account permissions have been configured. Additional information about StackSets can be found in the [AWS CloudFormation User Guide](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html).\n\n\u003e **NOTE:** All target accounts must have an IAM Role created that matches the name of the execution role configured in the StackSet (the `execution_role_name` argument in the `aws.cloudformation.StackSet` resource) in a trust relationship with the administrative account or administration IAM Role. The execution role must have appropriate permissions to manage resources defined in the template along with those required for StackSets to operate. See the [AWS CloudFormation User Guide](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html) for more details.\n\n\u003e **NOTE:** To retain the Stack during resource destroy, ensure `retain_stack` has been set to `true` in the state first. This must be completed _before_ a deployment that would destroy the resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.cloudformation.StackSetInstance(\"example\", {\n accountId: \"123456789012\",\n region: \"us-east-1\",\n stackSetName: aws_cloudformation_stack_set.example.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.cloudformation.StackSetInstance(\"example\",\n account_id=\"123456789012\",\n region=\"us-east-1\",\n stack_set_name=aws_cloudformation_stack_set[\"example\"][\"name\"])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.CloudFormation.StackSetInstance(\"example\", new Aws.CloudFormation.StackSetInstanceArgs\n {\n AccountId = \"123456789012\",\n Region = \"us-east-1\",\n StackSetName = aws_cloudformation_stack_set.Example.Name,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudformation\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudformation.NewStackSetInstance(ctx, \"example\", \u0026cloudformation.StackSetInstanceArgs{\n\t\t\tAccountId: pulumi.String(\"123456789012\"),\n\t\t\tRegion: pulumi.String(\"us-east-1\"),\n\t\t\tStackSetName: pulumi.Any(aws_cloudformation_stack_set.Example.Name),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Example IAM Setup in Target Account\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst aWSCloudFormationStackSetExecutionRoleAssumeRolePolicy = aws.iam.getPolicyDocument({\n statements: [{\n actions: [\"sts:AssumeRole\"],\n effect: \"Allow\",\n principals: [{\n identifiers: [aws_iam_role.AWSCloudFormationStackSetAdministrationRole.arn],\n type: \"AWS\",\n }],\n }],\n});\nconst aWSCloudFormationStackSetExecutionRole = new aws.iam.Role(\"aWSCloudFormationStackSetExecutionRole\", {assumeRolePolicy: aWSCloudFormationStackSetExecutionRoleAssumeRolePolicy.then(aWSCloudFormationStackSetExecutionRoleAssumeRolePolicy =\u003e aWSCloudFormationStackSetExecutionRoleAssumeRolePolicy.json)});\nconst aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyPolicyDocument = aws.iam.getPolicyDocument({\n statements: [{\n actions: [\n \"cloudformation:*\",\n \"s3:*\",\n \"sns:*\",\n ],\n effect: \"Allow\",\n resources: [\"*\"],\n }],\n});\nconst aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyRolePolicy = new aws.iam.RolePolicy(\"aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyRolePolicy\", {\n policy: aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyPolicyDocument.then(aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyPolicyDocument =\u003e aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyPolicyDocument.json),\n role: aWSCloudFormationStackSetExecutionRole.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\na_ws_cloud_formation_stack_set_execution_role_assume_role_policy = aws.iam.get_policy_document(statements=[aws.iam.GetPolicyDocumentStatementArgs(\n actions=[\"sts:AssumeRole\"],\n effect=\"Allow\",\n principals=[aws.iam.GetPolicyDocumentStatementPrincipalArgs(\n identifiers=[aws_iam_role[\"AWSCloudFormationStackSetAdministrationRole\"][\"arn\"]],\n type=\"AWS\",\n )],\n)])\na_ws_cloud_formation_stack_set_execution_role = aws.iam.Role(\"aWSCloudFormationStackSetExecutionRole\", assume_role_policy=a_ws_cloud_formation_stack_set_execution_role_assume_role_policy.json)\na_ws_cloud_formation_stack_set_execution_role_minimum_execution_policy_policy_document = aws.iam.get_policy_document(statements=[aws.iam.GetPolicyDocumentStatementArgs(\n actions=[\n \"cloudformation:*\",\n \"s3:*\",\n \"sns:*\",\n ],\n effect=\"Allow\",\n resources=[\"*\"],\n)])\na_ws_cloud_formation_stack_set_execution_role_minimum_execution_policy_role_policy = aws.iam.RolePolicy(\"aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyRolePolicy\",\n policy=a_ws_cloud_formation_stack_set_execution_role_minimum_execution_policy_policy_document.json,\n role=a_ws_cloud_formation_stack_set_execution_role.name)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var aWSCloudFormationStackSetExecutionRoleAssumeRolePolicy = Output.Create(Aws.Iam.GetPolicyDocument.InvokeAsync(new Aws.Iam.GetPolicyDocumentArgs\n {\n Statements = \n {\n new Aws.Iam.Inputs.GetPolicyDocumentStatementArgs\n {\n Actions = \n {\n \"sts:AssumeRole\",\n },\n Effect = \"Allow\",\n Principals = \n {\n new Aws.Iam.Inputs.GetPolicyDocumentStatementPrincipalArgs\n {\n Identifiers = \n {\n aws_iam_role.AWSCloudFormationStackSetAdministrationRole.Arn,\n },\n Type = \"AWS\",\n },\n },\n },\n },\n }));\n var aWSCloudFormationStackSetExecutionRole = new Aws.Iam.Role(\"aWSCloudFormationStackSetExecutionRole\", new Aws.Iam.RoleArgs\n {\n AssumeRolePolicy = aWSCloudFormationStackSetExecutionRoleAssumeRolePolicy.Apply(aWSCloudFormationStackSetExecutionRoleAssumeRolePolicy =\u003e aWSCloudFormationStackSetExecutionRoleAssumeRolePolicy.Json),\n });\n var aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyPolicyDocument = Output.Create(Aws.Iam.GetPolicyDocument.InvokeAsync(new Aws.Iam.GetPolicyDocumentArgs\n {\n Statements = \n {\n new Aws.Iam.Inputs.GetPolicyDocumentStatementArgs\n {\n Actions = \n {\n \"cloudformation:*\",\n \"s3:*\",\n \"sns:*\",\n },\n Effect = \"Allow\",\n Resources = \n {\n \"*\",\n },\n },\n },\n }));\n var aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyRolePolicy = new Aws.Iam.RolePolicy(\"aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyRolePolicy\", new Aws.Iam.RolePolicyArgs\n {\n Policy = aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyPolicyDocument.Apply(aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyPolicyDocument =\u003e aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyPolicyDocument.Json),\n Role = aWSCloudFormationStackSetExecutionRole.Name,\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCloudFormation StackSet Instances can be imported using the StackSet name, target AWS account ID, and target AWS region separated by commas (`,`) e.g.\n\n```sh\n $ pulumi import aws:cloudformation/stackSetInstance:StackSetInstance example example,123456789012,us-east-1\n```\n\n ", + "description": "Manages a CloudFormation StackSet Instance. Instances are managed in the account and region of the StackSet after the target account permissions have been configured. Additional information about StackSets can be found in the [AWS CloudFormation User Guide](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html).\n\n\u003e **NOTE:** All target accounts must have an IAM Role created that matches the name of the execution role configured in the StackSet (the `execution_role_name` argument in the `aws.cloudformation.StackSet` resource) in a trust relationship with the administrative account or administration IAM Role. The execution role must have appropriate permissions to manage resources defined in the template along with those required for StackSets to operate. See the [AWS CloudFormation User Guide](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html) for more details.\n\n\u003e **NOTE:** To retain the Stack during resource destroy, ensure `retain_stack` has been set to `true` in the state first. This must be completed _before_ a deployment that would destroy the resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.cloudformation.StackSetInstance(\"example\", {\n accountId: \"123456789012\",\n region: \"us-east-1\",\n stackSetName: aws_cloudformation_stack_set.example.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.cloudformation.StackSetInstance(\"example\",\n account_id=\"123456789012\",\n region=\"us-east-1\",\n stack_set_name=aws_cloudformation_stack_set[\"example\"][\"name\"])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.CloudFormation.StackSetInstance(\"example\", new Aws.CloudFormation.StackSetInstanceArgs\n {\n AccountId = \"123456789012\",\n Region = \"us-east-1\",\n StackSetName = aws_cloudformation_stack_set.Example.Name,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudformation\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudformation.NewStackSetInstance(ctx, \"example\", \u0026cloudformation.StackSetInstanceArgs{\n\t\t\tAccountId: pulumi.String(\"123456789012\"),\n\t\t\tRegion: pulumi.String(\"us-east-1\"),\n\t\t\tStackSetName: pulumi.Any(aws_cloudformation_stack_set.Example.Name),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Example IAM Setup in Target Account\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst aWSCloudFormationStackSetExecutionRoleAssumeRolePolicy = aws.iam.getPolicyDocument({\n statements: [{\n actions: [\"sts:AssumeRole\"],\n effect: \"Allow\",\n principals: [{\n identifiers: [aws_iam_role.AWSCloudFormationStackSetAdministrationRole.arn],\n type: \"AWS\",\n }],\n }],\n});\nconst aWSCloudFormationStackSetExecutionRole = new aws.iam.Role(\"aWSCloudFormationStackSetExecutionRole\", {assumeRolePolicy: aWSCloudFormationStackSetExecutionRoleAssumeRolePolicy.then(aWSCloudFormationStackSetExecutionRoleAssumeRolePolicy =\u003e aWSCloudFormationStackSetExecutionRoleAssumeRolePolicy.json)});\nconst aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyPolicyDocument = aws.iam.getPolicyDocument({\n statements: [{\n actions: [\n \"cloudformation:*\",\n \"s3:*\",\n \"sns:*\",\n ],\n effect: \"Allow\",\n resources: [\"*\"],\n }],\n});\nconst aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyRolePolicy = new aws.iam.RolePolicy(\"aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyRolePolicy\", {\n policy: aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyPolicyDocument.then(aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyPolicyDocument =\u003e aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyPolicyDocument.json),\n role: aWSCloudFormationStackSetExecutionRole.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\na_ws_cloud_formation_stack_set_execution_role_assume_role_policy = aws.iam.get_policy_document(statements=[aws.iam.GetPolicyDocumentStatementArgs(\n actions=[\"sts:AssumeRole\"],\n effect=\"Allow\",\n principals=[aws.iam.GetPolicyDocumentStatementPrincipalArgs(\n identifiers=[aws_iam_role[\"AWSCloudFormationStackSetAdministrationRole\"][\"arn\"]],\n type=\"AWS\",\n )],\n)])\na_ws_cloud_formation_stack_set_execution_role = aws.iam.Role(\"aWSCloudFormationStackSetExecutionRole\", assume_role_policy=a_ws_cloud_formation_stack_set_execution_role_assume_role_policy.json)\na_ws_cloud_formation_stack_set_execution_role_minimum_execution_policy_policy_document = aws.iam.get_policy_document(statements=[aws.iam.GetPolicyDocumentStatementArgs(\n actions=[\n \"cloudformation:*\",\n \"s3:*\",\n \"sns:*\",\n ],\n effect=\"Allow\",\n resources=[\"*\"],\n)])\na_ws_cloud_formation_stack_set_execution_role_minimum_execution_policy_role_policy = aws.iam.RolePolicy(\"aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyRolePolicy\",\n policy=a_ws_cloud_formation_stack_set_execution_role_minimum_execution_policy_policy_document.json,\n role=a_ws_cloud_formation_stack_set_execution_role.name)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var aWSCloudFormationStackSetExecutionRoleAssumeRolePolicy = Output.Create(Aws.Iam.GetPolicyDocument.InvokeAsync(new Aws.Iam.GetPolicyDocumentArgs\n {\n Statements = \n {\n new Aws.Iam.Inputs.GetPolicyDocumentStatementArgs\n {\n Actions = \n {\n \"sts:AssumeRole\",\n },\n Effect = \"Allow\",\n Principals = \n {\n new Aws.Iam.Inputs.GetPolicyDocumentStatementPrincipalArgs\n {\n Identifiers = \n {\n aws_iam_role.AWSCloudFormationStackSetAdministrationRole.Arn,\n },\n Type = \"AWS\",\n },\n },\n },\n },\n }));\n var aWSCloudFormationStackSetExecutionRole = new Aws.Iam.Role(\"aWSCloudFormationStackSetExecutionRole\", new Aws.Iam.RoleArgs\n {\n AssumeRolePolicy = aWSCloudFormationStackSetExecutionRoleAssumeRolePolicy.Apply(aWSCloudFormationStackSetExecutionRoleAssumeRolePolicy =\u003e aWSCloudFormationStackSetExecutionRoleAssumeRolePolicy.Json),\n });\n var aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyPolicyDocument = Output.Create(Aws.Iam.GetPolicyDocument.InvokeAsync(new Aws.Iam.GetPolicyDocumentArgs\n {\n Statements = \n {\n new Aws.Iam.Inputs.GetPolicyDocumentStatementArgs\n {\n Actions = \n {\n \"cloudformation:*\",\n \"s3:*\",\n \"sns:*\",\n },\n Effect = \"Allow\",\n Resources = \n {\n \"*\",\n },\n },\n },\n }));\n var aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyRolePolicy = new Aws.Iam.RolePolicy(\"aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyRolePolicy\", new Aws.Iam.RolePolicyArgs\n {\n Policy = aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyPolicyDocument.Apply(aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyPolicyDocument =\u003e aWSCloudFormationStackSetExecutionRoleMinimumExecutionPolicyPolicyDocument.Json),\n Role = aWSCloudFormationStackSetExecutionRole.Name,\n });\n }\n\n}\n```\n{{% /example %}}\n{{% example %}}\n### Example Deployment across Organizations account\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.cloudformation.StackSetInstance(\"example\", {\n deploymentTargets: {\n organizationalUnitIds: [aws_organizations_organization.example.roots[0].id],\n },\n region: \"us-east-1\",\n stackSetName: aws_cloudformation_stack_set.example.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.cloudformation.StackSetInstance(\"example\",\n deployment_targets=aws.cloudformation.StackSetInstanceDeploymentTargetsArgs(\n organizational_unit_ids=[aws_organizations_organization[\"example\"][\"roots\"][0][\"id\"]],\n ),\n region=\"us-east-1\",\n stack_set_name=aws_cloudformation_stack_set[\"example\"][\"name\"])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.CloudFormation.StackSetInstance(\"example\", new Aws.CloudFormation.StackSetInstanceArgs\n {\n DeploymentTargets = new Aws.CloudFormation.Inputs.StackSetInstanceDeploymentTargetsArgs\n {\n OrganizationalUnitIds = \n {\n aws_organizations_organization.Example.Roots[0].Id,\n },\n },\n Region = \"us-east-1\",\n StackSetName = aws_cloudformation_stack_set.Example.Name,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudformation\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudformation.NewStackSetInstance(ctx, \"example\", \u0026cloudformation.StackSetInstanceArgs{\n\t\t\tDeploymentTargets: \u0026cloudformation.StackSetInstanceDeploymentTargetsArgs{\n\t\t\t\tOrganizationalUnitIds: pulumi.StringArray{\n\t\t\t\t\tpulumi.Any(aws_organizations_organization.Example.Roots[0].Id),\n\t\t\t\t},\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-east-1\"),\n\t\t\tStackSetName: pulumi.Any(aws_cloudformation_stack_set.Example.Name),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCloudFormation StackSet Instances can be imported using the StackSet name, target AWS account ID, and target AWS region separated by commas (`,`) e.g.\n\n```sh\n $ pulumi import aws:cloudformation/stackSetInstance:StackSetInstance example example,123456789012,us-east-1\n```\n\n ", "inputProperties": { "accountId": { "description": "Target AWS Account ID to create a Stack based on the StackSet. Defaults to current account.\n", "type": "string" }, + "deploymentTargets": { + "$ref": "#/types/aws:cloudformation/StackSetInstanceDeploymentTargets:StackSetInstanceDeploymentTargets", + "description": "The AWS Organizations accounts to which StackSets deploys. StackSets doesn't deploy stack instances to the organization management account, even if the organization management account is in your organization or in an OU in your organization. Drift detection is not possible for this argument. See deployment_targets below.\n" + }, "parameterOverrides": { "additionalProperties": { "type": "string" @@ -41202,6 +42704,14 @@ "description": "Target AWS Account ID to create a Stack based on the StackSet. Defaults to current account.\n", "type": "string" }, + "deploymentTargets": { + "$ref": "#/types/aws:cloudformation/StackSetInstanceDeploymentTargets:StackSetInstanceDeploymentTargets", + "description": "The AWS Organizations accounts to which StackSets deploys. StackSets doesn't deploy stack instances to the organization management account, even if the organization management account is in your organization or in an OU in your organization. Drift detection is not possible for this argument. See deployment_targets below.\n" + }, + "organizationalUnitId": { + "description": "The organization root ID or organizational unit (OU) IDs specified for `deployment_targets`.\n", + "type": "string" + }, "parameterOverrides": { "additionalProperties": { "type": "string" @@ -41228,6 +42738,7 @@ }, "required": [ "accountId", + "organizationalUnitId", "region", "stackId", "stackSetName" @@ -41242,6 +42753,14 @@ "description": "Target AWS Account ID to create a Stack based on the StackSet. Defaults to current account.\n", "type": "string" }, + "deploymentTargets": { + "$ref": "#/types/aws:cloudformation/StackSetInstanceDeploymentTargets:StackSetInstanceDeploymentTargets", + "description": "The AWS Organizations accounts to which StackSets deploys. StackSets doesn't deploy stack instances to the organization management account, even if the organization management account is in your organization or in an OU in your organization. Drift detection is not possible for this argument. See deployment_targets below.\n" + }, + "organizationalUnitId": { + "description": "The organization root ID or organizational unit (OU) IDs specified for `deployment_targets`.\n", + "type": "string" + }, "parameterOverrides": { "additionalProperties": { "type": "string" @@ -41797,7 +43316,7 @@ } }, "aws:cloudfront/function:Function": { - "description": "Provides a CloudFront Function resource. With CloudFront Functions in Amazon CloudFront, you can write lightweight functions in JavaScript for high-scale, latency-sensitive CDN customizations.\n\nSee [CloudFront Functions](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-functions.html)\n\n\u003e **NOTE:** You cannot delete a function if it’s associated with a cache behavior. First, update your distributions to remove the function association from all cache behaviors, then delete the function.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic Example\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst test = new aws.cloudfront.Function(\"test\", {\n runtime: \"cloudfront-js-1.0\",\n comment: \"my function\",\n publish: true,\n code: fs.readFileSync(`${path.module}/function.js`),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.cloudfront.Function(\"test\",\n runtime=\"cloudfront-js-1.0\",\n comment=\"my function\",\n publish=True,\n code=(lambda path: open(path).read())(f\"{path['module']}/function.js\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = new Aws.CloudFront.Function(\"test\", new Aws.CloudFront.FunctionArgs\n {\n Runtime = \"cloudfront-js-1.0\",\n Comment = \"my function\",\n Publish = true,\n Code = File.ReadAllText($\"{path.Module}/function.js\"),\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCloudFront Functions can be imported using the `name`, e.g.\n\n```sh\n $ pulumi import aws:cloudfront/function:Function test my_test_function\n```\n\n ", + "description": "Provides a CloudFront Function resource. With CloudFront Functions in Amazon CloudFront, you can write lightweight functions in JavaScript for high-scale, latency-sensitive CDN customizations.\n\nSee [CloudFront Functions](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-functions.html)\n\n\u003e **NOTE:** You cannot delete a function if it’s associated with a cache behavior. First, update your distributions to remove the function association from all cache behaviors, then delete the function.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic Example\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst test = new aws.cloudfront.Function(\"test\", {\n runtime: \"cloudfront-js-1.0\",\n comment: \"my function\",\n publish: true,\n code: fs.readFileSync(`${path.module}/function.js`),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.cloudfront.Function(\"test\",\n runtime=\"cloudfront-js-1.0\",\n comment=\"my function\",\n publish=True,\n code=(lambda path: open(path).read())(f\"{path['module']}/function.js\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = new Aws.CloudFront.Function(\"test\", new Aws.CloudFront.FunctionArgs\n {\n Runtime = \"cloudfront-js-1.0\",\n Comment = \"my function\",\n Publish = true,\n Code = File.ReadAllText($\"{path.Module}/function.js\"),\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudfront\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudfront.NewFunction(ctx, \"test\", \u0026cloudfront.FunctionArgs{\n\t\t\tRuntime: pulumi.String(\"cloudfront-js-1.0\"),\n\t\t\tComment: pulumi.String(\"my function\"),\n\t\t\tPublish: pulumi.Bool(true),\n\t\t\tCode: readFileOrPanic(fmt.Sprintf(\"%v%v\", path.Module, \"/function.js\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCloudFront Functions can be imported using the `name`, e.g.\n\n```sh\n $ pulumi import aws:cloudfront/function:Function test my_test_function\n```\n\n ", "inputProperties": { "code": { "description": "Source code of the function\n", @@ -41906,7 +43425,7 @@ } }, "aws:cloudfront/keyGroup:KeyGroup": { - "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\nThe following example below creates a CloudFront key group.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst examplePublicKey = new aws.cloudfront.PublicKey(\"examplePublicKey\", {\n comment: \"example public key\",\n encodedKey: fs.readFileSync(\"public_key.pem\"),\n});\nconst exampleKeyGroup = new aws.cloudfront.KeyGroup(\"exampleKeyGroup\", {\n comment: \"example key group\",\n items: [examplePublicKey.id],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_public_key = aws.cloudfront.PublicKey(\"examplePublicKey\",\n comment=\"example public key\",\n encoded_key=(lambda path: open(path).read())(\"public_key.pem\"))\nexample_key_group = aws.cloudfront.KeyGroup(\"exampleKeyGroup\",\n comment=\"example key group\",\n items=[example_public_key.id])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var examplePublicKey = new Aws.CloudFront.PublicKey(\"examplePublicKey\", new Aws.CloudFront.PublicKeyArgs\n {\n Comment = \"example public key\",\n EncodedKey = File.ReadAllText(\"public_key.pem\"),\n });\n var exampleKeyGroup = new Aws.CloudFront.KeyGroup(\"exampleKeyGroup\", new Aws.CloudFront.KeyGroupArgs\n {\n Comment = \"example key group\",\n Items = \n {\n examplePublicKey.Id,\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCloudFront Key Group can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:cloudfront/keyGroup:KeyGroup example 4b4f2r1c-315d-5c2e-f093-216t50jed10f\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\nThe following example below creates a CloudFront key group.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst examplePublicKey = new aws.cloudfront.PublicKey(\"examplePublicKey\", {\n comment: \"example public key\",\n encodedKey: fs.readFileSync(\"public_key.pem\"),\n});\nconst exampleKeyGroup = new aws.cloudfront.KeyGroup(\"exampleKeyGroup\", {\n comment: \"example key group\",\n items: [examplePublicKey.id],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_public_key = aws.cloudfront.PublicKey(\"examplePublicKey\",\n comment=\"example public key\",\n encoded_key=(lambda path: open(path).read())(\"public_key.pem\"))\nexample_key_group = aws.cloudfront.KeyGroup(\"exampleKeyGroup\",\n comment=\"example key group\",\n items=[example_public_key.id])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var examplePublicKey = new Aws.CloudFront.PublicKey(\"examplePublicKey\", new Aws.CloudFront.PublicKeyArgs\n {\n Comment = \"example public key\",\n EncodedKey = File.ReadAllText(\"public_key.pem\"),\n });\n var exampleKeyGroup = new Aws.CloudFront.KeyGroup(\"exampleKeyGroup\", new Aws.CloudFront.KeyGroupArgs\n {\n Comment = \"example key group\",\n Items = \n {\n examplePublicKey.Id,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudfront\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texamplePublicKey, err := cloudfront.NewPublicKey(ctx, \"examplePublicKey\", \u0026cloudfront.PublicKeyArgs{\n\t\t\tComment: pulumi.String(\"example public key\"),\n\t\t\tEncodedKey: readFileOrPanic(\"public_key.pem\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudfront.NewKeyGroup(ctx, \"exampleKeyGroup\", \u0026cloudfront.KeyGroupArgs{\n\t\t\tComment: pulumi.String(\"example key group\"),\n\t\t\tItems: pulumi.StringArray{\n\t\t\t\texamplePublicKey.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCloudFront Key Group can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:cloudfront/keyGroup:KeyGroup example 4b4f2r1c-315d-5c2e-f093-216t50jed10f\n```\n\n ", "inputProperties": { "comment": { "description": "A comment to describe the key group..\n", @@ -42209,7 +43728,7 @@ } }, "aws:cloudfront/publicKey:PublicKey": { - "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\nThe following example below creates a CloudFront public key.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst example = new aws.cloudfront.PublicKey(\"example\", {\n comment: \"test public key\",\n encodedKey: fs.readFileSync(\"public_key.pem\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.cloudfront.PublicKey(\"example\",\n comment=\"test public key\",\n encoded_key=(lambda path: open(path).read())(\"public_key.pem\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.CloudFront.PublicKey(\"example\", new Aws.CloudFront.PublicKeyArgs\n {\n Comment = \"test public key\",\n EncodedKey = File.ReadAllText(\"public_key.pem\"),\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCloudFront Public Key can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:cloudfront/publicKey:PublicKey example K3D5EWEUDCCXON\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\nThe following example below creates a CloudFront public key.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst example = new aws.cloudfront.PublicKey(\"example\", {\n comment: \"test public key\",\n encodedKey: fs.readFileSync(\"public_key.pem\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.cloudfront.PublicKey(\"example\",\n comment=\"test public key\",\n encoded_key=(lambda path: open(path).read())(\"public_key.pem\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.CloudFront.PublicKey(\"example\", new Aws.CloudFront.PublicKeyArgs\n {\n Comment = \"test public key\",\n EncodedKey = File.ReadAllText(\"public_key.pem\"),\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudfront\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudfront.NewPublicKey(ctx, \"example\", \u0026cloudfront.PublicKeyArgs{\n\t\t\tComment: pulumi.String(\"test public key\"),\n\t\t\tEncodedKey: readFileOrPanic(\"public_key.pem\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCloudFront Public Key can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:cloudfront/publicKey:PublicKey example K3D5EWEUDCCXON\n```\n\n ", "inputProperties": { "comment": { "description": "An optional comment about the public key.\n", @@ -45269,7 +46788,7 @@ }, "properties": { "arn": { - "description": "The ARN of Domain.\n", + "description": "The ARN of the Domain.\n", "type": "string" }, "assetSizeBytes": { @@ -45333,7 +46852,7 @@ "description": "Input properties used for looking up and filtering Domain resources.\n", "properties": { "arn": { - "description": "The ARN of Domain.\n", + "description": "The ARN of the Domain.\n", "type": "string" }, "assetSizeBytes": { @@ -47692,7 +49211,7 @@ } }, "aws:cognito/identityPool:IdentityPool": { - "description": "Provides an AWS Cognito Identity Pool.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst _default = new aws.iam.SamlProvider(\"default\", {samlMetadataDocument: fs.readFileSync(\"saml-metadata.xml\")});\nconst main = new aws.cognito.IdentityPool(\"main\", {\n identityPoolName: \"identity pool\",\n allowUnauthenticatedIdentities: false,\n allowClassicFlow: false,\n cognitoIdentityProviders: [\n {\n clientId: \"6lhlkkfbfb4q5kpp90urffae\",\n providerName: \"cognito-idp.us-east-1.amazonaws.com/us-east-1_Tv0493apJ\",\n serverSideTokenCheck: false,\n },\n {\n clientId: \"7kodkvfqfb4qfkp39eurffae\",\n providerName: \"cognito-idp.us-east-1.amazonaws.com/eu-west-1_Zr231apJu\",\n serverSideTokenCheck: false,\n },\n ],\n supportedLoginProviders: {\n \"graph.facebook.com\": \"7346241598935552\",\n \"accounts.google.com\": \"123456789012.apps.googleusercontent.com\",\n },\n samlProviderArns: [_default.arn],\n openidConnectProviderArns: [\"arn:aws:iam::123456789012:oidc-provider/id.example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ndefault = aws.iam.SamlProvider(\"default\", saml_metadata_document=(lambda path: open(path).read())(\"saml-metadata.xml\"))\nmain = aws.cognito.IdentityPool(\"main\",\n identity_pool_name=\"identity pool\",\n allow_unauthenticated_identities=False,\n allow_classic_flow=False,\n cognito_identity_providers=[\n aws.cognito.IdentityPoolCognitoIdentityProviderArgs(\n client_id=\"6lhlkkfbfb4q5kpp90urffae\",\n provider_name=\"cognito-idp.us-east-1.amazonaws.com/us-east-1_Tv0493apJ\",\n server_side_token_check=False,\n ),\n aws.cognito.IdentityPoolCognitoIdentityProviderArgs(\n client_id=\"7kodkvfqfb4qfkp39eurffae\",\n provider_name=\"cognito-idp.us-east-1.amazonaws.com/eu-west-1_Zr231apJu\",\n server_side_token_check=False,\n ),\n ],\n supported_login_providers={\n \"graph.facebook.com\": \"7346241598935552\",\n \"accounts.google.com\": \"123456789012.apps.googleusercontent.com\",\n },\n saml_provider_arns=[default.arn],\n openid_connect_provider_arns=[\"arn:aws:iam::123456789012:oidc-provider/id.example.com\"])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var @default = new Aws.Iam.SamlProvider(\"default\", new Aws.Iam.SamlProviderArgs\n {\n SamlMetadataDocument = File.ReadAllText(\"saml-metadata.xml\"),\n });\n var main = new Aws.Cognito.IdentityPool(\"main\", new Aws.Cognito.IdentityPoolArgs\n {\n IdentityPoolName = \"identity pool\",\n AllowUnauthenticatedIdentities = false,\n AllowClassicFlow = false,\n CognitoIdentityProviders = \n {\n new Aws.Cognito.Inputs.IdentityPoolCognitoIdentityProviderArgs\n {\n ClientId = \"6lhlkkfbfb4q5kpp90urffae\",\n ProviderName = \"cognito-idp.us-east-1.amazonaws.com/us-east-1_Tv0493apJ\",\n ServerSideTokenCheck = false,\n },\n new Aws.Cognito.Inputs.IdentityPoolCognitoIdentityProviderArgs\n {\n ClientId = \"7kodkvfqfb4qfkp39eurffae\",\n ProviderName = \"cognito-idp.us-east-1.amazonaws.com/eu-west-1_Zr231apJu\",\n ServerSideTokenCheck = false,\n },\n },\n SupportedLoginProviders = \n {\n { \"graph.facebook.com\", \"7346241598935552\" },\n { \"accounts.google.com\", \"123456789012.apps.googleusercontent.com\" },\n },\n SamlProviderArns = \n {\n @default.Arn,\n },\n OpenidConnectProviderArns = \n {\n \"arn:aws:iam::123456789012:oidc-provider/id.example.com\",\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCognito Identity Pool can be imported using the name, e.g.\n\n```sh\n $ pulumi import aws:cognito/identityPool:IdentityPool mypool \u003cidentity-pool-id\u003e\n```\n\n ", + "description": "Provides an AWS Cognito Identity Pool.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst _default = new aws.iam.SamlProvider(\"default\", {samlMetadataDocument: fs.readFileSync(\"saml-metadata.xml\")});\nconst main = new aws.cognito.IdentityPool(\"main\", {\n identityPoolName: \"identity pool\",\n allowUnauthenticatedIdentities: false,\n allowClassicFlow: false,\n cognitoIdentityProviders: [\n {\n clientId: \"6lhlkkfbfb4q5kpp90urffae\",\n providerName: \"cognito-idp.us-east-1.amazonaws.com/us-east-1_Tv0493apJ\",\n serverSideTokenCheck: false,\n },\n {\n clientId: \"7kodkvfqfb4qfkp39eurffae\",\n providerName: \"cognito-idp.us-east-1.amazonaws.com/eu-west-1_Zr231apJu\",\n serverSideTokenCheck: false,\n },\n ],\n supportedLoginProviders: {\n \"graph.facebook.com\": \"7346241598935552\",\n \"accounts.google.com\": \"123456789012.apps.googleusercontent.com\",\n },\n samlProviderArns: [_default.arn],\n openidConnectProviderArns: [\"arn:aws:iam::123456789012:oidc-provider/id.example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ndefault = aws.iam.SamlProvider(\"default\", saml_metadata_document=(lambda path: open(path).read())(\"saml-metadata.xml\"))\nmain = aws.cognito.IdentityPool(\"main\",\n identity_pool_name=\"identity pool\",\n allow_unauthenticated_identities=False,\n allow_classic_flow=False,\n cognito_identity_providers=[\n aws.cognito.IdentityPoolCognitoIdentityProviderArgs(\n client_id=\"6lhlkkfbfb4q5kpp90urffae\",\n provider_name=\"cognito-idp.us-east-1.amazonaws.com/us-east-1_Tv0493apJ\",\n server_side_token_check=False,\n ),\n aws.cognito.IdentityPoolCognitoIdentityProviderArgs(\n client_id=\"7kodkvfqfb4qfkp39eurffae\",\n provider_name=\"cognito-idp.us-east-1.amazonaws.com/eu-west-1_Zr231apJu\",\n server_side_token_check=False,\n ),\n ],\n supported_login_providers={\n \"graph.facebook.com\": \"7346241598935552\",\n \"accounts.google.com\": \"123456789012.apps.googleusercontent.com\",\n },\n saml_provider_arns=[default.arn],\n openid_connect_provider_arns=[\"arn:aws:iam::123456789012:oidc-provider/id.example.com\"])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var @default = new Aws.Iam.SamlProvider(\"default\", new Aws.Iam.SamlProviderArgs\n {\n SamlMetadataDocument = File.ReadAllText(\"saml-metadata.xml\"),\n });\n var main = new Aws.Cognito.IdentityPool(\"main\", new Aws.Cognito.IdentityPoolArgs\n {\n IdentityPoolName = \"identity pool\",\n AllowUnauthenticatedIdentities = false,\n AllowClassicFlow = false,\n CognitoIdentityProviders = \n {\n new Aws.Cognito.Inputs.IdentityPoolCognitoIdentityProviderArgs\n {\n ClientId = \"6lhlkkfbfb4q5kpp90urffae\",\n ProviderName = \"cognito-idp.us-east-1.amazonaws.com/us-east-1_Tv0493apJ\",\n ServerSideTokenCheck = false,\n },\n new Aws.Cognito.Inputs.IdentityPoolCognitoIdentityProviderArgs\n {\n ClientId = \"7kodkvfqfb4qfkp39eurffae\",\n ProviderName = \"cognito-idp.us-east-1.amazonaws.com/eu-west-1_Zr231apJu\",\n ServerSideTokenCheck = false,\n },\n },\n SupportedLoginProviders = \n {\n { \"graph.facebook.com\", \"7346241598935552\" },\n { \"accounts.google.com\", \"123456789012.apps.googleusercontent.com\" },\n },\n SamlProviderArns = \n {\n @default.Arn,\n },\n OpenidConnectProviderArns = \n {\n \"arn:aws:iam::123456789012:oidc-provider/id.example.com\",\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cognito\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.NewSamlProvider(ctx, \"_default\", \u0026iam.SamlProviderArgs{\n\t\t\tSamlMetadataDocument: readFileOrPanic(\"saml-metadata.xml\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cognito.NewIdentityPool(ctx, \"main\", \u0026cognito.IdentityPoolArgs{\n\t\t\tIdentityPoolName: pulumi.String(\"identity pool\"),\n\t\t\tAllowUnauthenticatedIdentities: pulumi.Bool(false),\n\t\t\tAllowClassicFlow: pulumi.Bool(false),\n\t\t\tCognitoIdentityProviders: cognito.IdentityPoolCognitoIdentityProviderArray{\n\t\t\t\t\u0026cognito.IdentityPoolCognitoIdentityProviderArgs{\n\t\t\t\t\tClientId: pulumi.String(\"6lhlkkfbfb4q5kpp90urffae\"),\n\t\t\t\t\tProviderName: pulumi.String(\"cognito-idp.us-east-1.amazonaws.com/us-east-1_Tv0493apJ\"),\n\t\t\t\t\tServerSideTokenCheck: pulumi.Bool(false),\n\t\t\t\t},\n\t\t\t\t\u0026cognito.IdentityPoolCognitoIdentityProviderArgs{\n\t\t\t\t\tClientId: pulumi.String(\"7kodkvfqfb4qfkp39eurffae\"),\n\t\t\t\t\tProviderName: pulumi.String(\"cognito-idp.us-east-1.amazonaws.com/eu-west-1_Zr231apJu\"),\n\t\t\t\t\tServerSideTokenCheck: pulumi.Bool(false),\n\t\t\t\t},\n\t\t\t},\n\t\t\tSupportedLoginProviders: pulumi.StringMap{\n\t\t\t\t\"graph.facebook.com\": pulumi.String(\"7346241598935552\"),\n\t\t\t\t\"accounts.google.com\": pulumi.String(\"123456789012.apps.googleusercontent.com\"),\n\t\t\t},\n\t\t\tSamlProviderArns: pulumi.StringArray{\n\t\t\t\t_default.Arn,\n\t\t\t},\n\t\t\tOpenidConnectProviderArns: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"arn:aws:iam::123456789012:oidc-provider/id.example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCognito Identity Pool can be imported using the name, e.g.\n\n```sh\n $ pulumi import aws:cognito/identityPool:IdentityPool mypool \u003cidentity-pool-id\u003e\n```\n\n ", "inputProperties": { "allowClassicFlow": { "description": "Enables or disables the classic / basic authentication flow. Default is `false`.\n", @@ -48515,7 +50034,6 @@ "emailVerificationSubject", "endpoint", "estimatedNumberOfUsers", - "lambdaConfig", "lastModifiedDate", "name", "passwordPolicy", @@ -49108,7 +50626,7 @@ } }, "aws:cognito/userPoolUICustomization:UserPoolUICustomization": { - "description": "Provides a Cognito User Pool UI Customization resource.\n\n\u003e **Note:** To use this resource, the user pool must have a domain associated with it. For more information, see the Amazon Cognito Developer Guide on [Customizing the Built-in Sign-In and Sign-up Webpages](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-app-ui-customization.html).\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nCognito User Pool UI Customizations can be imported using the `user_pool_id` and `client_id` separated by `,`, e.g.\n\n```sh\n $ pulumi import aws:cognito/userPoolUICustomization:UserPoolUICustomization example us-west-2_ZCTarbt5C,12bu4fuk3mlgqa2rtrujgp6egq\n```\n\n ", + "description": "Provides a Cognito User Pool UI Customization resource.\n\n\u003e **Note:** To use this resource, the user pool must have a domain associated with it. For more information, see the Amazon Cognito Developer Guide on [Customizing the Built-in Sign-In and Sign-up Webpages](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-app-ui-customization.html).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### UI customization settings for a single client\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst exampleUserPool = new aws.cognito.UserPool(\"exampleUserPool\", {});\nconst exampleUserPoolDomain = new aws.cognito.UserPoolDomain(\"exampleUserPoolDomain\", {\n domain: \"example\",\n userPoolId: exampleUserPool.id,\n});\nconst exampleUserPoolClient = new aws.cognito.UserPoolClient(\"exampleUserPoolClient\", {userPoolId: exampleUserPool.id});\nconst exampleUserPoolUICustomization = new aws.cognito.UserPoolUICustomization(\"exampleUserPoolUICustomization\", {\n clientId: exampleUserPoolClient.id,\n css: \".label-customizable {font-weight: 400;}\",\n imageFile: Buffer.from(fs.readFileSync(\"logo.png\"), 'binary').toString('base64'),\n userPoolId: exampleUserPoolDomain.userPoolId,\n});\n```\n```python\nimport pulumi\nimport base64\nimport pulumi_aws as aws\n\nexample_user_pool = aws.cognito.UserPool(\"exampleUserPool\")\nexample_user_pool_domain = aws.cognito.UserPoolDomain(\"exampleUserPoolDomain\",\n domain=\"example\",\n user_pool_id=example_user_pool.id)\nexample_user_pool_client = aws.cognito.UserPoolClient(\"exampleUserPoolClient\", user_pool_id=example_user_pool.id)\nexample_user_pool_ui_customization = aws.cognito.UserPoolUICustomization(\"exampleUserPoolUICustomization\",\n client_id=example_user_pool_client.id,\n css=\".label-customizable {font-weight: 400;}\",\n image_file=(lambda path: base64.b64encode(open(path).read().encode()).decode())(\"logo.png\"),\n user_pool_id=example_user_pool_domain.user_pool_id)\n```\n```csharp\nusing System;\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n\tprivate static string ReadFileBase64(string path) {\n\t\treturn Convert.ToBase64String(System.Text.UTF8.GetBytes(File.ReadAllText(path)))\n\t}\n\n public MyStack()\n {\n var exampleUserPool = new Aws.Cognito.UserPool(\"exampleUserPool\", new Aws.Cognito.UserPoolArgs\n {\n });\n var exampleUserPoolDomain = new Aws.Cognito.UserPoolDomain(\"exampleUserPoolDomain\", new Aws.Cognito.UserPoolDomainArgs\n {\n Domain = \"example\",\n UserPoolId = exampleUserPool.Id,\n });\n var exampleUserPoolClient = new Aws.Cognito.UserPoolClient(\"exampleUserPoolClient\", new Aws.Cognito.UserPoolClientArgs\n {\n UserPoolId = exampleUserPool.Id,\n });\n var exampleUserPoolUICustomization = new Aws.Cognito.UserPoolUICustomization(\"exampleUserPoolUICustomization\", new Aws.Cognito.UserPoolUICustomizationArgs\n {\n ClientId = exampleUserPoolClient.Id,\n Css = \".label-customizable {font-weight: 400;}\",\n ImageFile = ReadFileBase64(\"logo.png\"),\n UserPoolId = exampleUserPoolDomain.UserPoolId,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"encoding/base64\"\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cognito\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc filebase64OrPanic(path string) pulumi.StringPtrInput {\n\tif fileData, err := ioutil.ReadFile(path); err == nil {\n\t\treturn pulumi.String(base64.StdEncoding.EncodeToString(fileData[:]))\n\t} else {\n\t\tpanic(err.Error())\n\t}\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleUserPool, err := cognito.NewUserPool(ctx, \"exampleUserPool\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleUserPoolDomain, err := cognito.NewUserPoolDomain(ctx, \"exampleUserPoolDomain\", \u0026cognito.UserPoolDomainArgs{\n\t\t\tDomain: pulumi.String(\"example\"),\n\t\t\tUserPoolId: exampleUserPool.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleUserPoolClient, err := cognito.NewUserPoolClient(ctx, \"exampleUserPoolClient\", \u0026cognito.UserPoolClientArgs{\n\t\t\tUserPoolId: exampleUserPool.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cognito.NewUserPoolUICustomization(ctx, \"exampleUserPoolUICustomization\", \u0026cognito.UserPoolUICustomizationArgs{\n\t\t\tClientId: exampleUserPoolClient.ID(),\n\t\t\tCss: pulumi.String(\".label-customizable {font-weight: 400;}\"),\n\t\t\tImageFile: filebase64OrPanic(\"logo.png\"),\n\t\t\tUserPoolId: exampleUserPoolDomain.UserPoolId,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### UI customization settings for all clients\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst exampleUserPool = new aws.cognito.UserPool(\"exampleUserPool\", {});\nconst exampleUserPoolDomain = new aws.cognito.UserPoolDomain(\"exampleUserPoolDomain\", {\n domain: \"example\",\n userPoolId: exampleUserPool.id,\n});\nconst exampleUserPoolUICustomization = new aws.cognito.UserPoolUICustomization(\"exampleUserPoolUICustomization\", {\n css: \".label-customizable {font-weight: 400;}\",\n imageFile: Buffer.from(fs.readFileSync(\"logo.png\"), 'binary').toString('base64'),\n userPoolId: exampleUserPoolDomain.userPoolId,\n});\n```\n```python\nimport pulumi\nimport base64\nimport pulumi_aws as aws\n\nexample_user_pool = aws.cognito.UserPool(\"exampleUserPool\")\nexample_user_pool_domain = aws.cognito.UserPoolDomain(\"exampleUserPoolDomain\",\n domain=\"example\",\n user_pool_id=example_user_pool.id)\nexample_user_pool_ui_customization = aws.cognito.UserPoolUICustomization(\"exampleUserPoolUICustomization\",\n css=\".label-customizable {font-weight: 400;}\",\n image_file=(lambda path: base64.b64encode(open(path).read().encode()).decode())(\"logo.png\"),\n user_pool_id=example_user_pool_domain.user_pool_id)\n```\n```csharp\nusing System;\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n\tprivate static string ReadFileBase64(string path) {\n\t\treturn Convert.ToBase64String(System.Text.UTF8.GetBytes(File.ReadAllText(path)))\n\t}\n\n public MyStack()\n {\n var exampleUserPool = new Aws.Cognito.UserPool(\"exampleUserPool\", new Aws.Cognito.UserPoolArgs\n {\n });\n var exampleUserPoolDomain = new Aws.Cognito.UserPoolDomain(\"exampleUserPoolDomain\", new Aws.Cognito.UserPoolDomainArgs\n {\n Domain = \"example\",\n UserPoolId = exampleUserPool.Id,\n });\n var exampleUserPoolUICustomization = new Aws.Cognito.UserPoolUICustomization(\"exampleUserPoolUICustomization\", new Aws.Cognito.UserPoolUICustomizationArgs\n {\n Css = \".label-customizable {font-weight: 400;}\",\n ImageFile = ReadFileBase64(\"logo.png\"),\n UserPoolId = exampleUserPoolDomain.UserPoolId,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"encoding/base64\"\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cognito\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc filebase64OrPanic(path string) pulumi.StringPtrInput {\n\tif fileData, err := ioutil.ReadFile(path); err == nil {\n\t\treturn pulumi.String(base64.StdEncoding.EncodeToString(fileData[:]))\n\t} else {\n\t\tpanic(err.Error())\n\t}\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleUserPool, err := cognito.NewUserPool(ctx, \"exampleUserPool\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleUserPoolDomain, err := cognito.NewUserPoolDomain(ctx, \"exampleUserPoolDomain\", \u0026cognito.UserPoolDomainArgs{\n\t\t\tDomain: pulumi.String(\"example\"),\n\t\t\tUserPoolId: exampleUserPool.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cognito.NewUserPoolUICustomization(ctx, \"exampleUserPoolUICustomization\", \u0026cognito.UserPoolUICustomizationArgs{\n\t\t\tCss: pulumi.String(\".label-customizable {font-weight: 400;}\"),\n\t\t\tImageFile: filebase64OrPanic(\"logo.png\"),\n\t\t\tUserPoolId: exampleUserPoolDomain.UserPoolId,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCognito User Pool UI Customizations can be imported using the `user_pool_id` and `client_id` separated by `,`, e.g.\n\n```sh\n $ pulumi import aws:cognito/userPoolUICustomization:UserPoolUICustomization example us-west-2_ZCTarbt5C,12bu4fuk3mlgqa2rtrujgp6egq\n```\n\n ", "inputProperties": { "clientId": { "description": "The client ID for the client app. Defaults to `ALL`. If `ALL` is specified, the `css` and/or `image_file` settings will be used for every client that has no UI customization set previously.\n", @@ -49210,6 +50728,336 @@ "type": "object" } }, + "aws:connect/contactFlow:ContactFlow": { + "description": "Provides an Amazon Connect Contact Flow resource. For more information see\n[Amazon Connect: Getting Started](https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-get-started.html)\n\nThis resource embeds or references Contact Flows specified in Amazon Connect Contact Flow Language. For more information see\n[Amazon Connect Flow language](https://docs.aws.amazon.com/connect/latest/adminguide/flow-language.html)\n\n!\u003e **WARN:** Contact Flows exported from the Console [Contact Flow import/export](https://docs.aws.amazon.com/connect/latest/adminguide/contact-flow-import-export.html) are not in the Amazon Connect Contact Flow Language and can not be used with this resource. Instead, the recommendation is to use the AWS CLI [`describe-contact-flow`](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/connect/describe-contact-flow.html).\nSee example below which uses `jq` to extract the `Content` attribute and saves it to a local file.\n\n\u003e **NOTE:** Due to The behaviour of Amazon Connect you cannot delete contact flows. The [recommendation](https://docs.aws.amazon.com/connect/latest/adminguide/create-contact-flow.html#before-create-contact-flow) is to prefix the Contact Flow with `zzTrash_` to get obsolete contact flows out of the way.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst test = new aws.connect.ContactFlow(\"test\", {\n content: `\t{\n\t\t\"Version\": \"2019-10-30\",\n\t\t\"StartAction\": \"12345678-1234-1234-1234-123456789012\",\n\t\t\"Actions\": [\n\t\t\t{\n\t\t\t\t\"Identifier\": \"12345678-1234-1234-1234-123456789012\",\n\t\t\t\t\"Type\": \"MessageParticipant\",\n\t\t\t\t\"Transitions\": {\n\t\t\t\t\t\"NextAction\": \"abcdef-abcd-abcd-abcd-abcdefghijkl\",\n\t\t\t\t\t\"Errors\": [],\n\t\t\t\t\t\"Conditions\": []\n\t\t\t\t},\n\t\t\t\t\"Parameters\": {\n\t\t\t\t\t\"Text\": \"Thanks for calling the sample flow!\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"Identifier\": \"abcdef-abcd-abcd-abcd-abcdefghijkl\",\n\t\t\t\t\"Type\": \"DisconnectParticipant\",\n\t\t\t\t\"Transitions\": {},\n\t\t\t\t\"Parameters\": {}\n\t\t\t}\n\t\t]\n\t}\n\t`,\n description: \"Test Contact Flow Description\",\n instanceId: \"aaaaaaaa-bbbb-cccc-dddd-111111111111\",\n tags: {\n Application: \"Terraform\",\n Method: \"Create\",\n Name: \"Test Contact Flow\",\n },\n type: \"CONTACT_FLOW\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.connect.ContactFlow(\"test\",\n content=\"\"\"\t{\n\t\t\"Version\": \"2019-10-30\",\n\t\t\"StartAction\": \"12345678-1234-1234-1234-123456789012\",\n\t\t\"Actions\": [\n\t\t\t{\n\t\t\t\t\"Identifier\": \"12345678-1234-1234-1234-123456789012\",\n\t\t\t\t\"Type\": \"MessageParticipant\",\n\t\t\t\t\"Transitions\": {\n\t\t\t\t\t\"NextAction\": \"abcdef-abcd-abcd-abcd-abcdefghijkl\",\n\t\t\t\t\t\"Errors\": [],\n\t\t\t\t\t\"Conditions\": []\n\t\t\t\t},\n\t\t\t\t\"Parameters\": {\n\t\t\t\t\t\"Text\": \"Thanks for calling the sample flow!\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"Identifier\": \"abcdef-abcd-abcd-abcd-abcdefghijkl\",\n\t\t\t\t\"Type\": \"DisconnectParticipant\",\n\t\t\t\t\"Transitions\": {},\n\t\t\t\t\"Parameters\": {}\n\t\t\t}\n\t\t]\n\t}\n\t\n\"\"\",\n description=\"Test Contact Flow Description\",\n instance_id=\"aaaaaaaa-bbbb-cccc-dddd-111111111111\",\n tags={\n \"Application\": \"Terraform\",\n \"Method\": \"Create\",\n \"Name\": \"Test Contact Flow\",\n },\n type=\"CONTACT_FLOW\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = new Aws.Connect.ContactFlow(\"test\", new Aws.Connect.ContactFlowArgs\n {\n Content = @\"\t{\n\t\t\"\"Version\"\": \"\"2019-10-30\"\",\n\t\t\"\"StartAction\"\": \"\"12345678-1234-1234-1234-123456789012\"\",\n\t\t\"\"Actions\"\": [\n\t\t\t{\n\t\t\t\t\"\"Identifier\"\": \"\"12345678-1234-1234-1234-123456789012\"\",\n\t\t\t\t\"\"Type\"\": \"\"MessageParticipant\"\",\n\t\t\t\t\"\"Transitions\"\": {\n\t\t\t\t\t\"\"NextAction\"\": \"\"abcdef-abcd-abcd-abcd-abcdefghijkl\"\",\n\t\t\t\t\t\"\"Errors\"\": [],\n\t\t\t\t\t\"\"Conditions\"\": []\n\t\t\t\t},\n\t\t\t\t\"\"Parameters\"\": {\n\t\t\t\t\t\"\"Text\"\": \"\"Thanks for calling the sample flow!\"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"\"Identifier\"\": \"\"abcdef-abcd-abcd-abcd-abcdefghijkl\"\",\n\t\t\t\t\"\"Type\"\": \"\"DisconnectParticipant\"\",\n\t\t\t\t\"\"Transitions\"\": {},\n\t\t\t\t\"\"Parameters\"\": {}\n\t\t\t}\n\t\t]\n\t}\n\t\n\",\n Description = \"Test Contact Flow Description\",\n InstanceId = \"aaaaaaaa-bbbb-cccc-dddd-111111111111\",\n Tags = \n {\n { \"Application\", \"Terraform\" },\n { \"Method\", \"Create\" },\n { \"Name\", \"Test Contact Flow\" },\n },\n Type = \"CONTACT_FLOW\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/connect\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := connect.NewContactFlow(ctx, \"test\", \u0026connect.ContactFlowArgs{\n\t\t\tContent: pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"\t{\\n\", \"\t\t\\\"Version\\\": \\\"2019-10-30\\\",\\n\", \"\t\t\\\"StartAction\\\": \\\"12345678-1234-1234-1234-123456789012\\\",\\n\", \"\t\t\\\"Actions\\\": [\\n\", \"\t\t\t{\\n\", \"\t\t\t\t\\\"Identifier\\\": \\\"12345678-1234-1234-1234-123456789012\\\",\\n\", \"\t\t\t\t\\\"Type\\\": \\\"MessageParticipant\\\",\\n\", \"\t\t\t\t\\\"Transitions\\\": {\\n\", \"\t\t\t\t\t\\\"NextAction\\\": \\\"abcdef-abcd-abcd-abcd-abcdefghijkl\\\",\\n\", \"\t\t\t\t\t\\\"Errors\\\": [],\\n\", \"\t\t\t\t\t\\\"Conditions\\\": []\\n\", \"\t\t\t\t},\\n\", \"\t\t\t\t\\\"Parameters\\\": {\\n\", \"\t\t\t\t\t\\\"Text\\\": \\\"Thanks for calling the sample flow!\\\"\\n\", \"\t\t\t\t}\\n\", \"\t\t\t},\\n\", \"\t\t\t{\\n\", \"\t\t\t\t\\\"Identifier\\\": \\\"abcdef-abcd-abcd-abcd-abcdefghijkl\\\",\\n\", \"\t\t\t\t\\\"Type\\\": \\\"DisconnectParticipant\\\",\\n\", \"\t\t\t\t\\\"Transitions\\\": {},\\n\", \"\t\t\t\t\\\"Parameters\\\": {}\\n\", \"\t\t\t}\\n\", \"\t\t]\\n\", \"\t}\\n\", \"\t\\n\")),\n\t\t\tDescription: pulumi.String(\"Test Contact Flow Description\"),\n\t\t\tInstanceId: pulumi.String(\"aaaaaaaa-bbbb-cccc-dddd-111111111111\"),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Application\": pulumi.String(\"Terraform\"),\n\t\t\t\t\"Method\": pulumi.String(\"Create\"),\n\t\t\t\t\"Name\": pulumi.String(\"Test Contact Flow\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"CONTACT_FLOW\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nAmazon Connect Contact Flows can be imported using the `instance_id` and `contact_flow_id` separated by a colon (`:`), e.g.\n\n```sh\n $ pulumi import aws:connect/contactFlow:ContactFlow example f1288a1f-6193-445a-b47e-af739b2:c1d4e5f6-1b3c-1b3c-1b3c-c1d4e5f6c1d4e5\n```\n\n ", + "inputProperties": { + "content": { + "description": "Specifies the content of the Contact Flow, provided as a JSON string, written in Amazon Connect Contact Flow Language. If defined, the `filename` argument cannot be used.\n", + "type": "string" + }, + "contentHash": { + "type": "string" + }, + "description": { + "description": "Specifies the description of the Contact Flow.\n", + "type": "string" + }, + "filename": { + "description": "The path to the Contact Flow source within the local filesystem. Conflicts with `content`.\n", + "type": "string" + }, + "instanceId": { + "description": "Specifies the identifier of the hosting Amazon Connect Instance.\n", + "type": "string" + }, + "name": { + "description": "Specifies the name of the Contact Flow.\n", + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "Tags to apply to the Contact Flow. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + }, + "type": { + "description": "Specifies the type of the Contact Flow. Defaults to `CONTACT_FLOW`. Allowed Values are: `CONTACT_FLOW`, `CUSTOMER_QUEUE`, `CUSTOMER_HOLD`, `CUSTOMER_WHISPER`, `AGENT_HOLD`, `AGENT_WHISPER`, `OUTBOUND_WHISPER`, `AGENT_TRANSFER`, `QUEUE_TRANSFER`.\n", + "type": "string" + } + }, + "properties": { + "arn": { + "description": "The Amazon Resource Name (ARN) of the Contact Flow.\n", + "type": "string" + }, + "contactFlowId": { + "description": "The identifier of the Contact Flow.\n", + "type": "string" + }, + "content": { + "description": "Specifies the content of the Contact Flow, provided as a JSON string, written in Amazon Connect Contact Flow Language. If defined, the `filename` argument cannot be used.\n", + "type": "string" + }, + "contentHash": { + "type": "string" + }, + "description": { + "description": "Specifies the description of the Contact Flow.\n", + "type": "string" + }, + "filename": { + "description": "The path to the Contact Flow source within the local filesystem. Conflicts with `content`.\n", + "type": "string" + }, + "instanceId": { + "description": "Specifies the identifier of the hosting Amazon Connect Instance.\n", + "type": "string" + }, + "name": { + "description": "Specifies the name of the Contact Flow.\n", + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "Tags to apply to the Contact Flow. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + }, + "type": { + "description": "Specifies the type of the Contact Flow. Defaults to `CONTACT_FLOW`. Allowed Values are: `CONTACT_FLOW`, `CUSTOMER_QUEUE`, `CUSTOMER_HOLD`, `CUSTOMER_WHISPER`, `AGENT_HOLD`, `AGENT_WHISPER`, `OUTBOUND_WHISPER`, `AGENT_TRANSFER`, `QUEUE_TRANSFER`.\n", + "type": "string" + } + }, + "required": [ + "arn", + "contactFlowId", + "content", + "instanceId", + "name", + "tagsAll" + ], + "requiredInputs": [ + "instanceId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering ContactFlow resources.\n", + "properties": { + "arn": { + "description": "The Amazon Resource Name (ARN) of the Contact Flow.\n", + "type": "string" + }, + "contactFlowId": { + "description": "The identifier of the Contact Flow.\n", + "type": "string" + }, + "content": { + "description": "Specifies the content of the Contact Flow, provided as a JSON string, written in Amazon Connect Contact Flow Language. If defined, the `filename` argument cannot be used.\n", + "type": "string" + }, + "contentHash": { + "type": "string" + }, + "description": { + "description": "Specifies the description of the Contact Flow.\n", + "type": "string" + }, + "filename": { + "description": "The path to the Contact Flow source within the local filesystem. Conflicts with `content`.\n", + "type": "string" + }, + "instanceId": { + "description": "Specifies the identifier of the hosting Amazon Connect Instance.\n", + "type": "string" + }, + "name": { + "description": "Specifies the name of the Contact Flow.\n", + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "Tags to apply to the Contact Flow. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + }, + "type": { + "description": "Specifies the type of the Contact Flow. Defaults to `CONTACT_FLOW`. Allowed Values are: `CONTACT_FLOW`, `CUSTOMER_QUEUE`, `CUSTOMER_HOLD`, `CUSTOMER_WHISPER`, `AGENT_HOLD`, `AGENT_WHISPER`, `OUTBOUND_WHISPER`, `AGENT_TRANSFER`, `QUEUE_TRANSFER`.\n", + "type": "string" + } + }, + "type": "object" + } + }, + "aws:connect/instance:Instance": { + "description": "Provides an Amazon Connect instance resource. For more information see\n[Amazon Connect: Getting Started](https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-get-started.html)\n\n!\u003e **WARN:** There are limits to the number of Connect Instances that can be created in a specific AWS account, and those limits span the life of the account, not just active Instances. Minimize the number of times you create/delete an instance.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst test = new aws.connect.Instance(\"test\", {\n identityManagementType: \"CONNECT_MANAGED\",\n inboundCallsEnabled: true,\n instanceAlias: \"friendly-name-connect\",\n outboundCallsEnabled: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.connect.Instance(\"test\",\n identity_management_type=\"CONNECT_MANAGED\",\n inbound_calls_enabled=True,\n instance_alias=\"friendly-name-connect\",\n outbound_calls_enabled=True)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = new Aws.Connect.Instance(\"test\", new Aws.Connect.InstanceArgs\n {\n IdentityManagementType = \"CONNECT_MANAGED\",\n InboundCallsEnabled = true,\n InstanceAlias = \"friendly-name-connect\",\n OutboundCallsEnabled = true,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/connect\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := connect.NewInstance(ctx, \"test\", \u0026connect.InstanceArgs{\n\t\t\tIdentityManagementType: pulumi.String(\"CONNECT_MANAGED\"),\n\t\t\tInboundCallsEnabled: pulumi.Bool(true),\n\t\t\tInstanceAlias: pulumi.String(\"friendly-name-connect\"),\n\t\t\tOutboundCallsEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n{{% /example %}}\n{{% example %}}\n### With Existing Active Directory\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst test = new aws.connect.Instance(\"test\", {\n directoryId: aws_directory_service_directory.test.id,\n identityManagementType: \"EXISTING_DIRECTORY\",\n inboundCallsEnabled: true,\n instanceAlias: \"friendly-name-connect\",\n outboundCallsEnabled: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.connect.Instance(\"test\",\n directory_id=aws_directory_service_directory[\"test\"][\"id\"],\n identity_management_type=\"EXISTING_DIRECTORY\",\n inbound_calls_enabled=True,\n instance_alias=\"friendly-name-connect\",\n outbound_calls_enabled=True)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = new Aws.Connect.Instance(\"test\", new Aws.Connect.InstanceArgs\n {\n DirectoryId = aws_directory_service_directory.Test.Id,\n IdentityManagementType = \"EXISTING_DIRECTORY\",\n InboundCallsEnabled = true,\n InstanceAlias = \"friendly-name-connect\",\n OutboundCallsEnabled = true,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/connect\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := connect.NewInstance(ctx, \"test\", \u0026connect.InstanceArgs{\n\t\t\tDirectoryId: pulumi.Any(aws_directory_service_directory.Test.Id),\n\t\t\tIdentityManagementType: pulumi.String(\"EXISTING_DIRECTORY\"),\n\t\t\tInboundCallsEnabled: pulumi.Bool(true),\n\t\t\tInstanceAlias: pulumi.String(\"friendly-name-connect\"),\n\t\t\tOutboundCallsEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n{{% /example %}}\n{{% example %}}\n### With SAML\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst test = new aws.connect.Instance(\"test\", {\n identityManagementType: \"SAML\",\n inboundCallsEnabled: true,\n instanceAlias: \"friendly-name-connect\",\n outboundCallsEnabled: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.connect.Instance(\"test\",\n identity_management_type=\"SAML\",\n inbound_calls_enabled=True,\n instance_alias=\"friendly-name-connect\",\n outbound_calls_enabled=True)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = new Aws.Connect.Instance(\"test\", new Aws.Connect.InstanceArgs\n {\n IdentityManagementType = \"SAML\",\n InboundCallsEnabled = true,\n InstanceAlias = \"friendly-name-connect\",\n OutboundCallsEnabled = true,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/connect\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := connect.NewInstance(ctx, \"test\", \u0026connect.InstanceArgs{\n\t\t\tIdentityManagementType: pulumi.String(\"SAML\"),\n\t\t\tInboundCallsEnabled: pulumi.Bool(true),\n\t\t\tInstanceAlias: pulumi.String(\"friendly-name-connect\"),\n\t\t\tOutboundCallsEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nConnect instances can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:connect/instance:Instance example f1288a1f-6193-445a-b47e-af739b2\n```\n\n ", + "inputProperties": { + "autoResolveBestVoicesEnabled": { + "description": "Specifies whether auto resolve best voices is enabled. Defaults to `true`.\n", + "type": "boolean" + }, + "contactFlowLogsEnabled": { + "description": "Specifies whether contact flow logs are enabled. Defaults to `false`.\n", + "type": "boolean" + }, + "contactLensEnabled": { + "description": "Specifies whether contact lens is enabled. Defaults to `true`.\n", + "type": "boolean" + }, + "directoryId": { + "description": "The identifier for the directory if identity_management_type is `EXISTING_DIRECTORY`.\n", + "type": "string" + }, + "earlyMediaEnabled": { + "description": "Specifies whether early media for outbound calls is enabled . Defaults to `true` if outbound calls is enabled.\n", + "type": "boolean" + }, + "identityManagementType": { + "description": "Specifies the identity management type attached to the instance. Allowed Values are: `SAML`, `CONNECT_MANAGED`, `EXISTING_DIRECTORY`.\n", + "type": "string" + }, + "inboundCallsEnabled": { + "description": "Specifies whether inbound calls are enabled.\n", + "type": "boolean" + }, + "instanceAlias": { + "description": "Specifies the name of the instance. Required if `directory_id` not specified.\n", + "type": "string" + }, + "outboundCallsEnabled": { + "description": "Specifies whether outbound calls are enabled.\n\u003c!-- * `use_custom_tts_voices` - (Optional) Specifies Whether use custom tts voices is enabled. Defaults to `false` --\u003e\n", + "type": "boolean" + } + }, + "properties": { + "arn": { + "description": "Amazon Resource Name (ARN) of the instance.\n", + "type": "string" + }, + "autoResolveBestVoicesEnabled": { + "description": "Specifies whether auto resolve best voices is enabled. Defaults to `true`.\n", + "type": "boolean" + }, + "contactFlowLogsEnabled": { + "description": "Specifies whether contact flow logs are enabled. Defaults to `false`.\n", + "type": "boolean" + }, + "contactLensEnabled": { + "description": "Specifies whether contact lens is enabled. Defaults to `true`.\n", + "type": "boolean" + }, + "createdTime": { + "description": "Specifies when the instance was created.\n", + "type": "string" + }, + "directoryId": { + "description": "The identifier for the directory if identity_management_type is `EXISTING_DIRECTORY`.\n", + "type": "string" + }, + "earlyMediaEnabled": { + "description": "Specifies whether early media for outbound calls is enabled . Defaults to `true` if outbound calls is enabled.\n", + "type": "boolean" + }, + "identityManagementType": { + "description": "Specifies the identity management type attached to the instance. Allowed Values are: `SAML`, `CONNECT_MANAGED`, `EXISTING_DIRECTORY`.\n", + "type": "string" + }, + "inboundCallsEnabled": { + "description": "Specifies whether inbound calls are enabled.\n", + "type": "boolean" + }, + "instanceAlias": { + "description": "Specifies the name of the instance. Required if `directory_id` not specified.\n", + "type": "string" + }, + "outboundCallsEnabled": { + "description": "Specifies whether outbound calls are enabled.\n\u003c!-- * `use_custom_tts_voices` - (Optional) Specifies Whether use custom tts voices is enabled. Defaults to `false` --\u003e\n", + "type": "boolean" + }, + "serviceRole": { + "description": "The service role of the instance.\n", + "type": "string" + }, + "status": { + "description": "The state of the instance.\n", + "type": "string" + } + }, + "required": [ + "arn", + "createdTime", + "identityManagementType", + "inboundCallsEnabled", + "outboundCallsEnabled", + "serviceRole", + "status" + ], + "requiredInputs": [ + "identityManagementType", + "inboundCallsEnabled", + "outboundCallsEnabled" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Instance resources.\n", + "properties": { + "arn": { + "description": "Amazon Resource Name (ARN) of the instance.\n", + "type": "string" + }, + "autoResolveBestVoicesEnabled": { + "description": "Specifies whether auto resolve best voices is enabled. Defaults to `true`.\n", + "type": "boolean" + }, + "contactFlowLogsEnabled": { + "description": "Specifies whether contact flow logs are enabled. Defaults to `false`.\n", + "type": "boolean" + }, + "contactLensEnabled": { + "description": "Specifies whether contact lens is enabled. Defaults to `true`.\n", + "type": "boolean" + }, + "createdTime": { + "description": "Specifies when the instance was created.\n", + "type": "string" + }, + "directoryId": { + "description": "The identifier for the directory if identity_management_type is `EXISTING_DIRECTORY`.\n", + "type": "string" + }, + "earlyMediaEnabled": { + "description": "Specifies whether early media for outbound calls is enabled . Defaults to `true` if outbound calls is enabled.\n", + "type": "boolean" + }, + "identityManagementType": { + "description": "Specifies the identity management type attached to the instance. Allowed Values are: `SAML`, `CONNECT_MANAGED`, `EXISTING_DIRECTORY`.\n", + "type": "string" + }, + "inboundCallsEnabled": { + "description": "Specifies whether inbound calls are enabled.\n", + "type": "boolean" + }, + "instanceAlias": { + "description": "Specifies the name of the instance. Required if `directory_id` not specified.\n", + "type": "string" + }, + "outboundCallsEnabled": { + "description": "Specifies whether outbound calls are enabled.\n\u003c!-- * `use_custom_tts_voices` - (Optional) Specifies Whether use custom tts voices is enabled. Defaults to `false` --\u003e\n", + "type": "boolean" + }, + "serviceRole": { + "description": "The service role of the instance.\n", + "type": "string" + }, + "status": { + "description": "The state of the instance.\n", + "type": "string" + } + }, + "type": "object" + } + }, "aws:cur/reportDefinition:ReportDefinition": { "description": "Manages Cost and Usage Report Definitions.\n\n\u003e *NOTE:* The AWS Cost and Usage Report service is only available in `us-east-1` currently.\n\n\u003e *NOTE:* If AWS Organizations is enabled, only the master account can use this resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleCurReportDefinition = new aws.cur.ReportDefinition(\"example_cur_report_definition\", {\n additionalArtifacts: [\n \"REDSHIFT\",\n \"QUICKSIGHT\",\n ],\n additionalSchemaElements: [\"RESOURCES\"],\n compression: \"GZIP\",\n format: \"textORcsv\",\n reportName: \"example-cur-report-definition\",\n s3Bucket: \"example-bucket-name\",\n s3Region: \"us-east-1\",\n timeUnit: \"HOURLY\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_cur_report_definition = aws.cur.ReportDefinition(\"exampleCurReportDefinition\",\n additional_artifacts=[\n \"REDSHIFT\",\n \"QUICKSIGHT\",\n ],\n additional_schema_elements=[\"RESOURCES\"],\n compression=\"GZIP\",\n format=\"textORcsv\",\n report_name=\"example-cur-report-definition\",\n s3_bucket=\"example-bucket-name\",\n s3_region=\"us-east-1\",\n time_unit=\"HOURLY\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleCurReportDefinition = new Aws.Cur.ReportDefinition(\"exampleCurReportDefinition\", new Aws.Cur.ReportDefinitionArgs\n {\n AdditionalArtifacts = \n {\n \"REDSHIFT\",\n \"QUICKSIGHT\",\n },\n AdditionalSchemaElements = \n {\n \"RESOURCES\",\n },\n Compression = \"GZIP\",\n Format = \"textORcsv\",\n ReportName = \"example-cur-report-definition\",\n S3Bucket = \"example-bucket-name\",\n S3Region = \"us-east-1\",\n TimeUnit = \"HOURLY\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cur\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cur.NewReportDefinition(ctx, \"exampleCurReportDefinition\", \u0026cur.ReportDefinitionArgs{\n\t\t\tAdditionalArtifacts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"REDSHIFT\"),\n\t\t\t\tpulumi.String(\"QUICKSIGHT\"),\n\t\t\t},\n\t\t\tAdditionalSchemaElements: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"RESOURCES\"),\n\t\t\t},\n\t\t\tCompression: pulumi.String(\"GZIP\"),\n\t\t\tFormat: pulumi.String(\"textORcsv\"),\n\t\t\tReportName: pulumi.String(\"example-cur-report-definition\"),\n\t\t\tS3Bucket: pulumi.String(\"example-bucket-name\"),\n\t\t\tS3Region: pulumi.String(\"us-east-1\"),\n\t\t\tTimeUnit: pulumi.String(\"HOURLY\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nReport Definitions can be imported using the `report_name`, e.g.\n\n```sh\n $ pulumi import aws:cur/reportDefinition:ReportDefinition example_cur_report_definition example-cur-report-definition\n```\n\n ", "inputProperties": { @@ -51246,6 +53094,7 @@ "location", "name", "ownerAccountId", + "providerName", "tagsAll" ], "requiredInputs": [ @@ -51354,6 +53203,37 @@ "type": "object" } }, + "aws:directconnect/connectionConfirmation:ConnectionConfirmation": { + "description": "Provides a confirmation of the creation of the specified hosted connection on an interconnect.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst confirmation = new aws.directconnect.ConnectionConfirmation(\"confirmation\", {\n connectionId: \"dxcon-ffabc123\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nconfirmation = aws.directconnect.ConnectionConfirmation(\"confirmation\", connection_id=\"dxcon-ffabc123\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var confirmation = new Aws.DirectConnect.ConnectionConfirmation(\"confirmation\", new Aws.DirectConnect.ConnectionConfirmationArgs\n {\n ConnectionId = \"dxcon-ffabc123\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/directconnect\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := directconnect.NewConnectionConfirmation(ctx, \"confirmation\", \u0026directconnect.ConnectionConfirmationArgs{\n\t\t\tConnectionId: pulumi.String(\"dxcon-ffabc123\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputProperties": { + "connectionId": { + "description": "The ID of the hosted connection.\n", + "type": "string" + } + }, + "properties": { + "connectionId": { + "description": "The ID of the hosted connection.\n", + "type": "string" + } + }, + "required": [ + "connectionId" + ], + "requiredInputs": [ + "connectionId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering ConnectionConfirmation resources.\n", + "properties": { + "connectionId": { + "description": "The ID of the hosted connection.\n", + "type": "string" + } + }, + "type": "object" + } + }, "aws:directconnect/gateway:Gateway": { "description": "Provides a Direct Connect Gateway.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.directconnect.Gateway(\"example\", {\n amazonSideAsn: \"64512\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.directconnect.Gateway(\"example\", amazon_side_asn=\"64512\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.DirectConnect.Gateway(\"example\", new Aws.DirectConnect.GatewayArgs\n {\n AmazonSideAsn = \"64512\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/directconnect\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := directconnect.NewGateway(ctx, \"example\", \u0026directconnect.GatewayArgs{\n\t\t\tAmazonSideAsn: pulumi.String(\"64512\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDirect Connect Gateways can be imported using the `gateway id`, e.g.\n\n```sh\n $ pulumi import aws:directconnect/gateway:Gateway test abcd1234-dcba-5678-be23-cdef9876ab45\n```\n\n ", "inputProperties": { @@ -51636,6 +53516,182 @@ "type": "object" } }, + "aws:directconnect/hostedConnection:HostedConnection": { + "description": "Provides a hosted connection on the specified interconnect or a link aggregation group (LAG) of interconnects. Intended for use by AWS Direct Connect Partners only.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst hosted = new aws.directconnect.HostedConnection(\"hosted\", {\n bandwidth: \"100Mbps\",\n connectionId: \"dxcon-ffabc123\",\n ownerAccountId: \"123456789012\",\n vlan: 1,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nhosted = aws.directconnect.HostedConnection(\"hosted\",\n bandwidth=\"100Mbps\",\n connection_id=\"dxcon-ffabc123\",\n owner_account_id=\"123456789012\",\n vlan=1)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var hosted = new Aws.DirectConnect.HostedConnection(\"hosted\", new Aws.DirectConnect.HostedConnectionArgs\n {\n Bandwidth = \"100Mbps\",\n ConnectionId = \"dxcon-ffabc123\",\n OwnerAccountId = \"123456789012\",\n Vlan = 1,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/directconnect\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := directconnect.NewHostedConnection(ctx, \"hosted\", \u0026directconnect.HostedConnectionArgs{\n\t\t\tBandwidth: pulumi.String(\"100Mbps\"),\n\t\t\tConnectionId: pulumi.String(\"dxcon-ffabc123\"),\n\t\t\tOwnerAccountId: pulumi.String(\"123456789012\"),\n\t\t\tVlan: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputProperties": { + "bandwidth": { + "description": "The bandwidth of the connection. Valid values for dedicated connections: 1Gbps, 10Gbps. Valid values for hosted connections: 50Mbps, 100Mbps, 200Mbps, 300Mbps, 400Mbps, 500Mbps, 1Gbps, 2Gbps, 5Gbps and 10Gbps. Case sensitive.\n", + "type": "string" + }, + "connectionId": { + "description": "The ID of the interconnect or LAG.\n", + "type": "string" + }, + "name": { + "description": "The name of the connection.\n", + "type": "string" + }, + "ownerAccountId": { + "description": "The ID of the AWS account of the customer for the connection.\n", + "type": "string" + }, + "vlan": { + "description": "The dedicated VLAN provisioned to the hosted connection.\n", + "type": "integer" + } + }, + "properties": { + "awsDevice": { + "description": "The Direct Connect endpoint on which the physical connection terminates.\n", + "type": "string" + }, + "bandwidth": { + "description": "The bandwidth of the connection. Valid values for dedicated connections: 1Gbps, 10Gbps. Valid values for hosted connections: 50Mbps, 100Mbps, 200Mbps, 300Mbps, 400Mbps, 500Mbps, 1Gbps, 2Gbps, 5Gbps and 10Gbps. Case sensitive.\n", + "type": "string" + }, + "connectionId": { + "description": "The ID of the interconnect or LAG.\n", + "type": "string" + }, + "hasLogicalRedundancy": { + "description": "Indicates whether the connection supports a secondary BGP peer in the same address family (IPv4/IPv6).\n", + "type": "string" + }, + "jumboFrameCapable": { + "description": "Boolean value representing if jumbo frames have been enabled for this connection.\n", + "type": "boolean" + }, + "lagId": { + "description": "The ID of the LAG.\n", + "type": "string" + }, + "loaIssueTime": { + "description": "The time of the most recent call to [DescribeLoa](https://docs.aws.amazon.com/directconnect/latest/APIReference/API_DescribeLoa.html) for this connection.\n", + "type": "string" + }, + "location": { + "description": "The location of the connection.\n", + "type": "string" + }, + "name": { + "description": "The name of the connection.\n", + "type": "string" + }, + "ownerAccountId": { + "description": "The ID of the AWS account of the customer for the connection.\n", + "type": "string" + }, + "partnerName": { + "description": "The name of the AWS Direct Connect service provider associated with the connection.\n", + "type": "string" + }, + "providerName": { + "description": "The name of the service provider associated with the connection.\n", + "type": "string" + }, + "region": { + "description": "The AWS Region where the connection is located.\n", + "type": "string" + }, + "state": { + "description": "The state of the connection. Possible values include: ordering, requested, pending, available, down, deleting, deleted, rejected, unknown. See [AllocateHostedConnection](https://docs.aws.amazon.com/directconnect/latest/APIReference/API_AllocateHostedConnection.html) for a description of each connection state.\n", + "type": "string" + }, + "vlan": { + "description": "The dedicated VLAN provisioned to the hosted connection.\n", + "type": "integer" + } + }, + "required": [ + "awsDevice", + "bandwidth", + "connectionId", + "hasLogicalRedundancy", + "jumboFrameCapable", + "lagId", + "loaIssueTime", + "location", + "name", + "ownerAccountId", + "partnerName", + "providerName", + "region", + "state", + "vlan" + ], + "requiredInputs": [ + "bandwidth", + "connectionId", + "ownerAccountId", + "vlan" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering HostedConnection resources.\n", + "properties": { + "awsDevice": { + "description": "The Direct Connect endpoint on which the physical connection terminates.\n", + "type": "string" + }, + "bandwidth": { + "description": "The bandwidth of the connection. Valid values for dedicated connections: 1Gbps, 10Gbps. Valid values for hosted connections: 50Mbps, 100Mbps, 200Mbps, 300Mbps, 400Mbps, 500Mbps, 1Gbps, 2Gbps, 5Gbps and 10Gbps. Case sensitive.\n", + "type": "string" + }, + "connectionId": { + "description": "The ID of the interconnect or LAG.\n", + "type": "string" + }, + "hasLogicalRedundancy": { + "description": "Indicates whether the connection supports a secondary BGP peer in the same address family (IPv4/IPv6).\n", + "type": "string" + }, + "jumboFrameCapable": { + "description": "Boolean value representing if jumbo frames have been enabled for this connection.\n", + "type": "boolean" + }, + "lagId": { + "description": "The ID of the LAG.\n", + "type": "string" + }, + "loaIssueTime": { + "description": "The time of the most recent call to [DescribeLoa](https://docs.aws.amazon.com/directconnect/latest/APIReference/API_DescribeLoa.html) for this connection.\n", + "type": "string" + }, + "location": { + "description": "The location of the connection.\n", + "type": "string" + }, + "name": { + "description": "The name of the connection.\n", + "type": "string" + }, + "ownerAccountId": { + "description": "The ID of the AWS account of the customer for the connection.\n", + "type": "string" + }, + "partnerName": { + "description": "The name of the AWS Direct Connect service provider associated with the connection.\n", + "type": "string" + }, + "providerName": { + "description": "The name of the service provider associated with the connection.\n", + "type": "string" + }, + "region": { + "description": "The AWS Region where the connection is located.\n", + "type": "string" + }, + "state": { + "description": "The state of the connection. Possible values include: ordering, requested, pending, available, down, deleting, deleted, rejected, unknown. See [AllocateHostedConnection](https://docs.aws.amazon.com/directconnect/latest/APIReference/API_AllocateHostedConnection.html) for a description of each connection state.\n", + "type": "string" + }, + "vlan": { + "description": "The dedicated VLAN provisioned to the hosted connection.\n", + "type": "integer" + } + }, + "type": "object" + } + }, "aws:directconnect/hostedPrivateVirtualInterface:HostedPrivateVirtualInterface": { "description": "Provides a Direct Connect hosted private virtual interface resource. This resource represents the allocator's side of the hosted virtual interface.\nA hosted virtual interface is a virtual interface that is owned by another AWS account.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst foo = new aws.directconnect.HostedPrivateVirtualInterface(\"foo\", {\n addressFamily: \"ipv4\",\n bgpAsn: 65352,\n connectionId: \"dxcon-zzzzzzzz\",\n vlan: 4094,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nfoo = aws.directconnect.HostedPrivateVirtualInterface(\"foo\",\n address_family=\"ipv4\",\n bgp_asn=65352,\n connection_id=\"dxcon-zzzzzzzz\",\n vlan=4094)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var foo = new Aws.DirectConnect.HostedPrivateVirtualInterface(\"foo\", new Aws.DirectConnect.HostedPrivateVirtualInterfaceArgs\n {\n AddressFamily = \"ipv4\",\n BgpAsn = 65352,\n ConnectionId = \"dxcon-zzzzzzzz\",\n Vlan = 4094,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/directconnect\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := directconnect.NewHostedPrivateVirtualInterface(ctx, \"foo\", \u0026directconnect.HostedPrivateVirtualInterfaceArgs{\n\t\t\tAddressFamily: pulumi.String(\"ipv4\"),\n\t\t\tBgpAsn: pulumi.Int(65352),\n\t\t\tConnectionId: pulumi.String(\"dxcon-zzzzzzzz\"),\n\t\t\tVlan: pulumi.Int(4094),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDirect Connect hosted private virtual interfaces can be imported using the `vif id`, e.g.\n\n```sh\n $ pulumi import aws:directconnect/hostedPrivateVirtualInterface:HostedPrivateVirtualInterface test dxvif-33cc44dd\n```\n\n ", "inputProperties": { @@ -52460,8 +54516,12 @@ } }, "aws:directconnect/linkAggregationGroup:LinkAggregationGroup": { - "description": "Provides a Direct Connect LAG. Connections can be added to the LAG via the `aws.directconnect.Connection` and `aws.directconnect.ConnectionAssociation` resources.\n\n\u003e *NOTE:* When creating a LAG, Direct Connect requires creating a Connection. This provider will remove this unmanaged connection during resource creation.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst hoge = new aws.directconnect.LinkAggregationGroup(\"hoge\", {\n connectionsBandwidth: \"1Gbps\",\n forceDestroy: true,\n location: \"EqDC2\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nhoge = aws.directconnect.LinkAggregationGroup(\"hoge\",\n connections_bandwidth=\"1Gbps\",\n force_destroy=True,\n location=\"EqDC2\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var hoge = new Aws.DirectConnect.LinkAggregationGroup(\"hoge\", new Aws.DirectConnect.LinkAggregationGroupArgs\n {\n ConnectionsBandwidth = \"1Gbps\",\n ForceDestroy = true,\n Location = \"EqDC2\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/directconnect\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := directconnect.NewLinkAggregationGroup(ctx, \"hoge\", \u0026directconnect.LinkAggregationGroupArgs{\n\t\t\tConnectionsBandwidth: pulumi.String(\"1Gbps\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tLocation: pulumi.String(\"EqDC2\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDirect Connect LAGs can be imported using the `lag id`, e.g.\n\n```sh\n $ pulumi import aws:directconnect/linkAggregationGroup:LinkAggregationGroup test_lag dxlag-fgnsp5rq\n```\n\n ", + "description": "Provides a Direct Connect LAG. Connections can be added to the LAG via the `aws.directconnect.Connection` and `aws.directconnect.ConnectionAssociation` resources.\n\n\u003e *NOTE:* When creating a LAG, if no existing connection is specified, Direct Connect will create a connection and this provider will remove this unmanaged connection during resource creation.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst hoge = new aws.directconnect.LinkAggregationGroup(\"hoge\", {\n connectionsBandwidth: \"1Gbps\",\n forceDestroy: true,\n location: \"EqDC2\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nhoge = aws.directconnect.LinkAggregationGroup(\"hoge\",\n connections_bandwidth=\"1Gbps\",\n force_destroy=True,\n location=\"EqDC2\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var hoge = new Aws.DirectConnect.LinkAggregationGroup(\"hoge\", new Aws.DirectConnect.LinkAggregationGroupArgs\n {\n ConnectionsBandwidth = \"1Gbps\",\n ForceDestroy = true,\n Location = \"EqDC2\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/directconnect\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := directconnect.NewLinkAggregationGroup(ctx, \"hoge\", \u0026directconnect.LinkAggregationGroupArgs{\n\t\t\tConnectionsBandwidth: pulumi.String(\"1Gbps\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tLocation: pulumi.String(\"EqDC2\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDirect Connect LAGs can be imported using the `lag id`, e.g.\n\n```sh\n $ pulumi import aws:directconnect/linkAggregationGroup:LinkAggregationGroup test_lag dxlag-fgnsp5rq\n```\n\n ", "inputProperties": { + "connectionId": { + "description": "The ID of an existing dedicated connection to migrate to the LAG.\n", + "type": "string" + }, "connectionsBandwidth": { "description": "The bandwidth of the individual physical connections bundled by the LAG. Valid values: 50Mbps, 100Mbps, 200Mbps, 300Mbps, 400Mbps, 500Mbps, 1Gbps, 2Gbps, 5Gbps, 10Gbps and 100Gbps. Case sensitive.\n", "type": "string" @@ -52502,6 +54562,10 @@ "description": "The ARN of the LAG.\n", "type": "string" }, + "connectionId": { + "description": "The ID of an existing dedicated connection to migrate to the LAG.\n", + "type": "string" + }, "connectionsBandwidth": { "description": "The bandwidth of the individual physical connections bundled by the LAG. Valid values: 50Mbps, 100Mbps, 200Mbps, 300Mbps, 400Mbps, 500Mbps, 1Gbps, 2Gbps, 5Gbps, 10Gbps and 100Gbps. Case sensitive.\n", "type": "string" @@ -52556,6 +54620,7 @@ "location", "name", "ownerAccountId", + "providerName", "tagsAll" ], "requiredInputs": [ @@ -52569,6 +54634,10 @@ "description": "The ARN of the LAG.\n", "type": "string" }, + "connectionId": { + "description": "The ID of an existing dedicated connection to migrate to the LAG.\n", + "type": "string" + }, "connectionsBandwidth": { "description": "The bandwidth of the individual physical connections bundled by the LAG. Valid values: 50Mbps, 100Mbps, 200Mbps, 300Mbps, 400Mbps, 500Mbps, 1Gbps, 2Gbps, 5Gbps, 10Gbps and 100Gbps. Case sensitive.\n", "type": "string" @@ -54685,6 +56754,10 @@ "aws:dms/replicationTask:ReplicationTask": { "description": "Provides a DMS (Data Migration Service) replication task resource. DMS replication tasks can be created, updated, deleted, and imported.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\n// Create a new replication task\nconst test = new aws.dms.ReplicationTask(\"test\", {\n cdcStartTime: 1484346880,\n migrationType: \"full-load\",\n replicationInstanceArn: aws_dms_replication_instance[\"test-dms-replication-instance-tf\"].replication_instance_arn,\n replicationTaskId: \"test-dms-replication-task-tf\",\n replicationTaskSettings: \"...\",\n sourceEndpointArn: aws_dms_endpoint[\"test-dms-source-endpoint-tf\"].endpoint_arn,\n tableMappings: `{\"rules\":[{\"rule-type\":\"selection\",\"rule-id\":\"1\",\"rule-name\":\"1\",\"object-locator\":{\"schema-name\":\"%\",\"table-name\":\"%\"},\"rule-action\":\"include\"}]}`,\n tags: {\n Name: \"test\",\n },\n targetEndpointArn: aws_dms_endpoint[\"test-dms-target-endpoint-tf\"].endpoint_arn,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\n# Create a new replication task\ntest = aws.dms.ReplicationTask(\"test\",\n cdc_start_time=\"1484346880\",\n migration_type=\"full-load\",\n replication_instance_arn=aws_dms_replication_instance[\"test-dms-replication-instance-tf\"][\"replication_instance_arn\"],\n replication_task_id=\"test-dms-replication-task-tf\",\n replication_task_settings=\"...\",\n source_endpoint_arn=aws_dms_endpoint[\"test-dms-source-endpoint-tf\"][\"endpoint_arn\"],\n table_mappings=\"{\\\"rules\\\":[{\\\"rule-type\\\":\\\"selection\\\",\\\"rule-id\\\":\\\"1\\\",\\\"rule-name\\\":\\\"1\\\",\\\"object-locator\\\":{\\\"schema-name\\\":\\\"%\\\",\\\"table-name\\\":\\\"%\\\"},\\\"rule-action\\\":\\\"include\\\"}]}\",\n tags={\n \"Name\": \"test\",\n },\n target_endpoint_arn=aws_dms_endpoint[\"test-dms-target-endpoint-tf\"][\"endpoint_arn\"])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n // Create a new replication task\n var test = new Aws.Dms.ReplicationTask(\"test\", new Aws.Dms.ReplicationTaskArgs\n {\n CdcStartTime = \"1484346880\",\n MigrationType = \"full-load\",\n ReplicationInstanceArn = aws_dms_replication_instance.Test_dms_replication_instance_tf.Replication_instance_arn,\n ReplicationTaskId = \"test-dms-replication-task-tf\",\n ReplicationTaskSettings = \"...\",\n SourceEndpointArn = aws_dms_endpoint.Test_dms_source_endpoint_tf.Endpoint_arn,\n TableMappings = \"{\\\"rules\\\":[{\\\"rule-type\\\":\\\"selection\\\",\\\"rule-id\\\":\\\"1\\\",\\\"rule-name\\\":\\\"1\\\",\\\"object-locator\\\":{\\\"schema-name\\\":\\\"%\\\",\\\"table-name\\\":\\\"%\\\"},\\\"rule-action\\\":\\\"include\\\"}]}\",\n Tags = \n {\n { \"Name\", \"test\" },\n },\n TargetEndpointArn = aws_dms_endpoint.Test_dms_target_endpoint_tf.Endpoint_arn,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/dms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dms.NewReplicationTask(ctx, \"test\", \u0026dms.ReplicationTaskArgs{\n\t\t\tCdcStartTime: pulumi.String(\"1484346880\"),\n\t\t\tMigrationType: pulumi.String(\"full-load\"),\n\t\t\tReplicationInstanceArn: pulumi.Any(aws_dms_replication_instance.Test - dms - replication - instance - tf.Replication_instance_arn),\n\t\t\tReplicationTaskId: pulumi.String(\"test-dms-replication-task-tf\"),\n\t\t\tReplicationTaskSettings: pulumi.String(\"...\"),\n\t\t\tSourceEndpointArn: pulumi.Any(aws_dms_endpoint.Test - dms - source - endpoint - tf.Endpoint_arn),\n\t\t\tTableMappings: pulumi.String(fmt.Sprintf(\"%v%v%v%v%v\", \"{\\\"rules\\\":[{\\\"rule-type\\\":\\\"selection\\\",\\\"rule-id\\\":\\\"1\\\",\\\"rule-name\\\":\\\"1\\\",\\\"object-locator\\\":{\\\"schema-name\\\":\\\"\", \"%\", \"\\\",\\\"table-name\\\":\\\"\", \"%\", \"\\\"},\\\"rule-action\\\":\\\"include\\\"}]}\")),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Name\": pulumi.String(\"test\"),\n\t\t\t},\n\t\t\tTargetEndpointArn: pulumi.Any(aws_dms_endpoint.Test - dms - target - endpoint - tf.Endpoint_arn),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nReplication tasks can be imported using the `replication_task_id`, e.g.\n\n```sh\n $ pulumi import aws:dms/replicationTask:ReplicationTask test test-dms-replication-task-tf\n```\n\n ", "inputProperties": { + "cdcStartPosition": { + "description": "Indicates when you want a change data capture (CDC) operation to start. The value can be in date, checkpoint, or LSN/SCN format depending on the source engine. For more information, see [Determining a CDC native start point](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html#CHAP_Task.CDC.StartPoint.Native).\n", + "type": "string" + }, "cdcStartTime": { "description": "The Unix timestamp integer for the start of the Change Data Capture (CDC) operation.\n", "type": "string" @@ -54726,6 +56799,10 @@ } }, "properties": { + "cdcStartPosition": { + "description": "Indicates when you want a change data capture (CDC) operation to start. The value can be in date, checkpoint, or LSN/SCN format depending on the source engine. For more information, see [Determining a CDC native start point](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html#CHAP_Task.CDC.StartPoint.Native).\n", + "type": "string" + }, "cdcStartTime": { "description": "The Unix timestamp integer for the start of the Change Data Capture (CDC) operation.\n", "type": "string" @@ -54798,6 +56875,10 @@ "stateInputs": { "description": "Input properties used for looking up and filtering ReplicationTask resources.\n", "properties": { + "cdcStartPosition": { + "description": "Indicates when you want a change data capture (CDC) operation to start. The value can be in date, checkpoint, or LSN/SCN format depending on the source engine. For more information, see [Determining a CDC native start point](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html#CHAP_Task.CDC.StartPoint.Native).\n", + "type": "string" + }, "cdcStartTime": { "description": "The Unix timestamp integer for the start of the Change Data Capture (CDC) operation.\n", "type": "string" @@ -58725,26 +60806,26 @@ } }, "aws:ec2/dedicatedHost:DedicatedHost": { - "description": "Provides an EC2 host resource. This allows hosts to be created, updated,\nand deleted.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst test = new aws.ec2.DedicatedHost(\"test\", {\n autoPlacement: \"on\",\n availabilityZone: \"us-west-1a\",\n hostRecovery: \"on\",\n instanceType: \"c5.18xlarge\",\n});\nconst testData = test.id.apply(id =\u003e aws.ec2.getDedicatedHost({\n hostId: id,\n}));\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.ec2.DedicatedHost(\"test\",\n auto_placement=\"on\",\n availability_zone=\"us-west-1a\",\n host_recovery=\"on\",\n instance_type=\"c5.18xlarge\")\ntest_data = test.id.apply(lambda id: aws.ec2.get_dedicated_host(host_id=id))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = new Aws.Ec2.DedicatedHost(\"test\", new Aws.Ec2.DedicatedHostArgs\n {\n AutoPlacement = \"on\",\n AvailabilityZone = \"us-west-1a\",\n HostRecovery = \"on\",\n InstanceType = \"c5.18xlarge\",\n });\n var testData = test.Id.Apply(id =\u003e Aws.Ec2.GetDedicatedHost.InvokeAsync(new Aws.Ec2.GetDedicatedHostArgs\n {\n HostId = id,\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := ec2.NewDedicatedHost(ctx, \"test\", \u0026ec2.DedicatedHostArgs{\n\t\t\tAutoPlacement: pulumi.String(\"on\"),\n\t\t\tAvailabilityZone: pulumi.String(\"us-west-1a\"),\n\t\t\tHostRecovery: pulumi.String(\"on\"),\n\t\t\tInstanceType: pulumi.String(\"c5.18xlarge\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nhosts can be imported using the `host_id`, e.g.\n\n```sh\n $ pulumi import aws:ec2/dedicatedHost:DedicatedHost host_id h-0385a99d0e4b20cbb\n```\n\n ", + "description": "Provides an EC2 Host resource. This allows Dedicated Hosts to be allocated, modified, and released.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\n// Create a new host with instance type of c5.18xlarge with Auto Placement \n// and Host Recovery enabled. \nconst test = new aws.ec2.DedicatedHost(\"test\", {\n autoPlacement: \"on\",\n availabilityZone: \"us-west-2a\",\n hostRecovery: \"on\",\n instanceType: \"c5.18xlarge\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\n# Create a new host with instance type of c5.18xlarge with Auto Placement \n# and Host Recovery enabled. \ntest = aws.ec2.DedicatedHost(\"test\",\n auto_placement=\"on\",\n availability_zone=\"us-west-2a\",\n host_recovery=\"on\",\n instance_type=\"c5.18xlarge\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n // Create a new host with instance type of c5.18xlarge with Auto Placement \n // and Host Recovery enabled. \n var test = new Aws.Ec2.DedicatedHost(\"test\", new Aws.Ec2.DedicatedHostArgs\n {\n AutoPlacement = \"on\",\n AvailabilityZone = \"us-west-2a\",\n HostRecovery = \"on\",\n InstanceType = \"c5.18xlarge\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ec2.NewDedicatedHost(ctx, \"test\", \u0026ec2.DedicatedHostArgs{\n\t\t\tAutoPlacement: pulumi.String(\"on\"),\n\t\t\tAvailabilityZone: pulumi.String(\"us-west-2a\"),\n\t\t\tHostRecovery: pulumi.String(\"on\"),\n\t\t\tInstanceType: pulumi.String(\"c5.18xlarge\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nHosts can be imported using the host `id`, e.g.\n\n```sh\n $ pulumi import aws:ec2/dedicatedHost:DedicatedHost example h-0385a99d0e4b20cbb\n```\n\n ", "inputProperties": { "autoPlacement": { - "description": "Indicates whether the host accepts any untargeted instance launches that match its instance type configuration, or if it only accepts Host tenancy instance launches that specify its unique host ID.\n", + "description": "Indicates whether the host accepts any untargeted instance launches that match its instance type configuration, or if it only accepts Host tenancy instance launches that specify its unique host ID. Valid values: `on`, `off`. Default: `on`.\n", "type": "string" }, "availabilityZone": { - "description": "The AZ to start the host in.\n", + "description": "The Availability Zone in which to allocate the Dedicated Host.\n", "type": "string" }, "hostRecovery": { - "description": "Indicates whether to enable or disable host recovery for the Dedicated Host. Host recovery is disabled by default.\n", + "description": "Indicates whether to enable or disable host recovery for the Dedicated Host. Valid values: `on`, `off`. Default: `off`.\n", "type": "string" }, "instanceFamily": { - "description": "Specifies the instance family for which to configure your Dedicated Host. Mutually exclusive with `instance_type`.\n", + "description": "Specifies the instance family to be supported by the Dedicated Hosts. If you specify an instance family, the Dedicated Hosts support multiple instance types within that instance family. Exactly one of `instance_family` or `instance_type` must be specified.\n", "type": "string" }, "instanceType": { - "description": "Specifies the instance type for which to configure your Dedicated Host. When you specify the instance type, that is the only instance type that you can launch onto that host. Mutually exclusive with `instance_family`.\n", + "description": "Specifies the instance type to be supported by the Dedicated Hosts. If you specify an instance type, the Dedicated Hosts support instances of the specified instance type only. Exactly one of `instance_family` or `instance_type` must be specified.\n", "type": "string" }, "tags": { @@ -58752,27 +60833,41 @@ "type": "string" }, "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "type": "object" } }, "properties": { + "arn": { + "description": "The ARN of the Dedicated Host.\n", + "type": "string" + }, "autoPlacement": { - "description": "Indicates whether the host accepts any untargeted instance launches that match its instance type configuration, or if it only accepts Host tenancy instance launches that specify its unique host ID.\n", + "description": "Indicates whether the host accepts any untargeted instance launches that match its instance type configuration, or if it only accepts Host tenancy instance launches that specify its unique host ID. Valid values: `on`, `off`. Default: `on`.\n", "type": "string" }, "availabilityZone": { - "description": "The AZ to start the host in.\n", + "description": "The Availability Zone in which to allocate the Dedicated Host.\n", "type": "string" }, "hostRecovery": { - "description": "Indicates whether to enable or disable host recovery for the Dedicated Host. Host recovery is disabled by default.\n", + "description": "Indicates whether to enable or disable host recovery for the Dedicated Host. Valid values: `on`, `off`. Default: `off`.\n", "type": "string" }, "instanceFamily": { - "description": "Specifies the instance family for which to configure your Dedicated Host. Mutually exclusive with `instance_type`.\n", + "description": "Specifies the instance family to be supported by the Dedicated Hosts. If you specify an instance family, the Dedicated Hosts support multiple instance types within that instance family. Exactly one of `instance_family` or `instance_type` must be specified.\n", "type": "string" }, "instanceType": { - "description": "Specifies the instance type for which to configure your Dedicated Host. When you specify the instance type, that is the only instance type that you can launch onto that host. Mutually exclusive with `instance_family`.\n", + "description": "Specifies the instance type to be supported by the Dedicated Hosts. If you specify an instance type, the Dedicated Hosts support instances of the specified instance type only. Exactly one of `instance_family` or `instance_type` must be specified.\n", + "type": "string" + }, + "ownerId": { + "description": "The ID of the AWS account that owns the Dedicated Host.\n", "type": "string" }, "tags": { @@ -58780,12 +60875,19 @@ "type": "string" }, "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "type": "object" } }, "required": [ - "autoPlacement", + "arn", "availabilityZone", - "hostRecovery" + "ownerId", + "tagsAll" ], "requiredInputs": [ "availabilityZone" @@ -58793,24 +60895,32 @@ "stateInputs": { "description": "Input properties used for looking up and filtering DedicatedHost resources.\n", "properties": { + "arn": { + "description": "The ARN of the Dedicated Host.\n", + "type": "string" + }, "autoPlacement": { - "description": "Indicates whether the host accepts any untargeted instance launches that match its instance type configuration, or if it only accepts Host tenancy instance launches that specify its unique host ID.\n", + "description": "Indicates whether the host accepts any untargeted instance launches that match its instance type configuration, or if it only accepts Host tenancy instance launches that specify its unique host ID. Valid values: `on`, `off`. Default: `on`.\n", "type": "string" }, "availabilityZone": { - "description": "The AZ to start the host in.\n", + "description": "The Availability Zone in which to allocate the Dedicated Host.\n", "type": "string" }, "hostRecovery": { - "description": "Indicates whether to enable or disable host recovery for the Dedicated Host. Host recovery is disabled by default.\n", + "description": "Indicates whether to enable or disable host recovery for the Dedicated Host. Valid values: `on`, `off`. Default: `off`.\n", "type": "string" }, "instanceFamily": { - "description": "Specifies the instance family for which to configure your Dedicated Host. Mutually exclusive with `instance_type`.\n", + "description": "Specifies the instance family to be supported by the Dedicated Hosts. If you specify an instance family, the Dedicated Hosts support multiple instance types within that instance family. Exactly one of `instance_family` or `instance_type` must be specified.\n", "type": "string" }, "instanceType": { - "description": "Specifies the instance type for which to configure your Dedicated Host. When you specify the instance type, that is the only instance type that you can launch onto that host. Mutually exclusive with `instance_family`.\n", + "description": "Specifies the instance type to be supported by the Dedicated Hosts. If you specify an instance type, the Dedicated Hosts support instances of the specified instance type only. Exactly one of `instance_family` or `instance_type` must be specified.\n", + "type": "string" + }, + "ownerId": { + "description": "The ID of the AWS account that owns the Dedicated Host.\n", "type": "string" }, "tags": { @@ -58818,6 +60928,12 @@ "type": "string" }, "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "type": "object" } }, "type": "object" @@ -60314,8 +62430,12 @@ } }, "aws:ec2/flowLog:FlowLog": { - "description": "Provides a VPC/Subnet/ENI Flow Log to capture IP traffic for a specific network\ninterface, subnet, or VPC. Logs are sent to a CloudWatch Log Group or a S3 Bucket.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### CloudWatch Logging\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleLogGroup = new aws.cloudwatch.LogGroup(\"exampleLogGroup\", {});\nconst exampleRole = new aws.iam.Role(\"exampleRole\", {assumeRolePolicy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"\",\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"Service\": \"vpc-flow-logs.amazonaws.com\"\n },\n \"Action\": \"sts:AssumeRole\"\n }\n ]\n}\n`});\nconst exampleFlowLog = new aws.ec2.FlowLog(\"exampleFlowLog\", {\n iamRoleArn: exampleRole.arn,\n logDestination: exampleLogGroup.arn,\n trafficType: \"ALL\",\n vpcId: aws_vpc.example.id,\n});\nconst exampleRolePolicy = new aws.iam.RolePolicy(\"exampleRolePolicy\", {\n role: exampleRole.id,\n policy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:PutLogEvents\",\n \"logs:DescribeLogGroups\",\n \"logs:DescribeLogStreams\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"*\"\n }\n ]\n}\n`,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_log_group = aws.cloudwatch.LogGroup(\"exampleLogGroup\")\nexample_role = aws.iam.Role(\"exampleRole\", assume_role_policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"\",\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"Service\": \"vpc-flow-logs.amazonaws.com\"\n },\n \"Action\": \"sts:AssumeRole\"\n }\n ]\n}\n\"\"\")\nexample_flow_log = aws.ec2.FlowLog(\"exampleFlowLog\",\n iam_role_arn=example_role.arn,\n log_destination=example_log_group.arn,\n traffic_type=\"ALL\",\n vpc_id=aws_vpc[\"example\"][\"id\"])\nexample_role_policy = aws.iam.RolePolicy(\"exampleRolePolicy\",\n role=example_role.id,\n policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:PutLogEvents\",\n \"logs:DescribeLogGroups\",\n \"logs:DescribeLogStreams\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"*\"\n }\n ]\n}\n\"\"\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleLogGroup = new Aws.CloudWatch.LogGroup(\"exampleLogGroup\", new Aws.CloudWatch.LogGroupArgs\n {\n });\n var exampleRole = new Aws.Iam.Role(\"exampleRole\", new Aws.Iam.RoleArgs\n {\n AssumeRolePolicy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Sid\"\": \"\"\"\",\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Principal\"\": {\n \"\"Service\"\": \"\"vpc-flow-logs.amazonaws.com\"\"\n },\n \"\"Action\"\": \"\"sts:AssumeRole\"\"\n }\n ]\n}\n\",\n });\n var exampleFlowLog = new Aws.Ec2.FlowLog(\"exampleFlowLog\", new Aws.Ec2.FlowLogArgs\n {\n IamRoleArn = exampleRole.Arn,\n LogDestination = exampleLogGroup.Arn,\n TrafficType = \"ALL\",\n VpcId = aws_vpc.Example.Id,\n });\n var exampleRolePolicy = new Aws.Iam.RolePolicy(\"exampleRolePolicy\", new Aws.Iam.RolePolicyArgs\n {\n Role = exampleRole.Id,\n Policy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Action\"\": [\n \"\"logs:CreateLogGroup\"\",\n \"\"logs:CreateLogStream\"\",\n \"\"logs:PutLogEvents\"\",\n \"\"logs:DescribeLogGroups\"\",\n \"\"logs:DescribeLogStreams\"\"\n ],\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Resource\"\": \"\"*\"\"\n }\n ]\n}\n\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudwatch\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleLogGroup, err := cloudwatch.NewLogGroup(ctx, \"exampleLogGroup\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleRole, err := iam.NewRole(ctx, \"exampleRole\", \u0026iam.RoleArgs{\n\t\t\tAssumeRolePolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Sid\\\": \\\"\\\",\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Principal\\\": {\\n\", \" \\\"Service\\\": \\\"vpc-flow-logs.amazonaws.com\\\"\\n\", \" },\\n\", \" \\\"Action\\\": \\\"sts:AssumeRole\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ec2.NewFlowLog(ctx, \"exampleFlowLog\", \u0026ec2.FlowLogArgs{\n\t\t\tIamRoleArn: exampleRole.Arn,\n\t\t\tLogDestination: exampleLogGroup.Arn,\n\t\t\tTrafficType: pulumi.String(\"ALL\"),\n\t\t\tVpcId: pulumi.Any(aws_vpc.Example.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewRolePolicy(ctx, \"exampleRolePolicy\", \u0026iam.RolePolicyArgs{\n\t\t\tRole: exampleRole.ID(),\n\t\t\tPolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Action\\\": [\\n\", \" \\\"logs:CreateLogGroup\\\",\\n\", \" \\\"logs:CreateLogStream\\\",\\n\", \" \\\"logs:PutLogEvents\\\",\\n\", \" \\\"logs:DescribeLogGroups\\\",\\n\", \" \\\"logs:DescribeLogStreams\\\"\\n\", \" ],\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Resource\\\": \\\"*\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### S3 Logging\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleBucket = new aws.s3.Bucket(\"exampleBucket\", {});\nconst exampleFlowLog = new aws.ec2.FlowLog(\"exampleFlowLog\", {\n logDestination: exampleBucket.arn,\n logDestinationType: \"s3\",\n trafficType: \"ALL\",\n vpcId: aws_vpc.example.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_bucket = aws.s3.Bucket(\"exampleBucket\")\nexample_flow_log = aws.ec2.FlowLog(\"exampleFlowLog\",\n log_destination=example_bucket.arn,\n log_destination_type=\"s3\",\n traffic_type=\"ALL\",\n vpc_id=aws_vpc[\"example\"][\"id\"])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleBucket = new Aws.S3.Bucket(\"exampleBucket\", new Aws.S3.BucketArgs\n {\n });\n var exampleFlowLog = new Aws.Ec2.FlowLog(\"exampleFlowLog\", new Aws.Ec2.FlowLogArgs\n {\n LogDestination = exampleBucket.Arn,\n LogDestinationType = \"s3\",\n TrafficType = \"ALL\",\n VpcId = aws_vpc.Example.Id,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleBucket, err := s3.NewBucket(ctx, \"exampleBucket\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ec2.NewFlowLog(ctx, \"exampleFlowLog\", \u0026ec2.FlowLogArgs{\n\t\t\tLogDestination: exampleBucket.Arn,\n\t\t\tLogDestinationType: pulumi.String(\"s3\"),\n\t\t\tTrafficType: pulumi.String(\"ALL\"),\n\t\t\tVpcId: pulumi.Any(aws_vpc.Example.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nFlow Logs can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:ec2/flowLog:FlowLog test_flow_log fl-1a2b3c4d\n```\n\n ", + "description": "Provides a VPC/Subnet/ENI Flow Log to capture IP traffic for a specific network\ninterface, subnet, or VPC. Logs are sent to a CloudWatch Log Group or a S3 Bucket.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### CloudWatch Logging\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleLogGroup = new aws.cloudwatch.LogGroup(\"exampleLogGroup\", {});\nconst exampleRole = new aws.iam.Role(\"exampleRole\", {assumeRolePolicy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"\",\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"Service\": \"vpc-flow-logs.amazonaws.com\"\n },\n \"Action\": \"sts:AssumeRole\"\n }\n ]\n}\n`});\nconst exampleFlowLog = new aws.ec2.FlowLog(\"exampleFlowLog\", {\n iamRoleArn: exampleRole.arn,\n logDestination: exampleLogGroup.arn,\n trafficType: \"ALL\",\n vpcId: aws_vpc.example.id,\n});\nconst exampleRolePolicy = new aws.iam.RolePolicy(\"exampleRolePolicy\", {\n role: exampleRole.id,\n policy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:PutLogEvents\",\n \"logs:DescribeLogGroups\",\n \"logs:DescribeLogStreams\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"*\"\n }\n ]\n}\n`,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_log_group = aws.cloudwatch.LogGroup(\"exampleLogGroup\")\nexample_role = aws.iam.Role(\"exampleRole\", assume_role_policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"\",\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"Service\": \"vpc-flow-logs.amazonaws.com\"\n },\n \"Action\": \"sts:AssumeRole\"\n }\n ]\n}\n\"\"\")\nexample_flow_log = aws.ec2.FlowLog(\"exampleFlowLog\",\n iam_role_arn=example_role.arn,\n log_destination=example_log_group.arn,\n traffic_type=\"ALL\",\n vpc_id=aws_vpc[\"example\"][\"id\"])\nexample_role_policy = aws.iam.RolePolicy(\"exampleRolePolicy\",\n role=example_role.id,\n policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:PutLogEvents\",\n \"logs:DescribeLogGroups\",\n \"logs:DescribeLogStreams\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"*\"\n }\n ]\n}\n\"\"\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleLogGroup = new Aws.CloudWatch.LogGroup(\"exampleLogGroup\", new Aws.CloudWatch.LogGroupArgs\n {\n });\n var exampleRole = new Aws.Iam.Role(\"exampleRole\", new Aws.Iam.RoleArgs\n {\n AssumeRolePolicy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Sid\"\": \"\"\"\",\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Principal\"\": {\n \"\"Service\"\": \"\"vpc-flow-logs.amazonaws.com\"\"\n },\n \"\"Action\"\": \"\"sts:AssumeRole\"\"\n }\n ]\n}\n\",\n });\n var exampleFlowLog = new Aws.Ec2.FlowLog(\"exampleFlowLog\", new Aws.Ec2.FlowLogArgs\n {\n IamRoleArn = exampleRole.Arn,\n LogDestination = exampleLogGroup.Arn,\n TrafficType = \"ALL\",\n VpcId = aws_vpc.Example.Id,\n });\n var exampleRolePolicy = new Aws.Iam.RolePolicy(\"exampleRolePolicy\", new Aws.Iam.RolePolicyArgs\n {\n Role = exampleRole.Id,\n Policy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Action\"\": [\n \"\"logs:CreateLogGroup\"\",\n \"\"logs:CreateLogStream\"\",\n \"\"logs:PutLogEvents\"\",\n \"\"logs:DescribeLogGroups\"\",\n \"\"logs:DescribeLogStreams\"\"\n ],\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Resource\"\": \"\"*\"\"\n }\n ]\n}\n\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudwatch\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleLogGroup, err := cloudwatch.NewLogGroup(ctx, \"exampleLogGroup\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleRole, err := iam.NewRole(ctx, \"exampleRole\", \u0026iam.RoleArgs{\n\t\t\tAssumeRolePolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Sid\\\": \\\"\\\",\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Principal\\\": {\\n\", \" \\\"Service\\\": \\\"vpc-flow-logs.amazonaws.com\\\"\\n\", \" },\\n\", \" \\\"Action\\\": \\\"sts:AssumeRole\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ec2.NewFlowLog(ctx, \"exampleFlowLog\", \u0026ec2.FlowLogArgs{\n\t\t\tIamRoleArn: exampleRole.Arn,\n\t\t\tLogDestination: exampleLogGroup.Arn,\n\t\t\tTrafficType: pulumi.String(\"ALL\"),\n\t\t\tVpcId: pulumi.Any(aws_vpc.Example.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewRolePolicy(ctx, \"exampleRolePolicy\", \u0026iam.RolePolicyArgs{\n\t\t\tRole: exampleRole.ID(),\n\t\t\tPolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Action\\\": [\\n\", \" \\\"logs:CreateLogGroup\\\",\\n\", \" \\\"logs:CreateLogStream\\\",\\n\", \" \\\"logs:PutLogEvents\\\",\\n\", \" \\\"logs:DescribeLogGroups\\\",\\n\", \" \\\"logs:DescribeLogStreams\\\"\\n\", \" ],\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Resource\\\": \\\"*\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### S3 Logging\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleBucket = new aws.s3.Bucket(\"exampleBucket\", {});\nconst exampleFlowLog = new aws.ec2.FlowLog(\"exampleFlowLog\", {\n logDestination: exampleBucket.arn,\n logDestinationType: \"s3\",\n trafficType: \"ALL\",\n vpcId: aws_vpc.example.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_bucket = aws.s3.Bucket(\"exampleBucket\")\nexample_flow_log = aws.ec2.FlowLog(\"exampleFlowLog\",\n log_destination=example_bucket.arn,\n log_destination_type=\"s3\",\n traffic_type=\"ALL\",\n vpc_id=aws_vpc[\"example\"][\"id\"])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleBucket = new Aws.S3.Bucket(\"exampleBucket\", new Aws.S3.BucketArgs\n {\n });\n var exampleFlowLog = new Aws.Ec2.FlowLog(\"exampleFlowLog\", new Aws.Ec2.FlowLogArgs\n {\n LogDestination = exampleBucket.Arn,\n LogDestinationType = \"s3\",\n TrafficType = \"ALL\",\n VpcId = aws_vpc.Example.Id,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleBucket, err := s3.NewBucket(ctx, \"exampleBucket\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ec2.NewFlowLog(ctx, \"exampleFlowLog\", \u0026ec2.FlowLogArgs{\n\t\t\tLogDestination: exampleBucket.Arn,\n\t\t\tLogDestinationType: pulumi.String(\"s3\"),\n\t\t\tTrafficType: pulumi.String(\"ALL\"),\n\t\t\tVpcId: pulumi.Any(aws_vpc.Example.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### S3 Logging in Apache Parquet format with per-hour partitions\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleBucket = new aws.s3.Bucket(\"exampleBucket\", {});\nconst exampleFlowLog = new aws.ec2.FlowLog(\"exampleFlowLog\", {\n logDestination: exampleBucket.arn,\n logDestinationType: \"s3\",\n trafficType: \"ALL\",\n vpcId: aws_vpc.example.id,\n destinationOptions: {\n fileFormat: \"parquet\",\n perHourPartition: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_bucket = aws.s3.Bucket(\"exampleBucket\")\nexample_flow_log = aws.ec2.FlowLog(\"exampleFlowLog\",\n log_destination=example_bucket.arn,\n log_destination_type=\"s3\",\n traffic_type=\"ALL\",\n vpc_id=aws_vpc[\"example\"][\"id\"],\n destination_options=aws.ec2.FlowLogDestinationOptionsArgs(\n file_format=\"parquet\",\n per_hour_partition=True,\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleBucket = new Aws.S3.Bucket(\"exampleBucket\", new Aws.S3.BucketArgs\n {\n });\n var exampleFlowLog = new Aws.Ec2.FlowLog(\"exampleFlowLog\", new Aws.Ec2.FlowLogArgs\n {\n LogDestination = exampleBucket.Arn,\n LogDestinationType = \"s3\",\n TrafficType = \"ALL\",\n VpcId = aws_vpc.Example.Id,\n DestinationOptions = new Aws.Ec2.Inputs.FlowLogDestinationOptionsArgs\n {\n FileFormat = \"parquet\",\n PerHourPartition = true,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleBucket, err := s3.NewBucket(ctx, \"exampleBucket\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ec2.NewFlowLog(ctx, \"exampleFlowLog\", \u0026ec2.FlowLogArgs{\n\t\t\tLogDestination: exampleBucket.Arn,\n\t\t\tLogDestinationType: pulumi.String(\"s3\"),\n\t\t\tTrafficType: pulumi.String(\"ALL\"),\n\t\t\tVpcId: pulumi.Any(aws_vpc.Example.Id),\n\t\t\tDestinationOptions: \u0026ec2.FlowLogDestinationOptionsArgs{\n\t\t\t\tFileFormat: pulumi.String(\"parquet\"),\n\t\t\t\tPerHourPartition: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nFlow Logs can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:ec2/flowLog:FlowLog test_flow_log fl-1a2b3c4d\n```\n\n ", "inputProperties": { + "destinationOptions": { + "$ref": "#/types/aws:ec2/FlowLogDestinationOptions:FlowLogDestinationOptions", + "description": "Describes the destination options for a flow log. More details below.\n" + }, "eniId": { "description": "Elastic Network Interface ID to attach to\n", "type": "string" @@ -60370,6 +62490,10 @@ "description": "The ARN of the Flow Log.\n", "type": "string" }, + "destinationOptions": { + "$ref": "#/types/aws:ec2/FlowLogDestinationOptions:FlowLogDestinationOptions", + "description": "Describes the destination options for a flow log. More details below.\n" + }, "eniId": { "description": "Elastic Network Interface ID to attach to\n", "type": "string" @@ -60444,6 +62568,10 @@ "description": "The ARN of the Flow Log.\n", "type": "string" }, + "destinationOptions": { + "$ref": "#/types/aws:ec2/FlowLogDestinationOptions:FlowLogDestinationOptions", + "description": "Describes the destination options for a flow log. More details below.\n" + }, "eniId": { "description": "Elastic Network Interface ID to attach to\n", "type": "string" @@ -60640,6 +62768,10 @@ "description": "Placement Group to start the instance in.\n", "type": "string" }, + "placementPartitionNumber": { + "description": "The number of the partition the instance is in. Valid only if the `aws.ec2.PlacementGroup` resource's `strategy` argument is set to `\"partition\"`.\n", + "type": "integer" + }, "privateIp": { "description": "Private IP address to associate with the instance in a VPC.\n", "type": "string" @@ -60657,7 +62789,7 @@ }, "securityGroups": { "deprecationMessage": "Use of `securityGroups` is discouraged as it does not allow for changes and will force your instance to be replaced if changes are made. To avoid this, use `vpcSecurityGroupIds` which allows for updates.", - "description": "A list of security group names (EC2-Classic) or IDs (default VPC) to associate with.\n", + "description": "A list of security group names to associate with.\n", "items": { "type": "string" }, @@ -60852,6 +62984,10 @@ "description": "Placement Group to start the instance in.\n", "type": "string" }, + "placementPartitionNumber": { + "description": "The number of the partition the instance is in. Valid only if the `aws.ec2.PlacementGroup` resource's `strategy` argument is set to `\"partition\"`.\n", + "type": "integer" + }, "primaryNetworkInterfaceId": { "description": "The ID of the instance's primary network interface.\n", "type": "string" @@ -60885,7 +63021,7 @@ }, "securityGroups": { "deprecationMessage": "Use of `securityGroups` is discouraged as it does not allow for changes and will force your instance to be replaced if changes are made. To avoid this, use `vpcSecurityGroupIds` which allows for updates.", - "description": "A list of security group names (EC2-Classic) or IDs (default VPC) to associate with.\n", + "description": "A list of security group names to associate with.\n", "items": { "type": "string" }, @@ -60966,6 +63102,7 @@ "outpostArn", "passwordData", "placementGroup", + "placementPartitionNumber", "primaryNetworkInterfaceId", "privateDns", "privateIp", @@ -61139,6 +63276,10 @@ "description": "Placement Group to start the instance in.\n", "type": "string" }, + "placementPartitionNumber": { + "description": "The number of the partition the instance is in. Valid only if the `aws.ec2.PlacementGroup` resource's `strategy` argument is set to `\"partition\"`.\n", + "type": "integer" + }, "primaryNetworkInterfaceId": { "description": "The ID of the instance's primary network interface.\n", "type": "string" @@ -61172,7 +63313,7 @@ }, "securityGroups": { "deprecationMessage": "Use of `securityGroups` is discouraged as it does not allow for changes and will force your instance to be replaced if changes are made. To avoid this, use `vpcSecurityGroupIds` which allows for updates.", - "description": "A list of security group names (EC2-Classic) or IDs (default VPC) to associate with.\n", + "description": "A list of security group names to associate with.\n", "items": { "type": "string" }, @@ -61766,7 +63907,7 @@ } }, "aws:ec2/launchTemplate:LaunchTemplate": { - "description": "Provides an EC2 launch template resource. Can be used to create instances or auto scaling groups.\n\n\n## Import\n\nLaunch Templates can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:ec2/launchTemplate:LaunchTemplate web lt-12345678\n```\n\n ", + "description": "Provides an EC2 launch template resource. Can be used to create instances or auto scaling groups.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst foo = new aws.ec2.LaunchTemplate(\"foo\", {\n blockDeviceMappings: [{\n deviceName: \"/dev/sda1\",\n ebs: {\n volumeSize: 20,\n },\n }],\n capacityReservationSpecification: {\n capacityReservationPreference: \"open\",\n },\n cpuOptions: {\n coreCount: 4,\n threadsPerCore: 2,\n },\n creditSpecification: {\n cpuCredits: \"standard\",\n },\n disableApiTermination: true,\n ebsOptimized: true,\n elasticGpuSpecifications: [{\n type: \"test\",\n }],\n elasticInferenceAccelerator: {\n type: \"eia1.medium\",\n },\n iamInstanceProfile: {\n name: \"test\",\n },\n imageId: \"ami-test\",\n instanceInitiatedShutdownBehavior: \"terminate\",\n instanceMarketOptions: {\n marketType: \"spot\",\n },\n instanceType: \"t2.micro\",\n kernelId: \"test\",\n keyName: \"test\",\n licenseSpecifications: [{\n licenseConfigurationArn: \"arn:aws:license-manager:eu-west-1:123456789012:license-configuration:lic-0123456789abcdef0123456789abcdef\",\n }],\n metadataOptions: {\n httpEndpoint: \"enabled\",\n httpTokens: \"required\",\n httpPutResponseHopLimit: 1,\n },\n monitoring: {\n enabled: true,\n },\n networkInterfaces: [{\n associatePublicIpAddress: true,\n }],\n placement: {\n availabilityZone: \"us-west-2a\",\n },\n ramDiskId: \"test\",\n vpcSecurityGroupIds: [\"sg-12345678\"],\n tagSpecifications: [{\n resourceType: \"instance\",\n tags: {\n Name: \"test\",\n },\n }],\n userData: Buffer.from(fs.readFileSync(`${path.module}/example.sh`), 'binary').toString('base64'),\n});\n```\n```python\nimport pulumi\nimport base64\nimport pulumi_aws as aws\n\nfoo = aws.ec2.LaunchTemplate(\"foo\",\n block_device_mappings=[aws.ec2.LaunchTemplateBlockDeviceMappingArgs(\n device_name=\"/dev/sda1\",\n ebs=aws.ec2.LaunchTemplateBlockDeviceMappingEbsArgs(\n volume_size=20,\n ),\n )],\n capacity_reservation_specification=aws.ec2.LaunchTemplateCapacityReservationSpecificationArgs(\n capacity_reservation_preference=\"open\",\n ),\n cpu_options=aws.ec2.LaunchTemplateCpuOptionsArgs(\n core_count=4,\n threads_per_core=2,\n ),\n credit_specification=aws.ec2.LaunchTemplateCreditSpecificationArgs(\n cpu_credits=\"standard\",\n ),\n disable_api_termination=True,\n ebs_optimized=\"true\",\n elastic_gpu_specifications=[aws.ec2.LaunchTemplateElasticGpuSpecificationArgs(\n type=\"test\",\n )],\n elastic_inference_accelerator=aws.ec2.LaunchTemplateElasticInferenceAcceleratorArgs(\n type=\"eia1.medium\",\n ),\n iam_instance_profile=aws.ec2.LaunchTemplateIamInstanceProfileArgs(\n name=\"test\",\n ),\n image_id=\"ami-test\",\n instance_initiated_shutdown_behavior=\"terminate\",\n instance_market_options=aws.ec2.LaunchTemplateInstanceMarketOptionsArgs(\n market_type=\"spot\",\n ),\n instance_type=\"t2.micro\",\n kernel_id=\"test\",\n key_name=\"test\",\n license_specifications=[aws.ec2.LaunchTemplateLicenseSpecificationArgs(\n license_configuration_arn=\"arn:aws:license-manager:eu-west-1:123456789012:license-configuration:lic-0123456789abcdef0123456789abcdef\",\n )],\n metadata_options=aws.ec2.LaunchTemplateMetadataOptionsArgs(\n http_endpoint=\"enabled\",\n http_tokens=\"required\",\n http_put_response_hop_limit=1,\n ),\n monitoring=aws.ec2.LaunchTemplateMonitoringArgs(\n enabled=True,\n ),\n network_interfaces=[aws.ec2.LaunchTemplateNetworkInterfaceArgs(\n associate_public_ip_address=\"true\",\n )],\n placement=aws.ec2.LaunchTemplatePlacementArgs(\n availability_zone=\"us-west-2a\",\n ),\n ram_disk_id=\"test\",\n vpc_security_group_ids=[\"sg-12345678\"],\n tag_specifications=[aws.ec2.LaunchTemplateTagSpecificationArgs(\n resource_type=\"instance\",\n tags={\n \"Name\": \"test\",\n },\n )],\n user_data=(lambda path: base64.b64encode(open(path).read().encode()).decode())(f\"{path['module']}/example.sh\"))\n```\n```csharp\nusing System;\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n\tprivate static string ReadFileBase64(string path) {\n\t\treturn Convert.ToBase64String(System.Text.UTF8.GetBytes(File.ReadAllText(path)))\n\t}\n\n public MyStack()\n {\n var foo = new Aws.Ec2.LaunchTemplate(\"foo\", new Aws.Ec2.LaunchTemplateArgs\n {\n BlockDeviceMappings = \n {\n new Aws.Ec2.Inputs.LaunchTemplateBlockDeviceMappingArgs\n {\n DeviceName = \"/dev/sda1\",\n Ebs = new Aws.Ec2.Inputs.LaunchTemplateBlockDeviceMappingEbsArgs\n {\n VolumeSize = 20,\n },\n },\n },\n CapacityReservationSpecification = new Aws.Ec2.Inputs.LaunchTemplateCapacityReservationSpecificationArgs\n {\n CapacityReservationPreference = \"open\",\n },\n CpuOptions = new Aws.Ec2.Inputs.LaunchTemplateCpuOptionsArgs\n {\n CoreCount = 4,\n ThreadsPerCore = 2,\n },\n CreditSpecification = new Aws.Ec2.Inputs.LaunchTemplateCreditSpecificationArgs\n {\n CpuCredits = \"standard\",\n },\n DisableApiTermination = true,\n EbsOptimized = \"true\",\n ElasticGpuSpecifications = \n {\n new Aws.Ec2.Inputs.LaunchTemplateElasticGpuSpecificationArgs\n {\n Type = \"test\",\n },\n },\n ElasticInferenceAccelerator = new Aws.Ec2.Inputs.LaunchTemplateElasticInferenceAcceleratorArgs\n {\n Type = \"eia1.medium\",\n },\n IamInstanceProfile = new Aws.Ec2.Inputs.LaunchTemplateIamInstanceProfileArgs\n {\n Name = \"test\",\n },\n ImageId = \"ami-test\",\n InstanceInitiatedShutdownBehavior = \"terminate\",\n InstanceMarketOptions = new Aws.Ec2.Inputs.LaunchTemplateInstanceMarketOptionsArgs\n {\n MarketType = \"spot\",\n },\n InstanceType = \"t2.micro\",\n KernelId = \"test\",\n KeyName = \"test\",\n LicenseSpecifications = \n {\n new Aws.Ec2.Inputs.LaunchTemplateLicenseSpecificationArgs\n {\n LicenseConfigurationArn = \"arn:aws:license-manager:eu-west-1:123456789012:license-configuration:lic-0123456789abcdef0123456789abcdef\",\n },\n },\n MetadataOptions = new Aws.Ec2.Inputs.LaunchTemplateMetadataOptionsArgs\n {\n HttpEndpoint = \"enabled\",\n HttpTokens = \"required\",\n HttpPutResponseHopLimit = 1,\n },\n Monitoring = new Aws.Ec2.Inputs.LaunchTemplateMonitoringArgs\n {\n Enabled = true,\n },\n NetworkInterfaces = \n {\n new Aws.Ec2.Inputs.LaunchTemplateNetworkInterfaceArgs\n {\n AssociatePublicIpAddress = \"true\",\n },\n },\n Placement = new Aws.Ec2.Inputs.LaunchTemplatePlacementArgs\n {\n AvailabilityZone = \"us-west-2a\",\n },\n RamDiskId = \"test\",\n VpcSecurityGroupIds = \n {\n \"sg-12345678\",\n },\n TagSpecifications = \n {\n new Aws.Ec2.Inputs.LaunchTemplateTagSpecificationArgs\n {\n ResourceType = \"instance\",\n Tags = \n {\n { \"Name\", \"test\" },\n },\n },\n },\n UserData = ReadFileBase64($\"{path.Module}/example.sh\"),\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc filebase64OrPanic(path string) pulumi.StringPtrInput {\n\tif fileData, err := ioutil.ReadFile(path); err == nil {\n\t\treturn pulumi.String(base64.StdEncoding.EncodeToString(fileData[:]))\n\t} else {\n\t\tpanic(err.Error())\n\t}\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ec2.NewLaunchTemplate(ctx, \"foo\", \u0026ec2.LaunchTemplateArgs{\n\t\t\tBlockDeviceMappings: ec2.LaunchTemplateBlockDeviceMappingArray{\n\t\t\t\t\u0026ec2.LaunchTemplateBlockDeviceMappingArgs{\n\t\t\t\t\tDeviceName: pulumi.String(\"/dev/sda1\"),\n\t\t\t\t\tEbs: \u0026ec2.LaunchTemplateBlockDeviceMappingEbsArgs{\n\t\t\t\t\t\tVolumeSize: pulumi.Int(20),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCapacityReservationSpecification: \u0026ec2.LaunchTemplateCapacityReservationSpecificationArgs{\n\t\t\t\tCapacityReservationPreference: pulumi.String(\"open\"),\n\t\t\t},\n\t\t\tCpuOptions: \u0026ec2.LaunchTemplateCpuOptionsArgs{\n\t\t\t\tCoreCount: pulumi.Int(4),\n\t\t\t\tThreadsPerCore: pulumi.Int(2),\n\t\t\t},\n\t\t\tCreditSpecification: \u0026ec2.LaunchTemplateCreditSpecificationArgs{\n\t\t\t\tCpuCredits: pulumi.String(\"standard\"),\n\t\t\t},\n\t\t\tDisableApiTermination: pulumi.Bool(true),\n\t\t\tEbsOptimized: pulumi.String(\"true\"),\n\t\t\tElasticGpuSpecifications: ec2.LaunchTemplateElasticGpuSpecificationArray{\n\t\t\t\t\u0026ec2.LaunchTemplateElasticGpuSpecificationArgs{\n\t\t\t\t\tType: pulumi.String(\"test\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tElasticInferenceAccelerator: \u0026ec2.LaunchTemplateElasticInferenceAcceleratorArgs{\n\t\t\t\tType: pulumi.String(\"eia1.medium\"),\n\t\t\t},\n\t\t\tIamInstanceProfile: \u0026ec2.LaunchTemplateIamInstanceProfileArgs{\n\t\t\t\tName: pulumi.String(\"test\"),\n\t\t\t},\n\t\t\tImageId: pulumi.String(\"ami-test\"),\n\t\t\tInstanceInitiatedShutdownBehavior: pulumi.String(\"terminate\"),\n\t\t\tInstanceMarketOptions: \u0026ec2.LaunchTemplateInstanceMarketOptionsArgs{\n\t\t\t\tMarketType: pulumi.String(\"spot\"),\n\t\t\t},\n\t\t\tInstanceType: pulumi.String(\"t2.micro\"),\n\t\t\tKernelId: pulumi.String(\"test\"),\n\t\t\tKeyName: pulumi.String(\"test\"),\n\t\t\tLicenseSpecifications: ec2.LaunchTemplateLicenseSpecificationArray{\n\t\t\t\t\u0026ec2.LaunchTemplateLicenseSpecificationArgs{\n\t\t\t\t\tLicenseConfigurationArn: pulumi.String(\"arn:aws:license-manager:eu-west-1:123456789012:license-configuration:lic-0123456789abcdef0123456789abcdef\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tMetadataOptions: \u0026ec2.LaunchTemplateMetadataOptionsArgs{\n\t\t\t\tHttpEndpoint: pulumi.String(\"enabled\"),\n\t\t\t\tHttpTokens: pulumi.String(\"required\"),\n\t\t\t\tHttpPutResponseHopLimit: pulumi.Int(1),\n\t\t\t},\n\t\t\tMonitoring: \u0026ec2.LaunchTemplateMonitoringArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t\tNetworkInterfaces: ec2.LaunchTemplateNetworkInterfaceArray{\n\t\t\t\t\u0026ec2.LaunchTemplateNetworkInterfaceArgs{\n\t\t\t\t\tAssociatePublicIpAddress: pulumi.String(\"true\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPlacement: \u0026ec2.LaunchTemplatePlacementArgs{\n\t\t\t\tAvailabilityZone: pulumi.String(\"us-west-2a\"),\n\t\t\t},\n\t\t\tRamDiskId: pulumi.String(\"test\"),\n\t\t\tVpcSecurityGroupIds: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"sg-12345678\"),\n\t\t\t},\n\t\t\tTagSpecifications: ec2.LaunchTemplateTagSpecificationArray{\n\t\t\t\t\u0026ec2.LaunchTemplateTagSpecificationArgs{\n\t\t\t\t\tResourceType: pulumi.String(\"instance\"),\n\t\t\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\t\t\"Name\": pulumi.String(\"test\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tUserData: filebase64OrPanic(fmt.Sprintf(\"%v%v\", path.Module, \"/example.sh\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nLaunch Templates can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:ec2/launchTemplate:LaunchTemplate web lt-12345678\n```\n\n ", "inputProperties": { "blockDeviceMappings": { "description": "Specify volumes to attach to the instance besides the volumes specified by the AMI.\nSee Block Devices below for details.\n", @@ -62481,7 +64622,7 @@ } }, "aws:ec2/managedPrefixList:ManagedPrefixList": { - "description": "Provides a managed prefix list resource.\n\n\u003e **NOTE on `max_entries`:** When you reference a Prefix List in a resource,\nthe maximum number of entries for the prefix lists counts as the same number of rules\nor entries for the resource. For example, if you create a prefix list with a maximum\nof 20 entries and you reference that prefix list in a security group rule, this counts\nas 20 rules for the security group.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.ec2.ManagedPrefixList(\"example\", {\n addressFamily: \"IPv4\",\n maxEntries: 5,\n entries: [\n {\n cidr: aws_vpc.example.cidr_block,\n description: \"Primary\",\n },\n {\n cidr: aws_vpc_ipv4_cidr_block_association.example.cidr_block,\n description: \"Secondary\",\n },\n ],\n tags: {\n Env: \"live\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.ec2.ManagedPrefixList(\"example\",\n address_family=\"IPv4\",\n max_entries=5,\n entries=[\n aws.ec2.ManagedPrefixListEntryArgs(\n cidr=aws_vpc[\"example\"][\"cidr_block\"],\n description=\"Primary\",\n ),\n aws.ec2.ManagedPrefixListEntryArgs(\n cidr=aws_vpc_ipv4_cidr_block_association[\"example\"][\"cidr_block\"],\n description=\"Secondary\",\n ),\n ],\n tags={\n \"Env\": \"live\",\n })\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Ec2.ManagedPrefixList(\"example\", new Aws.Ec2.ManagedPrefixListArgs\n {\n AddressFamily = \"IPv4\",\n MaxEntries = 5,\n Entries = \n {\n new Aws.Ec2.Inputs.ManagedPrefixListEntryArgs\n {\n Cidr = aws_vpc.Example.Cidr_block,\n Description = \"Primary\",\n },\n new Aws.Ec2.Inputs.ManagedPrefixListEntryArgs\n {\n Cidr = aws_vpc_ipv4_cidr_block_association.Example.Cidr_block,\n Description = \"Secondary\",\n },\n },\n Tags = \n {\n { \"Env\", \"live\" },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ec2.NewManagedPrefixList(ctx, \"example\", \u0026ec2.ManagedPrefixListArgs{\n\t\t\tAddressFamily: pulumi.String(\"IPv4\"),\n\t\t\tMaxEntries: pulumi.Int(5),\n\t\t\tEntries: ec2.ManagedPrefixListEntryArray{\n\t\t\t\t\u0026ec2.ManagedPrefixListEntryArgs{\n\t\t\t\t\tCidr: pulumi.Any(aws_vpc.Example.Cidr_block),\n\t\t\t\t\tDescription: pulumi.String(\"Primary\"),\n\t\t\t\t},\n\t\t\t\t\u0026ec2.ManagedPrefixListEntryArgs{\n\t\t\t\t\tCidr: pulumi.Any(aws_vpc_ipv4_cidr_block_association.Example.Cidr_block),\n\t\t\t\t\tDescription: pulumi.String(\"Secondary\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Env\": pulumi.String(\"live\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nPrefix Lists can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:ec2/managedPrefixList:ManagedPrefixList default pl-0570a1d2d725c16be\n```\n\n ", + "description": "\n\n\n## Import\n\nPrefix Lists can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:ec2/managedPrefixList:ManagedPrefixList default pl-0570a1d2d725c16be\n```\n\n ", "inputProperties": { "addressFamily": { "description": "Address family (`IPv4` or `IPv6`) of this prefix list.\n", @@ -62557,6 +64698,7 @@ "required": [ "addressFamily", "arn", + "entries", "maxEntries", "name", "ownerId", @@ -62617,6 +64759,63 @@ "type": "object" } }, + "aws:ec2/managedPrefixListEntry:ManagedPrefixListEntry": { + "description": "\n\n\n## Import\n\nPrefix List Entries can be imported using the `prefix_list_id` and `cidr` separated by a `,`, e.g.\n\n```sh\n $ pulumi import aws:ec2/managedPrefixListEntry:ManagedPrefixListEntry default pl-0570a1d2d725c16be,10.0.3.0/24\n```\n\n ", + "inputProperties": { + "cidr": { + "description": "CIDR block of this entry.\n", + "type": "string" + }, + "description": { + "description": "Description of this entry. Due to API limitations, updating only the description of an entry requires recreating the entry.\n", + "type": "string" + }, + "prefixListId": { + "description": "CIDR block of this entry.\n", + "type": "string" + } + }, + "properties": { + "cidr": { + "description": "CIDR block of this entry.\n", + "type": "string" + }, + "description": { + "description": "Description of this entry. Due to API limitations, updating only the description of an entry requires recreating the entry.\n", + "type": "string" + }, + "prefixListId": { + "description": "CIDR block of this entry.\n", + "type": "string" + } + }, + "required": [ + "cidr", + "prefixListId" + ], + "requiredInputs": [ + "cidr", + "prefixListId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering ManagedPrefixListEntry resources.\n", + "properties": { + "cidr": { + "description": "CIDR block of this entry.\n", + "type": "string" + }, + "description": { + "description": "Description of this entry. Due to API limitations, updating only the description of an entry requires recreating the entry.\n", + "type": "string" + }, + "prefixListId": { + "description": "CIDR block of this entry.\n", + "type": "string" + } + }, + "type": "object" + } + }, "aws:ec2/natGateway:NatGateway": { "description": "Provides a resource to create a VPC NAT Gateway.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Public NAT\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.ec2.NatGateway(\"example\", {\n allocationId: aws_eip.example.id,\n subnetId: aws_subnet.example.id,\n tags: {\n Name: \"gw NAT\",\n },\n}, {\n dependsOn: [aws_internet_gateway.example],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.ec2.NatGateway(\"example\",\n allocation_id=aws_eip[\"example\"][\"id\"],\n subnet_id=aws_subnet[\"example\"][\"id\"],\n tags={\n \"Name\": \"gw NAT\",\n },\n opts=pulumi.ResourceOptions(depends_on=[aws_internet_gateway[\"example\"]]))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Ec2.NatGateway(\"example\", new Aws.Ec2.NatGatewayArgs\n {\n AllocationId = aws_eip.Example.Id,\n SubnetId = aws_subnet.Example.Id,\n Tags = \n {\n { \"Name\", \"gw NAT\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n aws_internet_gateway.Example,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ec2.NewNatGateway(ctx, \"example\", \u0026ec2.NatGatewayArgs{\n\t\t\tAllocationId: pulumi.Any(aws_eip.Example.Id),\n\t\t\tSubnetId: pulumi.Any(aws_subnet.Example.Id),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Name\": pulumi.String(\"gw NAT\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\taws_internet_gateway.Example,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Private NAT\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.ec2.NatGateway(\"example\", {\n connectivityType: \"private\",\n subnetId: aws_subnet.example.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.ec2.NatGateway(\"example\",\n connectivity_type=\"private\",\n subnet_id=aws_subnet[\"example\"][\"id\"])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Ec2.NatGateway(\"example\", new Aws.Ec2.NatGatewayArgs\n {\n ConnectivityType = \"private\",\n SubnetId = aws_subnet.Example.Id,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ec2.NewNatGateway(ctx, \"example\", \u0026ec2.NatGatewayArgs{\n\t\t\tConnectivityType: pulumi.String(\"private\"),\n\t\t\tSubnetId: pulumi.Any(aws_subnet.Example.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nNAT Gateways can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:ec2/natGateway:NatGateway private_gw nat-05dba92075d71c408\n```\n\n ", "inputProperties": { @@ -63482,6 +65681,10 @@ "description": "The name of the placement group.\n", "type": "string" }, + "partitionCount": { + "description": "The number of partitions to create in the\nplacement group. Can only be specified when the `strategy` is set to\n`\"partition\"`. Valid values are 1 - 7 (default is `2`).\n", + "type": "integer" + }, "strategy": { "description": "The placement strategy. Can be `\"cluster\"`, `\"partition\"` or `\"spread\"`.\n", "oneOf": [ @@ -63512,6 +65715,10 @@ "description": "The name of the placement group.\n", "type": "string" }, + "partitionCount": { + "description": "The number of partitions to create in the\nplacement group. Can only be specified when the `strategy` is set to\n`\"partition\"`. Valid values are 1 - 7 (default is `2`).\n", + "type": "integer" + }, "placementGroupId": { "description": "The ID of the placement group.\n", "type": "string" @@ -63556,6 +65763,10 @@ "description": "The name of the placement group.\n", "type": "string" }, + "partitionCount": { + "description": "The number of partitions to create in the\nplacement group. Can only be specified when the `strategy` is set to\n`\"partition\"`. Valid values are 1 - 7 (default is `2`).\n", + "type": "integer" + }, "placementGroupId": { "description": "The ID of the placement group.\n", "type": "string" @@ -65017,6 +67228,10 @@ "description": "Placement Group to start the instance in.\n", "type": "string" }, + "placementPartitionNumber": { + "description": "The number of the partition the instance is in. Valid only if the `aws.ec2.PlacementGroup` resource's `strategy` argument is set to `\"partition\"`.\n", + "type": "integer" + }, "privateIp": { "description": "Private IP address to associate with the instance in a VPC.\n", "type": "string" @@ -65033,7 +67248,7 @@ "type": "array" }, "securityGroups": { - "description": "A list of security group names (EC2-Classic) or IDs (default VPC) to associate with.\n", + "description": "A list of security group names to associate with.\n", "items": { "type": "string" }, @@ -65247,6 +67462,10 @@ "description": "Placement Group to start the instance in.\n", "type": "string" }, + "placementPartitionNumber": { + "description": "The number of the partition the instance is in. Valid only if the `aws.ec2.PlacementGroup` resource's `strategy` argument is set to `\"partition\"`.\n", + "type": "integer" + }, "primaryNetworkInterfaceId": { "type": "string" }, @@ -65278,7 +67497,7 @@ "type": "array" }, "securityGroups": { - "description": "A list of security group names (EC2-Classic) or IDs (default VPC) to associate with.\n", + "description": "A list of security group names to associate with.\n", "items": { "type": "string" }, @@ -65392,6 +67611,7 @@ "outpostArn", "passwordData", "placementGroup", + "placementPartitionNumber", "primaryNetworkInterfaceId", "privateDns", "privateIp", @@ -65561,6 +67781,10 @@ "description": "Placement Group to start the instance in.\n", "type": "string" }, + "placementPartitionNumber": { + "description": "The number of the partition the instance is in. Valid only if the `aws.ec2.PlacementGroup` resource's `strategy` argument is set to `\"partition\"`.\n", + "type": "integer" + }, "primaryNetworkInterfaceId": { "type": "string" }, @@ -65592,7 +67816,7 @@ "type": "array" }, "securityGroups": { - "description": "A list of security group names (EC2-Classic) or IDs (default VPC) to associate with.\n", + "description": "A list of security group names to associate with.\n", "items": { "type": "string" }, @@ -66566,6 +68790,10 @@ "description": "Set this to true if you do not wish\nto detach the volume from the instance to which it is attached at destroy\ntime, and instead just remove the attachment from this provider state. This is\nuseful when destroying an instance which has volumes created by some other\nmeans attached.\n", "type": "boolean" }, + "stopInstanceBeforeDetaching": { + "description": "Set this to true to ensure that the target instance is stopped\nbefore trying to detach the volume. Stops the instance, if it is not already stopped.\n", + "type": "boolean" + }, "volumeId": { "description": "ID of the Volume to be attached\n", "type": "string" @@ -66588,6 +68816,10 @@ "description": "Set this to true if you do not wish\nto detach the volume from the instance to which it is attached at destroy\ntime, and instead just remove the attachment from this provider state. This is\nuseful when destroying an instance which has volumes created by some other\nmeans attached.\n", "type": "boolean" }, + "stopInstanceBeforeDetaching": { + "description": "Set this to true to ensure that the target instance is stopped\nbefore trying to detach the volume. Stops the instance, if it is not already stopped.\n", + "type": "boolean" + }, "volumeId": { "description": "ID of the Volume to be attached\n", "type": "string" @@ -66622,6 +68854,10 @@ "description": "Set this to true if you do not wish\nto detach the volume from the instance to which it is attached at destroy\ntime, and instead just remove the attachment from this provider state. This is\nuseful when destroying an instance which has volumes created by some other\nmeans attached.\n", "type": "boolean" }, + "stopInstanceBeforeDetaching": { + "description": "Set this to true to ensure that the target instance is stopped\nbefore trying to detach the volume. Stops the instance, if it is not already stopped.\n", + "type": "boolean" + }, "volumeId": { "description": "ID of the Volume to be attached\n", "type": "string" @@ -69402,7 +71638,7 @@ "description": "Information about the client connection logging options.\n" }, "description": { - "description": "Name of the repository.\n", + "description": "A brief description of the Client VPN endpoint.\n", "type": "string" }, "dnsServers": { @@ -69456,7 +71692,7 @@ "description": "Information about the client connection logging options.\n" }, "description": { - "description": "Name of the repository.\n", + "description": "A brief description of the Client VPN endpoint.\n", "type": "string" }, "dnsName": { @@ -69542,7 +71778,7 @@ "description": "Information about the client connection logging options.\n" }, "description": { - "description": "Name of the repository.\n", + "description": "A brief description of the Client VPN endpoint.\n", "type": "string" }, "dnsName": { @@ -71093,7 +73329,7 @@ } }, "aws:ecrpublic/repository:Repository": { - "description": "Provides a Public Elastic Container Registry Repository.\n\n\u003e **NOTE:** This resource can only be used with `us-east-1` region.\n\n\n## Import\n\nECR Public Repositories can be imported using the `repository_name`, e.g.\n\n```sh\n $ pulumi import aws:ecrpublic/repository:Repository example example\n```\n\n ", + "description": "Provides a Public Elastic Container Registry Repository.\n\n\u003e **NOTE:** This resource can only be used with `us-east-1` region.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst usEast1 = new aws.Provider(\"usEast1\", {region: \"us-east-1\"});\nconst foo = new aws.ecrpublic.Repository(\"foo\", {\n repositoryName: \"bar\",\n catalogData: {\n aboutText: \"About Text\",\n architectures: [\"ARM\"],\n description: \"Description\",\n logoImageBlob: Buffer.from(fs.readFileSync(image.png), 'binary').toString('base64'),\n operatingSystems: [\"Linux\"],\n usageText: \"Usage Text\",\n },\n}, {\n provider: aws.us_east_1,\n});\n```\n```python\nimport pulumi\nimport base64\nimport pulumi_aws as aws\nimport pulumi_pulumi as pulumi\n\nus_east1 = pulumi.providers.Aws(\"usEast1\", region=\"us-east-1\")\nfoo = aws.ecrpublic.Repository(\"foo\",\n repository_name=\"bar\",\n catalog_data=aws.ecrpublic.RepositoryCatalogDataArgs(\n about_text=\"About Text\",\n architectures=[\"ARM\"],\n description=\"Description\",\n logo_image_blob=(lambda path: base64.b64encode(open(path).read().encode()).decode())(image[\"png\"]),\n operating_systems=[\"Linux\"],\n usage_text=\"Usage Text\",\n ),\n opts=pulumi.ResourceOptions(provider=aws[\"us_east_1\"]))\n```\n```csharp\nusing System;\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n\tprivate static string ReadFileBase64(string path) {\n\t\treturn Convert.ToBase64String(System.Text.UTF8.GetBytes(File.ReadAllText(path)))\n\t}\n\n public MyStack()\n {\n var usEast1 = new Aws.Provider(\"usEast1\", new Aws.ProviderArgs\n {\n Region = \"us-east-1\",\n });\n var foo = new Aws.EcrPublic.Repository(\"foo\", new Aws.EcrPublic.RepositoryArgs\n {\n RepositoryName = \"bar\",\n CatalogData = new Aws.EcrPublic.Inputs.RepositoryCatalogDataArgs\n {\n AboutText = \"About Text\",\n Architectures = \n {\n \"ARM\",\n },\n Description = \"Description\",\n LogoImageBlob = ReadFileBase64(image.Png),\n OperatingSystems = \n {\n \"Linux\",\n },\n UsageText = \"Usage Text\",\n },\n }, new CustomResourceOptions\n {\n Provider = aws.Us_east_1,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"encoding/base64\"\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ecrpublic\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/providers\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc filebase64OrPanic(path string) pulumi.StringPtrInput {\n\tif fileData, err := ioutil.ReadFile(path); err == nil {\n\t\treturn pulumi.String(base64.StdEncoding.EncodeToString(fileData[:]))\n\t} else {\n\t\tpanic(err.Error())\n\t}\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := providers.Newaws(ctx, \"usEast1\", \u0026providers.awsArgs{\n\t\t\tRegion: \"us-east-1\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ecrpublic.NewRepository(ctx, \"foo\", \u0026ecrpublic.RepositoryArgs{\n\t\t\tRepositoryName: pulumi.String(\"bar\"),\n\t\t\tCatalogData: \u0026ecrpublic.RepositoryCatalogDataArgs{\n\t\t\t\tAboutText: pulumi.String(\"About Text\"),\n\t\t\t\tArchitectures: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ARM\"),\n\t\t\t\t},\n\t\t\t\tDescription: pulumi.String(\"Description\"),\n\t\t\t\tLogoImageBlob: filebase64OrPanic(image.Png),\n\t\t\t\tOperatingSystems: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"Linux\"),\n\t\t\t\t},\n\t\t\t\tUsageText: pulumi.String(\"Usage Text\"),\n\t\t\t},\n\t\t}, pulumi.Provider(aws.Us_east_1))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nECR Public Repositories can be imported using the `repository_name`, e.g.\n\n```sh\n $ pulumi import aws:ecrpublic/repository:Repository example example\n```\n\n ", "inputProperties": { "catalogData": { "$ref": "#/types/aws:ecrpublic/RepositoryCatalogData:RepositoryCatalogData", @@ -71837,7 +74073,7 @@ } }, "aws:ecs/taskDefinition:TaskDefinition": { - "description": "Manages a revision of an ECS task definition to be used in `aws.ecs.Service`.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic Example\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst service = new aws.ecs.TaskDefinition(\"service\", {\n family: \"service\",\n containerDefinitions: JSON.stringify([\n {\n name: \"first\",\n image: \"service-first\",\n cpu: 10,\n memory: 512,\n essential: true,\n portMappings: [{\n containerPort: 80,\n hostPort: 80,\n }],\n },\n {\n name: \"second\",\n image: \"service-second\",\n cpu: 10,\n memory: 256,\n essential: true,\n portMappings: [{\n containerPort: 443,\n hostPort: 443,\n }],\n },\n ]),\n volumes: [{\n name: \"service-storage\",\n hostPath: \"/ecs/service-storage\",\n }],\n placementConstraints: [{\n type: \"memberOf\",\n expression: \"attribute:ecs.availability-zone in [us-west-2a, us-west-2b]\",\n }],\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_aws as aws\n\nservice = aws.ecs.TaskDefinition(\"service\",\n family=\"service\",\n container_definitions=json.dumps([\n {\n \"name\": \"first\",\n \"image\": \"service-first\",\n \"cpu\": 10,\n \"memory\": 512,\n \"essential\": True,\n \"portMappings\": [{\n \"containerPort\": 80,\n \"hostPort\": 80,\n }],\n },\n {\n \"name\": \"second\",\n \"image\": \"service-second\",\n \"cpu\": 10,\n \"memory\": 256,\n \"essential\": True,\n \"portMappings\": [{\n \"containerPort\": 443,\n \"hostPort\": 443,\n }],\n },\n ]),\n volumes=[aws.ecs.TaskDefinitionVolumeArgs(\n name=\"service-storage\",\n host_path=\"/ecs/service-storage\",\n )],\n placement_constraints=[aws.ecs.TaskDefinitionPlacementConstraintArgs(\n type=\"memberOf\",\n expression=\"attribute:ecs.availability-zone in [us-west-2a, us-west-2b]\",\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var service = new Aws.Ecs.TaskDefinition(\"service\", new Aws.Ecs.TaskDefinitionArgs\n {\n Family = \"service\",\n ContainerDefinitions = JsonSerializer.Serialize(new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n { \"name\", \"first\" },\n { \"image\", \"service-first\" },\n { \"cpu\", 10 },\n { \"memory\", 512 },\n { \"essential\", true },\n { \"portMappings\", new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n { \"containerPort\", 80 },\n { \"hostPort\", 80 },\n },\n }\n },\n },\n new Dictionary\u003cstring, object?\u003e\n {\n { \"name\", \"second\" },\n { \"image\", \"service-second\" },\n { \"cpu\", 10 },\n { \"memory\", 256 },\n { \"essential\", true },\n { \"portMappings\", new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n { \"containerPort\", 443 },\n { \"hostPort\", 443 },\n },\n }\n },\n },\n }\n ),\n Volumes = \n {\n new Aws.Ecs.Inputs.TaskDefinitionVolumeArgs\n {\n Name = \"service-storage\",\n HostPath = \"/ecs/service-storage\",\n },\n },\n PlacementConstraints = \n {\n new Aws.Ecs.Inputs.TaskDefinitionPlacementConstraintArgs\n {\n Type = \"memberOf\",\n Expression = \"attribute:ecs.availability-zone in [us-west-2a, us-west-2b]\",\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ecs\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal([]interface{}{\n\t\t\tmap[string]interface{}{\n\t\t\t\t\"name\": \"first\",\n\t\t\t\t\"image\": \"service-first\",\n\t\t\t\t\"cpu\": 10,\n\t\t\t\t\"memory\": 512,\n\t\t\t\t\"essential\": true,\n\t\t\t\t\"portMappings\": []map[string]interface{}{\n\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\"containerPort\": 80,\n\t\t\t\t\t\t\"hostPort\": 80,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tmap[string]interface{}{\n\t\t\t\t\"name\": \"second\",\n\t\t\t\t\"image\": \"service-second\",\n\t\t\t\t\"cpu\": 10,\n\t\t\t\t\"memory\": 256,\n\t\t\t\t\"essential\": true,\n\t\t\t\t\"portMappings\": []map[string]interface{}{\n\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\"containerPort\": 443,\n\t\t\t\t\t\t\"hostPort\": 443,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err := ecs.NewTaskDefinition(ctx, \"service\", \u0026ecs.TaskDefinitionArgs{\n\t\t\tFamily: pulumi.String(\"service\"),\n\t\t\tContainerDefinitions: pulumi.String(json0),\n\t\t\tVolumes: ecs.TaskDefinitionVolumeArray{\n\t\t\t\t\u0026ecs.TaskDefinitionVolumeArgs{\n\t\t\t\t\tName: pulumi.String(\"service-storage\"),\n\t\t\t\t\tHostPath: pulumi.String(\"/ecs/service-storage\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPlacementConstraints: ecs.TaskDefinitionPlacementConstraintArray{\n\t\t\t\t\u0026ecs.TaskDefinitionPlacementConstraintArgs{\n\t\t\t\t\tType: pulumi.String(\"memberOf\"),\n\t\t\t\t\tExpression: pulumi.String(\"attribute:ecs.availability-zone in [us-west-2a, us-west-2b]\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### With AppMesh Proxy\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst service = new aws.ecs.TaskDefinition(\"service\", {\n family: \"service\",\n containerDefinitions: fs.readFileSync(\"task-definitions/service.json\"),\n proxyConfiguration: {\n type: \"APPMESH\",\n containerName: \"applicationContainerName\",\n properties: {\n AppPorts: \"8080\",\n EgressIgnoredIPs: \"169.254.170.2,169.254.169.254\",\n IgnoredUID: \"1337\",\n ProxyEgressPort: 15001,\n ProxyIngressPort: 15000,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nservice = aws.ecs.TaskDefinition(\"service\",\n family=\"service\",\n container_definitions=(lambda path: open(path).read())(\"task-definitions/service.json\"),\n proxy_configuration=aws.ecs.TaskDefinitionProxyConfigurationArgs(\n type=\"APPMESH\",\n container_name=\"applicationContainerName\",\n properties={\n \"AppPorts\": \"8080\",\n \"EgressIgnoredIPs\": \"169.254.170.2,169.254.169.254\",\n \"IgnoredUID\": \"1337\",\n \"ProxyEgressPort\": \"15001\",\n \"ProxyIngressPort\": \"15000\",\n },\n ))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var service = new Aws.Ecs.TaskDefinition(\"service\", new Aws.Ecs.TaskDefinitionArgs\n {\n Family = \"service\",\n ContainerDefinitions = File.ReadAllText(\"task-definitions/service.json\"),\n ProxyConfiguration = new Aws.Ecs.Inputs.TaskDefinitionProxyConfigurationArgs\n {\n Type = \"APPMESH\",\n ContainerName = \"applicationContainerName\",\n Properties = \n {\n { \"AppPorts\", \"8080\" },\n { \"EgressIgnoredIPs\", \"169.254.170.2,169.254.169.254\" },\n { \"IgnoredUID\", \"1337\" },\n { \"ProxyEgressPort\", \"15001\" },\n { \"ProxyIngressPort\", \"15000\" },\n },\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% example %}}\n### Example Using `docker_volume_configuration`\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst service = new aws.ecs.TaskDefinition(\"service\", {\n family: \"service\",\n containerDefinitions: fs.readFileSync(\"task-definitions/service.json\"),\n volumes: [{\n name: \"service-storage\",\n dockerVolumeConfiguration: {\n scope: \"shared\",\n autoprovision: true,\n driver: \"local\",\n driverOpts: {\n type: \"nfs\",\n device: `${aws_efs_file_system.fs.dns_name}:/`,\n o: `addr=${aws_efs_file_system.fs.dns_name},rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport`,\n },\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nservice = aws.ecs.TaskDefinition(\"service\",\n family=\"service\",\n container_definitions=(lambda path: open(path).read())(\"task-definitions/service.json\"),\n volumes=[aws.ecs.TaskDefinitionVolumeArgs(\n name=\"service-storage\",\n docker_volume_configuration=aws.ecs.TaskDefinitionVolumeDockerVolumeConfigurationArgs(\n scope=\"shared\",\n autoprovision=True,\n driver=\"local\",\n driver_opts={\n \"type\": \"nfs\",\n \"device\": f\"{aws_efs_file_system['fs']['dns_name']}:/\",\n \"o\": f\"addr={aws_efs_file_system['fs']['dns_name']},rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport\",\n },\n ),\n )])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var service = new Aws.Ecs.TaskDefinition(\"service\", new Aws.Ecs.TaskDefinitionArgs\n {\n Family = \"service\",\n ContainerDefinitions = File.ReadAllText(\"task-definitions/service.json\"),\n Volumes = \n {\n new Aws.Ecs.Inputs.TaskDefinitionVolumeArgs\n {\n Name = \"service-storage\",\n DockerVolumeConfiguration = new Aws.Ecs.Inputs.TaskDefinitionVolumeDockerVolumeConfigurationArgs\n {\n Scope = \"shared\",\n Autoprovision = true,\n Driver = \"local\",\n DriverOpts = \n {\n { \"type\", \"nfs\" },\n { \"device\", $\"{aws_efs_file_system.Fs.Dns_name}:/\" },\n { \"o\", $\"addr={aws_efs_file_system.Fs.Dns_name},rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport\" },\n },\n },\n },\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% example %}}\n### Example Using `efs_volume_configuration`\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst service = new aws.ecs.TaskDefinition(\"service\", {\n family: \"service\",\n containerDefinitions: fs.readFileSync(\"task-definitions/service.json\"),\n volumes: [{\n name: \"service-storage\",\n efsVolumeConfiguration: {\n fileSystemId: aws_efs_file_system.fs.id,\n rootDirectory: \"/opt/data\",\n transitEncryption: \"ENABLED\",\n transitEncryptionPort: 2999,\n authorizationConfig: {\n accessPointId: aws_efs_access_point.test.id,\n iam: \"ENABLED\",\n },\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nservice = aws.ecs.TaskDefinition(\"service\",\n family=\"service\",\n container_definitions=(lambda path: open(path).read())(\"task-definitions/service.json\"),\n volumes=[aws.ecs.TaskDefinitionVolumeArgs(\n name=\"service-storage\",\n efs_volume_configuration=aws.ecs.TaskDefinitionVolumeEfsVolumeConfigurationArgs(\n file_system_id=aws_efs_file_system[\"fs\"][\"id\"],\n root_directory=\"/opt/data\",\n transit_encryption=\"ENABLED\",\n transit_encryption_port=2999,\n authorization_config=aws.ecs.TaskDefinitionVolumeEfsVolumeConfigurationAuthorizationConfigArgs(\n access_point_id=aws_efs_access_point[\"test\"][\"id\"],\n iam=\"ENABLED\",\n ),\n ),\n )])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var service = new Aws.Ecs.TaskDefinition(\"service\", new Aws.Ecs.TaskDefinitionArgs\n {\n Family = \"service\",\n ContainerDefinitions = File.ReadAllText(\"task-definitions/service.json\"),\n Volumes = \n {\n new Aws.Ecs.Inputs.TaskDefinitionVolumeArgs\n {\n Name = \"service-storage\",\n EfsVolumeConfiguration = new Aws.Ecs.Inputs.TaskDefinitionVolumeEfsVolumeConfigurationArgs\n {\n FileSystemId = aws_efs_file_system.Fs.Id,\n RootDirectory = \"/opt/data\",\n TransitEncryption = \"ENABLED\",\n TransitEncryptionPort = 2999,\n AuthorizationConfig = new Aws.Ecs.Inputs.TaskDefinitionVolumeEfsVolumeConfigurationAuthorizationConfigArgs\n {\n AccessPointId = aws_efs_access_point.Test.Id,\n Iam = \"ENABLED\",\n },\n },\n },\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% example %}}\n### Example Using `fsx_windows_file_server_volume_configuration`\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst test = new aws.secretsmanager.SecretVersion(\"test\", {\n secretId: aws_secretsmanager_secret.test.id,\n secretString: JSON.stringify({\n username: \"admin\",\n password: aws_directory_service_directory.test.password,\n }),\n});\nconst service = new aws.ecs.TaskDefinition(\"service\", {\n family: \"service\",\n containerDefinitions: fs.readFileSync(\"task-definitions/service.json\"),\n volumes: [{\n name: \"service-storage\",\n fsxWindowsFileServerVolumeConfiguration: {\n fileSystemId: aws_fsx_windows_file_system.test.id,\n rootDirectory: \"\\\\data\",\n authorizationConfig: {\n credentialsParameter: test.arn,\n domain: aws_directory_service_directory.test.name,\n },\n },\n }],\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_aws as aws\n\ntest = aws.secretsmanager.SecretVersion(\"test\",\n secret_id=aws_secretsmanager_secret[\"test\"][\"id\"],\n secret_string=json.dumps({\n \"username\": \"admin\",\n \"password\": aws_directory_service_directory[\"test\"][\"password\"],\n }))\nservice = aws.ecs.TaskDefinition(\"service\",\n family=\"service\",\n container_definitions=(lambda path: open(path).read())(\"task-definitions/service.json\"),\n volumes=[aws.ecs.TaskDefinitionVolumeArgs(\n name=\"service-storage\",\n fsx_windows_file_server_volume_configuration=aws.ecs.TaskDefinitionVolumeFsxWindowsFileServerVolumeConfigurationArgs(\n file_system_id=aws_fsx_windows_file_system[\"test\"][\"id\"],\n root_directory=\"\\\\data\",\n authorization_config=aws.ecs.TaskDefinitionVolumeFsxWindowsFileServerVolumeConfigurationAuthorizationConfigArgs(\n credentials_parameter=test.arn,\n domain=aws_directory_service_directory[\"test\"][\"name\"],\n ),\n ),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = new Aws.SecretsManager.SecretVersion(\"test\", new Aws.SecretsManager.SecretVersionArgs\n {\n SecretId = aws_secretsmanager_secret.Test.Id,\n SecretString = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n { \"username\", \"admin\" },\n { \"password\", aws_directory_service_directory.Test.Password },\n }),\n });\n var service = new Aws.Ecs.TaskDefinition(\"service\", new Aws.Ecs.TaskDefinitionArgs\n {\n Family = \"service\",\n ContainerDefinitions = File.ReadAllText(\"task-definitions/service.json\"),\n Volumes = \n {\n new Aws.Ecs.Inputs.TaskDefinitionVolumeArgs\n {\n Name = \"service-storage\",\n FsxWindowsFileServerVolumeConfiguration = new Aws.Ecs.Inputs.TaskDefinitionVolumeFsxWindowsFileServerVolumeConfigurationArgs\n {\n FileSystemId = aws_fsx_windows_file_system.Test.Id,\n RootDirectory = \"\\\\data\",\n AuthorizationConfig = new Aws.Ecs.Inputs.TaskDefinitionVolumeFsxWindowsFileServerVolumeConfigurationAuthorizationConfigArgs\n {\n CredentialsParameter = test.Arn,\n Domain = aws_directory_service_directory.Test.Name,\n },\n },\n },\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% example %}}\n### Example Using `container_definitions` and `inference_accelerator`\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst test = new aws.ecs.TaskDefinition(\"test\", {\n containerDefinitions: `[\n\t{\n\t\t\"cpu\": 10,\n\t\t\"command\": [\"sleep\", \"10\"],\n\t\t\"entryPoint\": [\"/\"],\n\t\t\"environment\": [\n\t\t\t{\"name\": \"VARNAME\", \"value\": \"VARVAL\"}\n\t\t],\n\t\t\"essential\": true,\n\t\t\"image\": \"jenkins\",\n\t\t\"memory\": 128,\n\t\t\"name\": \"jenkins\",\n\t\t\"portMappings\": [\n\t\t\t{\n\t\t\t\t\"containerPort\": 80,\n\t\t\t\t\"hostPort\": 8080\n\t\t\t}\n\t\t],\n \"resourceRequirements\":[\n {\n \"type\":\"InferenceAccelerator\",\n \"value\":\"device_1\"\n }\n ]\n\t}\n]\n`,\n family: \"test\",\n inferenceAccelerators: [{\n deviceName: \"device_1\",\n deviceType: \"eia1.medium\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.ecs.TaskDefinition(\"test\",\n container_definitions=\"\"\"[\n\t{\n\t\t\"cpu\": 10,\n\t\t\"command\": [\"sleep\", \"10\"],\n\t\t\"entryPoint\": [\"/\"],\n\t\t\"environment\": [\n\t\t\t{\"name\": \"VARNAME\", \"value\": \"VARVAL\"}\n\t\t],\n\t\t\"essential\": true,\n\t\t\"image\": \"jenkins\",\n\t\t\"memory\": 128,\n\t\t\"name\": \"jenkins\",\n\t\t\"portMappings\": [\n\t\t\t{\n\t\t\t\t\"containerPort\": 80,\n\t\t\t\t\"hostPort\": 8080\n\t\t\t}\n\t\t],\n \"resourceRequirements\":[\n {\n \"type\":\"InferenceAccelerator\",\n \"value\":\"device_1\"\n }\n ]\n\t}\n]\n\n\"\"\",\n family=\"test\",\n inference_accelerators=[aws.ecs.TaskDefinitionInferenceAcceleratorArgs(\n device_name=\"device_1\",\n device_type=\"eia1.medium\",\n )])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = new Aws.Ecs.TaskDefinition(\"test\", new Aws.Ecs.TaskDefinitionArgs\n {\n ContainerDefinitions = @\"[\n\t{\n\t\t\"\"cpu\"\": 10,\n\t\t\"\"command\"\": [\"\"sleep\"\", \"\"10\"\"],\n\t\t\"\"entryPoint\"\": [\"\"/\"\"],\n\t\t\"\"environment\"\": [\n\t\t\t{\"\"name\"\": \"\"VARNAME\"\", \"\"value\"\": \"\"VARVAL\"\"}\n\t\t],\n\t\t\"\"essential\"\": true,\n\t\t\"\"image\"\": \"\"jenkins\"\",\n\t\t\"\"memory\"\": 128,\n\t\t\"\"name\"\": \"\"jenkins\"\",\n\t\t\"\"portMappings\"\": [\n\t\t\t{\n\t\t\t\t\"\"containerPort\"\": 80,\n\t\t\t\t\"\"hostPort\"\": 8080\n\t\t\t}\n\t\t],\n \"\"resourceRequirements\"\":[\n {\n \"\"type\"\":\"\"InferenceAccelerator\"\",\n \"\"value\"\":\"\"device_1\"\"\n }\n ]\n\t}\n]\n\n\",\n Family = \"test\",\n InferenceAccelerators = \n {\n new Aws.Ecs.Inputs.TaskDefinitionInferenceAcceleratorArgs\n {\n DeviceName = \"device_1\",\n DeviceType = \"eia1.medium\",\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ecs\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ecs.NewTaskDefinition(ctx, \"test\", \u0026ecs.TaskDefinitionArgs{\n\t\t\tContainerDefinitions: pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"[\\n\", \"\t{\\n\", \"\t\t\\\"cpu\\\": 10,\\n\", \"\t\t\\\"command\\\": [\\\"sleep\\\", \\\"10\\\"],\\n\", \"\t\t\\\"entryPoint\\\": [\\\"/\\\"],\\n\", \"\t\t\\\"environment\\\": [\\n\", \"\t\t\t{\\\"name\\\": \\\"VARNAME\\\", \\\"value\\\": \\\"VARVAL\\\"}\\n\", \"\t\t],\\n\", \"\t\t\\\"essential\\\": true,\\n\", \"\t\t\\\"image\\\": \\\"jenkins\\\",\\n\", \"\t\t\\\"memory\\\": 128,\\n\", \"\t\t\\\"name\\\": \\\"jenkins\\\",\\n\", \"\t\t\\\"portMappings\\\": [\\n\", \"\t\t\t{\\n\", \"\t\t\t\t\\\"containerPort\\\": 80,\\n\", \"\t\t\t\t\\\"hostPort\\\": 8080\\n\", \"\t\t\t}\\n\", \"\t\t],\\n\", \" \\\"resourceRequirements\\\":[\\n\", \" {\\n\", \" \\\"type\\\":\\\"InferenceAccelerator\\\",\\n\", \" \\\"value\\\":\\\"device_1\\\"\\n\", \" }\\n\", \" ]\\n\", \"\t}\\n\", \"]\\n\", \"\\n\")),\n\t\t\tFamily: pulumi.String(\"test\"),\n\t\t\tInferenceAccelerators: ecs.TaskDefinitionInferenceAcceleratorArray{\n\t\t\t\t\u0026ecs.TaskDefinitionInferenceAcceleratorArgs{\n\t\t\t\t\tDeviceName: pulumi.String(\"device_1\"),\n\t\t\t\t\tDeviceType: pulumi.String(\"eia1.medium\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nECS Task Definitions can be imported via their Amazon Resource Name (ARN)\n\n```sh\n $ pulumi import aws:ecs/taskDefinition:TaskDefinition example arn:aws:ecs:us-east-1:012345678910:task-definition/mytaskfamily:123\n```\n\n ", + "description": "Manages a revision of an ECS task definition to be used in `aws.ecs.Service`.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic Example\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst service = new aws.ecs.TaskDefinition(\"service\", {\n family: \"service\",\n containerDefinitions: JSON.stringify([\n {\n name: \"first\",\n image: \"service-first\",\n cpu: 10,\n memory: 512,\n essential: true,\n portMappings: [{\n containerPort: 80,\n hostPort: 80,\n }],\n },\n {\n name: \"second\",\n image: \"service-second\",\n cpu: 10,\n memory: 256,\n essential: true,\n portMappings: [{\n containerPort: 443,\n hostPort: 443,\n }],\n },\n ]),\n volumes: [{\n name: \"service-storage\",\n hostPath: \"/ecs/service-storage\",\n }],\n placementConstraints: [{\n type: \"memberOf\",\n expression: \"attribute:ecs.availability-zone in [us-west-2a, us-west-2b]\",\n }],\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_aws as aws\n\nservice = aws.ecs.TaskDefinition(\"service\",\n family=\"service\",\n container_definitions=json.dumps([\n {\n \"name\": \"first\",\n \"image\": \"service-first\",\n \"cpu\": 10,\n \"memory\": 512,\n \"essential\": True,\n \"portMappings\": [{\n \"containerPort\": 80,\n \"hostPort\": 80,\n }],\n },\n {\n \"name\": \"second\",\n \"image\": \"service-second\",\n \"cpu\": 10,\n \"memory\": 256,\n \"essential\": True,\n \"portMappings\": [{\n \"containerPort\": 443,\n \"hostPort\": 443,\n }],\n },\n ]),\n volumes=[aws.ecs.TaskDefinitionVolumeArgs(\n name=\"service-storage\",\n host_path=\"/ecs/service-storage\",\n )],\n placement_constraints=[aws.ecs.TaskDefinitionPlacementConstraintArgs(\n type=\"memberOf\",\n expression=\"attribute:ecs.availability-zone in [us-west-2a, us-west-2b]\",\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var service = new Aws.Ecs.TaskDefinition(\"service\", new Aws.Ecs.TaskDefinitionArgs\n {\n Family = \"service\",\n ContainerDefinitions = JsonSerializer.Serialize(new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n { \"name\", \"first\" },\n { \"image\", \"service-first\" },\n { \"cpu\", 10 },\n { \"memory\", 512 },\n { \"essential\", true },\n { \"portMappings\", new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n { \"containerPort\", 80 },\n { \"hostPort\", 80 },\n },\n }\n },\n },\n new Dictionary\u003cstring, object?\u003e\n {\n { \"name\", \"second\" },\n { \"image\", \"service-second\" },\n { \"cpu\", 10 },\n { \"memory\", 256 },\n { \"essential\", true },\n { \"portMappings\", new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n { \"containerPort\", 443 },\n { \"hostPort\", 443 },\n },\n }\n },\n },\n }\n ),\n Volumes = \n {\n new Aws.Ecs.Inputs.TaskDefinitionVolumeArgs\n {\n Name = \"service-storage\",\n HostPath = \"/ecs/service-storage\",\n },\n },\n PlacementConstraints = \n {\n new Aws.Ecs.Inputs.TaskDefinitionPlacementConstraintArgs\n {\n Type = \"memberOf\",\n Expression = \"attribute:ecs.availability-zone in [us-west-2a, us-west-2b]\",\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ecs\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal([]interface{}{\n\t\t\tmap[string]interface{}{\n\t\t\t\t\"name\": \"first\",\n\t\t\t\t\"image\": \"service-first\",\n\t\t\t\t\"cpu\": 10,\n\t\t\t\t\"memory\": 512,\n\t\t\t\t\"essential\": true,\n\t\t\t\t\"portMappings\": []map[string]interface{}{\n\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\"containerPort\": 80,\n\t\t\t\t\t\t\"hostPort\": 80,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tmap[string]interface{}{\n\t\t\t\t\"name\": \"second\",\n\t\t\t\t\"image\": \"service-second\",\n\t\t\t\t\"cpu\": 10,\n\t\t\t\t\"memory\": 256,\n\t\t\t\t\"essential\": true,\n\t\t\t\t\"portMappings\": []map[string]interface{}{\n\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\"containerPort\": 443,\n\t\t\t\t\t\t\"hostPort\": 443,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err := ecs.NewTaskDefinition(ctx, \"service\", \u0026ecs.TaskDefinitionArgs{\n\t\t\tFamily: pulumi.String(\"service\"),\n\t\t\tContainerDefinitions: pulumi.String(json0),\n\t\t\tVolumes: ecs.TaskDefinitionVolumeArray{\n\t\t\t\t\u0026ecs.TaskDefinitionVolumeArgs{\n\t\t\t\t\tName: pulumi.String(\"service-storage\"),\n\t\t\t\t\tHostPath: pulumi.String(\"/ecs/service-storage\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPlacementConstraints: ecs.TaskDefinitionPlacementConstraintArray{\n\t\t\t\t\u0026ecs.TaskDefinitionPlacementConstraintArgs{\n\t\t\t\t\tType: pulumi.String(\"memberOf\"),\n\t\t\t\t\tExpression: pulumi.String(\"attribute:ecs.availability-zone in [us-west-2a, us-west-2b]\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### With AppMesh Proxy\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst service = new aws.ecs.TaskDefinition(\"service\", {\n family: \"service\",\n containerDefinitions: fs.readFileSync(\"task-definitions/service.json\"),\n proxyConfiguration: {\n type: \"APPMESH\",\n containerName: \"applicationContainerName\",\n properties: {\n AppPorts: \"8080\",\n EgressIgnoredIPs: \"169.254.170.2,169.254.169.254\",\n IgnoredUID: \"1337\",\n ProxyEgressPort: 15001,\n ProxyIngressPort: 15000,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nservice = aws.ecs.TaskDefinition(\"service\",\n family=\"service\",\n container_definitions=(lambda path: open(path).read())(\"task-definitions/service.json\"),\n proxy_configuration=aws.ecs.TaskDefinitionProxyConfigurationArgs(\n type=\"APPMESH\",\n container_name=\"applicationContainerName\",\n properties={\n \"AppPorts\": \"8080\",\n \"EgressIgnoredIPs\": \"169.254.170.2,169.254.169.254\",\n \"IgnoredUID\": \"1337\",\n \"ProxyEgressPort\": \"15001\",\n \"ProxyIngressPort\": \"15000\",\n },\n ))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var service = new Aws.Ecs.TaskDefinition(\"service\", new Aws.Ecs.TaskDefinitionArgs\n {\n Family = \"service\",\n ContainerDefinitions = File.ReadAllText(\"task-definitions/service.json\"),\n ProxyConfiguration = new Aws.Ecs.Inputs.TaskDefinitionProxyConfigurationArgs\n {\n Type = \"APPMESH\",\n ContainerName = \"applicationContainerName\",\n Properties = \n {\n { \"AppPorts\", \"8080\" },\n { \"EgressIgnoredIPs\", \"169.254.170.2,169.254.169.254\" },\n { \"IgnoredUID\", \"1337\" },\n { \"ProxyEgressPort\", \"15001\" },\n { \"ProxyIngressPort\", \"15000\" },\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ecs\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ecs.NewTaskDefinition(ctx, \"service\", \u0026ecs.TaskDefinitionArgs{\n\t\t\tFamily: pulumi.String(\"service\"),\n\t\t\tContainerDefinitions: readFileOrPanic(\"task-definitions/service.json\"),\n\t\t\tProxyConfiguration: \u0026ecs.TaskDefinitionProxyConfigurationArgs{\n\t\t\t\tType: pulumi.String(\"APPMESH\"),\n\t\t\t\tContainerName: pulumi.String(\"applicationContainerName\"),\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"AppPorts\": pulumi.String(\"8080\"),\n\t\t\t\t\t\"EgressIgnoredIPs\": pulumi.String(\"169.254.170.2,169.254.169.254\"),\n\t\t\t\t\t\"IgnoredUID\": pulumi.String(\"1337\"),\n\t\t\t\t\t\"ProxyEgressPort\": pulumi.String(\"15001\"),\n\t\t\t\t\t\"ProxyIngressPort\": pulumi.String(\"15000\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Example Using `docker_volume_configuration`\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst service = new aws.ecs.TaskDefinition(\"service\", {\n family: \"service\",\n containerDefinitions: fs.readFileSync(\"task-definitions/service.json\"),\n volumes: [{\n name: \"service-storage\",\n dockerVolumeConfiguration: {\n scope: \"shared\",\n autoprovision: true,\n driver: \"local\",\n driverOpts: {\n type: \"nfs\",\n device: `${aws_efs_file_system.fs.dns_name}:/`,\n o: `addr=${aws_efs_file_system.fs.dns_name},rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport`,\n },\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nservice = aws.ecs.TaskDefinition(\"service\",\n family=\"service\",\n container_definitions=(lambda path: open(path).read())(\"task-definitions/service.json\"),\n volumes=[aws.ecs.TaskDefinitionVolumeArgs(\n name=\"service-storage\",\n docker_volume_configuration=aws.ecs.TaskDefinitionVolumeDockerVolumeConfigurationArgs(\n scope=\"shared\",\n autoprovision=True,\n driver=\"local\",\n driver_opts={\n \"type\": \"nfs\",\n \"device\": f\"{aws_efs_file_system['fs']['dns_name']}:/\",\n \"o\": f\"addr={aws_efs_file_system['fs']['dns_name']},rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport\",\n },\n ),\n )])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var service = new Aws.Ecs.TaskDefinition(\"service\", new Aws.Ecs.TaskDefinitionArgs\n {\n Family = \"service\",\n ContainerDefinitions = File.ReadAllText(\"task-definitions/service.json\"),\n Volumes = \n {\n new Aws.Ecs.Inputs.TaskDefinitionVolumeArgs\n {\n Name = \"service-storage\",\n DockerVolumeConfiguration = new Aws.Ecs.Inputs.TaskDefinitionVolumeDockerVolumeConfigurationArgs\n {\n Scope = \"shared\",\n Autoprovision = true,\n Driver = \"local\",\n DriverOpts = \n {\n { \"type\", \"nfs\" },\n { \"device\", $\"{aws_efs_file_system.Fs.Dns_name}:/\" },\n { \"o\", $\"addr={aws_efs_file_system.Fs.Dns_name},rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport\" },\n },\n },\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ecs\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ecs.NewTaskDefinition(ctx, \"service\", \u0026ecs.TaskDefinitionArgs{\n\t\t\tFamily: pulumi.String(\"service\"),\n\t\t\tContainerDefinitions: readFileOrPanic(\"task-definitions/service.json\"),\n\t\t\tVolumes: ecs.TaskDefinitionVolumeArray{\n\t\t\t\t\u0026ecs.TaskDefinitionVolumeArgs{\n\t\t\t\t\tName: pulumi.String(\"service-storage\"),\n\t\t\t\t\tDockerVolumeConfiguration: \u0026ecs.TaskDefinitionVolumeDockerVolumeConfigurationArgs{\n\t\t\t\t\t\tScope: pulumi.String(\"shared\"),\n\t\t\t\t\t\tAutoprovision: pulumi.Bool(true),\n\t\t\t\t\t\tDriver: pulumi.String(\"local\"),\n\t\t\t\t\t\tDriverOpts: pulumi.StringMap{\n\t\t\t\t\t\t\t\"type\": pulumi.String(\"nfs\"),\n\t\t\t\t\t\t\t\"device\": pulumi.String(fmt.Sprintf(\"%v%v\", aws_efs_file_system.Fs.Dns_name, \":/\")),\n\t\t\t\t\t\t\t\"o\": pulumi.String(fmt.Sprintf(\"%v%v%v\", \"addr=\", aws_efs_file_system.Fs.Dns_name, \",rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport\")),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Example Using `efs_volume_configuration`\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst service = new aws.ecs.TaskDefinition(\"service\", {\n family: \"service\",\n containerDefinitions: fs.readFileSync(\"task-definitions/service.json\"),\n volumes: [{\n name: \"service-storage\",\n efsVolumeConfiguration: {\n fileSystemId: aws_efs_file_system.fs.id,\n rootDirectory: \"/opt/data\",\n transitEncryption: \"ENABLED\",\n transitEncryptionPort: 2999,\n authorizationConfig: {\n accessPointId: aws_efs_access_point.test.id,\n iam: \"ENABLED\",\n },\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nservice = aws.ecs.TaskDefinition(\"service\",\n family=\"service\",\n container_definitions=(lambda path: open(path).read())(\"task-definitions/service.json\"),\n volumes=[aws.ecs.TaskDefinitionVolumeArgs(\n name=\"service-storage\",\n efs_volume_configuration=aws.ecs.TaskDefinitionVolumeEfsVolumeConfigurationArgs(\n file_system_id=aws_efs_file_system[\"fs\"][\"id\"],\n root_directory=\"/opt/data\",\n transit_encryption=\"ENABLED\",\n transit_encryption_port=2999,\n authorization_config=aws.ecs.TaskDefinitionVolumeEfsVolumeConfigurationAuthorizationConfigArgs(\n access_point_id=aws_efs_access_point[\"test\"][\"id\"],\n iam=\"ENABLED\",\n ),\n ),\n )])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var service = new Aws.Ecs.TaskDefinition(\"service\", new Aws.Ecs.TaskDefinitionArgs\n {\n Family = \"service\",\n ContainerDefinitions = File.ReadAllText(\"task-definitions/service.json\"),\n Volumes = \n {\n new Aws.Ecs.Inputs.TaskDefinitionVolumeArgs\n {\n Name = \"service-storage\",\n EfsVolumeConfiguration = new Aws.Ecs.Inputs.TaskDefinitionVolumeEfsVolumeConfigurationArgs\n {\n FileSystemId = aws_efs_file_system.Fs.Id,\n RootDirectory = \"/opt/data\",\n TransitEncryption = \"ENABLED\",\n TransitEncryptionPort = 2999,\n AuthorizationConfig = new Aws.Ecs.Inputs.TaskDefinitionVolumeEfsVolumeConfigurationAuthorizationConfigArgs\n {\n AccessPointId = aws_efs_access_point.Test.Id,\n Iam = \"ENABLED\",\n },\n },\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ecs\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ecs.NewTaskDefinition(ctx, \"service\", \u0026ecs.TaskDefinitionArgs{\n\t\t\tFamily: pulumi.String(\"service\"),\n\t\t\tContainerDefinitions: readFileOrPanic(\"task-definitions/service.json\"),\n\t\t\tVolumes: ecs.TaskDefinitionVolumeArray{\n\t\t\t\t\u0026ecs.TaskDefinitionVolumeArgs{\n\t\t\t\t\tName: pulumi.String(\"service-storage\"),\n\t\t\t\t\tEfsVolumeConfiguration: \u0026ecs.TaskDefinitionVolumeEfsVolumeConfigurationArgs{\n\t\t\t\t\t\tFileSystemId: pulumi.Any(aws_efs_file_system.Fs.Id),\n\t\t\t\t\t\tRootDirectory: pulumi.String(\"/opt/data\"),\n\t\t\t\t\t\tTransitEncryption: pulumi.String(\"ENABLED\"),\n\t\t\t\t\t\tTransitEncryptionPort: pulumi.Int(2999),\n\t\t\t\t\t\tAuthorizationConfig: \u0026ecs.TaskDefinitionVolumeEfsVolumeConfigurationAuthorizationConfigArgs{\n\t\t\t\t\t\t\tAccessPointId: pulumi.Any(aws_efs_access_point.Test.Id),\n\t\t\t\t\t\t\tIam: pulumi.String(\"ENABLED\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Example Using `fsx_windows_file_server_volume_configuration`\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst test = new aws.secretsmanager.SecretVersion(\"test\", {\n secretId: aws_secretsmanager_secret.test.id,\n secretString: JSON.stringify({\n username: \"admin\",\n password: aws_directory_service_directory.test.password,\n }),\n});\nconst service = new aws.ecs.TaskDefinition(\"service\", {\n family: \"service\",\n containerDefinitions: fs.readFileSync(\"task-definitions/service.json\"),\n volumes: [{\n name: \"service-storage\",\n fsxWindowsFileServerVolumeConfiguration: {\n fileSystemId: aws_fsx_windows_file_system.test.id,\n rootDirectory: \"\\\\data\",\n authorizationConfig: {\n credentialsParameter: test.arn,\n domain: aws_directory_service_directory.test.name,\n },\n },\n }],\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_aws as aws\n\ntest = aws.secretsmanager.SecretVersion(\"test\",\n secret_id=aws_secretsmanager_secret[\"test\"][\"id\"],\n secret_string=json.dumps({\n \"username\": \"admin\",\n \"password\": aws_directory_service_directory[\"test\"][\"password\"],\n }))\nservice = aws.ecs.TaskDefinition(\"service\",\n family=\"service\",\n container_definitions=(lambda path: open(path).read())(\"task-definitions/service.json\"),\n volumes=[aws.ecs.TaskDefinitionVolumeArgs(\n name=\"service-storage\",\n fsx_windows_file_server_volume_configuration=aws.ecs.TaskDefinitionVolumeFsxWindowsFileServerVolumeConfigurationArgs(\n file_system_id=aws_fsx_windows_file_system[\"test\"][\"id\"],\n root_directory=\"\\\\data\",\n authorization_config=aws.ecs.TaskDefinitionVolumeFsxWindowsFileServerVolumeConfigurationAuthorizationConfigArgs(\n credentials_parameter=test.arn,\n domain=aws_directory_service_directory[\"test\"][\"name\"],\n ),\n ),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = new Aws.SecretsManager.SecretVersion(\"test\", new Aws.SecretsManager.SecretVersionArgs\n {\n SecretId = aws_secretsmanager_secret.Test.Id,\n SecretString = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n { \"username\", \"admin\" },\n { \"password\", aws_directory_service_directory.Test.Password },\n }),\n });\n var service = new Aws.Ecs.TaskDefinition(\"service\", new Aws.Ecs.TaskDefinitionArgs\n {\n Family = \"service\",\n ContainerDefinitions = File.ReadAllText(\"task-definitions/service.json\"),\n Volumes = \n {\n new Aws.Ecs.Inputs.TaskDefinitionVolumeArgs\n {\n Name = \"service-storage\",\n FsxWindowsFileServerVolumeConfiguration = new Aws.Ecs.Inputs.TaskDefinitionVolumeFsxWindowsFileServerVolumeConfigurationArgs\n {\n FileSystemId = aws_fsx_windows_file_system.Test.Id,\n RootDirectory = \"\\\\data\",\n AuthorizationConfig = new Aws.Ecs.Inputs.TaskDefinitionVolumeFsxWindowsFileServerVolumeConfigurationAuthorizationConfigArgs\n {\n CredentialsParameter = test.Arn,\n Domain = aws_directory_service_directory.Test.Name,\n },\n },\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ecs\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/secretsmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"username\": \"admin\",\n\t\t\t\"password\": aws_directory_service_directory.Test.Password,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttest, err := secretsmanager.NewSecretVersion(ctx, \"test\", \u0026secretsmanager.SecretVersionArgs{\n\t\t\tSecretId: pulumi.Any(aws_secretsmanager_secret.Test.Id),\n\t\t\tSecretString: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ecs.NewTaskDefinition(ctx, \"service\", \u0026ecs.TaskDefinitionArgs{\n\t\t\tFamily: pulumi.String(\"service\"),\n\t\t\tContainerDefinitions: readFileOrPanic(\"task-definitions/service.json\"),\n\t\t\tVolumes: ecs.TaskDefinitionVolumeArray{\n\t\t\t\t\u0026ecs.TaskDefinitionVolumeArgs{\n\t\t\t\t\tName: pulumi.String(\"service-storage\"),\n\t\t\t\t\tFsxWindowsFileServerVolumeConfiguration: \u0026ecs.TaskDefinitionVolumeFsxWindowsFileServerVolumeConfigurationArgs{\n\t\t\t\t\t\tFileSystemId: pulumi.Any(aws_fsx_windows_file_system.Test.Id),\n\t\t\t\t\t\tRootDirectory: pulumi.String(\"\\\\data\"),\n\t\t\t\t\t\tAuthorizationConfig: \u0026ecs.TaskDefinitionVolumeFsxWindowsFileServerVolumeConfigurationAuthorizationConfigArgs{\n\t\t\t\t\t\t\tCredentialsParameter: test.Arn,\n\t\t\t\t\t\t\tDomain: pulumi.Any(aws_directory_service_directory.Test.Name),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Example Using `container_definitions` and `inference_accelerator`\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst test = new aws.ecs.TaskDefinition(\"test\", {\n containerDefinitions: `[\n\t{\n\t\t\"cpu\": 10,\n\t\t\"command\": [\"sleep\", \"10\"],\n\t\t\"entryPoint\": [\"/\"],\n\t\t\"environment\": [\n\t\t\t{\"name\": \"VARNAME\", \"value\": \"VARVAL\"}\n\t\t],\n\t\t\"essential\": true,\n\t\t\"image\": \"jenkins\",\n\t\t\"memory\": 128,\n\t\t\"name\": \"jenkins\",\n\t\t\"portMappings\": [\n\t\t\t{\n\t\t\t\t\"containerPort\": 80,\n\t\t\t\t\"hostPort\": 8080\n\t\t\t}\n\t\t],\n \"resourceRequirements\":[\n {\n \"type\":\"InferenceAccelerator\",\n \"value\":\"device_1\"\n }\n ]\n\t}\n]\n`,\n family: \"test\",\n inferenceAccelerators: [{\n deviceName: \"device_1\",\n deviceType: \"eia1.medium\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.ecs.TaskDefinition(\"test\",\n container_definitions=\"\"\"[\n\t{\n\t\t\"cpu\": 10,\n\t\t\"command\": [\"sleep\", \"10\"],\n\t\t\"entryPoint\": [\"/\"],\n\t\t\"environment\": [\n\t\t\t{\"name\": \"VARNAME\", \"value\": \"VARVAL\"}\n\t\t],\n\t\t\"essential\": true,\n\t\t\"image\": \"jenkins\",\n\t\t\"memory\": 128,\n\t\t\"name\": \"jenkins\",\n\t\t\"portMappings\": [\n\t\t\t{\n\t\t\t\t\"containerPort\": 80,\n\t\t\t\t\"hostPort\": 8080\n\t\t\t}\n\t\t],\n \"resourceRequirements\":[\n {\n \"type\":\"InferenceAccelerator\",\n \"value\":\"device_1\"\n }\n ]\n\t}\n]\n\n\"\"\",\n family=\"test\",\n inference_accelerators=[aws.ecs.TaskDefinitionInferenceAcceleratorArgs(\n device_name=\"device_1\",\n device_type=\"eia1.medium\",\n )])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = new Aws.Ecs.TaskDefinition(\"test\", new Aws.Ecs.TaskDefinitionArgs\n {\n ContainerDefinitions = @\"[\n\t{\n\t\t\"\"cpu\"\": 10,\n\t\t\"\"command\"\": [\"\"sleep\"\", \"\"10\"\"],\n\t\t\"\"entryPoint\"\": [\"\"/\"\"],\n\t\t\"\"environment\"\": [\n\t\t\t{\"\"name\"\": \"\"VARNAME\"\", \"\"value\"\": \"\"VARVAL\"\"}\n\t\t],\n\t\t\"\"essential\"\": true,\n\t\t\"\"image\"\": \"\"jenkins\"\",\n\t\t\"\"memory\"\": 128,\n\t\t\"\"name\"\": \"\"jenkins\"\",\n\t\t\"\"portMappings\"\": [\n\t\t\t{\n\t\t\t\t\"\"containerPort\"\": 80,\n\t\t\t\t\"\"hostPort\"\": 8080\n\t\t\t}\n\t\t],\n \"\"resourceRequirements\"\":[\n {\n \"\"type\"\":\"\"InferenceAccelerator\"\",\n \"\"value\"\":\"\"device_1\"\"\n }\n ]\n\t}\n]\n\n\",\n Family = \"test\",\n InferenceAccelerators = \n {\n new Aws.Ecs.Inputs.TaskDefinitionInferenceAcceleratorArgs\n {\n DeviceName = \"device_1\",\n DeviceType = \"eia1.medium\",\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ecs\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ecs.NewTaskDefinition(ctx, \"test\", \u0026ecs.TaskDefinitionArgs{\n\t\t\tContainerDefinitions: pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"[\\n\", \"\t{\\n\", \"\t\t\\\"cpu\\\": 10,\\n\", \"\t\t\\\"command\\\": [\\\"sleep\\\", \\\"10\\\"],\\n\", \"\t\t\\\"entryPoint\\\": [\\\"/\\\"],\\n\", \"\t\t\\\"environment\\\": [\\n\", \"\t\t\t{\\\"name\\\": \\\"VARNAME\\\", \\\"value\\\": \\\"VARVAL\\\"}\\n\", \"\t\t],\\n\", \"\t\t\\\"essential\\\": true,\\n\", \"\t\t\\\"image\\\": \\\"jenkins\\\",\\n\", \"\t\t\\\"memory\\\": 128,\\n\", \"\t\t\\\"name\\\": \\\"jenkins\\\",\\n\", \"\t\t\\\"portMappings\\\": [\\n\", \"\t\t\t{\\n\", \"\t\t\t\t\\\"containerPort\\\": 80,\\n\", \"\t\t\t\t\\\"hostPort\\\": 8080\\n\", \"\t\t\t}\\n\", \"\t\t],\\n\", \" \\\"resourceRequirements\\\":[\\n\", \" {\\n\", \" \\\"type\\\":\\\"InferenceAccelerator\\\",\\n\", \" \\\"value\\\":\\\"device_1\\\"\\n\", \" }\\n\", \" ]\\n\", \"\t}\\n\", \"]\\n\", \"\\n\")),\n\t\t\tFamily: pulumi.String(\"test\"),\n\t\t\tInferenceAccelerators: ecs.TaskDefinitionInferenceAcceleratorArray{\n\t\t\t\t\u0026ecs.TaskDefinitionInferenceAcceleratorArgs{\n\t\t\t\t\tDeviceName: pulumi.String(\"device_1\"),\n\t\t\t\t\tDeviceType: pulumi.String(\"eia1.medium\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nECS Task Definitions can be imported via their Amazon Resource Name (ARN)\n\n```sh\n $ pulumi import aws:ecs/taskDefinition:TaskDefinition example arn:aws:ecs:us-east-1:012345678910:task-definition/mytaskfamily:123\n```\n\n ", "inputProperties": { "containerDefinitions": { "description": "A list of valid [container definitions](http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerDefinition.html) provided as a single valid JSON document. Please note that you should only provide values that are part of the container definition document. For a detailed description of what parameters are available, see the [Task Definition Parameters](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html) section from the official [Developer Guide](https://docs.aws.amazon.com/AmazonECS/latest/developerguide).\n", @@ -72301,7 +74537,7 @@ } }, "aws:efs/fileSystem:FileSystem": { - "description": "Provides an Elastic File System (EFS) File System resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### EFS File System w/ tags\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst foo = new aws.efs.FileSystem(\"foo\", {\n tags: {\n Name: \"MyProduct\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nfoo = aws.efs.FileSystem(\"foo\", tags={\n \"Name\": \"MyProduct\",\n})\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var foo = new Aws.Efs.FileSystem(\"foo\", new Aws.Efs.FileSystemArgs\n {\n Tags = \n {\n { \"Name\", \"MyProduct\" },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/efs\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := efs.NewFileSystem(ctx, \"foo\", \u0026efs.FileSystemArgs{\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Name\": pulumi.String(\"MyProduct\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Using lifecycle policy\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst fooWithLifecylePolicy = new aws.efs.FileSystem(\"foo_with_lifecyle_policy\", {\n lifecyclePolicy: {\n transitionToIa: \"AFTER_30_DAYS\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nfoo_with_lifecyle_policy = aws.efs.FileSystem(\"fooWithLifecylePolicy\", lifecycle_policy=aws.efs.FileSystemLifecyclePolicyArgs(\n transition_to_ia=\"AFTER_30_DAYS\",\n))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var fooWithLifecylePolicy = new Aws.Efs.FileSystem(\"fooWithLifecylePolicy\", new Aws.Efs.FileSystemArgs\n {\n LifecyclePolicy = new Aws.Efs.Inputs.FileSystemLifecyclePolicyArgs\n {\n TransitionToIa = \"AFTER_30_DAYS\",\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/efs\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := efs.NewFileSystem(ctx, \"fooWithLifecylePolicy\", \u0026efs.FileSystemArgs{\n\t\t\tLifecyclePolicy: \u0026efs.FileSystemLifecyclePolicyArgs{\n\t\t\t\tTransitionToIa: pulumi.String(\"AFTER_30_DAYS\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThe EFS file systems can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:efs/fileSystem:FileSystem foo fs-6fa144c6\n```\n\n ", + "description": "Provides an Elastic File System (EFS) File System resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### EFS File System w/ tags\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst foo = new aws.efs.FileSystem(\"foo\", {\n tags: {\n Name: \"MyProduct\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nfoo = aws.efs.FileSystem(\"foo\", tags={\n \"Name\": \"MyProduct\",\n})\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var foo = new Aws.Efs.FileSystem(\"foo\", new Aws.Efs.FileSystemArgs\n {\n Tags = \n {\n { \"Name\", \"MyProduct\" },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/efs\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := efs.NewFileSystem(ctx, \"foo\", \u0026efs.FileSystemArgs{\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Name\": pulumi.String(\"MyProduct\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Using lifecycle policy\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst fooWithLifecylePolicy = new aws.efs.FileSystem(\"foo_with_lifecyle_policy\", {\n lifecyclePolicies: {\n transitionToIa: \"AFTER_30_DAYS\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nfoo_with_lifecyle_policy = aws.efs.FileSystem(\"fooWithLifecylePolicy\", lifecycle_policy=aws.efs.FileSystemLifecyclePolicyArgs(\n transition_to_ia=\"AFTER_30_DAYS\",\n))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var fooWithLifecylePolicy = new Aws.Efs.FileSystem(\"fooWithLifecylePolicy\", new Aws.Efs.FileSystemArgs\n {\n LifecyclePolicy = new Aws.Efs.Inputs.FileSystemLifecyclePolicyArgs\n {\n TransitionToIa = \"AFTER_30_DAYS\",\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/efs\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := efs.NewFileSystem(ctx, \"fooWithLifecylePolicy\", \u0026efs.FileSystemArgs{\n\t\t\tLifecyclePolicy: \u0026efs.FileSystemLifecyclePolicyArgs{\n\t\t\t\tTransitionToIa: pulumi.String(\"AFTER_30_DAYS\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThe EFS file systems can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:efs/fileSystem:FileSystem foo fs-6fa144c6\n```\n\n ", "inputProperties": { "availabilityZoneName": { "description": "the AWS Availability Zone in which to create the file system. Used to create a file system that uses One Zone storage classes. See [user guide](https://docs.aws.amazon.com/efs/latest/ug/storage-classes.html) for more information.\n", @@ -72853,7 +75089,7 @@ } }, "aws:eks/cluster:Cluster": { - "description": "Manages an EKS Cluster.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Example IAM Role for EKS Cluster\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.iam.Role(\"example\", {assumeRolePolicy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"Service\": \"eks.amazonaws.com\"\n },\n \"Action\": \"sts:AssumeRole\"\n }\n ]\n}\n`});\nconst example_AmazonEKSClusterPolicy = new aws.iam.RolePolicyAttachment(\"example-AmazonEKSClusterPolicy\", {\n policyArn: \"arn:aws:iam::aws:policy/AmazonEKSClusterPolicy\",\n role: example.name,\n});\n// Optionally, enable Security Groups for Pods\n// Reference: https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html\nconst example_AmazonEKSVPCResourceController = new aws.iam.RolePolicyAttachment(\"example-AmazonEKSVPCResourceController\", {\n policyArn: \"arn:aws:iam::aws:policy/AmazonEKSVPCResourceController\",\n role: example.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.iam.Role(\"example\", assume_role_policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"Service\": \"eks.amazonaws.com\"\n },\n \"Action\": \"sts:AssumeRole\"\n }\n ]\n}\n\"\"\")\nexample__amazon_eks_cluster_policy = aws.iam.RolePolicyAttachment(\"example-AmazonEKSClusterPolicy\",\n policy_arn=\"arn:aws:iam::aws:policy/AmazonEKSClusterPolicy\",\n role=example.name)\n# Optionally, enable Security Groups for Pods\n# Reference: https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html\nexample__amazon_eksvpc_resource_controller = aws.iam.RolePolicyAttachment(\"example-AmazonEKSVPCResourceController\",\n policy_arn=\"arn:aws:iam::aws:policy/AmazonEKSVPCResourceController\",\n role=example.name)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Iam.Role(\"example\", new Aws.Iam.RoleArgs\n {\n AssumeRolePolicy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Principal\"\": {\n \"\"Service\"\": \"\"eks.amazonaws.com\"\"\n },\n \"\"Action\"\": \"\"sts:AssumeRole\"\"\n }\n ]\n}\n\",\n });\n var example_AmazonEKSClusterPolicy = new Aws.Iam.RolePolicyAttachment(\"example-AmazonEKSClusterPolicy\", new Aws.Iam.RolePolicyAttachmentArgs\n {\n PolicyArn = \"arn:aws:iam::aws:policy/AmazonEKSClusterPolicy\",\n Role = example.Name,\n });\n // Optionally, enable Security Groups for Pods\n // Reference: https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html\n var example_AmazonEKSVPCResourceController = new Aws.Iam.RolePolicyAttachment(\"example-AmazonEKSVPCResourceController\", new Aws.Iam.RolePolicyAttachmentArgs\n {\n PolicyArn = \"arn:aws:iam::aws:policy/AmazonEKSVPCResourceController\",\n Role = example.Name,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := iam.NewRole(ctx, \"example\", \u0026iam.RoleArgs{\n\t\t\tAssumeRolePolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Principal\\\": {\\n\", \" \\\"Service\\\": \\\"eks.amazonaws.com\\\"\\n\", \" },\\n\", \" \\\"Action\\\": \\\"sts:AssumeRole\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewRolePolicyAttachment(ctx, \"example_AmazonEKSClusterPolicy\", \u0026iam.RolePolicyAttachmentArgs{\n\t\t\tPolicyArn: pulumi.String(\"arn:aws:iam::aws:policy/AmazonEKSClusterPolicy\"),\n\t\t\tRole: example.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewRolePolicyAttachment(ctx, \"example_AmazonEKSVPCResourceController\", \u0026iam.RolePolicyAttachmentArgs{\n\t\t\tPolicyArn: pulumi.String(\"arn:aws:iam::aws:policy/AmazonEKSVPCResourceController\"),\n\t\t\tRole: example.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Enabling Control Plane Logging\n\n[EKS Control Plane Logging](https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html) can be enabled via the `enabled_cluster_log_types` argument. To manage the CloudWatch Log Group retention period, the `aws.cloudwatch.LogGroup` resource can be used.\n\n\u003e The below configuration uses [`dependsOn`](https://www.pulumi.com/docs/intro/concepts/programming-model/#dependson) to prevent ordering issues with EKS automatically creating the log group first and a variable for naming consistency. Other ordering and naming methodologies may be more appropriate for your environment.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst config = new pulumi.Config();\nconst clusterName = config.get(\"clusterName\") || \"example\";\nconst exampleLogGroup = new aws.cloudwatch.LogGroup(\"exampleLogGroup\", {retentionInDays: 7});\n// ... potentially other configuration ...\nconst exampleCluster = new aws.eks.Cluster(\"exampleCluster\", {enabledClusterLogTypes: [\n \"api\",\n \"audit\",\n]}, {\n dependsOn: [exampleLogGroup],\n});\n// ... other configuration ...\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nconfig = pulumi.Config()\ncluster_name = config.get(\"clusterName\")\nif cluster_name is None:\n cluster_name = \"example\"\nexample_log_group = aws.cloudwatch.LogGroup(\"exampleLogGroup\", retention_in_days=7)\n# ... potentially other configuration ...\nexample_cluster = aws.eks.Cluster(\"exampleCluster\", enabled_cluster_log_types=[\n \"api\",\n \"audit\",\n],\nopts=pulumi.ResourceOptions(depends_on=[example_log_group]))\n# ... other configuration ...\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var config = new Config();\n var clusterName = config.Get(\"clusterName\") ?? \"example\";\n var exampleLogGroup = new Aws.CloudWatch.LogGroup(\"exampleLogGroup\", new Aws.CloudWatch.LogGroupArgs\n {\n RetentionInDays = 7,\n });\n // ... potentially other configuration ...\n var exampleCluster = new Aws.Eks.Cluster(\"exampleCluster\", new Aws.Eks.ClusterArgs\n {\n EnabledClusterLogTypes = \n {\n \"api\",\n \"audit\",\n },\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n exampleLogGroup,\n },\n });\n // ... other configuration ...\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudwatch\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/eks\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcfg := config.New(ctx, \"\")\n\t\tclusterName := \"example\"\n\t\tif param := cfg.Get(\"clusterName\"); param != \"\" {\n\t\t\tclusterName = param\n\t\t}\n\t\texampleLogGroup, err := cloudwatch.NewLogGroup(ctx, \"exampleLogGroup\", \u0026cloudwatch.LogGroupArgs{\n\t\t\tRetentionInDays: pulumi.Int(7),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = eks.NewCluster(ctx, \"exampleCluster\", \u0026eks.ClusterArgs{\n\t\t\tEnabledClusterLogTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"api\"),\n\t\t\t\tpulumi.String(\"audit\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texampleLogGroup,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nEKS Clusters can be imported using the `name`, e.g.\n\n```sh\n $ pulumi import aws:eks/cluster:Cluster my_cluster my_cluster\n```\n\n ", + "description": "Manages an EKS Cluster.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic Usage\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.eks.Cluster(\"example\", {\n roleArn: aws_iam_role.example.arn,\n vpcConfig: {\n subnetIds: [\n aws_subnet.example1.id,\n aws_subnet.example2.id,\n ],\n },\n}, {\n dependsOn: [\n aws_iam_role_policy_attachment[\"example-AmazonEKSClusterPolicy\"],\n aws_iam_role_policy_attachment[\"example-AmazonEKSVPCResourceController\"],\n ],\n});\nexport const endpoint = example.endpoint;\nexport const kubeconfig_certificate_authority_data = example.certificateAuthority.apply(certificateAuthority =\u003e certificateAuthority.data);\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.eks.Cluster(\"example\",\n role_arn=aws_iam_role[\"example\"][\"arn\"],\n vpc_config=aws.eks.ClusterVpcConfigArgs(\n subnet_ids=[\n aws_subnet[\"example1\"][\"id\"],\n aws_subnet[\"example2\"][\"id\"],\n ],\n ),\n opts=pulumi.ResourceOptions(depends_on=[\n aws_iam_role_policy_attachment[\"example-AmazonEKSClusterPolicy\"],\n aws_iam_role_policy_attachment[\"example-AmazonEKSVPCResourceController\"],\n ]))\npulumi.export(\"endpoint\", example.endpoint)\npulumi.export(\"kubeconfig-certificate-authority-data\", example.certificate_authority.data)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Eks.Cluster(\"example\", new Aws.Eks.ClusterArgs\n {\n RoleArn = aws_iam_role.Example.Arn,\n VpcConfig = new Aws.Eks.Inputs.ClusterVpcConfigArgs\n {\n SubnetIds = \n {\n aws_subnet.Example1.Id,\n aws_subnet.Example2.Id,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n aws_iam_role_policy_attachment.Example_AmazonEKSClusterPolicy,\n aws_iam_role_policy_attachment.Example_AmazonEKSVPCResourceController,\n },\n });\n this.Endpoint = example.Endpoint;\n this.Kubeconfig_certificate_authority_data = example.CertificateAuthority.Apply(certificateAuthority =\u003e certificateAuthority.Data);\n }\n\n [Output(\"endpoint\")]\n public Output\u003cstring\u003e Endpoint { get; set; }\n [Output(\"kubeconfig-certificate-authority-data\")]\n public Output\u003cstring\u003e Kubeconfig_certificate_authority_data { get; set; }\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/eks\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := eks.NewCluster(ctx, \"example\", \u0026eks.ClusterArgs{\n\t\t\tRoleArn: pulumi.Any(aws_iam_role.Example.Arn),\n\t\t\tVpcConfig: \u0026eks.ClusterVpcConfigArgs{\n\t\t\t\tSubnetIds: pulumi.StringArray{\n\t\t\t\t\tpulumi.Any(aws_subnet.Example1.Id),\n\t\t\t\t\tpulumi.Any(aws_subnet.Example2.Id),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\taws_iam_role_policy_attachment.Example - AmazonEKSClusterPolicy,\n\t\t\taws_iam_role_policy_attachment.Example - AmazonEKSVPCResourceController,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"endpoint\", example.Endpoint)\n\t\tctx.Export(\"kubeconfig-certificate-authority-data\", example.CertificateAuthority.ApplyT(func(certificateAuthority eks.ClusterCertificateAuthority) (string, error) {\n\t\t\treturn certificateAuthority.Data, nil\n\t\t}).(pulumi.StringOutput))\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Example IAM Role for EKS Cluster\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.iam.Role(\"example\", {assumeRolePolicy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"Service\": \"eks.amazonaws.com\"\n },\n \"Action\": \"sts:AssumeRole\"\n }\n ]\n}\n`});\nconst example_AmazonEKSClusterPolicy = new aws.iam.RolePolicyAttachment(\"example-AmazonEKSClusterPolicy\", {\n policyArn: \"arn:aws:iam::aws:policy/AmazonEKSClusterPolicy\",\n role: example.name,\n});\n// Optionally, enable Security Groups for Pods\n// Reference: https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html\nconst example_AmazonEKSVPCResourceController = new aws.iam.RolePolicyAttachment(\"example-AmazonEKSVPCResourceController\", {\n policyArn: \"arn:aws:iam::aws:policy/AmazonEKSVPCResourceController\",\n role: example.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.iam.Role(\"example\", assume_role_policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"Service\": \"eks.amazonaws.com\"\n },\n \"Action\": \"sts:AssumeRole\"\n }\n ]\n}\n\"\"\")\nexample__amazon_eks_cluster_policy = aws.iam.RolePolicyAttachment(\"example-AmazonEKSClusterPolicy\",\n policy_arn=\"arn:aws:iam::aws:policy/AmazonEKSClusterPolicy\",\n role=example.name)\n# Optionally, enable Security Groups for Pods\n# Reference: https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html\nexample__amazon_eksvpc_resource_controller = aws.iam.RolePolicyAttachment(\"example-AmazonEKSVPCResourceController\",\n policy_arn=\"arn:aws:iam::aws:policy/AmazonEKSVPCResourceController\",\n role=example.name)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Iam.Role(\"example\", new Aws.Iam.RoleArgs\n {\n AssumeRolePolicy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Principal\"\": {\n \"\"Service\"\": \"\"eks.amazonaws.com\"\"\n },\n \"\"Action\"\": \"\"sts:AssumeRole\"\"\n }\n ]\n}\n\",\n });\n var example_AmazonEKSClusterPolicy = new Aws.Iam.RolePolicyAttachment(\"example-AmazonEKSClusterPolicy\", new Aws.Iam.RolePolicyAttachmentArgs\n {\n PolicyArn = \"arn:aws:iam::aws:policy/AmazonEKSClusterPolicy\",\n Role = example.Name,\n });\n // Optionally, enable Security Groups for Pods\n // Reference: https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html\n var example_AmazonEKSVPCResourceController = new Aws.Iam.RolePolicyAttachment(\"example-AmazonEKSVPCResourceController\", new Aws.Iam.RolePolicyAttachmentArgs\n {\n PolicyArn = \"arn:aws:iam::aws:policy/AmazonEKSVPCResourceController\",\n Role = example.Name,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := iam.NewRole(ctx, \"example\", \u0026iam.RoleArgs{\n\t\t\tAssumeRolePolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Principal\\\": {\\n\", \" \\\"Service\\\": \\\"eks.amazonaws.com\\\"\\n\", \" },\\n\", \" \\\"Action\\\": \\\"sts:AssumeRole\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewRolePolicyAttachment(ctx, \"example_AmazonEKSClusterPolicy\", \u0026iam.RolePolicyAttachmentArgs{\n\t\t\tPolicyArn: pulumi.String(\"arn:aws:iam::aws:policy/AmazonEKSClusterPolicy\"),\n\t\t\tRole: example.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewRolePolicyAttachment(ctx, \"example_AmazonEKSVPCResourceController\", \u0026iam.RolePolicyAttachmentArgs{\n\t\t\tPolicyArn: pulumi.String(\"arn:aws:iam::aws:policy/AmazonEKSVPCResourceController\"),\n\t\t\tRole: example.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Enabling Control Plane Logging\n\n[EKS Control Plane Logging](https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html) can be enabled via the `enabled_cluster_log_types` argument. To manage the CloudWatch Log Group retention period, the `aws.cloudwatch.LogGroup` resource can be used.\n\n\u003e The below configuration uses [`dependsOn`](https://www.pulumi.com/docs/intro/concepts/programming-model/#dependson) to prevent ordering issues with EKS automatically creating the log group first and a variable for naming consistency. Other ordering and naming methodologies may be more appropriate for your environment.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst config = new pulumi.Config();\nconst clusterName = config.get(\"clusterName\") || \"example\";\nconst exampleLogGroup = new aws.cloudwatch.LogGroup(\"exampleLogGroup\", {retentionInDays: 7});\n// ... potentially other configuration ...\nconst exampleCluster = new aws.eks.Cluster(\"exampleCluster\", {enabledClusterLogTypes: [\n \"api\",\n \"audit\",\n]}, {\n dependsOn: [exampleLogGroup],\n});\n// ... other configuration ...\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nconfig = pulumi.Config()\ncluster_name = config.get(\"clusterName\")\nif cluster_name is None:\n cluster_name = \"example\"\nexample_log_group = aws.cloudwatch.LogGroup(\"exampleLogGroup\", retention_in_days=7)\n# ... potentially other configuration ...\nexample_cluster = aws.eks.Cluster(\"exampleCluster\", enabled_cluster_log_types=[\n \"api\",\n \"audit\",\n],\nopts=pulumi.ResourceOptions(depends_on=[example_log_group]))\n# ... other configuration ...\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var config = new Config();\n var clusterName = config.Get(\"clusterName\") ?? \"example\";\n var exampleLogGroup = new Aws.CloudWatch.LogGroup(\"exampleLogGroup\", new Aws.CloudWatch.LogGroupArgs\n {\n RetentionInDays = 7,\n });\n // ... potentially other configuration ...\n var exampleCluster = new Aws.Eks.Cluster(\"exampleCluster\", new Aws.Eks.ClusterArgs\n {\n EnabledClusterLogTypes = \n {\n \"api\",\n \"audit\",\n },\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n exampleLogGroup,\n },\n });\n // ... other configuration ...\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudwatch\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/eks\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcfg := config.New(ctx, \"\")\n\t\tclusterName := \"example\"\n\t\tif param := cfg.Get(\"clusterName\"); param != \"\" {\n\t\t\tclusterName = param\n\t\t}\n\t\texampleLogGroup, err := cloudwatch.NewLogGroup(ctx, \"exampleLogGroup\", \u0026cloudwatch.LogGroupArgs{\n\t\t\tRetentionInDays: pulumi.Int(7),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = eks.NewCluster(ctx, \"exampleCluster\", \u0026eks.ClusterArgs{\n\t\t\tEnabledClusterLogTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"api\"),\n\t\t\t\tpulumi.String(\"audit\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texampleLogGroup,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nEKS Clusters can be imported using the `name`, e.g.\n\n```sh\n $ pulumi import aws:eks/cluster:Cluster my_cluster my_cluster\n```\n\n ", "inputProperties": { "enabledClusterLogTypes": { "description": "List of the desired control plane logging to enable. For more information, see [Amazon EKS Control Plane Logging](https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html).\n", @@ -73715,7 +75951,7 @@ "type": "string" }, "numCacheNodes": { - "description": "The initial number of cache nodes that the cache cluster will have. For Redis, this value must be 1. For Memcached, this value must be between 1 and 20. If this number is reduced on subsequent runs, the highest numbered nodes will be removed.\n", + "description": "The initial number of cache nodes that the cache cluster will have. For Redis, this value must be 1. For Memcached, this value must be between 1 and 40. If this number is reduced on subsequent runs, the highest numbered nodes will be removed.\n", "type": "integer" }, "parameterGroupName": { @@ -73843,7 +76079,7 @@ "type": "string" }, "numCacheNodes": { - "description": "The initial number of cache nodes that the cache cluster will have. For Redis, this value must be 1. For Memcached, this value must be between 1 and 20. If this number is reduced on subsequent runs, the highest numbered nodes will be removed.\n", + "description": "The initial number of cache nodes that the cache cluster will have. For Redis, this value must be 1. For Memcached, this value must be between 1 and 40. If this number is reduced on subsequent runs, the highest numbered nodes will be removed.\n", "type": "integer" }, "parameterGroupName": { @@ -74003,7 +76239,7 @@ "type": "string" }, "numCacheNodes": { - "description": "The initial number of cache nodes that the cache cluster will have. For Redis, this value must be 1. For Memcached, this value must be between 1 and 20. If this number is reduced on subsequent runs, the highest numbered nodes will be removed.\n", + "description": "The initial number of cache nodes that the cache cluster will have. For Redis, this value must be 1. For Memcached, this value must be between 1 and 40. If this number is reduced on subsequent runs, the highest numbered nodes will be removed.\n", "type": "integer" }, "parameterGroupName": { @@ -76539,7 +78775,7 @@ }, "aws:elasticloadbalancing/loadBalancerBackendServerPolicy:LoadBalancerBackendServerPolicy": { "deprecationMessage": "aws.elasticloadbalancing.LoadBalancerBackendServerPolicy has been deprecated in favor of aws.elb.LoadBalancerBackendServerPolicy", - "description": "Attaches a load balancer policy to an ELB backend server.\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst wu_tang = new aws.elb.LoadBalancer(\"wu-tang\", {\n availabilityZones: [\"us-east-1a\"],\n listeners: [{\n instancePort: 443,\n instanceProtocol: \"http\",\n lbPort: 443,\n lbProtocol: \"https\",\n sslCertificateId: \"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n }],\n tags: {\n Name: \"wu-tang\",\n },\n});\nconst wu_tang_ca_pubkey_policy = new aws.elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-ca-pubkey-policy\",\n policyTypeName: \"PublicKeyPolicyType\",\n policyAttributes: [{\n name: \"PublicKey\",\n value: fs.readFileSync(\"wu-tang-pubkey\"),\n }],\n});\nconst wu_tang_root_ca_backend_auth_policy = new aws.elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-root-ca-backend-auth-policy\",\n policyTypeName: \"BackendServerAuthenticationPolicyType\",\n policyAttributes: [{\n name: \"PublicKeyPolicyName\",\n value: aws_load_balancer_policy[\"wu-tang-root-ca-pubkey-policy\"].policy_name,\n }],\n});\nconst wu_tang_backend_auth_policies_443 = new aws.elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\", {\n loadBalancerName: wu_tang.name,\n instancePort: 443,\n policyNames: [wu_tang_root_ca_backend_auth_policy.policyName],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nwu_tang = aws.elb.LoadBalancer(\"wu-tang\",\n availability_zones=[\"us-east-1a\"],\n listeners=[aws.elb.LoadBalancerListenerArgs(\n instance_port=443,\n instance_protocol=\"http\",\n lb_port=443,\n lb_protocol=\"https\",\n ssl_certificate_id=\"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n )],\n tags={\n \"Name\": \"wu-tang\",\n })\nwu_tang_ca_pubkey_policy = aws.elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-ca-pubkey-policy\",\n policy_type_name=\"PublicKeyPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"PublicKey\",\n value=(lambda path: open(path).read())(\"wu-tang-pubkey\"),\n )])\nwu_tang_root_ca_backend_auth_policy = aws.elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-root-ca-backend-auth-policy\",\n policy_type_name=\"BackendServerAuthenticationPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"PublicKeyPolicyName\",\n value=aws_load_balancer_policy[\"wu-tang-root-ca-pubkey-policy\"][\"policy_name\"],\n )])\nwu_tang_backend_auth_policies_443 = aws.elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\",\n load_balancer_name=wu_tang.name,\n instance_port=443,\n policy_names=[wu_tang_root_ca_backend_auth_policy.policy_name])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var wu_tang = new Aws.Elb.LoadBalancer(\"wu-tang\", new Aws.Elb.LoadBalancerArgs\n {\n AvailabilityZones = \n {\n \"us-east-1a\",\n },\n Listeners = \n {\n new Aws.Elb.Inputs.LoadBalancerListenerArgs\n {\n InstancePort = 443,\n InstanceProtocol = \"http\",\n LbPort = 443,\n LbProtocol = \"https\",\n SslCertificateId = \"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n },\n },\n Tags = \n {\n { \"Name\", \"wu-tang\" },\n },\n });\n var wu_tang_ca_pubkey_policy = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-ca-pubkey-policy\",\n PolicyTypeName = \"PublicKeyPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"PublicKey\",\n Value = File.ReadAllText(\"wu-tang-pubkey\"),\n },\n },\n });\n var wu_tang_root_ca_backend_auth_policy = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-root-ca-backend-auth-policy\",\n PolicyTypeName = \"BackendServerAuthenticationPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"PublicKeyPolicyName\",\n Value = aws_load_balancer_policy.Wu_tang_root_ca_pubkey_policy.Policy_name,\n },\n },\n });\n var wu_tang_backend_auth_policies_443 = new Aws.Elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\", new Aws.Elb.LoadBalancerBackendServerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n InstancePort = 443,\n PolicyNames = \n {\n wu_tang_root_ca_backend_auth_policy.PolicyName,\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Attaches a load balancer policy to an ELB backend server.\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst wu_tang = new aws.elb.LoadBalancer(\"wu-tang\", {\n availabilityZones: [\"us-east-1a\"],\n listeners: [{\n instancePort: 443,\n instanceProtocol: \"http\",\n lbPort: 443,\n lbProtocol: \"https\",\n sslCertificateId: \"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n }],\n tags: {\n Name: \"wu-tang\",\n },\n});\nconst wu_tang_ca_pubkey_policy = new aws.elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-ca-pubkey-policy\",\n policyTypeName: \"PublicKeyPolicyType\",\n policyAttributes: [{\n name: \"PublicKey\",\n value: fs.readFileSync(\"wu-tang-pubkey\"),\n }],\n});\nconst wu_tang_root_ca_backend_auth_policy = new aws.elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-root-ca-backend-auth-policy\",\n policyTypeName: \"BackendServerAuthenticationPolicyType\",\n policyAttributes: [{\n name: \"PublicKeyPolicyName\",\n value: aws_load_balancer_policy[\"wu-tang-root-ca-pubkey-policy\"].policy_name,\n }],\n});\nconst wu_tang_backend_auth_policies_443 = new aws.elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\", {\n loadBalancerName: wu_tang.name,\n instancePort: 443,\n policyNames: [wu_tang_root_ca_backend_auth_policy.policyName],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nwu_tang = aws.elb.LoadBalancer(\"wu-tang\",\n availability_zones=[\"us-east-1a\"],\n listeners=[aws.elb.LoadBalancerListenerArgs(\n instance_port=443,\n instance_protocol=\"http\",\n lb_port=443,\n lb_protocol=\"https\",\n ssl_certificate_id=\"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n )],\n tags={\n \"Name\": \"wu-tang\",\n })\nwu_tang_ca_pubkey_policy = aws.elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-ca-pubkey-policy\",\n policy_type_name=\"PublicKeyPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"PublicKey\",\n value=(lambda path: open(path).read())(\"wu-tang-pubkey\"),\n )])\nwu_tang_root_ca_backend_auth_policy = aws.elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-root-ca-backend-auth-policy\",\n policy_type_name=\"BackendServerAuthenticationPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"PublicKeyPolicyName\",\n value=aws_load_balancer_policy[\"wu-tang-root-ca-pubkey-policy\"][\"policy_name\"],\n )])\nwu_tang_backend_auth_policies_443 = aws.elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\",\n load_balancer_name=wu_tang.name,\n instance_port=443,\n policy_names=[wu_tang_root_ca_backend_auth_policy.policy_name])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var wu_tang = new Aws.Elb.LoadBalancer(\"wu-tang\", new Aws.Elb.LoadBalancerArgs\n {\n AvailabilityZones = \n {\n \"us-east-1a\",\n },\n Listeners = \n {\n new Aws.Elb.Inputs.LoadBalancerListenerArgs\n {\n InstancePort = 443,\n InstanceProtocol = \"http\",\n LbPort = 443,\n LbProtocol = \"https\",\n SslCertificateId = \"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n },\n },\n Tags = \n {\n { \"Name\", \"wu-tang\" },\n },\n });\n var wu_tang_ca_pubkey_policy = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-ca-pubkey-policy\",\n PolicyTypeName = \"PublicKeyPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"PublicKey\",\n Value = File.ReadAllText(\"wu-tang-pubkey\"),\n },\n },\n });\n var wu_tang_root_ca_backend_auth_policy = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-root-ca-backend-auth-policy\",\n PolicyTypeName = \"BackendServerAuthenticationPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"PublicKeyPolicyName\",\n Value = aws_load_balancer_policy.Wu_tang_root_ca_pubkey_policy.Policy_name,\n },\n },\n });\n var wu_tang_backend_auth_policies_443 = new Aws.Elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\", new Aws.Elb.LoadBalancerBackendServerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n InstancePort = 443,\n PolicyNames = \n {\n wu_tang_root_ca_backend_auth_policy.PolicyName,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/elb\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := elb.NewLoadBalancer(ctx, \"wu_tang\", \u0026elb.LoadBalancerArgs{\n\t\t\tAvailabilityZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-east-1a\"),\n\t\t\t},\n\t\t\tListeners: elb.LoadBalancerListenerArray{\n\t\t\t\t\u0026elb.LoadBalancerListenerArgs{\n\t\t\t\t\tInstancePort: pulumi.Int(443),\n\t\t\t\t\tInstanceProtocol: pulumi.String(\"http\"),\n\t\t\t\t\tLbPort: pulumi.Int(443),\n\t\t\t\t\tLbProtocol: pulumi.String(\"https\"),\n\t\t\t\t\tSslCertificateId: pulumi.String(\"arn:aws:iam::000000000000:server-certificate/wu-tang.net\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Name\": pulumi.String(\"wu-tang\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewLoadBalancerPolicy(ctx, \"wu_tang_ca_pubkey_policy\", \u0026elb.LoadBalancerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tPolicyName: pulumi.String(\"wu-tang-ca-pubkey-policy\"),\n\t\t\tPolicyTypeName: pulumi.String(\"PublicKeyPolicyType\"),\n\t\t\tPolicyAttributes: elb.LoadBalancerPolicyPolicyAttributeArray{\n\t\t\t\t\u0026elb.LoadBalancerPolicyPolicyAttributeArgs{\n\t\t\t\t\tName: pulumi.String(\"PublicKey\"),\n\t\t\t\t\tValue: readFileOrPanic(\"wu-tang-pubkey\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewLoadBalancerPolicy(ctx, \"wu_tang_root_ca_backend_auth_policy\", \u0026elb.LoadBalancerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tPolicyName: pulumi.String(\"wu-tang-root-ca-backend-auth-policy\"),\n\t\t\tPolicyTypeName: pulumi.String(\"BackendServerAuthenticationPolicyType\"),\n\t\t\tPolicyAttributes: elb.LoadBalancerPolicyPolicyAttributeArray{\n\t\t\t\t\u0026elb.LoadBalancerPolicyPolicyAttributeArgs{\n\t\t\t\t\tName: pulumi.String(\"PublicKeyPolicyName\"),\n\t\t\t\t\tValue: pulumi.Any(aws_load_balancer_policy.Wu - tang - root - ca - pubkey - policy.Policy_name),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewLoadBalancerBackendServerPolicy(ctx, \"wu_tang_backend_auth_policies_443\", \u0026elb.LoadBalancerBackendServerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tInstancePort: pulumi.Int(443),\n\t\t\tPolicyNames: pulumi.StringArray{\n\t\t\t\twu_tang_root_ca_backend_auth_policy.PolicyName,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputProperties": { "instancePort": { "description": "The instance port to apply the policy to.\n", @@ -76677,7 +78913,7 @@ }, "aws:elasticloadbalancing/loadBalancerPolicy:LoadBalancerPolicy": { "deprecationMessage": "aws.elasticloadbalancing.LoadBalancerPolicy has been deprecated in favor of aws.elb.LoadBalancerPolicy", - "description": "Provides a load balancer policy, which can be attached to an ELB listener or backend server.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst wu_tang = new aws.elb.LoadBalancer(\"wu-tang\", {\n availabilityZones: [\"us-east-1a\"],\n listeners: [{\n instancePort: 443,\n instanceProtocol: \"http\",\n lbPort: 443,\n lbProtocol: \"https\",\n sslCertificateId: \"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n }],\n tags: {\n Name: \"wu-tang\",\n },\n});\nconst wu_tang_ca_pubkey_policy = new aws.elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-ca-pubkey-policy\",\n policyTypeName: \"PublicKeyPolicyType\",\n policyAttributes: [{\n name: \"PublicKey\",\n value: fs.readFileSync(\"wu-tang-pubkey\"),\n }],\n});\nconst wu_tang_root_ca_backend_auth_policy = new aws.elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-root-ca-backend-auth-policy\",\n policyTypeName: \"BackendServerAuthenticationPolicyType\",\n policyAttributes: [{\n name: \"PublicKeyPolicyName\",\n value: aws_load_balancer_policy[\"wu-tang-root-ca-pubkey-policy\"].policy_name,\n }],\n});\nconst wu_tang_ssl = new aws.elb.LoadBalancerPolicy(\"wu-tang-ssl\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-ssl\",\n policyTypeName: \"SSLNegotiationPolicyType\",\n policyAttributes: [\n {\n name: \"ECDHE-ECDSA-AES128-GCM-SHA256\",\n value: \"true\",\n },\n {\n name: \"Protocol-TLSv1.2\",\n value: \"true\",\n },\n ],\n});\nconst wu_tang_ssl_tls_1_1 = new aws.elb.LoadBalancerPolicy(\"wu-tang-ssl-tls-1-1\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-ssl\",\n policyTypeName: \"SSLNegotiationPolicyType\",\n policyAttributes: [{\n name: \"Reference-Security-Policy\",\n value: \"ELBSecurityPolicy-TLS-1-1-2017-01\",\n }],\n});\nconst wu_tang_backend_auth_policies_443 = new aws.elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\", {\n loadBalancerName: wu_tang.name,\n instancePort: 443,\n policyNames: [wu_tang_root_ca_backend_auth_policy.policyName],\n});\nconst wu_tang_listener_policies_443 = new aws.elb.ListenerPolicy(\"wu-tang-listener-policies-443\", {\n loadBalancerName: wu_tang.name,\n loadBalancerPort: 443,\n policyNames: [wu_tang_ssl.policyName],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nwu_tang = aws.elb.LoadBalancer(\"wu-tang\",\n availability_zones=[\"us-east-1a\"],\n listeners=[aws.elb.LoadBalancerListenerArgs(\n instance_port=443,\n instance_protocol=\"http\",\n lb_port=443,\n lb_protocol=\"https\",\n ssl_certificate_id=\"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n )],\n tags={\n \"Name\": \"wu-tang\",\n })\nwu_tang_ca_pubkey_policy = aws.elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-ca-pubkey-policy\",\n policy_type_name=\"PublicKeyPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"PublicKey\",\n value=(lambda path: open(path).read())(\"wu-tang-pubkey\"),\n )])\nwu_tang_root_ca_backend_auth_policy = aws.elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-root-ca-backend-auth-policy\",\n policy_type_name=\"BackendServerAuthenticationPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"PublicKeyPolicyName\",\n value=aws_load_balancer_policy[\"wu-tang-root-ca-pubkey-policy\"][\"policy_name\"],\n )])\nwu_tang_ssl = aws.elb.LoadBalancerPolicy(\"wu-tang-ssl\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-ssl\",\n policy_type_name=\"SSLNegotiationPolicyType\",\n policy_attributes=[\n aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"ECDHE-ECDSA-AES128-GCM-SHA256\",\n value=\"true\",\n ),\n aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"Protocol-TLSv1.2\",\n value=\"true\",\n ),\n ])\nwu_tang_ssl_tls_1_1 = aws.elb.LoadBalancerPolicy(\"wu-tang-ssl-tls-1-1\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-ssl\",\n policy_type_name=\"SSLNegotiationPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"Reference-Security-Policy\",\n value=\"ELBSecurityPolicy-TLS-1-1-2017-01\",\n )])\nwu_tang_backend_auth_policies_443 = aws.elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\",\n load_balancer_name=wu_tang.name,\n instance_port=443,\n policy_names=[wu_tang_root_ca_backend_auth_policy.policy_name])\nwu_tang_listener_policies_443 = aws.elb.ListenerPolicy(\"wu-tang-listener-policies-443\",\n load_balancer_name=wu_tang.name,\n load_balancer_port=443,\n policy_names=[wu_tang_ssl.policy_name])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var wu_tang = new Aws.Elb.LoadBalancer(\"wu-tang\", new Aws.Elb.LoadBalancerArgs\n {\n AvailabilityZones = \n {\n \"us-east-1a\",\n },\n Listeners = \n {\n new Aws.Elb.Inputs.LoadBalancerListenerArgs\n {\n InstancePort = 443,\n InstanceProtocol = \"http\",\n LbPort = 443,\n LbProtocol = \"https\",\n SslCertificateId = \"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n },\n },\n Tags = \n {\n { \"Name\", \"wu-tang\" },\n },\n });\n var wu_tang_ca_pubkey_policy = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-ca-pubkey-policy\",\n PolicyTypeName = \"PublicKeyPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"PublicKey\",\n Value = File.ReadAllText(\"wu-tang-pubkey\"),\n },\n },\n });\n var wu_tang_root_ca_backend_auth_policy = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-root-ca-backend-auth-policy\",\n PolicyTypeName = \"BackendServerAuthenticationPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"PublicKeyPolicyName\",\n Value = aws_load_balancer_policy.Wu_tang_root_ca_pubkey_policy.Policy_name,\n },\n },\n });\n var wu_tang_ssl = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-ssl\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-ssl\",\n PolicyTypeName = \"SSLNegotiationPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"ECDHE-ECDSA-AES128-GCM-SHA256\",\n Value = \"true\",\n },\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"Protocol-TLSv1.2\",\n Value = \"true\",\n },\n },\n });\n var wu_tang_ssl_tls_1_1 = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-ssl-tls-1-1\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-ssl\",\n PolicyTypeName = \"SSLNegotiationPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"Reference-Security-Policy\",\n Value = \"ELBSecurityPolicy-TLS-1-1-2017-01\",\n },\n },\n });\n var wu_tang_backend_auth_policies_443 = new Aws.Elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\", new Aws.Elb.LoadBalancerBackendServerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n InstancePort = 443,\n PolicyNames = \n {\n wu_tang_root_ca_backend_auth_policy.PolicyName,\n },\n });\n var wu_tang_listener_policies_443 = new Aws.Elb.ListenerPolicy(\"wu-tang-listener-policies-443\", new Aws.Elb.ListenerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n LoadBalancerPort = 443,\n PolicyNames = \n {\n wu_tang_ssl.PolicyName,\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Provides a load balancer policy, which can be attached to an ELB listener or backend server.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst wu_tang = new aws.elb.LoadBalancer(\"wu-tang\", {\n availabilityZones: [\"us-east-1a\"],\n listeners: [{\n instancePort: 443,\n instanceProtocol: \"http\",\n lbPort: 443,\n lbProtocol: \"https\",\n sslCertificateId: \"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n }],\n tags: {\n Name: \"wu-tang\",\n },\n});\nconst wu_tang_ca_pubkey_policy = new aws.elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-ca-pubkey-policy\",\n policyTypeName: \"PublicKeyPolicyType\",\n policyAttributes: [{\n name: \"PublicKey\",\n value: fs.readFileSync(\"wu-tang-pubkey\"),\n }],\n});\nconst wu_tang_root_ca_backend_auth_policy = new aws.elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-root-ca-backend-auth-policy\",\n policyTypeName: \"BackendServerAuthenticationPolicyType\",\n policyAttributes: [{\n name: \"PublicKeyPolicyName\",\n value: aws_load_balancer_policy[\"wu-tang-root-ca-pubkey-policy\"].policy_name,\n }],\n});\nconst wu_tang_ssl = new aws.elb.LoadBalancerPolicy(\"wu-tang-ssl\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-ssl\",\n policyTypeName: \"SSLNegotiationPolicyType\",\n policyAttributes: [\n {\n name: \"ECDHE-ECDSA-AES128-GCM-SHA256\",\n value: \"true\",\n },\n {\n name: \"Protocol-TLSv1.2\",\n value: \"true\",\n },\n ],\n});\nconst wu_tang_ssl_tls_1_1 = new aws.elb.LoadBalancerPolicy(\"wu-tang-ssl-tls-1-1\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-ssl\",\n policyTypeName: \"SSLNegotiationPolicyType\",\n policyAttributes: [{\n name: \"Reference-Security-Policy\",\n value: \"ELBSecurityPolicy-TLS-1-1-2017-01\",\n }],\n});\nconst wu_tang_backend_auth_policies_443 = new aws.elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\", {\n loadBalancerName: wu_tang.name,\n instancePort: 443,\n policyNames: [wu_tang_root_ca_backend_auth_policy.policyName],\n});\nconst wu_tang_listener_policies_443 = new aws.elb.ListenerPolicy(\"wu-tang-listener-policies-443\", {\n loadBalancerName: wu_tang.name,\n loadBalancerPort: 443,\n policyNames: [wu_tang_ssl.policyName],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nwu_tang = aws.elb.LoadBalancer(\"wu-tang\",\n availability_zones=[\"us-east-1a\"],\n listeners=[aws.elb.LoadBalancerListenerArgs(\n instance_port=443,\n instance_protocol=\"http\",\n lb_port=443,\n lb_protocol=\"https\",\n ssl_certificate_id=\"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n )],\n tags={\n \"Name\": \"wu-tang\",\n })\nwu_tang_ca_pubkey_policy = aws.elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-ca-pubkey-policy\",\n policy_type_name=\"PublicKeyPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"PublicKey\",\n value=(lambda path: open(path).read())(\"wu-tang-pubkey\"),\n )])\nwu_tang_root_ca_backend_auth_policy = aws.elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-root-ca-backend-auth-policy\",\n policy_type_name=\"BackendServerAuthenticationPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"PublicKeyPolicyName\",\n value=aws_load_balancer_policy[\"wu-tang-root-ca-pubkey-policy\"][\"policy_name\"],\n )])\nwu_tang_ssl = aws.elb.LoadBalancerPolicy(\"wu-tang-ssl\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-ssl\",\n policy_type_name=\"SSLNegotiationPolicyType\",\n policy_attributes=[\n aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"ECDHE-ECDSA-AES128-GCM-SHA256\",\n value=\"true\",\n ),\n aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"Protocol-TLSv1.2\",\n value=\"true\",\n ),\n ])\nwu_tang_ssl_tls_1_1 = aws.elb.LoadBalancerPolicy(\"wu-tang-ssl-tls-1-1\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-ssl\",\n policy_type_name=\"SSLNegotiationPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"Reference-Security-Policy\",\n value=\"ELBSecurityPolicy-TLS-1-1-2017-01\",\n )])\nwu_tang_backend_auth_policies_443 = aws.elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\",\n load_balancer_name=wu_tang.name,\n instance_port=443,\n policy_names=[wu_tang_root_ca_backend_auth_policy.policy_name])\nwu_tang_listener_policies_443 = aws.elb.ListenerPolicy(\"wu-tang-listener-policies-443\",\n load_balancer_name=wu_tang.name,\n load_balancer_port=443,\n policy_names=[wu_tang_ssl.policy_name])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var wu_tang = new Aws.Elb.LoadBalancer(\"wu-tang\", new Aws.Elb.LoadBalancerArgs\n {\n AvailabilityZones = \n {\n \"us-east-1a\",\n },\n Listeners = \n {\n new Aws.Elb.Inputs.LoadBalancerListenerArgs\n {\n InstancePort = 443,\n InstanceProtocol = \"http\",\n LbPort = 443,\n LbProtocol = \"https\",\n SslCertificateId = \"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n },\n },\n Tags = \n {\n { \"Name\", \"wu-tang\" },\n },\n });\n var wu_tang_ca_pubkey_policy = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-ca-pubkey-policy\",\n PolicyTypeName = \"PublicKeyPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"PublicKey\",\n Value = File.ReadAllText(\"wu-tang-pubkey\"),\n },\n },\n });\n var wu_tang_root_ca_backend_auth_policy = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-root-ca-backend-auth-policy\",\n PolicyTypeName = \"BackendServerAuthenticationPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"PublicKeyPolicyName\",\n Value = aws_load_balancer_policy.Wu_tang_root_ca_pubkey_policy.Policy_name,\n },\n },\n });\n var wu_tang_ssl = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-ssl\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-ssl\",\n PolicyTypeName = \"SSLNegotiationPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"ECDHE-ECDSA-AES128-GCM-SHA256\",\n Value = \"true\",\n },\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"Protocol-TLSv1.2\",\n Value = \"true\",\n },\n },\n });\n var wu_tang_ssl_tls_1_1 = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-ssl-tls-1-1\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-ssl\",\n PolicyTypeName = \"SSLNegotiationPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"Reference-Security-Policy\",\n Value = \"ELBSecurityPolicy-TLS-1-1-2017-01\",\n },\n },\n });\n var wu_tang_backend_auth_policies_443 = new Aws.Elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\", new Aws.Elb.LoadBalancerBackendServerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n InstancePort = 443,\n PolicyNames = \n {\n wu_tang_root_ca_backend_auth_policy.PolicyName,\n },\n });\n var wu_tang_listener_policies_443 = new Aws.Elb.ListenerPolicy(\"wu-tang-listener-policies-443\", new Aws.Elb.ListenerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n LoadBalancerPort = 443,\n PolicyNames = \n {\n wu_tang_ssl.PolicyName,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/elb\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := elb.NewLoadBalancer(ctx, \"wu_tang\", \u0026elb.LoadBalancerArgs{\n\t\t\tAvailabilityZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-east-1a\"),\n\t\t\t},\n\t\t\tListeners: elb.LoadBalancerListenerArray{\n\t\t\t\t\u0026elb.LoadBalancerListenerArgs{\n\t\t\t\t\tInstancePort: pulumi.Int(443),\n\t\t\t\t\tInstanceProtocol: pulumi.String(\"http\"),\n\t\t\t\t\tLbPort: pulumi.Int(443),\n\t\t\t\t\tLbProtocol: pulumi.String(\"https\"),\n\t\t\t\t\tSslCertificateId: pulumi.String(\"arn:aws:iam::000000000000:server-certificate/wu-tang.net\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Name\": pulumi.String(\"wu-tang\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewLoadBalancerPolicy(ctx, \"wu_tang_ca_pubkey_policy\", \u0026elb.LoadBalancerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tPolicyName: pulumi.String(\"wu-tang-ca-pubkey-policy\"),\n\t\t\tPolicyTypeName: pulumi.String(\"PublicKeyPolicyType\"),\n\t\t\tPolicyAttributes: elb.LoadBalancerPolicyPolicyAttributeArray{\n\t\t\t\t\u0026elb.LoadBalancerPolicyPolicyAttributeArgs{\n\t\t\t\t\tName: pulumi.String(\"PublicKey\"),\n\t\t\t\t\tValue: readFileOrPanic(\"wu-tang-pubkey\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewLoadBalancerPolicy(ctx, \"wu_tang_root_ca_backend_auth_policy\", \u0026elb.LoadBalancerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tPolicyName: pulumi.String(\"wu-tang-root-ca-backend-auth-policy\"),\n\t\t\tPolicyTypeName: pulumi.String(\"BackendServerAuthenticationPolicyType\"),\n\t\t\tPolicyAttributes: elb.LoadBalancerPolicyPolicyAttributeArray{\n\t\t\t\t\u0026elb.LoadBalancerPolicyPolicyAttributeArgs{\n\t\t\t\t\tName: pulumi.String(\"PublicKeyPolicyName\"),\n\t\t\t\t\tValue: pulumi.Any(aws_load_balancer_policy.Wu - tang - root - ca - pubkey - policy.Policy_name),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewLoadBalancerPolicy(ctx, \"wu_tang_ssl\", \u0026elb.LoadBalancerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tPolicyName: pulumi.String(\"wu-tang-ssl\"),\n\t\t\tPolicyTypeName: pulumi.String(\"SSLNegotiationPolicyType\"),\n\t\t\tPolicyAttributes: elb.LoadBalancerPolicyPolicyAttributeArray{\n\t\t\t\t\u0026elb.LoadBalancerPolicyPolicyAttributeArgs{\n\t\t\t\t\tName: pulumi.String(\"ECDHE-ECDSA-AES128-GCM-SHA256\"),\n\t\t\t\t\tValue: pulumi.String(\"true\"),\n\t\t\t\t},\n\t\t\t\t\u0026elb.LoadBalancerPolicyPolicyAttributeArgs{\n\t\t\t\t\tName: pulumi.String(\"Protocol-TLSv1.2\"),\n\t\t\t\t\tValue: pulumi.String(\"true\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewLoadBalancerPolicy(ctx, \"wu_tang_ssl_tls_1_1\", \u0026elb.LoadBalancerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tPolicyName: pulumi.String(\"wu-tang-ssl\"),\n\t\t\tPolicyTypeName: pulumi.String(\"SSLNegotiationPolicyType\"),\n\t\t\tPolicyAttributes: elb.LoadBalancerPolicyPolicyAttributeArray{\n\t\t\t\t\u0026elb.LoadBalancerPolicyPolicyAttributeArgs{\n\t\t\t\t\tName: pulumi.String(\"Reference-Security-Policy\"),\n\t\t\t\t\tValue: pulumi.String(\"ELBSecurityPolicy-TLS-1-1-2017-01\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewLoadBalancerBackendServerPolicy(ctx, \"wu_tang_backend_auth_policies_443\", \u0026elb.LoadBalancerBackendServerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tInstancePort: pulumi.Int(443),\n\t\t\tPolicyNames: pulumi.StringArray{\n\t\t\t\twu_tang_root_ca_backend_auth_policy.PolicyName,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewListenerPolicy(ctx, \"wu_tang_listener_policies_443\", \u0026elb.ListenerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tLoadBalancerPort: pulumi.Int(443),\n\t\t\tPolicyNames: pulumi.StringArray{\n\t\t\t\twu_tang_ssl.PolicyName,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputProperties": { "loadBalancerName": { "description": "The load balancer on which the policy is defined.\n", @@ -77548,11 +79784,11 @@ "additionalProperties": { "type": "string" }, - "description": "Map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", + "description": "Map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", "type": "object" }, "targetType": { - "description": "Type of target that you must specify when registering targets with this target group. The possible values are `instance` (targets are specified by instance ID) or `ip` (targets are specified by IP address) or `lambda` (targets are specified by lambda arn). The default is `instance`. Note that you can't specify targets for a target group using both instance IDs and IP addresses. If the target type is `ip`, specify IP addresses from the subnets of the virtual private cloud (VPC) for the target group, the RFC 1918 range (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16), and the RFC 6598 range (100.64.0.0/10). You can't specify publicly routable IP addresses.\n", + "description": "Type of target that you must specify when registering targets with this target group. See [doc](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateTargetGroup.html) for supported values. The default is `instance`.\n", "type": "string" }, "vpcId": { @@ -77625,7 +79861,7 @@ "additionalProperties": { "type": "string" }, - "description": "Map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", + "description": "Map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", "type": "object" }, "tagsAll": { @@ -77636,7 +79872,7 @@ "type": "object" }, "targetType": { - "description": "Type of target that you must specify when registering targets with this target group. The possible values are `instance` (targets are specified by instance ID) or `ip` (targets are specified by IP address) or `lambda` (targets are specified by lambda arn). The default is `instance`. Note that you can't specify targets for a target group using both instance IDs and IP addresses. If the target type is `ip`, specify IP addresses from the subnets of the virtual private cloud (VPC) for the target group, the RFC 1918 range (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16), and the RFC 6598 range (100.64.0.0/10). You can't specify publicly routable IP addresses.\n", + "description": "Type of target that you must specify when registering targets with this target group. See [doc](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateTargetGroup.html) for supported values. The default is `instance`.\n", "type": "string" }, "vpcId": { @@ -77722,7 +79958,7 @@ "additionalProperties": { "type": "string" }, - "description": "Map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", + "description": "Map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", "type": "object" }, "tagsAll": { @@ -77733,7 +79969,7 @@ "type": "object" }, "targetType": { - "description": "Type of target that you must specify when registering targets with this target group. The possible values are `instance` (targets are specified by instance ID) or `ip` (targets are specified by IP address) or `lambda` (targets are specified by lambda arn). The default is `instance`. Note that you can't specify targets for a target group using both instance IDs and IP addresses. If the target type is `ip`, specify IP addresses from the subnets of the virtual private cloud (VPC) for the target group, the RFC 1918 range (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16), and the RFC 6598 range (100.64.0.0/10). You can't specify publicly routable IP addresses.\n", + "description": "Type of target that you must specify when registering targets with this target group. See [doc](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateTargetGroup.html) for supported values. The default is `instance`.\n", "type": "string" }, "vpcId": { @@ -78173,7 +80409,7 @@ } }, "aws:elasticsearch/domainSamlOptions:DomainSamlOptions": { - "description": "Manages SAML authentication options for an AWS Elasticsearch Domain.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic Usage\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst exampleDomain = new aws.elasticsearch.Domain(\"exampleDomain\", {\n elasticsearchVersion: \"1.5\",\n clusterConfig: {\n instanceType: \"r4.large.elasticsearch\",\n },\n snapshotOptions: {\n automatedSnapshotStartHour: 23,\n },\n tags: {\n Domain: \"TestDomain\",\n },\n});\nconst exampleDomainSamlOptions = new aws.elasticsearch.DomainSamlOptions(\"exampleDomainSamlOptions\", {\n domainName: exampleDomain.domainName,\n samlOptions: {\n enabled: true,\n idp: {\n entityId: \"https://example.com\",\n metadataContent: fs.readFileSync(\"./saml-metadata.xml\"),\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_domain = aws.elasticsearch.Domain(\"exampleDomain\",\n elasticsearch_version=\"1.5\",\n cluster_config=aws.elasticsearch.DomainClusterConfigArgs(\n instance_type=\"r4.large.elasticsearch\",\n ),\n snapshot_options=aws.elasticsearch.DomainSnapshotOptionsArgs(\n automated_snapshot_start_hour=23,\n ),\n tags={\n \"Domain\": \"TestDomain\",\n })\nexample_domain_saml_options = aws.elasticsearch.DomainSamlOptions(\"exampleDomainSamlOptions\",\n domain_name=example_domain.domain_name,\n saml_options=aws.elasticsearch.DomainSamlOptionsSamlOptionsArgs(\n enabled=True,\n idp=aws.elasticsearch.DomainSamlOptionsSamlOptionsIdpArgs(\n entity_id=\"https://example.com\",\n metadata_content=(lambda path: open(path).read())(\"./saml-metadata.xml\"),\n ),\n ))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleDomain = new Aws.ElasticSearch.Domain(\"exampleDomain\", new Aws.ElasticSearch.DomainArgs\n {\n ElasticsearchVersion = \"1.5\",\n ClusterConfig = new Aws.ElasticSearch.Inputs.DomainClusterConfigArgs\n {\n InstanceType = \"r4.large.elasticsearch\",\n },\n SnapshotOptions = new Aws.ElasticSearch.Inputs.DomainSnapshotOptionsArgs\n {\n AutomatedSnapshotStartHour = 23,\n },\n Tags = \n {\n { \"Domain\", \"TestDomain\" },\n },\n });\n var exampleDomainSamlOptions = new Aws.ElasticSearch.DomainSamlOptions(\"exampleDomainSamlOptions\", new Aws.ElasticSearch.DomainSamlOptionsArgs\n {\n DomainName = exampleDomain.DomainName,\n SamlOptions = new Aws.ElasticSearch.Inputs.DomainSamlOptionsSamlOptionsArgs\n {\n Enabled = true,\n Idp = new Aws.ElasticSearch.Inputs.DomainSamlOptionsSamlOptionsIdpArgs\n {\n EntityId = \"https://example.com\",\n MetadataContent = File.ReadAllText(\"./saml-metadata.xml\"),\n },\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nElasticsearch domains can be imported using the `domain_name`, e.g.\n\n```sh\n $ pulumi import aws:elasticsearch/domainSamlOptions:DomainSamlOptions example domain_name\n```\n\n ", + "description": "Manages SAML authentication options for an AWS Elasticsearch Domain.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic Usage\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst exampleDomain = new aws.elasticsearch.Domain(\"exampleDomain\", {\n elasticsearchVersion: \"1.5\",\n clusterConfig: {\n instanceType: \"r4.large.elasticsearch\",\n },\n snapshotOptions: {\n automatedSnapshotStartHour: 23,\n },\n tags: {\n Domain: \"TestDomain\",\n },\n});\nconst exampleDomainSamlOptions = new aws.elasticsearch.DomainSamlOptions(\"exampleDomainSamlOptions\", {\n domainName: exampleDomain.domainName,\n samlOptions: {\n enabled: true,\n idp: {\n entityId: \"https://example.com\",\n metadataContent: fs.readFileSync(\"./saml-metadata.xml\"),\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_domain = aws.elasticsearch.Domain(\"exampleDomain\",\n elasticsearch_version=\"1.5\",\n cluster_config=aws.elasticsearch.DomainClusterConfigArgs(\n instance_type=\"r4.large.elasticsearch\",\n ),\n snapshot_options=aws.elasticsearch.DomainSnapshotOptionsArgs(\n automated_snapshot_start_hour=23,\n ),\n tags={\n \"Domain\": \"TestDomain\",\n })\nexample_domain_saml_options = aws.elasticsearch.DomainSamlOptions(\"exampleDomainSamlOptions\",\n domain_name=example_domain.domain_name,\n saml_options=aws.elasticsearch.DomainSamlOptionsSamlOptionsArgs(\n enabled=True,\n idp=aws.elasticsearch.DomainSamlOptionsSamlOptionsIdpArgs(\n entity_id=\"https://example.com\",\n metadata_content=(lambda path: open(path).read())(\"./saml-metadata.xml\"),\n ),\n ))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleDomain = new Aws.ElasticSearch.Domain(\"exampleDomain\", new Aws.ElasticSearch.DomainArgs\n {\n ElasticsearchVersion = \"1.5\",\n ClusterConfig = new Aws.ElasticSearch.Inputs.DomainClusterConfigArgs\n {\n InstanceType = \"r4.large.elasticsearch\",\n },\n SnapshotOptions = new Aws.ElasticSearch.Inputs.DomainSnapshotOptionsArgs\n {\n AutomatedSnapshotStartHour = 23,\n },\n Tags = \n {\n { \"Domain\", \"TestDomain\" },\n },\n });\n var exampleDomainSamlOptions = new Aws.ElasticSearch.DomainSamlOptions(\"exampleDomainSamlOptions\", new Aws.ElasticSearch.DomainSamlOptionsArgs\n {\n DomainName = exampleDomain.DomainName,\n SamlOptions = new Aws.ElasticSearch.Inputs.DomainSamlOptionsSamlOptionsArgs\n {\n Enabled = true,\n Idp = new Aws.ElasticSearch.Inputs.DomainSamlOptionsSamlOptionsIdpArgs\n {\n EntityId = \"https://example.com\",\n MetadataContent = File.ReadAllText(\"./saml-metadata.xml\"),\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/elasticsearch\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleDomain, err := elasticsearch.NewDomain(ctx, \"exampleDomain\", \u0026elasticsearch.DomainArgs{\n\t\t\tElasticsearchVersion: pulumi.String(\"1.5\"),\n\t\t\tClusterConfig: \u0026elasticsearch.DomainClusterConfigArgs{\n\t\t\t\tInstanceType: pulumi.String(\"r4.large.elasticsearch\"),\n\t\t\t},\n\t\t\tSnapshotOptions: \u0026elasticsearch.DomainSnapshotOptionsArgs{\n\t\t\t\tAutomatedSnapshotStartHour: pulumi.Int(23),\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Domain\": pulumi.String(\"TestDomain\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elasticsearch.NewDomainSamlOptions(ctx, \"exampleDomainSamlOptions\", \u0026elasticsearch.DomainSamlOptionsArgs{\n\t\t\tDomainName: exampleDomain.DomainName,\n\t\t\tSamlOptions: \u0026elasticsearch.DomainSamlOptionsSamlOptionsArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\tIdp: \u0026elasticsearch.DomainSamlOptionsSamlOptionsIdpArgs{\n\t\t\t\t\tEntityId: pulumi.String(\"https://example.com\"),\n\t\t\t\t\tMetadataContent: readFileOrPanic(\"./saml-metadata.xml\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nElasticsearch domains can be imported using the `domain_name`, e.g.\n\n```sh\n $ pulumi import aws:elasticsearch/domainSamlOptions:DomainSamlOptions example domain_name\n```\n\n ", "inputProperties": { "domainName": { "description": "Name of the domain.\n", @@ -79080,7 +81316,7 @@ "type": "aws:elasticloadbalancing/loadBalancerBackendServerPolicy:LoadBalancerBackendServerPolicy" } ], - "description": "Attaches a load balancer policy to an ELB backend server.\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst wu_tang = new aws.elb.LoadBalancer(\"wu-tang\", {\n availabilityZones: [\"us-east-1a\"],\n listeners: [{\n instancePort: 443,\n instanceProtocol: \"http\",\n lbPort: 443,\n lbProtocol: \"https\",\n sslCertificateId: \"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n }],\n tags: {\n Name: \"wu-tang\",\n },\n});\nconst wu_tang_ca_pubkey_policy = new aws.elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-ca-pubkey-policy\",\n policyTypeName: \"PublicKeyPolicyType\",\n policyAttributes: [{\n name: \"PublicKey\",\n value: fs.readFileSync(\"wu-tang-pubkey\"),\n }],\n});\nconst wu_tang_root_ca_backend_auth_policy = new aws.elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-root-ca-backend-auth-policy\",\n policyTypeName: \"BackendServerAuthenticationPolicyType\",\n policyAttributes: [{\n name: \"PublicKeyPolicyName\",\n value: aws_load_balancer_policy[\"wu-tang-root-ca-pubkey-policy\"].policy_name,\n }],\n});\nconst wu_tang_backend_auth_policies_443 = new aws.elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\", {\n loadBalancerName: wu_tang.name,\n instancePort: 443,\n policyNames: [wu_tang_root_ca_backend_auth_policy.policyName],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nwu_tang = aws.elb.LoadBalancer(\"wu-tang\",\n availability_zones=[\"us-east-1a\"],\n listeners=[aws.elb.LoadBalancerListenerArgs(\n instance_port=443,\n instance_protocol=\"http\",\n lb_port=443,\n lb_protocol=\"https\",\n ssl_certificate_id=\"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n )],\n tags={\n \"Name\": \"wu-tang\",\n })\nwu_tang_ca_pubkey_policy = aws.elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-ca-pubkey-policy\",\n policy_type_name=\"PublicKeyPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"PublicKey\",\n value=(lambda path: open(path).read())(\"wu-tang-pubkey\"),\n )])\nwu_tang_root_ca_backend_auth_policy = aws.elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-root-ca-backend-auth-policy\",\n policy_type_name=\"BackendServerAuthenticationPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"PublicKeyPolicyName\",\n value=aws_load_balancer_policy[\"wu-tang-root-ca-pubkey-policy\"][\"policy_name\"],\n )])\nwu_tang_backend_auth_policies_443 = aws.elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\",\n load_balancer_name=wu_tang.name,\n instance_port=443,\n policy_names=[wu_tang_root_ca_backend_auth_policy.policy_name])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var wu_tang = new Aws.Elb.LoadBalancer(\"wu-tang\", new Aws.Elb.LoadBalancerArgs\n {\n AvailabilityZones = \n {\n \"us-east-1a\",\n },\n Listeners = \n {\n new Aws.Elb.Inputs.LoadBalancerListenerArgs\n {\n InstancePort = 443,\n InstanceProtocol = \"http\",\n LbPort = 443,\n LbProtocol = \"https\",\n SslCertificateId = \"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n },\n },\n Tags = \n {\n { \"Name\", \"wu-tang\" },\n },\n });\n var wu_tang_ca_pubkey_policy = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-ca-pubkey-policy\",\n PolicyTypeName = \"PublicKeyPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"PublicKey\",\n Value = File.ReadAllText(\"wu-tang-pubkey\"),\n },\n },\n });\n var wu_tang_root_ca_backend_auth_policy = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-root-ca-backend-auth-policy\",\n PolicyTypeName = \"BackendServerAuthenticationPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"PublicKeyPolicyName\",\n Value = aws_load_balancer_policy.Wu_tang_root_ca_pubkey_policy.Policy_name,\n },\n },\n });\n var wu_tang_backend_auth_policies_443 = new Aws.Elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\", new Aws.Elb.LoadBalancerBackendServerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n InstancePort = 443,\n PolicyNames = \n {\n wu_tang_root_ca_backend_auth_policy.PolicyName,\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Attaches a load balancer policy to an ELB backend server.\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst wu_tang = new aws.elb.LoadBalancer(\"wu-tang\", {\n availabilityZones: [\"us-east-1a\"],\n listeners: [{\n instancePort: 443,\n instanceProtocol: \"http\",\n lbPort: 443,\n lbProtocol: \"https\",\n sslCertificateId: \"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n }],\n tags: {\n Name: \"wu-tang\",\n },\n});\nconst wu_tang_ca_pubkey_policy = new aws.elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-ca-pubkey-policy\",\n policyTypeName: \"PublicKeyPolicyType\",\n policyAttributes: [{\n name: \"PublicKey\",\n value: fs.readFileSync(\"wu-tang-pubkey\"),\n }],\n});\nconst wu_tang_root_ca_backend_auth_policy = new aws.elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-root-ca-backend-auth-policy\",\n policyTypeName: \"BackendServerAuthenticationPolicyType\",\n policyAttributes: [{\n name: \"PublicKeyPolicyName\",\n value: aws_load_balancer_policy[\"wu-tang-root-ca-pubkey-policy\"].policy_name,\n }],\n});\nconst wu_tang_backend_auth_policies_443 = new aws.elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\", {\n loadBalancerName: wu_tang.name,\n instancePort: 443,\n policyNames: [wu_tang_root_ca_backend_auth_policy.policyName],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nwu_tang = aws.elb.LoadBalancer(\"wu-tang\",\n availability_zones=[\"us-east-1a\"],\n listeners=[aws.elb.LoadBalancerListenerArgs(\n instance_port=443,\n instance_protocol=\"http\",\n lb_port=443,\n lb_protocol=\"https\",\n ssl_certificate_id=\"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n )],\n tags={\n \"Name\": \"wu-tang\",\n })\nwu_tang_ca_pubkey_policy = aws.elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-ca-pubkey-policy\",\n policy_type_name=\"PublicKeyPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"PublicKey\",\n value=(lambda path: open(path).read())(\"wu-tang-pubkey\"),\n )])\nwu_tang_root_ca_backend_auth_policy = aws.elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-root-ca-backend-auth-policy\",\n policy_type_name=\"BackendServerAuthenticationPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"PublicKeyPolicyName\",\n value=aws_load_balancer_policy[\"wu-tang-root-ca-pubkey-policy\"][\"policy_name\"],\n )])\nwu_tang_backend_auth_policies_443 = aws.elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\",\n load_balancer_name=wu_tang.name,\n instance_port=443,\n policy_names=[wu_tang_root_ca_backend_auth_policy.policy_name])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var wu_tang = new Aws.Elb.LoadBalancer(\"wu-tang\", new Aws.Elb.LoadBalancerArgs\n {\n AvailabilityZones = \n {\n \"us-east-1a\",\n },\n Listeners = \n {\n new Aws.Elb.Inputs.LoadBalancerListenerArgs\n {\n InstancePort = 443,\n InstanceProtocol = \"http\",\n LbPort = 443,\n LbProtocol = \"https\",\n SslCertificateId = \"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n },\n },\n Tags = \n {\n { \"Name\", \"wu-tang\" },\n },\n });\n var wu_tang_ca_pubkey_policy = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-ca-pubkey-policy\",\n PolicyTypeName = \"PublicKeyPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"PublicKey\",\n Value = File.ReadAllText(\"wu-tang-pubkey\"),\n },\n },\n });\n var wu_tang_root_ca_backend_auth_policy = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-root-ca-backend-auth-policy\",\n PolicyTypeName = \"BackendServerAuthenticationPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"PublicKeyPolicyName\",\n Value = aws_load_balancer_policy.Wu_tang_root_ca_pubkey_policy.Policy_name,\n },\n },\n });\n var wu_tang_backend_auth_policies_443 = new Aws.Elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\", new Aws.Elb.LoadBalancerBackendServerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n InstancePort = 443,\n PolicyNames = \n {\n wu_tang_root_ca_backend_auth_policy.PolicyName,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/elb\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := elb.NewLoadBalancer(ctx, \"wu_tang\", \u0026elb.LoadBalancerArgs{\n\t\t\tAvailabilityZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-east-1a\"),\n\t\t\t},\n\t\t\tListeners: elb.LoadBalancerListenerArray{\n\t\t\t\t\u0026elb.LoadBalancerListenerArgs{\n\t\t\t\t\tInstancePort: pulumi.Int(443),\n\t\t\t\t\tInstanceProtocol: pulumi.String(\"http\"),\n\t\t\t\t\tLbPort: pulumi.Int(443),\n\t\t\t\t\tLbProtocol: pulumi.String(\"https\"),\n\t\t\t\t\tSslCertificateId: pulumi.String(\"arn:aws:iam::000000000000:server-certificate/wu-tang.net\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Name\": pulumi.String(\"wu-tang\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewLoadBalancerPolicy(ctx, \"wu_tang_ca_pubkey_policy\", \u0026elb.LoadBalancerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tPolicyName: pulumi.String(\"wu-tang-ca-pubkey-policy\"),\n\t\t\tPolicyTypeName: pulumi.String(\"PublicKeyPolicyType\"),\n\t\t\tPolicyAttributes: elb.LoadBalancerPolicyPolicyAttributeArray{\n\t\t\t\t\u0026elb.LoadBalancerPolicyPolicyAttributeArgs{\n\t\t\t\t\tName: pulumi.String(\"PublicKey\"),\n\t\t\t\t\tValue: readFileOrPanic(\"wu-tang-pubkey\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewLoadBalancerPolicy(ctx, \"wu_tang_root_ca_backend_auth_policy\", \u0026elb.LoadBalancerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tPolicyName: pulumi.String(\"wu-tang-root-ca-backend-auth-policy\"),\n\t\t\tPolicyTypeName: pulumi.String(\"BackendServerAuthenticationPolicyType\"),\n\t\t\tPolicyAttributes: elb.LoadBalancerPolicyPolicyAttributeArray{\n\t\t\t\t\u0026elb.LoadBalancerPolicyPolicyAttributeArgs{\n\t\t\t\t\tName: pulumi.String(\"PublicKeyPolicyName\"),\n\t\t\t\t\tValue: pulumi.Any(aws_load_balancer_policy.Wu - tang - root - ca - pubkey - policy.Policy_name),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewLoadBalancerBackendServerPolicy(ctx, \"wu_tang_backend_auth_policies_443\", \u0026elb.LoadBalancerBackendServerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tInstancePort: pulumi.Int(443),\n\t\t\tPolicyNames: pulumi.StringArray{\n\t\t\t\twu_tang_root_ca_backend_auth_policy.PolicyName,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputProperties": { "instancePort": { "description": "The instance port to apply the policy to.\n", @@ -79226,7 +81462,7 @@ "type": "aws:elasticloadbalancing/loadBalancerPolicy:LoadBalancerPolicy" } ], - "description": "Provides a load balancer policy, which can be attached to an ELB listener or backend server.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst wu_tang = new aws.elb.LoadBalancer(\"wu-tang\", {\n availabilityZones: [\"us-east-1a\"],\n listeners: [{\n instancePort: 443,\n instanceProtocol: \"http\",\n lbPort: 443,\n lbProtocol: \"https\",\n sslCertificateId: \"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n }],\n tags: {\n Name: \"wu-tang\",\n },\n});\nconst wu_tang_ca_pubkey_policy = new aws.elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-ca-pubkey-policy\",\n policyTypeName: \"PublicKeyPolicyType\",\n policyAttributes: [{\n name: \"PublicKey\",\n value: fs.readFileSync(\"wu-tang-pubkey\"),\n }],\n});\nconst wu_tang_root_ca_backend_auth_policy = new aws.elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-root-ca-backend-auth-policy\",\n policyTypeName: \"BackendServerAuthenticationPolicyType\",\n policyAttributes: [{\n name: \"PublicKeyPolicyName\",\n value: aws_load_balancer_policy[\"wu-tang-root-ca-pubkey-policy\"].policy_name,\n }],\n});\nconst wu_tang_ssl = new aws.elb.LoadBalancerPolicy(\"wu-tang-ssl\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-ssl\",\n policyTypeName: \"SSLNegotiationPolicyType\",\n policyAttributes: [\n {\n name: \"ECDHE-ECDSA-AES128-GCM-SHA256\",\n value: \"true\",\n },\n {\n name: \"Protocol-TLSv1.2\",\n value: \"true\",\n },\n ],\n});\nconst wu_tang_ssl_tls_1_1 = new aws.elb.LoadBalancerPolicy(\"wu-tang-ssl-tls-1-1\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-ssl\",\n policyTypeName: \"SSLNegotiationPolicyType\",\n policyAttributes: [{\n name: \"Reference-Security-Policy\",\n value: \"ELBSecurityPolicy-TLS-1-1-2017-01\",\n }],\n});\nconst wu_tang_backend_auth_policies_443 = new aws.elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\", {\n loadBalancerName: wu_tang.name,\n instancePort: 443,\n policyNames: [wu_tang_root_ca_backend_auth_policy.policyName],\n});\nconst wu_tang_listener_policies_443 = new aws.elb.ListenerPolicy(\"wu-tang-listener-policies-443\", {\n loadBalancerName: wu_tang.name,\n loadBalancerPort: 443,\n policyNames: [wu_tang_ssl.policyName],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nwu_tang = aws.elb.LoadBalancer(\"wu-tang\",\n availability_zones=[\"us-east-1a\"],\n listeners=[aws.elb.LoadBalancerListenerArgs(\n instance_port=443,\n instance_protocol=\"http\",\n lb_port=443,\n lb_protocol=\"https\",\n ssl_certificate_id=\"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n )],\n tags={\n \"Name\": \"wu-tang\",\n })\nwu_tang_ca_pubkey_policy = aws.elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-ca-pubkey-policy\",\n policy_type_name=\"PublicKeyPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"PublicKey\",\n value=(lambda path: open(path).read())(\"wu-tang-pubkey\"),\n )])\nwu_tang_root_ca_backend_auth_policy = aws.elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-root-ca-backend-auth-policy\",\n policy_type_name=\"BackendServerAuthenticationPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"PublicKeyPolicyName\",\n value=aws_load_balancer_policy[\"wu-tang-root-ca-pubkey-policy\"][\"policy_name\"],\n )])\nwu_tang_ssl = aws.elb.LoadBalancerPolicy(\"wu-tang-ssl\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-ssl\",\n policy_type_name=\"SSLNegotiationPolicyType\",\n policy_attributes=[\n aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"ECDHE-ECDSA-AES128-GCM-SHA256\",\n value=\"true\",\n ),\n aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"Protocol-TLSv1.2\",\n value=\"true\",\n ),\n ])\nwu_tang_ssl_tls_1_1 = aws.elb.LoadBalancerPolicy(\"wu-tang-ssl-tls-1-1\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-ssl\",\n policy_type_name=\"SSLNegotiationPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"Reference-Security-Policy\",\n value=\"ELBSecurityPolicy-TLS-1-1-2017-01\",\n )])\nwu_tang_backend_auth_policies_443 = aws.elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\",\n load_balancer_name=wu_tang.name,\n instance_port=443,\n policy_names=[wu_tang_root_ca_backend_auth_policy.policy_name])\nwu_tang_listener_policies_443 = aws.elb.ListenerPolicy(\"wu-tang-listener-policies-443\",\n load_balancer_name=wu_tang.name,\n load_balancer_port=443,\n policy_names=[wu_tang_ssl.policy_name])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var wu_tang = new Aws.Elb.LoadBalancer(\"wu-tang\", new Aws.Elb.LoadBalancerArgs\n {\n AvailabilityZones = \n {\n \"us-east-1a\",\n },\n Listeners = \n {\n new Aws.Elb.Inputs.LoadBalancerListenerArgs\n {\n InstancePort = 443,\n InstanceProtocol = \"http\",\n LbPort = 443,\n LbProtocol = \"https\",\n SslCertificateId = \"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n },\n },\n Tags = \n {\n { \"Name\", \"wu-tang\" },\n },\n });\n var wu_tang_ca_pubkey_policy = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-ca-pubkey-policy\",\n PolicyTypeName = \"PublicKeyPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"PublicKey\",\n Value = File.ReadAllText(\"wu-tang-pubkey\"),\n },\n },\n });\n var wu_tang_root_ca_backend_auth_policy = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-root-ca-backend-auth-policy\",\n PolicyTypeName = \"BackendServerAuthenticationPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"PublicKeyPolicyName\",\n Value = aws_load_balancer_policy.Wu_tang_root_ca_pubkey_policy.Policy_name,\n },\n },\n });\n var wu_tang_ssl = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-ssl\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-ssl\",\n PolicyTypeName = \"SSLNegotiationPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"ECDHE-ECDSA-AES128-GCM-SHA256\",\n Value = \"true\",\n },\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"Protocol-TLSv1.2\",\n Value = \"true\",\n },\n },\n });\n var wu_tang_ssl_tls_1_1 = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-ssl-tls-1-1\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-ssl\",\n PolicyTypeName = \"SSLNegotiationPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"Reference-Security-Policy\",\n Value = \"ELBSecurityPolicy-TLS-1-1-2017-01\",\n },\n },\n });\n var wu_tang_backend_auth_policies_443 = new Aws.Elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\", new Aws.Elb.LoadBalancerBackendServerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n InstancePort = 443,\n PolicyNames = \n {\n wu_tang_root_ca_backend_auth_policy.PolicyName,\n },\n });\n var wu_tang_listener_policies_443 = new Aws.Elb.ListenerPolicy(\"wu-tang-listener-policies-443\", new Aws.Elb.ListenerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n LoadBalancerPort = 443,\n PolicyNames = \n {\n wu_tang_ssl.PolicyName,\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Provides a load balancer policy, which can be attached to an ELB listener or backend server.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst wu_tang = new aws.elb.LoadBalancer(\"wu-tang\", {\n availabilityZones: [\"us-east-1a\"],\n listeners: [{\n instancePort: 443,\n instanceProtocol: \"http\",\n lbPort: 443,\n lbProtocol: \"https\",\n sslCertificateId: \"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n }],\n tags: {\n Name: \"wu-tang\",\n },\n});\nconst wu_tang_ca_pubkey_policy = new aws.elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-ca-pubkey-policy\",\n policyTypeName: \"PublicKeyPolicyType\",\n policyAttributes: [{\n name: \"PublicKey\",\n value: fs.readFileSync(\"wu-tang-pubkey\"),\n }],\n});\nconst wu_tang_root_ca_backend_auth_policy = new aws.elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-root-ca-backend-auth-policy\",\n policyTypeName: \"BackendServerAuthenticationPolicyType\",\n policyAttributes: [{\n name: \"PublicKeyPolicyName\",\n value: aws_load_balancer_policy[\"wu-tang-root-ca-pubkey-policy\"].policy_name,\n }],\n});\nconst wu_tang_ssl = new aws.elb.LoadBalancerPolicy(\"wu-tang-ssl\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-ssl\",\n policyTypeName: \"SSLNegotiationPolicyType\",\n policyAttributes: [\n {\n name: \"ECDHE-ECDSA-AES128-GCM-SHA256\",\n value: \"true\",\n },\n {\n name: \"Protocol-TLSv1.2\",\n value: \"true\",\n },\n ],\n});\nconst wu_tang_ssl_tls_1_1 = new aws.elb.LoadBalancerPolicy(\"wu-tang-ssl-tls-1-1\", {\n loadBalancerName: wu_tang.name,\n policyName: \"wu-tang-ssl\",\n policyTypeName: \"SSLNegotiationPolicyType\",\n policyAttributes: [{\n name: \"Reference-Security-Policy\",\n value: \"ELBSecurityPolicy-TLS-1-1-2017-01\",\n }],\n});\nconst wu_tang_backend_auth_policies_443 = new aws.elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\", {\n loadBalancerName: wu_tang.name,\n instancePort: 443,\n policyNames: [wu_tang_root_ca_backend_auth_policy.policyName],\n});\nconst wu_tang_listener_policies_443 = new aws.elb.ListenerPolicy(\"wu-tang-listener-policies-443\", {\n loadBalancerName: wu_tang.name,\n loadBalancerPort: 443,\n policyNames: [wu_tang_ssl.policyName],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nwu_tang = aws.elb.LoadBalancer(\"wu-tang\",\n availability_zones=[\"us-east-1a\"],\n listeners=[aws.elb.LoadBalancerListenerArgs(\n instance_port=443,\n instance_protocol=\"http\",\n lb_port=443,\n lb_protocol=\"https\",\n ssl_certificate_id=\"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n )],\n tags={\n \"Name\": \"wu-tang\",\n })\nwu_tang_ca_pubkey_policy = aws.elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-ca-pubkey-policy\",\n policy_type_name=\"PublicKeyPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"PublicKey\",\n value=(lambda path: open(path).read())(\"wu-tang-pubkey\"),\n )])\nwu_tang_root_ca_backend_auth_policy = aws.elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-root-ca-backend-auth-policy\",\n policy_type_name=\"BackendServerAuthenticationPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"PublicKeyPolicyName\",\n value=aws_load_balancer_policy[\"wu-tang-root-ca-pubkey-policy\"][\"policy_name\"],\n )])\nwu_tang_ssl = aws.elb.LoadBalancerPolicy(\"wu-tang-ssl\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-ssl\",\n policy_type_name=\"SSLNegotiationPolicyType\",\n policy_attributes=[\n aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"ECDHE-ECDSA-AES128-GCM-SHA256\",\n value=\"true\",\n ),\n aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"Protocol-TLSv1.2\",\n value=\"true\",\n ),\n ])\nwu_tang_ssl_tls_1_1 = aws.elb.LoadBalancerPolicy(\"wu-tang-ssl-tls-1-1\",\n load_balancer_name=wu_tang.name,\n policy_name=\"wu-tang-ssl\",\n policy_type_name=\"SSLNegotiationPolicyType\",\n policy_attributes=[aws.elb.LoadBalancerPolicyPolicyAttributeArgs(\n name=\"Reference-Security-Policy\",\n value=\"ELBSecurityPolicy-TLS-1-1-2017-01\",\n )])\nwu_tang_backend_auth_policies_443 = aws.elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\",\n load_balancer_name=wu_tang.name,\n instance_port=443,\n policy_names=[wu_tang_root_ca_backend_auth_policy.policy_name])\nwu_tang_listener_policies_443 = aws.elb.ListenerPolicy(\"wu-tang-listener-policies-443\",\n load_balancer_name=wu_tang.name,\n load_balancer_port=443,\n policy_names=[wu_tang_ssl.policy_name])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var wu_tang = new Aws.Elb.LoadBalancer(\"wu-tang\", new Aws.Elb.LoadBalancerArgs\n {\n AvailabilityZones = \n {\n \"us-east-1a\",\n },\n Listeners = \n {\n new Aws.Elb.Inputs.LoadBalancerListenerArgs\n {\n InstancePort = 443,\n InstanceProtocol = \"http\",\n LbPort = 443,\n LbProtocol = \"https\",\n SslCertificateId = \"arn:aws:iam::000000000000:server-certificate/wu-tang.net\",\n },\n },\n Tags = \n {\n { \"Name\", \"wu-tang\" },\n },\n });\n var wu_tang_ca_pubkey_policy = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-ca-pubkey-policy\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-ca-pubkey-policy\",\n PolicyTypeName = \"PublicKeyPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"PublicKey\",\n Value = File.ReadAllText(\"wu-tang-pubkey\"),\n },\n },\n });\n var wu_tang_root_ca_backend_auth_policy = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-root-ca-backend-auth-policy\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-root-ca-backend-auth-policy\",\n PolicyTypeName = \"BackendServerAuthenticationPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"PublicKeyPolicyName\",\n Value = aws_load_balancer_policy.Wu_tang_root_ca_pubkey_policy.Policy_name,\n },\n },\n });\n var wu_tang_ssl = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-ssl\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-ssl\",\n PolicyTypeName = \"SSLNegotiationPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"ECDHE-ECDSA-AES128-GCM-SHA256\",\n Value = \"true\",\n },\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"Protocol-TLSv1.2\",\n Value = \"true\",\n },\n },\n });\n var wu_tang_ssl_tls_1_1 = new Aws.Elb.LoadBalancerPolicy(\"wu-tang-ssl-tls-1-1\", new Aws.Elb.LoadBalancerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n PolicyName = \"wu-tang-ssl\",\n PolicyTypeName = \"SSLNegotiationPolicyType\",\n PolicyAttributes = \n {\n new Aws.Elb.Inputs.LoadBalancerPolicyPolicyAttributeArgs\n {\n Name = \"Reference-Security-Policy\",\n Value = \"ELBSecurityPolicy-TLS-1-1-2017-01\",\n },\n },\n });\n var wu_tang_backend_auth_policies_443 = new Aws.Elb.LoadBalancerBackendServerPolicy(\"wu-tang-backend-auth-policies-443\", new Aws.Elb.LoadBalancerBackendServerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n InstancePort = 443,\n PolicyNames = \n {\n wu_tang_root_ca_backend_auth_policy.PolicyName,\n },\n });\n var wu_tang_listener_policies_443 = new Aws.Elb.ListenerPolicy(\"wu-tang-listener-policies-443\", new Aws.Elb.ListenerPolicyArgs\n {\n LoadBalancerName = wu_tang.Name,\n LoadBalancerPort = 443,\n PolicyNames = \n {\n wu_tang_ssl.PolicyName,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/elb\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := elb.NewLoadBalancer(ctx, \"wu_tang\", \u0026elb.LoadBalancerArgs{\n\t\t\tAvailabilityZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-east-1a\"),\n\t\t\t},\n\t\t\tListeners: elb.LoadBalancerListenerArray{\n\t\t\t\t\u0026elb.LoadBalancerListenerArgs{\n\t\t\t\t\tInstancePort: pulumi.Int(443),\n\t\t\t\t\tInstanceProtocol: pulumi.String(\"http\"),\n\t\t\t\t\tLbPort: pulumi.Int(443),\n\t\t\t\t\tLbProtocol: pulumi.String(\"https\"),\n\t\t\t\t\tSslCertificateId: pulumi.String(\"arn:aws:iam::000000000000:server-certificate/wu-tang.net\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Name\": pulumi.String(\"wu-tang\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewLoadBalancerPolicy(ctx, \"wu_tang_ca_pubkey_policy\", \u0026elb.LoadBalancerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tPolicyName: pulumi.String(\"wu-tang-ca-pubkey-policy\"),\n\t\t\tPolicyTypeName: pulumi.String(\"PublicKeyPolicyType\"),\n\t\t\tPolicyAttributes: elb.LoadBalancerPolicyPolicyAttributeArray{\n\t\t\t\t\u0026elb.LoadBalancerPolicyPolicyAttributeArgs{\n\t\t\t\t\tName: pulumi.String(\"PublicKey\"),\n\t\t\t\t\tValue: readFileOrPanic(\"wu-tang-pubkey\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewLoadBalancerPolicy(ctx, \"wu_tang_root_ca_backend_auth_policy\", \u0026elb.LoadBalancerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tPolicyName: pulumi.String(\"wu-tang-root-ca-backend-auth-policy\"),\n\t\t\tPolicyTypeName: pulumi.String(\"BackendServerAuthenticationPolicyType\"),\n\t\t\tPolicyAttributes: elb.LoadBalancerPolicyPolicyAttributeArray{\n\t\t\t\t\u0026elb.LoadBalancerPolicyPolicyAttributeArgs{\n\t\t\t\t\tName: pulumi.String(\"PublicKeyPolicyName\"),\n\t\t\t\t\tValue: pulumi.Any(aws_load_balancer_policy.Wu - tang - root - ca - pubkey - policy.Policy_name),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewLoadBalancerPolicy(ctx, \"wu_tang_ssl\", \u0026elb.LoadBalancerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tPolicyName: pulumi.String(\"wu-tang-ssl\"),\n\t\t\tPolicyTypeName: pulumi.String(\"SSLNegotiationPolicyType\"),\n\t\t\tPolicyAttributes: elb.LoadBalancerPolicyPolicyAttributeArray{\n\t\t\t\t\u0026elb.LoadBalancerPolicyPolicyAttributeArgs{\n\t\t\t\t\tName: pulumi.String(\"ECDHE-ECDSA-AES128-GCM-SHA256\"),\n\t\t\t\t\tValue: pulumi.String(\"true\"),\n\t\t\t\t},\n\t\t\t\t\u0026elb.LoadBalancerPolicyPolicyAttributeArgs{\n\t\t\t\t\tName: pulumi.String(\"Protocol-TLSv1.2\"),\n\t\t\t\t\tValue: pulumi.String(\"true\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewLoadBalancerPolicy(ctx, \"wu_tang_ssl_tls_1_1\", \u0026elb.LoadBalancerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tPolicyName: pulumi.String(\"wu-tang-ssl\"),\n\t\t\tPolicyTypeName: pulumi.String(\"SSLNegotiationPolicyType\"),\n\t\t\tPolicyAttributes: elb.LoadBalancerPolicyPolicyAttributeArray{\n\t\t\t\t\u0026elb.LoadBalancerPolicyPolicyAttributeArgs{\n\t\t\t\t\tName: pulumi.String(\"Reference-Security-Policy\"),\n\t\t\t\t\tValue: pulumi.String(\"ELBSecurityPolicy-TLS-1-1-2017-01\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewLoadBalancerBackendServerPolicy(ctx, \"wu_tang_backend_auth_policies_443\", \u0026elb.LoadBalancerBackendServerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tInstancePort: pulumi.Int(443),\n\t\t\tPolicyNames: pulumi.StringArray{\n\t\t\t\twu_tang_root_ca_backend_auth_policy.PolicyName,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewListenerPolicy(ctx, \"wu_tang_listener_policies_443\", \u0026elb.ListenerPolicyArgs{\n\t\t\tLoadBalancerName: wu_tang.Name,\n\t\t\tLoadBalancerPort: pulumi.Int(443),\n\t\t\tPolicyNames: pulumi.StringArray{\n\t\t\t\twu_tang_ssl.PolicyName,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputProperties": { "loadBalancerName": { "description": "The load balancer on which the policy is defined.\n", @@ -79390,36 +81626,36 @@ } }, "aws:emr/cluster:Cluster": { - "description": "Provides an Elastic MapReduce Cluster, a web service that makes it easy to\nprocess large amounts of data efficiently. See [Amazon Elastic MapReduce Documentation](https://aws.amazon.com/documentation/elastic-mapreduce/)\nfor more information.\n\nTo configure [Instance Groups](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-instance-group-configuration.html#emr-plan-instance-groups) for [task nodes](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-master-core-task-nodes.html#emr-plan-task), see the `aws.emr.InstanceGroup` resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst cluster = new aws.emr.Cluster(\"cluster\", {\n releaseLabel: \"emr-4.6.0\",\n applications: [\"Spark\"],\n additionalInfo: `{\n \"instanceAwsClientConfiguration\": {\n \"proxyPort\": 8099,\n \"proxyHost\": \"myproxy.example.com\"\n }\n}\n`,\n terminationProtection: false,\n keepJobFlowAliveWhenNoSteps: true,\n ec2Attributes: {\n subnetId: aws_subnet.main.id,\n emrManagedMasterSecurityGroup: aws_security_group.sg.id,\n emrManagedSlaveSecurityGroup: aws_security_group.sg.id,\n instanceProfile: aws_iam_instance_profile.emr_profile.arn,\n },\n masterInstanceGroup: {\n instanceType: \"m4.large\",\n },\n coreInstanceGroup: {\n instanceType: \"c4.large\",\n instanceCount: 1,\n ebsConfigs: [{\n size: \"40\",\n type: \"gp2\",\n volumesPerInstance: 1,\n }],\n bidPrice: \"0.30\",\n autoscalingPolicy: `{\n\"Constraints\": {\n \"MinCapacity\": 1,\n \"MaxCapacity\": 2\n},\n\"Rules\": [\n {\n \"Name\": \"ScaleOutMemoryPercentage\",\n \"Description\": \"Scale out if YARNMemoryAvailablePercentage is less than 15\",\n \"Action\": {\n \"SimpleScalingPolicyConfiguration\": {\n \"AdjustmentType\": \"CHANGE_IN_CAPACITY\",\n \"ScalingAdjustment\": 1,\n \"CoolDown\": 300\n }\n },\n \"Trigger\": {\n \"CloudWatchAlarmDefinition\": {\n \"ComparisonOperator\": \"LESS_THAN\",\n \"EvaluationPeriods\": 1,\n \"MetricName\": \"YARNMemoryAvailablePercentage\",\n \"Namespace\": \"AWS/ElasticMapReduce\",\n \"Period\": 300,\n \"Statistic\": \"AVERAGE\",\n \"Threshold\": 15.0,\n \"Unit\": \"PERCENT\"\n }\n }\n }\n]\n}\n`,\n },\n ebsRootVolumeSize: 100,\n tags: {\n role: \"rolename\",\n env: \"env\",\n },\n bootstrapActions: [{\n path: \"s3://elasticmapreduce/bootstrap-actions/run-if\",\n name: \"runif\",\n args: [\n \"instance.isMaster=true\",\n \"echo running on master node\",\n ],\n }],\n configurationsJson: ` [\n {\n \"Classification\": \"hadoop-env\",\n \"Configurations\": [\n {\n \"Classification\": \"export\",\n \"Properties\": {\n \"JAVA_HOME\": \"/usr/lib/jvm/java-1.8.0\"\n }\n }\n ],\n \"Properties\": {}\n },\n {\n \"Classification\": \"spark-env\",\n \"Configurations\": [\n {\n \"Classification\": \"export\",\n \"Properties\": {\n \"JAVA_HOME\": \"/usr/lib/jvm/java-1.8.0\"\n }\n }\n ],\n \"Properties\": {}\n }\n ]\n`,\n serviceRole: aws_iam_role.iam_emr_service_role.arn,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ncluster = aws.emr.Cluster(\"cluster\",\n release_label=\"emr-4.6.0\",\n applications=[\"Spark\"],\n additional_info=\"\"\"{\n \"instanceAwsClientConfiguration\": {\n \"proxyPort\": 8099,\n \"proxyHost\": \"myproxy.example.com\"\n }\n}\n\"\"\",\n termination_protection=False,\n keep_job_flow_alive_when_no_steps=True,\n ec2_attributes=aws.emr.ClusterEc2AttributesArgs(\n subnet_id=aws_subnet[\"main\"][\"id\"],\n emr_managed_master_security_group=aws_security_group[\"sg\"][\"id\"],\n emr_managed_slave_security_group=aws_security_group[\"sg\"][\"id\"],\n instance_profile=aws_iam_instance_profile[\"emr_profile\"][\"arn\"],\n ),\n master_instance_group=aws.emr.ClusterMasterInstanceGroupArgs(\n instance_type=\"m4.large\",\n ),\n core_instance_group=aws.emr.ClusterCoreInstanceGroupArgs(\n instance_type=\"c4.large\",\n instance_count=1,\n ebs_configs=[aws.emr.ClusterCoreInstanceGroupEbsConfigArgs(\n size=40,\n type=\"gp2\",\n volumes_per_instance=1,\n )],\n bid_price=\"0.30\",\n autoscaling_policy=\"\"\"{\n\"Constraints\": {\n \"MinCapacity\": 1,\n \"MaxCapacity\": 2\n},\n\"Rules\": [\n {\n \"Name\": \"ScaleOutMemoryPercentage\",\n \"Description\": \"Scale out if YARNMemoryAvailablePercentage is less than 15\",\n \"Action\": {\n \"SimpleScalingPolicyConfiguration\": {\n \"AdjustmentType\": \"CHANGE_IN_CAPACITY\",\n \"ScalingAdjustment\": 1,\n \"CoolDown\": 300\n }\n },\n \"Trigger\": {\n \"CloudWatchAlarmDefinition\": {\n \"ComparisonOperator\": \"LESS_THAN\",\n \"EvaluationPeriods\": 1,\n \"MetricName\": \"YARNMemoryAvailablePercentage\",\n \"Namespace\": \"AWS/ElasticMapReduce\",\n \"Period\": 300,\n \"Statistic\": \"AVERAGE\",\n \"Threshold\": 15.0,\n \"Unit\": \"PERCENT\"\n }\n }\n }\n]\n}\n\"\"\",\n ),\n ebs_root_volume_size=100,\n tags={\n \"role\": \"rolename\",\n \"env\": \"env\",\n },\n bootstrap_actions=[aws.emr.ClusterBootstrapActionArgs(\n path=\"s3://elasticmapreduce/bootstrap-actions/run-if\",\n name=\"runif\",\n args=[\n \"instance.isMaster=true\",\n \"echo running on master node\",\n ],\n )],\n configurations_json=\"\"\" [\n {\n \"Classification\": \"hadoop-env\",\n \"Configurations\": [\n {\n \"Classification\": \"export\",\n \"Properties\": {\n \"JAVA_HOME\": \"/usr/lib/jvm/java-1.8.0\"\n }\n }\n ],\n \"Properties\": {}\n },\n {\n \"Classification\": \"spark-env\",\n \"Configurations\": [\n {\n \"Classification\": \"export\",\n \"Properties\": {\n \"JAVA_HOME\": \"/usr/lib/jvm/java-1.8.0\"\n }\n }\n ],\n \"Properties\": {}\n }\n ]\n\"\"\",\n service_role=aws_iam_role[\"iam_emr_service_role\"][\"arn\"])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var cluster = new Aws.Emr.Cluster(\"cluster\", new Aws.Emr.ClusterArgs\n {\n ReleaseLabel = \"emr-4.6.0\",\n Applications = \n {\n \"Spark\",\n },\n AdditionalInfo = @\"{\n \"\"instanceAwsClientConfiguration\"\": {\n \"\"proxyPort\"\": 8099,\n \"\"proxyHost\"\": \"\"myproxy.example.com\"\"\n }\n}\n\",\n TerminationProtection = false,\n KeepJobFlowAliveWhenNoSteps = true,\n Ec2Attributes = new Aws.Emr.Inputs.ClusterEc2AttributesArgs\n {\n SubnetId = aws_subnet.Main.Id,\n EmrManagedMasterSecurityGroup = aws_security_group.Sg.Id,\n EmrManagedSlaveSecurityGroup = aws_security_group.Sg.Id,\n InstanceProfile = aws_iam_instance_profile.Emr_profile.Arn,\n },\n MasterInstanceGroup = new Aws.Emr.Inputs.ClusterMasterInstanceGroupArgs\n {\n InstanceType = \"m4.large\",\n },\n CoreInstanceGroup = new Aws.Emr.Inputs.ClusterCoreInstanceGroupArgs\n {\n InstanceType = \"c4.large\",\n InstanceCount = 1,\n EbsConfigs = \n {\n new Aws.Emr.Inputs.ClusterCoreInstanceGroupEbsConfigArgs\n {\n Size = 40,\n Type = \"gp2\",\n VolumesPerInstance = 1,\n },\n },\n BidPrice = \"0.30\",\n AutoscalingPolicy = @\"{\n\"\"Constraints\"\": {\n \"\"MinCapacity\"\": 1,\n \"\"MaxCapacity\"\": 2\n},\n\"\"Rules\"\": [\n {\n \"\"Name\"\": \"\"ScaleOutMemoryPercentage\"\",\n \"\"Description\"\": \"\"Scale out if YARNMemoryAvailablePercentage is less than 15\"\",\n \"\"Action\"\": {\n \"\"SimpleScalingPolicyConfiguration\"\": {\n \"\"AdjustmentType\"\": \"\"CHANGE_IN_CAPACITY\"\",\n \"\"ScalingAdjustment\"\": 1,\n \"\"CoolDown\"\": 300\n }\n },\n \"\"Trigger\"\": {\n \"\"CloudWatchAlarmDefinition\"\": {\n \"\"ComparisonOperator\"\": \"\"LESS_THAN\"\",\n \"\"EvaluationPeriods\"\": 1,\n \"\"MetricName\"\": \"\"YARNMemoryAvailablePercentage\"\",\n \"\"Namespace\"\": \"\"AWS/ElasticMapReduce\"\",\n \"\"Period\"\": 300,\n \"\"Statistic\"\": \"\"AVERAGE\"\",\n \"\"Threshold\"\": 15.0,\n \"\"Unit\"\": \"\"PERCENT\"\"\n }\n }\n }\n]\n}\n\",\n },\n EbsRootVolumeSize = 100,\n Tags = \n {\n { \"role\", \"rolename\" },\n { \"env\", \"env\" },\n },\n BootstrapActions = \n {\n new Aws.Emr.Inputs.ClusterBootstrapActionArgs\n {\n Path = \"s3://elasticmapreduce/bootstrap-actions/run-if\",\n Name = \"runif\",\n Args = \n {\n \"instance.isMaster=true\",\n \"echo running on master node\",\n },\n },\n },\n ConfigurationsJson = @\" [\n {\n \"\"Classification\"\": \"\"hadoop-env\"\",\n \"\"Configurations\"\": [\n {\n \"\"Classification\"\": \"\"export\"\",\n \"\"Properties\"\": {\n \"\"JAVA_HOME\"\": \"\"/usr/lib/jvm/java-1.8.0\"\"\n }\n }\n ],\n \"\"Properties\"\": {}\n },\n {\n \"\"Classification\"\": \"\"spark-env\"\",\n \"\"Configurations\"\": [\n {\n \"\"Classification\"\": \"\"export\"\",\n \"\"Properties\"\": {\n \"\"JAVA_HOME\"\": \"\"/usr/lib/jvm/java-1.8.0\"\"\n }\n }\n ],\n \"\"Properties\"\": {}\n }\n ]\n\",\n ServiceRole = aws_iam_role.Iam_emr_service_role.Arn,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/emr\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := emr.NewCluster(ctx, \"cluster\", \u0026emr.ClusterArgs{\n\t\t\tReleaseLabel: pulumi.String(\"emr-4.6.0\"),\n\t\t\tApplications: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"Spark\"),\n\t\t\t},\n\t\t\tAdditionalInfo: pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v\", \"{\\n\", \" \\\"instanceAwsClientConfiguration\\\": {\\n\", \" \\\"proxyPort\\\": 8099,\\n\", \" \\\"proxyHost\\\": \\\"myproxy.example.com\\\"\\n\", \" }\\n\", \"}\\n\")),\n\t\t\tTerminationProtection: pulumi.Bool(false),\n\t\t\tKeepJobFlowAliveWhenNoSteps: pulumi.Bool(true),\n\t\t\tEc2Attributes: \u0026emr.ClusterEc2AttributesArgs{\n\t\t\t\tSubnetId: pulumi.Any(aws_subnet.Main.Id),\n\t\t\t\tEmrManagedMasterSecurityGroup: pulumi.Any(aws_security_group.Sg.Id),\n\t\t\t\tEmrManagedSlaveSecurityGroup: pulumi.Any(aws_security_group.Sg.Id),\n\t\t\t\tInstanceProfile: pulumi.Any(aws_iam_instance_profile.Emr_profile.Arn),\n\t\t\t},\n\t\t\tMasterInstanceGroup: \u0026emr.ClusterMasterInstanceGroupArgs{\n\t\t\t\tInstanceType: pulumi.String(\"m4.large\"),\n\t\t\t},\n\t\t\tCoreInstanceGroup: \u0026emr.ClusterCoreInstanceGroupArgs{\n\t\t\t\tInstanceType: pulumi.String(\"c4.large\"),\n\t\t\t\tInstanceCount: pulumi.Int(1),\n\t\t\t\tEbsConfigs: emr.ClusterCoreInstanceGroupEbsConfigArray{\n\t\t\t\t\t\u0026emr.ClusterCoreInstanceGroupEbsConfigArgs{\n\t\t\t\t\t\tSize: pulumi.Int(40),\n\t\t\t\t\t\tType: pulumi.String(\"gp2\"),\n\t\t\t\t\t\tVolumesPerInstance: pulumi.Int(1),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tBidPrice: pulumi.String(\"0.30\"),\n\t\t\t\tAutoscalingPolicy: pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \"\\\"Constraints\\\": {\\n\", \" \\\"MinCapacity\\\": 1,\\n\", \" \\\"MaxCapacity\\\": 2\\n\", \"},\\n\", \"\\\"Rules\\\": [\\n\", \" {\\n\", \" \\\"Name\\\": \\\"ScaleOutMemoryPercentage\\\",\\n\", \" \\\"Description\\\": \\\"Scale out if YARNMemoryAvailablePercentage is less than 15\\\",\\n\", \" \\\"Action\\\": {\\n\", \" \\\"SimpleScalingPolicyConfiguration\\\": {\\n\", \" \\\"AdjustmentType\\\": \\\"CHANGE_IN_CAPACITY\\\",\\n\", \" \\\"ScalingAdjustment\\\": 1,\\n\", \" \\\"CoolDown\\\": 300\\n\", \" }\\n\", \" },\\n\", \" \\\"Trigger\\\": {\\n\", \" \\\"CloudWatchAlarmDefinition\\\": {\\n\", \" \\\"ComparisonOperator\\\": \\\"LESS_THAN\\\",\\n\", \" \\\"EvaluationPeriods\\\": 1,\\n\", \" \\\"MetricName\\\": \\\"YARNMemoryAvailablePercentage\\\",\\n\", \" \\\"Namespace\\\": \\\"AWS/ElasticMapReduce\\\",\\n\", \" \\\"Period\\\": 300,\\n\", \" \\\"Statistic\\\": \\\"AVERAGE\\\",\\n\", \" \\\"Threshold\\\": 15.0,\\n\", \" \\\"Unit\\\": \\\"PERCENT\\\"\\n\", \" }\\n\", \" }\\n\", \" }\\n\", \"]\\n\", \"}\\n\")),\n\t\t\t},\n\t\t\tEbsRootVolumeSize: pulumi.Int(100),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"role\": pulumi.String(\"rolename\"),\n\t\t\t\t\"env\": pulumi.String(\"env\"),\n\t\t\t},\n\t\t\tBootstrapActions: emr.ClusterBootstrapActionArray{\n\t\t\t\t\u0026emr.ClusterBootstrapActionArgs{\n\t\t\t\t\tPath: pulumi.String(\"s3://elasticmapreduce/bootstrap-actions/run-if\"),\n\t\t\t\t\tName: pulumi.String(\"runif\"),\n\t\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"instance.isMaster=true\"),\n\t\t\t\t\t\tpulumi.String(\"echo running on master node\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tConfigurationsJson: pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \" [\\n\", \" {\\n\", \" \\\"Classification\\\": \\\"hadoop-env\\\",\\n\", \" \\\"Configurations\\\": [\\n\", \" {\\n\", \" \\\"Classification\\\": \\\"export\\\",\\n\", \" \\\"Properties\\\": {\\n\", \" \\\"JAVA_HOME\\\": \\\"/usr/lib/jvm/java-1.8.0\\\"\\n\", \" }\\n\", \" }\\n\", \" ],\\n\", \" \\\"Properties\\\": {}\\n\", \" },\\n\", \" {\\n\", \" \\\"Classification\\\": \\\"spark-env\\\",\\n\", \" \\\"Configurations\\\": [\\n\", \" {\\n\", \" \\\"Classification\\\": \\\"export\\\",\\n\", \" \\\"Properties\\\": {\\n\", \" \\\"JAVA_HOME\\\": \\\"/usr/lib/jvm/java-1.8.0\\\"\\n\", \" }\\n\", \" }\\n\", \" ],\\n\", \" \\\"Properties\\\": {}\\n\", \" }\\n\", \" ]\\n\")),\n\t\t\tServiceRole: pulumi.Any(aws_iam_role.Iam_emr_service_role.Arn),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nThe `aws.emr.Cluster` resource typically requires two IAM roles, one for the EMR Cluster\nto use as a service, and another to place on your Cluster Instances to interact\nwith AWS from those instances. The suggested role policy template for the EMR service is `AmazonElasticMapReduceRole`,\nand `AmazonElasticMapReduceforEC2Role` for the EC2 profile. See the [Getting\nStarted](https://docs.aws.amazon.com/ElasticMapReduce/latest/ManagementGuide/emr-gs-launch-sample-cluster.html)\nguide for more information on these IAM roles. There is also a fully-bootable\nexample this provider configuration at the bottom of this page.\n{{% /example %}}\n{{% /examples %}}\n## Instance Fleet\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.emr.Cluster(\"example\", {\n masterInstanceFleet: {\n instanceTypeConfigs: [{\n instanceType: \"m4.xlarge\",\n }],\n targetOnDemandCapacity: 1,\n },\n coreInstanceFleet: {\n instanceTypeConfigs: [\n {\n bidPriceAsPercentageOfOnDemandPrice: 80,\n ebsConfigs: [{\n size: 100,\n type: \"gp2\",\n volumesPerInstance: 1,\n }],\n instanceType: \"m3.xlarge\",\n weightedCapacity: 1,\n },\n {\n bidPriceAsPercentageOfOnDemandPrice: 100,\n ebsConfigs: [{\n size: 100,\n type: \"gp2\",\n volumesPerInstance: 1,\n }],\n instanceType: \"m4.xlarge\",\n weightedCapacity: 1,\n },\n {\n bidPriceAsPercentageOfOnDemandPrice: 100,\n ebsConfigs: [{\n size: 100,\n type: \"gp2\",\n volumesPerInstance: 1,\n }],\n instanceType: \"m4.2xlarge\",\n weightedCapacity: 2,\n },\n ],\n launchSpecifications: {\n spotSpecifications: [{\n allocationStrategy: \"capacity-optimized\",\n blockDurationMinutes: 0,\n timeoutAction: \"SWITCH_TO_ON_DEMAND\",\n timeoutDurationMinutes: 10,\n }],\n },\n name: \"core fleet\",\n targetOnDemandCapacity: 2,\n targetSpotCapacity: 2,\n },\n});\nconst task = new aws.emr.InstanceFleet(\"task\", {\n clusterId: example.id,\n instanceTypeConfigs: [\n {\n bidPriceAsPercentageOfOnDemandPrice: 100,\n ebsConfigs: [{\n size: 100,\n type: \"gp2\",\n volumesPerInstance: 1,\n }],\n instanceType: \"m4.xlarge\",\n weightedCapacity: 1,\n },\n {\n bidPriceAsPercentageOfOnDemandPrice: 100,\n ebsConfigs: [{\n size: 100,\n type: \"gp2\",\n volumesPerInstance: 1,\n }],\n instanceType: \"m4.2xlarge\",\n weightedCapacity: 2,\n },\n ],\n launchSpecifications: {\n spotSpecifications: [{\n allocationStrategy: \"capacity-optimized\",\n blockDurationMinutes: 0,\n timeoutAction: \"TERMINATE_CLUSTER\",\n timeoutDurationMinutes: 10,\n }],\n },\n targetOnDemandCapacity: 1,\n targetSpotCapacity: 1,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.emr.Cluster(\"example\",\n master_instance_fleet=aws.emr.ClusterMasterInstanceFleetArgs(\n instance_type_configs=[aws.emr.ClusterMasterInstanceFleetInstanceTypeConfigArgs(\n instance_type=\"m4.xlarge\",\n )],\n target_on_demand_capacity=1,\n ),\n core_instance_fleet=aws.emr.ClusterCoreInstanceFleetArgs(\n instance_type_configs=[\n aws.emr.ClusterCoreInstanceFleetInstanceTypeConfigArgs(\n bid_price_as_percentage_of_on_demand_price=80,\n ebs_configs=[aws.emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs(\n size=100,\n type=\"gp2\",\n volumes_per_instance=1,\n )],\n instance_type=\"m3.xlarge\",\n weighted_capacity=1,\n ),\n aws.emr.ClusterCoreInstanceFleetInstanceTypeConfigArgs(\n bid_price_as_percentage_of_on_demand_price=100,\n ebs_configs=[aws.emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs(\n size=100,\n type=\"gp2\",\n volumes_per_instance=1,\n )],\n instance_type=\"m4.xlarge\",\n weighted_capacity=1,\n ),\n aws.emr.ClusterCoreInstanceFleetInstanceTypeConfigArgs(\n bid_price_as_percentage_of_on_demand_price=100,\n ebs_configs=[aws.emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs(\n size=100,\n type=\"gp2\",\n volumes_per_instance=1,\n )],\n instance_type=\"m4.2xlarge\",\n weighted_capacity=2,\n ),\n ],\n launch_specifications=aws.emr.ClusterCoreInstanceFleetLaunchSpecificationsArgs(\n spot_specifications=[aws.emr.ClusterCoreInstanceFleetLaunchSpecificationsSpotSpecificationArgs(\n allocation_strategy=\"capacity-optimized\",\n block_duration_minutes=0,\n timeout_action=\"SWITCH_TO_ON_DEMAND\",\n timeout_duration_minutes=10,\n )],\n ),\n name=\"core fleet\",\n target_on_demand_capacity=2,\n target_spot_capacity=2,\n ))\ntask = aws.emr.InstanceFleet(\"task\",\n cluster_id=example.id,\n instance_type_configs=[\n aws.emr.InstanceFleetInstanceTypeConfigArgs(\n bid_price_as_percentage_of_on_demand_price=100,\n ebs_configs=[aws.emr.InstanceFleetInstanceTypeConfigEbsConfigArgs(\n size=100,\n type=\"gp2\",\n volumes_per_instance=1,\n )],\n instance_type=\"m4.xlarge\",\n weighted_capacity=1,\n ),\n aws.emr.InstanceFleetInstanceTypeConfigArgs(\n bid_price_as_percentage_of_on_demand_price=100,\n ebs_configs=[aws.emr.InstanceFleetInstanceTypeConfigEbsConfigArgs(\n size=100,\n type=\"gp2\",\n volumes_per_instance=1,\n )],\n instance_type=\"m4.2xlarge\",\n weighted_capacity=2,\n ),\n ],\n launch_specifications=aws.emr.InstanceFleetLaunchSpecificationsArgs(\n spot_specifications=[aws.emr.InstanceFleetLaunchSpecificationsSpotSpecificationArgs(\n allocation_strategy=\"capacity-optimized\",\n block_duration_minutes=0,\n timeout_action=\"TERMINATE_CLUSTER\",\n timeout_duration_minutes=10,\n )],\n ),\n target_on_demand_capacity=1,\n target_spot_capacity=1)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Emr.Cluster(\"example\", new Aws.Emr.ClusterArgs\n {\n MasterInstanceFleet = new Aws.Emr.Inputs.ClusterMasterInstanceFleetArgs\n {\n InstanceTypeConfigs = \n {\n new Aws.Emr.Inputs.ClusterMasterInstanceFleetInstanceTypeConfigArgs\n {\n InstanceType = \"m4.xlarge\",\n },\n },\n TargetOnDemandCapacity = 1,\n },\n CoreInstanceFleet = new Aws.Emr.Inputs.ClusterCoreInstanceFleetArgs\n {\n InstanceTypeConfigs = \n {\n new Aws.Emr.Inputs.ClusterCoreInstanceFleetInstanceTypeConfigArgs\n {\n BidPriceAsPercentageOfOnDemandPrice = 80,\n EbsConfigs = \n {\n new Aws.Emr.Inputs.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs\n {\n Size = 100,\n Type = \"gp2\",\n VolumesPerInstance = 1,\n },\n },\n InstanceType = \"m3.xlarge\",\n WeightedCapacity = 1,\n },\n new Aws.Emr.Inputs.ClusterCoreInstanceFleetInstanceTypeConfigArgs\n {\n BidPriceAsPercentageOfOnDemandPrice = 100,\n EbsConfigs = \n {\n new Aws.Emr.Inputs.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs\n {\n Size = 100,\n Type = \"gp2\",\n VolumesPerInstance = 1,\n },\n },\n InstanceType = \"m4.xlarge\",\n WeightedCapacity = 1,\n },\n new Aws.Emr.Inputs.ClusterCoreInstanceFleetInstanceTypeConfigArgs\n {\n BidPriceAsPercentageOfOnDemandPrice = 100,\n EbsConfigs = \n {\n new Aws.Emr.Inputs.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs\n {\n Size = 100,\n Type = \"gp2\",\n VolumesPerInstance = 1,\n },\n },\n InstanceType = \"m4.2xlarge\",\n WeightedCapacity = 2,\n },\n },\n LaunchSpecifications = new Aws.Emr.Inputs.ClusterCoreInstanceFleetLaunchSpecificationsArgs\n {\n SpotSpecifications = \n {\n new Aws.Emr.Inputs.ClusterCoreInstanceFleetLaunchSpecificationsSpotSpecificationArgs\n {\n AllocationStrategy = \"capacity-optimized\",\n BlockDurationMinutes = 0,\n TimeoutAction = \"SWITCH_TO_ON_DEMAND\",\n TimeoutDurationMinutes = 10,\n },\n },\n },\n Name = \"core fleet\",\n TargetOnDemandCapacity = 2,\n TargetSpotCapacity = 2,\n },\n });\n var task = new Aws.Emr.InstanceFleet(\"task\", new Aws.Emr.InstanceFleetArgs\n {\n ClusterId = example.Id,\n InstanceTypeConfigs = \n {\n new Aws.Emr.Inputs.InstanceFleetInstanceTypeConfigArgs\n {\n BidPriceAsPercentageOfOnDemandPrice = 100,\n EbsConfigs = \n {\n new Aws.Emr.Inputs.InstanceFleetInstanceTypeConfigEbsConfigArgs\n {\n Size = 100,\n Type = \"gp2\",\n VolumesPerInstance = 1,\n },\n },\n InstanceType = \"m4.xlarge\",\n WeightedCapacity = 1,\n },\n new Aws.Emr.Inputs.InstanceFleetInstanceTypeConfigArgs\n {\n BidPriceAsPercentageOfOnDemandPrice = 100,\n EbsConfigs = \n {\n new Aws.Emr.Inputs.InstanceFleetInstanceTypeConfigEbsConfigArgs\n {\n Size = 100,\n Type = \"gp2\",\n VolumesPerInstance = 1,\n },\n },\n InstanceType = \"m4.2xlarge\",\n WeightedCapacity = 2,\n },\n },\n LaunchSpecifications = new Aws.Emr.Inputs.InstanceFleetLaunchSpecificationsArgs\n {\n SpotSpecifications = \n {\n new Aws.Emr.Inputs.InstanceFleetLaunchSpecificationsSpotSpecificationArgs\n {\n AllocationStrategy = \"capacity-optimized\",\n BlockDurationMinutes = 0,\n TimeoutAction = \"TERMINATE_CLUSTER\",\n TimeoutDurationMinutes = 10,\n },\n },\n },\n TargetOnDemandCapacity = 1,\n TargetSpotCapacity = 1,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/emr\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := emr.NewCluster(ctx, \"example\", \u0026emr.ClusterArgs{\n\t\t\tMasterInstanceFleet: \u0026emr.ClusterMasterInstanceFleetArgs{\n\t\t\t\tInstanceTypeConfigs: emr.ClusterMasterInstanceFleetInstanceTypeConfigArray{\n\t\t\t\t\t\u0026emr.ClusterMasterInstanceFleetInstanceTypeConfigArgs{\n\t\t\t\t\t\tInstanceType: pulumi.String(\"m4.xlarge\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tTargetOnDemandCapacity: pulumi.Int(1),\n\t\t\t},\n\t\t\tCoreInstanceFleet: \u0026emr.ClusterCoreInstanceFleetArgs{\n\t\t\t\tInstanceTypeConfigs: emr.ClusterCoreInstanceFleetInstanceTypeConfigArray{\n\t\t\t\t\t\u0026emr.ClusterCoreInstanceFleetInstanceTypeConfigArgs{\n\t\t\t\t\t\tBidPriceAsPercentageOfOnDemandPrice: pulumi.Float64(80),\n\t\t\t\t\t\tEbsConfigs: emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArray{\n\t\t\t\t\t\t\t\u0026emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs{\n\t\t\t\t\t\t\t\tSize: pulumi.Int(100),\n\t\t\t\t\t\t\t\tType: pulumi.String(\"gp2\"),\n\t\t\t\t\t\t\t\tVolumesPerInstance: pulumi.Int(1),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tInstanceType: pulumi.String(\"m3.xlarge\"),\n\t\t\t\t\t\tWeightedCapacity: pulumi.Int(1),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026emr.ClusterCoreInstanceFleetInstanceTypeConfigArgs{\n\t\t\t\t\t\tBidPriceAsPercentageOfOnDemandPrice: pulumi.Float64(100),\n\t\t\t\t\t\tEbsConfigs: emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArray{\n\t\t\t\t\t\t\t\u0026emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs{\n\t\t\t\t\t\t\t\tSize: pulumi.Int(100),\n\t\t\t\t\t\t\t\tType: pulumi.String(\"gp2\"),\n\t\t\t\t\t\t\t\tVolumesPerInstance: pulumi.Int(1),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tInstanceType: pulumi.String(\"m4.xlarge\"),\n\t\t\t\t\t\tWeightedCapacity: pulumi.Int(1),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026emr.ClusterCoreInstanceFleetInstanceTypeConfigArgs{\n\t\t\t\t\t\tBidPriceAsPercentageOfOnDemandPrice: pulumi.Float64(100),\n\t\t\t\t\t\tEbsConfigs: emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArray{\n\t\t\t\t\t\t\t\u0026emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs{\n\t\t\t\t\t\t\t\tSize: pulumi.Int(100),\n\t\t\t\t\t\t\t\tType: pulumi.String(\"gp2\"),\n\t\t\t\t\t\t\t\tVolumesPerInstance: pulumi.Int(1),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tInstanceType: pulumi.String(\"m4.2xlarge\"),\n\t\t\t\t\t\tWeightedCapacity: pulumi.Int(2),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tLaunchSpecifications: \u0026emr.ClusterCoreInstanceFleetLaunchSpecificationsArgs{\n\t\t\t\t\tSpotSpecifications: emr.ClusterCoreInstanceFleetLaunchSpecificationsSpotSpecificationArray{\n\t\t\t\t\t\t\u0026emr.ClusterCoreInstanceFleetLaunchSpecificationsSpotSpecificationArgs{\n\t\t\t\t\t\t\tAllocationStrategy: pulumi.String(\"capacity-optimized\"),\n\t\t\t\t\t\t\tBlockDurationMinutes: pulumi.Int(0),\n\t\t\t\t\t\t\tTimeoutAction: pulumi.String(\"SWITCH_TO_ON_DEMAND\"),\n\t\t\t\t\t\t\tTimeoutDurationMinutes: pulumi.Int(10),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tName: pulumi.String(\"core fleet\"),\n\t\t\t\tTargetOnDemandCapacity: pulumi.Int(2),\n\t\t\t\tTargetSpotCapacity: pulumi.Int(2),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = emr.NewInstanceFleet(ctx, \"task\", \u0026emr.InstanceFleetArgs{\n\t\t\tClusterId: example.ID(),\n\t\t\tInstanceTypeConfigs: emr.InstanceFleetInstanceTypeConfigArray{\n\t\t\t\t\u0026emr.InstanceFleetInstanceTypeConfigArgs{\n\t\t\t\t\tBidPriceAsPercentageOfOnDemandPrice: pulumi.Float64(100),\n\t\t\t\t\tEbsConfigs: emr.InstanceFleetInstanceTypeConfigEbsConfigArray{\n\t\t\t\t\t\t\u0026emr.InstanceFleetInstanceTypeConfigEbsConfigArgs{\n\t\t\t\t\t\t\tSize: pulumi.Int(100),\n\t\t\t\t\t\t\tType: pulumi.String(\"gp2\"),\n\t\t\t\t\t\t\tVolumesPerInstance: pulumi.Int(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tInstanceType: pulumi.String(\"m4.xlarge\"),\n\t\t\t\t\tWeightedCapacity: pulumi.Int(1),\n\t\t\t\t},\n\t\t\t\t\u0026emr.InstanceFleetInstanceTypeConfigArgs{\n\t\t\t\t\tBidPriceAsPercentageOfOnDemandPrice: pulumi.Float64(100),\n\t\t\t\t\tEbsConfigs: emr.InstanceFleetInstanceTypeConfigEbsConfigArray{\n\t\t\t\t\t\t\u0026emr.InstanceFleetInstanceTypeConfigEbsConfigArgs{\n\t\t\t\t\t\t\tSize: pulumi.Int(100),\n\t\t\t\t\t\t\tType: pulumi.String(\"gp2\"),\n\t\t\t\t\t\t\tVolumesPerInstance: pulumi.Int(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tInstanceType: pulumi.String(\"m4.2xlarge\"),\n\t\t\t\t\tWeightedCapacity: pulumi.Int(2),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLaunchSpecifications: \u0026emr.InstanceFleetLaunchSpecificationsArgs{\n\t\t\t\tSpotSpecifications: emr.InstanceFleetLaunchSpecificationsSpotSpecificationArray{\n\t\t\t\t\t\u0026emr.InstanceFleetLaunchSpecificationsSpotSpecificationArgs{\n\t\t\t\t\t\tAllocationStrategy: pulumi.String(\"capacity-optimized\"),\n\t\t\t\t\t\tBlockDurationMinutes: pulumi.Int(0),\n\t\t\t\t\t\tTimeoutAction: pulumi.String(\"TERMINATE_CLUSTER\"),\n\t\t\t\t\t\tTimeoutDurationMinutes: pulumi.Int(10),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTargetOnDemandCapacity: pulumi.Int(1),\n\t\t\tTargetSpotCapacity: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n### Enable Debug Logging\n\n[Debug logging in EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-debugging.html)\nis implemented as a step. It is highly recommended to utilize [`ignoreChanges`](https://www.pulumi.com/docs/intro/concepts/programming-model/#ignorechanges) if other\nsteps are being managed outside of this provider.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\n// ... other configuration ...\nconst example = new aws.emr.Cluster(\"example\", {steps: [{\n actionOnFailure: \"TERMINATE_CLUSTER\",\n name: \"Setup Hadoop Debugging\",\n hadoopJarStep: [{\n jar: \"command-runner.jar\",\n args: [\"state-pusher-script\"],\n }],\n}]});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\n# ... other configuration ...\nexample = aws.emr.Cluster(\"example\", steps=[aws.emr.ClusterStepArgs(\n action_on_failure=\"TERMINATE_CLUSTER\",\n name=\"Setup Hadoop Debugging\",\n hadoop_jar_step=[{\n \"jar\": \"command-runner.jar\",\n \"args\": [\"state-pusher-script\"],\n }],\n)])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n // ... other configuration ...\n var example = new Aws.Emr.Cluster(\"example\", new Aws.Emr.ClusterArgs\n {\n Steps = \n {\n new Aws.Emr.Inputs.ClusterStepArgs\n {\n ActionOnFailure = \"TERMINATE_CLUSTER\",\n Name = \"Setup Hadoop Debugging\",\n HadoopJarStep = \n {\n \n {\n { \"jar\", \"command-runner.jar\" },\n { \"args\", \n {\n \"state-pusher-script\",\n } },\n },\n },\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/emr\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := emr.NewCluster(ctx, \"example\", \u0026emr.ClusterArgs{\n\t\t\tSteps: emr.ClusterStepArray{\n\t\t\t\t\u0026emr.ClusterStepArgs{\n\t\t\t\t\tActionOnFailure: pulumi.String(\"TERMINATE_CLUSTER\"),\n\t\t\t\t\tName: pulumi.String(\"Setup Hadoop Debugging\"),\n\t\t\t\t\tHadoopJarStep: emr.ClusterStepHadoopJarStepArgs{\n\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\"jar\": \"command-runner.jar\",\n\t\t\t\t\t\t\t\"args\": []string{\n\t\t\t\t\t\t\t\t\"state-pusher-script\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n### Multiple Node Master Instance Group\n\nAvailable in EMR version 5.23.0 and later, an EMR Cluster can be launched with three master nodes for high availability. Additional information about this functionality and its requirements can be found in the [EMR Management Guide](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-ha.html).\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\n// This configuration is for illustrative purposes and highlights\n// only relevant configurations for working with this functionality.\n// Map public IP on launch must be enabled for public (Internet accessible) subnets\n// ... other configuration ...\nconst exampleSubnet = new aws.ec2.Subnet(\"exampleSubnet\", {mapPublicIpOnLaunch: true});\n// ... other configuration ...\nconst exampleCluster = new aws.emr.Cluster(\"exampleCluster\", {\n releaseLabel: \"emr-5.24.1\",\n terminationProtection: true,\n ec2Attributes: {\n subnetId: exampleSubnet.id,\n },\n masterInstanceGroup: {\n instanceCount: 3,\n },\n coreInstanceGroup: {},\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\n# This configuration is for illustrative purposes and highlights\n# only relevant configurations for working with this functionality.\n# Map public IP on launch must be enabled for public (Internet accessible) subnets\n# ... other configuration ...\nexample_subnet = aws.ec2.Subnet(\"exampleSubnet\", map_public_ip_on_launch=True)\n# ... other configuration ...\nexample_cluster = aws.emr.Cluster(\"exampleCluster\",\n release_label=\"emr-5.24.1\",\n termination_protection=True,\n ec2_attributes=aws.emr.ClusterEc2AttributesArgs(\n subnet_id=example_subnet.id,\n ),\n master_instance_group=aws.emr.ClusterMasterInstanceGroupArgs(\n instance_count=3,\n ),\n core_instance_group=aws.emr.ClusterCoreInstanceGroupArgs())\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n // This configuration is for illustrative purposes and highlights\n // only relevant configurations for working with this functionality.\n // Map public IP on launch must be enabled for public (Internet accessible) subnets\n // ... other configuration ...\n var exampleSubnet = new Aws.Ec2.Subnet(\"exampleSubnet\", new Aws.Ec2.SubnetArgs\n {\n MapPublicIpOnLaunch = true,\n });\n // ... other configuration ...\n var exampleCluster = new Aws.Emr.Cluster(\"exampleCluster\", new Aws.Emr.ClusterArgs\n {\n ReleaseLabel = \"emr-5.24.1\",\n TerminationProtection = true,\n Ec2Attributes = new Aws.Emr.Inputs.ClusterEc2AttributesArgs\n {\n SubnetId = exampleSubnet.Id,\n },\n MasterInstanceGroup = new Aws.Emr.Inputs.ClusterMasterInstanceGroupArgs\n {\n InstanceCount = 3,\n },\n CoreInstanceGroup = ,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/emr\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleSubnet, err := ec2.NewSubnet(ctx, \"exampleSubnet\", \u0026ec2.SubnetArgs{\n\t\t\tMapPublicIpOnLaunch: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = emr.NewCluster(ctx, \"exampleCluster\", \u0026emr.ClusterArgs{\n\t\t\tReleaseLabel: pulumi.String(\"emr-5.24.1\"),\n\t\t\tTerminationProtection: pulumi.Bool(true),\n\t\t\tEc2Attributes: \u0026emr.ClusterEc2AttributesArgs{\n\t\t\t\tSubnetId: exampleSubnet.ID(),\n\t\t\t},\n\t\t\tMasterInstanceGroup: \u0026emr.ClusterMasterInstanceGroupArgs{\n\t\t\t\tInstanceCount: pulumi.Int(3),\n\t\t\t},\n\t\t\tCoreInstanceGroup: nil,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n## Example bootable config\n\n**NOTE:** This configuration demonstrates a minimal configuration needed to\nboot an example EMR Cluster. It is not meant to display best practices. Please\nuse at your own risk.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst mainVpc = new aws.ec2.Vpc(\"mainVpc\", {\n cidrBlock: \"168.31.0.0/16\",\n enableDnsHostnames: true,\n tags: {\n name: \"emr_test\",\n },\n});\nconst mainSubnet = new aws.ec2.Subnet(\"mainSubnet\", {\n vpcId: mainVpc.id,\n cidrBlock: \"168.31.0.0/20\",\n tags: {\n name: \"emr_test\",\n },\n});\n// IAM role for EMR Service\nconst iamEmrServiceRole = new aws.iam.Role(\"iamEmrServiceRole\", {assumeRolePolicy: `{\n \"Version\": \"2008-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"\",\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"Service\": \"elasticmapreduce.amazonaws.com\"\n },\n \"Action\": \"sts:AssumeRole\"\n }\n ]\n}\n`});\n// IAM Role for EC2 Instance Profile\nconst iamEmrProfileRole = new aws.iam.Role(\"iamEmrProfileRole\", {assumeRolePolicy: `{\n \"Version\": \"2008-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"\",\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"Service\": \"ec2.amazonaws.com\"\n },\n \"Action\": \"sts:AssumeRole\"\n }\n ]\n}\n`});\nconst emrProfile = new aws.iam.InstanceProfile(\"emrProfile\", {role: iamEmrProfileRole.name});\nconst cluster = new aws.emr.Cluster(\"cluster\", {\n releaseLabel: \"emr-4.6.0\",\n applications: [\"Spark\"],\n ec2Attributes: {\n subnetId: mainSubnet.id,\n emrManagedMasterSecurityGroup: aws_security_group.allow_all.id,\n emrManagedSlaveSecurityGroup: aws_security_group.allow_all.id,\n instanceProfile: emrProfile.arn,\n },\n masterInstanceGroup: {\n instanceType: \"m5.xlarge\",\n },\n coreInstanceGroup: {\n instanceCount: 1,\n instanceType: \"m5.xlarge\",\n },\n tags: {\n role: \"rolename\",\n dns_zone: \"env_zone\",\n env: \"env\",\n name: \"name-env\",\n },\n bootstrapActions: [{\n path: \"s3://elasticmapreduce/bootstrap-actions/run-if\",\n name: \"runif\",\n args: [\n \"instance.isMaster=true\",\n \"echo running on master node\",\n ],\n }],\n configurationsJson: ` [\n {\n \"Classification\": \"hadoop-env\",\n \"Configurations\": [\n {\n \"Classification\": \"export\",\n \"Properties\": {\n \"JAVA_HOME\": \"/usr/lib/jvm/java-1.8.0\"\n }\n }\n ],\n \"Properties\": {}\n },\n {\n \"Classification\": \"spark-env\",\n \"Configurations\": [\n {\n \"Classification\": \"export\",\n \"Properties\": {\n \"JAVA_HOME\": \"/usr/lib/jvm/java-1.8.0\"\n }\n }\n ],\n \"Properties\": {}\n }\n ]\n`,\n serviceRole: iamEmrServiceRole.arn,\n});\nconst allowAccess = new aws.ec2.SecurityGroup(\"allowAccess\", {\n description: \"Allow inbound traffic\",\n vpcId: mainVpc.id,\n ingress: [{\n fromPort: 0,\n toPort: 0,\n protocol: \"-1\",\n cidrBlocks: mainVpc.cidrBlock,\n }],\n egress: [{\n fromPort: 0,\n toPort: 0,\n protocol: \"-1\",\n cidrBlocks: [\"0.0.0.0/0\"],\n }],\n tags: {\n name: \"emr_test\",\n },\n}, {\n dependsOn: [mainSubnet],\n});\nconst gw = new aws.ec2.InternetGateway(\"gw\", {vpcId: mainVpc.id});\nconst routeTable = new aws.ec2.RouteTable(\"routeTable\", {\n vpcId: mainVpc.id,\n routes: [{\n cidrBlock: \"0.0.0.0/0\",\n gatewayId: gw.id,\n }],\n});\nconst mainRouteTableAssociation = new aws.ec2.MainRouteTableAssociation(\"mainRouteTableAssociation\", {\n vpcId: mainVpc.id,\n routeTableId: routeTable.id,\n});\n//##\nconst iamEmrServicePolicy = new aws.iam.RolePolicy(\"iamEmrServicePolicy\", {\n role: iamEmrServiceRole.id,\n policy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Resource\": \"*\",\n \"Action\": [\n \"ec2:AuthorizeSecurityGroupEgress\",\n \"ec2:AuthorizeSecurityGroupIngress\",\n \"ec2:CancelSpotInstanceRequests\",\n \"ec2:CreateNetworkInterface\",\n \"ec2:CreateSecurityGroup\",\n \"ec2:CreateTags\",\n \"ec2:DeleteNetworkInterface\",\n \"ec2:DeleteSecurityGroup\",\n \"ec2:DeleteTags\",\n \"ec2:DescribeAvailabilityZones\",\n \"ec2:DescribeAccountAttributes\",\n \"ec2:DescribeDhcpOptions\",\n \"ec2:DescribeInstanceStatus\",\n \"ec2:DescribeInstances\",\n \"ec2:DescribeKeyPairs\",\n \"ec2:DescribeNetworkAcls\",\n \"ec2:DescribeNetworkInterfaces\",\n \"ec2:DescribePrefixLists\",\n \"ec2:DescribeRouteTables\",\n \"ec2:DescribeSecurityGroups\",\n \"ec2:DescribeSpotInstanceRequests\",\n \"ec2:DescribeSpotPriceHistory\",\n \"ec2:DescribeSubnets\",\n \"ec2:DescribeVpcAttribute\",\n \"ec2:DescribeVpcEndpoints\",\n \"ec2:DescribeVpcEndpointServices\",\n \"ec2:DescribeVpcs\",\n \"ec2:DetachNetworkInterface\",\n \"ec2:ModifyImageAttribute\",\n \"ec2:ModifyInstanceAttribute\",\n \"ec2:RequestSpotInstances\",\n \"ec2:RevokeSecurityGroupEgress\",\n \"ec2:RunInstances\",\n \"ec2:TerminateInstances\",\n \"ec2:DeleteVolume\",\n \"ec2:DescribeVolumeStatus\",\n \"ec2:DescribeVolumes\",\n \"ec2:DetachVolume\",\n \"iam:GetRole\",\n \"iam:GetRolePolicy\",\n \"iam:ListInstanceProfiles\",\n \"iam:ListRolePolicies\",\n \"iam:PassRole\",\n \"s3:CreateBucket\",\n \"s3:Get*\",\n \"s3:List*\",\n \"sdb:BatchPutAttributes\",\n \"sdb:Select\",\n \"sqs:CreateQueue\",\n \"sqs:Delete*\",\n \"sqs:GetQueue*\",\n \"sqs:PurgeQueue\",\n \"sqs:ReceiveMessage\"\n ]\n }]\n}\n`,\n});\nconst iamEmrProfilePolicy = new aws.iam.RolePolicy(\"iamEmrProfilePolicy\", {\n role: iamEmrProfileRole.id,\n policy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Resource\": \"*\",\n \"Action\": [\n \"cloudwatch:*\",\n \"dynamodb:*\",\n \"ec2:Describe*\",\n \"elasticmapreduce:Describe*\",\n \"elasticmapreduce:ListBootstrapActions\",\n \"elasticmapreduce:ListClusters\",\n \"elasticmapreduce:ListInstanceGroups\",\n \"elasticmapreduce:ListInstances\",\n \"elasticmapreduce:ListSteps\",\n \"kinesis:CreateStream\",\n \"kinesis:DeleteStream\",\n \"kinesis:DescribeStream\",\n \"kinesis:GetRecords\",\n \"kinesis:GetShardIterator\",\n \"kinesis:MergeShards\",\n \"kinesis:PutRecord\",\n \"kinesis:SplitShard\",\n \"rds:Describe*\",\n \"s3:*\",\n \"sdb:*\",\n \"sns:*\",\n \"sqs:*\"\n ]\n }]\n}\n`,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nmain_vpc = aws.ec2.Vpc(\"mainVpc\",\n cidr_block=\"168.31.0.0/16\",\n enable_dns_hostnames=True,\n tags={\n \"name\": \"emr_test\",\n })\nmain_subnet = aws.ec2.Subnet(\"mainSubnet\",\n vpc_id=main_vpc.id,\n cidr_block=\"168.31.0.0/20\",\n tags={\n \"name\": \"emr_test\",\n })\n# IAM role for EMR Service\niam_emr_service_role = aws.iam.Role(\"iamEmrServiceRole\", assume_role_policy=\"\"\"{\n \"Version\": \"2008-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"\",\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"Service\": \"elasticmapreduce.amazonaws.com\"\n },\n \"Action\": \"sts:AssumeRole\"\n }\n ]\n}\n\"\"\")\n# IAM Role for EC2 Instance Profile\niam_emr_profile_role = aws.iam.Role(\"iamEmrProfileRole\", assume_role_policy=\"\"\"{\n \"Version\": \"2008-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"\",\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"Service\": \"ec2.amazonaws.com\"\n },\n \"Action\": \"sts:AssumeRole\"\n }\n ]\n}\n\"\"\")\nemr_profile = aws.iam.InstanceProfile(\"emrProfile\", role=iam_emr_profile_role.name)\ncluster = aws.emr.Cluster(\"cluster\",\n release_label=\"emr-4.6.0\",\n applications=[\"Spark\"],\n ec2_attributes=aws.emr.ClusterEc2AttributesArgs(\n subnet_id=main_subnet.id,\n emr_managed_master_security_group=aws_security_group[\"allow_all\"][\"id\"],\n emr_managed_slave_security_group=aws_security_group[\"allow_all\"][\"id\"],\n instance_profile=emr_profile.arn,\n ),\n master_instance_group=aws.emr.ClusterMasterInstanceGroupArgs(\n instance_type=\"m5.xlarge\",\n ),\n core_instance_group=aws.emr.ClusterCoreInstanceGroupArgs(\n instance_count=1,\n instance_type=\"m5.xlarge\",\n ),\n tags={\n \"role\": \"rolename\",\n \"dns_zone\": \"env_zone\",\n \"env\": \"env\",\n \"name\": \"name-env\",\n },\n bootstrap_actions=[aws.emr.ClusterBootstrapActionArgs(\n path=\"s3://elasticmapreduce/bootstrap-actions/run-if\",\n name=\"runif\",\n args=[\n \"instance.isMaster=true\",\n \"echo running on master node\",\n ],\n )],\n configurations_json=\"\"\" [\n {\n \"Classification\": \"hadoop-env\",\n \"Configurations\": [\n {\n \"Classification\": \"export\",\n \"Properties\": {\n \"JAVA_HOME\": \"/usr/lib/jvm/java-1.8.0\"\n }\n }\n ],\n \"Properties\": {}\n },\n {\n \"Classification\": \"spark-env\",\n \"Configurations\": [\n {\n \"Classification\": \"export\",\n \"Properties\": {\n \"JAVA_HOME\": \"/usr/lib/jvm/java-1.8.0\"\n }\n }\n ],\n \"Properties\": {}\n }\n ]\n\"\"\",\n service_role=iam_emr_service_role.arn)\nallow_access = aws.ec2.SecurityGroup(\"allowAccess\",\n description=\"Allow inbound traffic\",\n vpc_id=main_vpc.id,\n ingress=[aws.ec2.SecurityGroupIngressArgs(\n from_port=0,\n to_port=0,\n protocol=\"-1\",\n cidr_blocks=main_vpc.cidr_block,\n )],\n egress=[aws.ec2.SecurityGroupEgressArgs(\n from_port=0,\n to_port=0,\n protocol=\"-1\",\n cidr_blocks=[\"0.0.0.0/0\"],\n )],\n tags={\n \"name\": \"emr_test\",\n },\n opts=pulumi.ResourceOptions(depends_on=[main_subnet]))\ngw = aws.ec2.InternetGateway(\"gw\", vpc_id=main_vpc.id)\nroute_table = aws.ec2.RouteTable(\"routeTable\",\n vpc_id=main_vpc.id,\n routes=[aws.ec2.RouteTableRouteArgs(\n cidr_block=\"0.0.0.0/0\",\n gateway_id=gw.id,\n )])\nmain_route_table_association = aws.ec2.MainRouteTableAssociation(\"mainRouteTableAssociation\",\n vpc_id=main_vpc.id,\n route_table_id=route_table.id)\n###\niam_emr_service_policy = aws.iam.RolePolicy(\"iamEmrServicePolicy\",\n role=iam_emr_service_role.id,\n policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Resource\": \"*\",\n \"Action\": [\n \"ec2:AuthorizeSecurityGroupEgress\",\n \"ec2:AuthorizeSecurityGroupIngress\",\n \"ec2:CancelSpotInstanceRequests\",\n \"ec2:CreateNetworkInterface\",\n \"ec2:CreateSecurityGroup\",\n \"ec2:CreateTags\",\n \"ec2:DeleteNetworkInterface\",\n \"ec2:DeleteSecurityGroup\",\n \"ec2:DeleteTags\",\n \"ec2:DescribeAvailabilityZones\",\n \"ec2:DescribeAccountAttributes\",\n \"ec2:DescribeDhcpOptions\",\n \"ec2:DescribeInstanceStatus\",\n \"ec2:DescribeInstances\",\n \"ec2:DescribeKeyPairs\",\n \"ec2:DescribeNetworkAcls\",\n \"ec2:DescribeNetworkInterfaces\",\n \"ec2:DescribePrefixLists\",\n \"ec2:DescribeRouteTables\",\n \"ec2:DescribeSecurityGroups\",\n \"ec2:DescribeSpotInstanceRequests\",\n \"ec2:DescribeSpotPriceHistory\",\n \"ec2:DescribeSubnets\",\n \"ec2:DescribeVpcAttribute\",\n \"ec2:DescribeVpcEndpoints\",\n \"ec2:DescribeVpcEndpointServices\",\n \"ec2:DescribeVpcs\",\n \"ec2:DetachNetworkInterface\",\n \"ec2:ModifyImageAttribute\",\n \"ec2:ModifyInstanceAttribute\",\n \"ec2:RequestSpotInstances\",\n \"ec2:RevokeSecurityGroupEgress\",\n \"ec2:RunInstances\",\n \"ec2:TerminateInstances\",\n \"ec2:DeleteVolume\",\n \"ec2:DescribeVolumeStatus\",\n \"ec2:DescribeVolumes\",\n \"ec2:DetachVolume\",\n \"iam:GetRole\",\n \"iam:GetRolePolicy\",\n \"iam:ListInstanceProfiles\",\n \"iam:ListRolePolicies\",\n \"iam:PassRole\",\n \"s3:CreateBucket\",\n \"s3:Get*\",\n \"s3:List*\",\n \"sdb:BatchPutAttributes\",\n \"sdb:Select\",\n \"sqs:CreateQueue\",\n \"sqs:Delete*\",\n \"sqs:GetQueue*\",\n \"sqs:PurgeQueue\",\n \"sqs:ReceiveMessage\"\n ]\n }]\n}\n\"\"\")\niam_emr_profile_policy = aws.iam.RolePolicy(\"iamEmrProfilePolicy\",\n role=iam_emr_profile_role.id,\n policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Resource\": \"*\",\n \"Action\": [\n \"cloudwatch:*\",\n \"dynamodb:*\",\n \"ec2:Describe*\",\n \"elasticmapreduce:Describe*\",\n \"elasticmapreduce:ListBootstrapActions\",\n \"elasticmapreduce:ListClusters\",\n \"elasticmapreduce:ListInstanceGroups\",\n \"elasticmapreduce:ListInstances\",\n \"elasticmapreduce:ListSteps\",\n \"kinesis:CreateStream\",\n \"kinesis:DeleteStream\",\n \"kinesis:DescribeStream\",\n \"kinesis:GetRecords\",\n \"kinesis:GetShardIterator\",\n \"kinesis:MergeShards\",\n \"kinesis:PutRecord\",\n \"kinesis:SplitShard\",\n \"rds:Describe*\",\n \"s3:*\",\n \"sdb:*\",\n \"sns:*\",\n \"sqs:*\"\n ]\n }]\n}\n\"\"\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var mainVpc = new Aws.Ec2.Vpc(\"mainVpc\", new Aws.Ec2.VpcArgs\n {\n CidrBlock = \"168.31.0.0/16\",\n EnableDnsHostnames = true,\n Tags = \n {\n { \"name\", \"emr_test\" },\n },\n });\n var mainSubnet = new Aws.Ec2.Subnet(\"mainSubnet\", new Aws.Ec2.SubnetArgs\n {\n VpcId = mainVpc.Id,\n CidrBlock = \"168.31.0.0/20\",\n Tags = \n {\n { \"name\", \"emr_test\" },\n },\n });\n // IAM role for EMR Service\n var iamEmrServiceRole = new Aws.Iam.Role(\"iamEmrServiceRole\", new Aws.Iam.RoleArgs\n {\n AssumeRolePolicy = @\"{\n \"\"Version\"\": \"\"2008-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Sid\"\": \"\"\"\",\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Principal\"\": {\n \"\"Service\"\": \"\"elasticmapreduce.amazonaws.com\"\"\n },\n \"\"Action\"\": \"\"sts:AssumeRole\"\"\n }\n ]\n}\n\",\n });\n // IAM Role for EC2 Instance Profile\n var iamEmrProfileRole = new Aws.Iam.Role(\"iamEmrProfileRole\", new Aws.Iam.RoleArgs\n {\n AssumeRolePolicy = @\"{\n \"\"Version\"\": \"\"2008-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Sid\"\": \"\"\"\",\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Principal\"\": {\n \"\"Service\"\": \"\"ec2.amazonaws.com\"\"\n },\n \"\"Action\"\": \"\"sts:AssumeRole\"\"\n }\n ]\n}\n\",\n });\n var emrProfile = new Aws.Iam.InstanceProfile(\"emrProfile\", new Aws.Iam.InstanceProfileArgs\n {\n Role = iamEmrProfileRole.Name,\n });\n var cluster = new Aws.Emr.Cluster(\"cluster\", new Aws.Emr.ClusterArgs\n {\n ReleaseLabel = \"emr-4.6.0\",\n Applications = \n {\n \"Spark\",\n },\n Ec2Attributes = new Aws.Emr.Inputs.ClusterEc2AttributesArgs\n {\n SubnetId = mainSubnet.Id,\n EmrManagedMasterSecurityGroup = aws_security_group.Allow_all.Id,\n EmrManagedSlaveSecurityGroup = aws_security_group.Allow_all.Id,\n InstanceProfile = emrProfile.Arn,\n },\n MasterInstanceGroup = new Aws.Emr.Inputs.ClusterMasterInstanceGroupArgs\n {\n InstanceType = \"m5.xlarge\",\n },\n CoreInstanceGroup = new Aws.Emr.Inputs.ClusterCoreInstanceGroupArgs\n {\n InstanceCount = 1,\n InstanceType = \"m5.xlarge\",\n },\n Tags = \n {\n { \"role\", \"rolename\" },\n { \"dns_zone\", \"env_zone\" },\n { \"env\", \"env\" },\n { \"name\", \"name-env\" },\n },\n BootstrapActions = \n {\n new Aws.Emr.Inputs.ClusterBootstrapActionArgs\n {\n Path = \"s3://elasticmapreduce/bootstrap-actions/run-if\",\n Name = \"runif\",\n Args = \n {\n \"instance.isMaster=true\",\n \"echo running on master node\",\n },\n },\n },\n ConfigurationsJson = @\" [\n {\n \"\"Classification\"\": \"\"hadoop-env\"\",\n \"\"Configurations\"\": [\n {\n \"\"Classification\"\": \"\"export\"\",\n \"\"Properties\"\": {\n \"\"JAVA_HOME\"\": \"\"/usr/lib/jvm/java-1.8.0\"\"\n }\n }\n ],\n \"\"Properties\"\": {}\n },\n {\n \"\"Classification\"\": \"\"spark-env\"\",\n \"\"Configurations\"\": [\n {\n \"\"Classification\"\": \"\"export\"\",\n \"\"Properties\"\": {\n \"\"JAVA_HOME\"\": \"\"/usr/lib/jvm/java-1.8.0\"\"\n }\n }\n ],\n \"\"Properties\"\": {}\n }\n ]\n\",\n ServiceRole = iamEmrServiceRole.Arn,\n });\n var allowAccess = new Aws.Ec2.SecurityGroup(\"allowAccess\", new Aws.Ec2.SecurityGroupArgs\n {\n Description = \"Allow inbound traffic\",\n VpcId = mainVpc.Id,\n Ingress = \n {\n new Aws.Ec2.Inputs.SecurityGroupIngressArgs\n {\n FromPort = 0,\n ToPort = 0,\n Protocol = \"-1\",\n CidrBlocks = mainVpc.CidrBlock,\n },\n },\n Egress = \n {\n new Aws.Ec2.Inputs.SecurityGroupEgressArgs\n {\n FromPort = 0,\n ToPort = 0,\n Protocol = \"-1\",\n CidrBlocks = \n {\n \"0.0.0.0/0\",\n },\n },\n },\n Tags = \n {\n { \"name\", \"emr_test\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n mainSubnet,\n },\n });\n var gw = new Aws.Ec2.InternetGateway(\"gw\", new Aws.Ec2.InternetGatewayArgs\n {\n VpcId = mainVpc.Id,\n });\n var routeTable = new Aws.Ec2.RouteTable(\"routeTable\", new Aws.Ec2.RouteTableArgs\n {\n VpcId = mainVpc.Id,\n Routes = \n {\n new Aws.Ec2.Inputs.RouteTableRouteArgs\n {\n CidrBlock = \"0.0.0.0/0\",\n GatewayId = gw.Id,\n },\n },\n });\n var mainRouteTableAssociation = new Aws.Ec2.MainRouteTableAssociation(\"mainRouteTableAssociation\", new Aws.Ec2.MainRouteTableAssociationArgs\n {\n VpcId = mainVpc.Id,\n RouteTableId = routeTable.Id,\n });\n //##\n var iamEmrServicePolicy = new Aws.Iam.RolePolicy(\"iamEmrServicePolicy\", new Aws.Iam.RolePolicyArgs\n {\n Role = iamEmrServiceRole.Id,\n Policy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [{\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Resource\"\": \"\"*\"\",\n \"\"Action\"\": [\n \"\"ec2:AuthorizeSecurityGroupEgress\"\",\n \"\"ec2:AuthorizeSecurityGroupIngress\"\",\n \"\"ec2:CancelSpotInstanceRequests\"\",\n \"\"ec2:CreateNetworkInterface\"\",\n \"\"ec2:CreateSecurityGroup\"\",\n \"\"ec2:CreateTags\"\",\n \"\"ec2:DeleteNetworkInterface\"\",\n \"\"ec2:DeleteSecurityGroup\"\",\n \"\"ec2:DeleteTags\"\",\n \"\"ec2:DescribeAvailabilityZones\"\",\n \"\"ec2:DescribeAccountAttributes\"\",\n \"\"ec2:DescribeDhcpOptions\"\",\n \"\"ec2:DescribeInstanceStatus\"\",\n \"\"ec2:DescribeInstances\"\",\n \"\"ec2:DescribeKeyPairs\"\",\n \"\"ec2:DescribeNetworkAcls\"\",\n \"\"ec2:DescribeNetworkInterfaces\"\",\n \"\"ec2:DescribePrefixLists\"\",\n \"\"ec2:DescribeRouteTables\"\",\n \"\"ec2:DescribeSecurityGroups\"\",\n \"\"ec2:DescribeSpotInstanceRequests\"\",\n \"\"ec2:DescribeSpotPriceHistory\"\",\n \"\"ec2:DescribeSubnets\"\",\n \"\"ec2:DescribeVpcAttribute\"\",\n \"\"ec2:DescribeVpcEndpoints\"\",\n \"\"ec2:DescribeVpcEndpointServices\"\",\n \"\"ec2:DescribeVpcs\"\",\n \"\"ec2:DetachNetworkInterface\"\",\n \"\"ec2:ModifyImageAttribute\"\",\n \"\"ec2:ModifyInstanceAttribute\"\",\n \"\"ec2:RequestSpotInstances\"\",\n \"\"ec2:RevokeSecurityGroupEgress\"\",\n \"\"ec2:RunInstances\"\",\n \"\"ec2:TerminateInstances\"\",\n \"\"ec2:DeleteVolume\"\",\n \"\"ec2:DescribeVolumeStatus\"\",\n \"\"ec2:DescribeVolumes\"\",\n \"\"ec2:DetachVolume\"\",\n \"\"iam:GetRole\"\",\n \"\"iam:GetRolePolicy\"\",\n \"\"iam:ListInstanceProfiles\"\",\n \"\"iam:ListRolePolicies\"\",\n \"\"iam:PassRole\"\",\n \"\"s3:CreateBucket\"\",\n \"\"s3:Get*\"\",\n \"\"s3:List*\"\",\n \"\"sdb:BatchPutAttributes\"\",\n \"\"sdb:Select\"\",\n \"\"sqs:CreateQueue\"\",\n \"\"sqs:Delete*\"\",\n \"\"sqs:GetQueue*\"\",\n \"\"sqs:PurgeQueue\"\",\n \"\"sqs:ReceiveMessage\"\"\n ]\n }]\n}\n\",\n });\n var iamEmrProfilePolicy = new Aws.Iam.RolePolicy(\"iamEmrProfilePolicy\", new Aws.Iam.RolePolicyArgs\n {\n Role = iamEmrProfileRole.Id,\n Policy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [{\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Resource\"\": \"\"*\"\",\n \"\"Action\"\": [\n \"\"cloudwatch:*\"\",\n \"\"dynamodb:*\"\",\n \"\"ec2:Describe*\"\",\n \"\"elasticmapreduce:Describe*\"\",\n \"\"elasticmapreduce:ListBootstrapActions\"\",\n \"\"elasticmapreduce:ListClusters\"\",\n \"\"elasticmapreduce:ListInstanceGroups\"\",\n \"\"elasticmapreduce:ListInstances\"\",\n \"\"elasticmapreduce:ListSteps\"\",\n \"\"kinesis:CreateStream\"\",\n \"\"kinesis:DeleteStream\"\",\n \"\"kinesis:DescribeStream\"\",\n \"\"kinesis:GetRecords\"\",\n \"\"kinesis:GetShardIterator\"\",\n \"\"kinesis:MergeShards\"\",\n \"\"kinesis:PutRecord\"\",\n \"\"kinesis:SplitShard\"\",\n \"\"rds:Describe*\"\",\n \"\"s3:*\"\",\n \"\"sdb:*\"\",\n \"\"sns:*\"\",\n \"\"sqs:*\"\"\n ]\n }]\n}\n\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/emr\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmainVpc, err := ec2.NewVpc(ctx, \"mainVpc\", \u0026ec2.VpcArgs{\n\t\t\tCidrBlock: pulumi.String(\"168.31.0.0/16\"),\n\t\t\tEnableDnsHostnames: pulumi.Bool(true),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"name\": pulumi.String(\"emr_test\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmainSubnet, err := ec2.NewSubnet(ctx, \"mainSubnet\", \u0026ec2.SubnetArgs{\n\t\t\tVpcId: mainVpc.ID(),\n\t\t\tCidrBlock: pulumi.String(\"168.31.0.0/20\"),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"name\": pulumi.String(\"emr_test\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tiamEmrServiceRole, err := iam.NewRole(ctx, \"iamEmrServiceRole\", \u0026iam.RoleArgs{\n\t\t\tAssumeRolePolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2008-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Sid\\\": \\\"\\\",\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Principal\\\": {\\n\", \" \\\"Service\\\": \\\"elasticmapreduce.amazonaws.com\\\"\\n\", \" },\\n\", \" \\\"Action\\\": \\\"sts:AssumeRole\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tiamEmrProfileRole, err := iam.NewRole(ctx, \"iamEmrProfileRole\", \u0026iam.RoleArgs{\n\t\t\tAssumeRolePolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2008-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Sid\\\": \\\"\\\",\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Principal\\\": {\\n\", \" \\\"Service\\\": \\\"ec2.amazonaws.com\\\"\\n\", \" },\\n\", \" \\\"Action\\\": \\\"sts:AssumeRole\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\temrProfile, err := iam.NewInstanceProfile(ctx, \"emrProfile\", \u0026iam.InstanceProfileArgs{\n\t\t\tRole: iamEmrProfileRole.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = emr.NewCluster(ctx, \"cluster\", \u0026emr.ClusterArgs{\n\t\t\tReleaseLabel: pulumi.String(\"emr-4.6.0\"),\n\t\t\tApplications: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"Spark\"),\n\t\t\t},\n\t\t\tEc2Attributes: \u0026emr.ClusterEc2AttributesArgs{\n\t\t\t\tSubnetId: mainSubnet.ID(),\n\t\t\t\tEmrManagedMasterSecurityGroup: pulumi.Any(aws_security_group.Allow_all.Id),\n\t\t\t\tEmrManagedSlaveSecurityGroup: pulumi.Any(aws_security_group.Allow_all.Id),\n\t\t\t\tInstanceProfile: emrProfile.Arn,\n\t\t\t},\n\t\t\tMasterInstanceGroup: \u0026emr.ClusterMasterInstanceGroupArgs{\n\t\t\t\tInstanceType: pulumi.String(\"m5.xlarge\"),\n\t\t\t},\n\t\t\tCoreInstanceGroup: \u0026emr.ClusterCoreInstanceGroupArgs{\n\t\t\t\tInstanceCount: pulumi.Int(1),\n\t\t\t\tInstanceType: pulumi.String(\"m5.xlarge\"),\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"role\": pulumi.String(\"rolename\"),\n\t\t\t\t\"dns_zone\": pulumi.String(\"env_zone\"),\n\t\t\t\t\"env\": pulumi.String(\"env\"),\n\t\t\t\t\"name\": pulumi.String(\"name-env\"),\n\t\t\t},\n\t\t\tBootstrapActions: emr.ClusterBootstrapActionArray{\n\t\t\t\t\u0026emr.ClusterBootstrapActionArgs{\n\t\t\t\t\tPath: pulumi.String(\"s3://elasticmapreduce/bootstrap-actions/run-if\"),\n\t\t\t\t\tName: pulumi.String(\"runif\"),\n\t\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"instance.isMaster=true\"),\n\t\t\t\t\t\tpulumi.String(\"echo running on master node\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tConfigurationsJson: pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \" [\\n\", \" {\\n\", \" \\\"Classification\\\": \\\"hadoop-env\\\",\\n\", \" \\\"Configurations\\\": [\\n\", \" {\\n\", \" \\\"Classification\\\": \\\"export\\\",\\n\", \" \\\"Properties\\\": {\\n\", \" \\\"JAVA_HOME\\\": \\\"/usr/lib/jvm/java-1.8.0\\\"\\n\", \" }\\n\", \" }\\n\", \" ],\\n\", \" \\\"Properties\\\": {}\\n\", \" },\\n\", \" {\\n\", \" \\\"Classification\\\": \\\"spark-env\\\",\\n\", \" \\\"Configurations\\\": [\\n\", \" {\\n\", \" \\\"Classification\\\": \\\"export\\\",\\n\", \" \\\"Properties\\\": {\\n\", \" \\\"JAVA_HOME\\\": \\\"/usr/lib/jvm/java-1.8.0\\\"\\n\", \" }\\n\", \" }\\n\", \" ],\\n\", \" \\\"Properties\\\": {}\\n\", \" }\\n\", \" ]\\n\")),\n\t\t\tServiceRole: iamEmrServiceRole.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ec2.NewSecurityGroup(ctx, \"allowAccess\", \u0026ec2.SecurityGroupArgs{\n\t\t\tDescription: pulumi.String(\"Allow inbound traffic\"),\n\t\t\tVpcId: mainVpc.ID(),\n\t\t\tIngress: ec2.SecurityGroupIngressArray{\n\t\t\t\t\u0026ec2.SecurityGroupIngressArgs{\n\t\t\t\t\tFromPort: pulumi.Int(0),\n\t\t\t\t\tToPort: pulumi.Int(0),\n\t\t\t\t\tProtocol: pulumi.String(\"-1\"),\n\t\t\t\t\tCidrBlocks: mainVpc.CidrBlock,\n\t\t\t\t},\n\t\t\t},\n\t\t\tEgress: ec2.SecurityGroupEgressArray{\n\t\t\t\t\u0026ec2.SecurityGroupEgressArgs{\n\t\t\t\t\tFromPort: pulumi.Int(0),\n\t\t\t\t\tToPort: pulumi.Int(0),\n\t\t\t\t\tProtocol: pulumi.String(\"-1\"),\n\t\t\t\t\tCidrBlocks: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"0.0.0.0/0\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"name\": pulumi.String(\"emr_test\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tmainSubnet,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tgw, err := ec2.NewInternetGateway(ctx, \"gw\", \u0026ec2.InternetGatewayArgs{\n\t\t\tVpcId: mainVpc.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouteTable, err := ec2.NewRouteTable(ctx, \"routeTable\", \u0026ec2.RouteTableArgs{\n\t\t\tVpcId: mainVpc.ID(),\n\t\t\tRoutes: ec2.RouteTableRouteArray{\n\t\t\t\t\u0026ec2.RouteTableRouteArgs{\n\t\t\t\t\tCidrBlock: pulumi.String(\"0.0.0.0/0\"),\n\t\t\t\t\tGatewayId: gw.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ec2.NewMainRouteTableAssociation(ctx, \"mainRouteTableAssociation\", \u0026ec2.MainRouteTableAssociationArgs{\n\t\t\tVpcId: mainVpc.ID(),\n\t\t\tRouteTableId: routeTable.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewRolePolicy(ctx, \"iamEmrServicePolicy\", \u0026iam.RolePolicyArgs{\n\t\t\tRole: iamEmrServiceRole.ID(),\n\t\t\tPolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [{\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Resource\\\": \\\"*\\\",\\n\", \" \\\"Action\\\": [\\n\", \" \\\"ec2:AuthorizeSecurityGroupEgress\\\",\\n\", \" \\\"ec2:AuthorizeSecurityGroupIngress\\\",\\n\", \" \\\"ec2:CancelSpotInstanceRequests\\\",\\n\", \" \\\"ec2:CreateNetworkInterface\\\",\\n\", \" \\\"ec2:CreateSecurityGroup\\\",\\n\", \" \\\"ec2:CreateTags\\\",\\n\", \" \\\"ec2:DeleteNetworkInterface\\\",\\n\", \" \\\"ec2:DeleteSecurityGroup\\\",\\n\", \" \\\"ec2:DeleteTags\\\",\\n\", \" \\\"ec2:DescribeAvailabilityZones\\\",\\n\", \" \\\"ec2:DescribeAccountAttributes\\\",\\n\", \" \\\"ec2:DescribeDhcpOptions\\\",\\n\", \" \\\"ec2:DescribeInstanceStatus\\\",\\n\", \" \\\"ec2:DescribeInstances\\\",\\n\", \" \\\"ec2:DescribeKeyPairs\\\",\\n\", \" \\\"ec2:DescribeNetworkAcls\\\",\\n\", \" \\\"ec2:DescribeNetworkInterfaces\\\",\\n\", \" \\\"ec2:DescribePrefixLists\\\",\\n\", \" \\\"ec2:DescribeRouteTables\\\",\\n\", \" \\\"ec2:DescribeSecurityGroups\\\",\\n\", \" \\\"ec2:DescribeSpotInstanceRequests\\\",\\n\", \" \\\"ec2:DescribeSpotPriceHistory\\\",\\n\", \" \\\"ec2:DescribeSubnets\\\",\\n\", \" \\\"ec2:DescribeVpcAttribute\\\",\\n\", \" \\\"ec2:DescribeVpcEndpoints\\\",\\n\", \" \\\"ec2:DescribeVpcEndpointServices\\\",\\n\", \" \\\"ec2:DescribeVpcs\\\",\\n\", \" \\\"ec2:DetachNetworkInterface\\\",\\n\", \" \\\"ec2:ModifyImageAttribute\\\",\\n\", \" \\\"ec2:ModifyInstanceAttribute\\\",\\n\", \" \\\"ec2:RequestSpotInstances\\\",\\n\", \" \\\"ec2:RevokeSecurityGroupEgress\\\",\\n\", \" \\\"ec2:RunInstances\\\",\\n\", \" \\\"ec2:TerminateInstances\\\",\\n\", \" \\\"ec2:DeleteVolume\\\",\\n\", \" \\\"ec2:DescribeVolumeStatus\\\",\\n\", \" \\\"ec2:DescribeVolumes\\\",\\n\", \" \\\"ec2:DetachVolume\\\",\\n\", \" \\\"iam:GetRole\\\",\\n\", \" \\\"iam:GetRolePolicy\\\",\\n\", \" \\\"iam:ListInstanceProfiles\\\",\\n\", \" \\\"iam:ListRolePolicies\\\",\\n\", \" \\\"iam:PassRole\\\",\\n\", \" \\\"s3:CreateBucket\\\",\\n\", \" \\\"s3:Get*\\\",\\n\", \" \\\"s3:List*\\\",\\n\", \" \\\"sdb:BatchPutAttributes\\\",\\n\", \" \\\"sdb:Select\\\",\\n\", \" \\\"sqs:CreateQueue\\\",\\n\", \" \\\"sqs:Delete*\\\",\\n\", \" \\\"sqs:GetQueue*\\\",\\n\", \" \\\"sqs:PurgeQueue\\\",\\n\", \" \\\"sqs:ReceiveMessage\\\"\\n\", \" ]\\n\", \" }]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewRolePolicy(ctx, \"iamEmrProfilePolicy\", \u0026iam.RolePolicyArgs{\n\t\t\tRole: iamEmrProfileRole.ID(),\n\t\t\tPolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [{\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Resource\\\": \\\"*\\\",\\n\", \" \\\"Action\\\": [\\n\", \" \\\"cloudwatch:*\\\",\\n\", \" \\\"dynamodb:*\\\",\\n\", \" \\\"ec2:Describe*\\\",\\n\", \" \\\"elasticmapreduce:Describe*\\\",\\n\", \" \\\"elasticmapreduce:ListBootstrapActions\\\",\\n\", \" \\\"elasticmapreduce:ListClusters\\\",\\n\", \" \\\"elasticmapreduce:ListInstanceGroups\\\",\\n\", \" \\\"elasticmapreduce:ListInstances\\\",\\n\", \" \\\"elasticmapreduce:ListSteps\\\",\\n\", \" \\\"kinesis:CreateStream\\\",\\n\", \" \\\"kinesis:DeleteStream\\\",\\n\", \" \\\"kinesis:DescribeStream\\\",\\n\", \" \\\"kinesis:GetRecords\\\",\\n\", \" \\\"kinesis:GetShardIterator\\\",\\n\", \" \\\"kinesis:MergeShards\\\",\\n\", \" \\\"kinesis:PutRecord\\\",\\n\", \" \\\"kinesis:SplitShard\\\",\\n\", \" \\\"rds:Describe*\\\",\\n\", \" \\\"s3:*\\\",\\n\", \" \\\"sdb:*\\\",\\n\", \" \\\"sns:*\\\",\\n\", \" \\\"sqs:*\\\"\\n\", \" ]\\n\", \" }]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n\n## Import\n\nEMR clusters can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:emr/cluster:Cluster cluster j-123456ABCDEF\n```\n\n Since the API does not return the actual values for Kerberos configurations, environments with those this provider configurations will need to use the [`ignoreChanges`](https://www.pulumi.com/docs/intro/concepts/programming-model/#ignorechanges) available to all this provider resources to prevent perpetual differences, e.g. terraform resource \"aws_emr_cluster\" \"example\" {\n\n # ... other configuration ...\n\n lifecycle {\n\n\n\n ignore_changes = [kerberos_attributes]\n\n } } ", + "description": "Provides an Elastic MapReduce Cluster, a web service that makes it easy to process large amounts of data efficiently. See [Amazon Elastic MapReduce Documentation](https://aws.amazon.com/documentation/elastic-mapreduce/) for more information.\n\nTo configure [Instance Groups](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-instance-group-configuration.html#emr-plan-instance-groups) for [task nodes](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-master-core-task-nodes.html#emr-plan-task), see the `aws.emr.InstanceGroup` resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst cluster = new aws.emr.Cluster(\"cluster\", {\n releaseLabel: \"emr-4.6.0\",\n applications: [\"Spark\"],\n additionalInfo: `{\n \"instanceAwsClientConfiguration\": {\n \"proxyPort\": 8099,\n \"proxyHost\": \"myproxy.example.com\"\n }\n}\n`,\n terminationProtection: false,\n keepJobFlowAliveWhenNoSteps: true,\n ec2Attributes: {\n subnetId: aws_subnet.main.id,\n emrManagedMasterSecurityGroup: aws_security_group.sg.id,\n emrManagedSlaveSecurityGroup: aws_security_group.sg.id,\n instanceProfile: aws_iam_instance_profile.emr_profile.arn,\n },\n masterInstanceGroup: {\n instanceType: \"m4.large\",\n },\n coreInstanceGroup: {\n instanceType: \"c4.large\",\n instanceCount: 1,\n ebsConfigs: [{\n size: \"40\",\n type: \"gp2\",\n volumesPerInstance: 1,\n }],\n bidPrice: \"0.30\",\n autoscalingPolicy: `{\n\"Constraints\": {\n \"MinCapacity\": 1,\n \"MaxCapacity\": 2\n},\n\"Rules\": [\n {\n \"Name\": \"ScaleOutMemoryPercentage\",\n \"Description\": \"Scale out if YARNMemoryAvailablePercentage is less than 15\",\n \"Action\": {\n \"SimpleScalingPolicyConfiguration\": {\n \"AdjustmentType\": \"CHANGE_IN_CAPACITY\",\n \"ScalingAdjustment\": 1,\n \"CoolDown\": 300\n }\n },\n \"Trigger\": {\n \"CloudWatchAlarmDefinition\": {\n \"ComparisonOperator\": \"LESS_THAN\",\n \"EvaluationPeriods\": 1,\n \"MetricName\": \"YARNMemoryAvailablePercentage\",\n \"Namespace\": \"AWS/ElasticMapReduce\",\n \"Period\": 300,\n \"Statistic\": \"AVERAGE\",\n \"Threshold\": 15.0,\n \"Unit\": \"PERCENT\"\n }\n }\n }\n]\n}\n`,\n },\n ebsRootVolumeSize: 100,\n tags: {\n role: \"rolename\",\n env: \"env\",\n },\n bootstrapActions: [{\n path: \"s3://elasticmapreduce/bootstrap-actions/run-if\",\n name: \"runif\",\n args: [\n \"instance.isMaster=true\",\n \"echo running on master node\",\n ],\n }],\n configurationsJson: ` [\n {\n \"Classification\": \"hadoop-env\",\n \"Configurations\": [\n {\n \"Classification\": \"export\",\n \"Properties\": {\n \"JAVA_HOME\": \"/usr/lib/jvm/java-1.8.0\"\n }\n }\n ],\n \"Properties\": {}\n },\n {\n \"Classification\": \"spark-env\",\n \"Configurations\": [\n {\n \"Classification\": \"export\",\n \"Properties\": {\n \"JAVA_HOME\": \"/usr/lib/jvm/java-1.8.0\"\n }\n }\n ],\n \"Properties\": {}\n }\n ]\n`,\n serviceRole: aws_iam_role.iam_emr_service_role.arn,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ncluster = aws.emr.Cluster(\"cluster\",\n release_label=\"emr-4.6.0\",\n applications=[\"Spark\"],\n additional_info=\"\"\"{\n \"instanceAwsClientConfiguration\": {\n \"proxyPort\": 8099,\n \"proxyHost\": \"myproxy.example.com\"\n }\n}\n\"\"\",\n termination_protection=False,\n keep_job_flow_alive_when_no_steps=True,\n ec2_attributes=aws.emr.ClusterEc2AttributesArgs(\n subnet_id=aws_subnet[\"main\"][\"id\"],\n emr_managed_master_security_group=aws_security_group[\"sg\"][\"id\"],\n emr_managed_slave_security_group=aws_security_group[\"sg\"][\"id\"],\n instance_profile=aws_iam_instance_profile[\"emr_profile\"][\"arn\"],\n ),\n master_instance_group=aws.emr.ClusterMasterInstanceGroupArgs(\n instance_type=\"m4.large\",\n ),\n core_instance_group=aws.emr.ClusterCoreInstanceGroupArgs(\n instance_type=\"c4.large\",\n instance_count=1,\n ebs_configs=[aws.emr.ClusterCoreInstanceGroupEbsConfigArgs(\n size=40,\n type=\"gp2\",\n volumes_per_instance=1,\n )],\n bid_price=\"0.30\",\n autoscaling_policy=\"\"\"{\n\"Constraints\": {\n \"MinCapacity\": 1,\n \"MaxCapacity\": 2\n},\n\"Rules\": [\n {\n \"Name\": \"ScaleOutMemoryPercentage\",\n \"Description\": \"Scale out if YARNMemoryAvailablePercentage is less than 15\",\n \"Action\": {\n \"SimpleScalingPolicyConfiguration\": {\n \"AdjustmentType\": \"CHANGE_IN_CAPACITY\",\n \"ScalingAdjustment\": 1,\n \"CoolDown\": 300\n }\n },\n \"Trigger\": {\n \"CloudWatchAlarmDefinition\": {\n \"ComparisonOperator\": \"LESS_THAN\",\n \"EvaluationPeriods\": 1,\n \"MetricName\": \"YARNMemoryAvailablePercentage\",\n \"Namespace\": \"AWS/ElasticMapReduce\",\n \"Period\": 300,\n \"Statistic\": \"AVERAGE\",\n \"Threshold\": 15.0,\n \"Unit\": \"PERCENT\"\n }\n }\n }\n]\n}\n\"\"\",\n ),\n ebs_root_volume_size=100,\n tags={\n \"role\": \"rolename\",\n \"env\": \"env\",\n },\n bootstrap_actions=[aws.emr.ClusterBootstrapActionArgs(\n path=\"s3://elasticmapreduce/bootstrap-actions/run-if\",\n name=\"runif\",\n args=[\n \"instance.isMaster=true\",\n \"echo running on master node\",\n ],\n )],\n configurations_json=\"\"\" [\n {\n \"Classification\": \"hadoop-env\",\n \"Configurations\": [\n {\n \"Classification\": \"export\",\n \"Properties\": {\n \"JAVA_HOME\": \"/usr/lib/jvm/java-1.8.0\"\n }\n }\n ],\n \"Properties\": {}\n },\n {\n \"Classification\": \"spark-env\",\n \"Configurations\": [\n {\n \"Classification\": \"export\",\n \"Properties\": {\n \"JAVA_HOME\": \"/usr/lib/jvm/java-1.8.0\"\n }\n }\n ],\n \"Properties\": {}\n }\n ]\n\"\"\",\n service_role=aws_iam_role[\"iam_emr_service_role\"][\"arn\"])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var cluster = new Aws.Emr.Cluster(\"cluster\", new Aws.Emr.ClusterArgs\n {\n ReleaseLabel = \"emr-4.6.0\",\n Applications = \n {\n \"Spark\",\n },\n AdditionalInfo = @\"{\n \"\"instanceAwsClientConfiguration\"\": {\n \"\"proxyPort\"\": 8099,\n \"\"proxyHost\"\": \"\"myproxy.example.com\"\"\n }\n}\n\",\n TerminationProtection = false,\n KeepJobFlowAliveWhenNoSteps = true,\n Ec2Attributes = new Aws.Emr.Inputs.ClusterEc2AttributesArgs\n {\n SubnetId = aws_subnet.Main.Id,\n EmrManagedMasterSecurityGroup = aws_security_group.Sg.Id,\n EmrManagedSlaveSecurityGroup = aws_security_group.Sg.Id,\n InstanceProfile = aws_iam_instance_profile.Emr_profile.Arn,\n },\n MasterInstanceGroup = new Aws.Emr.Inputs.ClusterMasterInstanceGroupArgs\n {\n InstanceType = \"m4.large\",\n },\n CoreInstanceGroup = new Aws.Emr.Inputs.ClusterCoreInstanceGroupArgs\n {\n InstanceType = \"c4.large\",\n InstanceCount = 1,\n EbsConfigs = \n {\n new Aws.Emr.Inputs.ClusterCoreInstanceGroupEbsConfigArgs\n {\n Size = 40,\n Type = \"gp2\",\n VolumesPerInstance = 1,\n },\n },\n BidPrice = \"0.30\",\n AutoscalingPolicy = @\"{\n\"\"Constraints\"\": {\n \"\"MinCapacity\"\": 1,\n \"\"MaxCapacity\"\": 2\n},\n\"\"Rules\"\": [\n {\n \"\"Name\"\": \"\"ScaleOutMemoryPercentage\"\",\n \"\"Description\"\": \"\"Scale out if YARNMemoryAvailablePercentage is less than 15\"\",\n \"\"Action\"\": {\n \"\"SimpleScalingPolicyConfiguration\"\": {\n \"\"AdjustmentType\"\": \"\"CHANGE_IN_CAPACITY\"\",\n \"\"ScalingAdjustment\"\": 1,\n \"\"CoolDown\"\": 300\n }\n },\n \"\"Trigger\"\": {\n \"\"CloudWatchAlarmDefinition\"\": {\n \"\"ComparisonOperator\"\": \"\"LESS_THAN\"\",\n \"\"EvaluationPeriods\"\": 1,\n \"\"MetricName\"\": \"\"YARNMemoryAvailablePercentage\"\",\n \"\"Namespace\"\": \"\"AWS/ElasticMapReduce\"\",\n \"\"Period\"\": 300,\n \"\"Statistic\"\": \"\"AVERAGE\"\",\n \"\"Threshold\"\": 15.0,\n \"\"Unit\"\": \"\"PERCENT\"\"\n }\n }\n }\n]\n}\n\",\n },\n EbsRootVolumeSize = 100,\n Tags = \n {\n { \"role\", \"rolename\" },\n { \"env\", \"env\" },\n },\n BootstrapActions = \n {\n new Aws.Emr.Inputs.ClusterBootstrapActionArgs\n {\n Path = \"s3://elasticmapreduce/bootstrap-actions/run-if\",\n Name = \"runif\",\n Args = \n {\n \"instance.isMaster=true\",\n \"echo running on master node\",\n },\n },\n },\n ConfigurationsJson = @\" [\n {\n \"\"Classification\"\": \"\"hadoop-env\"\",\n \"\"Configurations\"\": [\n {\n \"\"Classification\"\": \"\"export\"\",\n \"\"Properties\"\": {\n \"\"JAVA_HOME\"\": \"\"/usr/lib/jvm/java-1.8.0\"\"\n }\n }\n ],\n \"\"Properties\"\": {}\n },\n {\n \"\"Classification\"\": \"\"spark-env\"\",\n \"\"Configurations\"\": [\n {\n \"\"Classification\"\": \"\"export\"\",\n \"\"Properties\"\": {\n \"\"JAVA_HOME\"\": \"\"/usr/lib/jvm/java-1.8.0\"\"\n }\n }\n ],\n \"\"Properties\"\": {}\n }\n ]\n\",\n ServiceRole = aws_iam_role.Iam_emr_service_role.Arn,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/emr\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := emr.NewCluster(ctx, \"cluster\", \u0026emr.ClusterArgs{\n\t\t\tReleaseLabel: pulumi.String(\"emr-4.6.0\"),\n\t\t\tApplications: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"Spark\"),\n\t\t\t},\n\t\t\tAdditionalInfo: pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v\", \"{\\n\", \" \\\"instanceAwsClientConfiguration\\\": {\\n\", \" \\\"proxyPort\\\": 8099,\\n\", \" \\\"proxyHost\\\": \\\"myproxy.example.com\\\"\\n\", \" }\\n\", \"}\\n\")),\n\t\t\tTerminationProtection: pulumi.Bool(false),\n\t\t\tKeepJobFlowAliveWhenNoSteps: pulumi.Bool(true),\n\t\t\tEc2Attributes: \u0026emr.ClusterEc2AttributesArgs{\n\t\t\t\tSubnetId: pulumi.Any(aws_subnet.Main.Id),\n\t\t\t\tEmrManagedMasterSecurityGroup: pulumi.Any(aws_security_group.Sg.Id),\n\t\t\t\tEmrManagedSlaveSecurityGroup: pulumi.Any(aws_security_group.Sg.Id),\n\t\t\t\tInstanceProfile: pulumi.Any(aws_iam_instance_profile.Emr_profile.Arn),\n\t\t\t},\n\t\t\tMasterInstanceGroup: \u0026emr.ClusterMasterInstanceGroupArgs{\n\t\t\t\tInstanceType: pulumi.String(\"m4.large\"),\n\t\t\t},\n\t\t\tCoreInstanceGroup: \u0026emr.ClusterCoreInstanceGroupArgs{\n\t\t\t\tInstanceType: pulumi.String(\"c4.large\"),\n\t\t\t\tInstanceCount: pulumi.Int(1),\n\t\t\t\tEbsConfigs: emr.ClusterCoreInstanceGroupEbsConfigArray{\n\t\t\t\t\t\u0026emr.ClusterCoreInstanceGroupEbsConfigArgs{\n\t\t\t\t\t\tSize: pulumi.Int(40),\n\t\t\t\t\t\tType: pulumi.String(\"gp2\"),\n\t\t\t\t\t\tVolumesPerInstance: pulumi.Int(1),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tBidPrice: pulumi.String(\"0.30\"),\n\t\t\t\tAutoscalingPolicy: pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \"\\\"Constraints\\\": {\\n\", \" \\\"MinCapacity\\\": 1,\\n\", \" \\\"MaxCapacity\\\": 2\\n\", \"},\\n\", \"\\\"Rules\\\": [\\n\", \" {\\n\", \" \\\"Name\\\": \\\"ScaleOutMemoryPercentage\\\",\\n\", \" \\\"Description\\\": \\\"Scale out if YARNMemoryAvailablePercentage is less than 15\\\",\\n\", \" \\\"Action\\\": {\\n\", \" \\\"SimpleScalingPolicyConfiguration\\\": {\\n\", \" \\\"AdjustmentType\\\": \\\"CHANGE_IN_CAPACITY\\\",\\n\", \" \\\"ScalingAdjustment\\\": 1,\\n\", \" \\\"CoolDown\\\": 300\\n\", \" }\\n\", \" },\\n\", \" \\\"Trigger\\\": {\\n\", \" \\\"CloudWatchAlarmDefinition\\\": {\\n\", \" \\\"ComparisonOperator\\\": \\\"LESS_THAN\\\",\\n\", \" \\\"EvaluationPeriods\\\": 1,\\n\", \" \\\"MetricName\\\": \\\"YARNMemoryAvailablePercentage\\\",\\n\", \" \\\"Namespace\\\": \\\"AWS/ElasticMapReduce\\\",\\n\", \" \\\"Period\\\": 300,\\n\", \" \\\"Statistic\\\": \\\"AVERAGE\\\",\\n\", \" \\\"Threshold\\\": 15.0,\\n\", \" \\\"Unit\\\": \\\"PERCENT\\\"\\n\", \" }\\n\", \" }\\n\", \" }\\n\", \"]\\n\", \"}\\n\")),\n\t\t\t},\n\t\t\tEbsRootVolumeSize: pulumi.Int(100),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"role\": pulumi.String(\"rolename\"),\n\t\t\t\t\"env\": pulumi.String(\"env\"),\n\t\t\t},\n\t\t\tBootstrapActions: emr.ClusterBootstrapActionArray{\n\t\t\t\t\u0026emr.ClusterBootstrapActionArgs{\n\t\t\t\t\tPath: pulumi.String(\"s3://elasticmapreduce/bootstrap-actions/run-if\"),\n\t\t\t\t\tName: pulumi.String(\"runif\"),\n\t\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"instance.isMaster=true\"),\n\t\t\t\t\t\tpulumi.String(\"echo running on master node\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tConfigurationsJson: pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \" [\\n\", \" {\\n\", \" \\\"Classification\\\": \\\"hadoop-env\\\",\\n\", \" \\\"Configurations\\\": [\\n\", \" {\\n\", \" \\\"Classification\\\": \\\"export\\\",\\n\", \" \\\"Properties\\\": {\\n\", \" \\\"JAVA_HOME\\\": \\\"/usr/lib/jvm/java-1.8.0\\\"\\n\", \" }\\n\", \" }\\n\", \" ],\\n\", \" \\\"Properties\\\": {}\\n\", \" },\\n\", \" {\\n\", \" \\\"Classification\\\": \\\"spark-env\\\",\\n\", \" \\\"Configurations\\\": [\\n\", \" {\\n\", \" \\\"Classification\\\": \\\"export\\\",\\n\", \" \\\"Properties\\\": {\\n\", \" \\\"JAVA_HOME\\\": \\\"/usr/lib/jvm/java-1.8.0\\\"\\n\", \" }\\n\", \" }\\n\", \" ],\\n\", \" \\\"Properties\\\": {}\\n\", \" }\\n\", \" ]\\n\")),\n\t\t\tServiceRole: pulumi.Any(aws_iam_role.Iam_emr_service_role.Arn),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nThe `aws.emr.Cluster` resource typically requires two IAM roles, one for the EMR Cluster to use as a service, and another to place on your Cluster Instances to interact with AWS from those instances. The suggested role policy template for the EMR service is `AmazonElasticMapReduceRole`, and `AmazonElasticMapReduceforEC2Role` for the EC2 profile. See the [Getting Started](https://docs.aws.amazon.com/ElasticMapReduce/latest/ManagementGuide/emr-gs-launch-sample-cluster.html) guide for more information on these IAM roles.\n{{% /example %}}\n{{% example %}}\n### Instance Fleet\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.emr.Cluster(\"example\", {\n masterInstanceFleet: {\n instanceTypeConfigs: [{\n instanceType: \"m4.xlarge\",\n }],\n targetOnDemandCapacity: 1,\n },\n coreInstanceFleet: {\n instanceTypeConfigs: [\n {\n bidPriceAsPercentageOfOnDemandPrice: 80,\n ebsConfigs: [{\n size: 100,\n type: \"gp2\",\n volumesPerInstance: 1,\n }],\n instanceType: \"m3.xlarge\",\n weightedCapacity: 1,\n },\n {\n bidPriceAsPercentageOfOnDemandPrice: 100,\n ebsConfigs: [{\n size: 100,\n type: \"gp2\",\n volumesPerInstance: 1,\n }],\n instanceType: \"m4.xlarge\",\n weightedCapacity: 1,\n },\n {\n bidPriceAsPercentageOfOnDemandPrice: 100,\n ebsConfigs: [{\n size: 100,\n type: \"gp2\",\n volumesPerInstance: 1,\n }],\n instanceType: \"m4.2xlarge\",\n weightedCapacity: 2,\n },\n ],\n launchSpecifications: {\n spotSpecifications: [{\n allocationStrategy: \"capacity-optimized\",\n blockDurationMinutes: 0,\n timeoutAction: \"SWITCH_TO_ON_DEMAND\",\n timeoutDurationMinutes: 10,\n }],\n },\n name: \"core fleet\",\n targetOnDemandCapacity: 2,\n targetSpotCapacity: 2,\n },\n});\nconst task = new aws.emr.InstanceFleet(\"task\", {\n clusterId: example.id,\n instanceTypeConfigs: [\n {\n bidPriceAsPercentageOfOnDemandPrice: 100,\n ebsConfigs: [{\n size: 100,\n type: \"gp2\",\n volumesPerInstance: 1,\n }],\n instanceType: \"m4.xlarge\",\n weightedCapacity: 1,\n },\n {\n bidPriceAsPercentageOfOnDemandPrice: 100,\n ebsConfigs: [{\n size: 100,\n type: \"gp2\",\n volumesPerInstance: 1,\n }],\n instanceType: \"m4.2xlarge\",\n weightedCapacity: 2,\n },\n ],\n launchSpecifications: {\n spotSpecifications: [{\n allocationStrategy: \"capacity-optimized\",\n blockDurationMinutes: 0,\n timeoutAction: \"TERMINATE_CLUSTER\",\n timeoutDurationMinutes: 10,\n }],\n },\n targetOnDemandCapacity: 1,\n targetSpotCapacity: 1,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.emr.Cluster(\"example\",\n master_instance_fleet=aws.emr.ClusterMasterInstanceFleetArgs(\n instance_type_configs=[aws.emr.ClusterMasterInstanceFleetInstanceTypeConfigArgs(\n instance_type=\"m4.xlarge\",\n )],\n target_on_demand_capacity=1,\n ),\n core_instance_fleet=aws.emr.ClusterCoreInstanceFleetArgs(\n instance_type_configs=[\n aws.emr.ClusterCoreInstanceFleetInstanceTypeConfigArgs(\n bid_price_as_percentage_of_on_demand_price=80,\n ebs_configs=[aws.emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs(\n size=100,\n type=\"gp2\",\n volumes_per_instance=1,\n )],\n instance_type=\"m3.xlarge\",\n weighted_capacity=1,\n ),\n aws.emr.ClusterCoreInstanceFleetInstanceTypeConfigArgs(\n bid_price_as_percentage_of_on_demand_price=100,\n ebs_configs=[aws.emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs(\n size=100,\n type=\"gp2\",\n volumes_per_instance=1,\n )],\n instance_type=\"m4.xlarge\",\n weighted_capacity=1,\n ),\n aws.emr.ClusterCoreInstanceFleetInstanceTypeConfigArgs(\n bid_price_as_percentage_of_on_demand_price=100,\n ebs_configs=[aws.emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs(\n size=100,\n type=\"gp2\",\n volumes_per_instance=1,\n )],\n instance_type=\"m4.2xlarge\",\n weighted_capacity=2,\n ),\n ],\n launch_specifications=aws.emr.ClusterCoreInstanceFleetLaunchSpecificationsArgs(\n spot_specifications=[aws.emr.ClusterCoreInstanceFleetLaunchSpecificationsSpotSpecificationArgs(\n allocation_strategy=\"capacity-optimized\",\n block_duration_minutes=0,\n timeout_action=\"SWITCH_TO_ON_DEMAND\",\n timeout_duration_minutes=10,\n )],\n ),\n name=\"core fleet\",\n target_on_demand_capacity=2,\n target_spot_capacity=2,\n ))\ntask = aws.emr.InstanceFleet(\"task\",\n cluster_id=example.id,\n instance_type_configs=[\n aws.emr.InstanceFleetInstanceTypeConfigArgs(\n bid_price_as_percentage_of_on_demand_price=100,\n ebs_configs=[aws.emr.InstanceFleetInstanceTypeConfigEbsConfigArgs(\n size=100,\n type=\"gp2\",\n volumes_per_instance=1,\n )],\n instance_type=\"m4.xlarge\",\n weighted_capacity=1,\n ),\n aws.emr.InstanceFleetInstanceTypeConfigArgs(\n bid_price_as_percentage_of_on_demand_price=100,\n ebs_configs=[aws.emr.InstanceFleetInstanceTypeConfigEbsConfigArgs(\n size=100,\n type=\"gp2\",\n volumes_per_instance=1,\n )],\n instance_type=\"m4.2xlarge\",\n weighted_capacity=2,\n ),\n ],\n launch_specifications=aws.emr.InstanceFleetLaunchSpecificationsArgs(\n spot_specifications=[aws.emr.InstanceFleetLaunchSpecificationsSpotSpecificationArgs(\n allocation_strategy=\"capacity-optimized\",\n block_duration_minutes=0,\n timeout_action=\"TERMINATE_CLUSTER\",\n timeout_duration_minutes=10,\n )],\n ),\n target_on_demand_capacity=1,\n target_spot_capacity=1)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Emr.Cluster(\"example\", new Aws.Emr.ClusterArgs\n {\n MasterInstanceFleet = new Aws.Emr.Inputs.ClusterMasterInstanceFleetArgs\n {\n InstanceTypeConfigs = \n {\n new Aws.Emr.Inputs.ClusterMasterInstanceFleetInstanceTypeConfigArgs\n {\n InstanceType = \"m4.xlarge\",\n },\n },\n TargetOnDemandCapacity = 1,\n },\n CoreInstanceFleet = new Aws.Emr.Inputs.ClusterCoreInstanceFleetArgs\n {\n InstanceTypeConfigs = \n {\n new Aws.Emr.Inputs.ClusterCoreInstanceFleetInstanceTypeConfigArgs\n {\n BidPriceAsPercentageOfOnDemandPrice = 80,\n EbsConfigs = \n {\n new Aws.Emr.Inputs.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs\n {\n Size = 100,\n Type = \"gp2\",\n VolumesPerInstance = 1,\n },\n },\n InstanceType = \"m3.xlarge\",\n WeightedCapacity = 1,\n },\n new Aws.Emr.Inputs.ClusterCoreInstanceFleetInstanceTypeConfigArgs\n {\n BidPriceAsPercentageOfOnDemandPrice = 100,\n EbsConfigs = \n {\n new Aws.Emr.Inputs.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs\n {\n Size = 100,\n Type = \"gp2\",\n VolumesPerInstance = 1,\n },\n },\n InstanceType = \"m4.xlarge\",\n WeightedCapacity = 1,\n },\n new Aws.Emr.Inputs.ClusterCoreInstanceFleetInstanceTypeConfigArgs\n {\n BidPriceAsPercentageOfOnDemandPrice = 100,\n EbsConfigs = \n {\n new Aws.Emr.Inputs.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs\n {\n Size = 100,\n Type = \"gp2\",\n VolumesPerInstance = 1,\n },\n },\n InstanceType = \"m4.2xlarge\",\n WeightedCapacity = 2,\n },\n },\n LaunchSpecifications = new Aws.Emr.Inputs.ClusterCoreInstanceFleetLaunchSpecificationsArgs\n {\n SpotSpecifications = \n {\n new Aws.Emr.Inputs.ClusterCoreInstanceFleetLaunchSpecificationsSpotSpecificationArgs\n {\n AllocationStrategy = \"capacity-optimized\",\n BlockDurationMinutes = 0,\n TimeoutAction = \"SWITCH_TO_ON_DEMAND\",\n TimeoutDurationMinutes = 10,\n },\n },\n },\n Name = \"core fleet\",\n TargetOnDemandCapacity = 2,\n TargetSpotCapacity = 2,\n },\n });\n var task = new Aws.Emr.InstanceFleet(\"task\", new Aws.Emr.InstanceFleetArgs\n {\n ClusterId = example.Id,\n InstanceTypeConfigs = \n {\n new Aws.Emr.Inputs.InstanceFleetInstanceTypeConfigArgs\n {\n BidPriceAsPercentageOfOnDemandPrice = 100,\n EbsConfigs = \n {\n new Aws.Emr.Inputs.InstanceFleetInstanceTypeConfigEbsConfigArgs\n {\n Size = 100,\n Type = \"gp2\",\n VolumesPerInstance = 1,\n },\n },\n InstanceType = \"m4.xlarge\",\n WeightedCapacity = 1,\n },\n new Aws.Emr.Inputs.InstanceFleetInstanceTypeConfigArgs\n {\n BidPriceAsPercentageOfOnDemandPrice = 100,\n EbsConfigs = \n {\n new Aws.Emr.Inputs.InstanceFleetInstanceTypeConfigEbsConfigArgs\n {\n Size = 100,\n Type = \"gp2\",\n VolumesPerInstance = 1,\n },\n },\n InstanceType = \"m4.2xlarge\",\n WeightedCapacity = 2,\n },\n },\n LaunchSpecifications = new Aws.Emr.Inputs.InstanceFleetLaunchSpecificationsArgs\n {\n SpotSpecifications = \n {\n new Aws.Emr.Inputs.InstanceFleetLaunchSpecificationsSpotSpecificationArgs\n {\n AllocationStrategy = \"capacity-optimized\",\n BlockDurationMinutes = 0,\n TimeoutAction = \"TERMINATE_CLUSTER\",\n TimeoutDurationMinutes = 10,\n },\n },\n },\n TargetOnDemandCapacity = 1,\n TargetSpotCapacity = 1,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/emr\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := emr.NewCluster(ctx, \"example\", \u0026emr.ClusterArgs{\n\t\t\tMasterInstanceFleet: \u0026emr.ClusterMasterInstanceFleetArgs{\n\t\t\t\tInstanceTypeConfigs: emr.ClusterMasterInstanceFleetInstanceTypeConfigArray{\n\t\t\t\t\t\u0026emr.ClusterMasterInstanceFleetInstanceTypeConfigArgs{\n\t\t\t\t\t\tInstanceType: pulumi.String(\"m4.xlarge\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tTargetOnDemandCapacity: pulumi.Int(1),\n\t\t\t},\n\t\t\tCoreInstanceFleet: \u0026emr.ClusterCoreInstanceFleetArgs{\n\t\t\t\tInstanceTypeConfigs: emr.ClusterCoreInstanceFleetInstanceTypeConfigArray{\n\t\t\t\t\t\u0026emr.ClusterCoreInstanceFleetInstanceTypeConfigArgs{\n\t\t\t\t\t\tBidPriceAsPercentageOfOnDemandPrice: pulumi.Float64(80),\n\t\t\t\t\t\tEbsConfigs: emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArray{\n\t\t\t\t\t\t\t\u0026emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs{\n\t\t\t\t\t\t\t\tSize: pulumi.Int(100),\n\t\t\t\t\t\t\t\tType: pulumi.String(\"gp2\"),\n\t\t\t\t\t\t\t\tVolumesPerInstance: pulumi.Int(1),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tInstanceType: pulumi.String(\"m3.xlarge\"),\n\t\t\t\t\t\tWeightedCapacity: pulumi.Int(1),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026emr.ClusterCoreInstanceFleetInstanceTypeConfigArgs{\n\t\t\t\t\t\tBidPriceAsPercentageOfOnDemandPrice: pulumi.Float64(100),\n\t\t\t\t\t\tEbsConfigs: emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArray{\n\t\t\t\t\t\t\t\u0026emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs{\n\t\t\t\t\t\t\t\tSize: pulumi.Int(100),\n\t\t\t\t\t\t\t\tType: pulumi.String(\"gp2\"),\n\t\t\t\t\t\t\t\tVolumesPerInstance: pulumi.Int(1),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tInstanceType: pulumi.String(\"m4.xlarge\"),\n\t\t\t\t\t\tWeightedCapacity: pulumi.Int(1),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026emr.ClusterCoreInstanceFleetInstanceTypeConfigArgs{\n\t\t\t\t\t\tBidPriceAsPercentageOfOnDemandPrice: pulumi.Float64(100),\n\t\t\t\t\t\tEbsConfigs: emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArray{\n\t\t\t\t\t\t\t\u0026emr.ClusterCoreInstanceFleetInstanceTypeConfigEbsConfigArgs{\n\t\t\t\t\t\t\t\tSize: pulumi.Int(100),\n\t\t\t\t\t\t\t\tType: pulumi.String(\"gp2\"),\n\t\t\t\t\t\t\t\tVolumesPerInstance: pulumi.Int(1),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tInstanceType: pulumi.String(\"m4.2xlarge\"),\n\t\t\t\t\t\tWeightedCapacity: pulumi.Int(2),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tLaunchSpecifications: \u0026emr.ClusterCoreInstanceFleetLaunchSpecificationsArgs{\n\t\t\t\t\tSpotSpecifications: emr.ClusterCoreInstanceFleetLaunchSpecificationsSpotSpecificationArray{\n\t\t\t\t\t\t\u0026emr.ClusterCoreInstanceFleetLaunchSpecificationsSpotSpecificationArgs{\n\t\t\t\t\t\t\tAllocationStrategy: pulumi.String(\"capacity-optimized\"),\n\t\t\t\t\t\t\tBlockDurationMinutes: pulumi.Int(0),\n\t\t\t\t\t\t\tTimeoutAction: pulumi.String(\"SWITCH_TO_ON_DEMAND\"),\n\t\t\t\t\t\t\tTimeoutDurationMinutes: pulumi.Int(10),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tName: pulumi.String(\"core fleet\"),\n\t\t\t\tTargetOnDemandCapacity: pulumi.Int(2),\n\t\t\t\tTargetSpotCapacity: pulumi.Int(2),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = emr.NewInstanceFleet(ctx, \"task\", \u0026emr.InstanceFleetArgs{\n\t\t\tClusterId: example.ID(),\n\t\t\tInstanceTypeConfigs: emr.InstanceFleetInstanceTypeConfigArray{\n\t\t\t\t\u0026emr.InstanceFleetInstanceTypeConfigArgs{\n\t\t\t\t\tBidPriceAsPercentageOfOnDemandPrice: pulumi.Float64(100),\n\t\t\t\t\tEbsConfigs: emr.InstanceFleetInstanceTypeConfigEbsConfigArray{\n\t\t\t\t\t\t\u0026emr.InstanceFleetInstanceTypeConfigEbsConfigArgs{\n\t\t\t\t\t\t\tSize: pulumi.Int(100),\n\t\t\t\t\t\t\tType: pulumi.String(\"gp2\"),\n\t\t\t\t\t\t\tVolumesPerInstance: pulumi.Int(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tInstanceType: pulumi.String(\"m4.xlarge\"),\n\t\t\t\t\tWeightedCapacity: pulumi.Int(1),\n\t\t\t\t},\n\t\t\t\t\u0026emr.InstanceFleetInstanceTypeConfigArgs{\n\t\t\t\t\tBidPriceAsPercentageOfOnDemandPrice: pulumi.Float64(100),\n\t\t\t\t\tEbsConfigs: emr.InstanceFleetInstanceTypeConfigEbsConfigArray{\n\t\t\t\t\t\t\u0026emr.InstanceFleetInstanceTypeConfigEbsConfigArgs{\n\t\t\t\t\t\t\tSize: pulumi.Int(100),\n\t\t\t\t\t\t\tType: pulumi.String(\"gp2\"),\n\t\t\t\t\t\t\tVolumesPerInstance: pulumi.Int(1),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tInstanceType: pulumi.String(\"m4.2xlarge\"),\n\t\t\t\t\tWeightedCapacity: pulumi.Int(2),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLaunchSpecifications: \u0026emr.InstanceFleetLaunchSpecificationsArgs{\n\t\t\t\tSpotSpecifications: emr.InstanceFleetLaunchSpecificationsSpotSpecificationArray{\n\t\t\t\t\t\u0026emr.InstanceFleetLaunchSpecificationsSpotSpecificationArgs{\n\t\t\t\t\t\tAllocationStrategy: pulumi.String(\"capacity-optimized\"),\n\t\t\t\t\t\tBlockDurationMinutes: pulumi.Int(0),\n\t\t\t\t\t\tTimeoutAction: pulumi.String(\"TERMINATE_CLUSTER\"),\n\t\t\t\t\t\tTimeoutDurationMinutes: pulumi.Int(10),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTargetOnDemandCapacity: pulumi.Int(1),\n\t\t\tTargetSpotCapacity: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Enable Debug Logging\n\n[Debug logging in EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-debugging.html) is implemented as a step. It is highly recommended that you utilize the resource options configuration with `ignoreChanges` if other steps are being managed outside of this provider.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\n// ... other configuration ...\nconst example = new aws.emr.Cluster(\"example\", {steps: [{\n actionOnFailure: \"TERMINATE_CLUSTER\",\n name: \"Setup Hadoop Debugging\",\n hadoopJarStep: [{\n jar: \"command-runner.jar\",\n args: [\"state-pusher-script\"],\n }],\n}]});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\n# ... other configuration ...\nexample = aws.emr.Cluster(\"example\", steps=[aws.emr.ClusterStepArgs(\n action_on_failure=\"TERMINATE_CLUSTER\",\n name=\"Setup Hadoop Debugging\",\n hadoop_jar_step=[{\n \"jar\": \"command-runner.jar\",\n \"args\": [\"state-pusher-script\"],\n }],\n)])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n // ... other configuration ...\n var example = new Aws.Emr.Cluster(\"example\", new Aws.Emr.ClusterArgs\n {\n Steps = \n {\n new Aws.Emr.Inputs.ClusterStepArgs\n {\n ActionOnFailure = \"TERMINATE_CLUSTER\",\n Name = \"Setup Hadoop Debugging\",\n HadoopJarStep = \n {\n \n {\n { \"jar\", \"command-runner.jar\" },\n { \"args\", \n {\n \"state-pusher-script\",\n } },\n },\n },\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/emr\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := emr.NewCluster(ctx, \"example\", \u0026emr.ClusterArgs{\n\t\t\tSteps: emr.ClusterStepArray{\n\t\t\t\t\u0026emr.ClusterStepArgs{\n\t\t\t\t\tActionOnFailure: pulumi.String(\"TERMINATE_CLUSTER\"),\n\t\t\t\t\tName: pulumi.String(\"Setup Hadoop Debugging\"),\n\t\t\t\t\tHadoopJarStep: emr.ClusterStepHadoopJarStepArgs{\n\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\"jar\": \"command-runner.jar\",\n\t\t\t\t\t\t\t\"args\": []string{\n\t\t\t\t\t\t\t\t\"state-pusher-script\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Multiple Node Master Instance Group\n\nAvailable in EMR version 5.23.0 and later, an EMR Cluster can be launched with three master nodes for high availability. Additional information about this functionality and its requirements can be found in the [EMR Management Guide](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-ha.html).\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\n// This configuration is for illustrative purposes and highlights\n// only relevant configurations for working with this functionality.\n// Map public IP on launch must be enabled for public (Internet accessible) subnets\n// ... other configuration ...\nconst exampleSubnet = new aws.ec2.Subnet(\"exampleSubnet\", {mapPublicIpOnLaunch: true});\n// ... other configuration ...\nconst exampleCluster = new aws.emr.Cluster(\"exampleCluster\", {\n releaseLabel: \"emr-5.24.1\",\n terminationProtection: true,\n ec2Attributes: {\n subnetId: exampleSubnet.id,\n },\n masterInstanceGroup: {\n instanceCount: 3,\n },\n coreInstanceGroup: {},\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\n# This configuration is for illustrative purposes and highlights\n# only relevant configurations for working with this functionality.\n# Map public IP on launch must be enabled for public (Internet accessible) subnets\n# ... other configuration ...\nexample_subnet = aws.ec2.Subnet(\"exampleSubnet\", map_public_ip_on_launch=True)\n# ... other configuration ...\nexample_cluster = aws.emr.Cluster(\"exampleCluster\",\n release_label=\"emr-5.24.1\",\n termination_protection=True,\n ec2_attributes=aws.emr.ClusterEc2AttributesArgs(\n subnet_id=example_subnet.id,\n ),\n master_instance_group=aws.emr.ClusterMasterInstanceGroupArgs(\n instance_count=3,\n ),\n core_instance_group=aws.emr.ClusterCoreInstanceGroupArgs())\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n // This configuration is for illustrative purposes and highlights\n // only relevant configurations for working with this functionality.\n // Map public IP on launch must be enabled for public (Internet accessible) subnets\n // ... other configuration ...\n var exampleSubnet = new Aws.Ec2.Subnet(\"exampleSubnet\", new Aws.Ec2.SubnetArgs\n {\n MapPublicIpOnLaunch = true,\n });\n // ... other configuration ...\n var exampleCluster = new Aws.Emr.Cluster(\"exampleCluster\", new Aws.Emr.ClusterArgs\n {\n ReleaseLabel = \"emr-5.24.1\",\n TerminationProtection = true,\n Ec2Attributes = new Aws.Emr.Inputs.ClusterEc2AttributesArgs\n {\n SubnetId = exampleSubnet.Id,\n },\n MasterInstanceGroup = new Aws.Emr.Inputs.ClusterMasterInstanceGroupArgs\n {\n InstanceCount = 3,\n },\n CoreInstanceGroup = ,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/emr\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleSubnet, err := ec2.NewSubnet(ctx, \"exampleSubnet\", \u0026ec2.SubnetArgs{\n\t\t\tMapPublicIpOnLaunch: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = emr.NewCluster(ctx, \"exampleCluster\", \u0026emr.ClusterArgs{\n\t\t\tReleaseLabel: pulumi.String(\"emr-5.24.1\"),\n\t\t\tTerminationProtection: pulumi.Bool(true),\n\t\t\tEc2Attributes: \u0026emr.ClusterEc2AttributesArgs{\n\t\t\t\tSubnetId: exampleSubnet.ID(),\n\t\t\t},\n\t\t\tMasterInstanceGroup: \u0026emr.ClusterMasterInstanceGroupArgs{\n\t\t\t\tInstanceCount: pulumi.Int(3),\n\t\t\t},\n\t\t\tCoreInstanceGroup: nil,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Bootable Cluster\n\n**NOTE:** This configuration demonstrates a minimal configuration needed to boot an example EMR Cluster. It is not meant to display best practices. As with all examples, use at your own risk.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst mainVpc = new aws.ec2.Vpc(\"mainVpc\", {\n cidrBlock: \"168.31.0.0/16\",\n enableDnsHostnames: true,\n tags: {\n name: \"emr_test\",\n },\n});\nconst mainSubnet = new aws.ec2.Subnet(\"mainSubnet\", {\n vpcId: mainVpc.id,\n cidrBlock: \"168.31.0.0/20\",\n tags: {\n name: \"emr_test\",\n },\n});\n// IAM role for EMR Service\nconst iamEmrServiceRole = new aws.iam.Role(\"iamEmrServiceRole\", {assumeRolePolicy: `{\n \"Version\": \"2008-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"\",\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"Service\": \"elasticmapreduce.amazonaws.com\"\n },\n \"Action\": \"sts:AssumeRole\"\n }\n ]\n}\n`});\n// IAM Role for EC2 Instance Profile\nconst iamEmrProfileRole = new aws.iam.Role(\"iamEmrProfileRole\", {assumeRolePolicy: `{\n \"Version\": \"2008-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"\",\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"Service\": \"ec2.amazonaws.com\"\n },\n \"Action\": \"sts:AssumeRole\"\n }\n ]\n}\n`});\nconst emrProfile = new aws.iam.InstanceProfile(\"emrProfile\", {role: iamEmrProfileRole.name});\nconst cluster = new aws.emr.Cluster(\"cluster\", {\n releaseLabel: \"emr-4.6.0\",\n applications: [\"Spark\"],\n ec2Attributes: {\n subnetId: mainSubnet.id,\n emrManagedMasterSecurityGroup: aws_security_group.allow_all.id,\n emrManagedSlaveSecurityGroup: aws_security_group.allow_all.id,\n instanceProfile: emrProfile.arn,\n },\n masterInstanceGroup: {\n instanceType: \"m5.xlarge\",\n },\n coreInstanceGroup: {\n instanceCount: 1,\n instanceType: \"m5.xlarge\",\n },\n tags: {\n role: \"rolename\",\n dns_zone: \"env_zone\",\n env: \"env\",\n name: \"name-env\",\n },\n bootstrapActions: [{\n path: \"s3://elasticmapreduce/bootstrap-actions/run-if\",\n name: \"runif\",\n args: [\n \"instance.isMaster=true\",\n \"echo running on master node\",\n ],\n }],\n configurationsJson: ` [\n {\n \"Classification\": \"hadoop-env\",\n \"Configurations\": [\n {\n \"Classification\": \"export\",\n \"Properties\": {\n \"JAVA_HOME\": \"/usr/lib/jvm/java-1.8.0\"\n }\n }\n ],\n \"Properties\": {}\n },\n {\n \"Classification\": \"spark-env\",\n \"Configurations\": [\n {\n \"Classification\": \"export\",\n \"Properties\": {\n \"JAVA_HOME\": \"/usr/lib/jvm/java-1.8.0\"\n }\n }\n ],\n \"Properties\": {}\n }\n ]\n`,\n serviceRole: iamEmrServiceRole.arn,\n});\nconst allowAccess = new aws.ec2.SecurityGroup(\"allowAccess\", {\n description: \"Allow inbound traffic\",\n vpcId: mainVpc.id,\n ingress: [{\n fromPort: 0,\n toPort: 0,\n protocol: \"-1\",\n cidrBlocks: mainVpc.cidrBlock,\n }],\n egress: [{\n fromPort: 0,\n toPort: 0,\n protocol: \"-1\",\n cidrBlocks: [\"0.0.0.0/0\"],\n }],\n tags: {\n name: \"emr_test\",\n },\n}, {\n dependsOn: [mainSubnet],\n});\nconst gw = new aws.ec2.InternetGateway(\"gw\", {vpcId: mainVpc.id});\nconst routeTable = new aws.ec2.RouteTable(\"routeTable\", {\n vpcId: mainVpc.id,\n routes: [{\n cidrBlock: \"0.0.0.0/0\",\n gatewayId: gw.id,\n }],\n});\nconst mainRouteTableAssociation = new aws.ec2.MainRouteTableAssociation(\"mainRouteTableAssociation\", {\n vpcId: mainVpc.id,\n routeTableId: routeTable.id,\n});\n//##\nconst iamEmrServicePolicy = new aws.iam.RolePolicy(\"iamEmrServicePolicy\", {\n role: iamEmrServiceRole.id,\n policy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Resource\": \"*\",\n \"Action\": [\n \"ec2:AuthorizeSecurityGroupEgress\",\n \"ec2:AuthorizeSecurityGroupIngress\",\n \"ec2:CancelSpotInstanceRequests\",\n \"ec2:CreateNetworkInterface\",\n \"ec2:CreateSecurityGroup\",\n \"ec2:CreateTags\",\n \"ec2:DeleteNetworkInterface\",\n \"ec2:DeleteSecurityGroup\",\n \"ec2:DeleteTags\",\n \"ec2:DescribeAvailabilityZones\",\n \"ec2:DescribeAccountAttributes\",\n \"ec2:DescribeDhcpOptions\",\n \"ec2:DescribeInstanceStatus\",\n \"ec2:DescribeInstances\",\n \"ec2:DescribeKeyPairs\",\n \"ec2:DescribeNetworkAcls\",\n \"ec2:DescribeNetworkInterfaces\",\n \"ec2:DescribePrefixLists\",\n \"ec2:DescribeRouteTables\",\n \"ec2:DescribeSecurityGroups\",\n \"ec2:DescribeSpotInstanceRequests\",\n \"ec2:DescribeSpotPriceHistory\",\n \"ec2:DescribeSubnets\",\n \"ec2:DescribeVpcAttribute\",\n \"ec2:DescribeVpcEndpoints\",\n \"ec2:DescribeVpcEndpointServices\",\n \"ec2:DescribeVpcs\",\n \"ec2:DetachNetworkInterface\",\n \"ec2:ModifyImageAttribute\",\n \"ec2:ModifyInstanceAttribute\",\n \"ec2:RequestSpotInstances\",\n \"ec2:RevokeSecurityGroupEgress\",\n \"ec2:RunInstances\",\n \"ec2:TerminateInstances\",\n \"ec2:DeleteVolume\",\n \"ec2:DescribeVolumeStatus\",\n \"ec2:DescribeVolumes\",\n \"ec2:DetachVolume\",\n \"iam:GetRole\",\n \"iam:GetRolePolicy\",\n \"iam:ListInstanceProfiles\",\n \"iam:ListRolePolicies\",\n \"iam:PassRole\",\n \"s3:CreateBucket\",\n \"s3:Get*\",\n \"s3:List*\",\n \"sdb:BatchPutAttributes\",\n \"sdb:Select\",\n \"sqs:CreateQueue\",\n \"sqs:Delete*\",\n \"sqs:GetQueue*\",\n \"sqs:PurgeQueue\",\n \"sqs:ReceiveMessage\"\n ]\n }]\n}\n`,\n});\nconst iamEmrProfilePolicy = new aws.iam.RolePolicy(\"iamEmrProfilePolicy\", {\n role: iamEmrProfileRole.id,\n policy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Resource\": \"*\",\n \"Action\": [\n \"cloudwatch:*\",\n \"dynamodb:*\",\n \"ec2:Describe*\",\n \"elasticmapreduce:Describe*\",\n \"elasticmapreduce:ListBootstrapActions\",\n \"elasticmapreduce:ListClusters\",\n \"elasticmapreduce:ListInstanceGroups\",\n \"elasticmapreduce:ListInstances\",\n \"elasticmapreduce:ListSteps\",\n \"kinesis:CreateStream\",\n \"kinesis:DeleteStream\",\n \"kinesis:DescribeStream\",\n \"kinesis:GetRecords\",\n \"kinesis:GetShardIterator\",\n \"kinesis:MergeShards\",\n \"kinesis:PutRecord\",\n \"kinesis:SplitShard\",\n \"rds:Describe*\",\n \"s3:*\",\n \"sdb:*\",\n \"sns:*\",\n \"sqs:*\"\n ]\n }]\n}\n`,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nmain_vpc = aws.ec2.Vpc(\"mainVpc\",\n cidr_block=\"168.31.0.0/16\",\n enable_dns_hostnames=True,\n tags={\n \"name\": \"emr_test\",\n })\nmain_subnet = aws.ec2.Subnet(\"mainSubnet\",\n vpc_id=main_vpc.id,\n cidr_block=\"168.31.0.0/20\",\n tags={\n \"name\": \"emr_test\",\n })\n# IAM role for EMR Service\niam_emr_service_role = aws.iam.Role(\"iamEmrServiceRole\", assume_role_policy=\"\"\"{\n \"Version\": \"2008-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"\",\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"Service\": \"elasticmapreduce.amazonaws.com\"\n },\n \"Action\": \"sts:AssumeRole\"\n }\n ]\n}\n\"\"\")\n# IAM Role for EC2 Instance Profile\niam_emr_profile_role = aws.iam.Role(\"iamEmrProfileRole\", assume_role_policy=\"\"\"{\n \"Version\": \"2008-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"\",\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"Service\": \"ec2.amazonaws.com\"\n },\n \"Action\": \"sts:AssumeRole\"\n }\n ]\n}\n\"\"\")\nemr_profile = aws.iam.InstanceProfile(\"emrProfile\", role=iam_emr_profile_role.name)\ncluster = aws.emr.Cluster(\"cluster\",\n release_label=\"emr-4.6.0\",\n applications=[\"Spark\"],\n ec2_attributes=aws.emr.ClusterEc2AttributesArgs(\n subnet_id=main_subnet.id,\n emr_managed_master_security_group=aws_security_group[\"allow_all\"][\"id\"],\n emr_managed_slave_security_group=aws_security_group[\"allow_all\"][\"id\"],\n instance_profile=emr_profile.arn,\n ),\n master_instance_group=aws.emr.ClusterMasterInstanceGroupArgs(\n instance_type=\"m5.xlarge\",\n ),\n core_instance_group=aws.emr.ClusterCoreInstanceGroupArgs(\n instance_count=1,\n instance_type=\"m5.xlarge\",\n ),\n tags={\n \"role\": \"rolename\",\n \"dns_zone\": \"env_zone\",\n \"env\": \"env\",\n \"name\": \"name-env\",\n },\n bootstrap_actions=[aws.emr.ClusterBootstrapActionArgs(\n path=\"s3://elasticmapreduce/bootstrap-actions/run-if\",\n name=\"runif\",\n args=[\n \"instance.isMaster=true\",\n \"echo running on master node\",\n ],\n )],\n configurations_json=\"\"\" [\n {\n \"Classification\": \"hadoop-env\",\n \"Configurations\": [\n {\n \"Classification\": \"export\",\n \"Properties\": {\n \"JAVA_HOME\": \"/usr/lib/jvm/java-1.8.0\"\n }\n }\n ],\n \"Properties\": {}\n },\n {\n \"Classification\": \"spark-env\",\n \"Configurations\": [\n {\n \"Classification\": \"export\",\n \"Properties\": {\n \"JAVA_HOME\": \"/usr/lib/jvm/java-1.8.0\"\n }\n }\n ],\n \"Properties\": {}\n }\n ]\n\"\"\",\n service_role=iam_emr_service_role.arn)\nallow_access = aws.ec2.SecurityGroup(\"allowAccess\",\n description=\"Allow inbound traffic\",\n vpc_id=main_vpc.id,\n ingress=[aws.ec2.SecurityGroupIngressArgs(\n from_port=0,\n to_port=0,\n protocol=\"-1\",\n cidr_blocks=main_vpc.cidr_block,\n )],\n egress=[aws.ec2.SecurityGroupEgressArgs(\n from_port=0,\n to_port=0,\n protocol=\"-1\",\n cidr_blocks=[\"0.0.0.0/0\"],\n )],\n tags={\n \"name\": \"emr_test\",\n },\n opts=pulumi.ResourceOptions(depends_on=[main_subnet]))\ngw = aws.ec2.InternetGateway(\"gw\", vpc_id=main_vpc.id)\nroute_table = aws.ec2.RouteTable(\"routeTable\",\n vpc_id=main_vpc.id,\n routes=[aws.ec2.RouteTableRouteArgs(\n cidr_block=\"0.0.0.0/0\",\n gateway_id=gw.id,\n )])\nmain_route_table_association = aws.ec2.MainRouteTableAssociation(\"mainRouteTableAssociation\",\n vpc_id=main_vpc.id,\n route_table_id=route_table.id)\n###\niam_emr_service_policy = aws.iam.RolePolicy(\"iamEmrServicePolicy\",\n role=iam_emr_service_role.id,\n policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Resource\": \"*\",\n \"Action\": [\n \"ec2:AuthorizeSecurityGroupEgress\",\n \"ec2:AuthorizeSecurityGroupIngress\",\n \"ec2:CancelSpotInstanceRequests\",\n \"ec2:CreateNetworkInterface\",\n \"ec2:CreateSecurityGroup\",\n \"ec2:CreateTags\",\n \"ec2:DeleteNetworkInterface\",\n \"ec2:DeleteSecurityGroup\",\n \"ec2:DeleteTags\",\n \"ec2:DescribeAvailabilityZones\",\n \"ec2:DescribeAccountAttributes\",\n \"ec2:DescribeDhcpOptions\",\n \"ec2:DescribeInstanceStatus\",\n \"ec2:DescribeInstances\",\n \"ec2:DescribeKeyPairs\",\n \"ec2:DescribeNetworkAcls\",\n \"ec2:DescribeNetworkInterfaces\",\n \"ec2:DescribePrefixLists\",\n \"ec2:DescribeRouteTables\",\n \"ec2:DescribeSecurityGroups\",\n \"ec2:DescribeSpotInstanceRequests\",\n \"ec2:DescribeSpotPriceHistory\",\n \"ec2:DescribeSubnets\",\n \"ec2:DescribeVpcAttribute\",\n \"ec2:DescribeVpcEndpoints\",\n \"ec2:DescribeVpcEndpointServices\",\n \"ec2:DescribeVpcs\",\n \"ec2:DetachNetworkInterface\",\n \"ec2:ModifyImageAttribute\",\n \"ec2:ModifyInstanceAttribute\",\n \"ec2:RequestSpotInstances\",\n \"ec2:RevokeSecurityGroupEgress\",\n \"ec2:RunInstances\",\n \"ec2:TerminateInstances\",\n \"ec2:DeleteVolume\",\n \"ec2:DescribeVolumeStatus\",\n \"ec2:DescribeVolumes\",\n \"ec2:DetachVolume\",\n \"iam:GetRole\",\n \"iam:GetRolePolicy\",\n \"iam:ListInstanceProfiles\",\n \"iam:ListRolePolicies\",\n \"iam:PassRole\",\n \"s3:CreateBucket\",\n \"s3:Get*\",\n \"s3:List*\",\n \"sdb:BatchPutAttributes\",\n \"sdb:Select\",\n \"sqs:CreateQueue\",\n \"sqs:Delete*\",\n \"sqs:GetQueue*\",\n \"sqs:PurgeQueue\",\n \"sqs:ReceiveMessage\"\n ]\n }]\n}\n\"\"\")\niam_emr_profile_policy = aws.iam.RolePolicy(\"iamEmrProfilePolicy\",\n role=iam_emr_profile_role.id,\n policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Resource\": \"*\",\n \"Action\": [\n \"cloudwatch:*\",\n \"dynamodb:*\",\n \"ec2:Describe*\",\n \"elasticmapreduce:Describe*\",\n \"elasticmapreduce:ListBootstrapActions\",\n \"elasticmapreduce:ListClusters\",\n \"elasticmapreduce:ListInstanceGroups\",\n \"elasticmapreduce:ListInstances\",\n \"elasticmapreduce:ListSteps\",\n \"kinesis:CreateStream\",\n \"kinesis:DeleteStream\",\n \"kinesis:DescribeStream\",\n \"kinesis:GetRecords\",\n \"kinesis:GetShardIterator\",\n \"kinesis:MergeShards\",\n \"kinesis:PutRecord\",\n \"kinesis:SplitShard\",\n \"rds:Describe*\",\n \"s3:*\",\n \"sdb:*\",\n \"sns:*\",\n \"sqs:*\"\n ]\n }]\n}\n\"\"\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var mainVpc = new Aws.Ec2.Vpc(\"mainVpc\", new Aws.Ec2.VpcArgs\n {\n CidrBlock = \"168.31.0.0/16\",\n EnableDnsHostnames = true,\n Tags = \n {\n { \"name\", \"emr_test\" },\n },\n });\n var mainSubnet = new Aws.Ec2.Subnet(\"mainSubnet\", new Aws.Ec2.SubnetArgs\n {\n VpcId = mainVpc.Id,\n CidrBlock = \"168.31.0.0/20\",\n Tags = \n {\n { \"name\", \"emr_test\" },\n },\n });\n // IAM role for EMR Service\n var iamEmrServiceRole = new Aws.Iam.Role(\"iamEmrServiceRole\", new Aws.Iam.RoleArgs\n {\n AssumeRolePolicy = @\"{\n \"\"Version\"\": \"\"2008-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Sid\"\": \"\"\"\",\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Principal\"\": {\n \"\"Service\"\": \"\"elasticmapreduce.amazonaws.com\"\"\n },\n \"\"Action\"\": \"\"sts:AssumeRole\"\"\n }\n ]\n}\n\",\n });\n // IAM Role for EC2 Instance Profile\n var iamEmrProfileRole = new Aws.Iam.Role(\"iamEmrProfileRole\", new Aws.Iam.RoleArgs\n {\n AssumeRolePolicy = @\"{\n \"\"Version\"\": \"\"2008-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Sid\"\": \"\"\"\",\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Principal\"\": {\n \"\"Service\"\": \"\"ec2.amazonaws.com\"\"\n },\n \"\"Action\"\": \"\"sts:AssumeRole\"\"\n }\n ]\n}\n\",\n });\n var emrProfile = new Aws.Iam.InstanceProfile(\"emrProfile\", new Aws.Iam.InstanceProfileArgs\n {\n Role = iamEmrProfileRole.Name,\n });\n var cluster = new Aws.Emr.Cluster(\"cluster\", new Aws.Emr.ClusterArgs\n {\n ReleaseLabel = \"emr-4.6.0\",\n Applications = \n {\n \"Spark\",\n },\n Ec2Attributes = new Aws.Emr.Inputs.ClusterEc2AttributesArgs\n {\n SubnetId = mainSubnet.Id,\n EmrManagedMasterSecurityGroup = aws_security_group.Allow_all.Id,\n EmrManagedSlaveSecurityGroup = aws_security_group.Allow_all.Id,\n InstanceProfile = emrProfile.Arn,\n },\n MasterInstanceGroup = new Aws.Emr.Inputs.ClusterMasterInstanceGroupArgs\n {\n InstanceType = \"m5.xlarge\",\n },\n CoreInstanceGroup = new Aws.Emr.Inputs.ClusterCoreInstanceGroupArgs\n {\n InstanceCount = 1,\n InstanceType = \"m5.xlarge\",\n },\n Tags = \n {\n { \"role\", \"rolename\" },\n { \"dns_zone\", \"env_zone\" },\n { \"env\", \"env\" },\n { \"name\", \"name-env\" },\n },\n BootstrapActions = \n {\n new Aws.Emr.Inputs.ClusterBootstrapActionArgs\n {\n Path = \"s3://elasticmapreduce/bootstrap-actions/run-if\",\n Name = \"runif\",\n Args = \n {\n \"instance.isMaster=true\",\n \"echo running on master node\",\n },\n },\n },\n ConfigurationsJson = @\" [\n {\n \"\"Classification\"\": \"\"hadoop-env\"\",\n \"\"Configurations\"\": [\n {\n \"\"Classification\"\": \"\"export\"\",\n \"\"Properties\"\": {\n \"\"JAVA_HOME\"\": \"\"/usr/lib/jvm/java-1.8.0\"\"\n }\n }\n ],\n \"\"Properties\"\": {}\n },\n {\n \"\"Classification\"\": \"\"spark-env\"\",\n \"\"Configurations\"\": [\n {\n \"\"Classification\"\": \"\"export\"\",\n \"\"Properties\"\": {\n \"\"JAVA_HOME\"\": \"\"/usr/lib/jvm/java-1.8.0\"\"\n }\n }\n ],\n \"\"Properties\"\": {}\n }\n ]\n\",\n ServiceRole = iamEmrServiceRole.Arn,\n });\n var allowAccess = new Aws.Ec2.SecurityGroup(\"allowAccess\", new Aws.Ec2.SecurityGroupArgs\n {\n Description = \"Allow inbound traffic\",\n VpcId = mainVpc.Id,\n Ingress = \n {\n new Aws.Ec2.Inputs.SecurityGroupIngressArgs\n {\n FromPort = 0,\n ToPort = 0,\n Protocol = \"-1\",\n CidrBlocks = mainVpc.CidrBlock,\n },\n },\n Egress = \n {\n new Aws.Ec2.Inputs.SecurityGroupEgressArgs\n {\n FromPort = 0,\n ToPort = 0,\n Protocol = \"-1\",\n CidrBlocks = \n {\n \"0.0.0.0/0\",\n },\n },\n },\n Tags = \n {\n { \"name\", \"emr_test\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n mainSubnet,\n },\n });\n var gw = new Aws.Ec2.InternetGateway(\"gw\", new Aws.Ec2.InternetGatewayArgs\n {\n VpcId = mainVpc.Id,\n });\n var routeTable = new Aws.Ec2.RouteTable(\"routeTable\", new Aws.Ec2.RouteTableArgs\n {\n VpcId = mainVpc.Id,\n Routes = \n {\n new Aws.Ec2.Inputs.RouteTableRouteArgs\n {\n CidrBlock = \"0.0.0.0/0\",\n GatewayId = gw.Id,\n },\n },\n });\n var mainRouteTableAssociation = new Aws.Ec2.MainRouteTableAssociation(\"mainRouteTableAssociation\", new Aws.Ec2.MainRouteTableAssociationArgs\n {\n VpcId = mainVpc.Id,\n RouteTableId = routeTable.Id,\n });\n //##\n var iamEmrServicePolicy = new Aws.Iam.RolePolicy(\"iamEmrServicePolicy\", new Aws.Iam.RolePolicyArgs\n {\n Role = iamEmrServiceRole.Id,\n Policy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [{\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Resource\"\": \"\"*\"\",\n \"\"Action\"\": [\n \"\"ec2:AuthorizeSecurityGroupEgress\"\",\n \"\"ec2:AuthorizeSecurityGroupIngress\"\",\n \"\"ec2:CancelSpotInstanceRequests\"\",\n \"\"ec2:CreateNetworkInterface\"\",\n \"\"ec2:CreateSecurityGroup\"\",\n \"\"ec2:CreateTags\"\",\n \"\"ec2:DeleteNetworkInterface\"\",\n \"\"ec2:DeleteSecurityGroup\"\",\n \"\"ec2:DeleteTags\"\",\n \"\"ec2:DescribeAvailabilityZones\"\",\n \"\"ec2:DescribeAccountAttributes\"\",\n \"\"ec2:DescribeDhcpOptions\"\",\n \"\"ec2:DescribeInstanceStatus\"\",\n \"\"ec2:DescribeInstances\"\",\n \"\"ec2:DescribeKeyPairs\"\",\n \"\"ec2:DescribeNetworkAcls\"\",\n \"\"ec2:DescribeNetworkInterfaces\"\",\n \"\"ec2:DescribePrefixLists\"\",\n \"\"ec2:DescribeRouteTables\"\",\n \"\"ec2:DescribeSecurityGroups\"\",\n \"\"ec2:DescribeSpotInstanceRequests\"\",\n \"\"ec2:DescribeSpotPriceHistory\"\",\n \"\"ec2:DescribeSubnets\"\",\n \"\"ec2:DescribeVpcAttribute\"\",\n \"\"ec2:DescribeVpcEndpoints\"\",\n \"\"ec2:DescribeVpcEndpointServices\"\",\n \"\"ec2:DescribeVpcs\"\",\n \"\"ec2:DetachNetworkInterface\"\",\n \"\"ec2:ModifyImageAttribute\"\",\n \"\"ec2:ModifyInstanceAttribute\"\",\n \"\"ec2:RequestSpotInstances\"\",\n \"\"ec2:RevokeSecurityGroupEgress\"\",\n \"\"ec2:RunInstances\"\",\n \"\"ec2:TerminateInstances\"\",\n \"\"ec2:DeleteVolume\"\",\n \"\"ec2:DescribeVolumeStatus\"\",\n \"\"ec2:DescribeVolumes\"\",\n \"\"ec2:DetachVolume\"\",\n \"\"iam:GetRole\"\",\n \"\"iam:GetRolePolicy\"\",\n \"\"iam:ListInstanceProfiles\"\",\n \"\"iam:ListRolePolicies\"\",\n \"\"iam:PassRole\"\",\n \"\"s3:CreateBucket\"\",\n \"\"s3:Get*\"\",\n \"\"s3:List*\"\",\n \"\"sdb:BatchPutAttributes\"\",\n \"\"sdb:Select\"\",\n \"\"sqs:CreateQueue\"\",\n \"\"sqs:Delete*\"\",\n \"\"sqs:GetQueue*\"\",\n \"\"sqs:PurgeQueue\"\",\n \"\"sqs:ReceiveMessage\"\"\n ]\n }]\n}\n\",\n });\n var iamEmrProfilePolicy = new Aws.Iam.RolePolicy(\"iamEmrProfilePolicy\", new Aws.Iam.RolePolicyArgs\n {\n Role = iamEmrProfileRole.Id,\n Policy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [{\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Resource\"\": \"\"*\"\",\n \"\"Action\"\": [\n \"\"cloudwatch:*\"\",\n \"\"dynamodb:*\"\",\n \"\"ec2:Describe*\"\",\n \"\"elasticmapreduce:Describe*\"\",\n \"\"elasticmapreduce:ListBootstrapActions\"\",\n \"\"elasticmapreduce:ListClusters\"\",\n \"\"elasticmapreduce:ListInstanceGroups\"\",\n \"\"elasticmapreduce:ListInstances\"\",\n \"\"elasticmapreduce:ListSteps\"\",\n \"\"kinesis:CreateStream\"\",\n \"\"kinesis:DeleteStream\"\",\n \"\"kinesis:DescribeStream\"\",\n \"\"kinesis:GetRecords\"\",\n \"\"kinesis:GetShardIterator\"\",\n \"\"kinesis:MergeShards\"\",\n \"\"kinesis:PutRecord\"\",\n \"\"kinesis:SplitShard\"\",\n \"\"rds:Describe*\"\",\n \"\"s3:*\"\",\n \"\"sdb:*\"\",\n \"\"sns:*\"\",\n \"\"sqs:*\"\"\n ]\n }]\n}\n\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/emr\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmainVpc, err := ec2.NewVpc(ctx, \"mainVpc\", \u0026ec2.VpcArgs{\n\t\t\tCidrBlock: pulumi.String(\"168.31.0.0/16\"),\n\t\t\tEnableDnsHostnames: pulumi.Bool(true),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"name\": pulumi.String(\"emr_test\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmainSubnet, err := ec2.NewSubnet(ctx, \"mainSubnet\", \u0026ec2.SubnetArgs{\n\t\t\tVpcId: mainVpc.ID(),\n\t\t\tCidrBlock: pulumi.String(\"168.31.0.0/20\"),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"name\": pulumi.String(\"emr_test\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tiamEmrServiceRole, err := iam.NewRole(ctx, \"iamEmrServiceRole\", \u0026iam.RoleArgs{\n\t\t\tAssumeRolePolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2008-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Sid\\\": \\\"\\\",\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Principal\\\": {\\n\", \" \\\"Service\\\": \\\"elasticmapreduce.amazonaws.com\\\"\\n\", \" },\\n\", \" \\\"Action\\\": \\\"sts:AssumeRole\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tiamEmrProfileRole, err := iam.NewRole(ctx, \"iamEmrProfileRole\", \u0026iam.RoleArgs{\n\t\t\tAssumeRolePolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2008-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Sid\\\": \\\"\\\",\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Principal\\\": {\\n\", \" \\\"Service\\\": \\\"ec2.amazonaws.com\\\"\\n\", \" },\\n\", \" \\\"Action\\\": \\\"sts:AssumeRole\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\temrProfile, err := iam.NewInstanceProfile(ctx, \"emrProfile\", \u0026iam.InstanceProfileArgs{\n\t\t\tRole: iamEmrProfileRole.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = emr.NewCluster(ctx, \"cluster\", \u0026emr.ClusterArgs{\n\t\t\tReleaseLabel: pulumi.String(\"emr-4.6.0\"),\n\t\t\tApplications: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"Spark\"),\n\t\t\t},\n\t\t\tEc2Attributes: \u0026emr.ClusterEc2AttributesArgs{\n\t\t\t\tSubnetId: mainSubnet.ID(),\n\t\t\t\tEmrManagedMasterSecurityGroup: pulumi.Any(aws_security_group.Allow_all.Id),\n\t\t\t\tEmrManagedSlaveSecurityGroup: pulumi.Any(aws_security_group.Allow_all.Id),\n\t\t\t\tInstanceProfile: emrProfile.Arn,\n\t\t\t},\n\t\t\tMasterInstanceGroup: \u0026emr.ClusterMasterInstanceGroupArgs{\n\t\t\t\tInstanceType: pulumi.String(\"m5.xlarge\"),\n\t\t\t},\n\t\t\tCoreInstanceGroup: \u0026emr.ClusterCoreInstanceGroupArgs{\n\t\t\t\tInstanceCount: pulumi.Int(1),\n\t\t\t\tInstanceType: pulumi.String(\"m5.xlarge\"),\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"role\": pulumi.String(\"rolename\"),\n\t\t\t\t\"dns_zone\": pulumi.String(\"env_zone\"),\n\t\t\t\t\"env\": pulumi.String(\"env\"),\n\t\t\t\t\"name\": pulumi.String(\"name-env\"),\n\t\t\t},\n\t\t\tBootstrapActions: emr.ClusterBootstrapActionArray{\n\t\t\t\t\u0026emr.ClusterBootstrapActionArgs{\n\t\t\t\t\tPath: pulumi.String(\"s3://elasticmapreduce/bootstrap-actions/run-if\"),\n\t\t\t\t\tName: pulumi.String(\"runif\"),\n\t\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"instance.isMaster=true\"),\n\t\t\t\t\t\tpulumi.String(\"echo running on master node\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tConfigurationsJson: pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \" [\\n\", \" {\\n\", \" \\\"Classification\\\": \\\"hadoop-env\\\",\\n\", \" \\\"Configurations\\\": [\\n\", \" {\\n\", \" \\\"Classification\\\": \\\"export\\\",\\n\", \" \\\"Properties\\\": {\\n\", \" \\\"JAVA_HOME\\\": \\\"/usr/lib/jvm/java-1.8.0\\\"\\n\", \" }\\n\", \" }\\n\", \" ],\\n\", \" \\\"Properties\\\": {}\\n\", \" },\\n\", \" {\\n\", \" \\\"Classification\\\": \\\"spark-env\\\",\\n\", \" \\\"Configurations\\\": [\\n\", \" {\\n\", \" \\\"Classification\\\": \\\"export\\\",\\n\", \" \\\"Properties\\\": {\\n\", \" \\\"JAVA_HOME\\\": \\\"/usr/lib/jvm/java-1.8.0\\\"\\n\", \" }\\n\", \" }\\n\", \" ],\\n\", \" \\\"Properties\\\": {}\\n\", \" }\\n\", \" ]\\n\")),\n\t\t\tServiceRole: iamEmrServiceRole.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ec2.NewSecurityGroup(ctx, \"allowAccess\", \u0026ec2.SecurityGroupArgs{\n\t\t\tDescription: pulumi.String(\"Allow inbound traffic\"),\n\t\t\tVpcId: mainVpc.ID(),\n\t\t\tIngress: ec2.SecurityGroupIngressArray{\n\t\t\t\t\u0026ec2.SecurityGroupIngressArgs{\n\t\t\t\t\tFromPort: pulumi.Int(0),\n\t\t\t\t\tToPort: pulumi.Int(0),\n\t\t\t\t\tProtocol: pulumi.String(\"-1\"),\n\t\t\t\t\tCidrBlocks: mainVpc.CidrBlock,\n\t\t\t\t},\n\t\t\t},\n\t\t\tEgress: ec2.SecurityGroupEgressArray{\n\t\t\t\t\u0026ec2.SecurityGroupEgressArgs{\n\t\t\t\t\tFromPort: pulumi.Int(0),\n\t\t\t\t\tToPort: pulumi.Int(0),\n\t\t\t\t\tProtocol: pulumi.String(\"-1\"),\n\t\t\t\t\tCidrBlocks: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"0.0.0.0/0\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"name\": pulumi.String(\"emr_test\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tmainSubnet,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tgw, err := ec2.NewInternetGateway(ctx, \"gw\", \u0026ec2.InternetGatewayArgs{\n\t\t\tVpcId: mainVpc.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouteTable, err := ec2.NewRouteTable(ctx, \"routeTable\", \u0026ec2.RouteTableArgs{\n\t\t\tVpcId: mainVpc.ID(),\n\t\t\tRoutes: ec2.RouteTableRouteArray{\n\t\t\t\t\u0026ec2.RouteTableRouteArgs{\n\t\t\t\t\tCidrBlock: pulumi.String(\"0.0.0.0/0\"),\n\t\t\t\t\tGatewayId: gw.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ec2.NewMainRouteTableAssociation(ctx, \"mainRouteTableAssociation\", \u0026ec2.MainRouteTableAssociationArgs{\n\t\t\tVpcId: mainVpc.ID(),\n\t\t\tRouteTableId: routeTable.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewRolePolicy(ctx, \"iamEmrServicePolicy\", \u0026iam.RolePolicyArgs{\n\t\t\tRole: iamEmrServiceRole.ID(),\n\t\t\tPolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [{\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Resource\\\": \\\"*\\\",\\n\", \" \\\"Action\\\": [\\n\", \" \\\"ec2:AuthorizeSecurityGroupEgress\\\",\\n\", \" \\\"ec2:AuthorizeSecurityGroupIngress\\\",\\n\", \" \\\"ec2:CancelSpotInstanceRequests\\\",\\n\", \" \\\"ec2:CreateNetworkInterface\\\",\\n\", \" \\\"ec2:CreateSecurityGroup\\\",\\n\", \" \\\"ec2:CreateTags\\\",\\n\", \" \\\"ec2:DeleteNetworkInterface\\\",\\n\", \" \\\"ec2:DeleteSecurityGroup\\\",\\n\", \" \\\"ec2:DeleteTags\\\",\\n\", \" \\\"ec2:DescribeAvailabilityZones\\\",\\n\", \" \\\"ec2:DescribeAccountAttributes\\\",\\n\", \" \\\"ec2:DescribeDhcpOptions\\\",\\n\", \" \\\"ec2:DescribeInstanceStatus\\\",\\n\", \" \\\"ec2:DescribeInstances\\\",\\n\", \" \\\"ec2:DescribeKeyPairs\\\",\\n\", \" \\\"ec2:DescribeNetworkAcls\\\",\\n\", \" \\\"ec2:DescribeNetworkInterfaces\\\",\\n\", \" \\\"ec2:DescribePrefixLists\\\",\\n\", \" \\\"ec2:DescribeRouteTables\\\",\\n\", \" \\\"ec2:DescribeSecurityGroups\\\",\\n\", \" \\\"ec2:DescribeSpotInstanceRequests\\\",\\n\", \" \\\"ec2:DescribeSpotPriceHistory\\\",\\n\", \" \\\"ec2:DescribeSubnets\\\",\\n\", \" \\\"ec2:DescribeVpcAttribute\\\",\\n\", \" \\\"ec2:DescribeVpcEndpoints\\\",\\n\", \" \\\"ec2:DescribeVpcEndpointServices\\\",\\n\", \" \\\"ec2:DescribeVpcs\\\",\\n\", \" \\\"ec2:DetachNetworkInterface\\\",\\n\", \" \\\"ec2:ModifyImageAttribute\\\",\\n\", \" \\\"ec2:ModifyInstanceAttribute\\\",\\n\", \" \\\"ec2:RequestSpotInstances\\\",\\n\", \" \\\"ec2:RevokeSecurityGroupEgress\\\",\\n\", \" \\\"ec2:RunInstances\\\",\\n\", \" \\\"ec2:TerminateInstances\\\",\\n\", \" \\\"ec2:DeleteVolume\\\",\\n\", \" \\\"ec2:DescribeVolumeStatus\\\",\\n\", \" \\\"ec2:DescribeVolumes\\\",\\n\", \" \\\"ec2:DetachVolume\\\",\\n\", \" \\\"iam:GetRole\\\",\\n\", \" \\\"iam:GetRolePolicy\\\",\\n\", \" \\\"iam:ListInstanceProfiles\\\",\\n\", \" \\\"iam:ListRolePolicies\\\",\\n\", \" \\\"iam:PassRole\\\",\\n\", \" \\\"s3:CreateBucket\\\",\\n\", \" \\\"s3:Get*\\\",\\n\", \" \\\"s3:List*\\\",\\n\", \" \\\"sdb:BatchPutAttributes\\\",\\n\", \" \\\"sdb:Select\\\",\\n\", \" \\\"sqs:CreateQueue\\\",\\n\", \" \\\"sqs:Delete*\\\",\\n\", \" \\\"sqs:GetQueue*\\\",\\n\", \" \\\"sqs:PurgeQueue\\\",\\n\", \" \\\"sqs:ReceiveMessage\\\"\\n\", \" ]\\n\", \" }]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewRolePolicy(ctx, \"iamEmrProfilePolicy\", \u0026iam.RolePolicyArgs{\n\t\t\tRole: iamEmrProfileRole.ID(),\n\t\t\tPolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [{\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Resource\\\": \\\"*\\\",\\n\", \" \\\"Action\\\": [\\n\", \" \\\"cloudwatch:*\\\",\\n\", \" \\\"dynamodb:*\\\",\\n\", \" \\\"ec2:Describe*\\\",\\n\", \" \\\"elasticmapreduce:Describe*\\\",\\n\", \" \\\"elasticmapreduce:ListBootstrapActions\\\",\\n\", \" \\\"elasticmapreduce:ListClusters\\\",\\n\", \" \\\"elasticmapreduce:ListInstanceGroups\\\",\\n\", \" \\\"elasticmapreduce:ListInstances\\\",\\n\", \" \\\"elasticmapreduce:ListSteps\\\",\\n\", \" \\\"kinesis:CreateStream\\\",\\n\", \" \\\"kinesis:DeleteStream\\\",\\n\", \" \\\"kinesis:DescribeStream\\\",\\n\", \" \\\"kinesis:GetRecords\\\",\\n\", \" \\\"kinesis:GetShardIterator\\\",\\n\", \" \\\"kinesis:MergeShards\\\",\\n\", \" \\\"kinesis:PutRecord\\\",\\n\", \" \\\"kinesis:SplitShard\\\",\\n\", \" \\\"rds:Describe*\\\",\\n\", \" \\\"s3:*\\\",\\n\", \" \\\"sdb:*\\\",\\n\", \" \\\"sns:*\\\",\\n\", \" \\\"sqs:*\\\"\\n\", \" ]\\n\", \" }]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nEMR clusters can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:emr/cluster:Cluster cluster j-123456ABCDEF\n```\n\n Since the API does not return the actual values for Kerberos configurations, environments with those configurations will need to use the resource options configuration block `ignoreChanges` argument available to all provider resources to prevent perpetual differences, e.g. terraform resource \"aws_emr_cluster\" \"example\" {\n\n # ... other configuration ...\n\n lifecycle {\n\n\n\n ignore_changes = [kerberos_attributes]\n\n } } ", "inputProperties": { "additionalInfo": { - "description": "A JSON string for selecting additional features such as adding proxy information. Note: Currently there is no API to retrieve the value of this argument after EMR cluster creation from provider, therefore this provider cannot detect drift from the actual EMR cluster if its value is changed outside this provider.\n", + "description": "JSON string for selecting additional features such as adding proxy information. Note: Currently there is no API to retrieve the value of this argument after EMR cluster creation from provider, therefore this provider cannot detect drift from the actual EMR cluster if its value is changed outside this provider.\n", "type": "string" }, "applications": { - "description": "A list of applications for the cluster. Valid values are: `Flink`, `Hadoop`, `Hive`, `Mahout`, `Pig`, `Spark`, and `JupyterHub` (as of EMR 5.14.0). Case insensitive\n", + "description": "List of applications for the cluster. Valid values are: `Flink`, `Hadoop`, `Hive`, `Mahout`, `Pig`, `Spark`, and `JupyterHub` (as of EMR 5.14.0). Case insensitive.\n", "items": { "type": "string" }, "type": "array" }, "autoscalingRole": { - "description": "An IAM role for automatic scaling policies. The IAM role provides permissions that the automatic scaling feature requires to launch and terminate EC2 instances in an instance group.\n", + "description": "IAM role for automatic scaling policies. The IAM role provides permissions that the automatic scaling feature requires to launch and terminate EC2 instances in an instance group.\n", "type": "string" }, "bootstrapActions": { - "description": "Ordered list of bootstrap actions that will be run before Hadoop is started on the cluster nodes. Defined below.\n", + "description": "Ordered list of bootstrap actions that will be run before Hadoop is started on the cluster nodes. See below.\n", "items": { "$ref": "#/types/aws:emr/ClusterBootstrapAction:ClusterBootstrapAction" }, "type": "array" }, "configurations": { - "description": "A configuration classification that applies when provisioning cluster instances, which can include configurations for applications and software that run on the cluster. List of `configuration` blocks.\n", + "description": "Configuration classification that applies when provisioning cluster instances, which can include configurations for applications and software that run on the cluster. List of `configuration` blocks.\n", "type": "string" }, "configurationsJson": { - "description": "A JSON string for supplying list of configurations for the EMR cluster.\n", + "description": "JSON string for supplying list of configurations for the EMR cluster.\n", "type": "string" }, "coreInstanceFleet": { @@ -79431,7 +81667,7 @@ "description": "Configuration block to use an [Instance Group](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-instance-group-configuration.html#emr-plan-instance-groups) for the [core node type](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-master-core-task-nodes.html#emr-plan-core).\n" }, "customAmiId": { - "description": "A custom Amazon Linux AMI for the cluster (instead of an EMR-owned AMI). Available in Amazon EMR version 5.7.0 and later.\n", + "description": "Custom Amazon Linux AMI for the cluster (instead of an EMR-owned AMI). Available in Amazon EMR version 5.7.0 and later.\n", "type": "string" }, "ebsRootVolumeSize": { @@ -79440,7 +81676,7 @@ }, "ec2Attributes": { "$ref": "#/types/aws:emr/ClusterEc2Attributes:ClusterEc2Attributes", - "description": "Attributes for the EC2 instances running the job flow. Defined below\n" + "description": "Attributes for the EC2 instances running the job flow. See below.\n" }, "keepJobFlowAliveWhenNoSteps": { "description": "Switch on/off run cluster with no steps or when all steps are complete (default is on)\n", @@ -79448,10 +81684,14 @@ }, "kerberosAttributes": { "$ref": "#/types/aws:emr/ClusterKerberosAttributes:ClusterKerberosAttributes", - "description": "Kerberos configuration for the cluster. Defined below\n" + "description": "Kerberos configuration for the cluster. See below.\n" + }, + "logEncryptionKmsKeyId": { + "description": "AWS KMS customer master key (CMK) key ID or arn used for encrypting log files. This attribute is only available with EMR version 5.30.0 and later, excluding EMR 6.0.0.\n", + "type": "string" }, "logUri": { - "description": "S3 bucket to write the log files of the job flow. If a value is not provided, logs are not created\n", + "description": "S3 bucket to write the log files of the job flow. If a value is not provided, logs are not created.\n", "type": "string" }, "masterInstanceFleet": { @@ -79463,31 +81703,31 @@ "description": "Configuration block to use an [Instance Group](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-instance-group-configuration.html#emr-plan-instance-groups) for the [master node type](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-master-core-task-nodes.html#emr-plan-master).\n" }, "name": { - "description": "Friendly name given to the instance fleet.\n", + "description": "Name of the step.\n", "type": "string" }, "releaseLabel": { - "description": "The release label for the Amazon EMR release\n", + "description": "Release label for the Amazon EMR release.\n", "type": "string" }, "scaleDownBehavior": { - "description": "The way that individual Amazon EC2 instances terminate when an automatic scale-in activity occurs or an `instance group` is resized.\n", + "description": "Way that individual Amazon EC2 instances terminate when an automatic scale-in activity occurs or an `instance group` is resized.\n", "type": "string" }, "securityConfiguration": { - "description": "The security configuration name to attach to the EMR cluster. Only valid for EMR clusters with `release_label` 4.8.0 or greater\n", + "description": "Security configuration name to attach to the EMR cluster. Only valid for EMR clusters with `release_label` 4.8.0 or greater.\n", "type": "string" }, "serviceRole": { - "description": "IAM role that will be assumed by the Amazon EMR service to access AWS resources\n", + "description": "IAM role that will be assumed by the Amazon EMR service to access AWS resources.\n", "type": "string" }, "stepConcurrencyLevel": { - "description": "The number of steps that can be executed concurrently. You can specify a maximum of 256 steps. Only valid for EMR clusters with `release_label` 5.28.0 or greater. (default is 1)\n", + "description": "Number of steps that can be executed concurrently. You can specify a maximum of 256 steps. Only valid for EMR clusters with `release_label` 5.28.0 or greater (default is 1).\n", "type": "integer" }, "steps": { - "description": "List of steps to run when creating the cluster. Defined below. It is highly recommended to utilize [`ignoreChanges`](https://www.pulumi.com/docs/intro/concepts/programming-model/#ignorechanges) if other steps are being managed outside of this provider.\n", + "description": "List of steps to run when creating the cluster. See below. It is highly recommended to utilize the lifecycle resource options block with `ignoreChanges` if other steps are being managed outside of this provider.\n", "items": { "$ref": "#/types/aws:emr/ClusterStep:ClusterStep" }, @@ -79497,6 +81737,7 @@ "additionalProperties": { "type": "string" }, + "description": "list of tags to apply to the EMR Cluster. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", "type": "object" }, "terminationProtection": { @@ -79504,17 +81745,17 @@ "type": "boolean" }, "visibleToAllUsers": { - "description": "Whether the job flow is visible to all IAM users of the AWS account associated with the job flow. Default `true`\n", + "description": "Whether the job flow is visible to all IAM users of the AWS account associated with the job flow. Default value is `true`.\n", "type": "boolean" } }, "properties": { "additionalInfo": { - "description": "A JSON string for selecting additional features such as adding proxy information. Note: Currently there is no API to retrieve the value of this argument after EMR cluster creation from provider, therefore this provider cannot detect drift from the actual EMR cluster if its value is changed outside this provider.\n", + "description": "JSON string for selecting additional features such as adding proxy information. Note: Currently there is no API to retrieve the value of this argument after EMR cluster creation from provider, therefore this provider cannot detect drift from the actual EMR cluster if its value is changed outside this provider.\n", "type": "string" }, "applications": { - "description": "A list of applications for the cluster. Valid values are: `Flink`, `Hadoop`, `Hive`, `Mahout`, `Pig`, `Spark`, and `JupyterHub` (as of EMR 5.14.0). Case insensitive\n", + "description": "List of applications for the cluster. Valid values are: `Flink`, `Hadoop`, `Hive`, `Mahout`, `Pig`, `Spark`, and `JupyterHub` (as of EMR 5.14.0). Case insensitive.\n", "items": { "type": "string" }, @@ -79524,11 +81765,11 @@ "type": "string" }, "autoscalingRole": { - "description": "An IAM role for automatic scaling policies. The IAM role provides permissions that the automatic scaling feature requires to launch and terminate EC2 instances in an instance group.\n", + "description": "IAM role for automatic scaling policies. The IAM role provides permissions that the automatic scaling feature requires to launch and terminate EC2 instances in an instance group.\n", "type": "string" }, "bootstrapActions": { - "description": "Ordered list of bootstrap actions that will be run before Hadoop is started on the cluster nodes. Defined below.\n", + "description": "Ordered list of bootstrap actions that will be run before Hadoop is started on the cluster nodes. See below.\n", "items": { "$ref": "#/types/aws:emr/ClusterBootstrapAction:ClusterBootstrapAction" }, @@ -79543,11 +81784,11 @@ "type": "string" }, "configurations": { - "description": "A configuration classification that applies when provisioning cluster instances, which can include configurations for applications and software that run on the cluster. List of `configuration` blocks.\n", + "description": "Configuration classification that applies when provisioning cluster instances, which can include configurations for applications and software that run on the cluster. List of `configuration` blocks.\n", "type": "string" }, "configurationsJson": { - "description": "A JSON string for supplying list of configurations for the EMR cluster.\n", + "description": "JSON string for supplying list of configurations for the EMR cluster.\n", "type": "string" }, "coreInstanceFleet": { @@ -79559,7 +81800,7 @@ "description": "Configuration block to use an [Instance Group](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-instance-group-configuration.html#emr-plan-instance-groups) for the [core node type](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-master-core-task-nodes.html#emr-plan-core).\n" }, "customAmiId": { - "description": "A custom Amazon Linux AMI for the cluster (instead of an EMR-owned AMI). Available in Amazon EMR version 5.7.0 and later.\n", + "description": "Custom Amazon Linux AMI for the cluster (instead of an EMR-owned AMI). Available in Amazon EMR version 5.7.0 and later.\n", "type": "string" }, "ebsRootVolumeSize": { @@ -79568,7 +81809,7 @@ }, "ec2Attributes": { "$ref": "#/types/aws:emr/ClusterEc2Attributes:ClusterEc2Attributes", - "description": "Attributes for the EC2 instances running the job flow. Defined below\n" + "description": "Attributes for the EC2 instances running the job flow. See below.\n" }, "keepJobFlowAliveWhenNoSteps": { "description": "Switch on/off run cluster with no steps or when all steps are complete (default is on)\n", @@ -79576,10 +81817,14 @@ }, "kerberosAttributes": { "$ref": "#/types/aws:emr/ClusterKerberosAttributes:ClusterKerberosAttributes", - "description": "Kerberos configuration for the cluster. Defined below\n" + "description": "Kerberos configuration for the cluster. See below.\n" + }, + "logEncryptionKmsKeyId": { + "description": "AWS KMS customer master key (CMK) key ID or arn used for encrypting log files. This attribute is only available with EMR version 5.30.0 and later, excluding EMR 6.0.0.\n", + "type": "string" }, "logUri": { - "description": "S3 bucket to write the log files of the job flow. If a value is not provided, logs are not created\n", + "description": "S3 bucket to write the log files of the job flow. If a value is not provided, logs are not created.\n", "type": "string" }, "masterInstanceFleet": { @@ -79591,35 +81836,35 @@ "description": "Configuration block to use an [Instance Group](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-instance-group-configuration.html#emr-plan-instance-groups) for the [master node type](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-master-core-task-nodes.html#emr-plan-master).\n" }, "masterPublicDns": { - "description": "The public DNS name of the master EC2 instance.\n* `core_instance_group.0.id` - Core node type Instance Group ID, if using Instance Group for this node type.\n", + "description": "Public DNS name of the master EC2 instance.\n", "type": "string" }, "name": { - "description": "Friendly name given to the instance fleet.\n", + "description": "Name of the step.\n", "type": "string" }, "releaseLabel": { - "description": "The release label for the Amazon EMR release\n", + "description": "Release label for the Amazon EMR release.\n", "type": "string" }, "scaleDownBehavior": { - "description": "The way that individual Amazon EC2 instances terminate when an automatic scale-in activity occurs or an `instance group` is resized.\n", + "description": "Way that individual Amazon EC2 instances terminate when an automatic scale-in activity occurs or an `instance group` is resized.\n", "type": "string" }, "securityConfiguration": { - "description": "The security configuration name to attach to the EMR cluster. Only valid for EMR clusters with `release_label` 4.8.0 or greater\n", + "description": "Security configuration name to attach to the EMR cluster. Only valid for EMR clusters with `release_label` 4.8.0 or greater.\n", "type": "string" }, "serviceRole": { - "description": "IAM role that will be assumed by the Amazon EMR service to access AWS resources\n", + "description": "IAM role that will be assumed by the Amazon EMR service to access AWS resources.\n", "type": "string" }, "stepConcurrencyLevel": { - "description": "The number of steps that can be executed concurrently. You can specify a maximum of 256 steps. Only valid for EMR clusters with `release_label` 5.28.0 or greater. (default is 1)\n", + "description": "Number of steps that can be executed concurrently. You can specify a maximum of 256 steps. Only valid for EMR clusters with `release_label` 5.28.0 or greater (default is 1).\n", "type": "integer" }, "steps": { - "description": "List of steps to run when creating the cluster. Defined below. It is highly recommended to utilize [`ignoreChanges`](https://www.pulumi.com/docs/intro/concepts/programming-model/#ignorechanges) if other steps are being managed outside of this provider.\n", + "description": "List of steps to run when creating the cluster. See below. It is highly recommended to utilize the lifecycle resource options block with `ignoreChanges` if other steps are being managed outside of this provider.\n", "items": { "$ref": "#/types/aws:emr/ClusterStep:ClusterStep" }, @@ -79629,12 +81874,14 @@ "additionalProperties": { "type": "string" }, + "description": "list of tags to apply to the EMR Cluster. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", "type": "object" }, "tagsAll": { "additionalProperties": { "type": "string" }, + "description": "Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.\n", "type": "object" }, "terminationProtection": { @@ -79642,7 +81889,7 @@ "type": "boolean" }, "visibleToAllUsers": { - "description": "Whether the job flow is visible to all IAM users of the AWS account associated with the job flow. Default `true`\n", + "description": "Whether the job flow is visible to all IAM users of the AWS account associated with the job flow. Default value is `true`.\n", "type": "boolean" } }, @@ -79671,11 +81918,11 @@ "description": "Input properties used for looking up and filtering Cluster resources.\n", "properties": { "additionalInfo": { - "description": "A JSON string for selecting additional features such as adding proxy information. Note: Currently there is no API to retrieve the value of this argument after EMR cluster creation from provider, therefore this provider cannot detect drift from the actual EMR cluster if its value is changed outside this provider.\n", + "description": "JSON string for selecting additional features such as adding proxy information. Note: Currently there is no API to retrieve the value of this argument after EMR cluster creation from provider, therefore this provider cannot detect drift from the actual EMR cluster if its value is changed outside this provider.\n", "type": "string" }, "applications": { - "description": "A list of applications for the cluster. Valid values are: `Flink`, `Hadoop`, `Hive`, `Mahout`, `Pig`, `Spark`, and `JupyterHub` (as of EMR 5.14.0). Case insensitive\n", + "description": "List of applications for the cluster. Valid values are: `Flink`, `Hadoop`, `Hive`, `Mahout`, `Pig`, `Spark`, and `JupyterHub` (as of EMR 5.14.0). Case insensitive.\n", "items": { "type": "string" }, @@ -79685,11 +81932,11 @@ "type": "string" }, "autoscalingRole": { - "description": "An IAM role for automatic scaling policies. The IAM role provides permissions that the automatic scaling feature requires to launch and terminate EC2 instances in an instance group.\n", + "description": "IAM role for automatic scaling policies. The IAM role provides permissions that the automatic scaling feature requires to launch and terminate EC2 instances in an instance group.\n", "type": "string" }, "bootstrapActions": { - "description": "Ordered list of bootstrap actions that will be run before Hadoop is started on the cluster nodes. Defined below.\n", + "description": "Ordered list of bootstrap actions that will be run before Hadoop is started on the cluster nodes. See below.\n", "items": { "$ref": "#/types/aws:emr/ClusterBootstrapAction:ClusterBootstrapAction" }, @@ -79704,11 +81951,11 @@ "type": "string" }, "configurations": { - "description": "A configuration classification that applies when provisioning cluster instances, which can include configurations for applications and software that run on the cluster. List of `configuration` blocks.\n", + "description": "Configuration classification that applies when provisioning cluster instances, which can include configurations for applications and software that run on the cluster. List of `configuration` blocks.\n", "type": "string" }, "configurationsJson": { - "description": "A JSON string for supplying list of configurations for the EMR cluster.\n", + "description": "JSON string for supplying list of configurations for the EMR cluster.\n", "type": "string" }, "coreInstanceFleet": { @@ -79720,7 +81967,7 @@ "description": "Configuration block to use an [Instance Group](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-instance-group-configuration.html#emr-plan-instance-groups) for the [core node type](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-master-core-task-nodes.html#emr-plan-core).\n" }, "customAmiId": { - "description": "A custom Amazon Linux AMI for the cluster (instead of an EMR-owned AMI). Available in Amazon EMR version 5.7.0 and later.\n", + "description": "Custom Amazon Linux AMI for the cluster (instead of an EMR-owned AMI). Available in Amazon EMR version 5.7.0 and later.\n", "type": "string" }, "ebsRootVolumeSize": { @@ -79729,7 +81976,7 @@ }, "ec2Attributes": { "$ref": "#/types/aws:emr/ClusterEc2Attributes:ClusterEc2Attributes", - "description": "Attributes for the EC2 instances running the job flow. Defined below\n" + "description": "Attributes for the EC2 instances running the job flow. See below.\n" }, "keepJobFlowAliveWhenNoSteps": { "description": "Switch on/off run cluster with no steps or when all steps are complete (default is on)\n", @@ -79737,10 +81984,14 @@ }, "kerberosAttributes": { "$ref": "#/types/aws:emr/ClusterKerberosAttributes:ClusterKerberosAttributes", - "description": "Kerberos configuration for the cluster. Defined below\n" + "description": "Kerberos configuration for the cluster. See below.\n" + }, + "logEncryptionKmsKeyId": { + "description": "AWS KMS customer master key (CMK) key ID or arn used for encrypting log files. This attribute is only available with EMR version 5.30.0 and later, excluding EMR 6.0.0.\n", + "type": "string" }, "logUri": { - "description": "S3 bucket to write the log files of the job flow. If a value is not provided, logs are not created\n", + "description": "S3 bucket to write the log files of the job flow. If a value is not provided, logs are not created.\n", "type": "string" }, "masterInstanceFleet": { @@ -79752,35 +82003,35 @@ "description": "Configuration block to use an [Instance Group](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-instance-group-configuration.html#emr-plan-instance-groups) for the [master node type](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-master-core-task-nodes.html#emr-plan-master).\n" }, "masterPublicDns": { - "description": "The public DNS name of the master EC2 instance.\n* `core_instance_group.0.id` - Core node type Instance Group ID, if using Instance Group for this node type.\n", + "description": "Public DNS name of the master EC2 instance.\n", "type": "string" }, "name": { - "description": "Friendly name given to the instance fleet.\n", + "description": "Name of the step.\n", "type": "string" }, "releaseLabel": { - "description": "The release label for the Amazon EMR release\n", + "description": "Release label for the Amazon EMR release.\n", "type": "string" }, "scaleDownBehavior": { - "description": "The way that individual Amazon EC2 instances terminate when an automatic scale-in activity occurs or an `instance group` is resized.\n", + "description": "Way that individual Amazon EC2 instances terminate when an automatic scale-in activity occurs or an `instance group` is resized.\n", "type": "string" }, "securityConfiguration": { - "description": "The security configuration name to attach to the EMR cluster. Only valid for EMR clusters with `release_label` 4.8.0 or greater\n", + "description": "Security configuration name to attach to the EMR cluster. Only valid for EMR clusters with `release_label` 4.8.0 or greater.\n", "type": "string" }, "serviceRole": { - "description": "IAM role that will be assumed by the Amazon EMR service to access AWS resources\n", + "description": "IAM role that will be assumed by the Amazon EMR service to access AWS resources.\n", "type": "string" }, "stepConcurrencyLevel": { - "description": "The number of steps that can be executed concurrently. You can specify a maximum of 256 steps. Only valid for EMR clusters with `release_label` 5.28.0 or greater. (default is 1)\n", + "description": "Number of steps that can be executed concurrently. You can specify a maximum of 256 steps. Only valid for EMR clusters with `release_label` 5.28.0 or greater (default is 1).\n", "type": "integer" }, "steps": { - "description": "List of steps to run when creating the cluster. Defined below. It is highly recommended to utilize [`ignoreChanges`](https://www.pulumi.com/docs/intro/concepts/programming-model/#ignorechanges) if other steps are being managed outside of this provider.\n", + "description": "List of steps to run when creating the cluster. See below. It is highly recommended to utilize the lifecycle resource options block with `ignoreChanges` if other steps are being managed outside of this provider.\n", "items": { "$ref": "#/types/aws:emr/ClusterStep:ClusterStep" }, @@ -79790,12 +82041,14 @@ "additionalProperties": { "type": "string" }, + "description": "list of tags to apply to the EMR Cluster. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", "type": "object" }, "tagsAll": { "additionalProperties": { "type": "string" }, + "description": "Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.\n", "type": "object" }, "terminationProtection": { @@ -79803,7 +82056,7 @@ "type": "boolean" }, "visibleToAllUsers": { - "description": "Whether the job flow is visible to all IAM users of the AWS account associated with the job flow. Default `true`\n", + "description": "Whether the job flow is visible to all IAM users of the AWS account associated with the job flow. Default value is `true`.\n", "type": "boolean" } }, @@ -80862,6 +83115,350 @@ "type": "object" } }, + "aws:fsx/ontapFileSystem:OntapFileSystem": { + "description": "Manages an Amazon FSx for NetApp ONTAP file system.\nSee the [FSx ONTAP User Guide](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/what-is-fsx-ontap.html) for more information.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst test = new aws.fsx.OntapFileSystem(\"test\", {\n storageCapacity: 1024,\n subnetIds: [\n aws_subnet.test1.id,\n aws_subnet.test2.id,\n ],\n deploymentType: \"MULTI_AZ_1\",\n throughputCapacity: 512,\n preferredSubnetId: aws_subnet.test1.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.fsx.OntapFileSystem(\"test\",\n storage_capacity=1024,\n subnet_ids=[\n aws_subnet[\"test1\"][\"id\"],\n aws_subnet[\"test2\"][\"id\"],\n ],\n deployment_type=\"MULTI_AZ_1\",\n throughput_capacity=512,\n preferred_subnet_id=aws_subnet[\"test1\"][\"id\"])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = new Aws.Fsx.OntapFileSystem(\"test\", new Aws.Fsx.OntapFileSystemArgs\n {\n StorageCapacity = 1024,\n SubnetIds = \n {\n aws_subnet.Test1.Id,\n aws_subnet.Test2.Id,\n },\n DeploymentType = \"MULTI_AZ_1\",\n ThroughputCapacity = 512,\n PreferredSubnetId = aws_subnet.Test1.Id,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/fsx\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fsx.NewOntapFileSystem(ctx, \"test\", \u0026fsx.OntapFileSystemArgs{\n\t\t\tStorageCapacity: pulumi.Int(1024),\n\t\t\tSubnetIds: pulumi.StringArray{\n\t\t\t\tpulumi.Any(aws_subnet.Test1.Id),\n\t\t\t\tpulumi.Any(aws_subnet.Test2.Id),\n\t\t\t},\n\t\t\tDeploymentType: pulumi.String(\"MULTI_AZ_1\"),\n\t\t\tThroughputCapacity: pulumi.Int(512),\n\t\t\tPreferredSubnetId: pulumi.Any(aws_subnet.Test1.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nFSx File Systems can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:fsx/ontapFileSystem:OntapFileSystem example fs-543ab12b1ca672f33\n```\n\n Certain resource arguments, like `security_group_ids`, do not have a FSx API method for reading the information after creation. If the argument is set in the Terraform configuration on an imported resource, Terraform will always show a difference. To workaround this behavior, either omit the argument from the Terraform configuration or use [`ignore_changes`](https://www.terraform.io/docs/configuration/meta-arguments/lifecycle.html#ignore_changes) to hide the difference, e.g. terraform resource \"aws_fsx_ontap_file_system\" \"example\" {\n\n # ... other configuration ...\n\n security_group_ids = [aws_security_group.example.id]\n\n # There is no FSx API for reading security_group_ids\n\n lifecycle {\n\n\n\n ignore_changes = [security_group_ids]\n\n } } ", + "inputProperties": { + "automaticBackupRetentionDays": { + "description": "The number of days to retain automatic backups. Setting this to 0 disables automatic backups. You can retain automatic backups for a maximum of 90 days.\n", + "type": "integer" + }, + "dailyAutomaticBackupStartTime": { + "description": "A recurring daily time, in the format HH:MM. HH is the zero-padded hour of the day (0-23), and MM is the zero-padded minute of the hour. For example, 05:00 specifies 5 AM daily. Requires `automatic_backup_retention_days` to be set.\n", + "type": "string" + }, + "deploymentType": { + "description": "- The filesystem deployment type. Only `MULTI_AZ_1` is supported.\n", + "type": "string" + }, + "diskIopsConfiguration": { + "$ref": "#/types/aws:fsx/OntapFileSystemDiskIopsConfiguration:OntapFileSystemDiskIopsConfiguration", + "description": "The SSD IOPS configuration for the Amazon FSx for NetApp ONTAP file system. See Disk Iops Configuration Below.\n" + }, + "endpointIpAddressRange": { + "description": "Specifies the IP address range in which the endpoints to access your file system will be created. By default, Amazon FSx selects an unused IP address range for you from the 198.19.* range.\n", + "type": "string" + }, + "fsxAdminPassword": { + "description": "The ONTAP administrative password for the fsxadmin user that you can use to administer your file system using the ONTAP CLI and REST API.\n", + "type": "string" + }, + "kmsKeyId": { + "description": "ARN for the KMS Key to encrypt the file system at rest, Defaults to an AWS managed KMS Key.\n", + "type": "string" + }, + "preferredSubnetId": { + "description": "The ID for a subnet. A subnet is a range of IP addresses in your virtual private cloud (VPC).\n", + "type": "string" + }, + "routeTableIds": { + "description": "Specifies the VPC route tables in which your file system's endpoints will be created. You should specify all VPC route tables associated with the subnets in which your clients are located. By default, Amazon FSx selects your VPC's default route table.\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "securityGroupIds": { + "description": "A list of IDs for the security groups that apply to the specified network interfaces created for file system access. These security groups will apply to all network interfaces.\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "storageCapacity": { + "description": "The storage capacity (GiB) of the file system. Valid values between `1024` and `196608`.\n", + "type": "integer" + }, + "storageType": { + "description": "- The filesystem storage type. defaults to `SSD`.\n", + "type": "string" + }, + "subnetIds": { + "description": "A list of IDs for the subnets that the file system will be accessible from. Exactly 2 subnets need to be provided.\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags to assign to the file system. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + }, + "throughputCapacity": { + "type": "integer" + }, + "weeklyMaintenanceStartTime": { + "description": "The preferred start time (in `d:HH:MM` format) to perform weekly maintenance, in the UTC time zone.\n", + "type": "string" + } + }, + "properties": { + "arn": { + "description": "Amazon Resource Name of the file system.\n", + "type": "string" + }, + "automaticBackupRetentionDays": { + "description": "The number of days to retain automatic backups. Setting this to 0 disables automatic backups. You can retain automatic backups for a maximum of 90 days.\n", + "type": "integer" + }, + "dailyAutomaticBackupStartTime": { + "description": "A recurring daily time, in the format HH:MM. HH is the zero-padded hour of the day (0-23), and MM is the zero-padded minute of the hour. For example, 05:00 specifies 5 AM daily. Requires `automatic_backup_retention_days` to be set.\n", + "type": "string" + }, + "deploymentType": { + "description": "- The filesystem deployment type. Only `MULTI_AZ_1` is supported.\n", + "type": "string" + }, + "diskIopsConfiguration": { + "$ref": "#/types/aws:fsx/OntapFileSystemDiskIopsConfiguration:OntapFileSystemDiskIopsConfiguration", + "description": "The SSD IOPS configuration for the Amazon FSx for NetApp ONTAP file system. See Disk Iops Configuration Below.\n" + }, + "dnsName": { + "description": "The Domain Name Service (DNS) name for the file system. You can mount your file system using its DNS name.\n", + "type": "string" + }, + "endpointIpAddressRange": { + "description": "Specifies the IP address range in which the endpoints to access your file system will be created. By default, Amazon FSx selects an unused IP address range for you from the 198.19.* range.\n", + "type": "string" + }, + "endpoints": { + "description": "The endpoints that are used to access data or to manage the file system using the NetApp ONTAP CLI, REST API, or NetApp SnapMirror. See Endpoints below.\n", + "items": { + "$ref": "#/types/aws:fsx/OntapFileSystemEndpoint:OntapFileSystemEndpoint" + }, + "type": "array" + }, + "fsxAdminPassword": { + "description": "The ONTAP administrative password for the fsxadmin user that you can use to administer your file system using the ONTAP CLI and REST API.\n", + "type": "string" + }, + "kmsKeyId": { + "description": "ARN for the KMS Key to encrypt the file system at rest, Defaults to an AWS managed KMS Key.\n", + "type": "string" + }, + "networkInterfaceIds": { + "description": "Set of Elastic Network Interface identifiers from which the file system is accessible The first network interface returned is the primary network interface.\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "ownerId": { + "description": "AWS account identifier that created the file system.\n", + "type": "string" + }, + "preferredSubnetId": { + "description": "The ID for a subnet. A subnet is a range of IP addresses in your virtual private cloud (VPC).\n", + "type": "string" + }, + "routeTableIds": { + "description": "Specifies the VPC route tables in which your file system's endpoints will be created. You should specify all VPC route tables associated with the subnets in which your clients are located. By default, Amazon FSx selects your VPC's default route table.\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "securityGroupIds": { + "description": "A list of IDs for the security groups that apply to the specified network interfaces created for file system access. These security groups will apply to all network interfaces.\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "storageCapacity": { + "description": "The storage capacity (GiB) of the file system. Valid values between `1024` and `196608`.\n", + "type": "integer" + }, + "storageType": { + "description": "- The filesystem storage type. defaults to `SSD`.\n", + "type": "string" + }, + "subnetIds": { + "description": "A list of IDs for the subnets that the file system will be accessible from. Exactly 2 subnets need to be provided.\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags to assign to the file system. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + }, + "throughputCapacity": { + "type": "integer" + }, + "vpcId": { + "description": "Identifier of the Virtual Private Cloud for the file system.\n", + "type": "string" + }, + "weeklyMaintenanceStartTime": { + "description": "The preferred start time (in `d:HH:MM` format) to perform weekly maintenance, in the UTC time zone.\n", + "type": "string" + } + }, + "required": [ + "arn", + "dailyAutomaticBackupStartTime", + "deploymentType", + "diskIopsConfiguration", + "dnsName", + "endpointIpAddressRange", + "endpoints", + "kmsKeyId", + "networkInterfaceIds", + "ownerId", + "preferredSubnetId", + "routeTableIds", + "subnetIds", + "tagsAll", + "throughputCapacity", + "vpcId", + "weeklyMaintenanceStartTime" + ], + "requiredInputs": [ + "deploymentType", + "preferredSubnetId", + "subnetIds", + "throughputCapacity" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering OntapFileSystem resources.\n", + "properties": { + "arn": { + "description": "Amazon Resource Name of the file system.\n", + "type": "string" + }, + "automaticBackupRetentionDays": { + "description": "The number of days to retain automatic backups. Setting this to 0 disables automatic backups. You can retain automatic backups for a maximum of 90 days.\n", + "type": "integer" + }, + "dailyAutomaticBackupStartTime": { + "description": "A recurring daily time, in the format HH:MM. HH is the zero-padded hour of the day (0-23), and MM is the zero-padded minute of the hour. For example, 05:00 specifies 5 AM daily. Requires `automatic_backup_retention_days` to be set.\n", + "type": "string" + }, + "deploymentType": { + "description": "- The filesystem deployment type. Only `MULTI_AZ_1` is supported.\n", + "type": "string" + }, + "diskIopsConfiguration": { + "$ref": "#/types/aws:fsx/OntapFileSystemDiskIopsConfiguration:OntapFileSystemDiskIopsConfiguration", + "description": "The SSD IOPS configuration for the Amazon FSx for NetApp ONTAP file system. See Disk Iops Configuration Below.\n" + }, + "dnsName": { + "description": "The Domain Name Service (DNS) name for the file system. You can mount your file system using its DNS name.\n", + "type": "string" + }, + "endpointIpAddressRange": { + "description": "Specifies the IP address range in which the endpoints to access your file system will be created. By default, Amazon FSx selects an unused IP address range for you from the 198.19.* range.\n", + "type": "string" + }, + "endpoints": { + "description": "The endpoints that are used to access data or to manage the file system using the NetApp ONTAP CLI, REST API, or NetApp SnapMirror. See Endpoints below.\n", + "items": { + "$ref": "#/types/aws:fsx/OntapFileSystemEndpoint:OntapFileSystemEndpoint" + }, + "type": "array" + }, + "fsxAdminPassword": { + "description": "The ONTAP administrative password for the fsxadmin user that you can use to administer your file system using the ONTAP CLI and REST API.\n", + "type": "string" + }, + "kmsKeyId": { + "description": "ARN for the KMS Key to encrypt the file system at rest, Defaults to an AWS managed KMS Key.\n", + "type": "string" + }, + "networkInterfaceIds": { + "description": "Set of Elastic Network Interface identifiers from which the file system is accessible The first network interface returned is the primary network interface.\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "ownerId": { + "description": "AWS account identifier that created the file system.\n", + "type": "string" + }, + "preferredSubnetId": { + "description": "The ID for a subnet. A subnet is a range of IP addresses in your virtual private cloud (VPC).\n", + "type": "string" + }, + "routeTableIds": { + "description": "Specifies the VPC route tables in which your file system's endpoints will be created. You should specify all VPC route tables associated with the subnets in which your clients are located. By default, Amazon FSx selects your VPC's default route table.\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "securityGroupIds": { + "description": "A list of IDs for the security groups that apply to the specified network interfaces created for file system access. These security groups will apply to all network interfaces.\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "storageCapacity": { + "description": "The storage capacity (GiB) of the file system. Valid values between `1024` and `196608`.\n", + "type": "integer" + }, + "storageType": { + "description": "- The filesystem storage type. defaults to `SSD`.\n", + "type": "string" + }, + "subnetIds": { + "description": "A list of IDs for the subnets that the file system will be accessible from. Exactly 2 subnets need to be provided.\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags to assign to the file system. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + }, + "throughputCapacity": { + "type": "integer" + }, + "vpcId": { + "description": "Identifier of the Virtual Private Cloud for the file system.\n", + "type": "string" + }, + "weeklyMaintenanceStartTime": { + "description": "The preferred start time (in `d:HH:MM` format) to perform weekly maintenance, in the UTC time zone.\n", + "type": "string" + } + }, + "type": "object" + } + }, "aws:fsx/windowsFileSystem:WindowsFileSystem": { "description": "Manages a FSx Windows File System. See the [FSx Windows Guide](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/what-is.html) for more information.\n\n\u003e **NOTE:** Either the `active_directory_id` argument or `self_managed_active_directory` configuration block must be specified.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Using AWS Directory Service\n\nAdditional information for using AWS Directory Service with Windows File Systems can be found in the [FSx Windows Guide](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/fsx-aws-managed-ad.html).\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.fsx.WindowsFileSystem(\"example\", {\n activeDirectoryId: aws_directory_service_directory.example.id,\n kmsKeyId: aws_kms_key.example.arn,\n storageCapacity: 300,\n subnetIds: [aws_subnet.example.id],\n throughputCapacity: 1024,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.fsx.WindowsFileSystem(\"example\",\n active_directory_id=aws_directory_service_directory[\"example\"][\"id\"],\n kms_key_id=aws_kms_key[\"example\"][\"arn\"],\n storage_capacity=300,\n subnet_ids=[aws_subnet[\"example\"][\"id\"]],\n throughput_capacity=1024)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Fsx.WindowsFileSystem(\"example\", new Aws.Fsx.WindowsFileSystemArgs\n {\n ActiveDirectoryId = aws_directory_service_directory.Example.Id,\n KmsKeyId = aws_kms_key.Example.Arn,\n StorageCapacity = 300,\n SubnetIds = \n {\n aws_subnet.Example.Id,\n },\n ThroughputCapacity = 1024,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/fsx\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fsx.NewWindowsFileSystem(ctx, \"example\", \u0026fsx.WindowsFileSystemArgs{\n\t\t\tActiveDirectoryId: pulumi.Any(aws_directory_service_directory.Example.Id),\n\t\t\tKmsKeyId: pulumi.Any(aws_kms_key.Example.Arn),\n\t\t\tStorageCapacity: pulumi.Int(300),\n\t\t\tSubnetIds: pulumi.StringArray{\n\t\t\t\tpulumi.Any(aws_subnet.Example.Id),\n\t\t\t},\n\t\t\tThroughputCapacity: pulumi.Int(1024),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Using a Self-Managed Microsoft Active Directory\n\nAdditional information for using AWS Directory Service with Windows File Systems can be found in the [FSx Windows Guide](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/self-managed-AD.html).\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.fsx.WindowsFileSystem(\"example\", {\n kmsKeyId: aws_kms_key.example.arn,\n storageCapacity: 300,\n subnetIds: [aws_subnet.example.id],\n throughputCapacity: 1024,\n selfManagedActiveDirectory: {\n dnsIps: [\n \"10.0.0.111\",\n \"10.0.0.222\",\n ],\n domainName: \"corp.example.com\",\n password: \"avoid-plaintext-passwords\",\n username: \"Admin\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.fsx.WindowsFileSystem(\"example\",\n kms_key_id=aws_kms_key[\"example\"][\"arn\"],\n storage_capacity=300,\n subnet_ids=[aws_subnet[\"example\"][\"id\"]],\n throughput_capacity=1024,\n self_managed_active_directory=aws.fsx.WindowsFileSystemSelfManagedActiveDirectoryArgs(\n dns_ips=[\n \"10.0.0.111\",\n \"10.0.0.222\",\n ],\n domain_name=\"corp.example.com\",\n password=\"avoid-plaintext-passwords\",\n username=\"Admin\",\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Fsx.WindowsFileSystem(\"example\", new Aws.Fsx.WindowsFileSystemArgs\n {\n KmsKeyId = aws_kms_key.Example.Arn,\n StorageCapacity = 300,\n SubnetIds = \n {\n aws_subnet.Example.Id,\n },\n ThroughputCapacity = 1024,\n SelfManagedActiveDirectory = new Aws.Fsx.Inputs.WindowsFileSystemSelfManagedActiveDirectoryArgs\n {\n DnsIps = \n {\n \"10.0.0.111\",\n \"10.0.0.222\",\n },\n DomainName = \"corp.example.com\",\n Password = \"avoid-plaintext-passwords\",\n Username = \"Admin\",\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/fsx\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fsx.NewWindowsFileSystem(ctx, \"example\", \u0026fsx.WindowsFileSystemArgs{\n\t\t\tKmsKeyId: pulumi.Any(aws_kms_key.Example.Arn),\n\t\t\tStorageCapacity: pulumi.Int(300),\n\t\t\tSubnetIds: pulumi.StringArray{\n\t\t\t\tpulumi.Any(aws_subnet.Example.Id),\n\t\t\t},\n\t\t\tThroughputCapacity: pulumi.Int(1024),\n\t\t\tSelfManagedActiveDirectory: \u0026fsx.WindowsFileSystemSelfManagedActiveDirectoryArgs{\n\t\t\t\tDnsIps: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10.0.0.111\"),\n\t\t\t\t\tpulumi.String(\"10.0.0.222\"),\n\t\t\t\t},\n\t\t\t\tDomainName: pulumi.String(\"corp.example.com\"),\n\t\t\t\tPassword: pulumi.String(\"avoid-plaintext-passwords\"),\n\t\t\t\tUsername: pulumi.String(\"Admin\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nFSx File Systems can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:fsx/windowsFileSystem:WindowsFileSystem example fs-543ab12b1ca672f33\n```\n\n Certain resource arguments, like `security_group_ids` and the `self_managed_active_directory` configuation block `password`, do not have a FSx API method for reading the information after creation. If these arguments are set in the provider configuration on an imported resource, the povider will always show a difference. To workaround this behavior, either omit the argument from the configuration or use [`ignoreChanges`](https://www.pulumi.com/docs/intro/concepts/programming-model/#ignorechanges) to hide the difference, e.g. terraform resource \"aws_fsx_windows_file_system\" \"example\" {\n\n # ... other configuration ...\n\n security_group_ids = [aws_security_group.example.id]\n\n # There is no FSx API for reading security_group_ids\n\n lifecycle {\n\n\n\n ignore_changes = [security_group_ids]\n\n } } ", "inputProperties": { @@ -82629,7 +85226,8 @@ "arn", "catalogId", "databaseName", - "name" + "name", + "partitionIndices" ], "requiredInputs": [ "databaseName" @@ -82822,6 +85420,20 @@ "physicalConnectionRequirements": { "$ref": "#/types/aws:glue/ConnectionPhysicalConnectionRequirements:ConnectionPhysicalConnectionRequirements", "description": "A map of physical connection requirements, such as VPC and SecurityGroup. Defined below.\n" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "Key-value map of resource tags. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" } }, "properties": { @@ -82862,12 +85474,27 @@ "physicalConnectionRequirements": { "$ref": "#/types/aws:glue/ConnectionPhysicalConnectionRequirements:ConnectionPhysicalConnectionRequirements", "description": "A map of physical connection requirements, such as VPC and SecurityGroup. Defined below.\n" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "Key-value map of resource tags. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" } }, "required": [ "arn", "catalogId", - "name" + "name", + "tagsAll" ], "stateInputs": { "description": "Input properties used for looking up and filtering Connection resources.\n", @@ -82909,6 +85536,20 @@ "physicalConnectionRequirements": { "$ref": "#/types/aws:glue/ConnectionPhysicalConnectionRequirements:ConnectionPhysicalConnectionRequirements", "description": "A map of physical connection requirements, such as VPC and SecurityGroup. Defined below.\n" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "Key-value map of resource tags. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" } }, "type": "object" @@ -84285,6 +86926,93 @@ "type": "object" } }, + "aws:glue/partitionIndex:PartitionIndex": { + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleCatalogDatabase = new aws.glue.CatalogDatabase(\"exampleCatalogDatabase\", {name: \"example\"});\nconst exampleCatalogTable = new aws.glue.CatalogTable(\"exampleCatalogTable\", {\n name: \"example\",\n databaseName: exampleCatalogDatabase.name,\n owner: \"my_owner\",\n retention: 1,\n tableType: \"VIRTUAL_VIEW\",\n viewExpandedText: \"view_expanded_text_1\",\n viewOriginalText: \"view_original_text_1\",\n storageDescriptor: {\n bucketColumns: [\"bucket_column_1\"],\n compressed: false,\n inputFormat: \"SequenceFileInputFormat\",\n location: \"my_location\",\n numberOfBuckets: 1,\n outputFormat: \"SequenceFileInputFormat\",\n storedAsSubDirectories: false,\n parameters: {\n param1: \"param1_val\",\n },\n columns: [\n {\n name: \"my_column_1\",\n type: \"int\",\n comment: \"my_column1_comment\",\n },\n {\n name: \"my_column_2\",\n type: \"string\",\n comment: \"my_column2_comment\",\n },\n ],\n serDeInfo: {\n name: \"ser_de_name\",\n parameters: {\n param1: \"param_val_1\",\n },\n serializationLibrary: \"org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe\",\n },\n sortColumns: [{\n column: \"my_column_1\",\n sortOrder: 1,\n }],\n skewedInfo: {\n skewedColumnNames: [\"my_column_1\"],\n skewedColumnValueLocationMaps: {\n my_column_1: \"my_column_1_val_loc_map\",\n },\n skewedColumnValues: [\"skewed_val_1\"],\n },\n },\n partitionKeys: [\n {\n name: \"my_column_1\",\n type: \"int\",\n comment: \"my_column_1_comment\",\n },\n {\n name: \"my_column_2\",\n type: \"string\",\n comment: \"my_column_2_comment\",\n },\n ],\n parameters: {\n param1: \"param1_val\",\n },\n});\nconst examplePartitionIndex = new aws.glue.PartitionIndex(\"examplePartitionIndex\", {\n databaseName: exampleCatalogDatabase.name,\n tableName: exampleCatalogTable.name,\n partitionIndex: {\n indexName: \"example\",\n keys: [\n \"my_column_1\",\n \"my_column_2\",\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_catalog_database = aws.glue.CatalogDatabase(\"exampleCatalogDatabase\", name=\"example\")\nexample_catalog_table = aws.glue.CatalogTable(\"exampleCatalogTable\",\n name=\"example\",\n database_name=example_catalog_database.name,\n owner=\"my_owner\",\n retention=1,\n table_type=\"VIRTUAL_VIEW\",\n view_expanded_text=\"view_expanded_text_1\",\n view_original_text=\"view_original_text_1\",\n storage_descriptor=aws.glue.CatalogTableStorageDescriptorArgs(\n bucket_columns=[\"bucket_column_1\"],\n compressed=False,\n input_format=\"SequenceFileInputFormat\",\n location=\"my_location\",\n number_of_buckets=1,\n output_format=\"SequenceFileInputFormat\",\n stored_as_sub_directories=False,\n parameters={\n \"param1\": \"param1_val\",\n },\n columns=[\n aws.glue.CatalogTableStorageDescriptorColumnArgs(\n name=\"my_column_1\",\n type=\"int\",\n comment=\"my_column1_comment\",\n ),\n aws.glue.CatalogTableStorageDescriptorColumnArgs(\n name=\"my_column_2\",\n type=\"string\",\n comment=\"my_column2_comment\",\n ),\n ],\n ser_de_info=aws.glue.CatalogTableStorageDescriptorSerDeInfoArgs(\n name=\"ser_de_name\",\n parameters={\n \"param1\": \"param_val_1\",\n },\n serialization_library=\"org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe\",\n ),\n sort_columns=[aws.glue.CatalogTableStorageDescriptorSortColumnArgs(\n column=\"my_column_1\",\n sort_order=1,\n )],\n skewed_info=aws.glue.CatalogTableStorageDescriptorSkewedInfoArgs(\n skewed_column_names=[\"my_column_1\"],\n skewed_column_value_location_maps={\n \"my_column_1\": \"my_column_1_val_loc_map\",\n },\n skewed_column_values=[\"skewed_val_1\"],\n ),\n ),\n partition_keys=[\n aws.glue.CatalogTablePartitionKeyArgs(\n name=\"my_column_1\",\n type=\"int\",\n comment=\"my_column_1_comment\",\n ),\n aws.glue.CatalogTablePartitionKeyArgs(\n name=\"my_column_2\",\n type=\"string\",\n comment=\"my_column_2_comment\",\n ),\n ],\n parameters={\n \"param1\": \"param1_val\",\n })\nexample_partition_index = aws.glue.PartitionIndex(\"examplePartitionIndex\",\n database_name=example_catalog_database.name,\n table_name=example_catalog_table.name,\n partition_index=aws.glue.PartitionIndexPartitionIndexArgs(\n index_name=\"example\",\n keys=[\n \"my_column_1\",\n \"my_column_2\",\n ],\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleCatalogDatabase = new Aws.Glue.CatalogDatabase(\"exampleCatalogDatabase\", new Aws.Glue.CatalogDatabaseArgs\n {\n Name = \"example\",\n });\n var exampleCatalogTable = new Aws.Glue.CatalogTable(\"exampleCatalogTable\", new Aws.Glue.CatalogTableArgs\n {\n Name = \"example\",\n DatabaseName = exampleCatalogDatabase.Name,\n Owner = \"my_owner\",\n Retention = 1,\n TableType = \"VIRTUAL_VIEW\",\n ViewExpandedText = \"view_expanded_text_1\",\n ViewOriginalText = \"view_original_text_1\",\n StorageDescriptor = new Aws.Glue.Inputs.CatalogTableStorageDescriptorArgs\n {\n BucketColumns = \n {\n \"bucket_column_1\",\n },\n Compressed = false,\n InputFormat = \"SequenceFileInputFormat\",\n Location = \"my_location\",\n NumberOfBuckets = 1,\n OutputFormat = \"SequenceFileInputFormat\",\n StoredAsSubDirectories = false,\n Parameters = \n {\n { \"param1\", \"param1_val\" },\n },\n Columns = \n {\n new Aws.Glue.Inputs.CatalogTableStorageDescriptorColumnArgs\n {\n Name = \"my_column_1\",\n Type = \"int\",\n Comment = \"my_column1_comment\",\n },\n new Aws.Glue.Inputs.CatalogTableStorageDescriptorColumnArgs\n {\n Name = \"my_column_2\",\n Type = \"string\",\n Comment = \"my_column2_comment\",\n },\n },\n SerDeInfo = new Aws.Glue.Inputs.CatalogTableStorageDescriptorSerDeInfoArgs\n {\n Name = \"ser_de_name\",\n Parameters = \n {\n { \"param1\", \"param_val_1\" },\n },\n SerializationLibrary = \"org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe\",\n },\n SortColumns = \n {\n new Aws.Glue.Inputs.CatalogTableStorageDescriptorSortColumnArgs\n {\n Column = \"my_column_1\",\n SortOrder = 1,\n },\n },\n SkewedInfo = new Aws.Glue.Inputs.CatalogTableStorageDescriptorSkewedInfoArgs\n {\n SkewedColumnNames = \n {\n \"my_column_1\",\n },\n SkewedColumnValueLocationMaps = \n {\n { \"my_column_1\", \"my_column_1_val_loc_map\" },\n },\n SkewedColumnValues = \n {\n \"skewed_val_1\",\n },\n },\n },\n PartitionKeys = \n {\n new Aws.Glue.Inputs.CatalogTablePartitionKeyArgs\n {\n Name = \"my_column_1\",\n Type = \"int\",\n Comment = \"my_column_1_comment\",\n },\n new Aws.Glue.Inputs.CatalogTablePartitionKeyArgs\n {\n Name = \"my_column_2\",\n Type = \"string\",\n Comment = \"my_column_2_comment\",\n },\n },\n Parameters = \n {\n { \"param1\", \"param1_val\" },\n },\n });\n var examplePartitionIndex = new Aws.Glue.PartitionIndex(\"examplePartitionIndex\", new Aws.Glue.PartitionIndexArgs\n {\n DatabaseName = exampleCatalogDatabase.Name,\n TableName = exampleCatalogTable.Name,\n PartitionIndex = new Aws.Glue.Inputs.PartitionIndexPartitionIndexArgs\n {\n IndexName = \"example\",\n Keys = \n {\n \"my_column_1\",\n \"my_column_2\",\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/glue\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleCatalogDatabase, err := glue.NewCatalogDatabase(ctx, \"exampleCatalogDatabase\", \u0026glue.CatalogDatabaseArgs{\n\t\t\tName: pulumi.String(\"example\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleCatalogTable, err := glue.NewCatalogTable(ctx, \"exampleCatalogTable\", \u0026glue.CatalogTableArgs{\n\t\t\tName: pulumi.String(\"example\"),\n\t\t\tDatabaseName: exampleCatalogDatabase.Name,\n\t\t\tOwner: pulumi.String(\"my_owner\"),\n\t\t\tRetention: pulumi.Int(1),\n\t\t\tTableType: pulumi.String(\"VIRTUAL_VIEW\"),\n\t\t\tViewExpandedText: pulumi.String(\"view_expanded_text_1\"),\n\t\t\tViewOriginalText: pulumi.String(\"view_original_text_1\"),\n\t\t\tStorageDescriptor: \u0026glue.CatalogTableStorageDescriptorArgs{\n\t\t\t\tBucketColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"bucket_column_1\"),\n\t\t\t\t},\n\t\t\t\tCompressed: pulumi.Bool(false),\n\t\t\t\tInputFormat: pulumi.String(\"SequenceFileInputFormat\"),\n\t\t\t\tLocation: pulumi.String(\"my_location\"),\n\t\t\t\tNumberOfBuckets: pulumi.Int(1),\n\t\t\t\tOutputFormat: pulumi.String(\"SequenceFileInputFormat\"),\n\t\t\t\tStoredAsSubDirectories: pulumi.Bool(false),\n\t\t\t\tParameters: pulumi.StringMap{\n\t\t\t\t\t\"param1\": pulumi.String(\"param1_val\"),\n\t\t\t\t},\n\t\t\t\tColumns: glue.CatalogTableStorageDescriptorColumnArray{\n\t\t\t\t\t\u0026glue.CatalogTableStorageDescriptorColumnArgs{\n\t\t\t\t\t\tName: pulumi.String(\"my_column_1\"),\n\t\t\t\t\t\tType: pulumi.String(\"int\"),\n\t\t\t\t\t\tComment: pulumi.String(\"my_column1_comment\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026glue.CatalogTableStorageDescriptorColumnArgs{\n\t\t\t\t\t\tName: pulumi.String(\"my_column_2\"),\n\t\t\t\t\t\tType: pulumi.String(\"string\"),\n\t\t\t\t\t\tComment: pulumi.String(\"my_column2_comment\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSerDeInfo: \u0026glue.CatalogTableStorageDescriptorSerDeInfoArgs{\n\t\t\t\t\tName: pulumi.String(\"ser_de_name\"),\n\t\t\t\t\tParameters: pulumi.StringMap{\n\t\t\t\t\t\t\"param1\": pulumi.String(\"param_val_1\"),\n\t\t\t\t\t},\n\t\t\t\t\tSerializationLibrary: pulumi.String(\"org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe\"),\n\t\t\t\t},\n\t\t\t\tSortColumns: glue.CatalogTableStorageDescriptorSortColumnArray{\n\t\t\t\t\t\u0026glue.CatalogTableStorageDescriptorSortColumnArgs{\n\t\t\t\t\t\tColumn: pulumi.String(\"my_column_1\"),\n\t\t\t\t\t\tSortOrder: pulumi.Int(1),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSkewedInfo: \u0026glue.CatalogTableStorageDescriptorSkewedInfoArgs{\n\t\t\t\t\tSkewedColumnNames: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my_column_1\"),\n\t\t\t\t\t},\n\t\t\t\t\tSkewedColumnValueLocationMaps: pulumi.StringMap{\n\t\t\t\t\t\t\"my_column_1\": pulumi.String(\"my_column_1_val_loc_map\"),\n\t\t\t\t\t},\n\t\t\t\t\tSkewedColumnValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"skewed_val_1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tPartitionKeys: glue.CatalogTablePartitionKeyArray{\n\t\t\t\t\u0026glue.CatalogTablePartitionKeyArgs{\n\t\t\t\t\tName: pulumi.String(\"my_column_1\"),\n\t\t\t\t\tType: pulumi.String(\"int\"),\n\t\t\t\t\tComment: pulumi.String(\"my_column_1_comment\"),\n\t\t\t\t},\n\t\t\t\t\u0026glue.CatalogTablePartitionKeyArgs{\n\t\t\t\t\tName: pulumi.String(\"my_column_2\"),\n\t\t\t\t\tType: pulumi.String(\"string\"),\n\t\t\t\t\tComment: pulumi.String(\"my_column_2_comment\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tParameters: pulumi.StringMap{\n\t\t\t\t\"param1\": pulumi.String(\"param1_val\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = glue.NewPartitionIndex(ctx, \"examplePartitionIndex\", \u0026glue.PartitionIndexArgs{\n\t\t\tDatabaseName: exampleCatalogDatabase.Name,\n\t\t\tTableName: exampleCatalogTable.Name,\n\t\t\tPartitionIndex: \u0026glue.PartitionIndexPartitionIndexArgs{\n\t\t\t\tIndexName: pulumi.String(\"example\"),\n\t\t\t\tKeys: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"my_column_1\"),\n\t\t\t\t\tpulumi.String(\"my_column_2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGlue Partition Indexes can be imported with their catalog ID (usually AWS account ID), database name, table name, and index name, e.g.\n\n```sh\n $ pulumi import aws:glue/partitionIndex:PartitionIndex example 123456789012:MyDatabase:MyTable:index-name\n```\n\n ", + "inputProperties": { + "catalogId": { + "description": "The catalog ID where the table resides.\n", + "type": "string" + }, + "databaseName": { + "description": "Name of the metadata database where the table metadata resides. For Hive compatibility, this must be all lowercase.\n", + "type": "string" + }, + "partitionIndex": { + "$ref": "#/types/aws:glue/PartitionIndexPartitionIndex:PartitionIndexPartitionIndex", + "description": "Configuration block for a partition index. See `partition_index` below.\n", + "language": { + "csharp": { + "name": "PartitionIndexConfig" + } + } + }, + "tableName": { + "description": "Name of the table. For Hive compatibility, this must be entirely lowercase.\n", + "type": "string" + } + }, + "properties": { + "catalogId": { + "description": "The catalog ID where the table resides.\n", + "type": "string" + }, + "databaseName": { + "description": "Name of the metadata database where the table metadata resides. For Hive compatibility, this must be all lowercase.\n", + "type": "string" + }, + "partitionIndex": { + "$ref": "#/types/aws:glue/PartitionIndexPartitionIndex:PartitionIndexPartitionIndex", + "description": "Configuration block for a partition index. See `partition_index` below.\n", + "language": { + "csharp": { + "name": "PartitionIndexConfig" + } + } + }, + "tableName": { + "description": "Name of the table. For Hive compatibility, this must be entirely lowercase.\n", + "type": "string" + } + }, + "required": [ + "catalogId", + "databaseName", + "partitionIndex", + "tableName" + ], + "requiredInputs": [ + "databaseName", + "partitionIndex", + "tableName" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering PartitionIndex resources.\n", + "properties": { + "catalogId": { + "description": "The catalog ID where the table resides.\n", + "type": "string" + }, + "databaseName": { + "description": "Name of the metadata database where the table metadata resides. For Hive compatibility, this must be all lowercase.\n", + "type": "string" + }, + "partitionIndex": { + "$ref": "#/types/aws:glue/PartitionIndexPartitionIndex:PartitionIndexPartitionIndex", + "description": "Configuration block for a partition index. See `partition_index` below.\n", + "language": { + "csharp": { + "name": "PartitionIndexConfig" + } + } + }, + "tableName": { + "description": "Name of the table. For Hive compatibility, this must be entirely lowercase.\n", + "type": "string" + } + }, + "type": "object" + } + }, "aws:glue/registry:Registry": { "description": "Provides a Glue Registry resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.glue.Registry(\"example\", {\n registryName: \"example\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.glue.Registry(\"example\", registry_name=\"example\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Glue.Registry(\"example\", new Aws.Glue.RegistryArgs\n {\n RegistryName = \"example\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/glue\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := glue.NewRegistry(ctx, \"example\", \u0026glue.RegistryArgs{\n\t\t\tRegistryName: pulumi.String(\"example\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGlue Registries can be imported using `arn`, e.g.\n\n```sh\n $ pulumi import aws:glue/registry:Registry example arn:aws:glue:us-west-2:123456789012:registry/example\n```\n\n ", "inputProperties": { @@ -84374,12 +87102,18 @@ "aws:glue/resourcePolicy:ResourcePolicy": { "description": "Provides a Glue resource policy. Only one can exist per region.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst currentCallerIdentity = aws.getCallerIdentity({});\nconst currentPartition = aws.getPartition({});\nconst currentRegion = aws.getRegion({});\nconst glue-example-policy = Promise.all([currentPartition, currentRegion, currentCallerIdentity]).then(([currentPartition, currentRegion, currentCallerIdentity]) =\u003e aws.iam.getPolicyDocument({\n statements: [{\n actions: [\"glue:CreateTable\"],\n resources: [`arn:${currentPartition.partition}:glue:${currentRegion.name}:${currentCallerIdentity.accountId}:*`],\n principals: [{\n identifiers: [\"*\"],\n type: \"AWS\",\n }],\n }],\n}));\nconst example = new aws.glue.ResourcePolicy(\"example\", {policy: glue_example_policy.then(glue_example_policy =\u003e glue_example_policy.json)});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ncurrent_caller_identity = aws.get_caller_identity()\ncurrent_partition = aws.get_partition()\ncurrent_region = aws.get_region()\nglue_example_policy = aws.iam.get_policy_document(statements=[aws.iam.GetPolicyDocumentStatementArgs(\n actions=[\"glue:CreateTable\"],\n resources=[f\"arn:{current_partition.partition}:glue:{current_region.name}:{current_caller_identity.account_id}:*\"],\n principals=[aws.iam.GetPolicyDocumentStatementPrincipalArgs(\n identifiers=[\"*\"],\n type=\"AWS\",\n )],\n)])\nexample = aws.glue.ResourcePolicy(\"example\", policy=glue_example_policy.json)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var currentCallerIdentity = Output.Create(Aws.GetCallerIdentity.InvokeAsync());\n var currentPartition = Output.Create(Aws.GetPartition.InvokeAsync());\n var currentRegion = Output.Create(Aws.GetRegion.InvokeAsync());\n var glue_example_policy = Output.Tuple(currentPartition, currentRegion, currentCallerIdentity).Apply(values =\u003e\n {\n var currentPartition = values.Item1;\n var currentRegion = values.Item2;\n var currentCallerIdentity = values.Item3;\n return Output.Create(Aws.Iam.GetPolicyDocument.InvokeAsync(new Aws.Iam.GetPolicyDocumentArgs\n {\n Statements = \n {\n new Aws.Iam.Inputs.GetPolicyDocumentStatementArgs\n {\n Actions = \n {\n \"glue:CreateTable\",\n },\n Resources = \n {\n $\"arn:{currentPartition.Partition}:glue:{currentRegion.Name}:{currentCallerIdentity.AccountId}:*\",\n },\n Principals = \n {\n new Aws.Iam.Inputs.GetPolicyDocumentStatementPrincipalArgs\n {\n Identifiers = \n {\n \"*\",\n },\n Type = \"AWS\",\n },\n },\n },\n },\n }));\n });\n var example = new Aws.Glue.ResourcePolicy(\"example\", new Aws.Glue.ResourcePolicyArgs\n {\n Policy = glue_example_policy.Apply(glue_example_policy =\u003e glue_example_policy.Json),\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/glue\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcurrentCallerIdentity, err := aws.GetCallerIdentity(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcurrentPartition, err := aws.GetPartition(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcurrentRegion, err := aws.GetRegion(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tglue_example_policy, err := iam.GetPolicyDocument(ctx, \u0026iam.GetPolicyDocumentArgs{\n\t\t\tStatements: []iam.GetPolicyDocumentStatement{\n\t\t\t\tiam.GetPolicyDocumentStatement{\n\t\t\t\t\tActions: []string{\n\t\t\t\t\t\t\"glue:CreateTable\",\n\t\t\t\t\t},\n\t\t\t\t\tResources: []string{\n\t\t\t\t\t\tfmt.Sprintf(\"%v%v%v%v%v%v%v\", \"arn:\", currentPartition.Partition, \":glue:\", currentRegion.Name, \":\", currentCallerIdentity.AccountId, \":*\"),\n\t\t\t\t\t},\n\t\t\t\t\tPrincipals: []iam.GetPolicyDocumentStatementPrincipal{\n\t\t\t\t\t\tiam.GetPolicyDocumentStatementPrincipal{\n\t\t\t\t\t\t\tIdentifiers: []string{\n\t\t\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tType: \"AWS\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = glue.NewResourcePolicy(ctx, \"example\", \u0026glue.ResourcePolicyArgs{\n\t\t\tPolicy: pulumi.String(glue_example_policy.Json),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGlue Resource Policy can be imported using the account ID\n\n```sh\n $ pulumi import aws:glue/resourcePolicy:ResourcePolicy Test 12356789012\n```\n\n ", "inputProperties": { + "enableHybrid": { + "type": "string" + }, "policy": { "description": "The policy to be applied to the aws glue data catalog.\n", "type": "string" } }, "properties": { + "enableHybrid": { + "type": "string" + }, "policy": { "description": "The policy to be applied to the aws glue data catalog.\n", "type": "string" @@ -84394,6 +87128,9 @@ "stateInputs": { "description": "Input properties used for looking up and filtering ResourcePolicy resources.\n", "properties": { + "enableHybrid": { + "type": "string" + }, "policy": { "description": "The policy to be applied to the aws glue data catalog.\n", "type": "string" @@ -87454,7 +90191,7 @@ } }, "aws:iam/samlProvider:SamlProvider": { - "description": "Provides an IAM SAML provider.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst _default = new aws.iam.SamlProvider(\"default\", {samlMetadataDocument: fs.readFileSync(\"saml-metadata.xml\")});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ndefault = aws.iam.SamlProvider(\"default\", saml_metadata_document=(lambda path: open(path).read())(\"saml-metadata.xml\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var @default = new Aws.Iam.SamlProvider(\"default\", new Aws.Iam.SamlProviderArgs\n {\n SamlMetadataDocument = File.ReadAllText(\"saml-metadata.xml\"),\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nIAM SAML Providers can be imported using the `arn`, e.g.\n\n```sh\n $ pulumi import aws:iam/samlProvider:SamlProvider default arn:aws:iam::123456789012:saml-provider/SAMLADFS\n```\n\n ", + "description": "Provides an IAM SAML provider.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst _default = new aws.iam.SamlProvider(\"default\", {samlMetadataDocument: fs.readFileSync(\"saml-metadata.xml\")});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ndefault = aws.iam.SamlProvider(\"default\", saml_metadata_document=(lambda path: open(path).read())(\"saml-metadata.xml\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var @default = new Aws.Iam.SamlProvider(\"default\", new Aws.Iam.SamlProviderArgs\n {\n SamlMetadataDocument = File.ReadAllText(\"saml-metadata.xml\"),\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.NewSamlProvider(ctx, \"_default\", \u0026iam.SamlProviderArgs{\n\t\t\tSamlMetadataDocument: readFileOrPanic(\"saml-metadata.xml\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nIAM SAML Providers can be imported using the `arn`, e.g.\n\n```sh\n $ pulumi import aws:iam/samlProvider:SamlProvider default arn:aws:iam::123456789012:saml-provider/SAMLADFS\n```\n\n ", "inputProperties": { "name": { "description": "The name of the provider to create.\n", @@ -87552,7 +90289,7 @@ } }, "aws:iam/serverCertificate:ServerCertificate": { - "description": "Provides an IAM Server Certificate resource to upload Server Certificates.\nCerts uploaded to IAM can easily work with other AWS services such as:\n\n- AWS Elastic Beanstalk\n- Elastic Load Balancing\n- CloudFront\n- AWS OpsWorks\n\nFor information about server certificates in IAM, see [Managing Server\nCertificates][2] in AWS Documentation.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n**Using certs on file:**\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst testCert = new aws.iam.ServerCertificate(\"testCert\", {\n certificateBody: fs.readFileSync(\"self-ca-cert.pem\"),\n privateKey: fs.readFileSync(\"test-key.pem\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest_cert = aws.iam.ServerCertificate(\"testCert\",\n certificate_body=(lambda path: open(path).read())(\"self-ca-cert.pem\"),\n private_key=(lambda path: open(path).read())(\"test-key.pem\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var testCert = new Aws.Iam.ServerCertificate(\"testCert\", new Aws.Iam.ServerCertificateArgs\n {\n CertificateBody = File.ReadAllText(\"self-ca-cert.pem\"),\n PrivateKey = File.ReadAllText(\"test-key.pem\"),\n });\n }\n\n}\n```\n\n**Example with cert in-line:**\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst testCertAlt = new aws.iam.ServerCertificate(\"test_cert_alt\", {\n certificateBody: `-----BEGIN CERTIFICATE-----\n[......] # cert contents\n-----END CERTIFICATE-----\n`,\n privateKey: `-----BEGIN RSA PRIVATE KEY-----\n[......] # cert contents\n-----END RSA PRIVATE KEY-----\n`,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest_cert_alt = aws.iam.ServerCertificate(\"testCertAlt\",\n certificate_body=\"\"\"-----BEGIN CERTIFICATE-----\n[......] # cert contents\n-----END CERTIFICATE-----\n\n\"\"\",\n private_key=\"\"\"-----BEGIN RSA PRIVATE KEY-----\n[......] # cert contents\n-----END RSA PRIVATE KEY-----\n\n\"\"\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var testCertAlt = new Aws.Iam.ServerCertificate(\"testCertAlt\", new Aws.Iam.ServerCertificateArgs\n {\n CertificateBody = @\"-----BEGIN CERTIFICATE-----\n[......] # cert contents\n-----END CERTIFICATE-----\n\n\",\n PrivateKey = @\"-----BEGIN RSA PRIVATE KEY-----\n[......] # cert contents\n-----END RSA PRIVATE KEY-----\n\n\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.NewServerCertificate(ctx, \"testCertAlt\", \u0026iam.ServerCertificateArgs{\n\t\t\tCertificateBody: pulumi.String(fmt.Sprintf(\"%v%v%v%v\", \"-----BEGIN CERTIFICATE-----\\n\", \"[......] # cert contents\\n\", \"-----END CERTIFICATE-----\\n\", \"\\n\")),\n\t\t\tPrivateKey: pulumi.String(fmt.Sprintf(\"%v%v%v%v\", \"-----BEGIN RSA PRIVATE KEY-----\\n\", \"[......] # cert contents\\n\", \"-----END RSA PRIVATE KEY-----\\n\", \"\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n**Use in combination with an AWS ELB resource:**\n\nSome properties of an IAM Server Certificates cannot be updated while they are\nin use. In order for this provider to effectively manage a Certificate in this situation, it is\nrecommended you utilize the `name_prefix` attribute and enable the\n`create_before_destroy` [lifecycle block][lifecycle]. This will allow this provider\nto create a new, updated `aws.iam.ServerCertificate` resource and replace it in\ndependant resources before attempting to destroy the old version.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst testCert = new aws.iam.ServerCertificate(\"testCert\", {\n namePrefix: \"example-cert\",\n certificateBody: fs.readFileSync(\"self-ca-cert.pem\"),\n privateKey: fs.readFileSync(\"test-key.pem\"),\n});\nconst ourapp = new aws.elb.LoadBalancer(\"ourapp\", {\n availabilityZones: [\"us-west-2a\"],\n crossZoneLoadBalancing: true,\n listeners: [{\n instancePort: 8000,\n instanceProtocol: \"http\",\n lbPort: 443,\n lbProtocol: \"https\",\n sslCertificateId: testCert.arn,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest_cert = aws.iam.ServerCertificate(\"testCert\",\n name_prefix=\"example-cert\",\n certificate_body=(lambda path: open(path).read())(\"self-ca-cert.pem\"),\n private_key=(lambda path: open(path).read())(\"test-key.pem\"))\nourapp = aws.elb.LoadBalancer(\"ourapp\",\n availability_zones=[\"us-west-2a\"],\n cross_zone_load_balancing=True,\n listeners=[aws.elb.LoadBalancerListenerArgs(\n instance_port=8000,\n instance_protocol=\"http\",\n lb_port=443,\n lb_protocol=\"https\",\n ssl_certificate_id=test_cert.arn,\n )])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var testCert = new Aws.Iam.ServerCertificate(\"testCert\", new Aws.Iam.ServerCertificateArgs\n {\n NamePrefix = \"example-cert\",\n CertificateBody = File.ReadAllText(\"self-ca-cert.pem\"),\n PrivateKey = File.ReadAllText(\"test-key.pem\"),\n });\n var ourapp = new Aws.Elb.LoadBalancer(\"ourapp\", new Aws.Elb.LoadBalancerArgs\n {\n AvailabilityZones = \n {\n \"us-west-2a\",\n },\n CrossZoneLoadBalancing = true,\n Listeners = \n {\n new Aws.Elb.Inputs.LoadBalancerListenerArgs\n {\n InstancePort = 8000,\n InstanceProtocol = \"http\",\n LbPort = 443,\n LbProtocol = \"https\",\n SslCertificateId = testCert.Arn,\n },\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nIAM Server Certificates can be imported using the `name`, e.g.\n\n```sh\n $ pulumi import aws:iam/serverCertificate:ServerCertificate certificate example.com-certificate-until-2018\n```\n\n [1]https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html [2]https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingServerCerts.html [lifecycle]/docs/configuration/resources.html ", + "description": "Provides an IAM Server Certificate resource to upload Server Certificates.\nCerts uploaded to IAM can easily work with other AWS services such as:\n\n- AWS Elastic Beanstalk\n- Elastic Load Balancing\n- CloudFront\n- AWS OpsWorks\n\nFor information about server certificates in IAM, see [Managing Server\nCertificates][2] in AWS Documentation.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n**Using certs on file:**\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst testCert = new aws.iam.ServerCertificate(\"testCert\", {\n certificateBody: fs.readFileSync(\"self-ca-cert.pem\"),\n privateKey: fs.readFileSync(\"test-key.pem\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest_cert = aws.iam.ServerCertificate(\"testCert\",\n certificate_body=(lambda path: open(path).read())(\"self-ca-cert.pem\"),\n private_key=(lambda path: open(path).read())(\"test-key.pem\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var testCert = new Aws.Iam.ServerCertificate(\"testCert\", new Aws.Iam.ServerCertificateArgs\n {\n CertificateBody = File.ReadAllText(\"self-ca-cert.pem\"),\n PrivateKey = File.ReadAllText(\"test-key.pem\"),\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.NewServerCertificate(ctx, \"testCert\", \u0026iam.ServerCertificateArgs{\n\t\t\tCertificateBody: readFileOrPanic(\"self-ca-cert.pem\"),\n\t\t\tPrivateKey: readFileOrPanic(\"test-key.pem\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n**Example with cert in-line:**\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst testCertAlt = new aws.iam.ServerCertificate(\"test_cert_alt\", {\n certificateBody: `-----BEGIN CERTIFICATE-----\n[......] # cert contents\n-----END CERTIFICATE-----\n`,\n privateKey: `-----BEGIN RSA PRIVATE KEY-----\n[......] # cert contents\n-----END RSA PRIVATE KEY-----\n`,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest_cert_alt = aws.iam.ServerCertificate(\"testCertAlt\",\n certificate_body=\"\"\"-----BEGIN CERTIFICATE-----\n[......] # cert contents\n-----END CERTIFICATE-----\n\n\"\"\",\n private_key=\"\"\"-----BEGIN RSA PRIVATE KEY-----\n[......] # cert contents\n-----END RSA PRIVATE KEY-----\n\n\"\"\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var testCertAlt = new Aws.Iam.ServerCertificate(\"testCertAlt\", new Aws.Iam.ServerCertificateArgs\n {\n CertificateBody = @\"-----BEGIN CERTIFICATE-----\n[......] # cert contents\n-----END CERTIFICATE-----\n\n\",\n PrivateKey = @\"-----BEGIN RSA PRIVATE KEY-----\n[......] # cert contents\n-----END RSA PRIVATE KEY-----\n\n\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.NewServerCertificate(ctx, \"testCertAlt\", \u0026iam.ServerCertificateArgs{\n\t\t\tCertificateBody: pulumi.String(fmt.Sprintf(\"%v%v%v%v\", \"-----BEGIN CERTIFICATE-----\\n\", \"[......] # cert contents\\n\", \"-----END CERTIFICATE-----\\n\", \"\\n\")),\n\t\t\tPrivateKey: pulumi.String(fmt.Sprintf(\"%v%v%v%v\", \"-----BEGIN RSA PRIVATE KEY-----\\n\", \"[......] # cert contents\\n\", \"-----END RSA PRIVATE KEY-----\\n\", \"\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n**Use in combination with an AWS ELB resource:**\n\nSome properties of an IAM Server Certificates cannot be updated while they are\nin use. In order for this provider to effectively manage a Certificate in this situation, it is\nrecommended you utilize the `name_prefix` attribute and enable the\n`create_before_destroy` [lifecycle block][lifecycle]. This will allow this provider\nto create a new, updated `aws.iam.ServerCertificate` resource and replace it in\ndependant resources before attempting to destroy the old version.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst testCert = new aws.iam.ServerCertificate(\"testCert\", {\n namePrefix: \"example-cert\",\n certificateBody: fs.readFileSync(\"self-ca-cert.pem\"),\n privateKey: fs.readFileSync(\"test-key.pem\"),\n});\nconst ourapp = new aws.elb.LoadBalancer(\"ourapp\", {\n availabilityZones: [\"us-west-2a\"],\n crossZoneLoadBalancing: true,\n listeners: [{\n instancePort: 8000,\n instanceProtocol: \"http\",\n lbPort: 443,\n lbProtocol: \"https\",\n sslCertificateId: testCert.arn,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest_cert = aws.iam.ServerCertificate(\"testCert\",\n name_prefix=\"example-cert\",\n certificate_body=(lambda path: open(path).read())(\"self-ca-cert.pem\"),\n private_key=(lambda path: open(path).read())(\"test-key.pem\"))\nourapp = aws.elb.LoadBalancer(\"ourapp\",\n availability_zones=[\"us-west-2a\"],\n cross_zone_load_balancing=True,\n listeners=[aws.elb.LoadBalancerListenerArgs(\n instance_port=8000,\n instance_protocol=\"http\",\n lb_port=443,\n lb_protocol=\"https\",\n ssl_certificate_id=test_cert.arn,\n )])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var testCert = new Aws.Iam.ServerCertificate(\"testCert\", new Aws.Iam.ServerCertificateArgs\n {\n NamePrefix = \"example-cert\",\n CertificateBody = File.ReadAllText(\"self-ca-cert.pem\"),\n PrivateKey = File.ReadAllText(\"test-key.pem\"),\n });\n var ourapp = new Aws.Elb.LoadBalancer(\"ourapp\", new Aws.Elb.LoadBalancerArgs\n {\n AvailabilityZones = \n {\n \"us-west-2a\",\n },\n CrossZoneLoadBalancing = true,\n Listeners = \n {\n new Aws.Elb.Inputs.LoadBalancerListenerArgs\n {\n InstancePort = 8000,\n InstanceProtocol = \"http\",\n LbPort = 443,\n LbProtocol = \"https\",\n SslCertificateId = testCert.Arn,\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/elb\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestCert, err := iam.NewServerCertificate(ctx, \"testCert\", \u0026iam.ServerCertificateArgs{\n\t\t\tNamePrefix: pulumi.String(\"example-cert\"),\n\t\t\tCertificateBody: readFileOrPanic(\"self-ca-cert.pem\"),\n\t\t\tPrivateKey: readFileOrPanic(\"test-key.pem\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = elb.NewLoadBalancer(ctx, \"ourapp\", \u0026elb.LoadBalancerArgs{\n\t\t\tAvailabilityZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-west-2a\"),\n\t\t\t},\n\t\t\tCrossZoneLoadBalancing: pulumi.Bool(true),\n\t\t\tListeners: elb.LoadBalancerListenerArray{\n\t\t\t\t\u0026elb.LoadBalancerListenerArgs{\n\t\t\t\t\tInstancePort: pulumi.Int(8000),\n\t\t\t\t\tInstanceProtocol: pulumi.String(\"http\"),\n\t\t\t\t\tLbPort: pulumi.Int(443),\n\t\t\t\t\tLbProtocol: pulumi.String(\"https\"),\n\t\t\t\t\tSslCertificateId: testCert.Arn,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nIAM Server Certificates can be imported using the `name`, e.g.\n\n```sh\n $ pulumi import aws:iam/serverCertificate:ServerCertificate certificate example.com-certificate-until-2018\n```\n\n [1]https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html [2]https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingServerCerts.html [lifecycle]/docs/configuration/resources.html ", "inputProperties": { "certificateBody": { "description": "The contents of the public key certificate in\nPEM-encoded format.\n", @@ -89732,8 +92469,118 @@ "type": "object" } }, + "aws:iot/authorizer:Authorizer": { + "description": "Creates and manages an AWS IoT Authorizer.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst example = new aws.iot.Authorizer(\"example\", {\n authorizerFunctionArn: aws_lambda_function.example.arn,\n signingDisabled: false,\n status: \"ACTIVE\",\n tokenKeyName: \"Token-Header\",\n tokenSigningPublicKeys: {\n Key1: fs.readFileSync(\"test-fixtures/iot-authorizer-signing-key.pem\"),\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.iot.Authorizer(\"example\",\n authorizer_function_arn=aws_lambda_function[\"example\"][\"arn\"],\n signing_disabled=False,\n status=\"ACTIVE\",\n token_key_name=\"Token-Header\",\n token_signing_public_keys={\n \"Key1\": (lambda path: open(path).read())(\"test-fixtures/iot-authorizer-signing-key.pem\"),\n })\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Iot.Authorizer(\"example\", new Aws.Iot.AuthorizerArgs\n {\n AuthorizerFunctionArn = aws_lambda_function.Example.Arn,\n SigningDisabled = false,\n Status = \"ACTIVE\",\n TokenKeyName = \"Token-Header\",\n TokenSigningPublicKeys = \n {\n { \"Key1\", File.ReadAllText(\"test-fixtures/iot-authorizer-signing-key.pem\") },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iot\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iot.NewAuthorizer(ctx, \"example\", \u0026iot.AuthorizerArgs{\n\t\t\tAuthorizerFunctionArn: pulumi.Any(aws_lambda_function.Example.Arn),\n\t\t\tSigningDisabled: pulumi.Bool(false),\n\t\t\tStatus: pulumi.String(\"ACTIVE\"),\n\t\t\tTokenKeyName: pulumi.String(\"Token-Header\"),\n\t\t\tTokenSigningPublicKeys: pulumi.StringMap{\n\t\t\t\t\"Key1\": readFileOrPanic(\"test-fixtures/iot-authorizer-signing-key.pem\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nIOT Authorizers can be imported using the name, e.g.\n\n```sh\n $ pulumi import aws:iot/authorizer:Authorizer example example\n```\n\n ", + "inputProperties": { + "authorizerFunctionArn": { + "description": "The ARN of the authorizer's Lambda function.\n", + "type": "string" + }, + "name": { + "description": "The name of the authorizer.\n", + "type": "string" + }, + "signingDisabled": { + "description": "Specifies whether AWS IoT validates the token signature in an authorization request. Default: `false`.\n", + "type": "boolean" + }, + "status": { + "description": "The status of Authorizer request at creation. Valid values: `ACTIVE`, `INACTIVE`. Default: `ACTIVE`.\n", + "type": "string" + }, + "tokenKeyName": { + "description": "The name of the token key used to extract the token from the HTTP headers. This value is required if signing is enabled in your authorizer.\n", + "type": "string" + }, + "tokenSigningPublicKeys": { + "additionalProperties": { + "type": "string" + }, + "description": "The public keys used to verify the digital signature returned by your custom authentication service. This value is required if signing is enabled in your authorizer.\n", + "type": "object" + } + }, + "properties": { + "arn": { + "description": "The ARN of the authorizer.\n", + "type": "string" + }, + "authorizerFunctionArn": { + "description": "The ARN of the authorizer's Lambda function.\n", + "type": "string" + }, + "name": { + "description": "The name of the authorizer.\n", + "type": "string" + }, + "signingDisabled": { + "description": "Specifies whether AWS IoT validates the token signature in an authorization request. Default: `false`.\n", + "type": "boolean" + }, + "status": { + "description": "The status of Authorizer request at creation. Valid values: `ACTIVE`, `INACTIVE`. Default: `ACTIVE`.\n", + "type": "string" + }, + "tokenKeyName": { + "description": "The name of the token key used to extract the token from the HTTP headers. This value is required if signing is enabled in your authorizer.\n", + "type": "string" + }, + "tokenSigningPublicKeys": { + "additionalProperties": { + "type": "string" + }, + "description": "The public keys used to verify the digital signature returned by your custom authentication service. This value is required if signing is enabled in your authorizer.\n", + "type": "object" + } + }, + "required": [ + "arn", + "authorizerFunctionArn", + "name" + ], + "requiredInputs": [ + "authorizerFunctionArn" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Authorizer resources.\n", + "properties": { + "arn": { + "description": "The ARN of the authorizer.\n", + "type": "string" + }, + "authorizerFunctionArn": { + "description": "The ARN of the authorizer's Lambda function.\n", + "type": "string" + }, + "name": { + "description": "The name of the authorizer.\n", + "type": "string" + }, + "signingDisabled": { + "description": "Specifies whether AWS IoT validates the token signature in an authorization request. Default: `false`.\n", + "type": "boolean" + }, + "status": { + "description": "The status of Authorizer request at creation. Valid values: `ACTIVE`, `INACTIVE`. Default: `ACTIVE`.\n", + "type": "string" + }, + "tokenKeyName": { + "description": "The name of the token key used to extract the token from the HTTP headers. This value is required if signing is enabled in your authorizer.\n", + "type": "string" + }, + "tokenSigningPublicKeys": { + "additionalProperties": { + "type": "string" + }, + "description": "The public keys used to verify the digital signature returned by your custom authentication service. This value is required if signing is enabled in your authorizer.\n", + "type": "object" + } + }, + "type": "object" + } + }, "aws:iot/certificate:Certificate": { - "description": "Creates and manages an AWS IoT certificate.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### With CSR\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst cert = new aws.iot.Certificate(\"cert\", {\n csr: fs.readFileSync(\"/my/csr.pem\"),\n active: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ncert = aws.iot.Certificate(\"cert\",\n csr=(lambda path: open(path).read())(\"/my/csr.pem\"),\n active=True)\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var cert = new Aws.Iot.Certificate(\"cert\", new Aws.Iot.CertificateArgs\n {\n Csr = File.ReadAllText(\"/my/csr.pem\"),\n Active = true,\n });\n }\n\n}\n```\n{{% /example %}}\n{{% example %}}\n### Without CSR\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst cert = new aws.iot.Certificate(\"cert\", {\n active: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ncert = aws.iot.Certificate(\"cert\", active=True)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var cert = new Aws.Iot.Certificate(\"cert\", new Aws.Iot.CertificateArgs\n {\n Active = true,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iot\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iot.NewCertificate(ctx, \"cert\", \u0026iot.CertificateArgs{\n\t\t\tActive: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Creates and manages an AWS IoT certificate.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### With CSR\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst cert = new aws.iot.Certificate(\"cert\", {\n csr: fs.readFileSync(\"/my/csr.pem\"),\n active: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ncert = aws.iot.Certificate(\"cert\",\n csr=(lambda path: open(path).read())(\"/my/csr.pem\"),\n active=True)\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var cert = new Aws.Iot.Certificate(\"cert\", new Aws.Iot.CertificateArgs\n {\n Csr = File.ReadAllText(\"/my/csr.pem\"),\n Active = true,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iot\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iot.NewCertificate(ctx, \"cert\", \u0026iot.CertificateArgs{\n\t\t\tCsr: readFileOrPanic(\"/my/csr.pem\"),\n\t\t\tActive: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Without CSR\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst cert = new aws.iot.Certificate(\"cert\", {\n active: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ncert = aws.iot.Certificate(\"cert\", active=True)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var cert = new Aws.Iot.Certificate(\"cert\", new Aws.Iot.CertificateArgs\n {\n Active = true,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iot\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iot.NewCertificate(ctx, \"cert\", \u0026iot.CertificateArgs{\n\t\t\tActive: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputProperties": { "active": { "description": "Boolean flag to indicate if the certificate should be active\n", @@ -89889,7 +92736,7 @@ } }, "aws:iot/policyAttachment:PolicyAttachment": { - "description": "Provides an IoT policy attachment.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst pubsub = new aws.iot.Policy(\"pubsub\", {policy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"iot:*\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"*\"\n }\n ]\n}\n`});\nconst cert = new aws.iot.Certificate(\"cert\", {\n csr: fs.readFileSync(\"csr.pem\"),\n active: true,\n});\nconst att = new aws.iot.PolicyAttachment(\"att\", {\n policy: pubsub.name,\n target: cert.arn,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\npubsub = aws.iot.Policy(\"pubsub\", policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"iot:*\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"*\"\n }\n ]\n}\n\"\"\")\ncert = aws.iot.Certificate(\"cert\",\n csr=(lambda path: open(path).read())(\"csr.pem\"),\n active=True)\natt = aws.iot.PolicyAttachment(\"att\",\n policy=pubsub.name,\n target=cert.arn)\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var pubsub = new Aws.Iot.Policy(\"pubsub\", new Aws.Iot.PolicyArgs\n {\n Policy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Action\"\": [\n \"\"iot:*\"\"\n ],\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Resource\"\": \"\"*\"\"\n }\n ]\n}\n\",\n });\n var cert = new Aws.Iot.Certificate(\"cert\", new Aws.Iot.CertificateArgs\n {\n Csr = File.ReadAllText(\"csr.pem\"),\n Active = true,\n });\n var att = new Aws.Iot.PolicyAttachment(\"att\", new Aws.Iot.PolicyAttachmentArgs\n {\n Policy = pubsub.Name,\n Target = cert.Arn,\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Provides an IoT policy attachment.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst pubsub = new aws.iot.Policy(\"pubsub\", {policy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"iot:*\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"*\"\n }\n ]\n}\n`});\nconst cert = new aws.iot.Certificate(\"cert\", {\n csr: fs.readFileSync(\"csr.pem\"),\n active: true,\n});\nconst att = new aws.iot.PolicyAttachment(\"att\", {\n policy: pubsub.name,\n target: cert.arn,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\npubsub = aws.iot.Policy(\"pubsub\", policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"iot:*\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"*\"\n }\n ]\n}\n\"\"\")\ncert = aws.iot.Certificate(\"cert\",\n csr=(lambda path: open(path).read())(\"csr.pem\"),\n active=True)\natt = aws.iot.PolicyAttachment(\"att\",\n policy=pubsub.name,\n target=cert.arn)\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var pubsub = new Aws.Iot.Policy(\"pubsub\", new Aws.Iot.PolicyArgs\n {\n Policy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Action\"\": [\n \"\"iot:*\"\"\n ],\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Resource\"\": \"\"*\"\"\n }\n ]\n}\n\",\n });\n var cert = new Aws.Iot.Certificate(\"cert\", new Aws.Iot.CertificateArgs\n {\n Csr = File.ReadAllText(\"csr.pem\"),\n Active = true,\n });\n var att = new Aws.Iot.PolicyAttachment(\"att\", new Aws.Iot.PolicyAttachmentArgs\n {\n Policy = pubsub.Name,\n Target = cert.Arn,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iot\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpubsub, err := iot.NewPolicy(ctx, \"pubsub\", \u0026iot.PolicyArgs{\n\t\t\tPolicy: pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Action\\\": [\\n\", \" \\\"iot:*\\\"\\n\", \" ],\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Resource\\\": \\\"*\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcert, err := iot.NewCertificate(ctx, \"cert\", \u0026iot.CertificateArgs{\n\t\t\tCsr: readFileOrPanic(\"csr.pem\"),\n\t\t\tActive: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iot.NewPolicyAttachment(ctx, \"att\", \u0026iot.PolicyAttachmentArgs{\n\t\t\tPolicy: pubsub.Name,\n\t\t\tTarget: cert.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputProperties": { "policy": { "description": "The name of the policy to attach.\n", @@ -90109,7 +92956,7 @@ } }, "aws:iot/thingPrincipalAttachment:ThingPrincipalAttachment": { - "description": "Attaches Principal to AWS IoT Thing.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst example = new aws.iot.Thing(\"example\", {});\nconst cert = new aws.iot.Certificate(\"cert\", {\n csr: fs.readFileSync(\"csr.pem\"),\n active: true,\n});\nconst att = new aws.iot.ThingPrincipalAttachment(\"att\", {\n principal: cert.arn,\n thing: example.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.iot.Thing(\"example\")\ncert = aws.iot.Certificate(\"cert\",\n csr=(lambda path: open(path).read())(\"csr.pem\"),\n active=True)\natt = aws.iot.ThingPrincipalAttachment(\"att\",\n principal=cert.arn,\n thing=example.name)\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Iot.Thing(\"example\", new Aws.Iot.ThingArgs\n {\n });\n var cert = new Aws.Iot.Certificate(\"cert\", new Aws.Iot.CertificateArgs\n {\n Csr = File.ReadAllText(\"csr.pem\"),\n Active = true,\n });\n var att = new Aws.Iot.ThingPrincipalAttachment(\"att\", new Aws.Iot.ThingPrincipalAttachmentArgs\n {\n Principal = cert.Arn,\n Thing = example.Name,\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Attaches Principal to AWS IoT Thing.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst example = new aws.iot.Thing(\"example\", {});\nconst cert = new aws.iot.Certificate(\"cert\", {\n csr: fs.readFileSync(\"csr.pem\"),\n active: true,\n});\nconst att = new aws.iot.ThingPrincipalAttachment(\"att\", {\n principal: cert.arn,\n thing: example.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.iot.Thing(\"example\")\ncert = aws.iot.Certificate(\"cert\",\n csr=(lambda path: open(path).read())(\"csr.pem\"),\n active=True)\natt = aws.iot.ThingPrincipalAttachment(\"att\",\n principal=cert.arn,\n thing=example.name)\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Iot.Thing(\"example\", new Aws.Iot.ThingArgs\n {\n });\n var cert = new Aws.Iot.Certificate(\"cert\", new Aws.Iot.CertificateArgs\n {\n Csr = File.ReadAllText(\"csr.pem\"),\n Active = true,\n });\n var att = new Aws.Iot.ThingPrincipalAttachment(\"att\", new Aws.Iot.ThingPrincipalAttachmentArgs\n {\n Principal = cert.Arn,\n Thing = example.Name,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iot\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := iot.NewThing(ctx, \"example\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcert, err := iot.NewCertificate(ctx, \"cert\", \u0026iot.CertificateArgs{\n\t\t\tCsr: readFileOrPanic(\"csr.pem\"),\n\t\t\tActive: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iot.NewThingPrincipalAttachment(ctx, \"att\", \u0026iot.ThingPrincipalAttachmentArgs{\n\t\t\tPrincipal: cert.Arn,\n\t\t\tThing: example.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputProperties": { "principal": { "$ref": "#/types/aws:index/aRN:ARN", @@ -93022,8 +95869,15 @@ } }, "aws:lambda/function:Function": { - "description": "Provides a Lambda Function resource. Lambda allows you to trigger execution of code in response to events in AWS, enabling serverless backend solutions. The Lambda Function itself includes source code and runtime configuration.\n\nFor information about Lambda and how to use it, see [What is AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)\n\n\u003e To give an external source (like a CloudWatch Event Rule, SNS, or S3) permission to access the Lambda function, use the `aws.lambda.Permission` resource. See [Lambda ****Permission Model][4] for more details. On the other hand, the `role` argument of this resource is the function's execution role for identity and access to AWS services and resources.\n\nAWS Lambda expects source code to be provided as a deployment package whose structure varies depending on which `runtime` is in use. See [Runtimes](https://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html#SSS-CreateFunction-request-Runtime) for the valid values of `runtime`. The expected structure of the deployment package can be found in [the AWS Lambda documentation for each runtime](https://docs.aws.amazon.com/lambda/latest/dg/deployment-package-v2.html).\nOnce you have created your deployment package you can specify it either directly as a local file (using the `filename` argument) or indirectly via Amazon S3 (using the `s3_bucket`, `s3_key` and `s3_object_version` arguments). When providing the deployment package via S3 it may be useful to use the `aws.s3.BucketObject` resource to upload it.\nFor larger deployment packages it is recommended by Amazon to upload via S3, since the S3 API has better support for uploading large files efficiently.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Lambda Layers\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleLayerVersion = new aws.lambda.LayerVersion(\"exampleLayerVersion\", {});\n// ... other configuration ...\nconst exampleFunction = new aws.lambda.Function(\"exampleFunction\", {layers: [exampleLayerVersion.arn]});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_layer_version = aws.lambda_.LayerVersion(\"exampleLayerVersion\")\n# ... other configuration ...\nexample_function = aws.lambda_.Function(\"exampleFunction\", layers=[example_layer_version.arn])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleLayerVersion = new Aws.Lambda.LayerVersion(\"exampleLayerVersion\", new Aws.Lambda.LayerVersionArgs\n {\n });\n // ... other configuration ...\n var exampleFunction = new Aws.Lambda.Function(\"exampleFunction\", new Aws.Lambda.FunctionArgs\n {\n Layers = \n {\n exampleLayerVersion.Arn,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/lambda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleLayerVersion, err := lambda.NewLayerVersion(ctx, \"exampleLayerVersion\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = lambda.NewFunction(ctx, \"exampleFunction\", \u0026lambda.FunctionArgs{\n\t\t\tLayers: pulumi.StringArray{\n\t\t\t\texampleLayerVersion.Arn,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Lambda File Systems\n\nLambda File Systems allow you to connect an Amazon Elastic File System (EFS) file system to a Lambda function to share data across function invocations, access existing data including large files, and save function state.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\n// EFS file system\nconst efsForLambda = new aws.efs.FileSystem(\"efsForLambda\", {tags: {\n Name: \"efs_for_lambda\",\n}});\n// Mount target connects the file system to the subnet\nconst alpha = new aws.efs.MountTarget(\"alpha\", {\n fileSystemId: efsForLambda.id,\n subnetId: aws_subnet.subnet_for_lambda.id,\n securityGroups: [aws_security_group.sg_for_lambda.id],\n});\n// EFS access point used by lambda file system\nconst accessPointForLambda = new aws.efs.AccessPoint(\"accessPointForLambda\", {\n fileSystemId: efsForLambda.id,\n rootDirectory: {\n path: \"/lambda\",\n creationInfo: {\n ownerGid: 1000,\n ownerUid: 1000,\n permissions: \"777\",\n },\n },\n posixUser: {\n gid: 1000,\n uid: 1000,\n },\n});\n// A lambda function connected to an EFS file system\n// ... other configuration ...\nconst example = new aws.lambda.Function(\"example\", {\n fileSystemConfig: {\n arn: accessPointForLambda.arn,\n localMountPath: \"/mnt/efs\",\n },\n vpcConfig: {\n subnetIds: [aws_subnet.subnet_for_lambda.id],\n securityGroupIds: [aws_security_group.sg_for_lambda.id],\n },\n}, {\n dependsOn: [alpha],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\n# EFS file system\nefs_for_lambda = aws.efs.FileSystem(\"efsForLambda\", tags={\n \"Name\": \"efs_for_lambda\",\n})\n# Mount target connects the file system to the subnet\nalpha = aws.efs.MountTarget(\"alpha\",\n file_system_id=efs_for_lambda.id,\n subnet_id=aws_subnet[\"subnet_for_lambda\"][\"id\"],\n security_groups=[aws_security_group[\"sg_for_lambda\"][\"id\"]])\n# EFS access point used by lambda file system\naccess_point_for_lambda = aws.efs.AccessPoint(\"accessPointForLambda\",\n file_system_id=efs_for_lambda.id,\n root_directory=aws.efs.AccessPointRootDirectoryArgs(\n path=\"/lambda\",\n creation_info=aws.efs.AccessPointRootDirectoryCreationInfoArgs(\n owner_gid=1000,\n owner_uid=1000,\n permissions=\"777\",\n ),\n ),\n posix_user=aws.efs.AccessPointPosixUserArgs(\n gid=1000,\n uid=1000,\n ))\n# A lambda function connected to an EFS file system\n# ... other configuration ...\nexample = aws.lambda_.Function(\"example\",\n file_system_config=aws.lambda..FunctionFileSystemConfigArgs(\n arn=access_point_for_lambda.arn,\n local_mount_path=\"/mnt/efs\",\n ),\n vpc_config=aws.lambda..FunctionVpcConfigArgs(\n subnet_ids=[aws_subnet[\"subnet_for_lambda\"][\"id\"]],\n security_group_ids=[aws_security_group[\"sg_for_lambda\"][\"id\"]],\n ),\n opts=pulumi.ResourceOptions(depends_on=[alpha]))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n // EFS file system\n var efsForLambda = new Aws.Efs.FileSystem(\"efsForLambda\", new Aws.Efs.FileSystemArgs\n {\n Tags = \n {\n { \"Name\", \"efs_for_lambda\" },\n },\n });\n // Mount target connects the file system to the subnet\n var alpha = new Aws.Efs.MountTarget(\"alpha\", new Aws.Efs.MountTargetArgs\n {\n FileSystemId = efsForLambda.Id,\n SubnetId = aws_subnet.Subnet_for_lambda.Id,\n SecurityGroups = \n {\n aws_security_group.Sg_for_lambda.Id,\n },\n });\n // EFS access point used by lambda file system\n var accessPointForLambda = new Aws.Efs.AccessPoint(\"accessPointForLambda\", new Aws.Efs.AccessPointArgs\n {\n FileSystemId = efsForLambda.Id,\n RootDirectory = new Aws.Efs.Inputs.AccessPointRootDirectoryArgs\n {\n Path = \"/lambda\",\n CreationInfo = new Aws.Efs.Inputs.AccessPointRootDirectoryCreationInfoArgs\n {\n OwnerGid = 1000,\n OwnerUid = 1000,\n Permissions = \"777\",\n },\n },\n PosixUser = new Aws.Efs.Inputs.AccessPointPosixUserArgs\n {\n Gid = 1000,\n Uid = 1000,\n },\n });\n // A lambda function connected to an EFS file system\n // ... other configuration ...\n var example = new Aws.Lambda.Function(\"example\", new Aws.Lambda.FunctionArgs\n {\n FileSystemConfig = new Aws.Lambda.Inputs.FunctionFileSystemConfigArgs\n {\n Arn = accessPointForLambda.Arn,\n LocalMountPath = \"/mnt/efs\",\n },\n VpcConfig = new Aws.Lambda.Inputs.FunctionVpcConfigArgs\n {\n SubnetIds = \n {\n aws_subnet.Subnet_for_lambda.Id,\n },\n SecurityGroupIds = \n {\n aws_security_group.Sg_for_lambda.Id,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n alpha,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/efs\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/lambda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tefsForLambda, err := efs.NewFileSystem(ctx, \"efsForLambda\", \u0026efs.FileSystemArgs{\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Name\": pulumi.String(\"efs_for_lambda\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\talpha, err := efs.NewMountTarget(ctx, \"alpha\", \u0026efs.MountTargetArgs{\n\t\t\tFileSystemId: efsForLambda.ID(),\n\t\t\tSubnetId: pulumi.Any(aws_subnet.Subnet_for_lambda.Id),\n\t\t\tSecurityGroups: pulumi.StringArray{\n\t\t\t\tpulumi.Any(aws_security_group.Sg_for_lambda.Id),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\taccessPointForLambda, err := efs.NewAccessPoint(ctx, \"accessPointForLambda\", \u0026efs.AccessPointArgs{\n\t\t\tFileSystemId: efsForLambda.ID(),\n\t\t\tRootDirectory: \u0026efs.AccessPointRootDirectoryArgs{\n\t\t\t\tPath: pulumi.String(\"/lambda\"),\n\t\t\t\tCreationInfo: \u0026efs.AccessPointRootDirectoryCreationInfoArgs{\n\t\t\t\t\tOwnerGid: pulumi.Int(1000),\n\t\t\t\t\tOwnerUid: pulumi.Int(1000),\n\t\t\t\t\tPermissions: pulumi.String(\"777\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPosixUser: \u0026efs.AccessPointPosixUserArgs{\n\t\t\t\tGid: pulumi.Int(1000),\n\t\t\t\tUid: pulumi.Int(1000),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = lambda.NewFunction(ctx, \"example\", \u0026lambda.FunctionArgs{\n\t\t\tFileSystemConfig: \u0026lambda.FunctionFileSystemConfigArgs{\n\t\t\t\tArn: accessPointForLambda.Arn,\n\t\t\t\tLocalMountPath: pulumi.String(\"/mnt/efs\"),\n\t\t\t},\n\t\t\tVpcConfig: \u0026lambda.FunctionVpcConfigArgs{\n\t\t\t\tSubnetIds: pulumi.StringArray{\n\t\t\t\t\tpulumi.Any(aws_subnet.Subnet_for_lambda.Id),\n\t\t\t\t},\n\t\t\t\tSecurityGroupIds: pulumi.StringArray{\n\t\t\t\t\tpulumi.Any(aws_security_group.Sg_for_lambda.Id),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\talpha,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n### Lambda retries\n\nLambda Functions allow you to configure error handling for asynchronous invocation. The settings that it supports are `Maximum age of event` and `Retry attempts` as stated in [Lambda documentation for Configuring error handling for asynchronous invocation](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#invocation-async-errors). To configure these settings, refer to the aws.lambda.FunctionEventInvokeConfig resource.\n{{% /examples %}}\n## CloudWatch Logging and Permissions\n\nFor more information about CloudWatch Logs for Lambda, see the [Lambda User Guide](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions-logs.html).\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst config = new pulumi.Config();\nconst lambdaFunctionName = config.get(\"lambdaFunctionName\") || \"lambda_function_name\";\n// This is to optionally manage the CloudWatch Log Group for the Lambda Function.\n// If skipping this resource configuration, also add \"logs:CreateLogGroup\" to the IAM policy below.\nconst example = new aws.cloudwatch.LogGroup(\"example\", {retentionInDays: 14});\n// See also the following AWS managed policy: AWSLambdaBasicExecutionRole\nconst lambdaLogging = new aws.iam.Policy(\"lambdaLogging\", {\n path: \"/\",\n description: \"IAM policy for logging from a lambda\",\n policy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:PutLogEvents\"\n ],\n \"Resource\": \"arn:aws:logs:*:*:*\",\n \"Effect\": \"Allow\"\n }\n ]\n}\n`,\n});\nconst lambdaLogs = new aws.iam.RolePolicyAttachment(\"lambdaLogs\", {\n role: aws_iam_role.iam_for_lambda.name,\n policyArn: lambdaLogging.arn,\n});\nconst testLambda = new aws.lambda.Function(\"testLambda\", {}, {\n dependsOn: [\n lambdaLogs,\n example,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nconfig = pulumi.Config()\nlambda_function_name = config.get(\"lambdaFunctionName\")\nif lambda_function_name is None:\n lambda_function_name = \"lambda_function_name\"\n# This is to optionally manage the CloudWatch Log Group for the Lambda Function.\n# If skipping this resource configuration, also add \"logs:CreateLogGroup\" to the IAM policy below.\nexample = aws.cloudwatch.LogGroup(\"example\", retention_in_days=14)\n# See also the following AWS managed policy: AWSLambdaBasicExecutionRole\nlambda_logging = aws.iam.Policy(\"lambdaLogging\",\n path=\"/\",\n description=\"IAM policy for logging from a lambda\",\n policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:PutLogEvents\"\n ],\n \"Resource\": \"arn:aws:logs:*:*:*\",\n \"Effect\": \"Allow\"\n }\n ]\n}\n\"\"\")\nlambda_logs = aws.iam.RolePolicyAttachment(\"lambdaLogs\",\n role=aws_iam_role[\"iam_for_lambda\"][\"name\"],\n policy_arn=lambda_logging.arn)\ntest_lambda = aws.lambda_.Function(\"testLambda\", opts=pulumi.ResourceOptions(depends_on=[\n lambda_logs,\n example,\n ]))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var config = new Config();\n var lambdaFunctionName = config.Get(\"lambdaFunctionName\") ?? \"lambda_function_name\";\n // This is to optionally manage the CloudWatch Log Group for the Lambda Function.\n // If skipping this resource configuration, also add \"logs:CreateLogGroup\" to the IAM policy below.\n var example = new Aws.CloudWatch.LogGroup(\"example\", new Aws.CloudWatch.LogGroupArgs\n {\n RetentionInDays = 14,\n });\n // See also the following AWS managed policy: AWSLambdaBasicExecutionRole\n var lambdaLogging = new Aws.Iam.Policy(\"lambdaLogging\", new Aws.Iam.PolicyArgs\n {\n Path = \"/\",\n Description = \"IAM policy for logging from a lambda\",\n Policy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Action\"\": [\n \"\"logs:CreateLogGroup\"\",\n \"\"logs:CreateLogStream\"\",\n \"\"logs:PutLogEvents\"\"\n ],\n \"\"Resource\"\": \"\"arn:aws:logs:*:*:*\"\",\n \"\"Effect\"\": \"\"Allow\"\"\n }\n ]\n}\n\",\n });\n var lambdaLogs = new Aws.Iam.RolePolicyAttachment(\"lambdaLogs\", new Aws.Iam.RolePolicyAttachmentArgs\n {\n Role = aws_iam_role.Iam_for_lambda.Name,\n PolicyArn = lambdaLogging.Arn,\n });\n var testLambda = new Aws.Lambda.Function(\"testLambda\", new Aws.Lambda.FunctionArgs\n {\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n lambdaLogs,\n example,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudwatch\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/lambda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcfg := config.New(ctx, \"\")\n\t\tlambdaFunctionName := \"lambda_function_name\"\n\t\tif param := cfg.Get(\"lambdaFunctionName\"); param != \"\" {\n\t\t\tlambdaFunctionName = param\n\t\t}\n\t\texample, err := cloudwatch.NewLogGroup(ctx, \"example\", \u0026cloudwatch.LogGroupArgs{\n\t\t\tRetentionInDays: pulumi.Int(14),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tlambdaLogging, err := iam.NewPolicy(ctx, \"lambdaLogging\", \u0026iam.PolicyArgs{\n\t\t\tPath: pulumi.String(\"/\"),\n\t\t\tDescription: pulumi.String(\"IAM policy for logging from a lambda\"),\n\t\t\tPolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Action\\\": [\\n\", \" \\\"logs:CreateLogGroup\\\",\\n\", \" \\\"logs:CreateLogStream\\\",\\n\", \" \\\"logs:PutLogEvents\\\"\\n\", \" ],\\n\", \" \\\"Resource\\\": \\\"arn:aws:logs:*:*:*\\\",\\n\", \" \\\"Effect\\\": \\\"Allow\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tlambdaLogs, err := iam.NewRolePolicyAttachment(ctx, \"lambdaLogs\", \u0026iam.RolePolicyAttachmentArgs{\n\t\t\tRole: pulumi.Any(aws_iam_role.Iam_for_lambda.Name),\n\t\t\tPolicyArn: lambdaLogging.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = lambda.NewFunction(ctx, \"testLambda\", nil, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tlambdaLogs,\n\t\t\texample,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n\n## Import\n\nLambda Functions can be imported using the `function_name`, e.g.\n\n```sh\n $ pulumi import aws:lambda/function:Function test_lambda my_test_lambda_function\n```\n\n ", + "description": "Provides a Lambda Function resource. Lambda allows you to trigger execution of code in response to events in AWS, enabling serverless backend solutions. The Lambda Function itself includes source code and runtime configuration.\n\nFor information about Lambda and how to use it, see [What is AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)\n\n\u003e To give an external source (like a CloudWatch Event Rule, SNS, or S3) permission to access the Lambda function, use the `aws.lambda.Permission` resource. See [Lambda ****Permission Model][4] for more details. On the other hand, the `role` argument of this resource is the function's execution role for identity and access to AWS services and resources.\n\nAWS Lambda expects source code to be provided as a deployment package whose structure varies depending on which `runtime` is in use. See [Runtimes](https://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html#SSS-CreateFunction-request-Runtime) for the valid values of `runtime`. The expected structure of the deployment package can be found in [the AWS Lambda documentation for each runtime](https://docs.aws.amazon.com/lambda/latest/dg/deployment-package-v2.html).\nOnce you have created your deployment package you can specify it either directly as a local file (using the `filename` argument) or indirectly via Amazon S3 (using the `s3_bucket`, `s3_key` and `s3_object_version` arguments). When providing the deployment package via S3 it may be useful to use the `aws.s3.BucketObject` resource to upload it.\nFor larger deployment packages it is recommended by Amazon to upload via S3, since the S3 API has better support for uploading large files efficiently.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic Example\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst iamForLambda = new aws.iam.Role(\"iamForLambda\", {assumeRolePolicy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"lambda.amazonaws.com\"\n },\n \"Effect\": \"Allow\",\n \"Sid\": \"\"\n }\n ]\n}\n`});\nconst testLambda = new aws.lambda.Function(\"testLambda\", {\n code: new pulumi.asset.FileArchive(\"lambda_function_payload.zip\"),\n role: iamForLambda.arn,\n handler: \"index.test\",\n runtime: \"nodejs12.x\",\n environment: {\n variables: {\n foo: \"bar\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\niam_for_lambda = aws.iam.Role(\"iamForLambda\", assume_role_policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"lambda.amazonaws.com\"\n },\n \"Effect\": \"Allow\",\n \"Sid\": \"\"\n }\n ]\n}\n\"\"\")\ntest_lambda = aws.lambda_.Function(\"testLambda\",\n code=pulumi.FileArchive(\"lambda_function_payload.zip\"),\n role=iam_for_lambda.arn,\n handler=\"index.test\",\n runtime=\"nodejs12.x\",\n environment=aws.lambda..FunctionEnvironmentArgs(\n variables={\n \"foo\": \"bar\",\n },\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var iamForLambda = new Aws.Iam.Role(\"iamForLambda\", new Aws.Iam.RoleArgs\n {\n AssumeRolePolicy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Action\"\": \"\"sts:AssumeRole\"\",\n \"\"Principal\"\": {\n \"\"Service\"\": \"\"lambda.amazonaws.com\"\"\n },\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Sid\"\": \"\"\"\"\n }\n ]\n}\n\",\n });\n var testLambda = new Aws.Lambda.Function(\"testLambda\", new Aws.Lambda.FunctionArgs\n {\n Code = new FileArchive(\"lambda_function_payload.zip\"),\n Role = iamForLambda.Arn,\n Handler = \"index.test\",\n Runtime = \"nodejs12.x\",\n Environment = new Aws.Lambda.Inputs.FunctionEnvironmentArgs\n {\n Variables = \n {\n { \"foo\", \"bar\" },\n },\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% example %}}\n### Lambda Layers\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleLayerVersion = new aws.lambda.LayerVersion(\"exampleLayerVersion\", {});\n// ... other configuration ...\nconst exampleFunction = new aws.lambda.Function(\"exampleFunction\", {layers: [exampleLayerVersion.arn]});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_layer_version = aws.lambda_.LayerVersion(\"exampleLayerVersion\")\n# ... other configuration ...\nexample_function = aws.lambda_.Function(\"exampleFunction\", layers=[example_layer_version.arn])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleLayerVersion = new Aws.Lambda.LayerVersion(\"exampleLayerVersion\", new Aws.Lambda.LayerVersionArgs\n {\n });\n // ... other configuration ...\n var exampleFunction = new Aws.Lambda.Function(\"exampleFunction\", new Aws.Lambda.FunctionArgs\n {\n Layers = \n {\n exampleLayerVersion.Arn,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/lambda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleLayerVersion, err := lambda.NewLayerVersion(ctx, \"exampleLayerVersion\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = lambda.NewFunction(ctx, \"exampleFunction\", \u0026lambda.FunctionArgs{\n\t\t\tLayers: pulumi.StringArray{\n\t\t\t\texampleLayerVersion.Arn,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Lambda File Systems\n\nLambda File Systems allow you to connect an Amazon Elastic File System (EFS) file system to a Lambda function to share data across function invocations, access existing data including large files, and save function state.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\n// EFS file system\nconst efsForLambda = new aws.efs.FileSystem(\"efsForLambda\", {tags: {\n Name: \"efs_for_lambda\",\n}});\n// Mount target connects the file system to the subnet\nconst alpha = new aws.efs.MountTarget(\"alpha\", {\n fileSystemId: efsForLambda.id,\n subnetId: aws_subnet.subnet_for_lambda.id,\n securityGroups: [aws_security_group.sg_for_lambda.id],\n});\n// EFS access point used by lambda file system\nconst accessPointForLambda = new aws.efs.AccessPoint(\"accessPointForLambda\", {\n fileSystemId: efsForLambda.id,\n rootDirectory: {\n path: \"/lambda\",\n creationInfo: {\n ownerGid: 1000,\n ownerUid: 1000,\n permissions: \"777\",\n },\n },\n posixUser: {\n gid: 1000,\n uid: 1000,\n },\n});\n// A lambda function connected to an EFS file system\n// ... other configuration ...\nconst example = new aws.lambda.Function(\"example\", {\n fileSystemConfig: {\n arn: accessPointForLambda.arn,\n localMountPath: \"/mnt/efs\",\n },\n vpcConfig: {\n subnetIds: [aws_subnet.subnet_for_lambda.id],\n securityGroupIds: [aws_security_group.sg_for_lambda.id],\n },\n}, {\n dependsOn: [alpha],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\n# EFS file system\nefs_for_lambda = aws.efs.FileSystem(\"efsForLambda\", tags={\n \"Name\": \"efs_for_lambda\",\n})\n# Mount target connects the file system to the subnet\nalpha = aws.efs.MountTarget(\"alpha\",\n file_system_id=efs_for_lambda.id,\n subnet_id=aws_subnet[\"subnet_for_lambda\"][\"id\"],\n security_groups=[aws_security_group[\"sg_for_lambda\"][\"id\"]])\n# EFS access point used by lambda file system\naccess_point_for_lambda = aws.efs.AccessPoint(\"accessPointForLambda\",\n file_system_id=efs_for_lambda.id,\n root_directory=aws.efs.AccessPointRootDirectoryArgs(\n path=\"/lambda\",\n creation_info=aws.efs.AccessPointRootDirectoryCreationInfoArgs(\n owner_gid=1000,\n owner_uid=1000,\n permissions=\"777\",\n ),\n ),\n posix_user=aws.efs.AccessPointPosixUserArgs(\n gid=1000,\n uid=1000,\n ))\n# A lambda function connected to an EFS file system\n# ... other configuration ...\nexample = aws.lambda_.Function(\"example\",\n file_system_config=aws.lambda..FunctionFileSystemConfigArgs(\n arn=access_point_for_lambda.arn,\n local_mount_path=\"/mnt/efs\",\n ),\n vpc_config=aws.lambda..FunctionVpcConfigArgs(\n subnet_ids=[aws_subnet[\"subnet_for_lambda\"][\"id\"]],\n security_group_ids=[aws_security_group[\"sg_for_lambda\"][\"id\"]],\n ),\n opts=pulumi.ResourceOptions(depends_on=[alpha]))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n // EFS file system\n var efsForLambda = new Aws.Efs.FileSystem(\"efsForLambda\", new Aws.Efs.FileSystemArgs\n {\n Tags = \n {\n { \"Name\", \"efs_for_lambda\" },\n },\n });\n // Mount target connects the file system to the subnet\n var alpha = new Aws.Efs.MountTarget(\"alpha\", new Aws.Efs.MountTargetArgs\n {\n FileSystemId = efsForLambda.Id,\n SubnetId = aws_subnet.Subnet_for_lambda.Id,\n SecurityGroups = \n {\n aws_security_group.Sg_for_lambda.Id,\n },\n });\n // EFS access point used by lambda file system\n var accessPointForLambda = new Aws.Efs.AccessPoint(\"accessPointForLambda\", new Aws.Efs.AccessPointArgs\n {\n FileSystemId = efsForLambda.Id,\n RootDirectory = new Aws.Efs.Inputs.AccessPointRootDirectoryArgs\n {\n Path = \"/lambda\",\n CreationInfo = new Aws.Efs.Inputs.AccessPointRootDirectoryCreationInfoArgs\n {\n OwnerGid = 1000,\n OwnerUid = 1000,\n Permissions = \"777\",\n },\n },\n PosixUser = new Aws.Efs.Inputs.AccessPointPosixUserArgs\n {\n Gid = 1000,\n Uid = 1000,\n },\n });\n // A lambda function connected to an EFS file system\n // ... other configuration ...\n var example = new Aws.Lambda.Function(\"example\", new Aws.Lambda.FunctionArgs\n {\n FileSystemConfig = new Aws.Lambda.Inputs.FunctionFileSystemConfigArgs\n {\n Arn = accessPointForLambda.Arn,\n LocalMountPath = \"/mnt/efs\",\n },\n VpcConfig = new Aws.Lambda.Inputs.FunctionVpcConfigArgs\n {\n SubnetIds = \n {\n aws_subnet.Subnet_for_lambda.Id,\n },\n SecurityGroupIds = \n {\n aws_security_group.Sg_for_lambda.Id,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n alpha,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/efs\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/lambda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tefsForLambda, err := efs.NewFileSystem(ctx, \"efsForLambda\", \u0026efs.FileSystemArgs{\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Name\": pulumi.String(\"efs_for_lambda\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\talpha, err := efs.NewMountTarget(ctx, \"alpha\", \u0026efs.MountTargetArgs{\n\t\t\tFileSystemId: efsForLambda.ID(),\n\t\t\tSubnetId: pulumi.Any(aws_subnet.Subnet_for_lambda.Id),\n\t\t\tSecurityGroups: pulumi.StringArray{\n\t\t\t\tpulumi.Any(aws_security_group.Sg_for_lambda.Id),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\taccessPointForLambda, err := efs.NewAccessPoint(ctx, \"accessPointForLambda\", \u0026efs.AccessPointArgs{\n\t\t\tFileSystemId: efsForLambda.ID(),\n\t\t\tRootDirectory: \u0026efs.AccessPointRootDirectoryArgs{\n\t\t\t\tPath: pulumi.String(\"/lambda\"),\n\t\t\t\tCreationInfo: \u0026efs.AccessPointRootDirectoryCreationInfoArgs{\n\t\t\t\t\tOwnerGid: pulumi.Int(1000),\n\t\t\t\t\tOwnerUid: pulumi.Int(1000),\n\t\t\t\t\tPermissions: pulumi.String(\"777\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPosixUser: \u0026efs.AccessPointPosixUserArgs{\n\t\t\t\tGid: pulumi.Int(1000),\n\t\t\t\tUid: pulumi.Int(1000),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = lambda.NewFunction(ctx, \"example\", \u0026lambda.FunctionArgs{\n\t\t\tFileSystemConfig: \u0026lambda.FunctionFileSystemConfigArgs{\n\t\t\t\tArn: accessPointForLambda.Arn,\n\t\t\t\tLocalMountPath: pulumi.String(\"/mnt/efs\"),\n\t\t\t},\n\t\t\tVpcConfig: \u0026lambda.FunctionVpcConfigArgs{\n\t\t\t\tSubnetIds: pulumi.StringArray{\n\t\t\t\t\tpulumi.Any(aws_subnet.Subnet_for_lambda.Id),\n\t\t\t\t},\n\t\t\t\tSecurityGroupIds: pulumi.StringArray{\n\t\t\t\t\tpulumi.Any(aws_security_group.Sg_for_lambda.Id),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\talpha,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### CloudWatch Logging and Permissions\n\nFor more information about CloudWatch Logs for Lambda, see the [Lambda User Guide](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions-logs.html).\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst config = new pulumi.Config();\nconst lambdaFunctionName = config.get(\"lambdaFunctionName\") || \"lambda_function_name\";\n// This is to optionally manage the CloudWatch Log Group for the Lambda Function.\n// If skipping this resource configuration, also add \"logs:CreateLogGroup\" to the IAM policy below.\nconst example = new aws.cloudwatch.LogGroup(\"example\", {retentionInDays: 14});\n// See also the following AWS managed policy: AWSLambdaBasicExecutionRole\nconst lambdaLogging = new aws.iam.Policy(\"lambdaLogging\", {\n path: \"/\",\n description: \"IAM policy for logging from a lambda\",\n policy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:PutLogEvents\"\n ],\n \"Resource\": \"arn:aws:logs:*:*:*\",\n \"Effect\": \"Allow\"\n }\n ]\n}\n`,\n});\nconst lambdaLogs = new aws.iam.RolePolicyAttachment(\"lambdaLogs\", {\n role: aws_iam_role.iam_for_lambda.name,\n policyArn: lambdaLogging.arn,\n});\nconst testLambda = new aws.lambda.Function(\"testLambda\", {}, {\n dependsOn: [\n lambdaLogs,\n example,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nconfig = pulumi.Config()\nlambda_function_name = config.get(\"lambdaFunctionName\")\nif lambda_function_name is None:\n lambda_function_name = \"lambda_function_name\"\n# This is to optionally manage the CloudWatch Log Group for the Lambda Function.\n# If skipping this resource configuration, also add \"logs:CreateLogGroup\" to the IAM policy below.\nexample = aws.cloudwatch.LogGroup(\"example\", retention_in_days=14)\n# See also the following AWS managed policy: AWSLambdaBasicExecutionRole\nlambda_logging = aws.iam.Policy(\"lambdaLogging\",\n path=\"/\",\n description=\"IAM policy for logging from a lambda\",\n policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:PutLogEvents\"\n ],\n \"Resource\": \"arn:aws:logs:*:*:*\",\n \"Effect\": \"Allow\"\n }\n ]\n}\n\"\"\")\nlambda_logs = aws.iam.RolePolicyAttachment(\"lambdaLogs\",\n role=aws_iam_role[\"iam_for_lambda\"][\"name\"],\n policy_arn=lambda_logging.arn)\ntest_lambda = aws.lambda_.Function(\"testLambda\", opts=pulumi.ResourceOptions(depends_on=[\n lambda_logs,\n example,\n ]))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var config = new Config();\n var lambdaFunctionName = config.Get(\"lambdaFunctionName\") ?? \"lambda_function_name\";\n // This is to optionally manage the CloudWatch Log Group for the Lambda Function.\n // If skipping this resource configuration, also add \"logs:CreateLogGroup\" to the IAM policy below.\n var example = new Aws.CloudWatch.LogGroup(\"example\", new Aws.CloudWatch.LogGroupArgs\n {\n RetentionInDays = 14,\n });\n // See also the following AWS managed policy: AWSLambdaBasicExecutionRole\n var lambdaLogging = new Aws.Iam.Policy(\"lambdaLogging\", new Aws.Iam.PolicyArgs\n {\n Path = \"/\",\n Description = \"IAM policy for logging from a lambda\",\n Policy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Action\"\": [\n \"\"logs:CreateLogGroup\"\",\n \"\"logs:CreateLogStream\"\",\n \"\"logs:PutLogEvents\"\"\n ],\n \"\"Resource\"\": \"\"arn:aws:logs:*:*:*\"\",\n \"\"Effect\"\": \"\"Allow\"\"\n }\n ]\n}\n\",\n });\n var lambdaLogs = new Aws.Iam.RolePolicyAttachment(\"lambdaLogs\", new Aws.Iam.RolePolicyAttachmentArgs\n {\n Role = aws_iam_role.Iam_for_lambda.Name,\n PolicyArn = lambdaLogging.Arn,\n });\n var testLambda = new Aws.Lambda.Function(\"testLambda\", new Aws.Lambda.FunctionArgs\n {\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n lambdaLogs,\n example,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/cloudwatch\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/lambda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcfg := config.New(ctx, \"\")\n\t\tlambdaFunctionName := \"lambda_function_name\"\n\t\tif param := cfg.Get(\"lambdaFunctionName\"); param != \"\" {\n\t\t\tlambdaFunctionName = param\n\t\t}\n\t\texample, err := cloudwatch.NewLogGroup(ctx, \"example\", \u0026cloudwatch.LogGroupArgs{\n\t\t\tRetentionInDays: pulumi.Int(14),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tlambdaLogging, err := iam.NewPolicy(ctx, \"lambdaLogging\", \u0026iam.PolicyArgs{\n\t\t\tPath: pulumi.String(\"/\"),\n\t\t\tDescription: pulumi.String(\"IAM policy for logging from a lambda\"),\n\t\t\tPolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Action\\\": [\\n\", \" \\\"logs:CreateLogGroup\\\",\\n\", \" \\\"logs:CreateLogStream\\\",\\n\", \" \\\"logs:PutLogEvents\\\"\\n\", \" ],\\n\", \" \\\"Resource\\\": \\\"arn:aws:logs:*:*:*\\\",\\n\", \" \\\"Effect\\\": \\\"Allow\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tlambdaLogs, err := iam.NewRolePolicyAttachment(ctx, \"lambdaLogs\", \u0026iam.RolePolicyAttachmentArgs{\n\t\t\tRole: pulumi.Any(aws_iam_role.Iam_for_lambda.Name),\n\t\t\tPolicyArn: lambdaLogging.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = lambda.NewFunction(ctx, \"testLambda\", nil, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tlambdaLogs,\n\t\t\texample,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Lambda with Targetted Architecture\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst iamForLambda = new aws.iam.Role(\"iamForLambda\", {assumeRolePolicy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"lambda.amazonaws.com\"\n },\n \"Effect\": \"Allow\",\n \"Sid\": \"\"\n }\n ]\n}\n`});\nconst testLambda = new aws.lambda.Function(\"testLambda\", {\n code: new pulumi.asset.FileArchive(\"lambda_function_payload.zip\"),\n role: iamForLambda.arn,\n handler: \"index.test\",\n runtime: \"nodejs12.x\",\n architectures: [\"arm64\"],\n environment: {\n variables: {\n foo: \"bar\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\niam_for_lambda = aws.iam.Role(\"iamForLambda\", assume_role_policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"lambda.amazonaws.com\"\n },\n \"Effect\": \"Allow\",\n \"Sid\": \"\"\n }\n ]\n}\n\"\"\")\ntest_lambda = aws.lambda_.Function(\"testLambda\",\n code=pulumi.FileArchive(\"lambda_function_payload.zip\"),\n role=iam_for_lambda.arn,\n handler=\"index.test\",\n runtime=\"nodejs12.x\",\n architectures=[\"arm64\"],\n environment=aws.lambda..FunctionEnvironmentArgs(\n variables={\n \"foo\": \"bar\",\n },\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var iamForLambda = new Aws.Iam.Role(\"iamForLambda\", new Aws.Iam.RoleArgs\n {\n AssumeRolePolicy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Action\"\": \"\"sts:AssumeRole\"\",\n \"\"Principal\"\": {\n \"\"Service\"\": \"\"lambda.amazonaws.com\"\"\n },\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Sid\"\": \"\"\"\"\n }\n ]\n}\n\",\n });\n var testLambda = new Aws.Lambda.Function(\"testLambda\", new Aws.Lambda.FunctionArgs\n {\n Code = new FileArchive(\"lambda_function_payload.zip\"),\n Role = iamForLambda.Arn,\n Handler = \"index.test\",\n Runtime = \"nodejs12.x\",\n Architectures = \n {\n \"arm64\",\n },\n Environment = new Aws.Lambda.Inputs.FunctionEnvironmentArgs\n {\n Variables = \n {\n { \"foo\", \"bar\" },\n },\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nLambda Functions can be imported using the `function_name`, e.g.\n\n```sh\n $ pulumi import aws:lambda/function:Function test_lambda my_test_lambda_function\n```\n\n ", "inputProperties": { + "architectures": { + "description": "Instruction set architecture for your Lambda function. Valid values are `[\"x86_64\"]` and `[\"arm64\"]`. Default is `[\"x86_64\"]`. Removing this attribute, function's architecture stay the same.\n", + "items": { + "type": "string" + }, + "type": "array" + }, "code": { "$ref": "pulumi.json#/Archive", "description": "Path to the function's deployment package within the local filesystem. Conflicts with `image_uri`, `s3_bucket`, `s3_key`, and `s3_object_version`.\n" @@ -93146,6 +96000,13 @@ } }, "properties": { + "architectures": { + "description": "Instruction set architecture for your Lambda function. Valid values are `[\"x86_64\"]` and `[\"arm64\"]`. Default is `[\"x86_64\"]`. Removing this attribute, function's architecture stay the same.\n", + "items": { + "type": "string" + }, + "type": "array" + }, "arn": { "description": "Amazon Resource Name (ARN) of the Amazon EFS Access Point that provides access to the file system.\n", "type": "string" @@ -93298,6 +96159,7 @@ } }, "required": [ + "architectures", "arn", "name", "invokeArn", @@ -93318,6 +96180,13 @@ "stateInputs": { "description": "Input properties used for looking up and filtering Function resources.\n", "properties": { + "architectures": { + "description": "Instruction set architecture for your Lambda function. Valid values are `[\"x86_64\"]` and `[\"arm64\"]`. Default is `[\"x86_64\"]`. Removing this attribute, function's architecture stay the same.\n", + "items": { + "type": "string" + }, + "type": "array" + }, "arn": { "description": "Amazon Resource Name (ARN) of the Amazon EFS Access Point that provides access to the file system.\n", "type": "string" @@ -93561,12 +96430,19 @@ } }, "aws:lambda/layerVersion:LayerVersion": { - "description": "Provides a Lambda Layer Version resource. Lambda Layers allow you to reuse shared bits of code across multiple lambda functions.\n\nFor information about Lambda Layers and how to use them, see [AWS Lambda Layers](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst lambdaLayer = new aws.lambda.LayerVersion(\"lambda_layer\", {\n compatibleRuntimes: [\"nodejs12.x\"],\n code: new pulumi.asset.FileArchive(\"lambda_layer_payload.zip\"),\n layerName: \"lambda_layer_name\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nlambda_layer = aws.lambda_.LayerVersion(\"lambdaLayer\",\n compatible_runtimes=[\"nodejs12.x\"],\n code=pulumi.FileArchive(\"lambda_layer_payload.zip\"),\n layer_name=\"lambda_layer_name\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var lambdaLayer = new Aws.Lambda.LayerVersion(\"lambdaLayer\", new Aws.Lambda.LayerVersionArgs\n {\n CompatibleRuntimes = \n {\n \"nodejs12.x\",\n },\n Code = new FileArchive(\"lambda_layer_payload.zip\"),\n LayerName = \"lambda_layer_name\",\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n## Specifying the Deployment Package\n\nAWS Lambda Layers expect source code to be provided as a deployment package whose structure varies depending on which `compatible_runtimes` this layer specifies.\nSee [Runtimes](https://docs.aws.amazon.com/lambda/latest/dg/API_PublishLayerVersion.html#SSS-PublishLayerVersion-request-CompatibleRuntimes) for the valid values of `compatible_runtimes`.\n\nOnce you have created your deployment package you can specify it either directly as a local file (using the `filename` argument) or\nindirectly via Amazon S3 (using the `s3_bucket`, `s3_key` and `s3_object_version` arguments). When providing the deployment\npackage via S3 it may be useful to use the `aws.s3.BucketObject` resource to upload it.\n\nFor larger deployment packages it is recommended by Amazon to upload via S3, since the S3 API has better support for uploading\nlarge files efficiently.\n\n\n## Import\n\nLambda Layers can be imported using `arn`.\n\n```sh\n $ pulumi import aws:lambda/layerVersion:LayerVersion \\\n```\n\n\n\n\n\n aws_lambda_layer_version.test_layer \\\n\n\n\n arn:aws:lambda:_REGION_:_ACCOUNT_ID_:layer:_LAYER_NAME_:_LAYER_VERSION_ ", + "description": "Provides a Lambda Layer Version resource. Lambda Layers allow you to reuse shared bits of code across multiple lambda functions.\n\nFor information about Lambda Layers and how to use them, see [AWS Lambda Layers](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic Example\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst lambdaLayer = new aws.lambda.LayerVersion(\"lambda_layer\", {\n compatibleRuntimes: [\"nodejs12.x\"],\n code: new pulumi.asset.FileArchive(\"lambda_layer_payload.zip\"),\n layerName: \"lambda_layer_name\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nlambda_layer = aws.lambda_.LayerVersion(\"lambdaLayer\",\n compatible_runtimes=[\"nodejs12.x\"],\n code=pulumi.FileArchive(\"lambda_layer_payload.zip\"),\n layer_name=\"lambda_layer_name\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var lambdaLayer = new Aws.Lambda.LayerVersion(\"lambdaLayer\", new Aws.Lambda.LayerVersionArgs\n {\n CompatibleRuntimes = \n {\n \"nodejs12.x\",\n },\n Code = new FileArchive(\"lambda_layer_payload.zip\"),\n LayerName = \"lambda_layer_name\",\n });\n }\n\n}\n```\n{{% /example %}}\n{{% example %}}\n### Lambda Layer with Compatible Architectures\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst lambdaLayer = new aws.lambda.LayerVersion(\"lambda_layer\", {\n compatibleArchitectures: [\n \"arm64\",\n \"x86_64\",\n ],\n compatibleRuntimes: [\"nodejs12.x\"],\n code: new pulumi.asset.FileArchive(\"lambda_layer_payload.zip\"),\n layerName: \"lambda_layer_name\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nlambda_layer = aws.lambda_.LayerVersion(\"lambdaLayer\",\n compatible_architectures=[\n \"arm64\",\n \"x86_64\",\n ],\n compatible_runtimes=[\"nodejs12.x\"],\n code=pulumi.FileArchive(\"lambda_layer_payload.zip\"),\n layer_name=\"lambda_layer_name\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var lambdaLayer = new Aws.Lambda.LayerVersion(\"lambdaLayer\", new Aws.Lambda.LayerVersionArgs\n {\n CompatibleArchitectures = \n {\n \"arm64\",\n \"x86_64\",\n },\n CompatibleRuntimes = \n {\n \"nodejs12.x\",\n },\n Code = new FileArchive(\"lambda_layer_payload.zip\"),\n LayerName = \"lambda_layer_name\",\n });\n }\n\n}\n```\n\n{{% /example %}}\n{{% /examples %}}\n## Specifying the Deployment Package\n\nAWS Lambda Layers expect source code to be provided as a deployment package whose structure varies depending on which `compatible_runtimes` this layer specifies.\nSee [Runtimes](https://docs.aws.amazon.com/lambda/latest/dg/API_PublishLayerVersion.html#SSS-PublishLayerVersion-request-CompatibleRuntimes) for the valid values of `compatible_runtimes`.\n\nOnce you have created your deployment package you can specify it either directly as a local file (using the `filename` argument) or\nindirectly via Amazon S3 (using the `s3_bucket`, `s3_key` and `s3_object_version` arguments). When providing the deployment\npackage via S3 it may be useful to use the `aws.s3.BucketObject` resource to upload it.\n\nFor larger deployment packages it is recommended by Amazon to upload via S3, since the S3 API has better support for uploading\nlarge files efficiently.\n\n\n## Import\n\nLambda Layers can be imported using `arn`.\n\n```sh\n $ pulumi import aws:lambda/layerVersion:LayerVersion \\\n```\n\n\n\n\n\n aws_lambda_layer_version.test_layer \\\n\n\n\n arn:aws:lambda:_REGION_:_ACCOUNT_ID_:layer:_LAYER_NAME_:_LAYER_VERSION_ ", "inputProperties": { "code": { "$ref": "pulumi.json#/Archive", "description": "The path to the function's deployment package within the local filesystem. If defined, The `s3_`-prefixed options cannot be used.\n" }, + "compatibleArchitectures": { + "description": "A list of [Architectures](https://docs.aws.amazon.com/lambda/latest/dg/API_PublishLayerVersion.html#SSS-PublishLayerVersion-request-CompatibleArchitectures) this layer is compatible with. Currently `x86_64` and `arm64` can be specified.\n", + "items": { + "type": "string" + }, + "type": "array" + }, "compatibleRuntimes": { "description": "A list of [Runtimes](https://docs.aws.amazon.com/lambda/latest/dg/API_PublishLayerVersion.html#SSS-PublishLayerVersion-request-CompatibleRuntimes) this layer is compatible with. Up to 5 runtimes can be specified.\n", "items": { @@ -93612,6 +96488,13 @@ "$ref": "pulumi.json#/Archive", "description": "The path to the function's deployment package within the local filesystem. If defined, The `s3_`-prefixed options cannot be used.\n" }, + "compatibleArchitectures": { + "description": "A list of [Architectures](https://docs.aws.amazon.com/lambda/latest/dg/API_PublishLayerVersion.html#SSS-PublishLayerVersion-request-CompatibleArchitectures) this layer is compatible with. Currently `x86_64` and `arm64` can be specified.\n", + "items": { + "type": "string" + }, + "type": "array" + }, "compatibleRuntimes": { "description": "A list of [Runtimes](https://docs.aws.amazon.com/lambda/latest/dg/API_PublishLayerVersion.html#SSS-PublishLayerVersion-request-CompatibleRuntimes) this layer is compatible with. Up to 5 runtimes can be specified.\n", "items": { @@ -93668,7 +96551,7 @@ "type": "integer" }, "version": { - "description": "This Lamba Layer version.\n", + "description": "This Lambda Layer version.\n", "type": "string" } }, @@ -93697,6 +96580,13 @@ "$ref": "pulumi.json#/Archive", "description": "The path to the function's deployment package within the local filesystem. If defined, The `s3_`-prefixed options cannot be used.\n" }, + "compatibleArchitectures": { + "description": "A list of [Architectures](https://docs.aws.amazon.com/lambda/latest/dg/API_PublishLayerVersion.html#SSS-PublishLayerVersion-request-CompatibleArchitectures) this layer is compatible with. Currently `x86_64` and `arm64` can be specified.\n", + "items": { + "type": "string" + }, + "type": "array" + }, "compatibleRuntimes": { "description": "A list of [Runtimes](https://docs.aws.amazon.com/lambda/latest/dg/API_PublishLayerVersion.html#SSS-PublishLayerVersion-request-CompatibleRuntimes) this layer is compatible with. Up to 5 runtimes can be specified.\n", "items": { @@ -93753,7 +96643,7 @@ "type": "integer" }, "version": { - "description": "This Lamba Layer version.\n", + "description": "This Lambda Layer version.\n", "type": "string" } }, @@ -94701,11 +97591,11 @@ "additionalProperties": { "type": "string" }, - "description": "Map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", + "description": "Map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", "type": "object" }, "targetType": { - "description": "Type of target that you must specify when registering targets with this target group. The possible values are `instance` (targets are specified by instance ID) or `ip` (targets are specified by IP address) or `lambda` (targets are specified by lambda arn). The default is `instance`. Note that you can't specify targets for a target group using both instance IDs and IP addresses. If the target type is `ip`, specify IP addresses from the subnets of the virtual private cloud (VPC) for the target group, the RFC 1918 range (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16), and the RFC 6598 range (100.64.0.0/10). You can't specify publicly routable IP addresses.\n", + "description": "Type of target that you must specify when registering targets with this target group. See [doc](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateTargetGroup.html) for supported values. The default is `instance`.\n", "type": "string" }, "vpcId": { @@ -94778,7 +97668,7 @@ "additionalProperties": { "type": "string" }, - "description": "Map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", + "description": "Map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", "type": "object" }, "tagsAll": { @@ -94789,7 +97679,7 @@ "type": "object" }, "targetType": { - "description": "Type of target that you must specify when registering targets with this target group. The possible values are `instance` (targets are specified by instance ID) or `ip` (targets are specified by IP address) or `lambda` (targets are specified by lambda arn). The default is `instance`. Note that you can't specify targets for a target group using both instance IDs and IP addresses. If the target type is `ip`, specify IP addresses from the subnets of the virtual private cloud (VPC) for the target group, the RFC 1918 range (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16), and the RFC 6598 range (100.64.0.0/10). You can't specify publicly routable IP addresses.\n", + "description": "Type of target that you must specify when registering targets with this target group. See [doc](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateTargetGroup.html) for supported values. The default is `instance`.\n", "type": "string" }, "vpcId": { @@ -94875,7 +97765,7 @@ "additionalProperties": { "type": "string" }, - "description": "Map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", + "description": "Map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n", "type": "object" }, "tagsAll": { @@ -94886,7 +97776,7 @@ "type": "object" }, "targetType": { - "description": "Type of target that you must specify when registering targets with this target group. The possible values are `instance` (targets are specified by instance ID) or `ip` (targets are specified by IP address) or `lambda` (targets are specified by lambda arn). The default is `instance`. Note that you can't specify targets for a target group using both instance IDs and IP addresses. If the target type is `ip`, specify IP addresses from the subnets of the virtual private cloud (VPC) for the target group, the RFC 1918 range (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16), and the RFC 6598 range (100.64.0.0/10). You can't specify publicly routable IP addresses.\n", + "description": "Type of target that you must specify when registering targets with this target group. See [doc](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateTargetGroup.html) for supported values. The default is `instance`.\n", "type": "string" }, "vpcId": { @@ -96217,7 +99107,7 @@ } }, "aws:lightsail/keyPair:KeyPair": { - "description": "Provides a Lightsail Key Pair, for use with Lightsail Instances. These key pairs\nare separate from EC2 Key Pairs, and must be created or imported for use with\nLightsail.\n\n\u003e **Note:** Lightsail is currently only supported in a limited number of AWS Regions, please see [\"Regions and Availability Zones in Amazon Lightsail\"](https://lightsail.aws.amazon.com/ls/docs/overview/article/understanding-regions-and-availability-zones-in-amazon-lightsail) for more details\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Create New Key Pair\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\n// Create a new Lightsail Key Pair\nconst lgKeyPair = new aws.lightsail.KeyPair(\"lg_key_pair\", {});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\n# Create a new Lightsail Key Pair\nlg_key_pair = aws.lightsail.KeyPair(\"lgKeyPair\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n // Create a new Lightsail Key Pair\n var lgKeyPair = new Aws.LightSail.KeyPair(\"lgKeyPair\", new Aws.LightSail.KeyPairArgs\n {\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/lightsail\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := lightsail.NewKeyPair(ctx, \"lgKeyPair\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Create New Key Pair with PGP Encrypted Private Key\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst lgKeyPair = new aws.lightsail.KeyPair(\"lg_key_pair\", {\n pgpKey: \"keybase:keybaseusername\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nlg_key_pair = aws.lightsail.KeyPair(\"lgKeyPair\", pgp_key=\"keybase:keybaseusername\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var lgKeyPair = new Aws.LightSail.KeyPair(\"lgKeyPair\", new Aws.LightSail.KeyPairArgs\n {\n PgpKey = \"keybase:keybaseusername\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/lightsail\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := lightsail.NewKeyPair(ctx, \"lgKeyPair\", \u0026lightsail.KeyPairArgs{\n\t\t\tPgpKey: pulumi.String(\"keybase:keybaseusername\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Existing Public Key Import\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst lgKeyPair = new aws.lightsail.KeyPair(\"lgKeyPair\", {publicKey: fs.readFileSync(\"~/.ssh/id_rsa.pub\")});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nlg_key_pair = aws.lightsail.KeyPair(\"lgKeyPair\", public_key=(lambda path: open(path).read())(\"~/.ssh/id_rsa.pub\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var lgKeyPair = new Aws.LightSail.KeyPair(\"lgKeyPair\", new Aws.LightSail.KeyPairArgs\n {\n PublicKey = File.ReadAllText(\"~/.ssh/id_rsa.pub\"),\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nLightsail Key Pairs cannot be imported, because the private and public key are only available on initial creation. ", + "description": "Provides a Lightsail Key Pair, for use with Lightsail Instances. These key pairs\nare separate from EC2 Key Pairs, and must be created or imported for use with\nLightsail.\n\n\u003e **Note:** Lightsail is currently only supported in a limited number of AWS Regions, please see [\"Regions and Availability Zones in Amazon Lightsail\"](https://lightsail.aws.amazon.com/ls/docs/overview/article/understanding-regions-and-availability-zones-in-amazon-lightsail) for more details\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Create New Key Pair\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\n// Create a new Lightsail Key Pair\nconst lgKeyPair = new aws.lightsail.KeyPair(\"lg_key_pair\", {});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\n# Create a new Lightsail Key Pair\nlg_key_pair = aws.lightsail.KeyPair(\"lgKeyPair\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n // Create a new Lightsail Key Pair\n var lgKeyPair = new Aws.LightSail.KeyPair(\"lgKeyPair\", new Aws.LightSail.KeyPairArgs\n {\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/lightsail\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := lightsail.NewKeyPair(ctx, \"lgKeyPair\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Create New Key Pair with PGP Encrypted Private Key\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst lgKeyPair = new aws.lightsail.KeyPair(\"lg_key_pair\", {\n pgpKey: \"keybase:keybaseusername\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nlg_key_pair = aws.lightsail.KeyPair(\"lgKeyPair\", pgp_key=\"keybase:keybaseusername\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var lgKeyPair = new Aws.LightSail.KeyPair(\"lgKeyPair\", new Aws.LightSail.KeyPairArgs\n {\n PgpKey = \"keybase:keybaseusername\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/lightsail\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := lightsail.NewKeyPair(ctx, \"lgKeyPair\", \u0026lightsail.KeyPairArgs{\n\t\t\tPgpKey: pulumi.String(\"keybase:keybaseusername\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Existing Public Key Import\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst lgKeyPair = new aws.lightsail.KeyPair(\"lgKeyPair\", {publicKey: fs.readFileSync(\"~/.ssh/id_rsa.pub\")});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nlg_key_pair = aws.lightsail.KeyPair(\"lgKeyPair\", public_key=(lambda path: open(path).read())(\"~/.ssh/id_rsa.pub\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var lgKeyPair = new Aws.LightSail.KeyPair(\"lgKeyPair\", new Aws.LightSail.KeyPairArgs\n {\n PublicKey = File.ReadAllText(\"~/.ssh/id_rsa.pub\"),\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/lightsail\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := lightsail.NewKeyPair(ctx, \"lgKeyPair\", \u0026lightsail.KeyPairArgs{\n\t\t\tPublicKey: readFileOrPanic(\"~/.ssh/id_rsa.pub\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nLightsail Key Pairs cannot be imported, because the private and public key are only available on initial creation. ", "inputProperties": { "name": { "description": "The name of the Lightsail Key Pair. If omitted, a unique\nname will be generated by this provider\n", @@ -98357,6 +101247,10 @@ "zookeeperConnectString": { "description": "A comma separated list of one or more hostname:port pairs to use to connect to the Apache Zookeeper cluster. The returned values are sorted alphbetically. The AWS API may not return all endpoints, so this value is not guaranteed to be stable across applies.\n", "type": "string" + }, + "zookeeperConnectStringTls": { + "description": "A comma separated list of one or more hostname:port pairs to use to connect to the Apache Zookeeper cluster via TLS. The returned values are sorted alphbetically. The AWS API may not return all endpoints, so this value is not guaranteed to be stable across applies.\n", + "type": "string" } }, "required": [ @@ -98371,7 +101265,8 @@ "kafkaVersion", "numberOfBrokerNodes", "tagsAll", - "zookeeperConnectString" + "zookeeperConnectString", + "zookeeperConnectStringTls" ], "requiredInputs": [ "brokerNodeGroupInfo", @@ -98462,6 +101357,10 @@ "zookeeperConnectString": { "description": "A comma separated list of one or more hostname:port pairs to use to connect to the Apache Zookeeper cluster. The returned values are sorted alphbetically. The AWS API may not return all endpoints, so this value is not guaranteed to be stable across applies.\n", "type": "string" + }, + "zookeeperConnectStringTls": { + "description": "A comma separated list of one or more hostname:port pairs to use to connect to the Apache Zookeeper cluster via TLS. The returned values are sorted alphbetically. The AWS API may not return all endpoints, so this value is not guaranteed to be stable across applies.\n", + "type": "string" } }, "type": "object" @@ -101038,7 +103937,7 @@ } }, "aws:networkfirewall/ruleGroup:RuleGroup": { - "description": "Provides an AWS Network Firewall Rule Group Resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Stateful Inspection for denying access to a domain\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.networkfirewall.RuleGroup(\"example\", {\n capacity: 100,\n ruleGroup: {\n rulesSource: {\n rulesSourceList: {\n generatedRulesType: \"DENYLIST\",\n targetTypes: [\"HTTP_HOST\"],\n targets: [\"test.example.com\"],\n },\n },\n },\n tags: {\n Tag1: \"Value1\",\n Tag2: \"Value2\",\n },\n type: \"STATEFUL\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.networkfirewall.RuleGroup(\"example\",\n capacity=100,\n rule_group=aws.networkfirewall.RuleGroupRuleGroupArgs(\n rules_source=aws.networkfirewall.RuleGroupRuleGroupRulesSourceArgs(\n rules_source_list=aws.networkfirewall.RuleGroupRuleGroupRulesSourceRulesSourceListArgs(\n generated_rules_type=\"DENYLIST\",\n target_types=[\"HTTP_HOST\"],\n targets=[\"test.example.com\"],\n ),\n ),\n ),\n tags={\n \"Tag1\": \"Value1\",\n \"Tag2\": \"Value2\",\n },\n type=\"STATEFUL\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.NetworkFirewall.RuleGroup(\"example\", new Aws.NetworkFirewall.RuleGroupArgs\n {\n Capacity = 100,\n RuleGroup = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupArgs\n {\n RulesSource = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRulesSourceArgs\n {\n RulesSourceList = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRulesSourceRulesSourceListArgs\n {\n GeneratedRulesType = \"DENYLIST\",\n TargetTypes = \n {\n \"HTTP_HOST\",\n },\n Targets = \n {\n \"test.example.com\",\n },\n },\n },\n },\n Tags = \n {\n { \"Tag1\", \"Value1\" },\n { \"Tag2\", \"Value2\" },\n },\n Type = \"STATEFUL\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/networkfirewall\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := networkfirewall.NewRuleGroup(ctx, \"example\", \u0026networkfirewall.RuleGroupArgs{\n\t\t\tCapacity: pulumi.Int(100),\n\t\t\tRuleGroup: \u0026networkfirewall.RuleGroupRuleGroupArgs{\n\t\t\t\tRulesSource: \u0026networkfirewall.RuleGroupRuleGroupRulesSourceArgs{\n\t\t\t\t\tRulesSourceList: \u0026networkfirewall.RuleGroupRuleGroupRulesSourceRulesSourceListArgs{\n\t\t\t\t\t\tGeneratedRulesType: pulumi.String(\"DENYLIST\"),\n\t\t\t\t\t\tTargetTypes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"HTTP_HOST\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tTargets: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"test.example.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Tag1\": pulumi.String(\"Value1\"),\n\t\t\t\t\"Tag2\": pulumi.String(\"Value2\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"STATEFUL\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Stateful Inspection for permitting packets from a source IP address\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst ips = [\n \"1.1.1.1/32\",\n \"1.0.0.1/32\",\n];\nconst example = new aws.networkfirewall.RuleGroup(\"example\", {\n capacity: 50,\n description: \"Permits http traffic from source\",\n type: \"STATEFUL\",\n ruleGroup: {\n rulesSource: {\n dynamic: [{\n forEach: ips,\n content: [{\n action: \"PASS\",\n header: [{\n destination: \"ANY\",\n destinationPort: \"ANY\",\n protocol: \"HTTP\",\n direction: \"ANY\",\n sourcePort: \"ANY\",\n source: stateful_rule.value,\n }],\n ruleOption: [{\n keyword: \"sid:1\",\n }],\n }],\n }],\n },\n },\n tags: {\n Name: \"permit HTTP from source\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nips = [\n \"1.1.1.1/32\",\n \"1.0.0.1/32\",\n]\nexample = aws.networkfirewall.RuleGroup(\"example\",\n capacity=50,\n description=\"Permits http traffic from source\",\n type=\"STATEFUL\",\n rule_group=aws.networkfirewall.RuleGroupRuleGroupArgs(\n rules_source=aws.networkfirewall.RuleGroupRuleGroupRulesSourceArgs(\n dynamic=[{\n \"forEach\": ips,\n \"content\": [{\n \"action\": \"PASS\",\n \"header\": [{\n \"destination\": \"ANY\",\n \"destinationPort\": \"ANY\",\n \"protocol\": \"HTTP\",\n \"direction\": \"ANY\",\n \"sourcePort\": \"ANY\",\n \"source\": stateful_rule[\"value\"],\n }],\n \"ruleOption\": [{\n \"keyword\": \"sid:1\",\n }],\n }],\n }],\n ),\n ),\n tags={\n \"Name\": \"permit HTTP from source\",\n })\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var ips = \n {\n \"1.1.1.1/32\",\n \"1.0.0.1/32\",\n };\n var example = new Aws.NetworkFirewall.RuleGroup(\"example\", new Aws.NetworkFirewall.RuleGroupArgs\n {\n Capacity = 50,\n Description = \"Permits http traffic from source\",\n Type = \"STATEFUL\",\n RuleGroup = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupArgs\n {\n RulesSource = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRulesSourceArgs\n {\n Dynamic = \n {\n \n {\n { \"forEach\", ips },\n { \"content\", \n {\n \n {\n { \"action\", \"PASS\" },\n { \"header\", \n {\n \n {\n { \"destination\", \"ANY\" },\n { \"destinationPort\", \"ANY\" },\n { \"protocol\", \"HTTP\" },\n { \"direction\", \"ANY\" },\n { \"sourcePort\", \"ANY\" },\n { \"source\", stateful_rule.Value },\n },\n } },\n { \"ruleOption\", \n {\n \n {\n { \"keyword\", \"sid:1\" },\n },\n } },\n },\n } },\n },\n },\n },\n },\n Tags = \n {\n { \"Name\", \"permit HTTP from source\" },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/networkfirewall\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tips := []string{\n\t\t\t\"1.1.1.1/32\",\n\t\t\t\"1.0.0.1/32\",\n\t\t}\n\t\t_, err := networkfirewall.NewRuleGroup(ctx, \"example\", \u0026networkfirewall.RuleGroupArgs{\n\t\t\tCapacity: pulumi.Int(50),\n\t\t\tDescription: pulumi.String(\"Permits http traffic from source\"),\n\t\t\tType: pulumi.String(\"STATEFUL\"),\n\t\t\tRuleGroup: \u0026networkfirewall.RuleGroupRuleGroupArgs{\n\t\t\t\tRulesSource: \u0026networkfirewall.RuleGroupRuleGroupRulesSourceArgs{\n\t\t\t\t\tDynamic: []map[string]interface{}{\n\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\"forEach\": ips,\n\t\t\t\t\t\t\t\"content\": []map[string]interface{}{\n\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\"action\": \"PASS\",\n\t\t\t\t\t\t\t\t\t\"header\": []map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\t\"destination\": \"ANY\",\n\t\t\t\t\t\t\t\t\t\t\t\"destinationPort\": \"ANY\",\n\t\t\t\t\t\t\t\t\t\t\t\"protocol\": \"HTTP\",\n\t\t\t\t\t\t\t\t\t\t\t\"direction\": \"ANY\",\n\t\t\t\t\t\t\t\t\t\t\t\"sourcePort\": \"ANY\",\n\t\t\t\t\t\t\t\t\t\t\t\"source\": stateful_rule.Value,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"ruleOption\": []map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\t\"keyword\": \"sid:1\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Name\": pulumi.String(\"permit HTTP from source\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Stateful Inspection for blocking packets from going to an intended destination\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.networkfirewall.RuleGroup(\"example\", {\n capacity: 100,\n ruleGroup: {\n rulesSource: {\n statefulRules: [{\n action: \"DROP\",\n header: {\n destination: \"124.1.1.24/32\",\n destinationPort: \"53\",\n direction: \"ANY\",\n protocol: \"TCP\",\n source: \"1.2.3.4/32\",\n sourcePort: \"53\",\n },\n ruleOptions: [{\n keyword: \"sid:1\",\n }],\n }],\n },\n },\n tags: {\n Tag1: \"Value1\",\n Tag2: \"Value2\",\n },\n type: \"STATEFUL\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.networkfirewall.RuleGroup(\"example\",\n capacity=100,\n rule_group=aws.networkfirewall.RuleGroupRuleGroupArgs(\n rules_source=aws.networkfirewall.RuleGroupRuleGroupRulesSourceArgs(\n stateful_rule=[{\n \"action\": \"DROP\",\n \"header\": {\n \"destination\": \"124.1.1.24/32\",\n \"destinationPort\": 53,\n \"direction\": \"ANY\",\n \"protocol\": \"TCP\",\n \"source\": \"1.2.3.4/32\",\n \"sourcePort\": 53,\n },\n \"ruleOption\": [{\n \"keyword\": \"sid:1\",\n }],\n }],\n ),\n ),\n tags={\n \"Tag1\": \"Value1\",\n \"Tag2\": \"Value2\",\n },\n type=\"STATEFUL\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.NetworkFirewall.RuleGroup(\"example\", new Aws.NetworkFirewall.RuleGroupArgs\n {\n Capacity = 100,\n RuleGroup = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupArgs\n {\n RulesSource = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRulesSourceArgs\n {\n StatefulRule = \n {\n \n {\n { \"action\", \"DROP\" },\n { \"header\", \n {\n { \"destination\", \"124.1.1.24/32\" },\n { \"destinationPort\", 53 },\n { \"direction\", \"ANY\" },\n { \"protocol\", \"TCP\" },\n { \"source\", \"1.2.3.4/32\" },\n { \"sourcePort\", 53 },\n } },\n { \"ruleOption\", \n {\n \n {\n { \"keyword\", \"sid:1\" },\n },\n } },\n },\n },\n },\n },\n Tags = \n {\n { \"Tag1\", \"Value1\" },\n { \"Tag2\", \"Value2\" },\n },\n Type = \"STATEFUL\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/networkfirewall\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := networkfirewall.NewRuleGroup(ctx, \"example\", \u0026networkfirewall.RuleGroupArgs{\n\t\t\tCapacity: pulumi.Int(100),\n\t\t\tRuleGroup: \u0026networkfirewall.RuleGroupRuleGroupArgs{\n\t\t\t\tRulesSource: \u0026networkfirewall.RuleGroupRuleGroupRulesSourceArgs{\n\t\t\t\t\tStatefulRule: []map[string]interface{}{\n\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\"action\": \"DROP\",\n\t\t\t\t\t\t\t\"header\": map[string]interface{}{\n\t\t\t\t\t\t\t\t\"destination\": \"124.1.1.24/32\",\n\t\t\t\t\t\t\t\t\"destinationPort\": 53,\n\t\t\t\t\t\t\t\t\"direction\": \"ANY\",\n\t\t\t\t\t\t\t\t\"protocol\": \"TCP\",\n\t\t\t\t\t\t\t\t\"source\": \"1.2.3.4/32\",\n\t\t\t\t\t\t\t\t\"sourcePort\": 53,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"ruleOption\": []map[string]interface{}{\n\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\"keyword\": \"sid:1\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Tag1\": pulumi.String(\"Value1\"),\n\t\t\t\t\"Tag2\": pulumi.String(\"Value2\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"STATEFUL\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Stateful Inspection from rules specifications defined in Suricata flat format\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst example = new aws.networkfirewall.RuleGroup(\"example\", {\n capacity: 100,\n type: \"STATEFUL\",\n rules: fs.readFileSync(\"example.rules\"),\n tags: {\n Tag1: \"Value1\",\n Tag2: \"Value2\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.networkfirewall.RuleGroup(\"example\",\n capacity=100,\n type=\"STATEFUL\",\n rules=(lambda path: open(path).read())(\"example.rules\"),\n tags={\n \"Tag1\": \"Value1\",\n \"Tag2\": \"Value2\",\n })\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.NetworkFirewall.RuleGroup(\"example\", new Aws.NetworkFirewall.RuleGroupArgs\n {\n Capacity = 100,\n Type = \"STATEFUL\",\n Rules = File.ReadAllText(\"example.rules\"),\n Tags = \n {\n { \"Tag1\", \"Value1\" },\n { \"Tag2\", \"Value2\" },\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% example %}}\n### Stateful Inspection from rule group specifications using rule variables and Suricata format rules\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst example = new aws.networkfirewall.RuleGroup(\"example\", {\n capacity: 100,\n type: \"STATEFUL\",\n ruleGroup: {\n ruleVariables: {\n ipSets: [\n {\n key: \"WEBSERVERS_HOSTS\",\n ipSet: {\n definitions: [\n \"10.0.0.0/16\",\n \"10.0.1.0/24\",\n \"192.168.0.0/16\",\n ],\n },\n },\n {\n key: \"EXTERNAL_HOST\",\n ipSet: {\n definitions: [\"1.2.3.4/32\"],\n },\n },\n ],\n portSets: [{\n key: \"HTTP_PORTS\",\n portSet: {\n definitions: [\n \"443\",\n \"80\",\n ],\n },\n }],\n },\n rulesSource: {\n rulesString: fs.readFileSync(\"suricata_rules_file\"),\n },\n },\n tags: {\n Tag1: \"Value1\",\n Tag2: \"Value2\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.networkfirewall.RuleGroup(\"example\",\n capacity=100,\n type=\"STATEFUL\",\n rule_group=aws.networkfirewall.RuleGroupRuleGroupArgs(\n rule_variables=aws.networkfirewall.RuleGroupRuleGroupRuleVariablesArgs(\n ip_sets=[\n aws.networkfirewall.RuleGroupRuleGroupRuleVariablesIpSetArgs(\n key=\"WEBSERVERS_HOSTS\",\n ip_set=aws.networkfirewall.RuleGroupRuleGroupRuleVariablesIpSetIpSetArgs(\n definitions=[\n \"10.0.0.0/16\",\n \"10.0.1.0/24\",\n \"192.168.0.0/16\",\n ],\n ),\n ),\n aws.networkfirewall.RuleGroupRuleGroupRuleVariablesIpSetArgs(\n key=\"EXTERNAL_HOST\",\n ip_set=aws.networkfirewall.RuleGroupRuleGroupRuleVariablesIpSetIpSetArgs(\n definitions=[\"1.2.3.4/32\"],\n ),\n ),\n ],\n port_sets=[aws.networkfirewall.RuleGroupRuleGroupRuleVariablesPortSetArgs(\n key=\"HTTP_PORTS\",\n port_set=aws.networkfirewall.RuleGroupRuleGroupRuleVariablesPortSetPortSetArgs(\n definitions=[\n \"443\",\n \"80\",\n ],\n ),\n )],\n ),\n rules_source=aws.networkfirewall.RuleGroupRuleGroupRulesSourceArgs(\n rules_string=(lambda path: open(path).read())(\"suricata_rules_file\"),\n ),\n ),\n tags={\n \"Tag1\": \"Value1\",\n \"Tag2\": \"Value2\",\n })\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.NetworkFirewall.RuleGroup(\"example\", new Aws.NetworkFirewall.RuleGroupArgs\n {\n Capacity = 100,\n Type = \"STATEFUL\",\n RuleGroup = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupArgs\n {\n RuleVariables = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRuleVariablesArgs\n {\n IpSets = \n {\n new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRuleVariablesIpSetArgs\n {\n Key = \"WEBSERVERS_HOSTS\",\n IpSet = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRuleVariablesIpSetIpSetArgs\n {\n Definitions = \n {\n \"10.0.0.0/16\",\n \"10.0.1.0/24\",\n \"192.168.0.0/16\",\n },\n },\n },\n new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRuleVariablesIpSetArgs\n {\n Key = \"EXTERNAL_HOST\",\n IpSet = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRuleVariablesIpSetIpSetArgs\n {\n Definitions = \n {\n \"1.2.3.4/32\",\n },\n },\n },\n },\n PortSets = \n {\n new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRuleVariablesPortSetArgs\n {\n Key = \"HTTP_PORTS\",\n PortSet = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRuleVariablesPortSetPortSetArgs\n {\n Definitions = \n {\n \"443\",\n \"80\",\n },\n },\n },\n },\n },\n RulesSource = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRulesSourceArgs\n {\n RulesString = File.ReadAllText(\"suricata_rules_file\"),\n },\n },\n Tags = \n {\n { \"Tag1\", \"Value1\" },\n { \"Tag2\", \"Value2\" },\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% example %}}\n### Stateless Inspection with a Custom Action\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.networkfirewall.RuleGroup(\"example\", {\n capacity: 100,\n description: \"Stateless Rate Limiting Rule\",\n ruleGroup: {\n rulesSource: {\n statelessRulesAndCustomActions: {\n customActions: [{\n actionDefinition: {\n publishMetricAction: {\n dimensions: [{\n value: \"2\",\n }],\n },\n },\n actionName: \"ExampleMetricsAction\",\n }],\n statelessRules: [{\n priority: 1,\n ruleDefinition: {\n actions: [\n \"aws:pass\",\n \"ExampleMetricsAction\",\n ],\n matchAttributes: {\n destinations: [{\n addressDefinition: \"124.1.1.5/32\",\n }],\n destinationPorts: [{\n fromPort: 443,\n toPort: 443,\n }],\n protocols: [6],\n sources: [{\n addressDefinition: \"1.2.3.4/32\",\n }],\n sourcePorts: [{\n fromPort: 443,\n toPort: 443,\n }],\n tcpFlags: [{\n flags: [\"SYN\"],\n masks: [\n \"SYN\",\n \"ACK\",\n ],\n }],\n },\n },\n }],\n },\n },\n },\n tags: {\n Tag1: \"Value1\",\n Tag2: \"Value2\",\n },\n type: \"STATELESS\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.networkfirewall.RuleGroup(\"example\",\n capacity=100,\n description=\"Stateless Rate Limiting Rule\",\n rule_group=aws.networkfirewall.RuleGroupRuleGroupArgs(\n rules_source=aws.networkfirewall.RuleGroupRuleGroupRulesSourceArgs(\n stateless_rules_and_custom_actions=aws.networkfirewall.RuleGroupRuleGroupRulesSourceStatelessRulesAndCustomActionsArgs(\n custom_action=[{\n \"actionDefinition\": {\n \"publishMetricAction\": {\n \"dimension\": [{\n \"value\": \"2\",\n }],\n },\n },\n \"actionName\": \"ExampleMetricsAction\",\n }],\n stateless_rule=[{\n \"priority\": 1,\n \"ruleDefinition\": {\n \"actions\": [\n \"aws:pass\",\n \"ExampleMetricsAction\",\n ],\n \"matchAttributes\": {\n \"destination\": [{\n \"addressDefinition\": \"124.1.1.5/32\",\n }],\n \"destinationPort\": [{\n \"fromPort\": 443,\n \"toPort\": 443,\n }],\n \"protocols\": [6],\n \"source\": [{\n \"addressDefinition\": \"1.2.3.4/32\",\n }],\n \"sourcePort\": [{\n \"fromPort\": 443,\n \"toPort\": 443,\n }],\n \"tcpFlag\": [{\n \"flags\": [\"SYN\"],\n \"masks\": [\n \"SYN\",\n \"ACK\",\n ],\n }],\n },\n },\n }],\n ),\n ),\n ),\n tags={\n \"Tag1\": \"Value1\",\n \"Tag2\": \"Value2\",\n },\n type=\"STATELESS\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.NetworkFirewall.RuleGroup(\"example\", new Aws.NetworkFirewall.RuleGroupArgs\n {\n Capacity = 100,\n Description = \"Stateless Rate Limiting Rule\",\n RuleGroup = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupArgs\n {\n RulesSource = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRulesSourceArgs\n {\n StatelessRulesAndCustomActions = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRulesSourceStatelessRulesAndCustomActionsArgs\n {\n CustomAction = \n {\n \n {\n { \"actionDefinition\", \n {\n { \"publishMetricAction\", \n {\n { \"dimension\", \n {\n \n {\n { \"value\", \"2\" },\n },\n } },\n } },\n } },\n { \"actionName\", \"ExampleMetricsAction\" },\n },\n },\n StatelessRule = \n {\n \n {\n { \"priority\", 1 },\n { \"ruleDefinition\", \n {\n { \"actions\", \n {\n \"aws:pass\",\n \"ExampleMetricsAction\",\n } },\n { \"matchAttributes\", \n {\n { \"destination\", \n {\n \n {\n { \"addressDefinition\", \"124.1.1.5/32\" },\n },\n } },\n { \"destinationPort\", \n {\n \n {\n { \"fromPort\", 443 },\n { \"toPort\", 443 },\n },\n } },\n { \"protocols\", \n {\n 6,\n } },\n { \"source\", \n {\n \n {\n { \"addressDefinition\", \"1.2.3.4/32\" },\n },\n } },\n { \"sourcePort\", \n {\n \n {\n { \"fromPort\", 443 },\n { \"toPort\", 443 },\n },\n } },\n { \"tcpFlag\", \n {\n \n {\n { \"flags\", \n {\n \"SYN\",\n } },\n { \"masks\", \n {\n \"SYN\",\n \"ACK\",\n } },\n },\n } },\n } },\n } },\n },\n },\n },\n },\n },\n Tags = \n {\n { \"Tag1\", \"Value1\" },\n { \"Tag2\", \"Value2\" },\n },\n Type = \"STATELESS\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/networkfirewall\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := networkfirewall.NewRuleGroup(ctx, \"example\", \u0026networkfirewall.RuleGroupArgs{\n\t\t\tCapacity: pulumi.Int(100),\n\t\t\tDescription: pulumi.String(\"Stateless Rate Limiting Rule\"),\n\t\t\tRuleGroup: \u0026networkfirewall.RuleGroupRuleGroupArgs{\n\t\t\t\tRulesSource: \u0026networkfirewall.RuleGroupRuleGroupRulesSourceArgs{\n\t\t\t\t\tStatelessRulesAndCustomActions: \u0026networkfirewall.RuleGroupRuleGroupRulesSourceStatelessRulesAndCustomActionsArgs{\n\t\t\t\t\t\tCustomAction: []map[string]interface{}{\n\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\"actionDefinition\": map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\"publishMetricAction\": map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\"dimension\": []map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"2\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"actionName\": \"ExampleMetricsAction\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tStatelessRule: []map[string]interface{}{\n\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\"priority\": 1,\n\t\t\t\t\t\t\t\t\"ruleDefinition\": map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\"actions\": []string{\n\t\t\t\t\t\t\t\t\t\t\"aws:pass\",\n\t\t\t\t\t\t\t\t\t\t\"ExampleMetricsAction\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"matchAttributes\": map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\"destination\": []map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\t\t\"addressDefinition\": \"124.1.1.5/32\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"destinationPort\": []map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\t\t\"fromPort\": 443,\n\t\t\t\t\t\t\t\t\t\t\t\t\"toPort\": 443,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"protocols\": []float64{\n\t\t\t\t\t\t\t\t\t\t\t6,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"source\": []map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\t\t\"addressDefinition\": \"1.2.3.4/32\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"sourcePort\": []map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\t\t\"fromPort\": 443,\n\t\t\t\t\t\t\t\t\t\t\t\t\"toPort\": 443,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"tcpFlag\": []map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\t\t\"flags\": []string{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"SYN\",\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"masks\": []string{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"SYN\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"ACK\",\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Tag1\": pulumi.String(\"Value1\"),\n\t\t\t\t\"Tag2\": pulumi.String(\"Value2\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"STATELESS\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nNetwork Firewall Rule Groups can be imported using their `ARN`.\n\n```sh\n $ pulumi import aws:networkfirewall/ruleGroup:RuleGroup example arn:aws:network-firewall:us-west-1:123456789012:stateful-rulegroup/example\n```\n\n ", + "description": "Provides an AWS Network Firewall Rule Group Resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Stateful Inspection for denying access to a domain\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.networkfirewall.RuleGroup(\"example\", {\n capacity: 100,\n ruleGroup: {\n rulesSource: {\n rulesSourceList: {\n generatedRulesType: \"DENYLIST\",\n targetTypes: [\"HTTP_HOST\"],\n targets: [\"test.example.com\"],\n },\n },\n },\n tags: {\n Tag1: \"Value1\",\n Tag2: \"Value2\",\n },\n type: \"STATEFUL\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.networkfirewall.RuleGroup(\"example\",\n capacity=100,\n rule_group=aws.networkfirewall.RuleGroupRuleGroupArgs(\n rules_source=aws.networkfirewall.RuleGroupRuleGroupRulesSourceArgs(\n rules_source_list=aws.networkfirewall.RuleGroupRuleGroupRulesSourceRulesSourceListArgs(\n generated_rules_type=\"DENYLIST\",\n target_types=[\"HTTP_HOST\"],\n targets=[\"test.example.com\"],\n ),\n ),\n ),\n tags={\n \"Tag1\": \"Value1\",\n \"Tag2\": \"Value2\",\n },\n type=\"STATEFUL\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.NetworkFirewall.RuleGroup(\"example\", new Aws.NetworkFirewall.RuleGroupArgs\n {\n Capacity = 100,\n RuleGroup = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupArgs\n {\n RulesSource = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRulesSourceArgs\n {\n RulesSourceList = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRulesSourceRulesSourceListArgs\n {\n GeneratedRulesType = \"DENYLIST\",\n TargetTypes = \n {\n \"HTTP_HOST\",\n },\n Targets = \n {\n \"test.example.com\",\n },\n },\n },\n },\n Tags = \n {\n { \"Tag1\", \"Value1\" },\n { \"Tag2\", \"Value2\" },\n },\n Type = \"STATEFUL\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/networkfirewall\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := networkfirewall.NewRuleGroup(ctx, \"example\", \u0026networkfirewall.RuleGroupArgs{\n\t\t\tCapacity: pulumi.Int(100),\n\t\t\tRuleGroup: \u0026networkfirewall.RuleGroupRuleGroupArgs{\n\t\t\t\tRulesSource: \u0026networkfirewall.RuleGroupRuleGroupRulesSourceArgs{\n\t\t\t\t\tRulesSourceList: \u0026networkfirewall.RuleGroupRuleGroupRulesSourceRulesSourceListArgs{\n\t\t\t\t\t\tGeneratedRulesType: pulumi.String(\"DENYLIST\"),\n\t\t\t\t\t\tTargetTypes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"HTTP_HOST\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tTargets: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"test.example.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Tag1\": pulumi.String(\"Value1\"),\n\t\t\t\t\"Tag2\": pulumi.String(\"Value2\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"STATEFUL\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Stateful Inspection for permitting packets from a source IP address\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst ips = [\n \"1.1.1.1/32\",\n \"1.0.0.1/32\",\n];\nconst example = new aws.networkfirewall.RuleGroup(\"example\", {\n capacity: 50,\n description: \"Permits http traffic from source\",\n type: \"STATEFUL\",\n ruleGroup: {\n rulesSource: {\n dynamic: [{\n forEach: ips,\n content: [{\n action: \"PASS\",\n header: [{\n destination: \"ANY\",\n destinationPort: \"ANY\",\n protocol: \"HTTP\",\n direction: \"ANY\",\n sourcePort: \"ANY\",\n source: stateful_rule.value,\n }],\n ruleOption: [{\n keyword: \"sid:1\",\n }],\n }],\n }],\n },\n },\n tags: {\n Name: \"permit HTTP from source\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nips = [\n \"1.1.1.1/32\",\n \"1.0.0.1/32\",\n]\nexample = aws.networkfirewall.RuleGroup(\"example\",\n capacity=50,\n description=\"Permits http traffic from source\",\n type=\"STATEFUL\",\n rule_group=aws.networkfirewall.RuleGroupRuleGroupArgs(\n rules_source=aws.networkfirewall.RuleGroupRuleGroupRulesSourceArgs(\n dynamic=[{\n \"forEach\": ips,\n \"content\": [{\n \"action\": \"PASS\",\n \"header\": [{\n \"destination\": \"ANY\",\n \"destinationPort\": \"ANY\",\n \"protocol\": \"HTTP\",\n \"direction\": \"ANY\",\n \"sourcePort\": \"ANY\",\n \"source\": stateful_rule[\"value\"],\n }],\n \"ruleOption\": [{\n \"keyword\": \"sid:1\",\n }],\n }],\n }],\n ),\n ),\n tags={\n \"Name\": \"permit HTTP from source\",\n })\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var ips = \n {\n \"1.1.1.1/32\",\n \"1.0.0.1/32\",\n };\n var example = new Aws.NetworkFirewall.RuleGroup(\"example\", new Aws.NetworkFirewall.RuleGroupArgs\n {\n Capacity = 50,\n Description = \"Permits http traffic from source\",\n Type = \"STATEFUL\",\n RuleGroup = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupArgs\n {\n RulesSource = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRulesSourceArgs\n {\n Dynamic = \n {\n \n {\n { \"forEach\", ips },\n { \"content\", \n {\n \n {\n { \"action\", \"PASS\" },\n { \"header\", \n {\n \n {\n { \"destination\", \"ANY\" },\n { \"destinationPort\", \"ANY\" },\n { \"protocol\", \"HTTP\" },\n { \"direction\", \"ANY\" },\n { \"sourcePort\", \"ANY\" },\n { \"source\", stateful_rule.Value },\n },\n } },\n { \"ruleOption\", \n {\n \n {\n { \"keyword\", \"sid:1\" },\n },\n } },\n },\n } },\n },\n },\n },\n },\n Tags = \n {\n { \"Name\", \"permit HTTP from source\" },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/networkfirewall\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tips := []string{\n\t\t\t\"1.1.1.1/32\",\n\t\t\t\"1.0.0.1/32\",\n\t\t}\n\t\t_, err := networkfirewall.NewRuleGroup(ctx, \"example\", \u0026networkfirewall.RuleGroupArgs{\n\t\t\tCapacity: pulumi.Int(50),\n\t\t\tDescription: pulumi.String(\"Permits http traffic from source\"),\n\t\t\tType: pulumi.String(\"STATEFUL\"),\n\t\t\tRuleGroup: \u0026networkfirewall.RuleGroupRuleGroupArgs{\n\t\t\t\tRulesSource: \u0026networkfirewall.RuleGroupRuleGroupRulesSourceArgs{\n\t\t\t\t\tDynamic: []map[string]interface{}{\n\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\"forEach\": ips,\n\t\t\t\t\t\t\t\"content\": []map[string]interface{}{\n\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\"action\": \"PASS\",\n\t\t\t\t\t\t\t\t\t\"header\": []map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\t\"destination\": \"ANY\",\n\t\t\t\t\t\t\t\t\t\t\t\"destinationPort\": \"ANY\",\n\t\t\t\t\t\t\t\t\t\t\t\"protocol\": \"HTTP\",\n\t\t\t\t\t\t\t\t\t\t\t\"direction\": \"ANY\",\n\t\t\t\t\t\t\t\t\t\t\t\"sourcePort\": \"ANY\",\n\t\t\t\t\t\t\t\t\t\t\t\"source\": stateful_rule.Value,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"ruleOption\": []map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\t\"keyword\": \"sid:1\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Name\": pulumi.String(\"permit HTTP from source\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Stateful Inspection for blocking packets from going to an intended destination\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.networkfirewall.RuleGroup(\"example\", {\n capacity: 100,\n ruleGroup: {\n rulesSource: {\n statefulRules: [{\n action: \"DROP\",\n header: {\n destination: \"124.1.1.24/32\",\n destinationPort: \"53\",\n direction: \"ANY\",\n protocol: \"TCP\",\n source: \"1.2.3.4/32\",\n sourcePort: \"53\",\n },\n ruleOptions: [{\n keyword: \"sid:1\",\n }],\n }],\n },\n },\n tags: {\n Tag1: \"Value1\",\n Tag2: \"Value2\",\n },\n type: \"STATEFUL\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.networkfirewall.RuleGroup(\"example\",\n capacity=100,\n rule_group=aws.networkfirewall.RuleGroupRuleGroupArgs(\n rules_source=aws.networkfirewall.RuleGroupRuleGroupRulesSourceArgs(\n stateful_rule=[{\n \"action\": \"DROP\",\n \"header\": {\n \"destination\": \"124.1.1.24/32\",\n \"destinationPort\": 53,\n \"direction\": \"ANY\",\n \"protocol\": \"TCP\",\n \"source\": \"1.2.3.4/32\",\n \"sourcePort\": 53,\n },\n \"ruleOption\": [{\n \"keyword\": \"sid:1\",\n }],\n }],\n ),\n ),\n tags={\n \"Tag1\": \"Value1\",\n \"Tag2\": \"Value2\",\n },\n type=\"STATEFUL\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.NetworkFirewall.RuleGroup(\"example\", new Aws.NetworkFirewall.RuleGroupArgs\n {\n Capacity = 100,\n RuleGroup = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupArgs\n {\n RulesSource = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRulesSourceArgs\n {\n StatefulRule = \n {\n \n {\n { \"action\", \"DROP\" },\n { \"header\", \n {\n { \"destination\", \"124.1.1.24/32\" },\n { \"destinationPort\", 53 },\n { \"direction\", \"ANY\" },\n { \"protocol\", \"TCP\" },\n { \"source\", \"1.2.3.4/32\" },\n { \"sourcePort\", 53 },\n } },\n { \"ruleOption\", \n {\n \n {\n { \"keyword\", \"sid:1\" },\n },\n } },\n },\n },\n },\n },\n Tags = \n {\n { \"Tag1\", \"Value1\" },\n { \"Tag2\", \"Value2\" },\n },\n Type = \"STATEFUL\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/networkfirewall\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := networkfirewall.NewRuleGroup(ctx, \"example\", \u0026networkfirewall.RuleGroupArgs{\n\t\t\tCapacity: pulumi.Int(100),\n\t\t\tRuleGroup: \u0026networkfirewall.RuleGroupRuleGroupArgs{\n\t\t\t\tRulesSource: \u0026networkfirewall.RuleGroupRuleGroupRulesSourceArgs{\n\t\t\t\t\tStatefulRule: []map[string]interface{}{\n\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\"action\": \"DROP\",\n\t\t\t\t\t\t\t\"header\": map[string]interface{}{\n\t\t\t\t\t\t\t\t\"destination\": \"124.1.1.24/32\",\n\t\t\t\t\t\t\t\t\"destinationPort\": 53,\n\t\t\t\t\t\t\t\t\"direction\": \"ANY\",\n\t\t\t\t\t\t\t\t\"protocol\": \"TCP\",\n\t\t\t\t\t\t\t\t\"source\": \"1.2.3.4/32\",\n\t\t\t\t\t\t\t\t\"sourcePort\": 53,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"ruleOption\": []map[string]interface{}{\n\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\"keyword\": \"sid:1\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Tag1\": pulumi.String(\"Value1\"),\n\t\t\t\t\"Tag2\": pulumi.String(\"Value2\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"STATEFUL\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Stateful Inspection from rules specifications defined in Suricata flat format\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst example = new aws.networkfirewall.RuleGroup(\"example\", {\n capacity: 100,\n type: \"STATEFUL\",\n rules: fs.readFileSync(\"example.rules\"),\n tags: {\n Tag1: \"Value1\",\n Tag2: \"Value2\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.networkfirewall.RuleGroup(\"example\",\n capacity=100,\n type=\"STATEFUL\",\n rules=(lambda path: open(path).read())(\"example.rules\"),\n tags={\n \"Tag1\": \"Value1\",\n \"Tag2\": \"Value2\",\n })\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.NetworkFirewall.RuleGroup(\"example\", new Aws.NetworkFirewall.RuleGroupArgs\n {\n Capacity = 100,\n Type = \"STATEFUL\",\n Rules = File.ReadAllText(\"example.rules\"),\n Tags = \n {\n { \"Tag1\", \"Value1\" },\n { \"Tag2\", \"Value2\" },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/networkfirewall\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := networkfirewall.NewRuleGroup(ctx, \"example\", \u0026networkfirewall.RuleGroupArgs{\n\t\t\tCapacity: pulumi.Int(100),\n\t\t\tType: pulumi.String(\"STATEFUL\"),\n\t\t\tRules: readFileOrPanic(\"example.rules\"),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Tag1\": pulumi.String(\"Value1\"),\n\t\t\t\t\"Tag2\": pulumi.String(\"Value2\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Stateful Inspection from rule group specifications using rule variables and Suricata format rules\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst example = new aws.networkfirewall.RuleGroup(\"example\", {\n capacity: 100,\n type: \"STATEFUL\",\n ruleGroup: {\n ruleVariables: {\n ipSets: [\n {\n key: \"WEBSERVERS_HOSTS\",\n ipSet: {\n definitions: [\n \"10.0.0.0/16\",\n \"10.0.1.0/24\",\n \"192.168.0.0/16\",\n ],\n },\n },\n {\n key: \"EXTERNAL_HOST\",\n ipSet: {\n definitions: [\"1.2.3.4/32\"],\n },\n },\n ],\n portSets: [{\n key: \"HTTP_PORTS\",\n portSet: {\n definitions: [\n \"443\",\n \"80\",\n ],\n },\n }],\n },\n rulesSource: {\n rulesString: fs.readFileSync(\"suricata_rules_file\"),\n },\n },\n tags: {\n Tag1: \"Value1\",\n Tag2: \"Value2\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.networkfirewall.RuleGroup(\"example\",\n capacity=100,\n type=\"STATEFUL\",\n rule_group=aws.networkfirewall.RuleGroupRuleGroupArgs(\n rule_variables=aws.networkfirewall.RuleGroupRuleGroupRuleVariablesArgs(\n ip_sets=[\n aws.networkfirewall.RuleGroupRuleGroupRuleVariablesIpSetArgs(\n key=\"WEBSERVERS_HOSTS\",\n ip_set=aws.networkfirewall.RuleGroupRuleGroupRuleVariablesIpSetIpSetArgs(\n definitions=[\n \"10.0.0.0/16\",\n \"10.0.1.0/24\",\n \"192.168.0.0/16\",\n ],\n ),\n ),\n aws.networkfirewall.RuleGroupRuleGroupRuleVariablesIpSetArgs(\n key=\"EXTERNAL_HOST\",\n ip_set=aws.networkfirewall.RuleGroupRuleGroupRuleVariablesIpSetIpSetArgs(\n definitions=[\"1.2.3.4/32\"],\n ),\n ),\n ],\n port_sets=[aws.networkfirewall.RuleGroupRuleGroupRuleVariablesPortSetArgs(\n key=\"HTTP_PORTS\",\n port_set=aws.networkfirewall.RuleGroupRuleGroupRuleVariablesPortSetPortSetArgs(\n definitions=[\n \"443\",\n \"80\",\n ],\n ),\n )],\n ),\n rules_source=aws.networkfirewall.RuleGroupRuleGroupRulesSourceArgs(\n rules_string=(lambda path: open(path).read())(\"suricata_rules_file\"),\n ),\n ),\n tags={\n \"Tag1\": \"Value1\",\n \"Tag2\": \"Value2\",\n })\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.NetworkFirewall.RuleGroup(\"example\", new Aws.NetworkFirewall.RuleGroupArgs\n {\n Capacity = 100,\n Type = \"STATEFUL\",\n RuleGroup = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupArgs\n {\n RuleVariables = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRuleVariablesArgs\n {\n IpSets = \n {\n new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRuleVariablesIpSetArgs\n {\n Key = \"WEBSERVERS_HOSTS\",\n IpSet = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRuleVariablesIpSetIpSetArgs\n {\n Definitions = \n {\n \"10.0.0.0/16\",\n \"10.0.1.0/24\",\n \"192.168.0.0/16\",\n },\n },\n },\n new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRuleVariablesIpSetArgs\n {\n Key = \"EXTERNAL_HOST\",\n IpSet = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRuleVariablesIpSetIpSetArgs\n {\n Definitions = \n {\n \"1.2.3.4/32\",\n },\n },\n },\n },\n PortSets = \n {\n new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRuleVariablesPortSetArgs\n {\n Key = \"HTTP_PORTS\",\n PortSet = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRuleVariablesPortSetPortSetArgs\n {\n Definitions = \n {\n \"443\",\n \"80\",\n },\n },\n },\n },\n },\n RulesSource = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRulesSourceArgs\n {\n RulesString = File.ReadAllText(\"suricata_rules_file\"),\n },\n },\n Tags = \n {\n { \"Tag1\", \"Value1\" },\n { \"Tag2\", \"Value2\" },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/networkfirewall\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := networkfirewall.NewRuleGroup(ctx, \"example\", \u0026networkfirewall.RuleGroupArgs{\n\t\t\tCapacity: pulumi.Int(100),\n\t\t\tType: pulumi.String(\"STATEFUL\"),\n\t\t\tRuleGroup: \u0026networkfirewall.RuleGroupRuleGroupArgs{\n\t\t\t\tRuleVariables: \u0026networkfirewall.RuleGroupRuleGroupRuleVariablesArgs{\n\t\t\t\t\tIpSets: networkfirewall.RuleGroupRuleGroupRuleVariablesIpSetArray{\n\t\t\t\t\t\t\u0026networkfirewall.RuleGroupRuleGroupRuleVariablesIpSetArgs{\n\t\t\t\t\t\t\tKey: pulumi.String(\"WEBSERVERS_HOSTS\"),\n\t\t\t\t\t\t\tIpSet: \u0026networkfirewall.RuleGroupRuleGroupRuleVariablesIpSetIpSetArgs{\n\t\t\t\t\t\t\t\tDefinitions: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"10.0.0.0/16\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"10.0.1.0/24\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"192.168.0.0/16\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026networkfirewall.RuleGroupRuleGroupRuleVariablesIpSetArgs{\n\t\t\t\t\t\t\tKey: pulumi.String(\"EXTERNAL_HOST\"),\n\t\t\t\t\t\t\tIpSet: \u0026networkfirewall.RuleGroupRuleGroupRuleVariablesIpSetIpSetArgs{\n\t\t\t\t\t\t\t\tDefinitions: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"1.2.3.4/32\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPortSets: networkfirewall.RuleGroupRuleGroupRuleVariablesPortSetArray{\n\t\t\t\t\t\t\u0026networkfirewall.RuleGroupRuleGroupRuleVariablesPortSetArgs{\n\t\t\t\t\t\t\tKey: pulumi.String(\"HTTP_PORTS\"),\n\t\t\t\t\t\t\tPortSet: \u0026networkfirewall.RuleGroupRuleGroupRuleVariablesPortSetPortSetArgs{\n\t\t\t\t\t\t\t\tDefinitions: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"443\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"80\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tRulesSource: \u0026networkfirewall.RuleGroupRuleGroupRulesSourceArgs{\n\t\t\t\t\tRulesString: readFileOrPanic(\"suricata_rules_file\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Tag1\": pulumi.String(\"Value1\"),\n\t\t\t\t\"Tag2\": pulumi.String(\"Value2\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Stateless Inspection with a Custom Action\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.networkfirewall.RuleGroup(\"example\", {\n capacity: 100,\n description: \"Stateless Rate Limiting Rule\",\n ruleGroup: {\n rulesSource: {\n statelessRulesAndCustomActions: {\n customActions: [{\n actionDefinition: {\n publishMetricAction: {\n dimensions: [{\n value: \"2\",\n }],\n },\n },\n actionName: \"ExampleMetricsAction\",\n }],\n statelessRules: [{\n priority: 1,\n ruleDefinition: {\n actions: [\n \"aws:pass\",\n \"ExampleMetricsAction\",\n ],\n matchAttributes: {\n destinations: [{\n addressDefinition: \"124.1.1.5/32\",\n }],\n destinationPorts: [{\n fromPort: 443,\n toPort: 443,\n }],\n protocols: [6],\n sources: [{\n addressDefinition: \"1.2.3.4/32\",\n }],\n sourcePorts: [{\n fromPort: 443,\n toPort: 443,\n }],\n tcpFlags: [{\n flags: [\"SYN\"],\n masks: [\n \"SYN\",\n \"ACK\",\n ],\n }],\n },\n },\n }],\n },\n },\n },\n tags: {\n Tag1: \"Value1\",\n Tag2: \"Value2\",\n },\n type: \"STATELESS\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.networkfirewall.RuleGroup(\"example\",\n capacity=100,\n description=\"Stateless Rate Limiting Rule\",\n rule_group=aws.networkfirewall.RuleGroupRuleGroupArgs(\n rules_source=aws.networkfirewall.RuleGroupRuleGroupRulesSourceArgs(\n stateless_rules_and_custom_actions=aws.networkfirewall.RuleGroupRuleGroupRulesSourceStatelessRulesAndCustomActionsArgs(\n custom_action=[{\n \"actionDefinition\": {\n \"publishMetricAction\": {\n \"dimension\": [{\n \"value\": \"2\",\n }],\n },\n },\n \"actionName\": \"ExampleMetricsAction\",\n }],\n stateless_rule=[{\n \"priority\": 1,\n \"ruleDefinition\": {\n \"actions\": [\n \"aws:pass\",\n \"ExampleMetricsAction\",\n ],\n \"matchAttributes\": {\n \"destination\": [{\n \"addressDefinition\": \"124.1.1.5/32\",\n }],\n \"destinationPort\": [{\n \"fromPort\": 443,\n \"toPort\": 443,\n }],\n \"protocols\": [6],\n \"source\": [{\n \"addressDefinition\": \"1.2.3.4/32\",\n }],\n \"sourcePort\": [{\n \"fromPort\": 443,\n \"toPort\": 443,\n }],\n \"tcpFlag\": [{\n \"flags\": [\"SYN\"],\n \"masks\": [\n \"SYN\",\n \"ACK\",\n ],\n }],\n },\n },\n }],\n ),\n ),\n ),\n tags={\n \"Tag1\": \"Value1\",\n \"Tag2\": \"Value2\",\n },\n type=\"STATELESS\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.NetworkFirewall.RuleGroup(\"example\", new Aws.NetworkFirewall.RuleGroupArgs\n {\n Capacity = 100,\n Description = \"Stateless Rate Limiting Rule\",\n RuleGroup = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupArgs\n {\n RulesSource = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRulesSourceArgs\n {\n StatelessRulesAndCustomActions = new Aws.NetworkFirewall.Inputs.RuleGroupRuleGroupRulesSourceStatelessRulesAndCustomActionsArgs\n {\n CustomAction = \n {\n \n {\n { \"actionDefinition\", \n {\n { \"publishMetricAction\", \n {\n { \"dimension\", \n {\n \n {\n { \"value\", \"2\" },\n },\n } },\n } },\n } },\n { \"actionName\", \"ExampleMetricsAction\" },\n },\n },\n StatelessRule = \n {\n \n {\n { \"priority\", 1 },\n { \"ruleDefinition\", \n {\n { \"actions\", \n {\n \"aws:pass\",\n \"ExampleMetricsAction\",\n } },\n { \"matchAttributes\", \n {\n { \"destination\", \n {\n \n {\n { \"addressDefinition\", \"124.1.1.5/32\" },\n },\n } },\n { \"destinationPort\", \n {\n \n {\n { \"fromPort\", 443 },\n { \"toPort\", 443 },\n },\n } },\n { \"protocols\", \n {\n 6,\n } },\n { \"source\", \n {\n \n {\n { \"addressDefinition\", \"1.2.3.4/32\" },\n },\n } },\n { \"sourcePort\", \n {\n \n {\n { \"fromPort\", 443 },\n { \"toPort\", 443 },\n },\n } },\n { \"tcpFlag\", \n {\n \n {\n { \"flags\", \n {\n \"SYN\",\n } },\n { \"masks\", \n {\n \"SYN\",\n \"ACK\",\n } },\n },\n } },\n } },\n } },\n },\n },\n },\n },\n },\n Tags = \n {\n { \"Tag1\", \"Value1\" },\n { \"Tag2\", \"Value2\" },\n },\n Type = \"STATELESS\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/networkfirewall\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := networkfirewall.NewRuleGroup(ctx, \"example\", \u0026networkfirewall.RuleGroupArgs{\n\t\t\tCapacity: pulumi.Int(100),\n\t\t\tDescription: pulumi.String(\"Stateless Rate Limiting Rule\"),\n\t\t\tRuleGroup: \u0026networkfirewall.RuleGroupRuleGroupArgs{\n\t\t\t\tRulesSource: \u0026networkfirewall.RuleGroupRuleGroupRulesSourceArgs{\n\t\t\t\t\tStatelessRulesAndCustomActions: \u0026networkfirewall.RuleGroupRuleGroupRulesSourceStatelessRulesAndCustomActionsArgs{\n\t\t\t\t\t\tCustomAction: []map[string]interface{}{\n\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\"actionDefinition\": map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\"publishMetricAction\": map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\"dimension\": []map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"2\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"actionName\": \"ExampleMetricsAction\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tStatelessRule: []map[string]interface{}{\n\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\"priority\": 1,\n\t\t\t\t\t\t\t\t\"ruleDefinition\": map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\"actions\": []string{\n\t\t\t\t\t\t\t\t\t\t\"aws:pass\",\n\t\t\t\t\t\t\t\t\t\t\"ExampleMetricsAction\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"matchAttributes\": map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\"destination\": []map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\t\t\"addressDefinition\": \"124.1.1.5/32\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"destinationPort\": []map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\t\t\"fromPort\": 443,\n\t\t\t\t\t\t\t\t\t\t\t\t\"toPort\": 443,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"protocols\": []float64{\n\t\t\t\t\t\t\t\t\t\t\t6,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"source\": []map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\t\t\"addressDefinition\": \"1.2.3.4/32\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"sourcePort\": []map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\t\t\"fromPort\": 443,\n\t\t\t\t\t\t\t\t\t\t\t\t\"toPort\": 443,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"tcpFlag\": []map[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\t\t\t\"flags\": []string{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"SYN\",\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"masks\": []string{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"SYN\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"ACK\",\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Tag1\": pulumi.String(\"Value1\"),\n\t\t\t\t\"Tag2\": pulumi.String(\"Value2\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"STATELESS\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nNetwork Firewall Rule Groups can be imported using their `ARN`.\n\n```sh\n $ pulumi import aws:networkfirewall/ruleGroup:RuleGroup example arn:aws:network-firewall:us-west-1:123456789012:stateful-rulegroup/example\n```\n\n ", "inputProperties": { "capacity": { "description": "The maximum number of operating resources that this rule group can use. For a stateless rule group, the capacity required is the sum of the capacity requirements of the individual rules. For a stateful rule group, the minimum capacity required is the number of individual rules.\n", @@ -101202,7 +104101,7 @@ } }, "aws:opsworks/application:Application": { - "description": "Provides an OpsWorks application resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst foo_app = new aws.opsworks.Application(\"foo-app\", {\n shortName: \"foobar\",\n stackId: aws_opsworks_stack.main.id,\n type: \"rails\",\n description: \"This is a Rails application\",\n domains: [\n \"example.com\",\n \"sub.example.com\",\n ],\n environments: [{\n key: \"key\",\n value: \"value\",\n secure: false,\n }],\n appSources: [{\n type: \"git\",\n revision: \"master\",\n url: \"https://github.com/example.git\",\n }],\n enableSsl: true,\n sslConfigurations: [{\n privateKey: fs.readFileSync(\"./foobar.key\"),\n certificate: fs.readFileSync(\"./foobar.crt\"),\n }],\n documentRoot: \"public\",\n autoBundleOnDeploy: true,\n railsEnv: \"staging\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nfoo_app = aws.opsworks.Application(\"foo-app\",\n short_name=\"foobar\",\n stack_id=aws_opsworks_stack[\"main\"][\"id\"],\n type=\"rails\",\n description=\"This is a Rails application\",\n domains=[\n \"example.com\",\n \"sub.example.com\",\n ],\n environments=[aws.opsworks.ApplicationEnvironmentArgs(\n key=\"key\",\n value=\"value\",\n secure=False,\n )],\n app_sources=[aws.opsworks.ApplicationAppSourceArgs(\n type=\"git\",\n revision=\"master\",\n url=\"https://github.com/example.git\",\n )],\n enable_ssl=True,\n ssl_configurations=[aws.opsworks.ApplicationSslConfigurationArgs(\n private_key=(lambda path: open(path).read())(\"./foobar.key\"),\n certificate=(lambda path: open(path).read())(\"./foobar.crt\"),\n )],\n document_root=\"public\",\n auto_bundle_on_deploy=\"true\",\n rails_env=\"staging\")\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var foo_app = new Aws.OpsWorks.Application(\"foo-app\", new Aws.OpsWorks.ApplicationArgs\n {\n ShortName = \"foobar\",\n StackId = aws_opsworks_stack.Main.Id,\n Type = \"rails\",\n Description = \"This is a Rails application\",\n Domains = \n {\n \"example.com\",\n \"sub.example.com\",\n },\n Environments = \n {\n new Aws.OpsWorks.Inputs.ApplicationEnvironmentArgs\n {\n Key = \"key\",\n Value = \"value\",\n Secure = false,\n },\n },\n AppSources = \n {\n new Aws.OpsWorks.Inputs.ApplicationAppSourceArgs\n {\n Type = \"git\",\n Revision = \"master\",\n Url = \"https://github.com/example.git\",\n },\n },\n EnableSsl = true,\n SslConfigurations = \n {\n new Aws.OpsWorks.Inputs.ApplicationSslConfigurationArgs\n {\n PrivateKey = File.ReadAllText(\"./foobar.key\"),\n Certificate = File.ReadAllText(\"./foobar.crt\"),\n },\n },\n DocumentRoot = \"public\",\n AutoBundleOnDeploy = \"true\",\n RailsEnv = \"staging\",\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nOpsworks Application can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:opsworks/application:Application test \u003cid\u003e\n```\n\n ", + "description": "Provides an OpsWorks application resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst foo_app = new aws.opsworks.Application(\"foo-app\", {\n shortName: \"foobar\",\n stackId: aws_opsworks_stack.main.id,\n type: \"rails\",\n description: \"This is a Rails application\",\n domains: [\n \"example.com\",\n \"sub.example.com\",\n ],\n environments: [{\n key: \"key\",\n value: \"value\",\n secure: false,\n }],\n appSources: [{\n type: \"git\",\n revision: \"master\",\n url: \"https://github.com/example.git\",\n }],\n enableSsl: true,\n sslConfigurations: [{\n privateKey: fs.readFileSync(\"./foobar.key\"),\n certificate: fs.readFileSync(\"./foobar.crt\"),\n }],\n documentRoot: \"public\",\n autoBundleOnDeploy: true,\n railsEnv: \"staging\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nfoo_app = aws.opsworks.Application(\"foo-app\",\n short_name=\"foobar\",\n stack_id=aws_opsworks_stack[\"main\"][\"id\"],\n type=\"rails\",\n description=\"This is a Rails application\",\n domains=[\n \"example.com\",\n \"sub.example.com\",\n ],\n environments=[aws.opsworks.ApplicationEnvironmentArgs(\n key=\"key\",\n value=\"value\",\n secure=False,\n )],\n app_sources=[aws.opsworks.ApplicationAppSourceArgs(\n type=\"git\",\n revision=\"master\",\n url=\"https://github.com/example.git\",\n )],\n enable_ssl=True,\n ssl_configurations=[aws.opsworks.ApplicationSslConfigurationArgs(\n private_key=(lambda path: open(path).read())(\"./foobar.key\"),\n certificate=(lambda path: open(path).read())(\"./foobar.crt\"),\n )],\n document_root=\"public\",\n auto_bundle_on_deploy=\"true\",\n rails_env=\"staging\")\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var foo_app = new Aws.OpsWorks.Application(\"foo-app\", new Aws.OpsWorks.ApplicationArgs\n {\n ShortName = \"foobar\",\n StackId = aws_opsworks_stack.Main.Id,\n Type = \"rails\",\n Description = \"This is a Rails application\",\n Domains = \n {\n \"example.com\",\n \"sub.example.com\",\n },\n Environments = \n {\n new Aws.OpsWorks.Inputs.ApplicationEnvironmentArgs\n {\n Key = \"key\",\n Value = \"value\",\n Secure = false,\n },\n },\n AppSources = \n {\n new Aws.OpsWorks.Inputs.ApplicationAppSourceArgs\n {\n Type = \"git\",\n Revision = \"master\",\n Url = \"https://github.com/example.git\",\n },\n },\n EnableSsl = true,\n SslConfigurations = \n {\n new Aws.OpsWorks.Inputs.ApplicationSslConfigurationArgs\n {\n PrivateKey = File.ReadAllText(\"./foobar.key\"),\n Certificate = File.ReadAllText(\"./foobar.crt\"),\n },\n },\n DocumentRoot = \"public\",\n AutoBundleOnDeploy = \"true\",\n RailsEnv = \"staging\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/opsworks\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := opsworks.NewApplication(ctx, \"foo_app\", \u0026opsworks.ApplicationArgs{\n\t\t\tShortName: pulumi.String(\"foobar\"),\n\t\t\tStackId: pulumi.Any(aws_opsworks_stack.Main.Id),\n\t\t\tType: pulumi.String(\"rails\"),\n\t\t\tDescription: pulumi.String(\"This is a Rails application\"),\n\t\t\tDomains: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"example.com\"),\n\t\t\t\tpulumi.String(\"sub.example.com\"),\n\t\t\t},\n\t\t\tEnvironments: opsworks.ApplicationEnvironmentArray{\n\t\t\t\t\u0026opsworks.ApplicationEnvironmentArgs{\n\t\t\t\t\tKey: pulumi.String(\"key\"),\n\t\t\t\t\tValue: pulumi.String(\"value\"),\n\t\t\t\t\tSecure: pulumi.Bool(false),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAppSources: opsworks.ApplicationAppSourceArray{\n\t\t\t\t\u0026opsworks.ApplicationAppSourceArgs{\n\t\t\t\t\tType: pulumi.String(\"git\"),\n\t\t\t\t\tRevision: pulumi.String(\"master\"),\n\t\t\t\t\tUrl: pulumi.String(\"https://github.com/example.git\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnableSsl: pulumi.Bool(true),\n\t\t\tSslConfigurations: opsworks.ApplicationSslConfigurationArray{\n\t\t\t\t\u0026opsworks.ApplicationSslConfigurationArgs{\n\t\t\t\t\tPrivateKey: readFileOrPanic(\"./foobar.key\"),\n\t\t\t\t\tCertificate: readFileOrPanic(\"./foobar.crt\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDocumentRoot: pulumi.String(\"public\"),\n\t\t\tAutoBundleOnDeploy: pulumi.String(\"true\"),\n\t\t\tRailsEnv: pulumi.String(\"staging\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nOpsworks Application can be imported using the `id`, e.g.\n\n```sh\n $ pulumi import aws:opsworks/application:Application test \u003cid\u003e\n```\n\n ", "inputProperties": { "appSources": { "description": "SCM configuration of the app as described below.\n", @@ -107274,7 +110173,7 @@ } }, "aws:pinpoint/apnsChannel:ApnsChannel": { - "description": "Provides a Pinpoint APNs Channel resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst app = new aws.pinpoint.App(\"app\", {});\nconst apns = new aws.pinpoint.ApnsChannel(\"apns\", {\n applicationId: app.applicationId,\n certificate: fs.readFileSync(\"./certificate.pem\"),\n privateKey: fs.readFileSync(\"./private_key.key\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\napp = aws.pinpoint.App(\"app\")\napns = aws.pinpoint.ApnsChannel(\"apns\",\n application_id=app.application_id,\n certificate=(lambda path: open(path).read())(\"./certificate.pem\"),\n private_key=(lambda path: open(path).read())(\"./private_key.key\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var app = new Aws.Pinpoint.App(\"app\", new Aws.Pinpoint.AppArgs\n {\n });\n var apns = new Aws.Pinpoint.ApnsChannel(\"apns\", new Aws.Pinpoint.ApnsChannelArgs\n {\n ApplicationId = app.ApplicationId,\n Certificate = File.ReadAllText(\"./certificate.pem\"),\n PrivateKey = File.ReadAllText(\"./private_key.key\"),\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nPinpoint APNs Channel can be imported using the `application-id`, e.g.\n\n```sh\n $ pulumi import aws:pinpoint/apnsChannel:ApnsChannel apns application-id\n```\n\n ", + "description": "Provides a Pinpoint APNs Channel resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst app = new aws.pinpoint.App(\"app\", {});\nconst apns = new aws.pinpoint.ApnsChannel(\"apns\", {\n applicationId: app.applicationId,\n certificate: fs.readFileSync(\"./certificate.pem\"),\n privateKey: fs.readFileSync(\"./private_key.key\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\napp = aws.pinpoint.App(\"app\")\napns = aws.pinpoint.ApnsChannel(\"apns\",\n application_id=app.application_id,\n certificate=(lambda path: open(path).read())(\"./certificate.pem\"),\n private_key=(lambda path: open(path).read())(\"./private_key.key\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var app = new Aws.Pinpoint.App(\"app\", new Aws.Pinpoint.AppArgs\n {\n });\n var apns = new Aws.Pinpoint.ApnsChannel(\"apns\", new Aws.Pinpoint.ApnsChannelArgs\n {\n ApplicationId = app.ApplicationId,\n Certificate = File.ReadAllText(\"./certificate.pem\"),\n PrivateKey = File.ReadAllText(\"./private_key.key\"),\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/pinpoint\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tapp, err := pinpoint.NewApp(ctx, \"app\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pinpoint.NewApnsChannel(ctx, \"apns\", \u0026pinpoint.ApnsChannelArgs{\n\t\t\tApplicationId: app.ApplicationId,\n\t\t\tCertificate: readFileOrPanic(\"./certificate.pem\"),\n\t\t\tPrivateKey: readFileOrPanic(\"./private_key.key\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nPinpoint APNs Channel can be imported using the `application-id`, e.g.\n\n```sh\n $ pulumi import aws:pinpoint/apnsChannel:ApnsChannel apns application-id\n```\n\n ", "inputProperties": { "applicationId": { "description": "The application ID.\n", @@ -107401,7 +110300,7 @@ } }, "aws:pinpoint/apnsSandboxChannel:ApnsSandboxChannel": { - "description": "Provides a Pinpoint APNs Sandbox Channel resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst app = new aws.pinpoint.App(\"app\", {});\nconst apnsSandbox = new aws.pinpoint.ApnsSandboxChannel(\"apnsSandbox\", {\n applicationId: app.applicationId,\n certificate: fs.readFileSync(\"./certificate.pem\"),\n privateKey: fs.readFileSync(\"./private_key.key\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\napp = aws.pinpoint.App(\"app\")\napns_sandbox = aws.pinpoint.ApnsSandboxChannel(\"apnsSandbox\",\n application_id=app.application_id,\n certificate=(lambda path: open(path).read())(\"./certificate.pem\"),\n private_key=(lambda path: open(path).read())(\"./private_key.key\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var app = new Aws.Pinpoint.App(\"app\", new Aws.Pinpoint.AppArgs\n {\n });\n var apnsSandbox = new Aws.Pinpoint.ApnsSandboxChannel(\"apnsSandbox\", new Aws.Pinpoint.ApnsSandboxChannelArgs\n {\n ApplicationId = app.ApplicationId,\n Certificate = File.ReadAllText(\"./certificate.pem\"),\n PrivateKey = File.ReadAllText(\"./private_key.key\"),\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nPinpoint APNs Sandbox Channel can be imported using the `application-id`, e.g.\n\n```sh\n $ pulumi import aws:pinpoint/apnsSandboxChannel:ApnsSandboxChannel apns_sandbox application-id\n```\n\n ", + "description": "Provides a Pinpoint APNs Sandbox Channel resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst app = new aws.pinpoint.App(\"app\", {});\nconst apnsSandbox = new aws.pinpoint.ApnsSandboxChannel(\"apnsSandbox\", {\n applicationId: app.applicationId,\n certificate: fs.readFileSync(\"./certificate.pem\"),\n privateKey: fs.readFileSync(\"./private_key.key\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\napp = aws.pinpoint.App(\"app\")\napns_sandbox = aws.pinpoint.ApnsSandboxChannel(\"apnsSandbox\",\n application_id=app.application_id,\n certificate=(lambda path: open(path).read())(\"./certificate.pem\"),\n private_key=(lambda path: open(path).read())(\"./private_key.key\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var app = new Aws.Pinpoint.App(\"app\", new Aws.Pinpoint.AppArgs\n {\n });\n var apnsSandbox = new Aws.Pinpoint.ApnsSandboxChannel(\"apnsSandbox\", new Aws.Pinpoint.ApnsSandboxChannelArgs\n {\n ApplicationId = app.ApplicationId,\n Certificate = File.ReadAllText(\"./certificate.pem\"),\n PrivateKey = File.ReadAllText(\"./private_key.key\"),\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/pinpoint\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tapp, err := pinpoint.NewApp(ctx, \"app\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pinpoint.NewApnsSandboxChannel(ctx, \"apnsSandbox\", \u0026pinpoint.ApnsSandboxChannelArgs{\n\t\t\tApplicationId: app.ApplicationId,\n\t\t\tCertificate: readFileOrPanic(\"./certificate.pem\"),\n\t\t\tPrivateKey: readFileOrPanic(\"./private_key.key\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nPinpoint APNs Sandbox Channel can be imported using the `application-id`, e.g.\n\n```sh\n $ pulumi import aws:pinpoint/apnsSandboxChannel:ApnsSandboxChannel apns_sandbox application-id\n```\n\n ", "inputProperties": { "applicationId": { "description": "The application ID.\n", @@ -107528,7 +110427,7 @@ } }, "aws:pinpoint/apnsVoipChannel:ApnsVoipChannel": { - "description": "Provides a Pinpoint APNs VoIP Channel resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst app = new aws.pinpoint.App(\"app\", {});\nconst apnsVoip = new aws.pinpoint.ApnsVoipChannel(\"apnsVoip\", {\n applicationId: app.applicationId,\n certificate: fs.readFileSync(\"./certificate.pem\"),\n privateKey: fs.readFileSync(\"./private_key.key\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\napp = aws.pinpoint.App(\"app\")\napns_voip = aws.pinpoint.ApnsVoipChannel(\"apnsVoip\",\n application_id=app.application_id,\n certificate=(lambda path: open(path).read())(\"./certificate.pem\"),\n private_key=(lambda path: open(path).read())(\"./private_key.key\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var app = new Aws.Pinpoint.App(\"app\", new Aws.Pinpoint.AppArgs\n {\n });\n var apnsVoip = new Aws.Pinpoint.ApnsVoipChannel(\"apnsVoip\", new Aws.Pinpoint.ApnsVoipChannelArgs\n {\n ApplicationId = app.ApplicationId,\n Certificate = File.ReadAllText(\"./certificate.pem\"),\n PrivateKey = File.ReadAllText(\"./private_key.key\"),\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nPinpoint APNs VoIP Channel can be imported using the `application-id`, e.g.\n\n```sh\n $ pulumi import aws:pinpoint/apnsVoipChannel:ApnsVoipChannel apns_voip application-id\n```\n\n ", + "description": "Provides a Pinpoint APNs VoIP Channel resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst app = new aws.pinpoint.App(\"app\", {});\nconst apnsVoip = new aws.pinpoint.ApnsVoipChannel(\"apnsVoip\", {\n applicationId: app.applicationId,\n certificate: fs.readFileSync(\"./certificate.pem\"),\n privateKey: fs.readFileSync(\"./private_key.key\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\napp = aws.pinpoint.App(\"app\")\napns_voip = aws.pinpoint.ApnsVoipChannel(\"apnsVoip\",\n application_id=app.application_id,\n certificate=(lambda path: open(path).read())(\"./certificate.pem\"),\n private_key=(lambda path: open(path).read())(\"./private_key.key\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var app = new Aws.Pinpoint.App(\"app\", new Aws.Pinpoint.AppArgs\n {\n });\n var apnsVoip = new Aws.Pinpoint.ApnsVoipChannel(\"apnsVoip\", new Aws.Pinpoint.ApnsVoipChannelArgs\n {\n ApplicationId = app.ApplicationId,\n Certificate = File.ReadAllText(\"./certificate.pem\"),\n PrivateKey = File.ReadAllText(\"./private_key.key\"),\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/pinpoint\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tapp, err := pinpoint.NewApp(ctx, \"app\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pinpoint.NewApnsVoipChannel(ctx, \"apnsVoip\", \u0026pinpoint.ApnsVoipChannelArgs{\n\t\t\tApplicationId: app.ApplicationId,\n\t\t\tCertificate: readFileOrPanic(\"./certificate.pem\"),\n\t\t\tPrivateKey: readFileOrPanic(\"./private_key.key\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nPinpoint APNs VoIP Channel can be imported using the `application-id`, e.g.\n\n```sh\n $ pulumi import aws:pinpoint/apnsVoipChannel:ApnsVoipChannel apns_voip application-id\n```\n\n ", "inputProperties": { "applicationId": { "description": "The application ID.\n", @@ -107655,7 +110554,7 @@ } }, "aws:pinpoint/apnsVoipSandboxChannel:ApnsVoipSandboxChannel": { - "description": "Provides a Pinpoint APNs VoIP Sandbox Channel resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst app = new aws.pinpoint.App(\"app\", {});\nconst apnsVoipSandbox = new aws.pinpoint.ApnsVoipSandboxChannel(\"apnsVoipSandbox\", {\n applicationId: app.applicationId,\n certificate: fs.readFileSync(\"./certificate.pem\"),\n privateKey: fs.readFileSync(\"./private_key.key\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\napp = aws.pinpoint.App(\"app\")\napns_voip_sandbox = aws.pinpoint.ApnsVoipSandboxChannel(\"apnsVoipSandbox\",\n application_id=app.application_id,\n certificate=(lambda path: open(path).read())(\"./certificate.pem\"),\n private_key=(lambda path: open(path).read())(\"./private_key.key\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var app = new Aws.Pinpoint.App(\"app\", new Aws.Pinpoint.AppArgs\n {\n });\n var apnsVoipSandbox = new Aws.Pinpoint.ApnsVoipSandboxChannel(\"apnsVoipSandbox\", new Aws.Pinpoint.ApnsVoipSandboxChannelArgs\n {\n ApplicationId = app.ApplicationId,\n Certificate = File.ReadAllText(\"./certificate.pem\"),\n PrivateKey = File.ReadAllText(\"./private_key.key\"),\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nPinpoint APNs VoIP Sandbox Channel can be imported using the `application-id`, e.g.\n\n```sh\n $ pulumi import aws:pinpoint/apnsVoipSandboxChannel:ApnsVoipSandboxChannel apns_voip_sandbox application-id\n```\n\n ", + "description": "Provides a Pinpoint APNs VoIP Sandbox Channel resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst app = new aws.pinpoint.App(\"app\", {});\nconst apnsVoipSandbox = new aws.pinpoint.ApnsVoipSandboxChannel(\"apnsVoipSandbox\", {\n applicationId: app.applicationId,\n certificate: fs.readFileSync(\"./certificate.pem\"),\n privateKey: fs.readFileSync(\"./private_key.key\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\napp = aws.pinpoint.App(\"app\")\napns_voip_sandbox = aws.pinpoint.ApnsVoipSandboxChannel(\"apnsVoipSandbox\",\n application_id=app.application_id,\n certificate=(lambda path: open(path).read())(\"./certificate.pem\"),\n private_key=(lambda path: open(path).read())(\"./private_key.key\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var app = new Aws.Pinpoint.App(\"app\", new Aws.Pinpoint.AppArgs\n {\n });\n var apnsVoipSandbox = new Aws.Pinpoint.ApnsVoipSandboxChannel(\"apnsVoipSandbox\", new Aws.Pinpoint.ApnsVoipSandboxChannelArgs\n {\n ApplicationId = app.ApplicationId,\n Certificate = File.ReadAllText(\"./certificate.pem\"),\n PrivateKey = File.ReadAllText(\"./private_key.key\"),\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/pinpoint\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tapp, err := pinpoint.NewApp(ctx, \"app\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pinpoint.NewApnsVoipSandboxChannel(ctx, \"apnsVoipSandbox\", \u0026pinpoint.ApnsVoipSandboxChannelArgs{\n\t\t\tApplicationId: app.ApplicationId,\n\t\t\tCertificate: readFileOrPanic(\"./certificate.pem\"),\n\t\t\tPrivateKey: readFileOrPanic(\"./private_key.key\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nPinpoint APNs VoIP Sandbox Channel can be imported using the `application-id`, e.g.\n\n```sh\n $ pulumi import aws:pinpoint/apnsVoipSandboxChannel:ApnsVoipSandboxChannel apns_voip_sandbox application-id\n```\n\n ", "inputProperties": { "applicationId": { "description": "The application ID.\n", @@ -108388,6 +111287,200 @@ "type": "object" } }, + "aws:quicksight/dataSource:DataSource": { + "description": "Resource for managing QuickSight Data Source\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst defaultDataSource = new aws.quicksight.DataSource(\"default\", {\n dataSourceId: \"example-id\",\n parameters: {\n s3: {\n manifestFileLocation: {\n bucket: \"my-bucket\",\n key: \"path/to/manifest.json\",\n },\n },\n },\n type: \"S3\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ndefault = aws.quicksight.DataSource(\"default\",\n data_source_id=\"example-id\",\n parameters=aws.quicksight.DataSourceParametersArgs(\n s3=aws.quicksight.DataSourceParametersS3Args(\n manifest_file_location=aws.quicksight.DataSourceParametersS3ManifestFileLocationArgs(\n bucket=\"my-bucket\",\n key=\"path/to/manifest.json\",\n ),\n ),\n ),\n type=\"S3\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var @default = new Aws.Quicksight.DataSource(\"default\", new Aws.Quicksight.DataSourceArgs\n {\n DataSourceId = \"example-id\",\n Parameters = new Aws.Quicksight.Inputs.DataSourceParametersArgs\n {\n S3 = new Aws.Quicksight.Inputs.DataSourceParametersS3Args\n {\n ManifestFileLocation = new Aws.Quicksight.Inputs.DataSourceParametersS3ManifestFileLocationArgs\n {\n Bucket = \"my-bucket\",\n Key = \"path/to/manifest.json\",\n },\n },\n },\n Type = \"S3\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/quicksight\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := quicksight.NewDataSource(ctx, \"_default\", \u0026quicksight.DataSourceArgs{\n\t\t\tDataSourceId: pulumi.String(\"example-id\"),\n\t\t\tParameters: \u0026quicksight.DataSourceParametersArgs{\n\t\t\t\tS3: \u0026quicksight.DataSourceParametersS3Args{\n\t\t\t\t\tManifestFileLocation: \u0026quicksight.DataSourceParametersS3ManifestFileLocationArgs{\n\t\t\t\t\t\tBucket: pulumi.String(\"my-bucket\"),\n\t\t\t\t\t\tKey: pulumi.String(\"path/to/manifest.json\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tType: pulumi.String(\"S3\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA QuickSight data source can be imported using the AWS account ID, and data source ID name separated by a slash (`/`) e.g.\n\n```sh\n $ pulumi import aws:quicksight/dataSource:DataSource example 123456789123/my-data-source-id\n```\n\n ", + "inputProperties": { + "awsAccountId": { + "description": "The ID for the AWS account that the data source is in. Currently, you use the ID for the AWS account that contains your Amazon QuickSight account.\n", + "type": "string" + }, + "credentials": { + "$ref": "#/types/aws:quicksight/DataSourceCredentials:DataSourceCredentials", + "description": "The credentials Amazon QuickSight uses to connect to your underlying source. Currently, only credentials based on user name and password are supported. See Credentials below for more details.\n" + }, + "dataSourceId": { + "description": "An identifier for the data source.\n", + "type": "string" + }, + "name": { + "description": "A name for the data source, maximum of 128 characters.\n", + "type": "string" + }, + "parameters": { + "$ref": "#/types/aws:quicksight/DataSourceParameters:DataSourceParameters", + "description": "The parameters used to connect to this data source (exactly one).\n" + }, + "permissions": { + "description": "A set of resource permissions on the data source. Maximum of 64 items. See Permission below for more details.\n", + "items": { + "$ref": "#/types/aws:quicksight/DataSourcePermission:DataSourcePermission" + }, + "type": "array" + }, + "sslProperties": { + "$ref": "#/types/aws:quicksight/DataSourceSslProperties:DataSourceSslProperties", + "description": "Secure Socket Layer (SSL) properties that apply when Amazon QuickSight connects to your underlying source. See SSL Properties below for more details.\n" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "Key-value map of resource tags. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + }, + "type": { + "description": "The type of the data source. See the [AWS Documentation](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CreateDataSource.html#QS-CreateDataSource-request-Type) for the complete list of valid values.\n", + "type": "string" + }, + "vpcConnectionProperties": { + "$ref": "#/types/aws:quicksight/DataSourceVpcConnectionProperties:DataSourceVpcConnectionProperties", + "description": "Use this parameter only when you want Amazon QuickSight to use a VPC connection when connecting to your underlying source. See VPC Connection Properties below for more details.\n" + } + }, + "properties": { + "arn": { + "description": "Amazon Resource Name (ARN) of the data source\n", + "type": "string" + }, + "awsAccountId": { + "description": "The ID for the AWS account that the data source is in. Currently, you use the ID for the AWS account that contains your Amazon QuickSight account.\n", + "type": "string" + }, + "credentials": { + "$ref": "#/types/aws:quicksight/DataSourceCredentials:DataSourceCredentials", + "description": "The credentials Amazon QuickSight uses to connect to your underlying source. Currently, only credentials based on user name and password are supported. See Credentials below for more details.\n" + }, + "dataSourceId": { + "description": "An identifier for the data source.\n", + "type": "string" + }, + "name": { + "description": "A name for the data source, maximum of 128 characters.\n", + "type": "string" + }, + "parameters": { + "$ref": "#/types/aws:quicksight/DataSourceParameters:DataSourceParameters", + "description": "The parameters used to connect to this data source (exactly one).\n" + }, + "permissions": { + "description": "A set of resource permissions on the data source. Maximum of 64 items. See Permission below for more details.\n", + "items": { + "$ref": "#/types/aws:quicksight/DataSourcePermission:DataSourcePermission" + }, + "type": "array" + }, + "sslProperties": { + "$ref": "#/types/aws:quicksight/DataSourceSslProperties:DataSourceSslProperties", + "description": "Secure Socket Layer (SSL) properties that apply when Amazon QuickSight connects to your underlying source. See SSL Properties below for more details.\n" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "Key-value map of resource tags. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + }, + "type": { + "description": "The type of the data source. See the [AWS Documentation](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CreateDataSource.html#QS-CreateDataSource-request-Type) for the complete list of valid values.\n", + "type": "string" + }, + "vpcConnectionProperties": { + "$ref": "#/types/aws:quicksight/DataSourceVpcConnectionProperties:DataSourceVpcConnectionProperties", + "description": "Use this parameter only when you want Amazon QuickSight to use a VPC connection when connecting to your underlying source. See VPC Connection Properties below for more details.\n" + } + }, + "required": [ + "arn", + "awsAccountId", + "dataSourceId", + "name", + "parameters", + "tagsAll", + "type" + ], + "requiredInputs": [ + "dataSourceId", + "parameters", + "type" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering DataSource resources.\n", + "properties": { + "arn": { + "description": "Amazon Resource Name (ARN) of the data source\n", + "type": "string" + }, + "awsAccountId": { + "description": "The ID for the AWS account that the data source is in. Currently, you use the ID for the AWS account that contains your Amazon QuickSight account.\n", + "type": "string" + }, + "credentials": { + "$ref": "#/types/aws:quicksight/DataSourceCredentials:DataSourceCredentials", + "description": "The credentials Amazon QuickSight uses to connect to your underlying source. Currently, only credentials based on user name and password are supported. See Credentials below for more details.\n" + }, + "dataSourceId": { + "description": "An identifier for the data source.\n", + "type": "string" + }, + "name": { + "description": "A name for the data source, maximum of 128 characters.\n", + "type": "string" + }, + "parameters": { + "$ref": "#/types/aws:quicksight/DataSourceParameters:DataSourceParameters", + "description": "The parameters used to connect to this data source (exactly one).\n" + }, + "permissions": { + "description": "A set of resource permissions on the data source. Maximum of 64 items. See Permission below for more details.\n", + "items": { + "$ref": "#/types/aws:quicksight/DataSourcePermission:DataSourcePermission" + }, + "type": "array" + }, + "sslProperties": { + "$ref": "#/types/aws:quicksight/DataSourceSslProperties:DataSourceSslProperties", + "description": "Secure Socket Layer (SSL) properties that apply when Amazon QuickSight connects to your underlying source. See SSL Properties below for more details.\n" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "Key-value map of resource tags. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + }, + "type": { + "description": "The type of the data source. See the [AWS Documentation](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CreateDataSource.html#QS-CreateDataSource-request-Type) for the complete list of valid values.\n", + "type": "string" + }, + "vpcConnectionProperties": { + "$ref": "#/types/aws:quicksight/DataSourceVpcConnectionProperties:DataSourceVpcConnectionProperties", + "description": "Use this parameter only when you want Amazon QuickSight to use a VPC connection when connecting to your underlying source. See VPC Connection Properties below for more details.\n" + } + }, + "type": "object" + } + }, "aws:quicksight/group:Group": { "description": "Resource for managing QuickSight Group\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.quicksight.Group(\"example\", {\n groupName: \"tf-example\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.quicksight.Group(\"example\", group_name=\"tf-example\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Quicksight.Group(\"example\", new Aws.Quicksight.GroupArgs\n {\n GroupName = \"tf-example\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/quicksight\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := quicksight.NewGroup(ctx, \"example\", \u0026quicksight.GroupArgs{\n\t\t\tGroupName: pulumi.String(\"tf-example\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nQuickSight Group can be imported using the aws account id, namespace and group name separated by `/`.\n\n```sh\n $ pulumi import aws:quicksight/group:Group example 123456789123/default/tf-example\n```\n\n ", "inputProperties": { @@ -108999,6 +112092,10 @@ "description": "A cluster parameter group to associate with the cluster.\n", "type": "string" }, + "dbInstanceParameterGroupName": { + "description": "Instance parameter group to associate with all instances of the DB cluster. The `db_instance_parameter_group_name` parameter is only valid in combination with the `allow_major_version_upgrade` parameter.\n", + "type": "string" + }, "dbSubnetGroupName": { "description": "A DB subnet group to associate with this DB instance. **NOTE:** This must match the `db_subnet_group_name` specified on every `aws.rds.ClusterInstance` in the cluster.\n", "type": "string" @@ -109007,6 +112104,10 @@ "description": "If the DB instance should have deletion protection enabled. The database can't be deleted when this value is set to `true`. The default is `false`.\n", "type": "boolean" }, + "enableGlobalWriteForwarding": { + "description": "Whether cluster should forward writes to an associated global cluster. Applied to secondary clusters to enable them to forward writes to an `aws.rds.GlobalCluster`'s primary cluster. See the [Aurora Userguide documentation](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-write-forwarding.html) for more information.\n", + "type": "boolean" + }, "enableHttpEndpoint": { "description": "Enable HTTP endpoint (data API). Only valid when `engine_mode` is set to `serverless`.\n", "type": "boolean" @@ -109196,6 +112297,10 @@ "description": "A cluster parameter group to associate with the cluster.\n", "type": "string" }, + "dbInstanceParameterGroupName": { + "description": "Instance parameter group to associate with all instances of the DB cluster. The `db_instance_parameter_group_name` parameter is only valid in combination with the `allow_major_version_upgrade` parameter.\n", + "type": "string" + }, "dbSubnetGroupName": { "description": "A DB subnet group to associate with this DB instance. **NOTE:** This must match the `db_subnet_group_name` specified on every `aws.rds.ClusterInstance` in the cluster.\n", "type": "string" @@ -109204,6 +112309,10 @@ "description": "If the DB instance should have deletion protection enabled. The database can't be deleted when this value is set to `true`. The default is `false`.\n", "type": "boolean" }, + "enableGlobalWriteForwarding": { + "description": "Whether cluster should forward writes to an associated global cluster. Applied to secondary clusters to enable them to forward writes to an `aws.rds.GlobalCluster`'s primary cluster. See the [Aurora Userguide documentation](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-write-forwarding.html) for more information.\n", + "type": "boolean" + }, "enableHttpEndpoint": { "description": "Enable HTTP endpoint (data API). Only valid when `engine_mode` is set to `serverless`.\n", "type": "boolean" @@ -109426,6 +112535,10 @@ "description": "A cluster parameter group to associate with the cluster.\n", "type": "string" }, + "dbInstanceParameterGroupName": { + "description": "Instance parameter group to associate with all instances of the DB cluster. The `db_instance_parameter_group_name` parameter is only valid in combination with the `allow_major_version_upgrade` parameter.\n", + "type": "string" + }, "dbSubnetGroupName": { "description": "A DB subnet group to associate with this DB instance. **NOTE:** This must match the `db_subnet_group_name` specified on every `aws.rds.ClusterInstance` in the cluster.\n", "type": "string" @@ -109434,6 +112547,10 @@ "description": "If the DB instance should have deletion protection enabled. The database can't be deleted when this value is set to `true`. The default is `false`.\n", "type": "boolean" }, + "enableGlobalWriteForwarding": { + "description": "Whether cluster should forward writes to an associated global cluster. Applied to secondary clusters to enable them to forward writes to an `aws.rds.GlobalCluster`'s primary cluster. See the [Aurora Userguide documentation](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-write-forwarding.html) for more information.\n", + "type": "boolean" + }, "enableHttpEndpoint": { "description": "Enable HTTP endpoint (data API). Only valid when `engine_mode` is set to `serverless`.\n", "type": "boolean" @@ -109786,7 +112903,7 @@ "type": "string" }, "engineVersion": { - "description": "The database engine version. When managing the engine version in the cluster, it is recommended to add the `ignore_changes` for this argument to prevent the provider from proposing changes to the instance engine version directly.\n", + "description": "The database engine version.\n", "type": "string" }, "identifier": { @@ -109823,9 +112940,13 @@ "type": "boolean" }, "performanceInsightsKmsKeyId": { - "description": "The ARN for the KMS key to encrypt Performance Insights data. When specifying `performance_insights_kms_key_id`, `performance_insights_enabled` needs to be set to true.\n", + "description": "ARN for the KMS key to encrypt Performance Insights data. When specifying `performance_insights_kms_key_id`, `performance_insights_enabled` needs to be set to true.\n", "type": "string" }, + "performanceInsightsRetentionPeriod": { + "description": "Amount of time in days to retain Performance Insights data. Either 7 (7 days) or 731 (2 years). When specifying `performance_insights_retention_period`, `performance_insights_enabled` needs to be set to true. Defaults to '7'.\n", + "type": "integer" + }, "preferredBackupWindow": { "description": "The daily time range during which automated backups are created if automated backups are enabled.\nEg: \"04:00-09:00\"\n", "type": "string" @@ -109901,7 +113022,7 @@ "type": "string" }, "engineVersion": { - "description": "The database engine version. When managing the engine version in the cluster, it is recommended to add the `ignore_changes` for this argument to prevent the provider from proposing changes to the instance engine version directly.\n", + "description": "The database engine version.\n", "type": "string" }, "engineVersionActual": { @@ -109937,9 +113058,13 @@ "type": "boolean" }, "performanceInsightsKmsKeyId": { - "description": "The ARN for the KMS key to encrypt Performance Insights data. When specifying `performance_insights_kms_key_id`, `performance_insights_enabled` needs to be set to true.\n", + "description": "ARN for the KMS key to encrypt Performance Insights data. When specifying `performance_insights_kms_key_id`, `performance_insights_enabled` needs to be set to true.\n", "type": "string" }, + "performanceInsightsRetentionPeriod": { + "description": "Amount of time in days to retain Performance Insights data. Either 7 (7 days) or 731 (2 years). When specifying `performance_insights_retention_period`, `performance_insights_enabled` needs to be set to true. Defaults to '7'.\n", + "type": "integer" + }, "port": { "description": "The database port\n", "type": "integer" @@ -110002,6 +113127,7 @@ "monitoringRoleArn", "performanceInsightsEnabled", "performanceInsightsKmsKeyId", + "performanceInsightsRetentionPeriod", "port", "preferredBackupWindow", "preferredMaintenanceWindow", @@ -110066,7 +113192,7 @@ "type": "string" }, "engineVersion": { - "description": "The database engine version. When managing the engine version in the cluster, it is recommended to add the `ignore_changes` for this argument to prevent the provider from proposing changes to the instance engine version directly.\n", + "description": "The database engine version.\n", "type": "string" }, "engineVersionActual": { @@ -110111,9 +113237,13 @@ "type": "boolean" }, "performanceInsightsKmsKeyId": { - "description": "The ARN for the KMS key to encrypt Performance Insights data. When specifying `performance_insights_kms_key_id`, `performance_insights_enabled` needs to be set to true.\n", + "description": "ARN for the KMS key to encrypt Performance Insights data. When specifying `performance_insights_kms_key_id`, `performance_insights_enabled` needs to be set to true.\n", "type": "string" }, + "performanceInsightsRetentionPeriod": { + "description": "Amount of time in days to retain Performance Insights data. Either 7 (7 days) or 731 (2 years). When specifying `performance_insights_retention_period`, `performance_insights_enabled` needs to be set to true. Defaults to '7'.\n", + "type": "integer" + }, "port": { "description": "The database port\n", "type": "integer" @@ -110665,6 +113795,7 @@ "arn", "customerAwsId", "name", + "namePrefix", "snsTopic", "tagsAll" ], @@ -111069,6 +114200,10 @@ "description": "Bool to control if instance is publicly\naccessible. Default is `false`.\n", "type": "boolean" }, + "replicaMode": { + "description": "Specifies whether the replica is in either `mounted` or `open-read-only` mode. This attribute\nis only supported by Oracle instances. Oracle replicas operate in `open-read-only` mode unless otherwise specified. See [Working with Oracle Read Replicas](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html) for more information.\n", + "type": "string" + }, "replicateSourceDb": { "description": "Specifies that this resource is a Replicate\ndatabase, and to use this value as the source database. This correlates to the\n`identifier` of another Amazon RDS Database to replicate (if replicating within\na single region) or ARN of the Amazon RDS Database to replicate (if replicating\ncross-region). Note that if you are\ncreating a cross-region replica of an encrypted database you will also need to\nspecify a `kms_key_id`. See [DB Instance Replication][1] and [Working with\nPostgreSQL and MySQL Read Replicas](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html)\nfor more information on using Replication.\n", "type": "string" @@ -111332,6 +114467,10 @@ "description": "Bool to control if instance is publicly\naccessible. Default is `false`.\n", "type": "boolean" }, + "replicaMode": { + "description": "Specifies whether the replica is in either `mounted` or `open-read-only` mode. This attribute\nis only supported by Oracle instances. Oracle replicas operate in `open-read-only` mode unless otherwise specified. See [Working with Oracle Read Replicas](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html) for more information.\n", + "type": "string" + }, "replicas": { "items": { "type": "string" @@ -111663,6 +114802,10 @@ "description": "Bool to control if instance is publicly\naccessible. Default is `false`.\n", "type": "boolean" }, + "replicaMode": { + "description": "Specifies whether the replica is in either `mounted` or `open-read-only` mode. This attribute\nis only supported by Oracle instances. Oracle replicas operate in `open-read-only` mode unless otherwise specified. See [Working with Oracle Read Replicas](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html) for more information.\n", + "type": "string" + }, "replicas": { "items": { "type": "string" @@ -113986,6 +117129,126 @@ "type": "object" } }, + "aws:redshift/scheduledAction:ScheduledAction": { + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Pause Cluster Action\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleRole = new aws.iam.Role(\"exampleRole\", {assumeRolePolicy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": [\n \"scheduler.redshift.amazonaws.com\"\n ]\n },\n \"Effect\": \"Allow\",\n \"Sid\": \"\"\n }\n ]\n}\n`});\nconst examplePolicy = new aws.iam.Policy(\"examplePolicy\", {policy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"VisualEditor0\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"redshift:PauseCluster\",\n \"redshift:ResumeCluster\",\n \"redshift:ResizeCluster\"\n ],\n \"Resource\": \"*\"\n }\n ]\n}\n`});\nconst exampleRolePolicyAttachment = new aws.iam.RolePolicyAttachment(\"exampleRolePolicyAttachment\", {\n policyArn: examplePolicy.arn,\n role: exampleRole.name,\n});\nconst exampleScheduledAction = new aws.redshift.ScheduledAction(\"exampleScheduledAction\", {\n schedule: \"cron(00 23 * * ? *)\",\n iamRole: exampleRole.arn,\n targetAction: {\n pauseCluster: {\n clusterIdentifier: \"tf-redshift001\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_role = aws.iam.Role(\"exampleRole\", assume_role_policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": [\n \"scheduler.redshift.amazonaws.com\"\n ]\n },\n \"Effect\": \"Allow\",\n \"Sid\": \"\"\n }\n ]\n}\n\"\"\")\nexample_policy = aws.iam.Policy(\"examplePolicy\", policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"VisualEditor0\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"redshift:PauseCluster\",\n \"redshift:ResumeCluster\",\n \"redshift:ResizeCluster\"\n ],\n \"Resource\": \"*\"\n }\n ]\n}\n\"\"\")\nexample_role_policy_attachment = aws.iam.RolePolicyAttachment(\"exampleRolePolicyAttachment\",\n policy_arn=example_policy.arn,\n role=example_role.name)\nexample_scheduled_action = aws.redshift.ScheduledAction(\"exampleScheduledAction\",\n schedule=\"cron(00 23 * * ? *)\",\n iam_role=example_role.arn,\n target_action=aws.redshift.ScheduledActionTargetActionArgs(\n pause_cluster=aws.redshift.ScheduledActionTargetActionPauseClusterArgs(\n cluster_identifier=\"tf-redshift001\",\n ),\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleRole = new Aws.Iam.Role(\"exampleRole\", new Aws.Iam.RoleArgs\n {\n AssumeRolePolicy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Action\"\": \"\"sts:AssumeRole\"\",\n \"\"Principal\"\": {\n \"\"Service\"\": [\n \"\"scheduler.redshift.amazonaws.com\"\"\n ]\n },\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Sid\"\": \"\"\"\"\n }\n ]\n}\n\",\n });\n var examplePolicy = new Aws.Iam.Policy(\"examplePolicy\", new Aws.Iam.PolicyArgs\n {\n Policy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Sid\"\": \"\"VisualEditor0\"\",\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Action\"\": [\n \"\"redshift:PauseCluster\"\",\n \"\"redshift:ResumeCluster\"\",\n \"\"redshift:ResizeCluster\"\"\n ],\n \"\"Resource\"\": \"\"*\"\"\n }\n ]\n}\n\",\n });\n var exampleRolePolicyAttachment = new Aws.Iam.RolePolicyAttachment(\"exampleRolePolicyAttachment\", new Aws.Iam.RolePolicyAttachmentArgs\n {\n PolicyArn = examplePolicy.Arn,\n Role = exampleRole.Name,\n });\n var exampleScheduledAction = new Aws.RedShift.ScheduledAction(\"exampleScheduledAction\", new Aws.RedShift.ScheduledActionArgs\n {\n Schedule = \"cron(00 23 * * ? *)\",\n IamRole = exampleRole.Arn,\n TargetAction = new Aws.RedShift.Inputs.ScheduledActionTargetActionArgs\n {\n PauseCluster = new Aws.RedShift.Inputs.ScheduledActionTargetActionPauseClusterArgs\n {\n ClusterIdentifier = \"tf-redshift001\",\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/redshift\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleRole, err := iam.NewRole(ctx, \"exampleRole\", \u0026iam.RoleArgs{\n\t\t\tAssumeRolePolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Action\\\": \\\"sts:AssumeRole\\\",\\n\", \" \\\"Principal\\\": {\\n\", \" \\\"Service\\\": [\\n\", \" \\\"scheduler.redshift.amazonaws.com\\\"\\n\", \" ]\\n\", \" },\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Sid\\\": \\\"\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texamplePolicy, err := iam.NewPolicy(ctx, \"examplePolicy\", \u0026iam.PolicyArgs{\n\t\t\tPolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Sid\\\": \\\"VisualEditor0\\\",\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Action\\\": [\\n\", \" \\\"redshift:PauseCluster\\\",\\n\", \" \\\"redshift:ResumeCluster\\\",\\n\", \" \\\"redshift:ResizeCluster\\\"\\n\", \" ],\\n\", \" \\\"Resource\\\": \\\"*\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewRolePolicyAttachment(ctx, \"exampleRolePolicyAttachment\", \u0026iam.RolePolicyAttachmentArgs{\n\t\t\tPolicyArn: examplePolicy.Arn,\n\t\t\tRole: exampleRole.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redshift.NewScheduledAction(ctx, \"exampleScheduledAction\", \u0026redshift.ScheduledActionArgs{\n\t\t\tSchedule: pulumi.String(\"cron(00 23 * * ? *)\"),\n\t\t\tIamRole: exampleRole.Arn,\n\t\t\tTargetAction: \u0026redshift.ScheduledActionTargetActionArgs{\n\t\t\t\tPauseCluster: \u0026redshift.ScheduledActionTargetActionPauseClusterArgs{\n\t\t\t\t\tClusterIdentifier: pulumi.String(\"tf-redshift001\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Resize Cluster Action\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.redshift.ScheduledAction(\"example\", {\n schedule: \"cron(00 23 * * ? *)\",\n iamRole: aws_iam_role.example.arn,\n targetAction: {\n resizeCluster: {\n clusterIdentifier: \"tf-redshift001\",\n clusterType: \"multi-node\",\n nodeType: \"dc1.large\",\n numberOfNodes: 2,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.redshift.ScheduledAction(\"example\",\n schedule=\"cron(00 23 * * ? *)\",\n iam_role=aws_iam_role[\"example\"][\"arn\"],\n target_action=aws.redshift.ScheduledActionTargetActionArgs(\n resize_cluster=aws.redshift.ScheduledActionTargetActionResizeClusterArgs(\n cluster_identifier=\"tf-redshift001\",\n cluster_type=\"multi-node\",\n node_type=\"dc1.large\",\n number_of_nodes=2,\n ),\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.RedShift.ScheduledAction(\"example\", new Aws.RedShift.ScheduledActionArgs\n {\n Schedule = \"cron(00 23 * * ? *)\",\n IamRole = aws_iam_role.Example.Arn,\n TargetAction = new Aws.RedShift.Inputs.ScheduledActionTargetActionArgs\n {\n ResizeCluster = new Aws.RedShift.Inputs.ScheduledActionTargetActionResizeClusterArgs\n {\n ClusterIdentifier = \"tf-redshift001\",\n ClusterType = \"multi-node\",\n NodeType = \"dc1.large\",\n NumberOfNodes = 2,\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/redshift\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := redshift.NewScheduledAction(ctx, \"example\", \u0026redshift.ScheduledActionArgs{\n\t\t\tSchedule: pulumi.String(\"cron(00 23 * * ? *)\"),\n\t\t\tIamRole: pulumi.Any(aws_iam_role.Example.Arn),\n\t\t\tTargetAction: \u0026redshift.ScheduledActionTargetActionArgs{\n\t\t\t\tResizeCluster: \u0026redshift.ScheduledActionTargetActionResizeClusterArgs{\n\t\t\t\t\tClusterIdentifier: pulumi.String(\"tf-redshift001\"),\n\t\t\t\t\tClusterType: pulumi.String(\"multi-node\"),\n\t\t\t\t\tNodeType: pulumi.String(\"dc1.large\"),\n\t\t\t\t\tNumberOfNodes: pulumi.Int(2),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRedshift Scheduled Action can be imported using the `name`, e.g.\n\n```sh\n $ pulumi import aws:redshift/scheduledAction:ScheduledAction example tf-redshift-scheduled-action\n```\n\n ", + "inputProperties": { + "description": { + "description": "The description of the scheduled action.\n", + "type": "string" + }, + "enable": { + "description": "Whether to enable the scheduled action. Default is `true` .\n", + "type": "boolean" + }, + "endTime": { + "description": "The end time in UTC when the schedule is active, in UTC RFC3339 format(for example, YYYY-MM-DDTHH:MM:SSZ).\n", + "type": "string" + }, + "iamRole": { + "description": "The IAM role to assume to run the scheduled action.\n", + "type": "string" + }, + "name": { + "description": "The scheduled action name.\n", + "type": "string" + }, + "schedule": { + "description": "The schedule of action. The schedule is defined format of \"at expression\" or \"cron expression\", for example `at(2016-03-04T17:27:00)` or `cron(0 10 ? * MON *)`. See [Scheduled Action](https://docs.aws.amazon.com/redshift/latest/APIReference/API_ScheduledAction.html) for more information.\n", + "type": "string" + }, + "startTime": { + "description": "The start time in UTC when the schedule is active, in UTC RFC3339 format(for example, YYYY-MM-DDTHH:MM:SSZ).\n", + "type": "string" + }, + "targetAction": { + "$ref": "#/types/aws:redshift/ScheduledActionTargetAction:ScheduledActionTargetAction", + "description": "Target action. Documented below.\n" + } + }, + "properties": { + "description": { + "description": "The description of the scheduled action.\n", + "type": "string" + }, + "enable": { + "description": "Whether to enable the scheduled action. Default is `true` .\n", + "type": "boolean" + }, + "endTime": { + "description": "The end time in UTC when the schedule is active, in UTC RFC3339 format(for example, YYYY-MM-DDTHH:MM:SSZ).\n", + "type": "string" + }, + "iamRole": { + "description": "The IAM role to assume to run the scheduled action.\n", + "type": "string" + }, + "name": { + "description": "The scheduled action name.\n", + "type": "string" + }, + "schedule": { + "description": "The schedule of action. The schedule is defined format of \"at expression\" or \"cron expression\", for example `at(2016-03-04T17:27:00)` or `cron(0 10 ? * MON *)`. See [Scheduled Action](https://docs.aws.amazon.com/redshift/latest/APIReference/API_ScheduledAction.html) for more information.\n", + "type": "string" + }, + "startTime": { + "description": "The start time in UTC when the schedule is active, in UTC RFC3339 format(for example, YYYY-MM-DDTHH:MM:SSZ).\n", + "type": "string" + }, + "targetAction": { + "$ref": "#/types/aws:redshift/ScheduledActionTargetAction:ScheduledActionTargetAction", + "description": "Target action. Documented below.\n" + } + }, + "required": [ + "iamRole", + "name", + "schedule", + "targetAction" + ], + "requiredInputs": [ + "iamRole", + "schedule", + "targetAction" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering ScheduledAction resources.\n", + "properties": { + "description": { + "description": "The description of the scheduled action.\n", + "type": "string" + }, + "enable": { + "description": "Whether to enable the scheduled action. Default is `true` .\n", + "type": "boolean" + }, + "endTime": { + "description": "The end time in UTC when the schedule is active, in UTC RFC3339 format(for example, YYYY-MM-DDTHH:MM:SSZ).\n", + "type": "string" + }, + "iamRole": { + "description": "The IAM role to assume to run the scheduled action.\n", + "type": "string" + }, + "name": { + "description": "The scheduled action name.\n", + "type": "string" + }, + "schedule": { + "description": "The schedule of action. The schedule is defined format of \"at expression\" or \"cron expression\", for example `at(2016-03-04T17:27:00)` or `cron(0 10 ? * MON *)`. See [Scheduled Action](https://docs.aws.amazon.com/redshift/latest/APIReference/API_ScheduledAction.html) for more information.\n", + "type": "string" + }, + "startTime": { + "description": "The start time in UTC when the schedule is active, in UTC RFC3339 format(for example, YYYY-MM-DDTHH:MM:SSZ).\n", + "type": "string" + }, + "targetAction": { + "$ref": "#/types/aws:redshift/ScheduledActionTargetAction:ScheduledActionTargetAction", + "description": "Target action. Documented below.\n" + } + }, + "type": "object" + } + }, "aws:redshift/securityGroup:SecurityGroup": { "description": "Creates a new Amazon Redshift security group. You use security groups to control access to non-VPC clusters\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst defaultSecurityGroup = new aws.redshift.SecurityGroup(\"default\", {\n ingress: [{\n cidr: \"10.0.0.0/24\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ndefault = aws.redshift.SecurityGroup(\"default\", ingress=[aws.redshift.SecurityGroupIngressArgs(\n cidr=\"10.0.0.0/24\",\n)])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var @default = new Aws.RedShift.SecurityGroup(\"default\", new Aws.RedShift.SecurityGroupArgs\n {\n Ingress = \n {\n new Aws.RedShift.Inputs.SecurityGroupIngressArgs\n {\n Cidr = \"10.0.0.0/24\",\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/redshift\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := redshift.NewSecurityGroup(ctx, \"_default\", \u0026redshift.SecurityGroupArgs{\n\t\t\tIngress: redshift.SecurityGroupIngressArray{\n\t\t\t\t\u0026redshift.SecurityGroupIngressArgs{\n\t\t\t\t\tCidr: pulumi.String(\"10.0.0.0/24\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRedshift security groups can be imported using the `name`, e.g.\n\n```sh\n $ pulumi import aws:redshift/securityGroup:SecurityGroup testgroup1 redshift_test_group\n```\n\n ", "inputProperties": { @@ -117878,7 +121141,7 @@ } }, "aws:s3/bucket:Bucket": { - "description": "Provides a S3 bucket resource.\n\n\u003e This functionality is for managing S3 in an AWS Partition. To manage [S3 on Outposts](https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html), see the `aws.s3control.Bucket` resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Private Bucket w/ Tags\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst bucket = new aws.s3.Bucket(\"b\", {\n acl: \"private\",\n tags: {\n Environment: \"Dev\",\n Name: \"My bucket\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nbucket = aws.s3.Bucket(\"bucket\",\n acl=\"private\",\n tags={\n \"Environment\": \"Dev\",\n \"Name\": \"My bucket\",\n })\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var bucket = new Aws.S3.Bucket(\"bucket\", new Aws.S3.BucketArgs\n {\n Acl = \"private\",\n Tags = \n {\n { \"Environment\", \"Dev\" },\n { \"Name\", \"My bucket\" },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := s3.NewBucket(ctx, \"bucket\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"private\"),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Environment\": pulumi.String(\"Dev\"),\n\t\t\t\t\"Name\": pulumi.String(\"My bucket\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Static Website Hosting\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst bucket = new aws.s3.Bucket(\"bucket\", {\n acl: \"public-read\",\n policy: fs.readFileSync(\"policy.json\"),\n website: {\n indexDocument: \"index.html\",\n errorDocument: \"error.html\",\n routingRules: `[{\n \"Condition\": {\n \"KeyPrefixEquals\": \"docs/\"\n },\n \"Redirect\": {\n \"ReplaceKeyPrefixWith\": \"documents/\"\n }\n}]\n`,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nbucket = aws.s3.Bucket(\"bucket\",\n acl=\"public-read\",\n policy=(lambda path: open(path).read())(\"policy.json\"),\n website=aws.s3.BucketWebsiteArgs(\n index_document=\"index.html\",\n error_document=\"error.html\",\n routing_rules=\"\"\"[{\n \"Condition\": {\n \"KeyPrefixEquals\": \"docs/\"\n },\n \"Redirect\": {\n \"ReplaceKeyPrefixWith\": \"documents/\"\n }\n}]\n\"\"\",\n ))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var bucket = new Aws.S3.Bucket(\"bucket\", new Aws.S3.BucketArgs\n {\n Acl = \"public-read\",\n Policy = File.ReadAllText(\"policy.json\"),\n Website = new Aws.S3.Inputs.BucketWebsiteArgs\n {\n IndexDocument = \"index.html\",\n ErrorDocument = \"error.html\",\n RoutingRules = @\"[{\n \"\"Condition\"\": {\n \"\"KeyPrefixEquals\"\": \"\"docs/\"\"\n },\n \"\"Redirect\"\": {\n \"\"ReplaceKeyPrefixWith\"\": \"\"documents/\"\"\n }\n}]\n\",\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% example %}}\n### Using CORS\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst bucket = new aws.s3.Bucket(\"b\", {\n acl: \"public-read\",\n corsRules: [{\n allowedHeaders: [\"*\"],\n allowedMethods: [\n \"PUT\",\n \"POST\",\n ],\n allowedOrigins: [\"https://s3-website-test.mydomain.com\"],\n exposeHeaders: [\"ETag\"],\n maxAgeSeconds: 3000,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nbucket = aws.s3.Bucket(\"bucket\",\n acl=\"public-read\",\n cors_rules=[aws.s3.BucketCorsRuleArgs(\n allowed_headers=[\"*\"],\n allowed_methods=[\n \"PUT\",\n \"POST\",\n ],\n allowed_origins=[\"https://s3-website-test.mydomain.com\"],\n expose_headers=[\"ETag\"],\n max_age_seconds=3000,\n )])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var bucket = new Aws.S3.Bucket(\"bucket\", new Aws.S3.BucketArgs\n {\n Acl = \"public-read\",\n CorsRules = \n {\n new Aws.S3.Inputs.BucketCorsRuleArgs\n {\n AllowedHeaders = \n {\n \"*\",\n },\n AllowedMethods = \n {\n \"PUT\",\n \"POST\",\n },\n AllowedOrigins = \n {\n \"https://s3-website-test.mydomain.com\",\n },\n ExposeHeaders = \n {\n \"ETag\",\n },\n MaxAgeSeconds = 3000,\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := s3.NewBucket(ctx, \"bucket\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"public-read\"),\n\t\t\tCorsRules: s3.BucketCorsRuleArray{\n\t\t\t\t\u0026s3.BucketCorsRuleArgs{\n\t\t\t\t\tAllowedHeaders: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"*\"),\n\t\t\t\t\t},\n\t\t\t\t\tAllowedMethods: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"PUT\"),\n\t\t\t\t\t\tpulumi.String(\"POST\"),\n\t\t\t\t\t},\n\t\t\t\t\tAllowedOrigins: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"https://s3-website-test.mydomain.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tExposeHeaders: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"ETag\"),\n\t\t\t\t\t},\n\t\t\t\t\tMaxAgeSeconds: pulumi.Int(3000),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Using versioning\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst bucket = new aws.s3.Bucket(\"b\", {\n acl: \"private\",\n versioning: {\n enabled: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nbucket = aws.s3.Bucket(\"bucket\",\n acl=\"private\",\n versioning=aws.s3.BucketVersioningArgs(\n enabled=True,\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var bucket = new Aws.S3.Bucket(\"bucket\", new Aws.S3.BucketArgs\n {\n Acl = \"private\",\n Versioning = new Aws.S3.Inputs.BucketVersioningArgs\n {\n Enabled = true,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := s3.NewBucket(ctx, \"bucket\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"private\"),\n\t\t\tVersioning: \u0026s3.BucketVersioningArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Enable Logging\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst logBucket = new aws.s3.Bucket(\"logBucket\", {acl: \"log-delivery-write\"});\nconst bucket = new aws.s3.Bucket(\"bucket\", {\n acl: \"private\",\n loggings: [{\n targetBucket: logBucket.id,\n targetPrefix: \"log/\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nlog_bucket = aws.s3.Bucket(\"logBucket\", acl=\"log-delivery-write\")\nbucket = aws.s3.Bucket(\"bucket\",\n acl=\"private\",\n loggings=[aws.s3.BucketLoggingArgs(\n target_bucket=log_bucket.id,\n target_prefix=\"log/\",\n )])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var logBucket = new Aws.S3.Bucket(\"logBucket\", new Aws.S3.BucketArgs\n {\n Acl = \"log-delivery-write\",\n });\n var bucket = new Aws.S3.Bucket(\"bucket\", new Aws.S3.BucketArgs\n {\n Acl = \"private\",\n Loggings = \n {\n new Aws.S3.Inputs.BucketLoggingArgs\n {\n TargetBucket = logBucket.Id,\n TargetPrefix = \"log/\",\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tlogBucket, err := s3.NewBucket(ctx, \"logBucket\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"log-delivery-write\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = s3.NewBucket(ctx, \"bucket\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"private\"),\n\t\t\tLoggings: s3.BucketLoggingArray{\n\t\t\t\t\u0026s3.BucketLoggingArgs{\n\t\t\t\t\tTargetBucket: logBucket.ID(),\n\t\t\t\t\tTargetPrefix: pulumi.String(\"log/\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Using object lifecycle\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst bucket = new aws.s3.Bucket(\"bucket\", {\n acl: \"private\",\n lifecycleRules: [\n {\n enabled: true,\n expiration: {\n days: 90,\n },\n id: \"log\",\n prefix: \"log/\",\n tags: {\n autoclean: \"true\",\n rule: \"log\",\n },\n transitions: [\n {\n days: 30,\n storageClass: \"STANDARD_IA\", // or \"ONEZONE_IA\"\n },\n {\n days: 60,\n storageClass: \"GLACIER\",\n },\n ],\n },\n {\n enabled: true,\n expiration: {\n date: \"2016-01-12\",\n },\n id: \"tmp\",\n prefix: \"tmp/\",\n },\n ],\n});\nconst versioningBucket = new aws.s3.Bucket(\"versioning_bucket\", {\n acl: \"private\",\n lifecycleRules: [{\n enabled: true,\n noncurrentVersionExpiration: {\n days: 90,\n },\n noncurrentVersionTransitions: [\n {\n days: 30,\n storageClass: \"STANDARD_IA\",\n },\n {\n days: 60,\n storageClass: \"GLACIER\",\n },\n ],\n prefix: \"config/\",\n }],\n versioning: {\n enabled: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nbucket = aws.s3.Bucket(\"bucket\",\n acl=\"private\",\n lifecycle_rules=[\n aws.s3.BucketLifecycleRuleArgs(\n enabled=True,\n expiration=aws.s3.BucketLifecycleRuleExpirationArgs(\n days=90,\n ),\n id=\"log\",\n prefix=\"log/\",\n tags={\n \"autoclean\": \"true\",\n \"rule\": \"log\",\n },\n transitions=[\n aws.s3.BucketLifecycleRuleTransitionArgs(\n days=30,\n storage_class=\"STANDARD_IA\",\n ),\n aws.s3.BucketLifecycleRuleTransitionArgs(\n days=60,\n storage_class=\"GLACIER\",\n ),\n ],\n ),\n aws.s3.BucketLifecycleRuleArgs(\n enabled=True,\n expiration=aws.s3.BucketLifecycleRuleExpirationArgs(\n date=\"2016-01-12\",\n ),\n id=\"tmp\",\n prefix=\"tmp/\",\n ),\n ])\nversioning_bucket = aws.s3.Bucket(\"versioningBucket\",\n acl=\"private\",\n lifecycle_rules=[aws.s3.BucketLifecycleRuleArgs(\n enabled=True,\n noncurrent_version_expiration=aws.s3.BucketLifecycleRuleNoncurrentVersionExpirationArgs(\n days=90,\n ),\n noncurrent_version_transitions=[\n aws.s3.BucketLifecycleRuleNoncurrentVersionTransitionArgs(\n days=30,\n storage_class=\"STANDARD_IA\",\n ),\n aws.s3.BucketLifecycleRuleNoncurrentVersionTransitionArgs(\n days=60,\n storage_class=\"GLACIER\",\n ),\n ],\n prefix=\"config/\",\n )],\n versioning=aws.s3.BucketVersioningArgs(\n enabled=True,\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var bucket = new Aws.S3.Bucket(\"bucket\", new Aws.S3.BucketArgs\n {\n Acl = \"private\",\n LifecycleRules = \n {\n new Aws.S3.Inputs.BucketLifecycleRuleArgs\n {\n Enabled = true,\n Expiration = new Aws.S3.Inputs.BucketLifecycleRuleExpirationArgs\n {\n Days = 90,\n },\n Id = \"log\",\n Prefix = \"log/\",\n Tags = \n {\n { \"autoclean\", \"true\" },\n { \"rule\", \"log\" },\n },\n Transitions = \n {\n new Aws.S3.Inputs.BucketLifecycleRuleTransitionArgs\n {\n Days = 30,\n StorageClass = \"STANDARD_IA\",\n },\n new Aws.S3.Inputs.BucketLifecycleRuleTransitionArgs\n {\n Days = 60,\n StorageClass = \"GLACIER\",\n },\n },\n },\n new Aws.S3.Inputs.BucketLifecycleRuleArgs\n {\n Enabled = true,\n Expiration = new Aws.S3.Inputs.BucketLifecycleRuleExpirationArgs\n {\n Date = \"2016-01-12\",\n },\n Id = \"tmp\",\n Prefix = \"tmp/\",\n },\n },\n });\n var versioningBucket = new Aws.S3.Bucket(\"versioningBucket\", new Aws.S3.BucketArgs\n {\n Acl = \"private\",\n LifecycleRules = \n {\n new Aws.S3.Inputs.BucketLifecycleRuleArgs\n {\n Enabled = true,\n NoncurrentVersionExpiration = new Aws.S3.Inputs.BucketLifecycleRuleNoncurrentVersionExpirationArgs\n {\n Days = 90,\n },\n NoncurrentVersionTransitions = \n {\n new Aws.S3.Inputs.BucketLifecycleRuleNoncurrentVersionTransitionArgs\n {\n Days = 30,\n StorageClass = \"STANDARD_IA\",\n },\n new Aws.S3.Inputs.BucketLifecycleRuleNoncurrentVersionTransitionArgs\n {\n Days = 60,\n StorageClass = \"GLACIER\",\n },\n },\n Prefix = \"config/\",\n },\n },\n Versioning = new Aws.S3.Inputs.BucketVersioningArgs\n {\n Enabled = true,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := s3.NewBucket(ctx, \"bucket\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"private\"),\n\t\t\tLifecycleRules: s3.BucketLifecycleRuleArray{\n\t\t\t\t\u0026s3.BucketLifecycleRuleArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t\tExpiration: \u0026s3.BucketLifecycleRuleExpirationArgs{\n\t\t\t\t\t\tDays: pulumi.Int(90),\n\t\t\t\t\t},\n\t\t\t\t\tId: pulumi.String(\"log\"),\n\t\t\t\t\tPrefix: pulumi.String(\"log/\"),\n\t\t\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\t\t\"autoclean\": pulumi.String(\"true\"),\n\t\t\t\t\t\t\"rule\": pulumi.String(\"log\"),\n\t\t\t\t\t},\n\t\t\t\t\tTransitions: s3.BucketLifecycleRuleTransitionArray{\n\t\t\t\t\t\t\u0026s3.BucketLifecycleRuleTransitionArgs{\n\t\t\t\t\t\t\tDays: pulumi.Int(30),\n\t\t\t\t\t\t\tStorageClass: pulumi.String(\"STANDARD_IA\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026s3.BucketLifecycleRuleTransitionArgs{\n\t\t\t\t\t\t\tDays: pulumi.Int(60),\n\t\t\t\t\t\t\tStorageClass: pulumi.String(\"GLACIER\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026s3.BucketLifecycleRuleArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t\tExpiration: \u0026s3.BucketLifecycleRuleExpirationArgs{\n\t\t\t\t\t\tDate: pulumi.String(\"2016-01-12\"),\n\t\t\t\t\t},\n\t\t\t\t\tId: pulumi.String(\"tmp\"),\n\t\t\t\t\tPrefix: pulumi.String(\"tmp/\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = s3.NewBucket(ctx, \"versioningBucket\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"private\"),\n\t\t\tLifecycleRules: s3.BucketLifecycleRuleArray{\n\t\t\t\t\u0026s3.BucketLifecycleRuleArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t\tNoncurrentVersionExpiration: \u0026s3.BucketLifecycleRuleNoncurrentVersionExpirationArgs{\n\t\t\t\t\t\tDays: pulumi.Int(90),\n\t\t\t\t\t},\n\t\t\t\t\tNoncurrentVersionTransitions: s3.BucketLifecycleRuleNoncurrentVersionTransitionArray{\n\t\t\t\t\t\t\u0026s3.BucketLifecycleRuleNoncurrentVersionTransitionArgs{\n\t\t\t\t\t\t\tDays: pulumi.Int(30),\n\t\t\t\t\t\t\tStorageClass: pulumi.String(\"STANDARD_IA\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026s3.BucketLifecycleRuleNoncurrentVersionTransitionArgs{\n\t\t\t\t\t\t\tDays: pulumi.Int(60),\n\t\t\t\t\t\t\tStorageClass: pulumi.String(\"GLACIER\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPrefix: pulumi.String(\"config/\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tVersioning: \u0026s3.BucketVersioningArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Using replication configuration\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst central = new aws.Provider(\"central\", {region: \"eu-central-1\"});\nconst replicationRole = new aws.iam.Role(\"replicationRole\", {assumeRolePolicy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"s3.amazonaws.com\"\n },\n \"Effect\": \"Allow\",\n \"Sid\": \"\"\n }\n ]\n}\n`});\nconst destination = new aws.s3.Bucket(\"destination\", {versioning: {\n enabled: true,\n}});\nconst source = new aws.s3.Bucket(\"source\", {\n acl: \"private\",\n versioning: {\n enabled: true,\n },\n replicationConfiguration: {\n role: replicationRole.arn,\n rules: [{\n id: \"foobar\",\n prefix: \"foo\",\n status: \"Enabled\",\n destination: {\n bucket: destination.arn,\n storageClass: \"STANDARD\",\n },\n }],\n },\n}, {\n provider: aws.central,\n});\nconst replicationPolicy = new aws.iam.Policy(\"replicationPolicy\", {policy: pulumi.interpolate`{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"s3:GetReplicationConfiguration\",\n \"s3:ListBucket\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\n \"${source.arn}\"\n ]\n },\n {\n \"Action\": [\n \"s3:GetObjectVersionForReplication\",\n \"s3:GetObjectVersionAcl\",\n \"s3:GetObjectVersionTagging\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\n \"${source.arn}/*\"\n ]\n },\n {\n \"Action\": [\n \"s3:ReplicateObject\",\n \"s3:ReplicateDelete\",\n \"s3:ReplicateTags\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"${destination.arn}/*\"\n }\n ]\n}\n`});\nconst replicationRolePolicyAttachment = new aws.iam.RolePolicyAttachment(\"replicationRolePolicyAttachment\", {\n role: replicationRole.name,\n policyArn: replicationPolicy.arn,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_pulumi as pulumi\n\ncentral = pulumi.providers.Aws(\"central\", region=\"eu-central-1\")\nreplication_role = aws.iam.Role(\"replicationRole\", assume_role_policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"s3.amazonaws.com\"\n },\n \"Effect\": \"Allow\",\n \"Sid\": \"\"\n }\n ]\n}\n\"\"\")\ndestination = aws.s3.Bucket(\"destination\", versioning=aws.s3.BucketVersioningArgs(\n enabled=True,\n))\nsource = aws.s3.Bucket(\"source\",\n acl=\"private\",\n versioning=aws.s3.BucketVersioningArgs(\n enabled=True,\n ),\n replication_configuration=aws.s3.BucketReplicationConfigurationArgs(\n role=replication_role.arn,\n rules=[aws.s3.BucketReplicationConfigurationRuleArgs(\n id=\"foobar\",\n prefix=\"foo\",\n status=\"Enabled\",\n destination=aws.s3.BucketReplicationConfigurationRuleDestinationArgs(\n bucket=destination.arn,\n storage_class=\"STANDARD\",\n ),\n )],\n ),\n opts=pulumi.ResourceOptions(provider=aws[\"central\"]))\nreplication_policy = aws.iam.Policy(\"replicationPolicy\", policy=pulumi.Output.all(source.arn, source.arn, destination.arn).apply(lambda sourceArn, sourceArn1, destinationArn: f\"\"\"{{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {{\n \"Action\": [\n \"s3:GetReplicationConfiguration\",\n \"s3:ListBucket\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\n \"{source_arn}\"\n ]\n }},\n {{\n \"Action\": [\n \"s3:GetObjectVersionForReplication\",\n \"s3:GetObjectVersionAcl\",\n \"s3:GetObjectVersionTagging\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\n \"{source_arn1}/*\"\n ]\n }},\n {{\n \"Action\": [\n \"s3:ReplicateObject\",\n \"s3:ReplicateDelete\",\n \"s3:ReplicateTags\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"{destination_arn}/*\"\n }}\n ]\n}}\n\"\"\"))\nreplication_role_policy_attachment = aws.iam.RolePolicyAttachment(\"replicationRolePolicyAttachment\",\n role=replication_role.name,\n policy_arn=replication_policy.arn)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var central = new Aws.Provider(\"central\", new Aws.ProviderArgs\n {\n Region = \"eu-central-1\",\n });\n var replicationRole = new Aws.Iam.Role(\"replicationRole\", new Aws.Iam.RoleArgs\n {\n AssumeRolePolicy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Action\"\": \"\"sts:AssumeRole\"\",\n \"\"Principal\"\": {\n \"\"Service\"\": \"\"s3.amazonaws.com\"\"\n },\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Sid\"\": \"\"\"\"\n }\n ]\n}\n\",\n });\n var destination = new Aws.S3.Bucket(\"destination\", new Aws.S3.BucketArgs\n {\n Versioning = new Aws.S3.Inputs.BucketVersioningArgs\n {\n Enabled = true,\n },\n });\n var source = new Aws.S3.Bucket(\"source\", new Aws.S3.BucketArgs\n {\n Acl = \"private\",\n Versioning = new Aws.S3.Inputs.BucketVersioningArgs\n {\n Enabled = true,\n },\n ReplicationConfiguration = new Aws.S3.Inputs.BucketReplicationConfigurationArgs\n {\n Role = replicationRole.Arn,\n Rules = \n {\n new Aws.S3.Inputs.BucketReplicationConfigurationRuleArgs\n {\n Id = \"foobar\",\n Prefix = \"foo\",\n Status = \"Enabled\",\n Destination = new Aws.S3.Inputs.BucketReplicationConfigurationRuleDestinationArgs\n {\n Bucket = destination.Arn,\n StorageClass = \"STANDARD\",\n },\n },\n },\n },\n }, new CustomResourceOptions\n {\n Provider = aws.Central,\n });\n var replicationPolicy = new Aws.Iam.Policy(\"replicationPolicy\", new Aws.Iam.PolicyArgs\n {\n Policy = Output.Tuple(source.Arn, source.Arn, destination.Arn).Apply(values =\u003e\n {\n var sourceArn = values.Item1;\n var sourceArn1 = values.Item2;\n var destinationArn = values.Item3;\n return @$\"{{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {{\n \"\"Action\"\": [\n \"\"s3:GetReplicationConfiguration\"\",\n \"\"s3:ListBucket\"\"\n ],\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Resource\"\": [\n \"\"{sourceArn}\"\"\n ]\n }},\n {{\n \"\"Action\"\": [\n \"\"s3:GetObjectVersionForReplication\"\",\n \"\"s3:GetObjectVersionAcl\"\",\n \"\"s3:GetObjectVersionTagging\"\"\n ],\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Resource\"\": [\n \"\"{sourceArn1}/*\"\"\n ]\n }},\n {{\n \"\"Action\"\": [\n \"\"s3:ReplicateObject\"\",\n \"\"s3:ReplicateDelete\"\",\n \"\"s3:ReplicateTags\"\"\n ],\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Resource\"\": \"\"{destinationArn}/*\"\"\n }}\n ]\n}}\n\";\n }),\n });\n var replicationRolePolicyAttachment = new Aws.Iam.RolePolicyAttachment(\"replicationRolePolicyAttachment\", new Aws.Iam.RolePolicyAttachmentArgs\n {\n Role = replicationRole.Name,\n PolicyArn = replicationPolicy.Arn,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/providers\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := providers.Newaws(ctx, \"central\", \u0026providers.awsArgs{\n\t\t\tRegion: \"eu-central-1\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treplicationRole, err := iam.NewRole(ctx, \"replicationRole\", \u0026iam.RoleArgs{\n\t\t\tAssumeRolePolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Action\\\": \\\"sts:AssumeRole\\\",\\n\", \" \\\"Principal\\\": {\\n\", \" \\\"Service\\\": \\\"s3.amazonaws.com\\\"\\n\", \" },\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Sid\\\": \\\"\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdestination, err := s3.NewBucket(ctx, \"destination\", \u0026s3.BucketArgs{\n\t\t\tVersioning: \u0026s3.BucketVersioningArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsource, err := s3.NewBucket(ctx, \"source\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"private\"),\n\t\t\tVersioning: \u0026s3.BucketVersioningArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t\tReplicationConfiguration: \u0026s3.BucketReplicationConfigurationArgs{\n\t\t\t\tRole: replicationRole.Arn,\n\t\t\t\tRules: s3.BucketReplicationConfigurationRuleArray{\n\t\t\t\t\t\u0026s3.BucketReplicationConfigurationRuleArgs{\n\t\t\t\t\t\tId: pulumi.String(\"foobar\"),\n\t\t\t\t\t\tPrefix: pulumi.String(\"foo\"),\n\t\t\t\t\t\tStatus: pulumi.String(\"Enabled\"),\n\t\t\t\t\t\tDestination: \u0026s3.BucketReplicationConfigurationRuleDestinationArgs{\n\t\t\t\t\t\t\tBucket: destination.Arn,\n\t\t\t\t\t\t\tStorageClass: pulumi.String(\"STANDARD\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(aws.Central))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treplicationPolicy, err := iam.NewPolicy(ctx, \"replicationPolicy\", \u0026iam.PolicyArgs{\n\t\t\tPolicy: pulumi.All(source.Arn, source.Arn, destination.Arn).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\tsourceArn := _args[0].(string)\n\t\t\t\tsourceArn1 := _args[1].(string)\n\t\t\t\tdestinationArn := _args[2].(string)\n\t\t\t\treturn fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Action\\\": [\\n\", \" \\\"s3:GetReplicationConfiguration\\\",\\n\", \" \\\"s3:ListBucket\\\"\\n\", \" ],\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Resource\\\": [\\n\", \" \\\"\", sourceArn, \"\\\"\\n\", \" ]\\n\", \" },\\n\", \" {\\n\", \" \\\"Action\\\": [\\n\", \" \\\"s3:GetObjectVersionForReplication\\\",\\n\", \" \\\"s3:GetObjectVersionAcl\\\",\\n\", \" \\\"s3:GetObjectVersionTagging\\\"\\n\", \" ],\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Resource\\\": [\\n\", \" \\\"\", sourceArn1, \"/*\\\"\\n\", \" ]\\n\", \" },\\n\", \" {\\n\", \" \\\"Action\\\": [\\n\", \" \\\"s3:ReplicateObject\\\",\\n\", \" \\\"s3:ReplicateDelete\\\",\\n\", \" \\\"s3:ReplicateTags\\\"\\n\", \" ],\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Resource\\\": \\\"\", destinationArn, \"/*\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\"), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewRolePolicyAttachment(ctx, \"replicationRolePolicyAttachment\", \u0026iam.RolePolicyAttachmentArgs{\n\t\t\tRole: replicationRole.Name,\n\t\t\tPolicyArn: replicationPolicy.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Enable Default Server Side Encryption\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst mykey = new aws.kms.Key(\"mykey\", {\n description: \"This key is used to encrypt bucket objects\",\n deletionWindowInDays: 10,\n});\nconst mybucket = new aws.s3.Bucket(\"mybucket\", {serverSideEncryptionConfiguration: {\n rule: {\n applyServerSideEncryptionByDefault: {\n kmsMasterKeyId: mykey.arn,\n sseAlgorithm: \"aws:kms\",\n },\n },\n}});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nmykey = aws.kms.Key(\"mykey\",\n description=\"This key is used to encrypt bucket objects\",\n deletion_window_in_days=10)\nmybucket = aws.s3.Bucket(\"mybucket\", server_side_encryption_configuration=aws.s3.BucketServerSideEncryptionConfigurationArgs(\n rule=aws.s3.BucketServerSideEncryptionConfigurationRuleArgs(\n apply_server_side_encryption_by_default=aws.s3.BucketServerSideEncryptionConfigurationRuleApplyServerSideEncryptionByDefaultArgs(\n kms_master_key_id=mykey.arn,\n sse_algorithm=\"aws:kms\",\n ),\n ),\n))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var mykey = new Aws.Kms.Key(\"mykey\", new Aws.Kms.KeyArgs\n {\n Description = \"This key is used to encrypt bucket objects\",\n DeletionWindowInDays = 10,\n });\n var mybucket = new Aws.S3.Bucket(\"mybucket\", new Aws.S3.BucketArgs\n {\n ServerSideEncryptionConfiguration = new Aws.S3.Inputs.BucketServerSideEncryptionConfigurationArgs\n {\n Rule = new Aws.S3.Inputs.BucketServerSideEncryptionConfigurationRuleArgs\n {\n ApplyServerSideEncryptionByDefault = new Aws.S3.Inputs.BucketServerSideEncryptionConfigurationRuleApplyServerSideEncryptionByDefaultArgs\n {\n KmsMasterKeyId = mykey.Arn,\n SseAlgorithm = \"aws:kms\",\n },\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/kms\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmykey, err := kms.NewKey(ctx, \"mykey\", \u0026kms.KeyArgs{\n\t\t\tDescription: pulumi.String(\"This key is used to encrypt bucket objects\"),\n\t\t\tDeletionWindowInDays: pulumi.Int(10),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = s3.NewBucket(ctx, \"mybucket\", \u0026s3.BucketArgs{\n\t\t\tServerSideEncryptionConfiguration: \u0026s3.BucketServerSideEncryptionConfigurationArgs{\n\t\t\t\tRule: \u0026s3.BucketServerSideEncryptionConfigurationRuleArgs{\n\t\t\t\t\tApplyServerSideEncryptionByDefault: \u0026s3.BucketServerSideEncryptionConfigurationRuleApplyServerSideEncryptionByDefaultArgs{\n\t\t\t\t\t\tKmsMasterKeyId: mykey.Arn,\n\t\t\t\t\t\tSseAlgorithm: pulumi.String(\"aws:kms\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Using ACL policy grants\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst currentUser = aws.s3.getCanonicalUserId({});\nconst bucket = new aws.s3.Bucket(\"bucket\", {grants: [\n {\n id: currentUser.then(currentUser =\u003e currentUser.id),\n type: \"CanonicalUser\",\n permissions: [\"FULL_CONTROL\"],\n },\n {\n type: \"Group\",\n permissions: [\n \"READ_ACP\",\n \"WRITE\",\n ],\n uri: \"http://acs.amazonaws.com/groups/s3/LogDelivery\",\n },\n]});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ncurrent_user = aws.s3.get_canonical_user_id()\nbucket = aws.s3.Bucket(\"bucket\", grants=[\n aws.s3.BucketGrantArgs(\n id=current_user.id,\n type=\"CanonicalUser\",\n permissions=[\"FULL_CONTROL\"],\n ),\n aws.s3.BucketGrantArgs(\n type=\"Group\",\n permissions=[\n \"READ_ACP\",\n \"WRITE\",\n ],\n uri=\"http://acs.amazonaws.com/groups/s3/LogDelivery\",\n ),\n])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var currentUser = Output.Create(Aws.S3.GetCanonicalUserId.InvokeAsync());\n var bucket = new Aws.S3.Bucket(\"bucket\", new Aws.S3.BucketArgs\n {\n Grants = \n {\n new Aws.S3.Inputs.BucketGrantArgs\n {\n Id = currentUser.Apply(currentUser =\u003e currentUser.Id),\n Type = \"CanonicalUser\",\n Permissions = \n {\n \"FULL_CONTROL\",\n },\n },\n new Aws.S3.Inputs.BucketGrantArgs\n {\n Type = \"Group\",\n Permissions = \n {\n \"READ_ACP\",\n \"WRITE\",\n },\n Uri = \"http://acs.amazonaws.com/groups/s3/LogDelivery\",\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcurrentUser, err := s3.GetCanonicalUserId(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = s3.NewBucket(ctx, \"bucket\", \u0026s3.BucketArgs{\n\t\t\tGrants: s3.BucketGrantArray{\n\t\t\t\t\u0026s3.BucketGrantArgs{\n\t\t\t\t\tId: pulumi.String(currentUser.Id),\n\t\t\t\t\tType: pulumi.String(\"CanonicalUser\"),\n\t\t\t\t\tPermissions: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"FULL_CONTROL\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026s3.BucketGrantArgs{\n\t\t\t\t\tType: pulumi.String(\"Group\"),\n\t\t\t\t\tPermissions: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"READ_ACP\"),\n\t\t\t\t\t\tpulumi.String(\"WRITE\"),\n\t\t\t\t\t},\n\t\t\t\t\tUri: pulumi.String(\"http://acs.amazonaws.com/groups/s3/LogDelivery\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nS3 bucket can be imported using the `bucket`, e.g.\n\n```sh\n $ pulumi import aws:s3/bucket:Bucket bucket bucket-name\n```\n\n The `policy` argument is not imported and will be deprecated in a future version of the provider. Use the `aws_s3_bucket_policy` resource to manage the S3 Bucket Policy instead. ", + "description": "Provides a S3 bucket resource.\n\n\u003e This functionality is for managing S3 in an AWS Partition. To manage [S3 on Outposts](https://docs.aws.amazon.com/AmazonS3/latest/dev/S3onOutposts.html), see the `aws.s3control.Bucket` resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Private Bucket w/ Tags\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst bucket = new aws.s3.Bucket(\"b\", {\n acl: \"private\",\n tags: {\n Environment: \"Dev\",\n Name: \"My bucket\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nbucket = aws.s3.Bucket(\"bucket\",\n acl=\"private\",\n tags={\n \"Environment\": \"Dev\",\n \"Name\": \"My bucket\",\n })\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var bucket = new Aws.S3.Bucket(\"bucket\", new Aws.S3.BucketArgs\n {\n Acl = \"private\",\n Tags = \n {\n { \"Environment\", \"Dev\" },\n { \"Name\", \"My bucket\" },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := s3.NewBucket(ctx, \"bucket\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"private\"),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Environment\": pulumi.String(\"Dev\"),\n\t\t\t\t\"Name\": pulumi.String(\"My bucket\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Static Website Hosting\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst bucket = new aws.s3.Bucket(\"bucket\", {\n acl: \"public-read\",\n policy: fs.readFileSync(\"policy.json\"),\n website: {\n indexDocument: \"index.html\",\n errorDocument: \"error.html\",\n routingRules: `[{\n \"Condition\": {\n \"KeyPrefixEquals\": \"docs/\"\n },\n \"Redirect\": {\n \"ReplaceKeyPrefixWith\": \"documents/\"\n }\n}]\n`,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nbucket = aws.s3.Bucket(\"bucket\",\n acl=\"public-read\",\n policy=(lambda path: open(path).read())(\"policy.json\"),\n website=aws.s3.BucketWebsiteArgs(\n index_document=\"index.html\",\n error_document=\"error.html\",\n routing_rules=\"\"\"[{\n \"Condition\": {\n \"KeyPrefixEquals\": \"docs/\"\n },\n \"Redirect\": {\n \"ReplaceKeyPrefixWith\": \"documents/\"\n }\n}]\n\"\"\",\n ))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var bucket = new Aws.S3.Bucket(\"bucket\", new Aws.S3.BucketArgs\n {\n Acl = \"public-read\",\n Policy = File.ReadAllText(\"policy.json\"),\n Website = new Aws.S3.Inputs.BucketWebsiteArgs\n {\n IndexDocument = \"index.html\",\n ErrorDocument = \"error.html\",\n RoutingRules = @\"[{\n \"\"Condition\"\": {\n \"\"KeyPrefixEquals\"\": \"\"docs/\"\"\n },\n \"\"Redirect\"\": {\n \"\"ReplaceKeyPrefixWith\"\": \"\"documents/\"\"\n }\n}]\n\",\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := s3.NewBucket(ctx, \"bucket\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"public-read\"),\n\t\t\tPolicy: readFileOrPanic(\"policy.json\"),\n\t\t\tWebsite: \u0026s3.BucketWebsiteArgs{\n\t\t\t\tIndexDocument: pulumi.String(\"index.html\"),\n\t\t\t\tErrorDocument: pulumi.String(\"error.html\"),\n\t\t\t\tRoutingRules: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v\", \"[{\\n\", \" \\\"Condition\\\": {\\n\", \" \\\"KeyPrefixEquals\\\": \\\"docs/\\\"\\n\", \" },\\n\", \" \\\"Redirect\\\": {\\n\", \" \\\"ReplaceKeyPrefixWith\\\": \\\"documents/\\\"\\n\", \" }\\n\", \"}]\\n\")),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Using CORS\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst bucket = new aws.s3.Bucket(\"b\", {\n acl: \"public-read\",\n corsRules: [{\n allowedHeaders: [\"*\"],\n allowedMethods: [\n \"PUT\",\n \"POST\",\n ],\n allowedOrigins: [\"https://s3-website-test.mydomain.com\"],\n exposeHeaders: [\"ETag\"],\n maxAgeSeconds: 3000,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nbucket = aws.s3.Bucket(\"bucket\",\n acl=\"public-read\",\n cors_rules=[aws.s3.BucketCorsRuleArgs(\n allowed_headers=[\"*\"],\n allowed_methods=[\n \"PUT\",\n \"POST\",\n ],\n allowed_origins=[\"https://s3-website-test.mydomain.com\"],\n expose_headers=[\"ETag\"],\n max_age_seconds=3000,\n )])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var bucket = new Aws.S3.Bucket(\"bucket\", new Aws.S3.BucketArgs\n {\n Acl = \"public-read\",\n CorsRules = \n {\n new Aws.S3.Inputs.BucketCorsRuleArgs\n {\n AllowedHeaders = \n {\n \"*\",\n },\n AllowedMethods = \n {\n \"PUT\",\n \"POST\",\n },\n AllowedOrigins = \n {\n \"https://s3-website-test.mydomain.com\",\n },\n ExposeHeaders = \n {\n \"ETag\",\n },\n MaxAgeSeconds = 3000,\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := s3.NewBucket(ctx, \"bucket\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"public-read\"),\n\t\t\tCorsRules: s3.BucketCorsRuleArray{\n\t\t\t\t\u0026s3.BucketCorsRuleArgs{\n\t\t\t\t\tAllowedHeaders: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"*\"),\n\t\t\t\t\t},\n\t\t\t\t\tAllowedMethods: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"PUT\"),\n\t\t\t\t\t\tpulumi.String(\"POST\"),\n\t\t\t\t\t},\n\t\t\t\t\tAllowedOrigins: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"https://s3-website-test.mydomain.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tExposeHeaders: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"ETag\"),\n\t\t\t\t\t},\n\t\t\t\t\tMaxAgeSeconds: pulumi.Int(3000),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Using versioning\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst bucket = new aws.s3.Bucket(\"b\", {\n acl: \"private\",\n versioning: {\n enabled: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nbucket = aws.s3.Bucket(\"bucket\",\n acl=\"private\",\n versioning=aws.s3.BucketVersioningArgs(\n enabled=True,\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var bucket = new Aws.S3.Bucket(\"bucket\", new Aws.S3.BucketArgs\n {\n Acl = \"private\",\n Versioning = new Aws.S3.Inputs.BucketVersioningArgs\n {\n Enabled = true,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := s3.NewBucket(ctx, \"bucket\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"private\"),\n\t\t\tVersioning: \u0026s3.BucketVersioningArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Enable Logging\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst logBucket = new aws.s3.Bucket(\"logBucket\", {acl: \"log-delivery-write\"});\nconst bucket = new aws.s3.Bucket(\"bucket\", {\n acl: \"private\",\n loggings: [{\n targetBucket: logBucket.id,\n targetPrefix: \"log/\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nlog_bucket = aws.s3.Bucket(\"logBucket\", acl=\"log-delivery-write\")\nbucket = aws.s3.Bucket(\"bucket\",\n acl=\"private\",\n loggings=[aws.s3.BucketLoggingArgs(\n target_bucket=log_bucket.id,\n target_prefix=\"log/\",\n )])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var logBucket = new Aws.S3.Bucket(\"logBucket\", new Aws.S3.BucketArgs\n {\n Acl = \"log-delivery-write\",\n });\n var bucket = new Aws.S3.Bucket(\"bucket\", new Aws.S3.BucketArgs\n {\n Acl = \"private\",\n Loggings = \n {\n new Aws.S3.Inputs.BucketLoggingArgs\n {\n TargetBucket = logBucket.Id,\n TargetPrefix = \"log/\",\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tlogBucket, err := s3.NewBucket(ctx, \"logBucket\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"log-delivery-write\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = s3.NewBucket(ctx, \"bucket\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"private\"),\n\t\t\tLoggings: s3.BucketLoggingArray{\n\t\t\t\t\u0026s3.BucketLoggingArgs{\n\t\t\t\t\tTargetBucket: logBucket.ID(),\n\t\t\t\t\tTargetPrefix: pulumi.String(\"log/\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Using object lifecycle\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst bucket = new aws.s3.Bucket(\"bucket\", {\n acl: \"private\",\n lifecycleRules: [\n {\n enabled: true,\n expiration: {\n days: 90,\n },\n id: \"log\",\n prefix: \"log/\",\n tags: {\n autoclean: \"true\",\n rule: \"log\",\n },\n transitions: [\n {\n days: 30,\n storageClass: \"STANDARD_IA\", // or \"ONEZONE_IA\"\n },\n {\n days: 60,\n storageClass: \"GLACIER\",\n },\n ],\n },\n {\n enabled: true,\n expiration: {\n date: \"2016-01-12\",\n },\n id: \"tmp\",\n prefix: \"tmp/\",\n },\n ],\n});\nconst versioningBucket = new aws.s3.Bucket(\"versioning_bucket\", {\n acl: \"private\",\n lifecycleRules: [{\n enabled: true,\n noncurrentVersionExpiration: {\n days: 90,\n },\n noncurrentVersionTransitions: [\n {\n days: 30,\n storageClass: \"STANDARD_IA\",\n },\n {\n days: 60,\n storageClass: \"GLACIER\",\n },\n ],\n prefix: \"config/\",\n }],\n versioning: {\n enabled: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nbucket = aws.s3.Bucket(\"bucket\",\n acl=\"private\",\n lifecycle_rules=[\n aws.s3.BucketLifecycleRuleArgs(\n enabled=True,\n expiration=aws.s3.BucketLifecycleRuleExpirationArgs(\n days=90,\n ),\n id=\"log\",\n prefix=\"log/\",\n tags={\n \"autoclean\": \"true\",\n \"rule\": \"log\",\n },\n transitions=[\n aws.s3.BucketLifecycleRuleTransitionArgs(\n days=30,\n storage_class=\"STANDARD_IA\",\n ),\n aws.s3.BucketLifecycleRuleTransitionArgs(\n days=60,\n storage_class=\"GLACIER\",\n ),\n ],\n ),\n aws.s3.BucketLifecycleRuleArgs(\n enabled=True,\n expiration=aws.s3.BucketLifecycleRuleExpirationArgs(\n date=\"2016-01-12\",\n ),\n id=\"tmp\",\n prefix=\"tmp/\",\n ),\n ])\nversioning_bucket = aws.s3.Bucket(\"versioningBucket\",\n acl=\"private\",\n lifecycle_rules=[aws.s3.BucketLifecycleRuleArgs(\n enabled=True,\n noncurrent_version_expiration=aws.s3.BucketLifecycleRuleNoncurrentVersionExpirationArgs(\n days=90,\n ),\n noncurrent_version_transitions=[\n aws.s3.BucketLifecycleRuleNoncurrentVersionTransitionArgs(\n days=30,\n storage_class=\"STANDARD_IA\",\n ),\n aws.s3.BucketLifecycleRuleNoncurrentVersionTransitionArgs(\n days=60,\n storage_class=\"GLACIER\",\n ),\n ],\n prefix=\"config/\",\n )],\n versioning=aws.s3.BucketVersioningArgs(\n enabled=True,\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var bucket = new Aws.S3.Bucket(\"bucket\", new Aws.S3.BucketArgs\n {\n Acl = \"private\",\n LifecycleRules = \n {\n new Aws.S3.Inputs.BucketLifecycleRuleArgs\n {\n Enabled = true,\n Expiration = new Aws.S3.Inputs.BucketLifecycleRuleExpirationArgs\n {\n Days = 90,\n },\n Id = \"log\",\n Prefix = \"log/\",\n Tags = \n {\n { \"autoclean\", \"true\" },\n { \"rule\", \"log\" },\n },\n Transitions = \n {\n new Aws.S3.Inputs.BucketLifecycleRuleTransitionArgs\n {\n Days = 30,\n StorageClass = \"STANDARD_IA\",\n },\n new Aws.S3.Inputs.BucketLifecycleRuleTransitionArgs\n {\n Days = 60,\n StorageClass = \"GLACIER\",\n },\n },\n },\n new Aws.S3.Inputs.BucketLifecycleRuleArgs\n {\n Enabled = true,\n Expiration = new Aws.S3.Inputs.BucketLifecycleRuleExpirationArgs\n {\n Date = \"2016-01-12\",\n },\n Id = \"tmp\",\n Prefix = \"tmp/\",\n },\n },\n });\n var versioningBucket = new Aws.S3.Bucket(\"versioningBucket\", new Aws.S3.BucketArgs\n {\n Acl = \"private\",\n LifecycleRules = \n {\n new Aws.S3.Inputs.BucketLifecycleRuleArgs\n {\n Enabled = true,\n NoncurrentVersionExpiration = new Aws.S3.Inputs.BucketLifecycleRuleNoncurrentVersionExpirationArgs\n {\n Days = 90,\n },\n NoncurrentVersionTransitions = \n {\n new Aws.S3.Inputs.BucketLifecycleRuleNoncurrentVersionTransitionArgs\n {\n Days = 30,\n StorageClass = \"STANDARD_IA\",\n },\n new Aws.S3.Inputs.BucketLifecycleRuleNoncurrentVersionTransitionArgs\n {\n Days = 60,\n StorageClass = \"GLACIER\",\n },\n },\n Prefix = \"config/\",\n },\n },\n Versioning = new Aws.S3.Inputs.BucketVersioningArgs\n {\n Enabled = true,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := s3.NewBucket(ctx, \"bucket\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"private\"),\n\t\t\tLifecycleRules: s3.BucketLifecycleRuleArray{\n\t\t\t\t\u0026s3.BucketLifecycleRuleArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t\tExpiration: \u0026s3.BucketLifecycleRuleExpirationArgs{\n\t\t\t\t\t\tDays: pulumi.Int(90),\n\t\t\t\t\t},\n\t\t\t\t\tId: pulumi.String(\"log\"),\n\t\t\t\t\tPrefix: pulumi.String(\"log/\"),\n\t\t\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\t\t\"autoclean\": pulumi.String(\"true\"),\n\t\t\t\t\t\t\"rule\": pulumi.String(\"log\"),\n\t\t\t\t\t},\n\t\t\t\t\tTransitions: s3.BucketLifecycleRuleTransitionArray{\n\t\t\t\t\t\t\u0026s3.BucketLifecycleRuleTransitionArgs{\n\t\t\t\t\t\t\tDays: pulumi.Int(30),\n\t\t\t\t\t\t\tStorageClass: pulumi.String(\"STANDARD_IA\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026s3.BucketLifecycleRuleTransitionArgs{\n\t\t\t\t\t\t\tDays: pulumi.Int(60),\n\t\t\t\t\t\t\tStorageClass: pulumi.String(\"GLACIER\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026s3.BucketLifecycleRuleArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t\tExpiration: \u0026s3.BucketLifecycleRuleExpirationArgs{\n\t\t\t\t\t\tDate: pulumi.String(\"2016-01-12\"),\n\t\t\t\t\t},\n\t\t\t\t\tId: pulumi.String(\"tmp\"),\n\t\t\t\t\tPrefix: pulumi.String(\"tmp/\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = s3.NewBucket(ctx, \"versioningBucket\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"private\"),\n\t\t\tLifecycleRules: s3.BucketLifecycleRuleArray{\n\t\t\t\t\u0026s3.BucketLifecycleRuleArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t\tNoncurrentVersionExpiration: \u0026s3.BucketLifecycleRuleNoncurrentVersionExpirationArgs{\n\t\t\t\t\t\tDays: pulumi.Int(90),\n\t\t\t\t\t},\n\t\t\t\t\tNoncurrentVersionTransitions: s3.BucketLifecycleRuleNoncurrentVersionTransitionArray{\n\t\t\t\t\t\t\u0026s3.BucketLifecycleRuleNoncurrentVersionTransitionArgs{\n\t\t\t\t\t\t\tDays: pulumi.Int(30),\n\t\t\t\t\t\t\tStorageClass: pulumi.String(\"STANDARD_IA\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026s3.BucketLifecycleRuleNoncurrentVersionTransitionArgs{\n\t\t\t\t\t\t\tDays: pulumi.Int(60),\n\t\t\t\t\t\t\tStorageClass: pulumi.String(\"GLACIER\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPrefix: pulumi.String(\"config/\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tVersioning: \u0026s3.BucketVersioningArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Using replication configuration\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst central = new aws.Provider(\"central\", {region: \"eu-central-1\"});\nconst replicationRole = new aws.iam.Role(\"replicationRole\", {assumeRolePolicy: `{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"s3.amazonaws.com\"\n },\n \"Effect\": \"Allow\",\n \"Sid\": \"\"\n }\n ]\n}\n`});\nconst destination = new aws.s3.Bucket(\"destination\", {versioning: {\n enabled: true,\n}});\nconst source = new aws.s3.Bucket(\"source\", {\n acl: \"private\",\n versioning: {\n enabled: true,\n },\n replicationConfiguration: {\n role: replicationRole.arn,\n rules: [{\n id: \"foobar\",\n prefix: \"foo\",\n status: \"Enabled\",\n destination: {\n bucket: destination.arn,\n storageClass: \"STANDARD\",\n },\n }],\n },\n}, {\n provider: aws.central,\n});\nconst replicationPolicy = new aws.iam.Policy(\"replicationPolicy\", {policy: pulumi.interpolate`{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"s3:GetReplicationConfiguration\",\n \"s3:ListBucket\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\n \"${source.arn}\"\n ]\n },\n {\n \"Action\": [\n \"s3:GetObjectVersionForReplication\",\n \"s3:GetObjectVersionAcl\",\n \"s3:GetObjectVersionTagging\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\n \"${source.arn}/*\"\n ]\n },\n {\n \"Action\": [\n \"s3:ReplicateObject\",\n \"s3:ReplicateDelete\",\n \"s3:ReplicateTags\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"${destination.arn}/*\"\n }\n ]\n}\n`});\nconst replicationRolePolicyAttachment = new aws.iam.RolePolicyAttachment(\"replicationRolePolicyAttachment\", {\n role: replicationRole.name,\n policyArn: replicationPolicy.arn,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_pulumi as pulumi\n\ncentral = pulumi.providers.Aws(\"central\", region=\"eu-central-1\")\nreplication_role = aws.iam.Role(\"replicationRole\", assume_role_policy=\"\"\"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"Service\": \"s3.amazonaws.com\"\n },\n \"Effect\": \"Allow\",\n \"Sid\": \"\"\n }\n ]\n}\n\"\"\")\ndestination = aws.s3.Bucket(\"destination\", versioning=aws.s3.BucketVersioningArgs(\n enabled=True,\n))\nsource = aws.s3.Bucket(\"source\",\n acl=\"private\",\n versioning=aws.s3.BucketVersioningArgs(\n enabled=True,\n ),\n replication_configuration=aws.s3.BucketReplicationConfigurationArgs(\n role=replication_role.arn,\n rules=[aws.s3.BucketReplicationConfigurationRuleArgs(\n id=\"foobar\",\n prefix=\"foo\",\n status=\"Enabled\",\n destination=aws.s3.BucketReplicationConfigurationRuleDestinationArgs(\n bucket=destination.arn,\n storage_class=\"STANDARD\",\n ),\n )],\n ),\n opts=pulumi.ResourceOptions(provider=aws[\"central\"]))\nreplication_policy = aws.iam.Policy(\"replicationPolicy\", policy=pulumi.Output.all(source.arn, source.arn, destination.arn).apply(lambda sourceArn, sourceArn1, destinationArn: f\"\"\"{{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {{\n \"Action\": [\n \"s3:GetReplicationConfiguration\",\n \"s3:ListBucket\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\n \"{source_arn}\"\n ]\n }},\n {{\n \"Action\": [\n \"s3:GetObjectVersionForReplication\",\n \"s3:GetObjectVersionAcl\",\n \"s3:GetObjectVersionTagging\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\n \"{source_arn1}/*\"\n ]\n }},\n {{\n \"Action\": [\n \"s3:ReplicateObject\",\n \"s3:ReplicateDelete\",\n \"s3:ReplicateTags\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"{destination_arn}/*\"\n }}\n ]\n}}\n\"\"\"))\nreplication_role_policy_attachment = aws.iam.RolePolicyAttachment(\"replicationRolePolicyAttachment\",\n role=replication_role.name,\n policy_arn=replication_policy.arn)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var central = new Aws.Provider(\"central\", new Aws.ProviderArgs\n {\n Region = \"eu-central-1\",\n });\n var replicationRole = new Aws.Iam.Role(\"replicationRole\", new Aws.Iam.RoleArgs\n {\n AssumeRolePolicy = @\"{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {\n \"\"Action\"\": \"\"sts:AssumeRole\"\",\n \"\"Principal\"\": {\n \"\"Service\"\": \"\"s3.amazonaws.com\"\"\n },\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Sid\"\": \"\"\"\"\n }\n ]\n}\n\",\n });\n var destination = new Aws.S3.Bucket(\"destination\", new Aws.S3.BucketArgs\n {\n Versioning = new Aws.S3.Inputs.BucketVersioningArgs\n {\n Enabled = true,\n },\n });\n var source = new Aws.S3.Bucket(\"source\", new Aws.S3.BucketArgs\n {\n Acl = \"private\",\n Versioning = new Aws.S3.Inputs.BucketVersioningArgs\n {\n Enabled = true,\n },\n ReplicationConfiguration = new Aws.S3.Inputs.BucketReplicationConfigurationArgs\n {\n Role = replicationRole.Arn,\n Rules = \n {\n new Aws.S3.Inputs.BucketReplicationConfigurationRuleArgs\n {\n Id = \"foobar\",\n Prefix = \"foo\",\n Status = \"Enabled\",\n Destination = new Aws.S3.Inputs.BucketReplicationConfigurationRuleDestinationArgs\n {\n Bucket = destination.Arn,\n StorageClass = \"STANDARD\",\n },\n },\n },\n },\n }, new CustomResourceOptions\n {\n Provider = aws.Central,\n });\n var replicationPolicy = new Aws.Iam.Policy(\"replicationPolicy\", new Aws.Iam.PolicyArgs\n {\n Policy = Output.Tuple(source.Arn, source.Arn, destination.Arn).Apply(values =\u003e\n {\n var sourceArn = values.Item1;\n var sourceArn1 = values.Item2;\n var destinationArn = values.Item3;\n return @$\"{{\n \"\"Version\"\": \"\"2012-10-17\"\",\n \"\"Statement\"\": [\n {{\n \"\"Action\"\": [\n \"\"s3:GetReplicationConfiguration\"\",\n \"\"s3:ListBucket\"\"\n ],\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Resource\"\": [\n \"\"{sourceArn}\"\"\n ]\n }},\n {{\n \"\"Action\"\": [\n \"\"s3:GetObjectVersionForReplication\"\",\n \"\"s3:GetObjectVersionAcl\"\",\n \"\"s3:GetObjectVersionTagging\"\"\n ],\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Resource\"\": [\n \"\"{sourceArn1}/*\"\"\n ]\n }},\n {{\n \"\"Action\"\": [\n \"\"s3:ReplicateObject\"\",\n \"\"s3:ReplicateDelete\"\",\n \"\"s3:ReplicateTags\"\"\n ],\n \"\"Effect\"\": \"\"Allow\"\",\n \"\"Resource\"\": \"\"{destinationArn}/*\"\"\n }}\n ]\n}}\n\";\n }),\n });\n var replicationRolePolicyAttachment = new Aws.Iam.RolePolicyAttachment(\"replicationRolePolicyAttachment\", new Aws.Iam.RolePolicyAttachmentArgs\n {\n Role = replicationRole.Name,\n PolicyArn = replicationPolicy.Arn,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/iam\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/providers\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := providers.Newaws(ctx, \"central\", \u0026providers.awsArgs{\n\t\t\tRegion: \"eu-central-1\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treplicationRole, err := iam.NewRole(ctx, \"replicationRole\", \u0026iam.RoleArgs{\n\t\t\tAssumeRolePolicy: pulumi.Any(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Action\\\": \\\"sts:AssumeRole\\\",\\n\", \" \\\"Principal\\\": {\\n\", \" \\\"Service\\\": \\\"s3.amazonaws.com\\\"\\n\", \" },\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Sid\\\": \\\"\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\")),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdestination, err := s3.NewBucket(ctx, \"destination\", \u0026s3.BucketArgs{\n\t\t\tVersioning: \u0026s3.BucketVersioningArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsource, err := s3.NewBucket(ctx, \"source\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"private\"),\n\t\t\tVersioning: \u0026s3.BucketVersioningArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t\tReplicationConfiguration: \u0026s3.BucketReplicationConfigurationArgs{\n\t\t\t\tRole: replicationRole.Arn,\n\t\t\t\tRules: s3.BucketReplicationConfigurationRuleArray{\n\t\t\t\t\t\u0026s3.BucketReplicationConfigurationRuleArgs{\n\t\t\t\t\t\tId: pulumi.String(\"foobar\"),\n\t\t\t\t\t\tPrefix: pulumi.String(\"foo\"),\n\t\t\t\t\t\tStatus: pulumi.String(\"Enabled\"),\n\t\t\t\t\t\tDestination: \u0026s3.BucketReplicationConfigurationRuleDestinationArgs{\n\t\t\t\t\t\t\tBucket: destination.Arn,\n\t\t\t\t\t\t\tStorageClass: pulumi.String(\"STANDARD\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(aws.Central))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treplicationPolicy, err := iam.NewPolicy(ctx, \"replicationPolicy\", \u0026iam.PolicyArgs{\n\t\t\tPolicy: pulumi.All(source.Arn, source.Arn, destination.Arn).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\tsourceArn := _args[0].(string)\n\t\t\t\tsourceArn1 := _args[1].(string)\n\t\t\t\tdestinationArn := _args[2].(string)\n\t\t\t\treturn fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \"{\\n\", \" \\\"Version\\\": \\\"2012-10-17\\\",\\n\", \" \\\"Statement\\\": [\\n\", \" {\\n\", \" \\\"Action\\\": [\\n\", \" \\\"s3:GetReplicationConfiguration\\\",\\n\", \" \\\"s3:ListBucket\\\"\\n\", \" ],\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Resource\\\": [\\n\", \" \\\"\", sourceArn, \"\\\"\\n\", \" ]\\n\", \" },\\n\", \" {\\n\", \" \\\"Action\\\": [\\n\", \" \\\"s3:GetObjectVersionForReplication\\\",\\n\", \" \\\"s3:GetObjectVersionAcl\\\",\\n\", \" \\\"s3:GetObjectVersionTagging\\\"\\n\", \" ],\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Resource\\\": [\\n\", \" \\\"\", sourceArn1, \"/*\\\"\\n\", \" ]\\n\", \" },\\n\", \" {\\n\", \" \\\"Action\\\": [\\n\", \" \\\"s3:ReplicateObject\\\",\\n\", \" \\\"s3:ReplicateDelete\\\",\\n\", \" \\\"s3:ReplicateTags\\\"\\n\", \" ],\\n\", \" \\\"Effect\\\": \\\"Allow\\\",\\n\", \" \\\"Resource\\\": \\\"\", destinationArn, \"/*\\\"\\n\", \" }\\n\", \" ]\\n\", \"}\\n\"), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewRolePolicyAttachment(ctx, \"replicationRolePolicyAttachment\", \u0026iam.RolePolicyAttachmentArgs{\n\t\t\tRole: replicationRole.Name,\n\t\t\tPolicyArn: replicationPolicy.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Enable Default Server Side Encryption\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst mykey = new aws.kms.Key(\"mykey\", {\n description: \"This key is used to encrypt bucket objects\",\n deletionWindowInDays: 10,\n});\nconst mybucket = new aws.s3.Bucket(\"mybucket\", {serverSideEncryptionConfiguration: {\n rule: {\n applyServerSideEncryptionByDefault: {\n kmsMasterKeyId: mykey.arn,\n sseAlgorithm: \"aws:kms\",\n },\n },\n}});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nmykey = aws.kms.Key(\"mykey\",\n description=\"This key is used to encrypt bucket objects\",\n deletion_window_in_days=10)\nmybucket = aws.s3.Bucket(\"mybucket\", server_side_encryption_configuration=aws.s3.BucketServerSideEncryptionConfigurationArgs(\n rule=aws.s3.BucketServerSideEncryptionConfigurationRuleArgs(\n apply_server_side_encryption_by_default=aws.s3.BucketServerSideEncryptionConfigurationRuleApplyServerSideEncryptionByDefaultArgs(\n kms_master_key_id=mykey.arn,\n sse_algorithm=\"aws:kms\",\n ),\n ),\n))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var mykey = new Aws.Kms.Key(\"mykey\", new Aws.Kms.KeyArgs\n {\n Description = \"This key is used to encrypt bucket objects\",\n DeletionWindowInDays = 10,\n });\n var mybucket = new Aws.S3.Bucket(\"mybucket\", new Aws.S3.BucketArgs\n {\n ServerSideEncryptionConfiguration = new Aws.S3.Inputs.BucketServerSideEncryptionConfigurationArgs\n {\n Rule = new Aws.S3.Inputs.BucketServerSideEncryptionConfigurationRuleArgs\n {\n ApplyServerSideEncryptionByDefault = new Aws.S3.Inputs.BucketServerSideEncryptionConfigurationRuleApplyServerSideEncryptionByDefaultArgs\n {\n KmsMasterKeyId = mykey.Arn,\n SseAlgorithm = \"aws:kms\",\n },\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/kms\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmykey, err := kms.NewKey(ctx, \"mykey\", \u0026kms.KeyArgs{\n\t\t\tDescription: pulumi.String(\"This key is used to encrypt bucket objects\"),\n\t\t\tDeletionWindowInDays: pulumi.Int(10),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = s3.NewBucket(ctx, \"mybucket\", \u0026s3.BucketArgs{\n\t\t\tServerSideEncryptionConfiguration: \u0026s3.BucketServerSideEncryptionConfigurationArgs{\n\t\t\t\tRule: \u0026s3.BucketServerSideEncryptionConfigurationRuleArgs{\n\t\t\t\t\tApplyServerSideEncryptionByDefault: \u0026s3.BucketServerSideEncryptionConfigurationRuleApplyServerSideEncryptionByDefaultArgs{\n\t\t\t\t\t\tKmsMasterKeyId: mykey.Arn,\n\t\t\t\t\t\tSseAlgorithm: pulumi.String(\"aws:kms\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Using ACL policy grants\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst currentUser = aws.s3.getCanonicalUserId({});\nconst bucket = new aws.s3.Bucket(\"bucket\", {grants: [\n {\n id: currentUser.then(currentUser =\u003e currentUser.id),\n type: \"CanonicalUser\",\n permissions: [\"FULL_CONTROL\"],\n },\n {\n type: \"Group\",\n permissions: [\n \"READ_ACP\",\n \"WRITE\",\n ],\n uri: \"http://acs.amazonaws.com/groups/s3/LogDelivery\",\n },\n]});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ncurrent_user = aws.s3.get_canonical_user_id()\nbucket = aws.s3.Bucket(\"bucket\", grants=[\n aws.s3.BucketGrantArgs(\n id=current_user.id,\n type=\"CanonicalUser\",\n permissions=[\"FULL_CONTROL\"],\n ),\n aws.s3.BucketGrantArgs(\n type=\"Group\",\n permissions=[\n \"READ_ACP\",\n \"WRITE\",\n ],\n uri=\"http://acs.amazonaws.com/groups/s3/LogDelivery\",\n ),\n])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var currentUser = Output.Create(Aws.S3.GetCanonicalUserId.InvokeAsync());\n var bucket = new Aws.S3.Bucket(\"bucket\", new Aws.S3.BucketArgs\n {\n Grants = \n {\n new Aws.S3.Inputs.BucketGrantArgs\n {\n Id = currentUser.Apply(currentUser =\u003e currentUser.Id),\n Type = \"CanonicalUser\",\n Permissions = \n {\n \"FULL_CONTROL\",\n },\n },\n new Aws.S3.Inputs.BucketGrantArgs\n {\n Type = \"Group\",\n Permissions = \n {\n \"READ_ACP\",\n \"WRITE\",\n },\n Uri = \"http://acs.amazonaws.com/groups/s3/LogDelivery\",\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcurrentUser, err := s3.GetCanonicalUserId(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = s3.NewBucket(ctx, \"bucket\", \u0026s3.BucketArgs{\n\t\t\tGrants: s3.BucketGrantArray{\n\t\t\t\t\u0026s3.BucketGrantArgs{\n\t\t\t\t\tId: pulumi.String(currentUser.Id),\n\t\t\t\t\tType: pulumi.String(\"CanonicalUser\"),\n\t\t\t\t\tPermissions: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"FULL_CONTROL\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026s3.BucketGrantArgs{\n\t\t\t\t\tType: pulumi.String(\"Group\"),\n\t\t\t\t\tPermissions: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"READ_ACP\"),\n\t\t\t\t\t\tpulumi.String(\"WRITE\"),\n\t\t\t\t\t},\n\t\t\t\t\tUri: pulumi.String(\"http://acs.amazonaws.com/groups/s3/LogDelivery\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nS3 bucket can be imported using the `bucket`, e.g.\n\n```sh\n $ pulumi import aws:s3/bucket:Bucket bucket bucket-name\n```\n\n The `policy` argument is not imported and will be deprecated in a future version of the provider. Use the `aws_s3_bucket_policy` resource to manage the S3 Bucket Policy instead. ", "inputProperties": { "accelerationStatus": { "description": "Sets the accelerate configuration of an existing bucket. Can be `Enabled` or `Suspended`.\n", @@ -117902,7 +121165,7 @@ "type": "string" }, "bucket": { - "description": "The name of the bucket. If omitted, this provider will assign a random, unique name. Must be less than or equal to 63 characters in length.\n", + "description": "The name of the bucket. If omitted, this provider will assign a random, unique name. Must be lowercase and less than or equal to 63 characters in length. A full list of bucket naming rules [may be found here](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).\n", "language": { "csharp": { "name": "BucketName" @@ -117911,7 +121174,7 @@ "type": "string" }, "bucketPrefix": { - "description": "Creates a unique bucket name beginning with the specified prefix. Conflicts with `bucket`. Must be less than or equal to 37 characters in length.\n", + "description": "Creates a unique bucket name beginning with the specified prefix. Conflicts with `bucket`. Must be lowercase and less than or equal to 37 characters in length. A full list of bucket naming rules [may be found here](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).\n", "type": "string" }, "corsRules": { @@ -118017,7 +121280,7 @@ "type": "string" }, "bucket": { - "description": "The name of the bucket. If omitted, this provider will assign a random, unique name. Must be less than or equal to 63 characters in length.\n", + "description": "The name of the bucket. If omitted, this provider will assign a random, unique name. Must be lowercase and less than or equal to 63 characters in length. A full list of bucket naming rules [may be found here](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).\n", "language": { "csharp": { "name": "BucketName" @@ -118030,7 +121293,7 @@ "type": "string" }, "bucketPrefix": { - "description": "Creates a unique bucket name beginning with the specified prefix. Conflicts with `bucket`. Must be less than or equal to 37 characters in length.\n", + "description": "Creates a unique bucket name beginning with the specified prefix. Conflicts with `bucket`. Must be lowercase and less than or equal to 37 characters in length. A full list of bucket naming rules [may be found here](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).\n", "type": "string" }, "bucketRegionalDomainName": { @@ -118167,7 +121430,7 @@ "type": "string" }, "bucket": { - "description": "The name of the bucket. If omitted, this provider will assign a random, unique name. Must be less than or equal to 63 characters in length.\n", + "description": "The name of the bucket. If omitted, this provider will assign a random, unique name. Must be lowercase and less than or equal to 63 characters in length. A full list of bucket naming rules [may be found here](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).\n", "language": { "csharp": { "name": "BucketName" @@ -118180,7 +121443,7 @@ "type": "string" }, "bucketPrefix": { - "description": "Creates a unique bucket name beginning with the specified prefix. Conflicts with `bucket`. Must be less than or equal to 37 characters in length.\n", + "description": "Creates a unique bucket name beginning with the specified prefix. Conflicts with `bucket`. Must be lowercase and less than or equal to 37 characters in length. A full list of bucket naming rules [may be found here](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).\n", "type": "string" }, "bucketRegionalDomainName": { @@ -120185,6 +123448,20 @@ "kernelGatewayImageConfig": { "$ref": "#/types/aws:sagemaker/AppImageConfigKernelGatewayImageConfig:AppImageConfigKernelGatewayImageConfig", "description": "The configuration for the file system and kernels in a SageMaker image running as a KernelGateway app. See Kernel Gateway Image Config details below.\n" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags to assign to the resource. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" } }, "properties": { @@ -120199,11 +123476,26 @@ "kernelGatewayImageConfig": { "$ref": "#/types/aws:sagemaker/AppImageConfigKernelGatewayImageConfig:AppImageConfigKernelGatewayImageConfig", "description": "The configuration for the file system and kernels in a SageMaker image running as a KernelGateway app. See Kernel Gateway Image Config details below.\n" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags to assign to the resource. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" } }, "required": [ "appImageConfigName", - "arn" + "arn", + "tagsAll" ], "requiredInputs": [ "appImageConfigName" @@ -120222,6 +123514,20 @@ "kernelGatewayImageConfig": { "$ref": "#/types/aws:sagemaker/AppImageConfigKernelGatewayImageConfig:AppImageConfigKernelGatewayImageConfig", "description": "The configuration for the file system and kernels in a SageMaker image running as a KernelGateway app. See Kernel Gateway Image Config details below.\n" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags to assign to the resource. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" } }, "type": "object" @@ -121027,8 +124333,157 @@ "type": "object" } }, + "aws:sagemaker/flowDefinition:FlowDefinition": { + "description": "Provides a Sagemaker Flow Definition resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic Usage\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.sagemaker.FlowDefinition(\"example\", {\n flowDefinitionName: \"example\",\n roleArn: aws_iam_role.example.arn,\n humanLoopConfig: {\n humanTaskUiArn: aws_sagemaker_human_task_ui.example.arn,\n taskAvailabilityLifetimeInSeconds: 1,\n taskCount: 1,\n taskDescription: \"example\",\n taskTitle: \"example\",\n workteamArn: aws_sagemaker_workteam.example.arn,\n },\n outputConfig: {\n s3OutputPath: `s3://${aws_s3_bucket.example.bucket}/`,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.sagemaker.FlowDefinition(\"example\",\n flow_definition_name=\"example\",\n role_arn=aws_iam_role[\"example\"][\"arn\"],\n human_loop_config=aws.sagemaker.FlowDefinitionHumanLoopConfigArgs(\n human_task_ui_arn=aws_sagemaker_human_task_ui[\"example\"][\"arn\"],\n task_availability_lifetime_in_seconds=1,\n task_count=1,\n task_description=\"example\",\n task_title=\"example\",\n workteam_arn=aws_sagemaker_workteam[\"example\"][\"arn\"],\n ),\n output_config=aws.sagemaker.FlowDefinitionOutputConfigArgs(\n s3_output_path=f\"s3://{aws_s3_bucket['example']['bucket']}/\",\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Sagemaker.FlowDefinition(\"example\", new Aws.Sagemaker.FlowDefinitionArgs\n {\n FlowDefinitionName = \"example\",\n RoleArn = aws_iam_role.Example.Arn,\n HumanLoopConfig = new Aws.Sagemaker.Inputs.FlowDefinitionHumanLoopConfigArgs\n {\n HumanTaskUiArn = aws_sagemaker_human_task_ui.Example.Arn,\n TaskAvailabilityLifetimeInSeconds = 1,\n TaskCount = 1,\n TaskDescription = \"example\",\n TaskTitle = \"example\",\n WorkteamArn = aws_sagemaker_workteam.Example.Arn,\n },\n OutputConfig = new Aws.Sagemaker.Inputs.FlowDefinitionOutputConfigArgs\n {\n S3OutputPath = $\"s3://{aws_s3_bucket.Example.Bucket}/\",\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/sagemaker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sagemaker.NewFlowDefinition(ctx, \"example\", \u0026sagemaker.FlowDefinitionArgs{\n\t\t\tFlowDefinitionName: pulumi.String(\"example\"),\n\t\t\tRoleArn: pulumi.Any(aws_iam_role.Example.Arn),\n\t\t\tHumanLoopConfig: \u0026sagemaker.FlowDefinitionHumanLoopConfigArgs{\n\t\t\t\tHumanTaskUiArn: pulumi.Any(aws_sagemaker_human_task_ui.Example.Arn),\n\t\t\t\tTaskAvailabilityLifetimeInSeconds: pulumi.Int(1),\n\t\t\t\tTaskCount: pulumi.Int(1),\n\t\t\t\tTaskDescription: pulumi.String(\"example\"),\n\t\t\t\tTaskTitle: pulumi.String(\"example\"),\n\t\t\t\tWorkteamArn: pulumi.Any(aws_sagemaker_workteam.Example.Arn),\n\t\t\t},\n\t\t\tOutputConfig: \u0026sagemaker.FlowDefinitionOutputConfigArgs{\n\t\t\t\tS3OutputPath: pulumi.String(fmt.Sprintf(\"%v%v%v\", \"s3://\", aws_s3_bucket.Example.Bucket, \"/\")),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Public Workteam Usage\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.sagemaker.FlowDefinition(\"example\", {\n flowDefinitionName: \"example\",\n roleArn: aws_iam_role.example.arn,\n humanLoopConfig: {\n humanTaskUiArn: aws_sagemaker_human_task_ui.example.arn,\n taskAvailabilityLifetimeInSeconds: 1,\n taskCount: 1,\n taskDescription: \"example\",\n taskTitle: \"example\",\n workteamArn: `arn:aws:sagemaker:${data.aws_region.current.name}:394669845002:workteam/public-crowd/default`,\n publicWorkforceTaskPrice: {\n amountInUsd: {\n cents: 1,\n tenthFractionsOfACent: 2,\n },\n },\n },\n outputConfig: {\n s3OutputPath: `s3://${aws_s3_bucket.example.bucket}/`,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.sagemaker.FlowDefinition(\"example\",\n flow_definition_name=\"example\",\n role_arn=aws_iam_role[\"example\"][\"arn\"],\n human_loop_config=aws.sagemaker.FlowDefinitionHumanLoopConfigArgs(\n human_task_ui_arn=aws_sagemaker_human_task_ui[\"example\"][\"arn\"],\n task_availability_lifetime_in_seconds=1,\n task_count=1,\n task_description=\"example\",\n task_title=\"example\",\n workteam_arn=f\"arn:aws:sagemaker:{data['aws_region']['current']['name']}:394669845002:workteam/public-crowd/default\",\n public_workforce_task_price=aws.sagemaker.FlowDefinitionHumanLoopConfigPublicWorkforceTaskPriceArgs(\n amount_in_usd=aws.sagemaker.FlowDefinitionHumanLoopConfigPublicWorkforceTaskPriceAmountInUsdArgs(\n cents=1,\n tenth_fractions_of_a_cent=2,\n ),\n ),\n ),\n output_config=aws.sagemaker.FlowDefinitionOutputConfigArgs(\n s3_output_path=f\"s3://{aws_s3_bucket['example']['bucket']}/\",\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Sagemaker.FlowDefinition(\"example\", new Aws.Sagemaker.FlowDefinitionArgs\n {\n FlowDefinitionName = \"example\",\n RoleArn = aws_iam_role.Example.Arn,\n HumanLoopConfig = new Aws.Sagemaker.Inputs.FlowDefinitionHumanLoopConfigArgs\n {\n HumanTaskUiArn = aws_sagemaker_human_task_ui.Example.Arn,\n TaskAvailabilityLifetimeInSeconds = 1,\n TaskCount = 1,\n TaskDescription = \"example\",\n TaskTitle = \"example\",\n WorkteamArn = $\"arn:aws:sagemaker:{data.Aws_region.Current.Name}:394669845002:workteam/public-crowd/default\",\n PublicWorkforceTaskPrice = new Aws.Sagemaker.Inputs.FlowDefinitionHumanLoopConfigPublicWorkforceTaskPriceArgs\n {\n AmountInUsd = new Aws.Sagemaker.Inputs.FlowDefinitionHumanLoopConfigPublicWorkforceTaskPriceAmountInUsdArgs\n {\n Cents = 1,\n TenthFractionsOfACent = 2,\n },\n },\n },\n OutputConfig = new Aws.Sagemaker.Inputs.FlowDefinitionOutputConfigArgs\n {\n S3OutputPath = $\"s3://{aws_s3_bucket.Example.Bucket}/\",\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/sagemaker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sagemaker.NewFlowDefinition(ctx, \"example\", \u0026sagemaker.FlowDefinitionArgs{\n\t\t\tFlowDefinitionName: pulumi.String(\"example\"),\n\t\t\tRoleArn: pulumi.Any(aws_iam_role.Example.Arn),\n\t\t\tHumanLoopConfig: \u0026sagemaker.FlowDefinitionHumanLoopConfigArgs{\n\t\t\t\tHumanTaskUiArn: pulumi.Any(aws_sagemaker_human_task_ui.Example.Arn),\n\t\t\t\tTaskAvailabilityLifetimeInSeconds: pulumi.Int(1),\n\t\t\t\tTaskCount: pulumi.Int(1),\n\t\t\t\tTaskDescription: pulumi.String(\"example\"),\n\t\t\t\tTaskTitle: pulumi.String(\"example\"),\n\t\t\t\tWorkteamArn: pulumi.String(fmt.Sprintf(\"%v%v%v\", \"arn:aws:sagemaker:\", data.Aws_region.Current.Name, \":394669845002:workteam/public-crowd/default\")),\n\t\t\t\tPublicWorkforceTaskPrice: \u0026sagemaker.FlowDefinitionHumanLoopConfigPublicWorkforceTaskPriceArgs{\n\t\t\t\t\tAmountInUsd: \u0026sagemaker.FlowDefinitionHumanLoopConfigPublicWorkforceTaskPriceAmountInUsdArgs{\n\t\t\t\t\t\tCents: pulumi.Int(1),\n\t\t\t\t\t\tTenthFractionsOfACent: pulumi.Int(2),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tOutputConfig: \u0026sagemaker.FlowDefinitionOutputConfigArgs{\n\t\t\t\tS3OutputPath: pulumi.String(fmt.Sprintf(\"%v%v%v\", \"s3://\", aws_s3_bucket.Example.Bucket, \"/\")),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Human Loop Activation Config Usage\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.sagemaker.FlowDefinition(\"example\", {\n flowDefinitionName: \"example\",\n roleArn: aws_iam_role.example.arn,\n humanLoopConfig: {\n humanTaskUiArn: aws_sagemaker_human_task_ui.example.arn,\n taskAvailabilityLifetimeInSeconds: 1,\n taskCount: 1,\n taskDescription: \"example\",\n taskTitle: \"example\",\n workteamArn: aws_sagemaker_workteam.example.arn,\n },\n humanLoopRequestSource: {\n awsManagedHumanLoopRequestSource: \"AWS/Textract/AnalyzeDocument/Forms/V1\",\n },\n humanLoopActivationConfig: {\n humanLoopActivationConditionsConfig: {\n humanLoopActivationConditions: ` {\n\t\t\t\"Conditions\": [\n\t\t\t {\n\t\t\t\t\"ConditionType\": \"Sampling\",\n\t\t\t\t\"ConditionParameters\": {\n\t\t\t\t \"RandomSamplingPercentage\": 5\n\t\t\t\t}\n\t\t\t }\n\t\t\t]\n\t\t}\n`,\n },\n },\n outputConfig: {\n s3OutputPath: `s3://${aws_s3_bucket.example.bucket}/`,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.sagemaker.FlowDefinition(\"example\",\n flow_definition_name=\"example\",\n role_arn=aws_iam_role[\"example\"][\"arn\"],\n human_loop_config=aws.sagemaker.FlowDefinitionHumanLoopConfigArgs(\n human_task_ui_arn=aws_sagemaker_human_task_ui[\"example\"][\"arn\"],\n task_availability_lifetime_in_seconds=1,\n task_count=1,\n task_description=\"example\",\n task_title=\"example\",\n workteam_arn=aws_sagemaker_workteam[\"example\"][\"arn\"],\n ),\n human_loop_request_source=aws.sagemaker.FlowDefinitionHumanLoopRequestSourceArgs(\n aws_managed_human_loop_request_source=\"AWS/Textract/AnalyzeDocument/Forms/V1\",\n ),\n human_loop_activation_config=aws.sagemaker.FlowDefinitionHumanLoopActivationConfigArgs(\n human_loop_activation_conditions_config=aws.sagemaker.FlowDefinitionHumanLoopActivationConfigHumanLoopActivationConditionsConfigArgs(\n human_loop_activation_conditions=\"\"\" {\n\t\t\t\"Conditions\": [\n\t\t\t {\n\t\t\t\t\"ConditionType\": \"Sampling\",\n\t\t\t\t\"ConditionParameters\": {\n\t\t\t\t \"RandomSamplingPercentage\": 5\n\t\t\t\t}\n\t\t\t }\n\t\t\t]\n\t\t}\n\"\"\",\n ),\n ),\n output_config=aws.sagemaker.FlowDefinitionOutputConfigArgs(\n s3_output_path=f\"s3://{aws_s3_bucket['example']['bucket']}/\",\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Sagemaker.FlowDefinition(\"example\", new Aws.Sagemaker.FlowDefinitionArgs\n {\n FlowDefinitionName = \"example\",\n RoleArn = aws_iam_role.Example.Arn,\n HumanLoopConfig = new Aws.Sagemaker.Inputs.FlowDefinitionHumanLoopConfigArgs\n {\n HumanTaskUiArn = aws_sagemaker_human_task_ui.Example.Arn,\n TaskAvailabilityLifetimeInSeconds = 1,\n TaskCount = 1,\n TaskDescription = \"example\",\n TaskTitle = \"example\",\n WorkteamArn = aws_sagemaker_workteam.Example.Arn,\n },\n HumanLoopRequestSource = new Aws.Sagemaker.Inputs.FlowDefinitionHumanLoopRequestSourceArgs\n {\n AwsManagedHumanLoopRequestSource = \"AWS/Textract/AnalyzeDocument/Forms/V1\",\n },\n HumanLoopActivationConfig = new Aws.Sagemaker.Inputs.FlowDefinitionHumanLoopActivationConfigArgs\n {\n HumanLoopActivationConditionsConfig = new Aws.Sagemaker.Inputs.FlowDefinitionHumanLoopActivationConfigHumanLoopActivationConditionsConfigArgs\n {\n HumanLoopActivationConditions = @\" {\n\t\t\t\"\"Conditions\"\": [\n\t\t\t {\n\t\t\t\t\"\"ConditionType\"\": \"\"Sampling\"\",\n\t\t\t\t\"\"ConditionParameters\"\": {\n\t\t\t\t \"\"RandomSamplingPercentage\"\": 5\n\t\t\t\t}\n\t\t\t }\n\t\t\t]\n\t\t}\n\",\n },\n },\n OutputConfig = new Aws.Sagemaker.Inputs.FlowDefinitionOutputConfigArgs\n {\n S3OutputPath = $\"s3://{aws_s3_bucket.Example.Bucket}/\",\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/sagemaker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sagemaker.NewFlowDefinition(ctx, \"example\", \u0026sagemaker.FlowDefinitionArgs{\n\t\t\tFlowDefinitionName: pulumi.String(\"example\"),\n\t\t\tRoleArn: pulumi.Any(aws_iam_role.Example.Arn),\n\t\t\tHumanLoopConfig: \u0026sagemaker.FlowDefinitionHumanLoopConfigArgs{\n\t\t\t\tHumanTaskUiArn: pulumi.Any(aws_sagemaker_human_task_ui.Example.Arn),\n\t\t\t\tTaskAvailabilityLifetimeInSeconds: pulumi.Int(1),\n\t\t\t\tTaskCount: pulumi.Int(1),\n\t\t\t\tTaskDescription: pulumi.String(\"example\"),\n\t\t\t\tTaskTitle: pulumi.String(\"example\"),\n\t\t\t\tWorkteamArn: pulumi.Any(aws_sagemaker_workteam.Example.Arn),\n\t\t\t},\n\t\t\tHumanLoopRequestSource: \u0026sagemaker.FlowDefinitionHumanLoopRequestSourceArgs{\n\t\t\t\tAwsManagedHumanLoopRequestSource: pulumi.String(\"AWS/Textract/AnalyzeDocument/Forms/V1\"),\n\t\t\t},\n\t\t\tHumanLoopActivationConfig: \u0026sagemaker.FlowDefinitionHumanLoopActivationConfigArgs{\n\t\t\t\tHumanLoopActivationConditionsConfig: \u0026sagemaker.FlowDefinitionHumanLoopActivationConfigHumanLoopActivationConditionsConfigArgs{\n\t\t\t\t\tHumanLoopActivationConditions: pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v\", \" {\\n\", \"\t\t\t\\\"Conditions\\\": [\\n\", \"\t\t\t {\\n\", \"\t\t\t\t\\\"ConditionType\\\": \\\"Sampling\\\",\\n\", \"\t\t\t\t\\\"ConditionParameters\\\": {\\n\", \"\t\t\t\t \\\"RandomSamplingPercentage\\\": 5\\n\", \"\t\t\t\t}\\n\", \"\t\t\t }\\n\", \"\t\t\t]\\n\", \"\t\t}\\n\")),\n\t\t\t\t},\n\t\t\t},\n\t\t\tOutputConfig: \u0026sagemaker.FlowDefinitionOutputConfigArgs{\n\t\t\t\tS3OutputPath: pulumi.String(fmt.Sprintf(\"%v%v%v\", \"s3://\", aws_s3_bucket.Example.Bucket, \"/\")),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSagemaker Flow Definitions can be imported using the `flow_definition_name`, e.g.\n\n```sh\n $ pulumi import aws:sagemaker/flowDefinition:FlowDefinition example example\n```\n\n ", + "inputProperties": { + "flowDefinitionName": { + "description": "The name of your flow definition.\n", + "type": "string" + }, + "humanLoopActivationConfig": { + "$ref": "#/types/aws:sagemaker/FlowDefinitionHumanLoopActivationConfig:FlowDefinitionHumanLoopActivationConfig", + "description": "An object containing information about the events that trigger a human workflow. See Human Loop Activation Config details below.\n" + }, + "humanLoopConfig": { + "$ref": "#/types/aws:sagemaker/FlowDefinitionHumanLoopConfig:FlowDefinitionHumanLoopConfig", + "description": "An object containing information about the tasks the human reviewers will perform. See Human Loop Config details below.\n" + }, + "humanLoopRequestSource": { + "$ref": "#/types/aws:sagemaker/FlowDefinitionHumanLoopRequestSource:FlowDefinitionHumanLoopRequestSource", + "description": "Container for configuring the source of human task requests. Use to specify if Amazon Rekognition or Amazon Textract is used as an integration source. See Human Loop Request Source details below.\n" + }, + "outputConfig": { + "$ref": "#/types/aws:sagemaker/FlowDefinitionOutputConfig:FlowDefinitionOutputConfig", + "description": "An object containing information about where the human review results will be uploaded. See Output Config details below.\n" + }, + "roleArn": { + "description": "The Amazon Resource Name (ARN) of the role needed to call other services on your behalf.\n", + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags to assign to the resource. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + } + }, + "properties": { + "arn": { + "description": "The Amazon Resource Name (ARN) assigned by AWS to this Flow Definition.\n", + "type": "string" + }, + "flowDefinitionName": { + "description": "The name of your flow definition.\n", + "type": "string" + }, + "humanLoopActivationConfig": { + "$ref": "#/types/aws:sagemaker/FlowDefinitionHumanLoopActivationConfig:FlowDefinitionHumanLoopActivationConfig", + "description": "An object containing information about the events that trigger a human workflow. See Human Loop Activation Config details below.\n" + }, + "humanLoopConfig": { + "$ref": "#/types/aws:sagemaker/FlowDefinitionHumanLoopConfig:FlowDefinitionHumanLoopConfig", + "description": "An object containing information about the tasks the human reviewers will perform. See Human Loop Config details below.\n" + }, + "humanLoopRequestSource": { + "$ref": "#/types/aws:sagemaker/FlowDefinitionHumanLoopRequestSource:FlowDefinitionHumanLoopRequestSource", + "description": "Container for configuring the source of human task requests. Use to specify if Amazon Rekognition or Amazon Textract is used as an integration source. See Human Loop Request Source details below.\n" + }, + "outputConfig": { + "$ref": "#/types/aws:sagemaker/FlowDefinitionOutputConfig:FlowDefinitionOutputConfig", + "description": "An object containing information about where the human review results will be uploaded. See Output Config details below.\n" + }, + "roleArn": { + "description": "The Amazon Resource Name (ARN) of the role needed to call other services on your behalf.\n", + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags to assign to the resource. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + } + }, + "required": [ + "arn", + "flowDefinitionName", + "humanLoopConfig", + "outputConfig", + "roleArn", + "tagsAll" + ], + "requiredInputs": [ + "flowDefinitionName", + "humanLoopConfig", + "outputConfig", + "roleArn" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering FlowDefinition resources.\n", + "properties": { + "arn": { + "description": "The Amazon Resource Name (ARN) assigned by AWS to this Flow Definition.\n", + "type": "string" + }, + "flowDefinitionName": { + "description": "The name of your flow definition.\n", + "type": "string" + }, + "humanLoopActivationConfig": { + "$ref": "#/types/aws:sagemaker/FlowDefinitionHumanLoopActivationConfig:FlowDefinitionHumanLoopActivationConfig", + "description": "An object containing information about the events that trigger a human workflow. See Human Loop Activation Config details below.\n" + }, + "humanLoopConfig": { + "$ref": "#/types/aws:sagemaker/FlowDefinitionHumanLoopConfig:FlowDefinitionHumanLoopConfig", + "description": "An object containing information about the tasks the human reviewers will perform. See Human Loop Config details below.\n" + }, + "humanLoopRequestSource": { + "$ref": "#/types/aws:sagemaker/FlowDefinitionHumanLoopRequestSource:FlowDefinitionHumanLoopRequestSource", + "description": "Container for configuring the source of human task requests. Use to specify if Amazon Rekognition or Amazon Textract is used as an integration source. See Human Loop Request Source details below.\n" + }, + "outputConfig": { + "$ref": "#/types/aws:sagemaker/FlowDefinitionOutputConfig:FlowDefinitionOutputConfig", + "description": "An object containing information about where the human review results will be uploaded. See Output Config details below.\n" + }, + "roleArn": { + "description": "The Amazon Resource Name (ARN) of the role needed to call other services on your behalf.\n", + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags to assign to the resource. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + } + }, + "type": "object" + } + }, "aws:sagemaker/humanTaskUI:HumanTaskUI": { - "description": "Provides a Sagemaker Human Task UI resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst example = new aws.sagemaker.HumanTaskUI(\"example\", {\n humanTaskUiName: \"example\",\n uiTemplate: {\n content: fs.readFileSync(\"sagemaker-human-task-ui-template.html\"),\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.sagemaker.HumanTaskUI(\"example\",\n human_task_ui_name=\"example\",\n ui_template=aws.sagemaker.HumanTaskUIUiTemplateArgs(\n content=(lambda path: open(path).read())(\"sagemaker-human-task-ui-template.html\"),\n ))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Sagemaker.HumanTaskUI(\"example\", new Aws.Sagemaker.HumanTaskUIArgs\n {\n HumanTaskUiName = \"example\",\n UiTemplate = new Aws.Sagemaker.Inputs.HumanTaskUIUiTemplateArgs\n {\n Content = File.ReadAllText(\"sagemaker-human-task-ui-template.html\"),\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSagemaker Human Task UIs can be imported using the `human_task_ui_name`, e.g.\n\n```sh\n $ pulumi import aws:sagemaker/humanTaskUI:HumanTaskUI example example\n```\n\n ", + "description": "Provides a Sagemaker Human Task UI resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst example = new aws.sagemaker.HumanTaskUI(\"example\", {\n humanTaskUiName: \"example\",\n uiTemplate: {\n content: fs.readFileSync(\"sagemaker-human-task-ui-template.html\"),\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.sagemaker.HumanTaskUI(\"example\",\n human_task_ui_name=\"example\",\n ui_template=aws.sagemaker.HumanTaskUIUiTemplateArgs(\n content=(lambda path: open(path).read())(\"sagemaker-human-task-ui-template.html\"),\n ))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Sagemaker.HumanTaskUI(\"example\", new Aws.Sagemaker.HumanTaskUIArgs\n {\n HumanTaskUiName = \"example\",\n UiTemplate = new Aws.Sagemaker.Inputs.HumanTaskUIUiTemplateArgs\n {\n Content = File.ReadAllText(\"sagemaker-human-task-ui-template.html\"),\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/sagemaker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sagemaker.NewHumanTaskUI(ctx, \"example\", \u0026sagemaker.HumanTaskUIArgs{\n\t\t\tHumanTaskUiName: pulumi.String(\"example\"),\n\t\t\tUiTemplate: \u0026sagemaker.HumanTaskUIUiTemplateArgs{\n\t\t\t\tContent: readFileOrPanic(\"sagemaker-human-task-ui-template.html\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSagemaker Human Task UIs can be imported using the `human_task_ui_name`, e.g.\n\n```sh\n $ pulumi import aws:sagemaker/humanTaskUI:HumanTaskUI example example\n```\n\n ", "inputProperties": { "humanTaskUiName": { "description": "The name of the Human Task UI.\n", @@ -121562,6 +125017,48 @@ "type": "object" } }, + "aws:sagemaker/modelPackageGroupPolicy:ModelPackageGroupPolicy": { + "description": "Provides a Sagemaker Model Package Group Policy resource.\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nSagemaker Code Model Package Groups can be imported using the `name`, e.g.\n\n```sh\n $ pulumi import aws:sagemaker/modelPackageGroupPolicy:ModelPackageGroupPolicy example example\n```\n\n ", + "inputProperties": { + "modelPackageGroupName": { + "description": "The name of the model package group.\n", + "type": "string" + }, + "resourcePolicy": { + "type": "string" + } + }, + "properties": { + "modelPackageGroupName": { + "description": "The name of the model package group.\n", + "type": "string" + }, + "resourcePolicy": { + "type": "string" + } + }, + "required": [ + "modelPackageGroupName", + "resourcePolicy" + ], + "requiredInputs": [ + "modelPackageGroupName", + "resourcePolicy" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering ModelPackageGroupPolicy resources.\n", + "properties": { + "modelPackageGroupName": { + "description": "The name of the model package group.\n", + "type": "string" + }, + "resourcePolicy": { + "type": "string" + } + }, + "type": "object" + } + }, "aws:sagemaker/notebookInstance:NotebookInstance": { "description": "Provides a Sagemaker Notebook Instance resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic usage\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst ni = new aws.sagemaker.NotebookInstance(\"ni\", {\n roleArn: aws_iam_role.role.arn,\n instanceType: \"ml.t2.medium\",\n tags: {\n Name: \"foo\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nni = aws.sagemaker.NotebookInstance(\"ni\",\n role_arn=aws_iam_role[\"role\"][\"arn\"],\n instance_type=\"ml.t2.medium\",\n tags={\n \"Name\": \"foo\",\n })\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var ni = new Aws.Sagemaker.NotebookInstance(\"ni\", new Aws.Sagemaker.NotebookInstanceArgs\n {\n RoleArn = aws_iam_role.Role.Arn,\n InstanceType = \"ml.t2.medium\",\n Tags = \n {\n { \"Name\", \"foo\" },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/sagemaker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sagemaker.NewNotebookInstance(ctx, \"ni\", \u0026sagemaker.NotebookInstanceArgs{\n\t\t\tRoleArn: pulumi.Any(aws_iam_role.Role.Arn),\n\t\t\tInstanceType: pulumi.String(\"ml.t2.medium\"),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Name\": pulumi.String(\"foo\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Code repository usage\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.sagemaker.CodeRepository(\"example\", {\n codeRepositoryName: \"my-notebook-instance-code-repo\",\n gitConfig: {\n repositoryUrl: \"https://github.com/hashicorp/terraform-provider-aws.git\",\n },\n});\nconst ni = new aws.sagemaker.NotebookInstance(\"ni\", {\n roleArn: aws_iam_role.role.arn,\n instanceType: \"ml.t2.medium\",\n defaultCodeRepository: example.codeRepositoryName,\n tags: {\n Name: \"foo\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.sagemaker.CodeRepository(\"example\",\n code_repository_name=\"my-notebook-instance-code-repo\",\n git_config=aws.sagemaker.CodeRepositoryGitConfigArgs(\n repository_url=\"https://github.com/hashicorp/terraform-provider-aws.git\",\n ))\nni = aws.sagemaker.NotebookInstance(\"ni\",\n role_arn=aws_iam_role[\"role\"][\"arn\"],\n instance_type=\"ml.t2.medium\",\n default_code_repository=example.code_repository_name,\n tags={\n \"Name\": \"foo\",\n })\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Sagemaker.CodeRepository(\"example\", new Aws.Sagemaker.CodeRepositoryArgs\n {\n CodeRepositoryName = \"my-notebook-instance-code-repo\",\n GitConfig = new Aws.Sagemaker.Inputs.CodeRepositoryGitConfigArgs\n {\n RepositoryUrl = \"https://github.com/hashicorp/terraform-provider-aws.git\",\n },\n });\n var ni = new Aws.Sagemaker.NotebookInstance(\"ni\", new Aws.Sagemaker.NotebookInstanceArgs\n {\n RoleArn = aws_iam_role.Role.Arn,\n InstanceType = \"ml.t2.medium\",\n DefaultCodeRepository = example.CodeRepositoryName,\n Tags = \n {\n { \"Name\", \"foo\" },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/sagemaker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := sagemaker.NewCodeRepository(ctx, \"example\", \u0026sagemaker.CodeRepositoryArgs{\n\t\t\tCodeRepositoryName: pulumi.String(\"my-notebook-instance-code-repo\"),\n\t\t\tGitConfig: \u0026sagemaker.CodeRepositoryGitConfigArgs{\n\t\t\t\tRepositoryUrl: pulumi.String(\"https://github.com/hashicorp/terraform-provider-aws.git\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = sagemaker.NewNotebookInstance(ctx, \"ni\", \u0026sagemaker.NotebookInstanceArgs{\n\t\t\tRoleArn: pulumi.Any(aws_iam_role.Role.Arn),\n\t\t\tInstanceType: pulumi.String(\"ml.t2.medium\"),\n\t\t\tDefaultCodeRepository: example.CodeRepositoryName,\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"Name\": pulumi.String(\"foo\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSagemaker Notebook Instances can be imported using the `name`, e.g.\n\n```sh\n $ pulumi import aws:sagemaker/notebookInstance:NotebookInstance test_notebook_instance my-notebook-instance\n```\n\n ", "inputProperties": { @@ -121884,6 +125381,117 @@ "type": "object" } }, + "aws:sagemaker/studioLifecycleConfig:StudioLifecycleConfig": { + "description": "Provides a Sagemaker Studio Lifecycle Config resource.\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nSagemaker Code Studio Lifecycle Configs can be imported using the `studio_lifecycle_config_name`, e.g.\n\n```sh\n $ pulumi import aws:sagemaker/studioLifecycleConfig:StudioLifecycleConfig example example\n```\n\n ", + "inputProperties": { + "studioLifecycleConfigAppType": { + "description": "The App type that the Lifecycle Configuration is attached to. Valid values are `JupyterServer` and `KernelGateway`.\n", + "type": "string" + }, + "studioLifecycleConfigContent": { + "description": "The content of your Studio Lifecycle Configuration script. This content must be base64 encoded.\n", + "type": "string" + }, + "studioLifecycleConfigName": { + "description": "The name of the Studio Lifecycle Configuration to create.\n", + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags to assign to the resource. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + } + }, + "properties": { + "arn": { + "description": "The Amazon Resource Name (ARN) assigned by AWS to this Studio Lifecycle Config.\n", + "type": "string" + }, + "studioLifecycleConfigAppType": { + "description": "The App type that the Lifecycle Configuration is attached to. Valid values are `JupyterServer` and `KernelGateway`.\n", + "type": "string" + }, + "studioLifecycleConfigContent": { + "description": "The content of your Studio Lifecycle Configuration script. This content must be base64 encoded.\n", + "type": "string" + }, + "studioLifecycleConfigName": { + "description": "The name of the Studio Lifecycle Configuration to create.\n", + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags to assign to the resource. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + } + }, + "required": [ + "arn", + "studioLifecycleConfigAppType", + "studioLifecycleConfigContent", + "studioLifecycleConfigName", + "tagsAll" + ], + "requiredInputs": [ + "studioLifecycleConfigAppType", + "studioLifecycleConfigContent", + "studioLifecycleConfigName" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering StudioLifecycleConfig resources.\n", + "properties": { + "arn": { + "description": "The Amazon Resource Name (ARN) assigned by AWS to this Studio Lifecycle Config.\n", + "type": "string" + }, + "studioLifecycleConfigAppType": { + "description": "The App type that the Lifecycle Configuration is attached to. Valid values are `JupyterServer` and `KernelGateway`.\n", + "type": "string" + }, + "studioLifecycleConfigContent": { + "description": "The content of your Studio Lifecycle Configuration script. This content must be base64 encoded.\n", + "type": "string" + }, + "studioLifecycleConfigName": { + "description": "The name of the Studio Lifecycle Configuration to create.\n", + "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags to assign to the resource. If configured with a provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level.\n", + "type": "object" + }, + "tagsAll": { + "additionalProperties": { + "type": "string" + }, + "description": "A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://www.terraform.io/docs/providers/aws/index.html#default_tags-configuration-block).\n", + "type": "object" + } + }, + "type": "object" + } + }, "aws:sagemaker/userProfile:UserProfile": { "description": "Provides a Sagemaker User Profile resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic usage\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.sagemaker.UserProfile(\"example\", {\n domainId: aws_sagemaker_domain.test.id,\n userProfileName: \"example\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.sagemaker.UserProfile(\"example\",\n domain_id=aws_sagemaker_domain[\"test\"][\"id\"],\n user_profile_name=\"example\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Sagemaker.UserProfile(\"example\", new Aws.Sagemaker.UserProfileArgs\n {\n DomainId = aws_sagemaker_domain.Test.Id,\n UserProfileName = \"example\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/sagemaker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sagemaker.NewUserProfile(ctx, \"example\", \u0026sagemaker.UserProfileArgs{\n\t\t\tDomainId: pulumi.Any(aws_sagemaker_domain.Test.Id),\n\t\t\tUserProfileName: pulumi.String(\"example\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSagemaker Code User Profiles can be imported using the `arn`, e.g.\n\n```sh\n $ pulumi import aws:sagemaker/userProfile:UserProfile test_user_profile arn:aws:sagemaker:us-west-2:123456789012:user-profile/domain-id/profile-name\n```\n\n ", "inputProperties": { @@ -122568,7 +126176,7 @@ } }, "aws:secretsmanager/secret:Secret": { - "description": "Provides a resource to manage AWS Secrets Manager secret metadata. To manage secret rotation, see the `aws.secretsmanager.SecretRotation` resource. To manage a secret value, see the `aws.secretsmanager.SecretVersion` resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.secretsmanager.Secret(\"example\", {});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.secretsmanager.Secret(\"example\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.SecretsManager.Secret(\"example\", new Aws.SecretsManager.SecretArgs\n {\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/secretsmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretsmanager.NewSecret(ctx, \"example\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Rotation Configuration\n\nTo enable automatic secret rotation, the Secrets Manager service requires usage of a Lambda function. The [Rotate Secrets section in the Secrets Manager User Guide](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html) provides additional information about deploying a prebuilt Lambda functions for supported credential rotation (e.g. RDS) or deploying a custom Lambda function.\n\n\u003e **NOTE:** Configuring rotation causes the secret to rotate once as soon as you store the secret. Before you do this, you must ensure that all of your applications that use the credentials stored in the secret are updated to retrieve the secret from AWS Secrets Manager. The old credentials might no longer be usable after the initial rotation and any applications that you fail to update will break as soon as the old credentials are no longer valid.\n\n\u003e **NOTE:** If you cancel a rotation that is in progress (by removing the `rotation` configuration), it can leave the VersionStage labels in an unexpected state. Depending on what step of the rotation was in progress, you might need to remove the staging label AWSPENDING from the partially created version, specified by the SecretVersionId response value. You should also evaluate the partially rotated new version to see if it should be deleted, which you can do by removing all staging labels from the new version's VersionStage field.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst rotation_example = new aws.secretsmanager.Secret(\"rotation-example\", {\n rotationLambdaArn: aws_lambda_function.example.arn,\n rotationRules: {\n automaticallyAfterDays: 7,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nrotation_example = aws.secretsmanager.Secret(\"rotation-example\",\n rotation_lambda_arn=aws_lambda_function[\"example\"][\"arn\"],\n rotation_rules=aws.secretsmanager.SecretRotationRulesArgs(\n automatically_after_days=7,\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var rotation_example = new Aws.SecretsManager.Secret(\"rotation-example\", new Aws.SecretsManager.SecretArgs\n {\n RotationLambdaArn = aws_lambda_function.Example.Arn,\n RotationRules = new Aws.SecretsManager.Inputs.SecretRotationRulesArgs\n {\n AutomaticallyAfterDays = 7,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/secretsmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretsmanager.NewSecret(ctx, \"rotation_example\", \u0026secretsmanager.SecretArgs{\n\t\t\tRotationLambdaArn: pulumi.Any(aws_lambda_function.Example.Arn),\n\t\t\tRotationRules: \u0026secretsmanager.SecretRotationRulesArgs{\n\t\t\t\tAutomaticallyAfterDays: pulumi.Int(7),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n`aws_secretsmanager_secret` can be imported by using the secret Amazon Resource Name (ARN), e.g.\n\n```sh\n $ pulumi import aws:secretsmanager/secret:Secret example arn:aws:secretsmanager:us-east-1:123456789012:secret:example-123456\n```\n\n ", + "description": "Provides a resource to manage AWS Secrets Manager secret metadata. To manage secret rotation, see the `aws.secretsmanager.SecretRotation` resource. To manage a secret value, see the `aws.secretsmanager.SecretVersion` resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.secretsmanager.Secret(\"example\", {});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.secretsmanager.Secret(\"example\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.SecretsManager.Secret(\"example\", new Aws.SecretsManager.SecretArgs\n {\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/secretsmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretsmanager.NewSecret(ctx, \"example\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Rotation Configuration\n\nTo enable automatic secret rotation, the Secrets Manager service requires usage of a Lambda function. The [Rotate Secrets section in the Secrets Manager User Guide](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets_strategies.html) provides additional information about deploying a prebuilt Lambda functions for supported credential rotation (e.g. RDS) or deploying a custom Lambda function.\n\n\u003e **NOTE:** Configuring rotation causes the secret to rotate once as soon as you store the secret. Before you do this, you must ensure that all of your applications that use the credentials stored in the secret are updated to retrieve the secret from AWS Secrets Manager. The old credentials might no longer be usable after the initial rotation and any applications that you fail to update will break as soon as the old credentials are no longer valid.\n\n\u003e **NOTE:** If you cancel a rotation that is in progress (by removing the `rotation` configuration), it can leave the VersionStage labels in an unexpected state. Depending on what step of the rotation was in progress, you might need to remove the staging label AWSPENDING from the partially created version, specified by the SecretVersionId response value. You should also evaluate the partially rotated new version to see if it should be deleted, which you can do by removing all staging labels from the new version's VersionStage field.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst rotation_example = new aws.secretsmanager.Secret(\"rotation-example\", {\n rotationLambdaArn: aws_lambda_function.example.arn,\n rotationRules: {\n automaticallyAfterDays: 7,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nrotation_example = aws.secretsmanager.Secret(\"rotation-example\",\n rotation_lambda_arn=aws_lambda_function[\"example\"][\"arn\"],\n rotation_rules=aws.secretsmanager.SecretRotationRulesArgs(\n automatically_after_days=7,\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var rotation_example = new Aws.SecretsManager.Secret(\"rotation-example\", new Aws.SecretsManager.SecretArgs\n {\n RotationLambdaArn = aws_lambda_function.Example.Arn,\n RotationRules = new Aws.SecretsManager.Inputs.SecretRotationRulesArgs\n {\n AutomaticallyAfterDays = 7,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/secretsmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretsmanager.NewSecret(ctx, \"rotation_example\", \u0026secretsmanager.SecretArgs{\n\t\t\tRotationLambdaArn: pulumi.Any(aws_lambda_function.Example.Arn),\n\t\t\tRotationRules: \u0026secretsmanager.SecretRotationRulesArgs{\n\t\t\t\tAutomaticallyAfterDays: pulumi.Int(7),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n`aws_secretsmanager_secret` can be imported by using the secret Amazon Resource Name (ARN), e.g.\n\n```sh\n $ pulumi import aws:secretsmanager/secret:Secret example arn:aws:secretsmanager:us-east-1:123456789012:secret:example-123456\n```\n\n ", "inputProperties": { "description": { "description": "Description of the secret.\n", @@ -122834,7 +126442,7 @@ } }, "aws:secretsmanager/secretRotation:SecretRotation": { - "description": "Provides a resource to manage AWS Secrets Manager secret rotation. To manage a secret, see the `aws.secretsmanager.Secret` resource. To manage a secret value, see the `aws.secretsmanager.SecretVersion` resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.secretsmanager.SecretRotation(\"example\", {\n secretId: aws_secretsmanager_secret.example.id,\n rotationLambdaArn: aws_lambda_function.example.arn,\n rotationRules: {\n automaticallyAfterDays: 30,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.secretsmanager.SecretRotation(\"example\",\n secret_id=aws_secretsmanager_secret[\"example\"][\"id\"],\n rotation_lambda_arn=aws_lambda_function[\"example\"][\"arn\"],\n rotation_rules=aws.secretsmanager.SecretRotationRotationRulesArgs(\n automatically_after_days=30,\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.SecretsManager.SecretRotation(\"example\", new Aws.SecretsManager.SecretRotationArgs\n {\n SecretId = aws_secretsmanager_secret.Example.Id,\n RotationLambdaArn = aws_lambda_function.Example.Arn,\n RotationRules = new Aws.SecretsManager.Inputs.SecretRotationRotationRulesArgs\n {\n AutomaticallyAfterDays = 30,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/secretsmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretsmanager.NewSecretRotation(ctx, \"example\", \u0026secretsmanager.SecretRotationArgs{\n\t\t\tSecretId: pulumi.Any(aws_secretsmanager_secret.Example.Id),\n\t\t\tRotationLambdaArn: pulumi.Any(aws_lambda_function.Example.Arn),\n\t\t\tRotationRules: \u0026secretsmanager.SecretRotationRotationRulesArgs{\n\t\t\t\tAutomaticallyAfterDays: pulumi.Int(30),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n### Rotation Configuration\n\nTo enable automatic secret rotation, the Secrets Manager service requires usage of a Lambda function. The [Rotate Secrets section in the Secrets Manager User Guide](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html) provides additional information about deploying a prebuilt Lambda functions for supported credential rotation (e.g. RDS) or deploying a custom Lambda function.\n\n\u003e **NOTE:** Configuring rotation causes the secret to rotate once as soon as you enable rotation. Before you do this, you must ensure that all of your applications that use the credentials stored in the secret are updated to retrieve the secret from AWS Secrets Manager. The old credentials might no longer be usable after the initial rotation and any applications that you fail to update will break as soon as the old credentials are no longer valid.\n\n\u003e **NOTE:** If you cancel a rotation that is in progress (by removing the `rotation` configuration), it can leave the VersionStage labels in an unexpected state. Depending on what step of the rotation was in progress, you might need to remove the staging label AWSPENDING from the partially created version, specified by the SecretVersionId response value. You should also evaluate the partially rotated new version to see if it should be deleted, which you can do by removing all staging labels from the new version's VersionStage field.\n{{% /examples %}}\n\n## Import\n\n`aws_secretsmanager_secret_rotation` can be imported by using the secret Amazon Resource Name (ARN), e.g.\n\n```sh\n $ pulumi import aws:secretsmanager/secretRotation:SecretRotation example arn:aws:secretsmanager:us-east-1:123456789012:secret:example-123456\n```\n\n ", + "description": "Provides a resource to manage AWS Secrets Manager secret rotation. To manage a secret, see the `aws.secretsmanager.Secret` resource. To manage a secret value, see the `aws.secretsmanager.SecretVersion` resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.secretsmanager.SecretRotation(\"example\", {\n secretId: aws_secretsmanager_secret.example.id,\n rotationLambdaArn: aws_lambda_function.example.arn,\n rotationRules: {\n automaticallyAfterDays: 30,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.secretsmanager.SecretRotation(\"example\",\n secret_id=aws_secretsmanager_secret[\"example\"][\"id\"],\n rotation_lambda_arn=aws_lambda_function[\"example\"][\"arn\"],\n rotation_rules=aws.secretsmanager.SecretRotationRotationRulesArgs(\n automatically_after_days=30,\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.SecretsManager.SecretRotation(\"example\", new Aws.SecretsManager.SecretRotationArgs\n {\n SecretId = aws_secretsmanager_secret.Example.Id,\n RotationLambdaArn = aws_lambda_function.Example.Arn,\n RotationRules = new Aws.SecretsManager.Inputs.SecretRotationRotationRulesArgs\n {\n AutomaticallyAfterDays = 30,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/secretsmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretsmanager.NewSecretRotation(ctx, \"example\", \u0026secretsmanager.SecretRotationArgs{\n\t\t\tSecretId: pulumi.Any(aws_secretsmanager_secret.Example.Id),\n\t\t\tRotationLambdaArn: pulumi.Any(aws_lambda_function.Example.Arn),\n\t\t\tRotationRules: \u0026secretsmanager.SecretRotationRotationRulesArgs{\n\t\t\t\tAutomaticallyAfterDays: pulumi.Int(30),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n### Rotation Configuration\n\nTo enable automatic secret rotation, the Secrets Manager service requires usage of a Lambda function. The [Rotate Secrets section in the Secrets Manager User Guide](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets_strategies.html) provides additional information about deploying a prebuilt Lambda functions for supported credential rotation (e.g. RDS) or deploying a custom Lambda function.\n\n\u003e **NOTE:** Configuring rotation causes the secret to rotate once as soon as you enable rotation. Before you do this, you must ensure that all of your applications that use the credentials stored in the secret are updated to retrieve the secret from AWS Secrets Manager. The old credentials might no longer be usable after the initial rotation and any applications that you fail to update will break as soon as the old credentials are no longer valid.\n\n\u003e **NOTE:** If you cancel a rotation that is in progress (by removing the `rotation` configuration), it can leave the VersionStage labels in an unexpected state. Depending on what step of the rotation was in progress, you might need to remove the staging label AWSPENDING from the partially created version, specified by the SecretVersionId response value. You should also evaluate the partially rotated new version to see if it should be deleted, which you can do by removing all staging labels from the new version's VersionStage field.\n{{% /examples %}}\n\n## Import\n\n`aws_secretsmanager_secret_rotation` can be imported by using the secret Amazon Resource Name (ARN), e.g.\n\n```sh\n $ pulumi import aws:secretsmanager/secretRotation:SecretRotation example arn:aws:secretsmanager:us-east-1:123456789012:secret:example-123456\n```\n\n ", "inputProperties": { "rotationLambdaArn": { "description": "Specifies the ARN of the Lambda function that can rotate the secret.\n", @@ -123156,7 +126764,7 @@ } }, "aws:securityhub/inviteAccepter:InviteAccepter": { - "description": "\u003e **Note:** AWS accounts can only be associated with a single Security Hub master account. Destroying this resource will disassociate the member account from the master account.\n\nAccepts a Security Hub invitation.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleAccount = new aws.securityhub.Account(\"exampleAccount\", {});\nconst exampleMember = new aws.securityhub.Member(\"exampleMember\", {\n accountId: \"123456789012\",\n email: \"example@example.com\",\n invite: true,\n});\nconst inviteeAccount = new aws.securityhub.Account(\"inviteeAccount\", {}, {\n provider: \"aws.invitee\",\n});\nconst inviteeInviteAccepter = new aws.securityhub.InviteAccepter(\"inviteeInviteAccepter\", {masterId: exampleMember.masterId}, {\n provider: \"aws.invitee\",\n dependsOn: [aws_securityhub_account.accepter],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_account = aws.securityhub.Account(\"exampleAccount\")\nexample_member = aws.securityhub.Member(\"exampleMember\",\n account_id=\"123456789012\",\n email=\"example@example.com\",\n invite=True)\ninvitee_account = aws.securityhub.Account(\"inviteeAccount\", opts=pulumi.ResourceOptions(provider=\"aws.invitee\"))\ninvitee_invite_accepter = aws.securityhub.InviteAccepter(\"inviteeInviteAccepter\", master_id=example_member.master_id,\nopts=pulumi.ResourceOptions(provider=\"aws.invitee\",\n depends_on=[aws_securityhub_account[\"accepter\"]]))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleAccount = new Aws.SecurityHub.Account(\"exampleAccount\", new Aws.SecurityHub.AccountArgs\n {\n });\n var exampleMember = new Aws.SecurityHub.Member(\"exampleMember\", new Aws.SecurityHub.MemberArgs\n {\n AccountId = \"123456789012\",\n Email = \"example@example.com\",\n Invite = true,\n });\n var inviteeAccount = new Aws.SecurityHub.Account(\"inviteeAccount\", new Aws.SecurityHub.AccountArgs\n {\n }, new CustomResourceOptions\n {\n Provider = \"aws.invitee\",\n });\n var inviteeInviteAccepter = new Aws.SecurityHub.InviteAccepter(\"inviteeInviteAccepter\", new Aws.SecurityHub.InviteAccepterArgs\n {\n MasterId = exampleMember.MasterId,\n }, new CustomResourceOptions\n {\n Provider = \"aws.invitee\",\n DependsOn = \n {\n aws_securityhub_account.Accepter,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/securityhub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securityhub.NewAccount(ctx, \"exampleAccount\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleMember, err := securityhub.NewMember(ctx, \"exampleMember\", \u0026securityhub.MemberArgs{\n\t\t\tAccountId: pulumi.String(\"123456789012\"),\n\t\t\tEmail: pulumi.String(\"example@example.com\"),\n\t\t\tInvite: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = securityhub.NewAccount(ctx, \"inviteeAccount\", nil, pulumi.Provider(\"aws.invitee\"))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = securityhub.NewInviteAccepter(ctx, \"inviteeInviteAccepter\", \u0026securityhub.InviteAccepterArgs{\n\t\t\tMasterId: exampleMember.MasterId,\n\t\t}, pulumi.Provider(\"aws.invitee\"), pulumi.DependsOn([]pulumi.Resource{\n\t\t\taws_securityhub_account.Accepter,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSecurity Hub invite acceptance can be imported using the account ID, e.g.\n\n```sh\n $ pulumi import aws:securityhub/inviteAccepter:InviteAccepter example 123456789012\n```\n\n ", + "description": "\u003e **Note:** AWS accounts can only be associated with a single Security Hub master account. Destroying this resource will disassociate the member account from the master account.\n\nAccepts a Security Hub invitation.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst exampleAccount = new aws.securityhub.Account(\"exampleAccount\", {});\nconst exampleMember = new aws.securityhub.Member(\"exampleMember\", {\n accountId: \"123456789012\",\n email: \"example@example.com\",\n invite: true,\n});\nconst inviteeAccount = new aws.securityhub.Account(\"inviteeAccount\", {}, {\n provider: \"aws.invitee\",\n});\nconst inviteeInviteAccepter = new aws.securityhub.InviteAccepter(\"inviteeInviteAccepter\", {masterId: exampleMember.masterId}, {\n provider: \"aws.invitee\",\n dependsOn: [inviteeAccount],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample_account = aws.securityhub.Account(\"exampleAccount\")\nexample_member = aws.securityhub.Member(\"exampleMember\",\n account_id=\"123456789012\",\n email=\"example@example.com\",\n invite=True)\ninvitee_account = aws.securityhub.Account(\"inviteeAccount\", opts=pulumi.ResourceOptions(provider=\"aws.invitee\"))\ninvitee_invite_accepter = aws.securityhub.InviteAccepter(\"inviteeInviteAccepter\", master_id=example_member.master_id,\nopts=pulumi.ResourceOptions(provider=\"aws.invitee\",\n depends_on=[invitee_account]))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleAccount = new Aws.SecurityHub.Account(\"exampleAccount\", new Aws.SecurityHub.AccountArgs\n {\n });\n var exampleMember = new Aws.SecurityHub.Member(\"exampleMember\", new Aws.SecurityHub.MemberArgs\n {\n AccountId = \"123456789012\",\n Email = \"example@example.com\",\n Invite = true,\n });\n var inviteeAccount = new Aws.SecurityHub.Account(\"inviteeAccount\", new Aws.SecurityHub.AccountArgs\n {\n }, new CustomResourceOptions\n {\n Provider = \"aws.invitee\",\n });\n var inviteeInviteAccepter = new Aws.SecurityHub.InviteAccepter(\"inviteeInviteAccepter\", new Aws.SecurityHub.InviteAccepterArgs\n {\n MasterId = exampleMember.MasterId,\n }, new CustomResourceOptions\n {\n Provider = \"aws.invitee\",\n DependsOn = \n {\n inviteeAccount,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/securityhub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securityhub.NewAccount(ctx, \"exampleAccount\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleMember, err := securityhub.NewMember(ctx, \"exampleMember\", \u0026securityhub.MemberArgs{\n\t\t\tAccountId: pulumi.String(\"123456789012\"),\n\t\t\tEmail: pulumi.String(\"example@example.com\"),\n\t\t\tInvite: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinviteeAccount, err := securityhub.NewAccount(ctx, \"inviteeAccount\", nil, pulumi.Provider(\"aws.invitee\"))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = securityhub.NewInviteAccepter(ctx, \"inviteeInviteAccepter\", \u0026securityhub.InviteAccepterArgs{\n\t\t\tMasterId: exampleMember.MasterId,\n\t\t}, pulumi.Provider(\"aws.invitee\"), pulumi.DependsOn([]pulumi.Resource{\n\t\t\tinviteeAccount,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSecurity Hub invite acceptance can be imported using the account ID, e.g.\n\n```sh\n $ pulumi import aws:securityhub/inviteAccepter:InviteAccepter example 123456789012\n```\n\n ", "inputProperties": { "masterId": { "description": "The account ID of the master Security Hub account whose invitation you're accepting.\n", @@ -129174,7 +132782,7 @@ } }, "aws:ssm/association:Association": { - "description": "Associates an SSM Document to an instance or EC2 tag.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.ssm.Association(\"example\", {targets: [{\n key: \"InstanceIds\",\n values: [aws_instance.example.id],\n}]});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.ssm.Association(\"example\", targets=[aws.ssm.AssociationTargetArgs(\n key=\"InstanceIds\",\n values=[aws_instance[\"example\"][\"id\"]],\n)])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Ssm.Association(\"example\", new Aws.Ssm.AssociationArgs\n {\n Targets = \n {\n new Aws.Ssm.Inputs.AssociationTargetArgs\n {\n Key = \"InstanceIds\",\n Values = \n {\n aws_instance.Example.Id,\n },\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ssm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ssm.NewAssociation(ctx, \"example\", \u0026ssm.AssociationArgs{\n\t\t\tTargets: ssm.AssociationTargetArray{\n\t\t\t\t\u0026ssm.AssociationTargetArgs{\n\t\t\t\t\tKey: pulumi.String(\"InstanceIds\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.Any(aws_instance.Example.Id),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSSM associations can be imported using the `association_id`, e.g.\n\n```sh\n $ pulumi import aws:ssm/association:Association test-association 10abcdef-0abc-1234-5678-90abcdef123456\n```\n\n ", + "description": "Associates an SSM Document to an instance or EC2 tag.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Create an association for a specific instance\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.ssm.Association(\"example\", {targets: [{\n key: \"InstanceIds\",\n values: [aws_instance.example.id],\n}]});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.ssm.Association(\"example\", targets=[aws.ssm.AssociationTargetArgs(\n key=\"InstanceIds\",\n values=[aws_instance[\"example\"][\"id\"]],\n)])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Ssm.Association(\"example\", new Aws.Ssm.AssociationArgs\n {\n Targets = \n {\n new Aws.Ssm.Inputs.AssociationTargetArgs\n {\n Key = \"InstanceIds\",\n Values = \n {\n aws_instance.Example.Id,\n },\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ssm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ssm.NewAssociation(ctx, \"example\", \u0026ssm.AssociationArgs{\n\t\t\tTargets: ssm.AssociationTargetArray{\n\t\t\t\t\u0026ssm.AssociationTargetArgs{\n\t\t\t\t\tKey: pulumi.String(\"InstanceIds\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.Any(aws_instance.Example.Id),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Create an association for all managed instances in an AWS account\n\nTo target all managed instances in an AWS account, set the `key` as `\"InstanceIds\"` with `values` set as `[\"*\"]`. This example also illustrates how to use an Amazon owned SSM document named `AmazonCloudWatch-ManageAgent`.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.ssm.Association(\"example\", {\n targets: [{\n key: \"InstanceIds\",\n values: [\"*\"],\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.ssm.Association(\"example\", targets=[aws.ssm.AssociationTargetArgs(\n key=\"InstanceIds\",\n values=[\"*\"],\n)])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Ssm.Association(\"example\", new Aws.Ssm.AssociationArgs\n {\n Targets = \n {\n new Aws.Ssm.Inputs.AssociationTargetArgs\n {\n Key = \"InstanceIds\",\n Values = \n {\n \"*\",\n },\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ssm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ssm.NewAssociation(ctx, \"example\", \u0026ssm.AssociationArgs{\n\t\t\tTargets: ssm.AssociationTargetArray{\n\t\t\t\t\u0026ssm.AssociationTargetArgs{\n\t\t\t\t\tKey: pulumi.String(\"InstanceIds\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"*\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Create an association for a specific tag\n\nThis example shows how to target all managed instances that are assigned a tag key of `Environment` and value of `Development`.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.ssm.Association(\"example\", {\n targets: [{\n key: \"tag:Environment\",\n values: [\"Development\"],\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.ssm.Association(\"example\", targets=[aws.ssm.AssociationTargetArgs(\n key=\"tag:Environment\",\n values=[\"Development\"],\n)])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.Ssm.Association(\"example\", new Aws.Ssm.AssociationArgs\n {\n Targets = \n {\n new Aws.Ssm.Inputs.AssociationTargetArgs\n {\n Key = \"tag:Environment\",\n Values = \n {\n \"Development\",\n },\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ssm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ssm.NewAssociation(ctx, \"example\", \u0026ssm.AssociationArgs{\n\t\t\tTargets: ssm.AssociationTargetArray{\n\t\t\t\t\u0026ssm.AssociationTargetArgs{\n\t\t\t\t\tKey: pulumi.String(\"tag:Environment\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"Development\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSSM associations can be imported using the `association_id`, e.g.\n\n```sh\n $ pulumi import aws:ssm/association:Association test-association 10abcdef-0abc-1234-5678-90abcdef123456\n```\n\n ", "inputProperties": { "applyOnlyAtCronInterval": { "description": "By default, when you create a new or update associations, the system runs it immediately and then according to the schedule you specified. Enable this option if you do not want an association to run immediately after you create or update it. This parameter is not supported for rate expressions. Default: `false`.\n", @@ -129185,7 +132793,7 @@ "type": "string" }, "automationTargetParameterName": { - "description": "Specify the target for the association. This target is required for associations that use an `Automation` document and target resources by using rate controls.\n", + "description": "Specify the target for the association. This target is required for associations that use an `Automation` document and target resources by using rate controls. This should be set to the SSM document `parameter` that will define how your automation will branch out.\n", "type": "string" }, "complianceSeverity": { @@ -129249,7 +132857,7 @@ "type": "string" }, "automationTargetParameterName": { - "description": "Specify the target for the association. This target is required for associations that use an `Automation` document and target resources by using rate controls.\n", + "description": "Specify the target for the association. This target is required for associations that use an `Automation` document and target resources by using rate controls. This should be set to the SSM document `parameter` that will define how your automation will branch out.\n", "type": "string" }, "complianceSeverity": { @@ -129322,7 +132930,7 @@ "type": "string" }, "automationTargetParameterName": { - "description": "Specify the target for the association. This target is required for associations that use an `Automation` document and target resources by using rate controls.\n", + "description": "Specify the target for the association. This target is required for associations that use an `Automation` document and target resources by using rate controls. This should be set to the SSM document `parameter` that will define how your automation will branch out.\n", "type": "string" }, "complianceSeverity": { @@ -129376,7 +132984,7 @@ } }, "aws:ssm/document:Document": { - "description": "Provides an SSM Document resource\n\n\u003e **NOTE on updating SSM documents:** Only documents with a schema version of 2.0\nor greater can update their content once created, see [SSM Schema Features](http://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-ssm-docs.html#document-schemas-features). To update a document with an older\nschema version you must recreate the resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst foo = new aws.ssm.Document(\"foo\", {\n content: ` {\n \"schemaVersion\": \"1.2\",\n \"description\": \"Check ip configuration of a Linux instance.\",\n \"parameters\": {\n\n },\n \"runtimeConfig\": {\n \"aws:runShellScript\": {\n \"properties\": [\n {\n \"id\": \"0.aws:runShellScript\",\n \"runCommand\": [\"ifconfig\"]\n }\n ]\n }\n }\n }\n`,\n documentType: \"Command\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nfoo = aws.ssm.Document(\"foo\",\n content=\"\"\" {\n \"schemaVersion\": \"1.2\",\n \"description\": \"Check ip configuration of a Linux instance.\",\n \"parameters\": {\n\n },\n \"runtimeConfig\": {\n \"aws:runShellScript\": {\n \"properties\": [\n {\n \"id\": \"0.aws:runShellScript\",\n \"runCommand\": [\"ifconfig\"]\n }\n ]\n }\n }\n }\n\n\"\"\",\n document_type=\"Command\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var foo = new Aws.Ssm.Document(\"foo\", new Aws.Ssm.DocumentArgs\n {\n Content = @\" {\n \"\"schemaVersion\"\": \"\"1.2\"\",\n \"\"description\"\": \"\"Check ip configuration of a Linux instance.\"\",\n \"\"parameters\"\": {\n\n },\n \"\"runtimeConfig\"\": {\n \"\"aws:runShellScript\"\": {\n \"\"properties\"\": [\n {\n \"\"id\"\": \"\"0.aws:runShellScript\"\",\n \"\"runCommand\"\": [\"\"ifconfig\"\"]\n }\n ]\n }\n }\n }\n\n\",\n DocumentType = \"Command\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ssm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ssm.NewDocument(ctx, \"foo\", \u0026ssm.DocumentArgs{\n\t\t\tContent: pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \" {\\n\", \" \\\"schemaVersion\\\": \\\"1.2\\\",\\n\", \" \\\"description\\\": \\\"Check ip configuration of a Linux instance.\\\",\\n\", \" \\\"parameters\\\": {\\n\", \"\\n\", \" },\\n\", \" \\\"runtimeConfig\\\": {\\n\", \" \\\"aws:runShellScript\\\": {\\n\", \" \\\"properties\\\": [\\n\", \" {\\n\", \" \\\"id\\\": \\\"0.aws:runShellScript\\\",\\n\", \" \\\"runCommand\\\": [\\\"ifconfig\\\"]\\n\", \" }\\n\", \" ]\\n\", \" }\\n\", \" }\\n\", \" }\\n\", \"\\n\")),\n\t\t\tDocumentType: pulumi.String(\"Command\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n## Permissions\n\nThe permissions attribute specifies how you want to share the document. If you share a document privately,\nyou must specify the AWS user account IDs for those people who can use the document. If you share a document\npublicly, you must specify All as the account ID.\n\nThe permissions mapping supports the following:\n\n* `type` - The permission type for the document. The permission type can be `Share`.\n* `account_ids` - The AWS user accounts that should have access to the document. The account IDs can either be a group of account IDs or `All`.\n\n\n## Import\n\nSSM Documents can be imported using the name, e.g.\n\n```sh\n $ pulumi import aws:ssm/document:Document example example\n```\n\n The `attachments_source` argument does not have an SSM API method for reading the attachment information detail after creation. If the argument is set in the provider configuration on an imported resource, this provider will always show a difference. To workaround this behavior, either omit the argument from the configuration or use [`ignoreChanges`](https://www.pulumi.com/docs/intro/concepts/programming-model/#ignorechanges) to hide the difference, e.g. terraform resource \"aws_ssm_document\" \"test\" {\n\n name\n\n\n\n\n\n\n\n\n\n= \"test_document\"\n\n document_type = \"Package\"\n\n attachments_source {\n\n\n\n key\n\n\n\n= \"SourceUrl\"\n\n\n\n values = [\"s3://${aws_s3_bucket.object_bucket.bucket}/test.zip\"]\n\n }\n\n # There is no AWS SSM API for reading attachments_source info directly\n\n lifecycle {\n\n\n\n ignore_changes = [attachments_source]\n\n } } ", + "description": "Provides an SSM Document resource\n\n\u003e **NOTE on updating SSM documents:** Only documents with a schema version of 2.0\nor greater can update their content once created, see [SSM Schema Features](http://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-ssm-docs.html#document-schemas-features). To update a document with an older schema version you must recreate the resource. Not all document types support a schema version of 2.0 or greater. Refer to [SSM document schema features and examples](https://docs.aws.amazon.com/systems-manager/latest/userguide/document-schemas-features.html) for information about which schema versions are supported for the respective `document_type`.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Create an ssm document in JSON format\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst foo = new aws.ssm.Document(\"foo\", {\n content: ` {\n \"schemaVersion\": \"1.2\",\n \"description\": \"Check ip configuration of a Linux instance.\",\n \"parameters\": {\n\n },\n \"runtimeConfig\": {\n \"aws:runShellScript\": {\n \"properties\": [\n {\n \"id\": \"0.aws:runShellScript\",\n \"runCommand\": [\"ifconfig\"]\n }\n ]\n }\n }\n }\n`,\n documentType: \"Command\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nfoo = aws.ssm.Document(\"foo\",\n content=\"\"\" {\n \"schemaVersion\": \"1.2\",\n \"description\": \"Check ip configuration of a Linux instance.\",\n \"parameters\": {\n\n },\n \"runtimeConfig\": {\n \"aws:runShellScript\": {\n \"properties\": [\n {\n \"id\": \"0.aws:runShellScript\",\n \"runCommand\": [\"ifconfig\"]\n }\n ]\n }\n }\n }\n\n\"\"\",\n document_type=\"Command\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var foo = new Aws.Ssm.Document(\"foo\", new Aws.Ssm.DocumentArgs\n {\n Content = @\" {\n \"\"schemaVersion\"\": \"\"1.2\"\",\n \"\"description\"\": \"\"Check ip configuration of a Linux instance.\"\",\n \"\"parameters\"\": {\n\n },\n \"\"runtimeConfig\"\": {\n \"\"aws:runShellScript\"\": {\n \"\"properties\"\": [\n {\n \"\"id\"\": \"\"0.aws:runShellScript\"\",\n \"\"runCommand\"\": [\"\"ifconfig\"\"]\n }\n ]\n }\n }\n }\n\n\",\n DocumentType = \"Command\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ssm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ssm.NewDocument(ctx, \"foo\", \u0026ssm.DocumentArgs{\n\t\t\tContent: pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v%v\", \" {\\n\", \" \\\"schemaVersion\\\": \\\"1.2\\\",\\n\", \" \\\"description\\\": \\\"Check ip configuration of a Linux instance.\\\",\\n\", \" \\\"parameters\\\": {\\n\", \"\\n\", \" },\\n\", \" \\\"runtimeConfig\\\": {\\n\", \" \\\"aws:runShellScript\\\": {\\n\", \" \\\"properties\\\": [\\n\", \" {\\n\", \" \\\"id\\\": \\\"0.aws:runShellScript\\\",\\n\", \" \\\"runCommand\\\": [\\\"ifconfig\\\"]\\n\", \" }\\n\", \" ]\\n\", \" }\\n\", \" }\\n\", \" }\\n\", \"\\n\")),\n\t\t\tDocumentType: pulumi.String(\"Command\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### Create an ssm document in YAML format\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst foo = new aws.ssm.Document(\"foo\", {\n content: `schemaVersion: '1.2'\ndescription: Check ip configuration of a Linux instance.\nparameters: {}\nruntimeConfig:\n 'aws:runShellScript':\n properties:\n - id: '0.aws:runShellScript'\n runCommand:\n - ifconfig\n`,\n documentFormat: \"YAML\",\n documentType: \"Command\",\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nfoo = aws.ssm.Document(\"foo\",\n content=\"\"\"schemaVersion: '1.2'\ndescription: Check ip configuration of a Linux instance.\nparameters: {}\nruntimeConfig:\n 'aws:runShellScript':\n properties:\n - id: '0.aws:runShellScript'\n runCommand:\n - ifconfig\n\n\"\"\",\n document_format=\"YAML\",\n document_type=\"Command\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var foo = new Aws.Ssm.Document(\"foo\", new Aws.Ssm.DocumentArgs\n {\n Content = @\"schemaVersion: '1.2'\ndescription: Check ip configuration of a Linux instance.\nparameters: {}\nruntimeConfig:\n 'aws:runShellScript':\n properties:\n - id: '0.aws:runShellScript'\n runCommand:\n - ifconfig\n\n\",\n DocumentFormat = \"YAML\",\n DocumentType = \"Command\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ssm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ssm.NewDocument(ctx, \"foo\", \u0026ssm.DocumentArgs{\n\t\t\tContent: pulumi.String(fmt.Sprintf(\"%v%v%v%v%v%v%v%v%v%v\", \"schemaVersion: '1.2'\\n\", \"description: Check ip configuration of a Linux instance.\\n\", \"parameters: {}\\n\", \"runtimeConfig:\\n\", \" 'aws:runShellScript':\\n\", \" properties:\\n\", \" - id: '0.aws:runShellScript'\\n\", \" runCommand:\\n\", \" - ifconfig\\n\", \"\\n\")),\n\t\t\tDocumentFormat: pulumi.String(\"YAML\"),\n\t\t\tDocumentType: pulumi.String(\"Command\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n## Permissions\n\nThe permissions attribute specifies how you want to share the document. If you share a document privately,\nyou must specify the AWS user account IDs for those people who can use the document. If you share a document\npublicly, you must specify All as the account ID.\n\nThe permissions mapping supports the following:\n\n* `type` - The permission type for the document. The permission type can be `Share`.\n* `account_ids` - The AWS user accounts that should have access to the document. The account IDs can either be a group of account IDs or `All`.\n\n\n## Import\n\nSSM Documents can be imported using the name, e.g.\n\n```sh\n $ pulumi import aws:ssm/document:Document example example\n```\n\n The `attachments_source` argument does not have an SSM API method for reading the attachment information detail after creation. If the argument is set in the provider configuration on an imported resource, this provider will always show a difference. To workaround this behavior, either omit the argument from the configuration or use [`ignoreChanges`](https://www.pulumi.com/docs/intro/concepts/programming-model/#ignorechanges) to hide the difference, e.g. terraform resource \"aws_ssm_document\" \"test\" {\n\n name\n\n\n\n\n\n\n\n\n\n= \"test_document\"\n\n document_type = \"Package\"\n\n attachments_source {\n\n\n\n key\n\n\n\n= \"SourceUrl\"\n\n\n\n values = [\"s3://${aws_s3_bucket.object_bucket.bucket}/test.zip\"]\n\n }\n\n # There is no AWS SSM API for reading attachments_source info directly\n\n lifecycle {\n\n\n\n ignore_changes = [attachments_source]\n\n } } ", "inputProperties": { "attachmentsSources": { "description": "One or more configuration blocks describing attachments sources to a version of a document. Defined below.\n", @@ -135909,7 +139517,7 @@ } }, "aws:wafregional/webAclAssociation:WebAclAssociation": { - "description": "Manages an association with WAF Regional Web ACL.\n\n\u003e **Note:** An Application Load Balancer can only be associated with one WAF Regional WebACL.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Application Load Balancer Association\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst ipset = new aws.wafregional.IpSet(\"ipset\", {ipSetDescriptors: [{\n type: \"IPV4\",\n value: \"192.0.7.0/24\",\n}]});\nconst fooRule = new aws.wafregional.Rule(\"fooRule\", {\n metricName: \"tfWAFRule\",\n predicates: [{\n dataId: ipset.id,\n negated: false,\n type: \"IPMatch\",\n }],\n});\nconst fooWebAcl = new aws.wafregional.WebAcl(\"fooWebAcl\", {\n metricName: \"foo\",\n defaultAction: {\n type: \"ALLOW\",\n },\n rules: [{\n action: {\n type: \"BLOCK\",\n },\n priority: 1,\n ruleId: fooRule.id,\n }],\n});\nconst fooVpc = new aws.ec2.Vpc(\"fooVpc\", {cidrBlock: \"10.1.0.0/16\"});\nconst available = aws.getAvailabilityZones({});\nconst fooSubnet = new aws.ec2.Subnet(\"fooSubnet\", {\n vpcId: fooVpc.id,\n cidrBlock: \"10.1.1.0/24\",\n availabilityZone: available.then(available =\u003e available.names?[0]),\n});\nconst bar = new aws.ec2.Subnet(\"bar\", {\n vpcId: fooVpc.id,\n cidrBlock: \"10.1.2.0/24\",\n availabilityZone: available.then(available =\u003e available.names?[1]),\n});\nconst fooLoadBalancer = new aws.alb.LoadBalancer(\"fooLoadBalancer\", {\n internal: true,\n subnets: [\n fooSubnet.id,\n bar.id,\n ],\n});\nconst fooWebAclAssociation = new aws.wafregional.WebAclAssociation(\"fooWebAclAssociation\", {\n resourceArn: fooLoadBalancer.arn,\n webAclId: fooWebAcl.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nipset = aws.wafregional.IpSet(\"ipset\", ip_set_descriptors=[aws.wafregional.IpSetIpSetDescriptorArgs(\n type=\"IPV4\",\n value=\"192.0.7.0/24\",\n)])\nfoo_rule = aws.wafregional.Rule(\"fooRule\",\n metric_name=\"tfWAFRule\",\n predicates=[aws.wafregional.RulePredicateArgs(\n data_id=ipset.id,\n negated=False,\n type=\"IPMatch\",\n )])\nfoo_web_acl = aws.wafregional.WebAcl(\"fooWebAcl\",\n metric_name=\"foo\",\n default_action=aws.wafregional.WebAclDefaultActionArgs(\n type=\"ALLOW\",\n ),\n rules=[aws.wafregional.WebAclRuleArgs(\n action=aws.wafregional.WebAclRuleActionArgs(\n type=\"BLOCK\",\n ),\n priority=1,\n rule_id=foo_rule.id,\n )])\nfoo_vpc = aws.ec2.Vpc(\"fooVpc\", cidr_block=\"10.1.0.0/16\")\navailable = aws.get_availability_zones()\nfoo_subnet = aws.ec2.Subnet(\"fooSubnet\",\n vpc_id=foo_vpc.id,\n cidr_block=\"10.1.1.0/24\",\n availability_zone=available.names[0])\nbar = aws.ec2.Subnet(\"bar\",\n vpc_id=foo_vpc.id,\n cidr_block=\"10.1.2.0/24\",\n availability_zone=available.names[1])\nfoo_load_balancer = aws.alb.LoadBalancer(\"fooLoadBalancer\",\n internal=True,\n subnets=[\n foo_subnet.id,\n bar.id,\n ])\nfoo_web_acl_association = aws.wafregional.WebAclAssociation(\"fooWebAclAssociation\",\n resource_arn=foo_load_balancer.arn,\n web_acl_id=foo_web_acl.id)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var ipset = new Aws.WafRegional.IpSet(\"ipset\", new Aws.WafRegional.IpSetArgs\n {\n IpSetDescriptors = \n {\n new Aws.WafRegional.Inputs.IpSetIpSetDescriptorArgs\n {\n Type = \"IPV4\",\n Value = \"192.0.7.0/24\",\n },\n },\n });\n var fooRule = new Aws.WafRegional.Rule(\"fooRule\", new Aws.WafRegional.RuleArgs\n {\n MetricName = \"tfWAFRule\",\n Predicates = \n {\n new Aws.WafRegional.Inputs.RulePredicateArgs\n {\n DataId = ipset.Id,\n Negated = false,\n Type = \"IPMatch\",\n },\n },\n });\n var fooWebAcl = new Aws.WafRegional.WebAcl(\"fooWebAcl\", new Aws.WafRegional.WebAclArgs\n {\n MetricName = \"foo\",\n DefaultAction = new Aws.WafRegional.Inputs.WebAclDefaultActionArgs\n {\n Type = \"ALLOW\",\n },\n Rules = \n {\n new Aws.WafRegional.Inputs.WebAclRuleArgs\n {\n Action = new Aws.WafRegional.Inputs.WebAclRuleActionArgs\n {\n Type = \"BLOCK\",\n },\n Priority = 1,\n RuleId = fooRule.Id,\n },\n },\n });\n var fooVpc = new Aws.Ec2.Vpc(\"fooVpc\", new Aws.Ec2.VpcArgs\n {\n CidrBlock = \"10.1.0.0/16\",\n });\n var available = Output.Create(Aws.GetAvailabilityZones.InvokeAsync());\n var fooSubnet = new Aws.Ec2.Subnet(\"fooSubnet\", new Aws.Ec2.SubnetArgs\n {\n VpcId = fooVpc.Id,\n CidrBlock = \"10.1.1.0/24\",\n AvailabilityZone = available.Apply(available =\u003e available.Names?[0]),\n });\n var bar = new Aws.Ec2.Subnet(\"bar\", new Aws.Ec2.SubnetArgs\n {\n VpcId = fooVpc.Id,\n CidrBlock = \"10.1.2.0/24\",\n AvailabilityZone = available.Apply(available =\u003e available.Names?[1]),\n });\n var fooLoadBalancer = new Aws.Alb.LoadBalancer(\"fooLoadBalancer\", new Aws.Alb.LoadBalancerArgs\n {\n Internal = true,\n Subnets = \n {\n fooSubnet.Id,\n bar.Id,\n },\n });\n var fooWebAclAssociation = new Aws.WafRegional.WebAclAssociation(\"fooWebAclAssociation\", new Aws.WafRegional.WebAclAssociationArgs\n {\n ResourceArn = fooLoadBalancer.Arn,\n WebAclId = fooWebAcl.Id,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/alb\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/wafregional\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tipset, err := wafregional.NewIpSet(ctx, \"ipset\", \u0026wafregional.IpSetArgs{\n\t\t\tIpSetDescriptors: wafregional.IpSetIpSetDescriptorArray{\n\t\t\t\t\u0026wafregional.IpSetIpSetDescriptorArgs{\n\t\t\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\t\t\tValue: pulumi.String(\"192.0.7.0/24\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfooRule, err := wafregional.NewRule(ctx, \"fooRule\", \u0026wafregional.RuleArgs{\n\t\t\tMetricName: pulumi.String(\"tfWAFRule\"),\n\t\t\tPredicates: wafregional.RulePredicateArray{\n\t\t\t\t\u0026wafregional.RulePredicateArgs{\n\t\t\t\t\tDataId: ipset.ID(),\n\t\t\t\t\tNegated: pulumi.Bool(false),\n\t\t\t\t\tType: pulumi.String(\"IPMatch\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfooWebAcl, err := wafregional.NewWebAcl(ctx, \"fooWebAcl\", \u0026wafregional.WebAclArgs{\n\t\t\tMetricName: pulumi.String(\"foo\"),\n\t\t\tDefaultAction: \u0026wafregional.WebAclDefaultActionArgs{\n\t\t\t\tType: pulumi.String(\"ALLOW\"),\n\t\t\t},\n\t\t\tRules: wafregional.WebAclRuleArray{\n\t\t\t\t\u0026wafregional.WebAclRuleArgs{\n\t\t\t\t\tAction: \u0026wafregional.WebAclRuleActionArgs{\n\t\t\t\t\t\tType: pulumi.String(\"BLOCK\"),\n\t\t\t\t\t},\n\t\t\t\t\tPriority: pulumi.Int(1),\n\t\t\t\t\tRuleId: fooRule.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfooVpc, err := ec2.NewVpc(ctx, \"fooVpc\", \u0026ec2.VpcArgs{\n\t\t\tCidrBlock: pulumi.String(\"10.1.0.0/16\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tavailable, err := aws.GetAvailabilityZones(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfooSubnet, err := ec2.NewSubnet(ctx, \"fooSubnet\", \u0026ec2.SubnetArgs{\n\t\t\tVpcId: fooVpc.ID(),\n\t\t\tCidrBlock: pulumi.String(\"10.1.1.0/24\"),\n\t\t\tAvailabilityZone: pulumi.String(available.Names[0]),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbar, err := ec2.NewSubnet(ctx, \"bar\", \u0026ec2.SubnetArgs{\n\t\t\tVpcId: fooVpc.ID(),\n\t\t\tCidrBlock: pulumi.String(\"10.1.2.0/24\"),\n\t\t\tAvailabilityZone: pulumi.String(available.Names[1]),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfooLoadBalancer, err := alb.NewLoadBalancer(ctx, \"fooLoadBalancer\", \u0026alb.LoadBalancerArgs{\n\t\t\tInternal: pulumi.Bool(true),\n\t\t\tSubnets: pulumi.StringArray{\n\t\t\t\tfooSubnet.ID(),\n\t\t\t\tbar.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = wafregional.NewWebAclAssociation(ctx, \"fooWebAclAssociation\", \u0026wafregional.WebAclAssociationArgs{\n\t\t\tResourceArn: fooLoadBalancer.Arn,\n\t\t\tWebAclId: fooWebAcl.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nWAF Regional Web ACL Association can be imported using their `web_acl_id:resource_arn`, e.g.\n\n```sh\n $ pulumi import aws:wafregional/webAclAssociation:WebAclAssociation foo web_acl_id:resource_arn\n```\n\n ", + "description": "Manages an association with WAF Regional Web ACL.\n\n\u003e **Note:** An Application Load Balancer can only be associated with one WAF Regional WebACL.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Application Load Balancer Association\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst ipset = new aws.wafregional.IpSet(\"ipset\", {ipSetDescriptors: [{\n type: \"IPV4\",\n value: \"192.0.7.0/24\",\n}]});\nconst fooRule = new aws.wafregional.Rule(\"fooRule\", {\n metricName: \"tfWAFRule\",\n predicates: [{\n dataId: ipset.id,\n negated: false,\n type: \"IPMatch\",\n }],\n});\nconst fooWebAcl = new aws.wafregional.WebAcl(\"fooWebAcl\", {\n metricName: \"foo\",\n defaultAction: {\n type: \"ALLOW\",\n },\n rules: [{\n action: {\n type: \"BLOCK\",\n },\n priority: 1,\n ruleId: fooRule.id,\n }],\n});\nconst fooVpc = new aws.ec2.Vpc(\"fooVpc\", {cidrBlock: \"10.1.0.0/16\"});\nconst available = aws.getAvailabilityZones({});\nconst fooSubnet = new aws.ec2.Subnet(\"fooSubnet\", {\n vpcId: fooVpc.id,\n cidrBlock: \"10.1.1.0/24\",\n availabilityZone: available.then(available =\u003e available.names?[0]),\n});\nconst bar = new aws.ec2.Subnet(\"bar\", {\n vpcId: fooVpc.id,\n cidrBlock: \"10.1.2.0/24\",\n availabilityZone: available.then(available =\u003e available.names?[1]),\n});\nconst fooLoadBalancer = new aws.alb.LoadBalancer(\"fooLoadBalancer\", {\n internal: true,\n subnets: [\n fooSubnet.id,\n bar.id,\n ],\n});\nconst fooWebAclAssociation = new aws.wafregional.WebAclAssociation(\"fooWebAclAssociation\", {\n resourceArn: fooLoadBalancer.arn,\n webAclId: fooWebAcl.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nipset = aws.wafregional.IpSet(\"ipset\", ip_set_descriptors=[aws.wafregional.IpSetIpSetDescriptorArgs(\n type=\"IPV4\",\n value=\"192.0.7.0/24\",\n)])\nfoo_rule = aws.wafregional.Rule(\"fooRule\",\n metric_name=\"tfWAFRule\",\n predicates=[aws.wafregional.RulePredicateArgs(\n data_id=ipset.id,\n negated=False,\n type=\"IPMatch\",\n )])\nfoo_web_acl = aws.wafregional.WebAcl(\"fooWebAcl\",\n metric_name=\"foo\",\n default_action=aws.wafregional.WebAclDefaultActionArgs(\n type=\"ALLOW\",\n ),\n rules=[aws.wafregional.WebAclRuleArgs(\n action=aws.wafregional.WebAclRuleActionArgs(\n type=\"BLOCK\",\n ),\n priority=1,\n rule_id=foo_rule.id,\n )])\nfoo_vpc = aws.ec2.Vpc(\"fooVpc\", cidr_block=\"10.1.0.0/16\")\navailable = aws.get_availability_zones()\nfoo_subnet = aws.ec2.Subnet(\"fooSubnet\",\n vpc_id=foo_vpc.id,\n cidr_block=\"10.1.1.0/24\",\n availability_zone=available.names[0])\nbar = aws.ec2.Subnet(\"bar\",\n vpc_id=foo_vpc.id,\n cidr_block=\"10.1.2.0/24\",\n availability_zone=available.names[1])\nfoo_load_balancer = aws.alb.LoadBalancer(\"fooLoadBalancer\",\n internal=True,\n subnets=[\n foo_subnet.id,\n bar.id,\n ])\nfoo_web_acl_association = aws.wafregional.WebAclAssociation(\"fooWebAclAssociation\",\n resource_arn=foo_load_balancer.arn,\n web_acl_id=foo_web_acl.id)\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var ipset = new Aws.WafRegional.IpSet(\"ipset\", new Aws.WafRegional.IpSetArgs\n {\n IpSetDescriptors = \n {\n new Aws.WafRegional.Inputs.IpSetIpSetDescriptorArgs\n {\n Type = \"IPV4\",\n Value = \"192.0.7.0/24\",\n },\n },\n });\n var fooRule = new Aws.WafRegional.Rule(\"fooRule\", new Aws.WafRegional.RuleArgs\n {\n MetricName = \"tfWAFRule\",\n Predicates = \n {\n new Aws.WafRegional.Inputs.RulePredicateArgs\n {\n DataId = ipset.Id,\n Negated = false,\n Type = \"IPMatch\",\n },\n },\n });\n var fooWebAcl = new Aws.WafRegional.WebAcl(\"fooWebAcl\", new Aws.WafRegional.WebAclArgs\n {\n MetricName = \"foo\",\n DefaultAction = new Aws.WafRegional.Inputs.WebAclDefaultActionArgs\n {\n Type = \"ALLOW\",\n },\n Rules = \n {\n new Aws.WafRegional.Inputs.WebAclRuleArgs\n {\n Action = new Aws.WafRegional.Inputs.WebAclRuleActionArgs\n {\n Type = \"BLOCK\",\n },\n Priority = 1,\n RuleId = fooRule.Id,\n },\n },\n });\n var fooVpc = new Aws.Ec2.Vpc(\"fooVpc\", new Aws.Ec2.VpcArgs\n {\n CidrBlock = \"10.1.0.0/16\",\n });\n var available = Output.Create(Aws.GetAvailabilityZones.InvokeAsync());\n var fooSubnet = new Aws.Ec2.Subnet(\"fooSubnet\", new Aws.Ec2.SubnetArgs\n {\n VpcId = fooVpc.Id,\n CidrBlock = \"10.1.1.0/24\",\n AvailabilityZone = available.Apply(available =\u003e available.Names?[0]),\n });\n var bar = new Aws.Ec2.Subnet(\"bar\", new Aws.Ec2.SubnetArgs\n {\n VpcId = fooVpc.Id,\n CidrBlock = \"10.1.2.0/24\",\n AvailabilityZone = available.Apply(available =\u003e available.Names?[1]),\n });\n var fooLoadBalancer = new Aws.Alb.LoadBalancer(\"fooLoadBalancer\", new Aws.Alb.LoadBalancerArgs\n {\n Internal = true,\n Subnets = \n {\n fooSubnet.Id,\n bar.Id,\n },\n });\n var fooWebAclAssociation = new Aws.WafRegional.WebAclAssociation(\"fooWebAclAssociation\", new Aws.WafRegional.WebAclAssociationArgs\n {\n ResourceArn = fooLoadBalancer.Arn,\n WebAclId = fooWebAcl.Id,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/alb\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/wafregional\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tipset, err := wafregional.NewIpSet(ctx, \"ipset\", \u0026wafregional.IpSetArgs{\n\t\t\tIpSetDescriptors: wafregional.IpSetIpSetDescriptorArray{\n\t\t\t\t\u0026wafregional.IpSetIpSetDescriptorArgs{\n\t\t\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\t\t\tValue: pulumi.String(\"192.0.7.0/24\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfooRule, err := wafregional.NewRule(ctx, \"fooRule\", \u0026wafregional.RuleArgs{\n\t\t\tMetricName: pulumi.String(\"tfWAFRule\"),\n\t\t\tPredicates: wafregional.RulePredicateArray{\n\t\t\t\t\u0026wafregional.RulePredicateArgs{\n\t\t\t\t\tDataId: ipset.ID(),\n\t\t\t\t\tNegated: pulumi.Bool(false),\n\t\t\t\t\tType: pulumi.String(\"IPMatch\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfooWebAcl, err := wafregional.NewWebAcl(ctx, \"fooWebAcl\", \u0026wafregional.WebAclArgs{\n\t\t\tMetricName: pulumi.String(\"foo\"),\n\t\t\tDefaultAction: \u0026wafregional.WebAclDefaultActionArgs{\n\t\t\t\tType: pulumi.String(\"ALLOW\"),\n\t\t\t},\n\t\t\tRules: wafregional.WebAclRuleArray{\n\t\t\t\t\u0026wafregional.WebAclRuleArgs{\n\t\t\t\t\tAction: \u0026wafregional.WebAclRuleActionArgs{\n\t\t\t\t\t\tType: pulumi.String(\"BLOCK\"),\n\t\t\t\t\t},\n\t\t\t\t\tPriority: pulumi.Int(1),\n\t\t\t\t\tRuleId: fooRule.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfooVpc, err := ec2.NewVpc(ctx, \"fooVpc\", \u0026ec2.VpcArgs{\n\t\t\tCidrBlock: pulumi.String(\"10.1.0.0/16\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tavailable, err := aws.GetAvailabilityZones(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfooSubnet, err := ec2.NewSubnet(ctx, \"fooSubnet\", \u0026ec2.SubnetArgs{\n\t\t\tVpcId: fooVpc.ID(),\n\t\t\tCidrBlock: pulumi.String(\"10.1.1.0/24\"),\n\t\t\tAvailabilityZone: pulumi.String(available.Names[0]),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbar, err := ec2.NewSubnet(ctx, \"bar\", \u0026ec2.SubnetArgs{\n\t\t\tVpcId: fooVpc.ID(),\n\t\t\tCidrBlock: pulumi.String(\"10.1.2.0/24\"),\n\t\t\tAvailabilityZone: pulumi.String(available.Names[1]),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfooLoadBalancer, err := alb.NewLoadBalancer(ctx, \"fooLoadBalancer\", \u0026alb.LoadBalancerArgs{\n\t\t\tInternal: pulumi.Bool(true),\n\t\t\tSubnets: pulumi.StringArray{\n\t\t\t\tfooSubnet.ID(),\n\t\t\t\tbar.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = wafregional.NewWebAclAssociation(ctx, \"fooWebAclAssociation\", \u0026wafregional.WebAclAssociationArgs{\n\t\t\tResourceArn: fooLoadBalancer.Arn,\n\t\t\tWebAclId: fooWebAcl.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% example %}}\n### API Gateway Association\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as crypto from \"crypto\";\n\nconst ipset = new aws.wafregional.IpSet(\"ipset\", {ipSetDescriptors: [{\n type: \"IPV4\",\n value: \"192.0.7.0/24\",\n}]});\nconst fooRule = new aws.wafregional.Rule(\"fooRule\", {\n metricName: \"tfWAFRule\",\n predicates: [{\n dataId: ipset.id,\n negated: false,\n type: \"IPMatch\",\n }],\n});\nconst fooWebAcl = new aws.wafregional.WebAcl(\"fooWebAcl\", {\n metricName: \"foo\",\n defaultAction: {\n type: \"ALLOW\",\n },\n rules: [{\n action: {\n type: \"BLOCK\",\n },\n priority: 1,\n ruleId: fooRule.id,\n }],\n});\nconst exampleRestApi = new aws.apigateway.RestApi(\"exampleRestApi\", {body: JSON.stringify({\n openapi: \"3.0.1\",\n info: {\n title: \"example\",\n version: \"1.0\",\n },\n paths: {\n \"/path1\": {\n get: {\n \"x-amazon-apigateway-integration\": {\n httpMethod: \"GET\",\n payloadFormatVersion: \"1.0\",\n type: \"HTTP_PROXY\",\n uri: \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n },\n },\n },\n },\n})});\nconst exampleDeployment = new aws.apigateway.Deployment(\"exampleDeployment\", {\n restApi: exampleRestApi.id,\n triggers: {\n redeployment: exampleRestApi.body.apply(body =\u003e JSON.stringify(body)).apply(toJSON =\u003e crypto.createHash('sha1').update(toJSON).digest('hex')),\n },\n});\nconst exampleStage = new aws.apigateway.Stage(\"exampleStage\", {\n deployment: exampleDeployment.id,\n restApi: exampleRestApi.id,\n stageName: \"example\",\n});\nconst association = new aws.wafregional.WebAclAssociation(\"association\", {\n resourceArn: exampleStage.arn,\n webAclId: fooWebAcl.id,\n});\n```\n```python\nimport pulumi\nimport hashlib\nimport json\nimport pulumi_aws as aws\n\nipset = aws.wafregional.IpSet(\"ipset\", ip_set_descriptors=[aws.wafregional.IpSetIpSetDescriptorArgs(\n type=\"IPV4\",\n value=\"192.0.7.0/24\",\n)])\nfoo_rule = aws.wafregional.Rule(\"fooRule\",\n metric_name=\"tfWAFRule\",\n predicates=[aws.wafregional.RulePredicateArgs(\n data_id=ipset.id,\n negated=False,\n type=\"IPMatch\",\n )])\nfoo_web_acl = aws.wafregional.WebAcl(\"fooWebAcl\",\n metric_name=\"foo\",\n default_action=aws.wafregional.WebAclDefaultActionArgs(\n type=\"ALLOW\",\n ),\n rules=[aws.wafregional.WebAclRuleArgs(\n action=aws.wafregional.WebAclRuleActionArgs(\n type=\"BLOCK\",\n ),\n priority=1,\n rule_id=foo_rule.id,\n )])\nexample_rest_api = aws.apigateway.RestApi(\"exampleRestApi\", body=json.dumps({\n \"openapi\": \"3.0.1\",\n \"info\": {\n \"title\": \"example\",\n \"version\": \"1.0\",\n },\n \"paths\": {\n \"/path1\": {\n \"get\": {\n \"x-amazon-apigateway-integration\": {\n \"httpMethod\": \"GET\",\n \"payloadFormatVersion\": \"1.0\",\n \"type\": \"HTTP_PROXY\",\n \"uri\": \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n },\n },\n },\n },\n}))\nexample_deployment = aws.apigateway.Deployment(\"exampleDeployment\",\n rest_api=example_rest_api.id,\n triggers={\n \"redeployment\": example_rest_api.body.apply(lambda body: json.dumps(body)).apply(lambda to_json: hashlib.sha1(to_json.encode()).hexdigest()),\n })\nexample_stage = aws.apigateway.Stage(\"exampleStage\",\n deployment=example_deployment.id,\n rest_api=example_rest_api.id,\n stage_name=\"example\")\nassociation = aws.wafregional.WebAclAssociation(\"association\",\n resource_arn=example_stage.arn,\n web_acl_id=foo_web_acl.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Security.Cryptography;\nusing System.Text;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n\tprivate static string ComputeSHA1(string input) {\n\t\treturn BitConverter.ToString(\n\t\t\tSHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(input))\n\t\t).Replace(\"-\",\"\").ToLowerInvariant());\n\t}\n\n public MyStack()\n {\n var ipset = new Aws.WafRegional.IpSet(\"ipset\", new Aws.WafRegional.IpSetArgs\n {\n IpSetDescriptors = \n {\n new Aws.WafRegional.Inputs.IpSetIpSetDescriptorArgs\n {\n Type = \"IPV4\",\n Value = \"192.0.7.0/24\",\n },\n },\n });\n var fooRule = new Aws.WafRegional.Rule(\"fooRule\", new Aws.WafRegional.RuleArgs\n {\n MetricName = \"tfWAFRule\",\n Predicates = \n {\n new Aws.WafRegional.Inputs.RulePredicateArgs\n {\n DataId = ipset.Id,\n Negated = false,\n Type = \"IPMatch\",\n },\n },\n });\n var fooWebAcl = new Aws.WafRegional.WebAcl(\"fooWebAcl\", new Aws.WafRegional.WebAclArgs\n {\n MetricName = \"foo\",\n DefaultAction = new Aws.WafRegional.Inputs.WebAclDefaultActionArgs\n {\n Type = \"ALLOW\",\n },\n Rules = \n {\n new Aws.WafRegional.Inputs.WebAclRuleArgs\n {\n Action = new Aws.WafRegional.Inputs.WebAclRuleActionArgs\n {\n Type = \"BLOCK\",\n },\n Priority = 1,\n RuleId = fooRule.Id,\n },\n },\n });\n var exampleRestApi = new Aws.ApiGateway.RestApi(\"exampleRestApi\", new Aws.ApiGateway.RestApiArgs\n {\n Body = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n { \"openapi\", \"3.0.1\" },\n { \"info\", new Dictionary\u003cstring, object?\u003e\n {\n { \"title\", \"example\" },\n { \"version\", \"1.0\" },\n } },\n { \"paths\", new Dictionary\u003cstring, object?\u003e\n {\n { \"/path1\", new Dictionary\u003cstring, object?\u003e\n {\n { \"get\", new Dictionary\u003cstring, object?\u003e\n {\n { \"x-amazon-apigateway-integration\", new Dictionary\u003cstring, object?\u003e\n {\n { \"httpMethod\", \"GET\" },\n { \"payloadFormatVersion\", \"1.0\" },\n { \"type\", \"HTTP_PROXY\" },\n { \"uri\", \"https://ip-ranges.amazonaws.com/ip-ranges.json\" },\n } },\n } },\n } },\n } },\n }),\n });\n var exampleDeployment = new Aws.ApiGateway.Deployment(\"exampleDeployment\", new Aws.ApiGateway.DeploymentArgs\n {\n RestApi = exampleRestApi.Id,\n Triggers = \n {\n { \"redeployment\", exampleRestApi.Body.Apply(body =\u003e JsonSerializer.Serialize(body)).Apply(toJSON =\u003e ComputeSHA1(toJSON)) },\n },\n });\n var exampleStage = new Aws.ApiGateway.Stage(\"exampleStage\", new Aws.ApiGateway.StageArgs\n {\n Deployment = exampleDeployment.Id,\n RestApi = exampleRestApi.Id,\n StageName = \"example\",\n });\n var association = new Aws.WafRegional.WebAclAssociation(\"association\", new Aws.WafRegional.WebAclAssociationArgs\n {\n ResourceArn = exampleStage.Arn,\n WebAclId = fooWebAcl.Id,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"crypto/sha1\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/wafregional\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc sha1Hash(input string) string {\n\thash := sha1.Sum([]byte(input))\n\treturn hex.EncodeToString(hash[:])\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tipset, err := wafregional.NewIpSet(ctx, \"ipset\", \u0026wafregional.IpSetArgs{\n\t\t\tIpSetDescriptors: wafregional.IpSetIpSetDescriptorArray{\n\t\t\t\t\u0026wafregional.IpSetIpSetDescriptorArgs{\n\t\t\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\t\t\tValue: pulumi.String(\"192.0.7.0/24\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfooRule, err := wafregional.NewRule(ctx, \"fooRule\", \u0026wafregional.RuleArgs{\n\t\t\tMetricName: pulumi.String(\"tfWAFRule\"),\n\t\t\tPredicates: wafregional.RulePredicateArray{\n\t\t\t\t\u0026wafregional.RulePredicateArgs{\n\t\t\t\t\tDataId: ipset.ID(),\n\t\t\t\t\tNegated: pulumi.Bool(false),\n\t\t\t\t\tType: pulumi.String(\"IPMatch\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfooWebAcl, err := wafregional.NewWebAcl(ctx, \"fooWebAcl\", \u0026wafregional.WebAclArgs{\n\t\t\tMetricName: pulumi.String(\"foo\"),\n\t\t\tDefaultAction: \u0026wafregional.WebAclDefaultActionArgs{\n\t\t\t\tType: pulumi.String(\"ALLOW\"),\n\t\t\t},\n\t\t\tRules: wafregional.WebAclRuleArray{\n\t\t\t\t\u0026wafregional.WebAclRuleArgs{\n\t\t\t\t\tAction: \u0026wafregional.WebAclRuleActionArgs{\n\t\t\t\t\t\tType: pulumi.String(\"BLOCK\"),\n\t\t\t\t\t},\n\t\t\t\t\tPriority: pulumi.Int(1),\n\t\t\t\t\tRuleId: fooRule.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"openapi\": \"3.0.1\",\n\t\t\t\"info\": map[string]interface{}{\n\t\t\t\t\"title\": \"example\",\n\t\t\t\t\"version\": \"1.0\",\n\t\t\t},\n\t\t\t\"paths\": map[string]interface{}{\n\t\t\t\t\"/path1\": map[string]interface{}{\n\t\t\t\t\t\"get\": map[string]interface{}{\n\t\t\t\t\t\t\"x-amazon-apigateway-integration\": map[string]interface{}{\n\t\t\t\t\t\t\t\"httpMethod\": \"GET\",\n\t\t\t\t\t\t\t\"payloadFormatVersion\": \"1.0\",\n\t\t\t\t\t\t\t\"type\": \"HTTP_PROXY\",\n\t\t\t\t\t\t\t\"uri\": \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\texampleRestApi, err := apigateway.NewRestApi(ctx, \"exampleRestApi\", \u0026apigateway.RestApiArgs{\n\t\t\tBody: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleDeployment, err := apigateway.NewDeployment(ctx, \"exampleDeployment\", \u0026apigateway.DeploymentArgs{\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tTriggers: pulumi.StringMap{\n\t\t\t\t\"redeployment\": exampleRestApi.Body.ApplyT(func(body string) (pulumi.String, error) {\n\t\t\t\t\tvar _zero pulumi.String\n\t\t\t\t\ttmpJSON1, err := json.Marshal(body)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn _zero, err\n\t\t\t\t\t}\n\t\t\t\t\tjson1 := string(tmpJSON1)\n\t\t\t\t\treturn json1, nil\n\t\t\t\t}).(pulumi.StringOutput).ApplyT(func(toJSON string) (pulumi.String, error) {\n\t\t\t\t\treturn sha1Hash(toJSON), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleStage, err := apigateway.NewStage(ctx, \"exampleStage\", \u0026apigateway.StageArgs{\n\t\t\tDeployment: exampleDeployment.ID(),\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tStageName: pulumi.String(\"example\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = wafregional.NewWebAclAssociation(ctx, \"association\", \u0026wafregional.WebAclAssociationArgs{\n\t\t\tResourceArn: exampleStage.Arn,\n\t\t\tWebAclId: fooWebAcl.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nWAF Regional Web ACL Association can be imported using their `web_acl_id:resource_arn`, e.g.\n\n```sh\n $ pulumi import aws:wafregional/webAclAssociation:WebAclAssociation foo web_acl_id:resource_arn\n```\n\n ", "inputProperties": { "resourceArn": { "description": "ARN of the resource to associate with. For example, an Application Load Balancer or API Gateway Stage.\n", @@ -136612,7 +140220,7 @@ } }, "aws:wafv2/webAclAssociation:WebAclAssociation": { - "description": "Creates a WAFv2 Web ACL Association.\n\n\u003e **NOTE on associating a WAFv2 Web ACL with a Cloudfront distribution:** Do not use this resource to associate a WAFv2 Web ACL with a Cloudfront Distribution. The [AWS API call backing this resource](https://docs.aws.amazon.com/waf/latest/APIReference/API_AssociateWebACL.html) notes that you should use the [`web_acl_id`][2] property on the [`cloudfront_distribution`][2] instead.\n\n[1]: https://docs.aws.amazon.com/waf/latest/APIReference/API_AssociateWebACL.html\n[2]: https://www.terraform.io/docs/providers/aws/r/cloudfront_distribution.html#web_acl_id\n\n\n## Import\n\nWAFv2 Web ACL Association can be imported using `WEB_ACL_ARN,RESOURCE_ARN` e.g.\n\n```sh\n $ pulumi import aws:wafv2/webAclAssociation:WebAclAssociation example arn:aws:wafv2:...7ce849ea,arn:aws:apigateway:...ages/name\n```\n\n ", + "description": "Creates a WAFv2 Web ACL Association.\n\n\u003e **NOTE on associating a WAFv2 Web ACL with a Cloudfront distribution:** Do not use this resource to associate a WAFv2 Web ACL with a Cloudfront Distribution. The [AWS API call backing this resource](https://docs.aws.amazon.com/waf/latest/APIReference/API_AssociateWebACL.html) notes that you should use the [`web_acl_id`][2] property on the [`cloudfront_distribution`][2] instead.\n\n[1]: https://docs.aws.amazon.com/waf/latest/APIReference/API_AssociateWebACL.html\n[2]: https://www.terraform.io/docs/providers/aws/r/cloudfront_distribution.html#web_acl_id\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as crypto from \"crypto\";\n\nconst exampleRestApi = new aws.apigateway.RestApi(\"exampleRestApi\", {body: JSON.stringify({\n openapi: \"3.0.1\",\n info: {\n title: \"example\",\n version: \"1.0\",\n },\n paths: {\n \"/path1\": {\n get: {\n \"x-amazon-apigateway-integration\": {\n httpMethod: \"GET\",\n payloadFormatVersion: \"1.0\",\n type: \"HTTP_PROXY\",\n uri: \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n },\n },\n },\n },\n})});\nconst exampleDeployment = new aws.apigateway.Deployment(\"exampleDeployment\", {\n restApi: exampleRestApi.id,\n triggers: {\n redeployment: exampleRestApi.body.apply(body =\u003e JSON.stringify(body)).apply(toJSON =\u003e crypto.createHash('sha1').update(toJSON).digest('hex')),\n },\n});\nconst exampleStage = new aws.apigateway.Stage(\"exampleStage\", {\n deployment: exampleDeployment.id,\n restApi: exampleRestApi.id,\n stageName: \"example\",\n});\nconst exampleWebAcl = new aws.wafv2.WebAcl(\"exampleWebAcl\", {\n scope: \"REGIONAL\",\n defaultAction: {\n allow: {},\n },\n visibilityConfig: {\n cloudwatchMetricsEnabled: false,\n metricName: \"friendly-metric-name\",\n sampledRequestsEnabled: false,\n },\n});\nconst exampleWebAclAssociation = new aws.wafv2.WebAclAssociation(\"exampleWebAclAssociation\", {\n resourceArn: exampleStage.arn,\n webAclArn: exampleWebAcl.arn,\n});\n```\n```python\nimport pulumi\nimport hashlib\nimport json\nimport pulumi_aws as aws\n\nexample_rest_api = aws.apigateway.RestApi(\"exampleRestApi\", body=json.dumps({\n \"openapi\": \"3.0.1\",\n \"info\": {\n \"title\": \"example\",\n \"version\": \"1.0\",\n },\n \"paths\": {\n \"/path1\": {\n \"get\": {\n \"x-amazon-apigateway-integration\": {\n \"httpMethod\": \"GET\",\n \"payloadFormatVersion\": \"1.0\",\n \"type\": \"HTTP_PROXY\",\n \"uri\": \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n },\n },\n },\n },\n}))\nexample_deployment = aws.apigateway.Deployment(\"exampleDeployment\",\n rest_api=example_rest_api.id,\n triggers={\n \"redeployment\": example_rest_api.body.apply(lambda body: json.dumps(body)).apply(lambda to_json: hashlib.sha1(to_json.encode()).hexdigest()),\n })\nexample_stage = aws.apigateway.Stage(\"exampleStage\",\n deployment=example_deployment.id,\n rest_api=example_rest_api.id,\n stage_name=\"example\")\nexample_web_acl = aws.wafv2.WebAcl(\"exampleWebAcl\",\n scope=\"REGIONAL\",\n default_action=aws.wafv2.WebAclDefaultActionArgs(\n allow=aws.wafv2.WebAclDefaultActionAllowArgs(),\n ),\n visibility_config=aws.wafv2.WebAclVisibilityConfigArgs(\n cloudwatch_metrics_enabled=False,\n metric_name=\"friendly-metric-name\",\n sampled_requests_enabled=False,\n ))\nexample_web_acl_association = aws.wafv2.WebAclAssociation(\"exampleWebAclAssociation\",\n resource_arn=example_stage.arn,\n web_acl_arn=example_web_acl.arn)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Security.Cryptography;\nusing System.Text;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n\tprivate static string ComputeSHA1(string input) {\n\t\treturn BitConverter.ToString(\n\t\t\tSHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(input))\n\t\t).Replace(\"-\",\"\").ToLowerInvariant());\n\t}\n\n public MyStack()\n {\n var exampleRestApi = new Aws.ApiGateway.RestApi(\"exampleRestApi\", new Aws.ApiGateway.RestApiArgs\n {\n Body = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n { \"openapi\", \"3.0.1\" },\n { \"info\", new Dictionary\u003cstring, object?\u003e\n {\n { \"title\", \"example\" },\n { \"version\", \"1.0\" },\n } },\n { \"paths\", new Dictionary\u003cstring, object?\u003e\n {\n { \"/path1\", new Dictionary\u003cstring, object?\u003e\n {\n { \"get\", new Dictionary\u003cstring, object?\u003e\n {\n { \"x-amazon-apigateway-integration\", new Dictionary\u003cstring, object?\u003e\n {\n { \"httpMethod\", \"GET\" },\n { \"payloadFormatVersion\", \"1.0\" },\n { \"type\", \"HTTP_PROXY\" },\n { \"uri\", \"https://ip-ranges.amazonaws.com/ip-ranges.json\" },\n } },\n } },\n } },\n } },\n }),\n });\n var exampleDeployment = new Aws.ApiGateway.Deployment(\"exampleDeployment\", new Aws.ApiGateway.DeploymentArgs\n {\n RestApi = exampleRestApi.Id,\n Triggers = \n {\n { \"redeployment\", exampleRestApi.Body.Apply(body =\u003e JsonSerializer.Serialize(body)).Apply(toJSON =\u003e ComputeSHA1(toJSON)) },\n },\n });\n var exampleStage = new Aws.ApiGateway.Stage(\"exampleStage\", new Aws.ApiGateway.StageArgs\n {\n Deployment = exampleDeployment.Id,\n RestApi = exampleRestApi.Id,\n StageName = \"example\",\n });\n var exampleWebAcl = new Aws.WafV2.WebAcl(\"exampleWebAcl\", new Aws.WafV2.WebAclArgs\n {\n Scope = \"REGIONAL\",\n DefaultAction = new Aws.WafV2.Inputs.WebAclDefaultActionArgs\n {\n Allow = ,\n },\n VisibilityConfig = new Aws.WafV2.Inputs.WebAclVisibilityConfigArgs\n {\n CloudwatchMetricsEnabled = false,\n MetricName = \"friendly-metric-name\",\n SampledRequestsEnabled = false,\n },\n });\n var exampleWebAclAssociation = new Aws.WafV2.WebAclAssociation(\"exampleWebAclAssociation\", new Aws.WafV2.WebAclAssociationArgs\n {\n ResourceArn = exampleStage.Arn,\n WebAclArn = exampleWebAcl.Arn,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"crypto/sha1\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/wafv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc sha1Hash(input string) string {\n\thash := sha1.Sum([]byte(input))\n\treturn hex.EncodeToString(hash[:])\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"openapi\": \"3.0.1\",\n\t\t\t\"info\": map[string]interface{}{\n\t\t\t\t\"title\": \"example\",\n\t\t\t\t\"version\": \"1.0\",\n\t\t\t},\n\t\t\t\"paths\": map[string]interface{}{\n\t\t\t\t\"/path1\": map[string]interface{}{\n\t\t\t\t\t\"get\": map[string]interface{}{\n\t\t\t\t\t\t\"x-amazon-apigateway-integration\": map[string]interface{}{\n\t\t\t\t\t\t\t\"httpMethod\": \"GET\",\n\t\t\t\t\t\t\t\"payloadFormatVersion\": \"1.0\",\n\t\t\t\t\t\t\t\"type\": \"HTTP_PROXY\",\n\t\t\t\t\t\t\t\"uri\": \"https://ip-ranges.amazonaws.com/ip-ranges.json\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\texampleRestApi, err := apigateway.NewRestApi(ctx, \"exampleRestApi\", \u0026apigateway.RestApiArgs{\n\t\t\tBody: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleDeployment, err := apigateway.NewDeployment(ctx, \"exampleDeployment\", \u0026apigateway.DeploymentArgs{\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tTriggers: pulumi.StringMap{\n\t\t\t\t\"redeployment\": exampleRestApi.Body.ApplyT(func(body string) (pulumi.String, error) {\n\t\t\t\t\tvar _zero pulumi.String\n\t\t\t\t\ttmpJSON1, err := json.Marshal(body)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn _zero, err\n\t\t\t\t\t}\n\t\t\t\t\tjson1 := string(tmpJSON1)\n\t\t\t\t\treturn json1, nil\n\t\t\t\t}).(pulumi.StringOutput).ApplyT(func(toJSON string) (pulumi.String, error) {\n\t\t\t\t\treturn sha1Hash(toJSON), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleStage, err := apigateway.NewStage(ctx, \"exampleStage\", \u0026apigateway.StageArgs{\n\t\t\tDeployment: exampleDeployment.ID(),\n\t\t\tRestApi: exampleRestApi.ID(),\n\t\t\tStageName: pulumi.String(\"example\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleWebAcl, err := wafv2.NewWebAcl(ctx, \"exampleWebAcl\", \u0026wafv2.WebAclArgs{\n\t\t\tScope: pulumi.String(\"REGIONAL\"),\n\t\t\tDefaultAction: \u0026wafv2.WebAclDefaultActionArgs{\n\t\t\t\tAllow: nil,\n\t\t\t},\n\t\t\tVisibilityConfig: \u0026wafv2.WebAclVisibilityConfigArgs{\n\t\t\t\tCloudwatchMetricsEnabled: pulumi.Bool(false),\n\t\t\t\tMetricName: pulumi.String(\"friendly-metric-name\"),\n\t\t\t\tSampledRequestsEnabled: pulumi.Bool(false),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = wafv2.NewWebAclAssociation(ctx, \"exampleWebAclAssociation\", \u0026wafv2.WebAclAssociationArgs{\n\t\t\tResourceArn: exampleStage.Arn,\n\t\t\tWebAclArn: exampleWebAcl.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nWAFv2 Web ACL Association can be imported using `WEB_ACL_ARN,RESOURCE_ARN` e.g.\n\n```sh\n $ pulumi import aws:wafv2/webAclAssociation:WebAclAssociation example arn:aws:wafv2:...7ce849ea,arn:aws:apigateway:...ages/name\n```\n\n ", "inputProperties": { "resourceArn": { "description": "The Amazon Resource Name (ARN) of the resource to associate with the web ACL. This must be an ARN of an Application Load Balancer or an Amazon API Gateway stage.\n", @@ -136744,7 +140352,7 @@ } }, "aws:worklink/fleet:Fleet": { - "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.worklink.Fleet(\"example\", {});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.worklink.Fleet(\"example\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.WorkLink.Fleet(\"example\", new Aws.WorkLink.FleetArgs\n {\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/worklink\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := worklink.NewFleet(ctx, \"example\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nNetwork Configuration Usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.worklink.Fleet(\"example\", {network: {\n vpcId: aws_vpc.test.id,\n subnetIds: [aws_subnet.test.map(__item =\u003e __item.id)],\n securityGroupIds: [aws_security_group.test.id],\n}});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.worklink.Fleet(\"example\", network=aws.worklink.FleetNetworkArgs(\n vpc_id=aws_vpc[\"test\"][\"id\"],\n subnet_ids=[[__item[\"id\"] for __item in aws_subnet[\"test\"]]],\n security_group_ids=[aws_security_group[\"test\"][\"id\"]],\n))\n```\n```csharp\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.WorkLink.Fleet(\"example\", new Aws.WorkLink.FleetArgs\n {\n Network = new Aws.WorkLink.Inputs.FleetNetworkArgs\n {\n VpcId = aws_vpc.Test.Id,\n SubnetIds = \n {\n aws_subnet.Test.Select(__item =\u003e __item.Id).ToList(),\n },\n SecurityGroupIds = \n {\n aws_security_group.Test.Id,\n },\n },\n });\n }\n\n}\n```\n\nIdentity Provider Configuration Usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst test = new aws.worklink.Fleet(\"test\", {identityProvider: {\n type: \"SAML\",\n samlMetadata: fs.readFileSync(\"saml-metadata.xml\"),\n}});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.worklink.Fleet(\"test\", identity_provider=aws.worklink.FleetIdentityProviderArgs(\n type=\"SAML\",\n saml_metadata=(lambda path: open(path).read())(\"saml-metadata.xml\"),\n))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = new Aws.WorkLink.Fleet(\"test\", new Aws.WorkLink.FleetArgs\n {\n IdentityProvider = new Aws.WorkLink.Inputs.FleetIdentityProviderArgs\n {\n Type = \"SAML\",\n SamlMetadata = File.ReadAllText(\"saml-metadata.xml\"),\n },\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nWorkLink can be imported using the ARN, e.g.\n\n```sh\n $ pulumi import aws:worklink/fleet:Fleet test arn:aws:worklink::123456789012:fleet/example\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.worklink.Fleet(\"example\", {});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.worklink.Fleet(\"example\")\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.WorkLink.Fleet(\"example\", new Aws.WorkLink.FleetArgs\n {\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/worklink\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := worklink.NewFleet(ctx, \"example\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nNetwork Configuration Usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst example = new aws.worklink.Fleet(\"example\", {network: {\n vpcId: aws_vpc.test.id,\n subnetIds: [aws_subnet.test.map(__item =\u003e __item.id)],\n securityGroupIds: [aws_security_group.test.id],\n}});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.worklink.Fleet(\"example\", network=aws.worklink.FleetNetworkArgs(\n vpc_id=aws_vpc[\"test\"][\"id\"],\n subnet_ids=[[__item[\"id\"] for __item in aws_subnet[\"test\"]]],\n security_group_ids=[aws_security_group[\"test\"][\"id\"]],\n))\n```\n```csharp\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.WorkLink.Fleet(\"example\", new Aws.WorkLink.FleetArgs\n {\n Network = new Aws.WorkLink.Inputs.FleetNetworkArgs\n {\n VpcId = aws_vpc.Test.Id,\n SubnetIds = \n {\n aws_subnet.Test.Select(__item =\u003e __item.Id).ToList(),\n },\n SecurityGroupIds = \n {\n aws_security_group.Test.Id,\n },\n },\n });\n }\n\n}\n```\n\nIdentity Provider Configuration Usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst test = new aws.worklink.Fleet(\"test\", {identityProvider: {\n type: \"SAML\",\n samlMetadata: fs.readFileSync(\"saml-metadata.xml\"),\n}});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\ntest = aws.worklink.Fleet(\"test\", identity_provider=aws.worklink.FleetIdentityProviderArgs(\n type=\"SAML\",\n saml_metadata=(lambda path: open(path).read())(\"saml-metadata.xml\"),\n))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var test = new Aws.WorkLink.Fleet(\"test\", new Aws.WorkLink.FleetArgs\n {\n IdentityProvider = new Aws.WorkLink.Inputs.FleetIdentityProviderArgs\n {\n Type = \"SAML\",\n SamlMetadata = File.ReadAllText(\"saml-metadata.xml\"),\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/worklink\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := worklink.NewFleet(ctx, \"test\", \u0026worklink.FleetArgs{\n\t\t\tIdentityProvider: \u0026worklink.FleetIdentityProviderArgs{\n\t\t\t\tType: pulumi.String(\"SAML\"),\n\t\t\t\tSamlMetadata: readFileOrPanic(\"saml-metadata.xml\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nWorkLink can be imported using the ARN, e.g.\n\n```sh\n $ pulumi import aws:worklink/fleet:Fleet test arn:aws:worklink::123456789012:fleet/example\n```\n\n ", "inputProperties": { "auditStreamArn": { "description": "The ARN of the Amazon Kinesis data stream that receives the audit events. Kinesis data stream name must begin with `\"AmazonWorkLink-\"`.\n", @@ -136880,7 +140488,7 @@ } }, "aws:worklink/websiteCertificateAuthorityAssociation:WebsiteCertificateAuthorityAssociation": { - "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst example = new aws.worklink.Fleet(\"example\", {});\nconst test = new aws.worklink.WebsiteCertificateAuthorityAssociation(\"test\", {\n fleetArn: aws_worklink_fleet.test.arn,\n certificate: fs.readFileSync(\"certificate.pem\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.worklink.Fleet(\"example\")\ntest = aws.worklink.WebsiteCertificateAuthorityAssociation(\"test\",\n fleet_arn=aws_worklink_fleet[\"test\"][\"arn\"],\n certificate=(lambda path: open(path).read())(\"certificate.pem\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.WorkLink.Fleet(\"example\", new Aws.WorkLink.FleetArgs\n {\n });\n var test = new Aws.WorkLink.WebsiteCertificateAuthorityAssociation(\"test\", new Aws.WorkLink.WebsiteCertificateAuthorityAssociationArgs\n {\n FleetArn = aws_worklink_fleet.Test.Arn,\n Certificate = File.ReadAllText(\"certificate.pem\"),\n });\n }\n\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nWorkLink Website Certificate Authority can be imported using `FLEET-ARN,WEBSITE-CA-ID`, e.g.\n\n```sh\n $ pulumi import aws:worklink/websiteCertificateAuthorityAssociation:WebsiteCertificateAuthorityAssociation example arn:aws:worklink::123456789012:fleet/example,abcdefghijk\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * from \"fs\";\n\nconst example = new aws.worklink.Fleet(\"example\", {});\nconst test = new aws.worklink.WebsiteCertificateAuthorityAssociation(\"test\", {\n fleetArn: aws_worklink_fleet.test.arn,\n certificate: fs.readFileSync(\"certificate.pem\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexample = aws.worklink.Fleet(\"example\")\ntest = aws.worklink.WebsiteCertificateAuthorityAssociation(\"test\",\n fleet_arn=aws_worklink_fleet[\"test\"][\"arn\"],\n certificate=(lambda path: open(path).read())(\"certificate.pem\"))\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = new Aws.WorkLink.Fleet(\"example\", new Aws.WorkLink.FleetArgs\n {\n });\n var test = new Aws.WorkLink.WebsiteCertificateAuthorityAssociation(\"test\", new Aws.WorkLink.WebsiteCertificateAuthorityAssociationArgs\n {\n FleetArn = aws_worklink_fleet.Test.Arn,\n Certificate = File.ReadAllText(\"certificate.pem\"),\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/worklink\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := worklink.NewFleet(ctx, \"example\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = worklink.NewWebsiteCertificateAuthorityAssociation(ctx, \"test\", \u0026worklink.WebsiteCertificateAuthorityAssociationArgs{\n\t\t\tFleetArn: pulumi.Any(aws_worklink_fleet.Test.Arn),\n\t\t\tCertificate: readFileOrPanic(\"certificate.pem\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nWorkLink Website Certificate Authority can be imported using `FLEET-ARN,WEBSITE-CA-ID`, e.g.\n\n```sh\n $ pulumi import aws:worklink/websiteCertificateAuthorityAssociation:WebsiteCertificateAuthorityAssociation example arn:aws:worklink::123456789012:fleet/example,abcdefghijk\n```\n\n ", "inputProperties": { "certificate": { "description": "The root certificate of the Certificate Authority.\n", @@ -149229,6 +152837,214 @@ }, "type": "object" }, + "aws:appstream/FleetComputeCapacity:FleetComputeCapacity": { + "language": { + "nodejs": { + "requiredOutputs": [ + "available", + "desiredInstances", + "inUse", + "running" + ] + } + }, + "properties": { + "available": { + "description": "Number of currently available instances that can be used to stream sessions.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + }, + "desiredInstances": { + "description": "Desired number of streaming instances.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + }, + "inUse": { + "description": "Number of instances in use for streaming.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + }, + "running": { + "description": "Total number of simultaneous streaming instances that are running.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + } + }, + "required": [ + "desiredInstances" + ], + "type": "object" + }, + "aws:appstream/FleetDomainJoinInfo:FleetDomainJoinInfo": { + "properties": { + "directoryName": { + "description": "Fully qualified name of the directory (for example, corp.example.com).\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "organizationalUnitDistinguishedName": { + "description": "Distinguished name of the organizational unit for computer accounts.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "type": "object" + }, + "aws:appstream/FleetVpcConfig:FleetVpcConfig": { + "language": { + "nodejs": { + "requiredOutputs": [ + "securityGroupIds", + "subnetIds" + ] + } + }, + "properties": { + "securityGroupIds": { + "description": "Identifiers of the security groups for the fleet or image builder.\n", + "items": { + "type": "string" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" + }, + "subnetIds": { + "description": "Identifiers of the subnets to which a network interface is attached from the fleet instance or image builder instance.\n", + "items": { + "type": "string" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" + } + }, + "type": "object" + }, + "aws:appstream/ImageBuilderAccessEndpoint:ImageBuilderAccessEndpoint": { + "language": { + "nodejs": { + "requiredOutputs": [ + "endpointType", + "vpceId" + ] + } + }, + "properties": { + "endpointType": { + "description": "Type of interface endpoint.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "vpceId": { + "description": "Identifier (ID) of the VPC in which the interface endpoint is used.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "endpointType" + ], + "type": "object" + }, + "aws:appstream/ImageBuilderDomainJoinInfo:ImageBuilderDomainJoinInfo": { + "properties": { + "directoryName": { + "description": "Fully qualified name of the directory (for example, corp.example.com).\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "organizationalUnitDistinguishedName": { + "description": "Distinguished name of the organizational unit for computer accounts.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "type": "object" + }, + "aws:appstream/ImageBuilderVpcConfig:ImageBuilderVpcConfig": { + "language": { + "nodejs": { + "requiredOutputs": [ + "securityGroupIds", + "subnetIds" + ] + } + }, + "properties": { + "securityGroupIds": { + "description": "Identifiers of the security groups for the image builder or image builder.\n", + "items": { + "type": "string" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" + }, + "subnetIds": { + "description": "Identifiers of the subnets to which a network interface is attached from the image builder instance or image builder instance.\n", + "items": { + "type": "string" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" + } + }, + "type": "object" + }, "aws:appstream/StackAccessEndpoint:StackAccessEndpoint": { "language": { "nodejs": { @@ -152749,6 +156565,33 @@ ], "type": "object" }, + "aws:chime/VoiceConnectorTerminationCredentialsCredential:VoiceConnectorTerminationCredentialsCredential": { + "properties": { + "password": { + "description": "RFC2617 compliant password associated with the SIP credentials.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "username": { + "description": "RFC2617 compliant username associated with the SIP credentials.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "password", + "username" + ], + "type": "object" + }, "aws:cloudformation/CloudFormationTypeLoggingConfig:CloudFormationTypeLoggingConfig": { "properties": { "logGroupName": { @@ -152799,6 +156642,22 @@ }, "type": "object" }, + "aws:cloudformation/StackSetInstanceDeploymentTargets:StackSetInstanceDeploymentTargets": { + "properties": { + "organizationalUnitIds": { + "items": { + "type": "string" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" + } + }, + "type": "object" + }, "aws:cloudformation/getCloudFormationTypeLoggingConfig:getCloudFormationTypeLoggingConfig": { "language": { "nodejs": { @@ -159726,6 +163585,9 @@ "cloud9": { "type": "string" }, + "cloudcontrolapi": { + "type": "string" + }, "cloudformation": { "type": "string" }, @@ -161010,6 +164872,150 @@ }, "type": "string" }, + "includeControlDetails": { + "description": "Shows detailed control information for table definition, column definition, and table and column changes in the Kafka message output. The default is `false`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "boolean" + }, + "includeNullAndEmpty": { + "description": "Include NULL and empty columns for records migrated to the endpoint. The default is `false`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "boolean" + }, + "includePartitionValue": { + "description": "Shows the partition value within the Kafka message output unless the partition type is `schema-table-type`. The default is `false`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "boolean" + }, + "includeTableAlterOperations": { + "description": "Includes any data definition language (DDL) operations that change the table in the control data, such as `rename-table`, `drop-table`, `add-column`, `drop-column`, and `rename-column`. The default is `false`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "boolean" + }, + "includeTransactionDetails": { + "description": "Provides detailed transaction information from the source database. This information includes a commit timestamp, a log position, and values for `transaction_id`, previous `transaction_id`, and `transaction_record_id` (the record offset within a transaction). The default is `false`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "boolean" + }, + "messageFormat": { + "description": "The output format for the records created on the endpoint. The message format is `JSON` (default) or `JSON_UNFORMATTED` (a single line with no tab).\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "messageMaxBytes": { + "description": "The maximum size in bytes for records created on the endpoint The default is `1,000,000`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + }, + "noHexPrefix": { + "description": "Set this optional parameter to true to avoid adding a '0x' prefix to raw data in hexadecimal format. For example, by default, AWS DMS adds a '0x' prefix to the LOB column type in hexadecimal format moving from an Oracle source to a Kafka target. Use the `no_hex_prefix` endpoint setting to enable migration of RAW data type columns without adding the `'0x'` prefix.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "boolean" + }, + "partitionIncludeSchemaTable": { + "description": "Prefixes schema and table names to partition values, when the partition type is `primary-key-type`. Doing this increases data distribution among Kafka partitions. For example, suppose that a SysBench schema has thousands of tables and each table has only limited range for a primary key. In this case, the same primary key is sent from thousands of tables to the same partition, which causes throttling. The default is `false`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "boolean" + }, + "saslPassword": { + "description": "The secure password you created when you first set up your MSK cluster to validate a client identity and make an encrypted connection between server and client using SASL-SSL authentication.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "saslUsername": { + "description": "The secure user name you created when you first set up your MSK cluster to validate a client identity and make an encrypted connection between server and client using SASL-SSL authentication.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "securityProtocol": { + "description": "Set secure connection to a Kafka target endpoint using Transport Layer Security (TLS). Options include `ssl-encryption`, `ssl-authentication`, and `sasl-ssl`. `sasl-ssl` requires `sasl_username` and `sasl_password`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "sslCaCertificateArn": { + "description": "The Amazon Resource Name (ARN) for the private certificate authority (CA) cert that AWS DMS uses to securely connect to your Kafka target endpoint.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "sslClientCertificateArn": { + "description": "The Amazon Resource Name (ARN) of the client certificate used to securely connect to a Kafka target endpoint.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "sslClientKeyArn": { + "description": "The Amazon Resource Name (ARN) for the client private key used to securely connect to a Kafka target endpoint.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "sslClientKeyPassword": { + "description": "The password for the client private key used to securely connect to a Kafka target endpoint.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, "topic": { "description": "Kafka topic for migration. Defaults to `kafka-default-topic`.\n", "language": { @@ -163186,6 +167192,38 @@ ], "type": "object" }, + "aws:ec2/FlowLogDestinationOptions:FlowLogDestinationOptions": { + "properties": { + "fileFormat": { + "description": "The format for the flow log. Default value: `plain-text`. Valid values: `plain-text`, `parquet`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "hiveCompatiblePartitions": { + "description": "Indicates whether to use Hive-compatible prefixes for flow logs stored in Amazon S3. Default value: `false`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "boolean" + }, + "perHourPartition": { + "description": "Indicates whether to partition the flow log per hour. This reduces the cost and response time for queries. Default value: `false`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "boolean" + } + }, + "type": "object" + }, "aws:ec2/InstanceCapacityReservationSpecification:InstanceCapacityReservationSpecification": { "properties": { "capacityReservationPreference": { @@ -165824,6 +169862,7 @@ "type": "string" }, "httpProtocolIpv6": { + "description": "Enables or disables the IPv6 endpoint for the instance metadata service. (Default: `disabled`).\n", "language": { "python": { "mapCase": false @@ -167962,7 +172001,7 @@ "type": "boolean" }, "allowRemoteVpcDnsResolution": { - "description": "Allow a local VPC to resolve public DNS hostnames to\nprivate IP addresses when queried from instances in the peer VPC. This is\n[not supported](https://docs.aws.amazon.com/vpc/latest/peering/modify-peering-connections.html) for\ninter-region VPC peering.\n", + "description": "Allow a local VPC to resolve public DNS hostnames to\nprivate IP addresses when queried from instances in the peer VPC.\n", "language": { "python": { "mapCase": false @@ -168058,7 +172097,7 @@ "type": "boolean" }, "allowRemoteVpcDnsResolution": { - "description": "Allow a local VPC to resolve public DNS hostnames to\nprivate IP addresses when queried from instances in the peer VPC. This is\n[not supported](https://docs.aws.amazon.com/vpc/latest/peering/modify-peering-connections.html) for\ninter-region VPC peering.\n", + "description": "Allow a local VPC to resolve public DNS hostnames to\nprivate IP addresses when queried from instances in the peer VPC.\n", "language": { "python": { "mapCase": false @@ -168402,6 +172441,36 @@ ], "type": "object" }, + "aws:ec2/getDedicatedHostFilter:getDedicatedHostFilter": { + "properties": { + "name": { + "description": "The name of the field to filter by, as defined by [the underlying AWS API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeHosts.html).\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "values": { + "description": "Set of values that are accepted for the given field. A host will be selected if any one of the given values matches.\n", + "items": { + "type": "string" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" + } + }, + "required": [ + "name", + "values" + ], + "type": "object" + }, "aws:ec2/getElasticIpFilter:getElasticIpFilter": { "properties": { "name": { @@ -169781,6 +173850,15 @@ }, "type": "string" }, + "httpProtocolIpv6": { + "description": "The state of IPv6 endpoint for the instance metadata service: `enabled`, `disabled`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, "httpPutResponseHopLimit": { "description": "The desired HTTP PUT response hop limit for instance metadata requests.\n", "language": { @@ -169802,6 +173880,7 @@ }, "required": [ "httpEndpoint", + "httpProtocolIpv6", "httpPutResponseHopLimit", "httpTokens" ], @@ -173215,10 +177294,19 @@ } }, "type": "string" + }, + "transitionToPrimaryStorageClass": { + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" } }, "required": [ - "transitionToIa" + "transitionToIa", + "transitionToPrimaryStorageClass" ], "type": "object" }, @@ -179001,7 +183089,7 @@ "type": "array" }, "name": { - "description": "Friendly name given to the instance fleet.\n", + "description": "Name of the step.\n", "language": { "python": { "mapCase": false @@ -179010,7 +183098,7 @@ "type": "string" }, "path": { - "description": "Location of the script to run during a bootstrap action. Can be either a location in Amazon S3 or on a local file system\n", + "description": "Location of the script to run during a bootstrap action. Can be either a location in Amazon S3 or on a local file system.\n", "language": { "python": { "mapCase": false @@ -179037,7 +183125,7 @@ }, "properties": { "id": { - "description": "The ID of the EMR Cluster\n", + "description": "ID of the cluster.\n", "language": { "python": { "mapCase": false @@ -179046,7 +183134,7 @@ "type": "string" }, "instanceTypeConfigs": { - "description": "Configuration block for instance fleet\n", + "description": "Configuration block for instance fleet.\n", "items": { "$ref": "#/types/aws:emr/ClusterCoreInstanceFleetInstanceTypeConfig:ClusterCoreInstanceFleetInstanceTypeConfig" }, @@ -179059,7 +183147,7 @@ }, "launchSpecifications": { "$ref": "#/types/aws:emr/ClusterCoreInstanceFleetLaunchSpecifications:ClusterCoreInstanceFleetLaunchSpecifications", - "description": "Configuration block for launch specification\n", + "description": "Configuration block for launch specification.\n", "language": { "python": { "mapCase": false @@ -179067,7 +183155,7 @@ } }, "name": { - "description": "Friendly name given to the instance fleet.\n", + "description": "Name of the step.\n", "language": { "python": { "mapCase": false @@ -179092,7 +183180,7 @@ "type": "integer" }, "targetOnDemandCapacity": { - "description": "The target capacity of On-Demand units for the instance fleet, which determines how many On-Demand instances to provision.\n", + "description": "Target capacity of On-Demand units for the instance fleet, which determines how many On-Demand instances to provision.\n", "language": { "python": { "mapCase": false @@ -179101,7 +183189,7 @@ "type": "integer" }, "targetSpotCapacity": { - "description": "The target capacity of Spot units for the instance fleet, which determines how many Spot instances to provision.\n", + "description": "Target capacity of Spot units for the instance fleet, which determines how many Spot instances to provision.\n", "language": { "python": { "mapCase": false @@ -179123,7 +183211,7 @@ }, "properties": { "bidPrice": { - "description": "The bid price for each EC2 Spot instance type as defined by `instance_type`. Expressed in USD. If neither `bid_price` nor `bid_price_as_percentage_of_on_demand_price` is provided, `bid_price_as_percentage_of_on_demand_price` defaults to 100%.\n", + "description": "Bid price for each EC2 instance in the instance group, expressed in USD. By setting this attribute, the instance group is being declared as a Spot Instance, and will implicitly create a Spot request. Leave this blank to use On-Demand Instances.\n", "language": { "python": { "mapCase": false @@ -179132,7 +183220,7 @@ "type": "string" }, "bidPriceAsPercentageOfOnDemandPrice": { - "description": "The bid price, as a percentage of On-Demand price, for each EC2 Spot instance as defined by `instance_type`. Expressed as a number (for example, 20 specifies 20%). If neither `bid_price` nor `bid_price_as_percentage_of_on_demand_price` is provided, `bid_price_as_percentage_of_on_demand_price` defaults to 100%.\n", + "description": "Bid price, as a percentage of On-Demand price, for each EC2 Spot instance as defined by `instance_type`. Expressed as a number (for example, 20 specifies 20%). If neither `bid_price` nor `bid_price_as_percentage_of_on_demand_price` is provided, `bid_price_as_percentage_of_on_demand_price` defaults to 100%.\n", "language": { "python": { "mapCase": false @@ -179141,7 +183229,7 @@ "type": "number" }, "configurations": { - "description": "A configuration classification that applies when provisioning cluster instances, which can include configurations for applications and software that run on the cluster. List of `configuration` blocks.\n", + "description": "Configuration classification that applies when provisioning cluster instances, which can include configurations for applications and software that run on the cluster. List of `configuration` blocks.\n", "items": { "$ref": "#/types/aws:emr/ClusterCoreInstanceFleetInstanceTypeConfigConfiguration:ClusterCoreInstanceFleetInstanceTypeConfigConfiguration" }, @@ -179165,7 +183253,7 @@ "type": "array" }, "instanceType": { - "description": "An EC2 instance type, such as m4.xlarge.\n", + "description": "EC2 instance type for all instances in the instance group.\n", "language": { "python": { "mapCase": false @@ -179174,7 +183262,7 @@ "type": "string" }, "weightedCapacity": { - "description": "The number of units that a provisioned instance of this type provides toward fulfilling the target capacities defined in `aws.emr.InstanceFleet`.\n", + "description": "Number of units that a provisioned instance of this type provides toward fulfilling the target capacities defined in `aws.emr.InstanceFleet`.\n", "language": { "python": { "mapCase": false @@ -179191,7 +183279,7 @@ "aws:emr/ClusterCoreInstanceFleetInstanceTypeConfigConfiguration:ClusterCoreInstanceFleetInstanceTypeConfigConfiguration": { "properties": { "classification": { - "description": "The classification within a configuration.\n", + "description": "Classification within a configuration.\n", "language": { "python": { "mapCase": false @@ -179203,7 +183291,7 @@ "additionalProperties": { "$ref": "pulumi.json#/Any" }, - "description": "A map of properties specified within a configuration classification\n", + "description": "Key-Value map of Java properties that are set when the step runs. You can use these properties to pass key value pairs to your main function.\n", "language": { "python": { "mapCase": false @@ -179217,7 +183305,7 @@ "aws:emr/ClusterCoreInstanceFleetInstanceTypeConfigEbsConfig:ClusterCoreInstanceFleetInstanceTypeConfigEbsConfig": { "properties": { "iops": { - "description": "The number of I/O operations per second (IOPS) that the volume supports\n", + "description": "Number of I/O operations per second (IOPS) that the volume supports.\n", "language": { "python": { "mapCase": false @@ -179226,7 +183314,7 @@ "type": "integer" }, "size": { - "description": "The volume size, in gibibytes (GiB).\n", + "description": "Volume size, in gibibytes (GiB).\n", "language": { "python": { "mapCase": false @@ -179235,7 +183323,7 @@ "type": "integer" }, "type": { - "description": "The volume type. Valid options are `gp2`, `io1`, `standard` and `st1`. See [EBS Volume Types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html).\n", + "description": "Volume type. Valid options are `gp2`, `io1`, `standard` and `st1`. See [EBS Volume Types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html).\n", "language": { "python": { "mapCase": false @@ -179244,7 +183332,7 @@ "type": "string" }, "volumesPerInstance": { - "description": "The number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1)\n", + "description": "Number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1).\n", "language": { "python": { "mapCase": false @@ -179262,7 +183350,7 @@ "aws:emr/ClusterCoreInstanceFleetLaunchSpecifications:ClusterCoreInstanceFleetLaunchSpecifications": { "properties": { "onDemandSpecifications": { - "description": "Configuration block for on demand instances launch specifications\n", + "description": "Configuration block for on demand instances launch specifications.\n", "items": { "$ref": "#/types/aws:emr/ClusterCoreInstanceFleetLaunchSpecificationsOnDemandSpecification:ClusterCoreInstanceFleetLaunchSpecificationsOnDemandSpecification" }, @@ -179274,7 +183362,7 @@ "type": "array" }, "spotSpecifications": { - "description": "Configuration block for spot instances launch specifications\n", + "description": "Configuration block for spot instances launch specifications.\n", "items": { "$ref": "#/types/aws:emr/ClusterCoreInstanceFleetLaunchSpecificationsSpotSpecification:ClusterCoreInstanceFleetLaunchSpecificationsSpotSpecification" }, @@ -179317,7 +183405,7 @@ "type": "string" }, "blockDurationMinutes": { - "description": "The defined duration for Spot instances (also known as Spot blocks) in minutes. When specified, the Spot instance does not terminate before the defined duration expires, and defined duration pricing for Spot instances applies. Valid values are 60, 120, 180, 240, 300, or 360. The duration period starts as soon as a Spot instance receives its instance ID. At the end of the duration, Amazon EC2 marks the Spot instance for termination and provides a Spot instance termination notice, which gives the instance a two-minute warning before it terminates.\n", + "description": "Defined duration for Spot instances (also known as Spot blocks) in minutes. When specified, the Spot instance does not terminate before the defined duration expires, and defined duration pricing for Spot instances applies. Valid values are 60, 120, 180, 240, 300, or 360. The duration period starts as soon as a Spot instance receives its instance ID. At the end of the duration, Amazon EC2 marks the Spot instance for termination and provides a Spot instance termination notice, which gives the instance a two-minute warning before it terminates.\n", "language": { "python": { "mapCase": false @@ -179326,7 +183414,7 @@ "type": "integer" }, "timeoutAction": { - "description": "The action to take when TargetSpotCapacity has not been fulfilled when the TimeoutDurationMinutes has expired; that is, when all Spot instances could not be provisioned within the Spot provisioning timeout. Valid values are `TERMINATE_CLUSTER` and `SWITCH_TO_ON_DEMAND`. SWITCH_TO_ON_DEMAND specifies that if no Spot instances are available, On-Demand Instances should be provisioned to fulfill any remaining Spot capacity.\n", + "description": "Action to take when TargetSpotCapacity has not been fulfilled when the TimeoutDurationMinutes has expired; that is, when all Spot instances could not be provisioned within the Spot provisioning timeout. Valid values are `TERMINATE_CLUSTER` and `SWITCH_TO_ON_DEMAND`. SWITCH_TO_ON_DEMAND specifies that if no Spot instances are available, On-Demand Instances should be provisioned to fulfill any remaining Spot capacity.\n", "language": { "python": { "mapCase": false @@ -179335,7 +183423,7 @@ "type": "string" }, "timeoutDurationMinutes": { - "description": "The spot provisioning timeout period in minutes. If Spot instances are not provisioned within this time period, the TimeOutAction is taken. Minimum value is 5 and maximum value is 1440. The timeout applies only during initial provisioning, when the cluster is first created.\n", + "description": "Spot provisioning timeout period in minutes. If Spot instances are not provisioned within this time period, the TimeOutAction is taken. Minimum value is 5 and maximum value is 1440. The timeout applies only during initial provisioning, when the cluster is first created.\n", "language": { "python": { "mapCase": false @@ -179372,7 +183460,7 @@ "type": "string" }, "bidPrice": { - "description": "The bid price for each EC2 Spot instance type as defined by `instance_type`. Expressed in USD. If neither `bid_price` nor `bid_price_as_percentage_of_on_demand_price` is provided, `bid_price_as_percentage_of_on_demand_price` defaults to 100%.\n", + "description": "Bid price for each EC2 instance in the instance group, expressed in USD. By setting this attribute, the instance group is being declared as a Spot Instance, and will implicitly create a Spot request. Leave this blank to use On-Demand Instances.\n", "language": { "python": { "mapCase": false @@ -179393,7 +183481,7 @@ "type": "array" }, "id": { - "description": "The ID of the EMR Cluster\n", + "description": "ID of the cluster.\n", "language": { "python": { "mapCase": false @@ -179402,7 +183490,7 @@ "type": "string" }, "instanceCount": { - "description": "Target number of instances for the instance group. Must be 1 or 3. Defaults to 1. Launching with multiple master nodes is only supported in EMR version 5.23.0+, and requires this resource's `core_instance_group` to be configured. Public (Internet accessible) instances must be created in VPC subnets that have `map public IP on launch` enabled. Termination protection is automatically enabled when launched with multiple master nodes and this provider must have the `termination_protection = false` configuration applied before destroying this resource.\n", + "description": "Target number of instances for the instance group. Must be 1 or 3. Defaults to 1. Launching with multiple master nodes is only supported in EMR version 5.23.0+, and requires this resource's `core_instance_group` to be configured. Public (Internet accessible) instances must be created in VPC subnets that have map public IP on launch enabled. Termination protection is automatically enabled when launched with multiple master nodes and this provider must have the `termination_protection = false` configuration applied before destroying this resource.\n", "language": { "python": { "mapCase": false @@ -179411,7 +183499,7 @@ "type": "integer" }, "instanceType": { - "description": "An EC2 instance type, such as m4.xlarge.\n", + "description": "EC2 instance type for all instances in the instance group.\n", "language": { "python": { "mapCase": false @@ -179420,7 +183508,7 @@ "type": "string" }, "name": { - "description": "Friendly name given to the instance fleet.\n", + "description": "Name of the step.\n", "language": { "python": { "mapCase": false @@ -179437,7 +183525,7 @@ "aws:emr/ClusterCoreInstanceGroupEbsConfig:ClusterCoreInstanceGroupEbsConfig": { "properties": { "iops": { - "description": "The number of I/O operations per second (IOPS) that the volume supports\n", + "description": "Number of I/O operations per second (IOPS) that the volume supports.\n", "language": { "python": { "mapCase": false @@ -179446,7 +183534,7 @@ "type": "integer" }, "size": { - "description": "The volume size, in gibibytes (GiB).\n", + "description": "Volume size, in gibibytes (GiB).\n", "language": { "python": { "mapCase": false @@ -179455,7 +183543,7 @@ "type": "integer" }, "type": { - "description": "The volume type. Valid options are `gp2`, `io1`, `standard` and `st1`. See [EBS Volume Types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html).\n", + "description": "Volume type. Valid options are `gp2`, `io1`, `standard` and `st1`. See [EBS Volume Types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html).\n", "language": { "python": { "mapCase": false @@ -179464,7 +183552,7 @@ "type": "string" }, "volumesPerInstance": { - "description": "The number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1)\n", + "description": "Number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1).\n", "language": { "python": { "mapCase": false @@ -179494,7 +183582,7 @@ }, "properties": { "additionalMasterSecurityGroups": { - "description": "String containing a comma separated list of additional Amazon EC2 security group IDs for the master node\n", + "description": "String containing a comma separated list of additional Amazon EC2 security group IDs for the master node.\n", "language": { "python": { "mapCase": false @@ -179503,7 +183591,7 @@ "type": "string" }, "additionalSlaveSecurityGroups": { - "description": "String containing a comma separated list of additional Amazon EC2 security group IDs for the slave nodes as a comma separated string\n", + "description": "String containing a comma separated list of additional Amazon EC2 security group IDs for the slave nodes as a comma separated string.\n", "language": { "python": { "mapCase": false @@ -179512,7 +183600,7 @@ "type": "string" }, "emrManagedMasterSecurityGroup": { - "description": "Identifier of the Amazon EC2 EMR-Managed security group for the master node\n", + "description": "Identifier of the Amazon EC2 EMR-Managed security group for the master node.\n", "language": { "python": { "mapCase": false @@ -179521,7 +183609,7 @@ "type": "string" }, "emrManagedSlaveSecurityGroup": { - "description": "Identifier of the Amazon EC2 EMR-Managed security group for the slave nodes\n", + "description": "Identifier of the Amazon EC2 EMR-Managed security group for the slave nodes.\n", "language": { "python": { "mapCase": false @@ -179530,7 +183618,7 @@ "type": "string" }, "instanceProfile": { - "description": "Instance Profile for EC2 instances of the cluster assume this role\n", + "description": "Instance Profile for EC2 instances of the cluster assume this role.\n", "language": { "python": { "mapCase": false @@ -179539,7 +183627,7 @@ "type": "string" }, "keyName": { - "description": "Amazon EC2 key pair that can be used to ssh to the master node as the user called `hadoop`\n", + "description": "Amazon EC2 key pair that can be used to ssh to the master node as the user called `hadoop`.\n", "language": { "python": { "mapCase": false @@ -179548,7 +183636,7 @@ "type": "string" }, "serviceAccessSecurityGroup": { - "description": "Identifier of the Amazon EC2 service-access security group - required when the cluster runs on a private subnet\n", + "description": "Identifier of the Amazon EC2 service-access security group - required when the cluster runs on a private subnet.\n", "language": { "python": { "mapCase": false @@ -179557,7 +183645,7 @@ "type": "string" }, "subnetId": { - "description": "VPC subnet id where you want the job flow to launch. Cannot specify the `cc1.4xlarge` instance type for nodes of a job flow launched in a Amazon VPC\n", + "description": "VPC subnet id where you want the job flow to launch. Cannot specify the `cc1.4xlarge` instance type for nodes of a job flow launched in an Amazon VPC.\n", "language": { "python": { "mapCase": false @@ -179566,7 +183654,7 @@ "type": "string" }, "subnetIds": { - "description": "List of VPC subnet id-s where you want the job flow to launch. Amazon EMR identifies the best Availability Zone to launch instances according to your fleet specifications\n", + "description": "List of VPC subnet id-s where you want the job flow to launch. Amazon EMR identifies the best Availability Zone to launch instances according to your fleet specifications.\n", "items": { "type": "string" }, @@ -179586,7 +183674,7 @@ "aws:emr/ClusterKerberosAttributes:ClusterKerberosAttributes": { "properties": { "adDomainJoinPassword": { - "description": "The Active Directory password for `ad_domain_join_user`. This provider cannot perform drift detection of this configuration.\n", + "description": "Active Directory password for `ad_domain_join_user`. This provider cannot perform drift detection of this configuration.\n", "language": { "python": { "mapCase": false @@ -179613,7 +183701,7 @@ "type": "string" }, "kdcAdminPassword": { - "description": "The password used within the cluster for the kadmin service on the cluster-dedicated KDC, which maintains Kerberos principals, password policies, and keytabs for the cluster. This provider cannot perform drift detection of this configuration.\n", + "description": "Password used within the cluster for the kadmin service on the cluster-dedicated KDC, which maintains Kerberos principals, password policies, and keytabs for the cluster. This provider cannot perform drift detection of this configuration.\n", "language": { "python": { "mapCase": false @@ -179622,7 +183710,7 @@ "type": "string" }, "realm": { - "description": "The name of the Kerberos realm to which all nodes in a cluster belong. For example, `EC2.INTERNAL`\n", + "description": "Name of the Kerberos realm to which all nodes in a cluster belong. For example, `EC2.INTERNAL`\n", "language": { "python": { "mapCase": false @@ -179649,7 +183737,7 @@ }, "properties": { "id": { - "description": "The ID of the EMR Cluster\n", + "description": "ID of the cluster.\n", "language": { "python": { "mapCase": false @@ -179658,7 +183746,7 @@ "type": "string" }, "instanceTypeConfigs": { - "description": "Configuration block for instance fleet\n", + "description": "Configuration block for instance fleet.\n", "items": { "$ref": "#/types/aws:emr/ClusterMasterInstanceFleetInstanceTypeConfig:ClusterMasterInstanceFleetInstanceTypeConfig" }, @@ -179671,7 +183759,7 @@ }, "launchSpecifications": { "$ref": "#/types/aws:emr/ClusterMasterInstanceFleetLaunchSpecifications:ClusterMasterInstanceFleetLaunchSpecifications", - "description": "Configuration block for launch specification\n", + "description": "Configuration block for launch specification.\n", "language": { "python": { "mapCase": false @@ -179679,7 +183767,7 @@ } }, "name": { - "description": "Friendly name given to the instance fleet.\n", + "description": "Name of the step.\n", "language": { "python": { "mapCase": false @@ -179704,7 +183792,7 @@ "type": "integer" }, "targetOnDemandCapacity": { - "description": "The target capacity of On-Demand units for the instance fleet, which determines how many On-Demand instances to provision.\n", + "description": "Target capacity of On-Demand units for the instance fleet, which determines how many On-Demand instances to provision.\n", "language": { "python": { "mapCase": false @@ -179713,7 +183801,7 @@ "type": "integer" }, "targetSpotCapacity": { - "description": "The target capacity of Spot units for the instance fleet, which determines how many Spot instances to provision.\n", + "description": "Target capacity of Spot units for the instance fleet, which determines how many Spot instances to provision.\n", "language": { "python": { "mapCase": false @@ -179735,7 +183823,7 @@ }, "properties": { "bidPrice": { - "description": "The bid price for each EC2 Spot instance type as defined by `instance_type`. Expressed in USD. If neither `bid_price` nor `bid_price_as_percentage_of_on_demand_price` is provided, `bid_price_as_percentage_of_on_demand_price` defaults to 100%.\n", + "description": "Bid price for each EC2 instance in the instance group, expressed in USD. By setting this attribute, the instance group is being declared as a Spot Instance, and will implicitly create a Spot request. Leave this blank to use On-Demand Instances.\n", "language": { "python": { "mapCase": false @@ -179744,7 +183832,7 @@ "type": "string" }, "bidPriceAsPercentageOfOnDemandPrice": { - "description": "The bid price, as a percentage of On-Demand price, for each EC2 Spot instance as defined by `instance_type`. Expressed as a number (for example, 20 specifies 20%). If neither `bid_price` nor `bid_price_as_percentage_of_on_demand_price` is provided, `bid_price_as_percentage_of_on_demand_price` defaults to 100%.\n", + "description": "Bid price, as a percentage of On-Demand price, for each EC2 Spot instance as defined by `instance_type`. Expressed as a number (for example, 20 specifies 20%). If neither `bid_price` nor `bid_price_as_percentage_of_on_demand_price` is provided, `bid_price_as_percentage_of_on_demand_price` defaults to 100%.\n", "language": { "python": { "mapCase": false @@ -179753,7 +183841,7 @@ "type": "number" }, "configurations": { - "description": "A configuration classification that applies when provisioning cluster instances, which can include configurations for applications and software that run on the cluster. List of `configuration` blocks.\n", + "description": "Configuration classification that applies when provisioning cluster instances, which can include configurations for applications and software that run on the cluster. List of `configuration` blocks.\n", "items": { "$ref": "#/types/aws:emr/ClusterMasterInstanceFleetInstanceTypeConfigConfiguration:ClusterMasterInstanceFleetInstanceTypeConfigConfiguration" }, @@ -179777,7 +183865,7 @@ "type": "array" }, "instanceType": { - "description": "An EC2 instance type, such as m4.xlarge.\n", + "description": "EC2 instance type for all instances in the instance group.\n", "language": { "python": { "mapCase": false @@ -179786,7 +183874,7 @@ "type": "string" }, "weightedCapacity": { - "description": "The number of units that a provisioned instance of this type provides toward fulfilling the target capacities defined in `aws.emr.InstanceFleet`.\n", + "description": "Number of units that a provisioned instance of this type provides toward fulfilling the target capacities defined in `aws.emr.InstanceFleet`.\n", "language": { "python": { "mapCase": false @@ -179803,7 +183891,7 @@ "aws:emr/ClusterMasterInstanceFleetInstanceTypeConfigConfiguration:ClusterMasterInstanceFleetInstanceTypeConfigConfiguration": { "properties": { "classification": { - "description": "The classification within a configuration.\n", + "description": "Classification within a configuration.\n", "language": { "python": { "mapCase": false @@ -179815,7 +183903,7 @@ "additionalProperties": { "$ref": "pulumi.json#/Any" }, - "description": "A map of properties specified within a configuration classification\n", + "description": "Key-Value map of Java properties that are set when the step runs. You can use these properties to pass key value pairs to your main function.\n", "language": { "python": { "mapCase": false @@ -179829,7 +183917,7 @@ "aws:emr/ClusterMasterInstanceFleetInstanceTypeConfigEbsConfig:ClusterMasterInstanceFleetInstanceTypeConfigEbsConfig": { "properties": { "iops": { - "description": "The number of I/O operations per second (IOPS) that the volume supports\n", + "description": "Number of I/O operations per second (IOPS) that the volume supports.\n", "language": { "python": { "mapCase": false @@ -179838,7 +183926,7 @@ "type": "integer" }, "size": { - "description": "The volume size, in gibibytes (GiB).\n", + "description": "Volume size, in gibibytes (GiB).\n", "language": { "python": { "mapCase": false @@ -179847,7 +183935,7 @@ "type": "integer" }, "type": { - "description": "The volume type. Valid options are `gp2`, `io1`, `standard` and `st1`. See [EBS Volume Types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html).\n", + "description": "Volume type. Valid options are `gp2`, `io1`, `standard` and `st1`. See [EBS Volume Types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html).\n", "language": { "python": { "mapCase": false @@ -179856,7 +183944,7 @@ "type": "string" }, "volumesPerInstance": { - "description": "The number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1)\n", + "description": "Number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1).\n", "language": { "python": { "mapCase": false @@ -179874,7 +183962,7 @@ "aws:emr/ClusterMasterInstanceFleetLaunchSpecifications:ClusterMasterInstanceFleetLaunchSpecifications": { "properties": { "onDemandSpecifications": { - "description": "Configuration block for on demand instances launch specifications\n", + "description": "Configuration block for on demand instances launch specifications.\n", "items": { "$ref": "#/types/aws:emr/ClusterMasterInstanceFleetLaunchSpecificationsOnDemandSpecification:ClusterMasterInstanceFleetLaunchSpecificationsOnDemandSpecification" }, @@ -179886,7 +183974,7 @@ "type": "array" }, "spotSpecifications": { - "description": "Configuration block for spot instances launch specifications\n", + "description": "Configuration block for spot instances launch specifications.\n", "items": { "$ref": "#/types/aws:emr/ClusterMasterInstanceFleetLaunchSpecificationsSpotSpecification:ClusterMasterInstanceFleetLaunchSpecificationsSpotSpecification" }, @@ -179929,7 +184017,7 @@ "type": "string" }, "blockDurationMinutes": { - "description": "The defined duration for Spot instances (also known as Spot blocks) in minutes. When specified, the Spot instance does not terminate before the defined duration expires, and defined duration pricing for Spot instances applies. Valid values are 60, 120, 180, 240, 300, or 360. The duration period starts as soon as a Spot instance receives its instance ID. At the end of the duration, Amazon EC2 marks the Spot instance for termination and provides a Spot instance termination notice, which gives the instance a two-minute warning before it terminates.\n", + "description": "Defined duration for Spot instances (also known as Spot blocks) in minutes. When specified, the Spot instance does not terminate before the defined duration expires, and defined duration pricing for Spot instances applies. Valid values are 60, 120, 180, 240, 300, or 360. The duration period starts as soon as a Spot instance receives its instance ID. At the end of the duration, Amazon EC2 marks the Spot instance for termination and provides a Spot instance termination notice, which gives the instance a two-minute warning before it terminates.\n", "language": { "python": { "mapCase": false @@ -179938,7 +184026,7 @@ "type": "integer" }, "timeoutAction": { - "description": "The action to take when TargetSpotCapacity has not been fulfilled when the TimeoutDurationMinutes has expired; that is, when all Spot instances could not be provisioned within the Spot provisioning timeout. Valid values are `TERMINATE_CLUSTER` and `SWITCH_TO_ON_DEMAND`. SWITCH_TO_ON_DEMAND specifies that if no Spot instances are available, On-Demand Instances should be provisioned to fulfill any remaining Spot capacity.\n", + "description": "Action to take when TargetSpotCapacity has not been fulfilled when the TimeoutDurationMinutes has expired; that is, when all Spot instances could not be provisioned within the Spot provisioning timeout. Valid values are `TERMINATE_CLUSTER` and `SWITCH_TO_ON_DEMAND`. SWITCH_TO_ON_DEMAND specifies that if no Spot instances are available, On-Demand Instances should be provisioned to fulfill any remaining Spot capacity.\n", "language": { "python": { "mapCase": false @@ -179947,7 +184035,7 @@ "type": "string" }, "timeoutDurationMinutes": { - "description": "The spot provisioning timeout period in minutes. If Spot instances are not provisioned within this time period, the TimeOutAction is taken. Minimum value is 5 and maximum value is 1440. The timeout applies only during initial provisioning, when the cluster is first created.\n", + "description": "Spot provisioning timeout period in minutes. If Spot instances are not provisioned within this time period, the TimeOutAction is taken. Minimum value is 5 and maximum value is 1440. The timeout applies only during initial provisioning, when the cluster is first created.\n", "language": { "python": { "mapCase": false @@ -179975,7 +184063,7 @@ }, "properties": { "bidPrice": { - "description": "The bid price for each EC2 Spot instance type as defined by `instance_type`. Expressed in USD. If neither `bid_price` nor `bid_price_as_percentage_of_on_demand_price` is provided, `bid_price_as_percentage_of_on_demand_price` defaults to 100%.\n", + "description": "Bid price for each EC2 instance in the instance group, expressed in USD. By setting this attribute, the instance group is being declared as a Spot Instance, and will implicitly create a Spot request. Leave this blank to use On-Demand Instances.\n", "language": { "python": { "mapCase": false @@ -179996,7 +184084,7 @@ "type": "array" }, "id": { - "description": "The ID of the EMR Cluster\n", + "description": "ID of the cluster.\n", "language": { "python": { "mapCase": false @@ -180005,7 +184093,7 @@ "type": "string" }, "instanceCount": { - "description": "Target number of instances for the instance group. Must be 1 or 3. Defaults to 1. Launching with multiple master nodes is only supported in EMR version 5.23.0+, and requires this resource's `core_instance_group` to be configured. Public (Internet accessible) instances must be created in VPC subnets that have `map public IP on launch` enabled. Termination protection is automatically enabled when launched with multiple master nodes and this provider must have the `termination_protection = false` configuration applied before destroying this resource.\n", + "description": "Target number of instances for the instance group. Must be 1 or 3. Defaults to 1. Launching with multiple master nodes is only supported in EMR version 5.23.0+, and requires this resource's `core_instance_group` to be configured. Public (Internet accessible) instances must be created in VPC subnets that have map public IP on launch enabled. Termination protection is automatically enabled when launched with multiple master nodes and this provider must have the `termination_protection = false` configuration applied before destroying this resource.\n", "language": { "python": { "mapCase": false @@ -180014,7 +184102,7 @@ "type": "integer" }, "instanceType": { - "description": "An EC2 instance type, such as m4.xlarge.\n", + "description": "EC2 instance type for all instances in the instance group.\n", "language": { "python": { "mapCase": false @@ -180023,7 +184111,7 @@ "type": "string" }, "name": { - "description": "Friendly name given to the instance fleet.\n", + "description": "Name of the step.\n", "language": { "python": { "mapCase": false @@ -180040,7 +184128,7 @@ "aws:emr/ClusterMasterInstanceGroupEbsConfig:ClusterMasterInstanceGroupEbsConfig": { "properties": { "iops": { - "description": "The number of I/O operations per second (IOPS) that the volume supports\n", + "description": "Number of I/O operations per second (IOPS) that the volume supports.\n", "language": { "python": { "mapCase": false @@ -180049,7 +184137,7 @@ "type": "integer" }, "size": { - "description": "The volume size, in gibibytes (GiB).\n", + "description": "Volume size, in gibibytes (GiB).\n", "language": { "python": { "mapCase": false @@ -180058,7 +184146,7 @@ "type": "integer" }, "type": { - "description": "The volume type. Valid options are `gp2`, `io1`, `standard` and `st1`. See [EBS Volume Types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html).\n", + "description": "Volume type. Valid options are `gp2`, `io1`, `standard` and `st1`. See [EBS Volume Types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html).\n", "language": { "python": { "mapCase": false @@ -180067,7 +184155,7 @@ "type": "string" }, "volumesPerInstance": { - "description": "The number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1)\n", + "description": "Number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1).\n", "language": { "python": { "mapCase": false @@ -180085,7 +184173,7 @@ "aws:emr/ClusterStep:ClusterStep": { "properties": { "actionOnFailure": { - "description": "The action to take if the step fails. Valid values: `TERMINATE_JOB_FLOW`, `TERMINATE_CLUSTER`, `CANCEL_AND_WAIT`, and `CONTINUE`\n", + "description": "Action to take if the step fails. Valid values: `TERMINATE_JOB_FLOW`, `TERMINATE_CLUSTER`, `CANCEL_AND_WAIT`, and `CONTINUE`\n", "language": { "python": { "mapCase": false @@ -180095,7 +184183,7 @@ }, "hadoopJarStep": { "$ref": "#/types/aws:emr/ClusterStepHadoopJarStep:ClusterStepHadoopJarStep", - "description": "The JAR file used for the step. Defined below.\n", + "description": "JAR file used for the step. See below.\n", "language": { "python": { "mapCase": false @@ -180103,7 +184191,7 @@ } }, "name": { - "description": "Friendly name given to the instance fleet.\n", + "description": "Name of the step.\n", "language": { "python": { "mapCase": false @@ -180155,7 +184243,7 @@ "additionalProperties": { "type": "string" }, - "description": "A map of properties specified within a configuration classification\n", + "description": "Key-Value map of Java properties that are set when the step runs. You can use these properties to pass key value pairs to your main function.\n", "language": { "python": { "mapCase": false @@ -180592,6 +184680,141 @@ ], "type": "object" }, + "aws:fsx/OntapFileSystemDiskIopsConfiguration:OntapFileSystemDiskIopsConfiguration": { + "language": { + "nodejs": { + "requiredOutputs": [ + "iops" + ] + } + }, + "properties": { + "iops": { + "description": "- The total number of SSD IOPS provisioned for the file system.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + }, + "mode": { + "description": "- Specifies whether the number of IOPS for the file system is using the system. Valid values are `AUTOMATIC` and `USER_PROVISIONED`. Default value is `AUTOMATIC`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "type": "object" + }, + "aws:fsx/OntapFileSystemEndpoint:OntapFileSystemEndpoint": { + "language": { + "nodejs": { + "requiredOutputs": [ + "interclusters", + "managements" + ] + } + }, + "properties": { + "interclusters": { + "description": "An endpoint for managing your file system by setting up NetApp SnapMirror with other ONTAP systems. See Endpoint.\n", + "items": { + "$ref": "#/types/aws:fsx/OntapFileSystemEndpointIntercluster:OntapFileSystemEndpointIntercluster" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" + }, + "managements": { + "description": "An endpoint for managing your file system using the NetApp ONTAP CLI and NetApp ONTAP API. See Endpoint.\n", + "items": { + "$ref": "#/types/aws:fsx/OntapFileSystemEndpointManagement:OntapFileSystemEndpointManagement" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" + } + }, + "type": "object" + }, + "aws:fsx/OntapFileSystemEndpointIntercluster:OntapFileSystemEndpointIntercluster": { + "language": { + "nodejs": { + "requiredOutputs": [ + "dnsName", + "ipAddresses" + ] + } + }, + "properties": { + "dnsName": { + "description": "The Domain Name Service (DNS) name for the file system. You can mount your file system using its DNS name.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "ipAddresses": { + "description": "IP addresses of the file system endpoint.\n", + "items": { + "type": "string" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" + } + }, + "type": "object" + }, + "aws:fsx/OntapFileSystemEndpointManagement:OntapFileSystemEndpointManagement": { + "language": { + "nodejs": { + "requiredOutputs": [ + "dnsName", + "ipAddresses" + ] + } + }, + "properties": { + "dnsName": { + "description": "The Domain Name Service (DNS) name for the file system. You can mount your file system using its DNS name.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "ipAddresses": { + "description": "IP addresses of the file system endpoint.\n", + "items": { + "type": "string" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" + } + }, + "type": "object" + }, "aws:fsx/WindowsFileSystemAuditLogConfiguration:WindowsFileSystemAuditLogConfiguration": { "language": { "nodejs": { @@ -182408,6 +186631,47 @@ }, "type": "object" }, + "aws:glue/PartitionIndexPartitionIndex:PartitionIndexPartitionIndex": { + "language": { + "nodejs": { + "requiredOutputs": [ + "indexStatus" + ] + } + }, + "properties": { + "indexName": { + "description": "Name of the partition index.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "indexStatus": { + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "keys": { + "description": "Keys for the partition index.\n", + "items": { + "type": "string" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" + } + }, + "type": "object" + }, "aws:glue/PartitionStorageDescriptor:PartitionStorageDescriptor": { "properties": { "bucketColumns": { @@ -186121,6 +190385,14 @@ }, "type": "string" }, + "cloudcontrolapi": { + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, "cloudformation": { "language": { "python": { @@ -199859,6 +204131,81 @@ ], "type": "object" }, + "aws:msk/getBrokerNodesNodeInfoList:getBrokerNodesNodeInfoList": { + "language": { + "nodejs": { + "requiredInputs": [] + } + }, + "properties": { + "attachedEniId": { + "description": "The attached elastic network interface of the broker\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "brokerId": { + "description": "The ID of the broker\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "number" + }, + "clientSubnet": { + "description": "The client subnet to which this broker node belongs\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "clientVpcIpAddress": { + "description": "The client virtual private cloud (VPC) IP address\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "endpoints": { + "description": "Set of endpoints for accessing the broker. This does not include ports\n", + "items": { + "type": "string" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" + }, + "nodeArn": { + "description": "The Amazon Resource Name (ARN) of the node\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "attachedEniId", + "brokerId", + "clientSubnet", + "clientVpcIpAddress", + "endpoints", + "nodeArn" + ], + "type": "object" + }, "aws:mwaa/EnvironmentLastUpdated:EnvironmentLastUpdated": { "language": { "nodejs": { @@ -203206,6 +207553,926 @@ ], "type": "object" }, + "aws:quicksight/DataSourceCredentials:DataSourceCredentials": { + "properties": { + "copySourceArn": { + "description": "- The Amazon Resource Name (ARN) of a data source that has the credential pair that you want to use.\nWhen the value is not null, the `credential_pair` from the data source in the ARN is used.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "credentialPair": { + "$ref": "#/types/aws:quicksight/DataSourceCredentialsCredentialPair:DataSourceCredentialsCredentialPair", + "description": "- Credential pair. See Credential Pair below for more details.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object" + }, + "aws:quicksight/DataSourceCredentialsCredentialPair:DataSourceCredentialsCredentialPair": { + "properties": { + "password": { + "description": "Password, maximum length of 1024 characters.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "username": { + "description": "User name, maximum length of 64 characters.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "password", + "username" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParameters:DataSourceParameters": { + "properties": { + "amazonElasticsearch": { + "$ref": "#/types/aws:quicksight/DataSourceParametersAmazonElasticsearch:DataSourceParametersAmazonElasticsearch", + "description": "Parameters for connecting to Amazon Elasticsearch.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "athena": { + "$ref": "#/types/aws:quicksight/DataSourceParametersAthena:DataSourceParametersAthena", + "description": "Parameters for connecting to Athena.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "aurora": { + "$ref": "#/types/aws:quicksight/DataSourceParametersAurora:DataSourceParametersAurora", + "description": "Parameters for connecting to Aurora MySQL.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "auroraPostgresql": { + "$ref": "#/types/aws:quicksight/DataSourceParametersAuroraPostgresql:DataSourceParametersAuroraPostgresql", + "description": "Parameters for connecting to Aurora Postgresql.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "awsIotAnalytics": { + "$ref": "#/types/aws:quicksight/DataSourceParametersAwsIotAnalytics:DataSourceParametersAwsIotAnalytics", + "description": "Parameters for connecting to AWS IOT Analytics.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "jira": { + "$ref": "#/types/aws:quicksight/DataSourceParametersJira:DataSourceParametersJira", + "description": "Parameters for connecting to Jira.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "mariaDb": { + "$ref": "#/types/aws:quicksight/DataSourceParametersMariaDb:DataSourceParametersMariaDb", + "description": "Parameters for connecting to MariaDB.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "mysql": { + "$ref": "#/types/aws:quicksight/DataSourceParametersMysql:DataSourceParametersMysql", + "description": "Parameters for connecting to MySQL.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "oracle": { + "$ref": "#/types/aws:quicksight/DataSourceParametersOracle:DataSourceParametersOracle", + "description": "Parameters for connecting to Oracle.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "postgresql": { + "$ref": "#/types/aws:quicksight/DataSourceParametersPostgresql:DataSourceParametersPostgresql", + "description": "Parameters for connecting to Postgresql.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "presto": { + "$ref": "#/types/aws:quicksight/DataSourceParametersPresto:DataSourceParametersPresto", + "description": "Parameters for connecting to Presto.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "rds": { + "$ref": "#/types/aws:quicksight/DataSourceParametersRds:DataSourceParametersRds", + "description": "Parameters for connecting to RDS.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "redshift": { + "$ref": "#/types/aws:quicksight/DataSourceParametersRedshift:DataSourceParametersRedshift", + "description": "Parameters for connecting to Redshift.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "s3": { + "$ref": "#/types/aws:quicksight/DataSourceParametersS3:DataSourceParametersS3", + "description": "Parameters for connecting to S3.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "serviceNow": { + "$ref": "#/types/aws:quicksight/DataSourceParametersServiceNow:DataSourceParametersServiceNow", + "description": "Parameters for connecting to ServiceNow.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "snowflake": { + "$ref": "#/types/aws:quicksight/DataSourceParametersSnowflake:DataSourceParametersSnowflake", + "description": "Parameters for connecting to Snowflake.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "spark": { + "$ref": "#/types/aws:quicksight/DataSourceParametersSpark:DataSourceParametersSpark", + "description": "Parameters for connecting to Spark.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "sqlServer": { + "$ref": "#/types/aws:quicksight/DataSourceParametersSqlServer:DataSourceParametersSqlServer", + "description": "Parameters for connecting to SQL Server.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "teradata": { + "$ref": "#/types/aws:quicksight/DataSourceParametersTeradata:DataSourceParametersTeradata", + "description": "Parameters for connecting to Teradata.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "twitter": { + "$ref": "#/types/aws:quicksight/DataSourceParametersTwitter:DataSourceParametersTwitter", + "description": "Parameters for connecting to Twitter.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object" + }, + "aws:quicksight/DataSourceParametersAmazonElasticsearch:DataSourceParametersAmazonElasticsearch": { + "properties": { + "domain": { + "description": "The OpenSearch domain.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "domain" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersAthena:DataSourceParametersAthena": { + "properties": { + "workGroup": { + "description": "The work-group to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "type": "object" + }, + "aws:quicksight/DataSourceParametersAurora:DataSourceParametersAurora": { + "properties": { + "database": { + "description": "The database to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "host": { + "description": "The host to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "port": { + "description": "The port to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + } + }, + "required": [ + "database", + "host", + "port" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersAuroraPostgresql:DataSourceParametersAuroraPostgresql": { + "properties": { + "database": { + "description": "The database to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "host": { + "description": "The host to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "port": { + "description": "The port to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + } + }, + "required": [ + "database", + "host", + "port" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersAwsIotAnalytics:DataSourceParametersAwsIotAnalytics": { + "properties": { + "dataSetName": { + "description": "The name of the data set to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "dataSetName" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersJira:DataSourceParametersJira": { + "properties": { + "siteBaseUrl": { + "description": "The base URL of the Jira instance's site to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "siteBaseUrl" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersMariaDb:DataSourceParametersMariaDb": { + "properties": { + "database": { + "description": "The database to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "host": { + "description": "The host to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "port": { + "description": "The port to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + } + }, + "required": [ + "database", + "host", + "port" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersMysql:DataSourceParametersMysql": { + "properties": { + "database": { + "description": "The database to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "host": { + "description": "The host to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "port": { + "description": "The port to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + } + }, + "required": [ + "database", + "host", + "port" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersOracle:DataSourceParametersOracle": { + "properties": { + "database": { + "description": "The database to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "host": { + "description": "The host to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "port": { + "description": "The port to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + } + }, + "required": [ + "database", + "host", + "port" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersPostgresql:DataSourceParametersPostgresql": { + "properties": { + "database": { + "description": "The database to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "host": { + "description": "The host to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "port": { + "description": "The port to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + } + }, + "required": [ + "database", + "host", + "port" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersPresto:DataSourceParametersPresto": { + "properties": { + "catalog": { + "description": "The catalog to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "host": { + "description": "The host to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "port": { + "description": "The port to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + } + }, + "required": [ + "catalog", + "host", + "port" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersRds:DataSourceParametersRds": { + "properties": { + "database": { + "description": "The database to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "instanceId": { + "description": "The instance ID to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "database", + "instanceId" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersRedshift:DataSourceParametersRedshift": { + "properties": { + "clusterId": { + "description": "The ID of the cluster to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "database": { + "description": "The database to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "host": { + "description": "The host to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "port": { + "description": "The port to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + } + }, + "required": [ + "database" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersS3:DataSourceParametersS3": { + "properties": { + "manifestFileLocation": { + "$ref": "#/types/aws:quicksight/DataSourceParametersS3ManifestFileLocation:DataSourceParametersS3ManifestFileLocation", + "description": "An object containing the S3 location of the S3 manifest file.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "required": [ + "manifestFileLocation" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersS3ManifestFileLocation:DataSourceParametersS3ManifestFileLocation": { + "properties": { + "bucket": { + "description": "The name of the bucket that contains the manifest file.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "key": { + "description": "The key of the manifest file within the bucket.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "bucket", + "key" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersServiceNow:DataSourceParametersServiceNow": { + "properties": { + "siteBaseUrl": { + "description": "The base URL of the Jira instance's site to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "siteBaseUrl" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersSnowflake:DataSourceParametersSnowflake": { + "properties": { + "database": { + "description": "The database to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "host": { + "description": "The host to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "warehouse": { + "description": "The warehouse to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "database", + "host", + "warehouse" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersSpark:DataSourceParametersSpark": { + "properties": { + "host": { + "description": "The host to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "port": { + "description": "The warehouse to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + } + }, + "required": [ + "host", + "port" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersSqlServer:DataSourceParametersSqlServer": { + "properties": { + "database": { + "description": "The database to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "host": { + "description": "The host to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "port": { + "description": "The warehouse to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + } + }, + "required": [ + "database", + "host", + "port" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersTeradata:DataSourceParametersTeradata": { + "properties": { + "database": { + "description": "The database to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "host": { + "description": "The host to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "port": { + "description": "The warehouse to which to connect.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + } + }, + "required": [ + "database", + "host", + "port" + ], + "type": "object" + }, + "aws:quicksight/DataSourceParametersTwitter:DataSourceParametersTwitter": { + "properties": { + "maxRows": { + "description": "The maximum number of rows to query.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + }, + "query": { + "description": "The Twitter query to retrieve the data.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "maxRows", + "query" + ], + "type": "object" + }, + "aws:quicksight/DataSourcePermission:DataSourcePermission": { + "properties": { + "actions": { + "description": "Set of IAM actions to grant or revoke permissions on. Max of 16 items.\n", + "items": { + "type": "string" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" + }, + "principal": { + "description": "The Amazon Resource Name (ARN) of the principal.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "actions", + "principal" + ], + "type": "object" + }, + "aws:quicksight/DataSourceSslProperties:DataSourceSslProperties": { + "properties": { + "disableSsl": { + "description": "A Boolean option to control whether SSL should be disabled.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "boolean" + } + }, + "required": [ + "disableSsl" + ], + "type": "object" + }, + "aws:quicksight/DataSourceVpcConnectionProperties:DataSourceVpcConnectionProperties": { + "properties": { + "vpcConnectionArn": { + "description": "The Amazon Resource Name (ARN) for the VPC connection.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "vpcConnectionArn" + ], + "type": "object" + }, "aws:ram/getResourceShareFilter:getResourceShareFilter": { "properties": { "name": { @@ -204124,6 +209391,54 @@ ], "type": "string" }, + "aws:rds/getProxyAuth:getProxyAuth": { + "language": { + "nodejs": { + "requiredInputs": [] + } + }, + "properties": { + "authScheme": { + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "description": { + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "iamAuth": { + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "secretArn": { + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "authScheme", + "description", + "iamAuth", + "secretArn" + ], + "type": "object" + }, "aws:redshift/ClusterClusterNode:ClusterClusterNode": { "language": { "nodejs": { @@ -204271,6 +209586,125 @@ ], "type": "object" }, + "aws:redshift/ScheduledActionTargetAction:ScheduledActionTargetAction": { + "properties": { + "pauseCluster": { + "$ref": "#/types/aws:redshift/ScheduledActionTargetActionPauseCluster:ScheduledActionTargetActionPauseCluster", + "description": "An action that runs a `PauseCluster` API operation. Documented below.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "resizeCluster": { + "$ref": "#/types/aws:redshift/ScheduledActionTargetActionResizeCluster:ScheduledActionTargetActionResizeCluster", + "description": "An action that runs a `ResizeCluster` API operation. Documented below.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "resumeCluster": { + "$ref": "#/types/aws:redshift/ScheduledActionTargetActionResumeCluster:ScheduledActionTargetActionResumeCluster", + "description": "An action that runs a `ResumeCluster` API operation. Documented below.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object" + }, + "aws:redshift/ScheduledActionTargetActionPauseCluster:ScheduledActionTargetActionPauseCluster": { + "properties": { + "clusterIdentifier": { + "description": "The identifier of the cluster to be resumed.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "clusterIdentifier" + ], + "type": "object" + }, + "aws:redshift/ScheduledActionTargetActionResizeCluster:ScheduledActionTargetActionResizeCluster": { + "properties": { + "classic": { + "description": "A boolean value indicating whether the resize operation is using the classic resize process. Default: `false`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "boolean" + }, + "clusterIdentifier": { + "description": "The identifier of the cluster to be resumed.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "clusterType": { + "description": "The new cluster type for the specified cluster.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "nodeType": { + "description": "The new node type for the nodes you are adding.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "numberOfNodes": { + "description": "The new number of nodes for the cluster.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + } + }, + "required": [ + "clusterIdentifier" + ], + "type": "object" + }, + "aws:redshift/ScheduledActionTargetActionResumeCluster:ScheduledActionTargetActionResumeCluster": { + "properties": { + "clusterIdentifier": { + "description": "The identifier of the cluster to be resumed.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "clusterIdentifier" + ], + "type": "object" + }, "aws:redshift/SecurityGroupIngress:SecurityGroupIngress": { "language": { "nodejs": { @@ -206863,6 +212297,18 @@ "mapCase": false } } + }, + "lifecycleConfigArns": { + "description": "The Amazon Resource Name (ARN) of the Lifecycle Configurations.\n", + "items": { + "type": "string" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" } }, "type": "object" @@ -206912,6 +212358,18 @@ "mapCase": false } } + }, + "lifecycleConfigArns": { + "description": "The Amazon Resource Name (ARN) of the Lifecycle Configurations.\n", + "items": { + "type": "string" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" } }, "type": "object" @@ -207513,6 +212971,222 @@ }, "type": "object" }, + "aws:sagemaker/FlowDefinitionHumanLoopActivationConfig:FlowDefinitionHumanLoopActivationConfig": { + "properties": { + "humanLoopActivationConditionsConfig": { + "$ref": "#/types/aws:sagemaker/FlowDefinitionHumanLoopActivationConfigHumanLoopActivationConditionsConfig:FlowDefinitionHumanLoopActivationConfigHumanLoopActivationConditionsConfig", + "description": "defines under what conditions SageMaker creates a human loop. See Human Loop Activation Conditions Config details below.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object" + }, + "aws:sagemaker/FlowDefinitionHumanLoopActivationConfigHumanLoopActivationConditionsConfig:FlowDefinitionHumanLoopActivationConfigHumanLoopActivationConditionsConfig": { + "properties": { + "humanLoopActivationConditions": { + "description": "A JSON expressing use-case specific conditions declaratively. If any condition is matched, atomic tasks are created against the configured work team. For more information about how to structure the JSON, see [JSON Schema for Human Loop Activation Conditions in Amazon Augmented AI](https://docs.aws.amazon.com/sagemaker/latest/dg/a2i-human-fallback-conditions-json-schema.html).\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "humanLoopActivationConditions" + ], + "type": "object" + }, + "aws:sagemaker/FlowDefinitionHumanLoopConfig:FlowDefinitionHumanLoopConfig": { + "properties": { + "humanTaskUiArn": { + "description": "The Amazon Resource Name (ARN) of the human task user interface.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "publicWorkforceTaskPrice": { + "$ref": "#/types/aws:sagemaker/FlowDefinitionHumanLoopConfigPublicWorkforceTaskPrice:FlowDefinitionHumanLoopConfigPublicWorkforceTaskPrice", + "description": "Defines the amount of money paid to an Amazon Mechanical Turk worker for each task performed. See Public Workforce Task Price details below.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "taskAvailabilityLifetimeInSeconds": { + "description": "The length of time that a task remains available for review by human workers. Valid value range between `1` and `864000`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + }, + "taskCount": { + "description": "The number of distinct workers who will perform the same task on each object. Valid value range between `1` and `3`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + }, + "taskDescription": { + "description": "A description for the human worker task.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "taskKeywords": { + "description": "An array of keywords used to describe the task so that workers can discover the task.\n", + "items": { + "type": "string" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" + }, + "taskTimeLimitInSeconds": { + "description": "The amount of time that a worker has to complete a task. The default value is `3600` seconds.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + }, + "taskTitle": { + "description": "A title for the human worker task.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "workteamArn": { + "description": "The Amazon Resource Name (ARN) of the human task user interface. Amazon Resource Name (ARN) of a team of workers. For Public workforces see [AWS Docs](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-workforce-management-public.html).\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "humanTaskUiArn", + "taskCount", + "taskDescription", + "taskTitle", + "workteamArn" + ], + "type": "object" + }, + "aws:sagemaker/FlowDefinitionHumanLoopConfigPublicWorkforceTaskPrice:FlowDefinitionHumanLoopConfigPublicWorkforceTaskPrice": { + "properties": { + "amountInUsd": { + "$ref": "#/types/aws:sagemaker/FlowDefinitionHumanLoopConfigPublicWorkforceTaskPriceAmountInUsd:FlowDefinitionHumanLoopConfigPublicWorkforceTaskPriceAmountInUsd", + "description": "Defines the amount of money paid to an Amazon Mechanical Turk worker in United States dollars. See Amount In Usd details below.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object" + }, + "aws:sagemaker/FlowDefinitionHumanLoopConfigPublicWorkforceTaskPriceAmountInUsd:FlowDefinitionHumanLoopConfigPublicWorkforceTaskPriceAmountInUsd": { + "properties": { + "cents": { + "description": "The fractional portion, in cents, of the amount. Valid value range between `0` and `99`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + }, + "dollars": { + "description": "The whole number of dollars in the amount. Valid value range between `0` and `2`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + }, + "tenthFractionsOfACent": { + "description": "Fractions of a cent, in tenths. Valid value range between `0` and `9`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "integer" + } + }, + "type": "object" + }, + "aws:sagemaker/FlowDefinitionHumanLoopRequestSource:FlowDefinitionHumanLoopRequestSource": { + "properties": { + "awsManagedHumanLoopRequestSource": { + "description": "Specifies whether Amazon Rekognition or Amazon Textract are used as the integration source. Valid values are: `AWS/Rekognition/DetectModerationLabels/Image/V3` and `AWS/Textract/AnalyzeDocument/Forms/V1`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "awsManagedHumanLoopRequestSource" + ], + "type": "object" + }, + "aws:sagemaker/FlowDefinitionOutputConfig:FlowDefinitionOutputConfig": { + "properties": { + "kmsKeyId": { + "description": "The Amazon Key Management Service (KMS) key ARN for server-side encryption.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + }, + "s3OutputPath": { + "description": "The Amazon S3 path where the object containing human output will be made available.\n", + "language": { + "python": { + "mapCase": false + } + }, + "type": "string" + } + }, + "required": [ + "s3OutputPath" + ], + "type": "object" + }, "aws:sagemaker/HumanTaskUIUiTemplate:HumanTaskUIUiTemplate": { "language": { "nodejs": { @@ -207840,6 +213514,18 @@ "mapCase": false } } + }, + "lifecycleConfigArns": { + "description": "The Amazon Resource Name (ARN) of the Lifecycle Configurations.\n", + "items": { + "type": "string" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" } }, "required": [ @@ -207892,6 +213578,18 @@ "mapCase": false } } + }, + "lifecycleConfigArns": { + "description": "The Amazon Resource Name (ARN) of the Lifecycle Configurations.\n", + "items": { + "type": "string" + }, + "language": { + "python": { + "mapCase": false + } + }, + "type": "array" } }, "required": [ @@ -307632,5 +313330,5 @@ "type": "object" } }, - "version": "4.21.1" + "version": "4.26.0" } \ No newline at end of file diff --git a/pkg/codegen/internal/test/testdata/output-funcs-aws-pp/nodejs/output-funcs-aws.ts b/pkg/codegen/internal/test/testdata/output-funcs-aws-pp/nodejs/output-funcs-aws.ts new file mode 100644 index 000000000..9af59e234 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/output-funcs-aws-pp/nodejs/output-funcs-aws.ts @@ -0,0 +1,32 @@ +import * as pulumi from "@pulumi/pulumi"; +import * as aws from "@pulumi/aws"; + +const aws_vpc = new aws.ec2.Vpc("aws_vpc", { + cidrBlock: "10.0.0.0/16", + instanceTenancy: "default", +}); +const privateS3VpcEndpoint = new aws.ec2.VpcEndpoint("privateS3VpcEndpoint", { + vpcId: aws_vpc.id, + serviceName: "com.amazonaws.us-west-2.s3", +}); +const privateS3PrefixList = aws.ec2.getPrefixListOutput({ + prefixListId: privateS3VpcEndpoint.prefixListId, +}); +const bar = new aws.ec2.NetworkAcl("bar", {vpcId: aws_vpc.id}); +const privateS3NetworkAclRule = new aws.ec2.NetworkAclRule("privateS3NetworkAclRule", { + networkAclId: bar.id, + ruleNumber: 200, + egress: false, + protocol: "tcp", + ruleAction: "allow", + cidrBlock: privateS3PrefixList.cidrBlocks[0], + fromPort: 443, + toPort: 443, +}); +const amis = aws.ec2.getAmiIdsOutput({ + owners: [bar.id], + filters: [{ + name: bar.id, + values: ["pulumi*"], + }], +}); diff --git a/pkg/codegen/internal/test/testdata/output-funcs-aws-pp/output-funcs-aws.pp b/pkg/codegen/internal/test/testdata/output-funcs-aws-pp/output-funcs-aws.pp new file mode 100644 index 000000000..302bd591d --- /dev/null +++ b/pkg/codegen/internal/test/testdata/output-funcs-aws-pp/output-funcs-aws.pp @@ -0,0 +1,36 @@ +resource aws_vpc "aws:ec2/vpc:Vpc" { + cidrBlock = "10.0.0.0/16" + instanceTenancy = "default" +} + +resource privateS3VpcEndpoint "aws:ec2/vpcEndpoint:VpcEndpoint" { + vpcId = aws_vpc.id + serviceName = "com.amazonaws.us-west-2.s3" +} + +privateS3PrefixList = invoke("aws:ec2:getPrefixList", { + prefixListId = privateS3VpcEndpoint.prefixListId +}) + +resource bar "aws:ec2/networkAcl:NetworkAcl" { + vpcId = aws_vpc.id +} + +resource privateS3NetworkAclRule "aws:ec2/networkAclRule:NetworkAclRule" { + networkAclId = bar.id + ruleNumber = 200 + egress = false + protocol = "tcp" + ruleAction = "allow" + cidrBlock = privateS3PrefixList.cidrBlocks[0] + fromPort = 443 + toPort = 443 +} + +# A contrived example to test that helper nested records ( `filters` +# below) generate correctly when using output-versioned function +# invoke forms. +amis = invoke("aws:ec2:getAmiIds", { + owners = [bar.id] + filters = [{name=bar.id, values=["pulumi*"]}] +}) diff --git a/pkg/codegen/nodejs/gen_program_expressions.go b/pkg/codegen/nodejs/gen_program_expressions.go index 2699e2da9..26670f680 100644 --- a/pkg/codegen/nodejs/gen_program_expressions.go +++ b/pkg/codegen/nodejs/gen_program_expressions.go @@ -328,8 +328,11 @@ func (g *generator) GenFunctionCallExpression(w io.Writer, expr *model.FunctionC if module != "" { module = "." + module } + isOut := pcl.IsOutputVersionInvokeCall(expr) name := fmt.Sprintf("%s%s.%s", makeValidIdentifier(pkg), module, fn) - + if isOut { + name = fmt.Sprintf("%sOutput", name) + } g.Fprintf(w, "%s(", name) if len(expr.Args) >= 2 { g.Fgenf(w, "%.v", expr.Args[1]) diff --git a/pkg/codegen/pcl/invoke.go b/pkg/codegen/pcl/invoke.go index 5d1cf5205..430ed2421 100644 --- a/pkg/codegen/pcl/invoke.go +++ b/pkg/codegen/pcl/invoke.go @@ -1,4 +1,4 @@ -// Copyright 2016-2020, Pulumi Corporation. +// Copyright 2016-2021, Pulumi Corporation. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,9 +15,12 @@ package pcl import ( + "fmt" + "github.com/hashicorp/hcl/v2" "github.com/hashicorp/hcl/v2/hclsyntax" "github.com/pulumi/pulumi/pkg/v3/codegen/hcl2/model" + "github.com/pulumi/pulumi/pkg/v3/codegen/schema" "github.com/zclconf/go-cty/cty" ) @@ -42,46 +45,28 @@ func getInvokeToken(call *hclsyntax.FunctionCallExpr) (string, hcl.Range, bool) } func (b *binder) bindInvokeSignature(args []model.Expression) (model.StaticFunctionSignature, hcl.Diagnostics) { - signature := model.StaticFunctionSignature{ - Parameters: []model.Parameter{ - { - Name: "token", - Type: model.StringType, - }, - { - Name: "args", - Type: model.NewOptionalType(model.DynamicType), - }, - { - Name: "provider", - Type: model.NewOptionalType(model.StringType), - }, - }, - ReturnType: model.DynamicType, - } - if len(args) < 1 { - return signature, nil + return b.zeroSignature(), nil } template, ok := args[0].(*model.TemplateExpression) if !ok || len(template.Parts) != 1 { - return signature, hcl.Diagnostics{tokenMustBeStringLiteral(args[0])} + return b.zeroSignature(), hcl.Diagnostics{tokenMustBeStringLiteral(args[0])} } lit, ok := template.Parts[0].(*model.LiteralValueExpression) if !ok || model.StringType.ConversionFrom(lit.Type()) == model.NoConversion { - return signature, hcl.Diagnostics{tokenMustBeStringLiteral(args[0])} + return b.zeroSignature(), hcl.Diagnostics{tokenMustBeStringLiteral(args[0])} } token, tokenRange := lit.Value.AsString(), args[0].SyntaxNode().Range() pkg, _, _, diagnostics := DecomposeToken(token, tokenRange) if diagnostics.HasErrors() { - return signature, diagnostics + return b.zeroSignature(), diagnostics } pkgSchema, ok := b.options.packageCache.entries[pkg] if !ok { - return signature, hcl.Diagnostics{unknownPackage(pkg, tokenRange)} + return b.zeroSignature(), hcl.Diagnostics{unknownPackage(pkg, tokenRange)} } fn, ok := pkgSchema.functions[token] @@ -92,22 +77,153 @@ func (b *binder) bindInvokeSignature(args []model.Expression) (model.StaticFunct } } if !ok { - return signature, hcl.Diagnostics{unknownFunction(token, tokenRange)} + return b.zeroSignature(), hcl.Diagnostics{unknownFunction(token, tokenRange)} } - // Create args and result types for the schema. - if fn.Inputs == nil { - signature.Parameters[1].Type = model.NewOptionalType(model.NewObjectType(map[string]model.Type{})) - } else { - signature.Parameters[1].Type = b.schemaTypeToType(fn.Inputs) + sig, err := b.signatureForArgs(fn, args[1]) + if err != nil { + diag := hcl.Diagnostics{errorf(tokenRange, "Invoke binding error: %v", err)} + return b.zeroSignature(), diag } - if fn.Outputs == nil { - signature.ReturnType = model.NewObjectType(map[string]model.Type{}) - } else { - signature.ReturnType = b.schemaTypeToType(fn.Outputs) - } - signature.ReturnType = model.NewPromiseType(signature.ReturnType) - - return signature, nil + return sig, nil +} + +func (b *binder) makeSignature(argsType, returnType model.Type) model.StaticFunctionSignature { + return model.StaticFunctionSignature{ + Parameters: []model.Parameter{ + { + Name: "token", + Type: model.StringType, + }, + { + Name: "args", + Type: argsType, + }, + { + Name: "provider", + Type: model.NewOptionalType(model.StringType), + }, + }, + ReturnType: returnType, + } +} + +func (b *binder) zeroSignature() model.StaticFunctionSignature { + return b.makeSignature(model.NewOptionalType(model.DynamicType), model.DynamicType) +} + +func (b *binder) signatureForArgs(fn *schema.Function, args model.Expression) (model.StaticFunctionSignature, error) { + if b.useOutputVersion(fn, args) { + return b.outputVersionSignature(fn) + } + return b.regularSignature(fn), nil +} + +// Heuristic to decide when to use `fnOutput` form of a function. Will +// conservatively prefer `false`. It only decides to return `true` if +// doing so avoids the need to introduce an `apply` form to +// accommodate `Output` args (`Promise` args do not count). +func (b *binder) useOutputVersion(fn *schema.Function, args model.Expression) bool { + if !fn.NeedsOutputVersion() { + // No code emitted for an `fnOutput` form, impossible. + return false + } + + outputFormParamType := b.schemaTypeToType(fn.Inputs.InputShape) + regularFormParamType := b.schemaTypeToType(fn.Inputs) + argsType := args.Type() + + if regularFormParamType.ConversionFrom(argsType) == model.NoConversion && + outputFormParamType.ConversionFrom(argsType) == model.SafeConversion && + model.ContainsOutputs(argsType) { + return true + } + + return false +} + +func (b *binder) regularSignature(fn *schema.Function) model.StaticFunctionSignature { + var argsType model.Type + if fn.Inputs == nil { + argsType = model.NewOptionalType(model.NewObjectType(map[string]model.Type{})) + } else { + argsType = b.schemaTypeToType(fn.Inputs) + } + + var returnType model.Type + if fn.Outputs == nil { + returnType = model.NewObjectType(map[string]model.Type{}) + } else { + returnType = b.schemaTypeToType(fn.Outputs) + } + + return b.makeSignature(argsType, model.NewPromiseType(returnType)) +} + +func (b *binder) outputVersionSignature(fn *schema.Function) (model.StaticFunctionSignature, error) { + if !fn.NeedsOutputVersion() { + return model.StaticFunctionSignature{}, fmt.Errorf("Function %s does not have an Output version", fn.Token) + } + + // Given `fn.NeedsOutputVersion()==true`, can assume `fn.Inputs != nil`, `fn.Outputs != nil`. + argsType := b.schemaTypeToType(fn.Inputs.InputShape) + returnType := b.schemaTypeToType(fn.Outputs) + return b.makeSignature(argsType, model.NewOutputType(returnType)), nil +} + +// Detects invoke calls that use an output version of a function. +func IsOutputVersionInvokeCall(call *model.FunctionCallExpression) bool { + if call.Name == Invoke { + // Currently binder.bindInvokeSignature will assign + // either DynamicType, a Promise, or an Output + // for the return type of an invoke. Output implies + // that an output version has been picked. + _, returnsOutput := call.Signature.ReturnType.(*model.OutputType) + return returnsOutput + } + return false +} + +// Pattern matches to recognize `__convert(objCons(..))` pattern that +// is used to annotate object constructors with appropriate nominal +// types. If the expression matches, returns true followed by the +// constructor expression and the appropriate type. +func RecognizeTypedObjectCons(theExpr model.Expression) (bool, *model.ObjectConsExpression, model.Type) { + expr, isFunc := theExpr.(*model.FunctionCallExpression) + if !isFunc { + return false, nil, nil + } + + if expr.Name != IntrinsicConvert { + return false, nil, nil + } + + if len(expr.Args) != 1 { + return false, nil, nil + } + + objCons, isObjCons := expr.Args[0].(*model.ObjectConsExpression) + if !isObjCons { + return false, nil, nil + } + + return true, objCons, expr.Type() +} + +// Pattern matches to recognize an encoded call to an output-versioned +// invoke, such as `invoke(token, __convert(objCons(..)))`. If +// matching, returns the `args` expression and its schema-bound type. +func RecognizeOutputVersionedInvoke( + expr *model.FunctionCallExpression, +) (bool, *model.ObjectConsExpression, model.Type) { + if !IsOutputVersionInvokeCall(expr) { + return false, nil, nil + } + + if len(expr.Args) < 2 { + return false, nil, nil + } + + return RecognizeTypedObjectCons(expr.Args[1]) }