Cloudformation 堆栈能否知道它是在创建还是在更新?

Can a Cloudformation stack know whether it's being created or updated?

我正在尝试创建一个资源,其中一个属性不是常量值。听起来像是堆栈参数的工作,只是它是一个字符串,在某些情况下可以采用 Ref 函数的形式。具体来说,如果是初始创建,我希望参数值是对另一个资源的 Ref,如果是后续更新,我希望它是对堆栈参数的 Ref。这可能吗?是否有函数或伪参数,如 AWS::CurrentAction 可以采用 createupdate 或任何类似的值?

我认为这是应该避免的事情,但如果您找不到任何其他替代方案,我有一个解决方法。

这是一个带有存储桶名称的示例:

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 设置为空,堆栈将自动适应。