Cloudformation 堆栈能否知道它是在创建还是在更新?
Can a Cloudformation stack know whether it's being created or updated?
我正在尝试创建一个资源,其中一个属性不是常量值。听起来像是堆栈参数的工作,只是它是一个字符串,在某些情况下可以采用 Ref 函数的形式。具体来说,如果是初始创建,我希望参数值是对另一个资源的 Ref,如果是后续更新,我希望它是对堆栈参数的 Ref。这可能吗?是否有函数或伪参数,如 AWS::CurrentAction
可以采用 create
和 update
或任何类似的值?
我认为这是应该避免的事情,但如果您找不到任何其他替代方案,我有一个解决方法。
这是一个带有存储桶名称的示例:
Parameters:
ExternalBucketName:
Type: String
Default: ''
Conditions:
ExternalBucketNameSpecified:
!Not [!Equals [!Ref ExternalBucketName, '']]
Resources:
CFManagedBucket:
Type: AWS::S3::Bucket
SomeResource:
Type: AWS::Resource::XYZ
Properties:
BucketName: !If [ExternalBucketNameSpecified, !Ref ExternalBucketNameSpecified, !Ref CFManagedBucket]
当需要使用此堆栈创建的存储桶时,只需将 ExternalBucketName
设置为空,堆栈将自动适应。
我正在尝试创建一个资源,其中一个属性不是常量值。听起来像是堆栈参数的工作,只是它是一个字符串,在某些情况下可以采用 Ref 函数的形式。具体来说,如果是初始创建,我希望参数值是对另一个资源的 Ref,如果是后续更新,我希望它是对堆栈参数的 Ref。这可能吗?是否有函数或伪参数,如 AWS::CurrentAction
可以采用 create
和 update
或任何类似的值?
我认为这是应该避免的事情,但如果您找不到任何其他替代方案,我有一个解决方法。
这是一个带有存储桶名称的示例:
Parameters:
ExternalBucketName:
Type: String
Default: ''
Conditions:
ExternalBucketNameSpecified:
!Not [!Equals [!Ref ExternalBucketName, '']]
Resources:
CFManagedBucket:
Type: AWS::S3::Bucket
SomeResource:
Type: AWS::Resource::XYZ
Properties:
BucketName: !If [ExternalBucketNameSpecified, !Ref ExternalBucketNameSpecified, !Ref CFManagedBucket]
当需要使用此堆栈创建的存储桶时,只需将 ExternalBucketName
设置为空,堆栈将自动适应。