gpt4 book ai didi

amazon-web-services - 自定义资源的云形成功能

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

我有一个 CF 模板,我在其中提供一个参数并进行条件检查以确定如何构造存储桶名称。如果是产品,则应该是“名称”。如果不是产品,则应该是“name_environment”,如下所示:

# # # # # # # # # # # # # # # #
# #
# Input Parameters #
# Prefix: t3st-acc0un7-123 #
# Stage: dev #
# #
# Expected S3 Name Output #
# t3st-acc0un7-123-dev #
# t3st-acc0un7-123-dev-2 #
# #
# # # # # # # # # # # # # # # #
# #
# Input Parameters #
# Prefix: t3st-acc0un7-123 #
# Stage: prod #
# #
# Expected S3 Name Output #
# t3st-acc0un7-123 #
# t3st-acc0un7-123-2 #
# #
# # # # # # # # # # # # # # # #

这是我执行此操作的模板:

Parameters:
Prefix:
Type: String
Default: t3st-acc0un7-123
Stage:
Type: String
AllowedPattern: "([a-z]|[0-9])+"

Conditions:
IsProdStage:
Fn::Equals:
- !Ref Stage
- prod

Resources:
TestBucket:
Type: AWS::S3::Bucket
Properties:
BucketName:
Fn::If:
- IsProdStage
- !Ref Prefix
- !Join
- '-'
-
- !Ref Prefix
- !Ref Stage

TestBucket2:
Type: AWS::S3::Bucket
Properties:
BucketName:
Fn::If:
- IsProdStage
- !Join
- '-'
-
- !Ref Prefix
- '2'
- !Join
- '-'
-
- !Ref Prefix
- !Ref Stage
- '2'

在第一个示例模板中,条件和连接逻辑是重复的。我基本上想将条件的值存储在某个地方以便从每个后续函数调用,而不是重复逻辑。

在下一个示例中,我尝试使用自定义资源来调用虚拟 lambda(因为需要 ServiceToken),以便我可以在 Value 上设置 Value 属性>TestCustomResource 基于条件和输入的自定义资源,并从我创建的其他资源中读取。

Parameters:
Prefix:
Type: String
Default: t3st-acc0un7-123
Stage:
Type: String
AllowedPattern: "([a-z]|[0-9])+"

Conditions:
IsProdStage:
Fn::Equals:
- !Ref Stage
- prod

Resources:
TestBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !GetAtt TestCustomResource.Value

TestBucket2:
Type: AWS::S3::Bucket
Properties:
BucketName: !Join
- '-'
-
- !GetAtt TestCustomResource.Value
- 2

TestCustomResource:
Type: Custom::Codswallop
Properties:
ServiceToken: !GetAtt DummyLambda.Arn
Value:
Fn::If:
- IsProdStage
- !Ref Prefix
- !Join
- '-'
-
- !Ref Prefix
- !Ref Stage

DummyLambda:
Type: "AWS::Lambda::Function"
Properties:
Code:
ZipFile: >
print("")
Handler: lambda_function.lambda_handler
Role: !GetAtt DummyRole.Arn
Runtime: python3.6

DummyRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- sts:AssumeRole
RoleName: DummyRole

我知道使用虚拟 lambda 有点麻烦,但这似乎是非常有用的功能,能够存储计算值以供模板使用。第二个示例给出如下错误:TestCustomResource - 自定义资源未能在预期时间内稳定。

(答案可能是使用多个依赖于先前 CF 输出值或嵌套模板的模板。)

最佳答案

请勿将自定义资源用于虚假目的。

操作完成后,该函数需要“回调”CloudFormation。您的自定义资源没有代码,因此它永远不会回调,因此您的模板将永远不会完成。

如果您的第一个示例有效,请坚持使用。您的第二个选择(除了不工作之外)对于 future 的 IT 人员来说很难理解和维护。

始终追求轻松的 future 维护,而不是优雅的黑客。 (由一个不得不维护其他人的优雅技巧的人说的。)

关于amazon-web-services - 自定义资源的云形成功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51148333/

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