gpt4 book ai didi

amazon-web-services - AWS Cloudformation 有条件地添加资源属性

转载 作者:行者123 更新时间:2023-12-03 07:18:45 25 4
gpt4 key购买 nike

我正在将我们的cloudformation堆栈扩展到一个新区域,但希望在我们的elasticsearch集群中启用加密。但是,我只想为新区域启用它

我尝试过这个:

Conditions:
EnableEnhancedSecurity:
!Not
- !Equals
- 'us-east-1'
- { Ref: AWS::Region }

Resources:
MyTestingElasticSearchStore:
Type: "AWS::Elasticsearch::Domain"
Properties:
DomainName:
Fn::Sub: 'stack-${AWS::Region}-${Stage}'
ElasticsearchVersion: '7.1'
ElasticsearchClusterConfig:
EncryptionAtRestOptions:
Enabled:
!If
- EnableEnhancedSecurity
- 'true'
- 'false'
NodeToNodeEncryptionOptions:
Enabled:
!If
- EnableEnhancedSecurity
- 'true'
- 'false'
...

但当我尝试更新测试堆栈时,出现以下错误:当自定义命名的资源需要替换时,CloudFormation 无法更新堆栈。重命名 stack-us-west-1-test 并再次更新堆栈。

我认为这是因为我添加了属性(即使它们是“假”),所以我试图了解如何有条件地添加属性。

我正在尝试:


Conditions:
EnableEnhancedSecurity:
!Not
- !Equals
- 'us-east-1'
- { Ref: AWS::Region }

Resources:
MyTestingElasticSearchStore:
Type: "AWS::Elasticsearch::Domain"
Properties:
DomainName:
Fn::Sub: 'stack-${AWS::Region}-${Stage}'
ElasticsearchVersion: '7.1'
ElasticsearchClusterConfig:
...
Fn::If: # only add the properties if needed
- EnableEnhancedSecurity
-
EncryptionAtRestOptions:
Enabled: 'true'
NodeToNodeEncryptionOptions:
Enabled: 'true'
- { Ref: AWS::NoValue }

但遇到以下错误:

YAML Errors:
while parsing a block mapping
in "<unicode string>", line 76, column 5:
Type: "AWS::Elasticsearch::Domain"
^
expected <block end>, but found '<block sequence start>'
in "<unicode string>", line 148, column 6:
- { Ref: AWS::NoValue }

这可能吗?如果是这样,我如何在新区域中进行设置,而不通过 cloudformation 触及现有区域?

最佳答案

发生此错误的原因是您使用DomainName 为您的域提供了名称。来自 docs :

If you specify a name, you cannot perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name.

EncryptionAtRestOptionsEncryptionAtRestOptions需要更换。这意味着,由于您使用了 DomainName,因此您无法修改这些属性。

您必须拆除当前的 ES 域,并在没有 DomainName 的情况下重新创建它,才能进行替换更新。如果您想使用不同的 DomainName,您也可以重命名域来执行此操作,这也会删除现有的 ES 域并创建新的域。

有关条件的更新

您应该能够使用以下语法实现您想要的目标:

Resources:
MyTestingElasticSearchStore:
Type: "AWS::Elasticsearch::Domain"
Properties:
DomainName:
Fn::Sub: 'stack-${AWS::Region}-${Stage}'
ElasticsearchVersion: '7.1'
ElasticsearchClusterConfig:
EnableEnhancedSecurity:
Fn::If:
- EnableEnhancedSecurity
- { Enabled: 'true' }
- !Ref "AWS::NoValue"
EncryptionAtRestOptions:
Fn::If:
- EnableEnhancedSecurity
- { Enabled: 'true' }
- !Ref "AWS::NoValue"

关于amazon-web-services - AWS Cloudformation 有条件地添加资源属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65928934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com