Class: AWSCDK::CliCredentialsStackSynthesizer

Inherits:
StackSynthesizer
  • Object
show all
Includes:
IBoundStackSynthesizer, IReusableStackSynthesizer
Defined in:
cli_credentials_stack_synthesizer.rb

Overview

A synthesizer that uses conventional asset locations, but not conventional deployment roles.

Instead of assuming the bootstrapped deployment roles, all stack operations will be performed using the CLI's current credentials.

  • This synthesizer does not support deploying to accounts to which the CLI does not have credentials. It also does not support deploying using CDK Pipelines. For either of those features, use DefaultStackSynthesizer.
  • This synthesizer requires an S3 bucket and ECR repository with well-known names. To not depend on those, use LegacyStackSynthesizer.

Be aware that your CLI credentials must be valid for the duration of the entire deployment. If you are using session credentials, make sure the session lifetime is long enough.

By default, expects the environment to have been bootstrapped with just the staging resources of the Bootstrap Stack V2 (also known as "modern bootstrap stack"). You can override the default names using the synthesizer's construction properties.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(props = nil) ⇒ CliCredentialsStackSynthesizer

Returns a new instance of CliCredentialsStackSynthesizer.

Parameters:



28
29
30
31
32
# File 'cli_credentials_stack_synthesizer.rb', line 28

def initialize(props = nil)
  props = props.is_a?(Hash) ? ::AWSCDK::CliCredentialsStackSynthesizerProps.new(**props.transform_keys(&:to_sym)) : props
  Jsii::Type.check_type(props, JSON.parse(Base64.strict_decode64("eyJmcW4iOiJhd3MtY2RrLWxpYi5DbGlDcmVkZW50aWFsc1N0YWNrU3ludGhlc2l6ZXJQcm9wcyJ9")), "props") unless props.nil?
  Jsii::Object.instance_method(:initialize).bind(self).call(props)
end

Class Method Details

.jsii_overridable_methodsObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'cli_credentials_stack_synthesizer.rb', line 34

def self.jsii_overridable_methods
  {
    :bound_stack => { kind: :property, name: "boundStack", is_optional: false },
    :bootstrap_qualifier => { kind: :property, name: "bootstrapQualifier", is_optional: true },
    :cloud_formation_execution_role => { kind: :property, name: "cloudFormationExecutionRole", is_optional: true },
    :lookup_role => { kind: :property, name: "lookupRole", is_optional: true },
    :add_bootstrap_version_rule => { kind: :method, name: "addBootstrapVersionRule", is_optional: false },
    :add_docker_image_asset => { kind: :method, name: "addDockerImageAsset", is_optional: false },
    :add_file_asset => { kind: :method, name: "addFileAsset", is_optional: false },
    :bind => { kind: :method, name: "bind", is_optional: false },
    :cloud_formation_location_from_docker_image_asset => { kind: :method, name: "cloudFormationLocationFromDockerImageAsset", is_optional: false },
    :cloud_formation_location_from_file_asset => { kind: :method, name: "cloudFormationLocationFromFileAsset", is_optional: false },
    :emit_artifact => { kind: :method, name: "emitArtifact", is_optional: false },
    :emit_stack_artifact => { kind: :method, name: "emitStackArtifact", is_optional: false },
    :synthesize => { kind: :method, name: "synthesize", is_optional: false },
    :synthesize_stack_template => { kind: :method, name: "synthesizeStackTemplate", is_optional: false },
    :synthesize_template => { kind: :method, name: "synthesizeTemplate", is_optional: false },
    :reusable_bind => { kind: :method, name: "reusableBind", is_optional: false },
  }
end

Instance Method Details

#add_bootstrap_version_rule(required_version, bootstrap_stack_version_ssm_parameter) ⇒ void

This method returns an undefined value.

Add a CfnRule to the bound stack that checks whether an SSM parameter exceeds a given version.

This will modify the template, so must be called before the stack is synthesized.

Parameters:

  • required_version (Numeric)
  • bootstrap_stack_version_ssm_parameter (String)


92
93
94
95
96
# File 'cli_credentials_stack_synthesizer.rb', line 92

def add_bootstrap_version_rule(required_version, bootstrap_stack_version_ssm_parameter)
  Jsii::Type.check_type(required_version, JSON.parse(Base64.strict_decode64("eyJwcmltaXRpdmUiOiJudW1iZXIifQ==")), "requiredVersion")
  Jsii::Type.check_type(bootstrap_stack_version_ssm_parameter, JSON.parse(Base64.strict_decode64("eyJwcmltaXRpdmUiOiJzdHJpbmcifQ==")), "bootstrapStackVersionSsmParameter")
  jsii_call_method("addBootstrapVersionRule", [required_version, bootstrap_stack_version_ssm_parameter])
end

#add_docker_image_asset(asset) ⇒ AWSCDK::DockerImageAssetLocation

Register a Docker Image Asset.

Returns the parameters that can be used to refer to the asset inside the template.

The synthesizer must rely on some out-of-band mechanism to make sure the given files are actually placed in the returned location before the deployment happens. This can be by writing the instructions to the asset manifest (for use by the cdk-assets tool), by relying on the CLI to upload files (legacy behavior), or some other operator controlled mechanism.



110
111
112
113
114
# File 'cli_credentials_stack_synthesizer.rb', line 110

def add_docker_image_asset(asset)
  asset = asset.is_a?(Hash) ? ::AWSCDK::DockerImageAssetSource.new(**asset.transform_keys(&:to_sym)) : asset
  Jsii::Type.check_type(asset, JSON.parse(Base64.strict_decode64("eyJmcW4iOiJhd3MtY2RrLWxpYi5Eb2NrZXJJbWFnZUFzc2V0U291cmNlIn0=")), "asset")
  jsii_call_method("addDockerImageAsset", [asset])
end

#add_file_asset(asset) ⇒ AWSCDK::FileAssetLocation

Register a File Asset.

Returns the parameters that can be used to refer to the asset inside the template.

The synthesizer must rely on some out-of-band mechanism to make sure the given files are actually placed in the returned location before the deployment happens. This can be by writing the instructions to the asset manifest (for use by the cdk-assets tool), by relying on the CLI to upload files (legacy behavior), or some other operator controlled mechanism.

Parameters:

Returns:



128
129
130
131
132
# File 'cli_credentials_stack_synthesizer.rb', line 128

def add_file_asset(asset)
  asset = asset.is_a?(Hash) ? ::AWSCDK::FileAssetSource.new(**asset.transform_keys(&:to_sym)) : asset
  Jsii::Type.check_type(asset, JSON.parse(Base64.strict_decode64("eyJmcW4iOiJhd3MtY2RrLWxpYi5GaWxlQXNzZXRTb3VyY2UifQ==")), "asset")
  jsii_call_method("addFileAsset", [asset])
end

#bind(stack) ⇒ void

This method returns an undefined value.

Bind to the stack this environment is going to be used on.

Must be called before any of the other methods are called.

Parameters:



140
141
142
143
# File 'cli_credentials_stack_synthesizer.rb', line 140

def bind(stack)
  Jsii::Type.check_type(stack, JSON.parse(Base64.strict_decode64("eyJmcW4iOiJhd3MtY2RrLWxpYi5TdGFjayJ9")), "stack")
  jsii_call_method("bind", [stack])
end

#bootstrap_qualifierString?

The qualifier used to bootstrap this stack.

Returns:

  • (String, nil)


67
68
69
# File 'cli_credentials_stack_synthesizer.rb', line 67

def bootstrap_qualifier()
  jsii_get_property("bootstrapQualifier")
end

#bound_stackAWSCDK::Stack

Retrieve the bound stack.

Fails if the stack hasn't been bound yet.

Returns:



60
61
62
# File 'cli_credentials_stack_synthesizer.rb', line 60

def bound_stack()
  jsii_get_property("boundStack")
end

#cloud_formation_execution_roleString?

The role that is passed to CloudFormation to execute the change set.

Returns:

  • (String, nil)


74
75
76
# File 'cli_credentials_stack_synthesizer.rb', line 74

def cloud_formation_execution_role()
  jsii_get_property("cloudFormationExecutionRole")
end

#cloud_formation_location_from_docker_image_asset(dest) ⇒ AWSCDK::DockerImageAssetLocation

Turn a docker asset location into a CloudFormation representation of that location.

If any of the fields contain placeholders, the result will be wrapped in a Fn.sub.



151
152
153
154
155
# File 'cli_credentials_stack_synthesizer.rb', line 151

def cloud_formation_location_from_docker_image_asset(dest)
  dest = dest.is_a?(Hash) ? ::AWSCDK::CloudAssemblySchema::DockerImageDestination.new(**dest.transform_keys(&:to_sym)) : dest
  Jsii::Type.check_type(dest, JSON.parse(Base64.strict_decode64("eyJmcW4iOiJhd3MtY2RrLWxpYi5jbG91ZF9hc3NlbWJseV9zY2hlbWEuRG9ja2VySW1hZ2VEZXN0aW5hdGlvbiJ9")), "dest")
  jsii_call_method("cloudFormationLocationFromDockerImageAsset", [dest])
end

#cloud_formation_location_from_file_asset(location) ⇒ AWSCDK::FileAssetLocation

Turn a file asset location into a CloudFormation representation of that location.

If any of the fields contain placeholders, the result will be wrapped in a Fn.sub.



163
164
165
166
167
# File 'cli_credentials_stack_synthesizer.rb', line 163

def cloud_formation_location_from_file_asset(location)
  location = location.is_a?(Hash) ? ::AWSCDK::CloudAssemblySchema::FileDestination.new(**location.transform_keys(&:to_sym)) : location
  Jsii::Type.check_type(location, JSON.parse(Base64.strict_decode64("eyJmcW4iOiJhd3MtY2RrLWxpYi5jbG91ZF9hc3NlbWJseV9zY2hlbWEuRmlsZURlc3RpbmF0aW9uIn0=")), "location")
  jsii_call_method("cloudFormationLocationFromFileAsset", [location])
end

#emit_artifact(session, options = nil) ⇒ void

This method returns an undefined value.

Write the CloudFormation stack artifact to the session.

Use default settings to add a CloudFormationStackArtifact artifact to the given synthesis session. The Stack artifact will control the settings for the CloudFormation deployment.

Parameters:



178
179
180
181
182
183
# File 'cli_credentials_stack_synthesizer.rb', line 178

def emit_artifact(session, options = nil)
  Jsii::Type.check_type(session, JSON.parse(Base64.strict_decode64("eyJmcW4iOiJhd3MtY2RrLWxpYi5JU3ludGhlc2lzU2Vzc2lvbiJ9")), "session")
  options = options.is_a?(Hash) ? ::AWSCDK::SynthesizeStackArtifactOptions.new(**options.transform_keys(&:to_sym)) : options
  Jsii::Type.check_type(options, JSON.parse(Base64.strict_decode64("eyJmcW4iOiJhd3MtY2RrLWxpYi5TeW50aGVzaXplU3RhY2tBcnRpZmFjdE9wdGlvbnMifQ==")), "options") unless options.nil?
  jsii_call_method("emitArtifact", [session, options])
end

#emit_stack_artifact(stack, session, options = nil) ⇒ void

Deprecated.

Use emitArtifact instead

This method returns an undefined value.

Write the stack artifact to the session.

Use default settings to add a CloudFormationStackArtifact artifact to the given synthesis session.

Parameters:



195
196
197
198
199
200
201
# File 'cli_credentials_stack_synthesizer.rb', line 195

def emit_stack_artifact(stack, session, options = nil)
  Jsii::Type.check_type(stack, JSON.parse(Base64.strict_decode64("eyJmcW4iOiJhd3MtY2RrLWxpYi5TdGFjayJ9")), "stack")
  Jsii::Type.check_type(session, JSON.parse(Base64.strict_decode64("eyJmcW4iOiJhd3MtY2RrLWxpYi5JU3ludGhlc2lzU2Vzc2lvbiJ9")), "session")
  options = options.is_a?(Hash) ? ::AWSCDK::SynthesizeStackArtifactOptions.new(**options.transform_keys(&:to_sym)) : options
  Jsii::Type.check_type(options, JSON.parse(Base64.strict_decode64("eyJmcW4iOiJhd3MtY2RrLWxpYi5TeW50aGVzaXplU3RhY2tBcnRpZmFjdE9wdGlvbnMifQ==")), "options") unless options.nil?
  jsii_call_method("emitStackArtifact", [stack, session, options])
end

#lookup_roleString?

The role used to lookup for this stack.

Returns:

  • (String, nil)


81
82
83
# File 'cli_credentials_stack_synthesizer.rb', line 81

def lookup_role()
  jsii_get_property("lookupRole")
end

#reusable_bind(stack) ⇒ AWSCDK::IBoundStackSynthesizer

Produce a bound Stack Synthesizer for the given stack.

This method may be called more than once on the same object.

Parameters:

Returns:



259
260
261
262
# File 'cli_credentials_stack_synthesizer.rb', line 259

def reusable_bind(stack)
  Jsii::Type.check_type(stack, JSON.parse(Base64.strict_decode64("eyJmcW4iOiJhd3MtY2RrLWxpYi5TdGFjayJ9")), "stack")
  jsii_call_method("reusableBind", [stack])
end

#synthesize(session) ⇒ void

This method returns an undefined value.

Synthesize the associated stack to the session.

Parameters:



207
208
209
210
# File 'cli_credentials_stack_synthesizer.rb', line 207

def synthesize(session)
  Jsii::Type.check_type(session, JSON.parse(Base64.strict_decode64("eyJmcW4iOiJhd3MtY2RrLWxpYi5JU3ludGhlc2lzU2Vzc2lvbiJ9")), "session")
  jsii_call_method("synthesize", [session])
end

#synthesize_stack_template(stack, session) ⇒ void

Deprecated.

Use synthesizeTemplate instead

This method returns an undefined value.

Have the stack write out its template.

Parameters:



218
219
220
221
222
# File 'cli_credentials_stack_synthesizer.rb', line 218

def synthesize_stack_template(stack, session)
  Jsii::Type.check_type(stack, JSON.parse(Base64.strict_decode64("eyJmcW4iOiJhd3MtY2RrLWxpYi5TdGFjayJ9")), "stack")
  Jsii::Type.check_type(session, JSON.parse(Base64.strict_decode64("eyJmcW4iOiJhd3MtY2RrLWxpYi5JU3ludGhlc2lzU2Vzc2lvbiJ9")), "session")
  jsii_call_method("synthesizeStackTemplate", [stack, session])
end

#synthesize_template(session, lookup_role_arn = nil, lookup_role_external_id = nil, lookup_role_additional_options = nil) ⇒ AWSCDK::FileAssetSource

Write the stack template to the given session.

Return a descriptor that represents the stack template as a file asset source, for adding to an asset manifest (if desired). This can be used to have the asset manifest system (cdk-assets) upload the template to S3 using the appropriate role, so that afterwards only a CloudFormation deployment is necessary.

If the template is uploaded as an asset, the stack_template_asset_object_url property should be set when calling emitArtifact.

If the template is NOT uploaded as an asset first and the template turns out to be >50KB, it will need to be uploaded to S3 anyway. At that point the credentials will be the same identity that is doing the UpdateStack call, which may not have the right permissions to write to S3.

Parameters:

  • session (AWSCDK::ISynthesisSession)
  • lookup_role_arn (String, nil) (defaults to: nil)
  • lookup_role_external_id (String, nil) (defaults to: nil)
  • lookup_role_additional_options (Hash{String => Object}, nil) (defaults to: nil)

Returns:



245
246
247
248
249
250
251
# File 'cli_credentials_stack_synthesizer.rb', line 245

def synthesize_template(session, lookup_role_arn = nil, lookup_role_external_id = nil, lookup_role_additional_options = nil)
  Jsii::Type.check_type(session, JSON.parse(Base64.strict_decode64("eyJmcW4iOiJhd3MtY2RrLWxpYi5JU3ludGhlc2lzU2Vzc2lvbiJ9")), "session")
  Jsii::Type.check_type(lookup_role_arn, JSON.parse(Base64.strict_decode64("eyJwcmltaXRpdmUiOiJzdHJpbmcifQ==")), "lookupRoleArn") unless lookup_role_arn.nil?
  Jsii::Type.check_type(lookup_role_external_id, JSON.parse(Base64.strict_decode64("eyJwcmltaXRpdmUiOiJzdHJpbmcifQ==")), "lookupRoleExternalId") unless lookup_role_external_id.nil?
  Jsii::Type.check_type(lookup_role_additional_options, JSON.parse(Base64.strict_decode64("eyJjb2xsZWN0aW9uIjp7ImVsZW1lbnR0eXBlIjp7InByaW1pdGl2ZSI6ImFueSJ9LCJraW5kIjoibWFwIn19")), "lookupRoleAdditionalOptions") unless lookup_role_additional_options.nil?
  jsii_call_method("synthesizeTemplate", [session, lookup_role_arn, lookup_role_external_id, lookup_role_additional_options])
end