2017-09-29 11 views
0

DependsOnが指定されているリソースは、依存するリソースが更新されると更新されるはずです。私はこれをいくつかのリソースについて見ていますが、カスタムリソースのために働いているようには見えません。DependsOnとCloudformカスタムリソース

私はAPIGatewayで作業しており、カスタムリソースを使用して、ステージに関連するリソースが更新されたときにステージを導入しようとしています。これは、含まれているAWS::ApiGateway::Stage & AWS::ApiGateway::Deploymentは、アップデートを展開するために必要なときにうまく機能していないようです。

は、私は次のテンプレート(参照しやすいように切り取ら)を持っている:私はwebhookEndPointMethodは何もwebhookEndPointMethodに変化していないにもかかわらず、更新されていることが分かりpipelineMgrStateMachineリソースを更新

<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> 

。予想通り。

ただし、pipelineMgrStageDeployerは更新されません。これはpipelineMgrStateMachineに直接pipelineMgrStageDeployerを従属させた場合でもそうです。

カスタムリソースがDependssOnリソースが更新されたときにカスタムリソースが更新されない理由についてのアイデアはありますか?他の考えや洞察が役に立つかもしれませんか?

おかげで、 ジョー

答えて

2

何のためにあるのかDependsOnに誤解があるようです。 DEPENDSONでCloudFormation DependsOn documentation

から

何が起こっているのか

を使用すると、特定のリソースの作成は別のものを次のように指定することができます属性。 DependsOn属性をリソースに追加すると、そのリソースはDependsOn属性で指定されたリソースの作成後にのみ作成されます。それはあなたのRequestTemplates

で暗黙の依存関係を持っているので、

あなたpipelineMgrStateMachineが更新されたとき、あなたのwebhookEndPointMethodはおそらく更新された理由は、"stateMachineArn": "${pipelineMgrStateMachine}"

がどのようにカスタムリソースがを更新させることができています

状態マネージャが更新されたときに、デプロイヤーのカスタムリソースの更新方法については、適切なあなたが実際に例えば、PipelineMgStateMachine: !Ref pipelineMgrStateMachineのように、それ以外には使用しないでカスタムリソースへのTY:

pipelineMgrStageDeployer: 
    Type: Custom::pipelineMgrStageDeployer 
    DependsOn: webhookEndPointMethod 
    Properties: 
    ServiceToken: !GetAtt apiGwStageDeployer.Arn 
    StageName: pipelinemgr 
    RestApiId: !Ref pipelineMgrGW 
    PipelineMgStateMachine: !Ref pipelineMgrStateMachine 
+0

を明確にするためにありがとうと参照が素晴らしい仕事を! DependsOnのドキュメントでこのメモを読んだので、私は混乱していました。 _スタック更新中、更新されたリソースに依存するリソースは自動的に更新されます。 AWS CloudFormationでは、自動的に更新されるリソースは変更されませんが、スタックポリシーがこれらのリソースに関連付けられている場合、アカウントにはそれらのリソースを更新する権限が必要です。_ 明らかに、それは私がそれが意味すると思ったことを意味しました。 – NimbusScale

関連する問題