根据我的理解,如果更新了依赖的资源,则应更新具有DependsOn指定的资源。我看到了一些资源,但它似乎并不适用于自定义资源。
我正在使用APIGateway并尝试使用自定义资源来部署与舞台相关的资源更新时的舞台。这是因为包含AWS::ApiGateway::Stage
&在需要部署更新时,AWS::ApiGateway::Deployment
似乎无法正常工作。
我有以下模板(剪切以便于参考):
<snip>
pipelineMgrStateMachine:
Type: AWS::StepFunctions::StateMachine
Properties:
<snip>
webhookEndPointMethod:
Type: AWS::ApiGateway::Method
DependsOn: pipelineMgrStateMachine
Properties:
RestApiId: !Ref pipelineMgrGW
ResourceId: !Ref webhookEndPointResource
HttpMethod: POST
AuthorizationType: NONE
Integration:
Type: AWS
IntegrationHttpMethod: POST
Uri: !Sub arn:aws:apigateway:${AWS::Region}:states:action/StartExecution
Credentials: !GetAtt pipelineMgrGWRole.Arn
PassthroughBehavior: WHEN_NO_TEMPLATES
RequestTemplates:
application/json: !Sub |
{
"input": "$util.escapeJavaScript($input.json('$'))",
"name": "$context.requestId",
"stateMachineArn": "${pipelineMgrStateMachine}"
}
IntegrationResponses:
- StatusCode: 200
MethodResponses:
- StatusCode: 200
pipelineMgrStageDeployer:
Type: Custom::pipelineMgrStageDeployer
DependsOn: webhookEndPointMethod
Properties:
ServiceToken: !GetAtt apiGwStageDeployer.Arn
StageName: pipelinemgr
RestApiId: !Ref pipelineMgrGW
<snip>
当我更新pipelineMgrStateMachine
资源时,我发现即使webhookEndPointMethod
中没有任何变化,webhookEndPointMethod
也会更新。正如所料。
但是,pipelineMgrStageDeployer
未更新。当pipelineMgrStageDeployer
直接依赖于pipelineMgrStateMachine
时,情况就是如此。
有关为什么在更新DependssOn资源时不更新自定义资源的想法?还有其他可能有用的想法或见解吗?
谢谢, 乔
答案 0 :(得分:2)
似乎对O(1)
的内容存在误解。
正在进行什么
来自CloudFormation DependsOn documentation
使用DependsOn属性,您可以指定特定资源的创建遵循另一个。将DependsOn属性添加到资源时,只有在创建DependsOn属性中指定的资源后才会创建该资源。
DependsOn
更新时webhookEndPointMethod
可能会更新的原因是因为它在pipelineMgrStateMachine
RequestTemplates
如何让自定义资源更新
关于如何在状态管理器更新时更新部署者自定义资源,您可以在自定义资源中添加一个您不会在其中实际使用的属性,例如"stateMachineArn": "${pipelineMgrStateMachine}"
,例如:
PipelineMgStateMachine: !Ref pipelineMgrStateMachine