2017-09-07 12 views
0

でAWS ::サーバレス::機能をトリガーするAPIへの参照を取得し、私は、APIゲートウェイによってトリガラムダ関数とサーバレスアプリケーションを定義しています:CloudFormationテンプレートでCloudFormation

AWSTemplateFormatVersion: '2010-09-09' 
Transform: AWS::Serverless-2016-10-31 

Resources: 
    MyFunction: 
    Type: AWS::Serverless::Function 
    Properties: 
     # ... 
     Events: 
     GetStuff: 
      Type: Api 
      Properties: 
      Path: /stuff 
      Method: get 

これはGETリクエストを受信して​​ラムダに転送するように設定されたAPIゲートウェイリソースを生成します。

しかし、私は、テンプレートのOutputセクションにそのAPIのインスタンスを参照する方法を見つけ出すことはできません:hereが示唆したように、私は!GetAtt MyFunction.RootResourceIdを試してみたが、それはときに私の障害が生じた

Output: 
    MyGatewayId: 
    Description: Id of the auto-generated API Gateway resource 
    Value: # what do I put here? 

チェンジセットの作成に失敗しました:Waiter ChangeSetCreateComplete failed:Waiterに端末障害状態が発生しました。ステータス:FAILED。理由:無効なテンプレートリソースプロパティ 'MyGatewayId'

答えて

1

出力が可能これの鍵は、Serverless変換が何をしているのかを理解し、仕様に基づいて一連のリソースを生成することです。

あなたは確かにあなたのCloudFormationsリソースを確認することができますが、あなたのスペック

AWSTemplateFormatVersion: '2010-09-09' 
Transform: AWS::Serverless-2016-10-31 

Resources: 
    MyFunction: 
    Type: AWS::Serverless::Function 
    Properties: 
     # ... 
     Events: 
     GetStuff: 
      Type: Api 
      Properties: 
      Path: /stuff 
      Method: get 

に基づいてそれはあなたにいくつかのリソースを生成する必要があります。 Eventsのプロパティと、RestApiIdを指定しなかったことに基づいて、デフォルトのAPI Gateway Rest APIが生成され、ServerlessRestApiという論理IDが付与されます。私の最終目標は、余分なCLIのカップルは完全に罰金です呼び出して、出力にこれらのパラメータをデプロイスクリプトを取得することでしたので、そうOutputs

Output: 
    MyGatewayId: 
    Description: Id of the auto-generated API Gateway resource 
    Value: !Ref ServerlessRestApi 
1

テンプレートにAPIゲートウェイを指定した場合は、出力として持つことができます。

Resources: 
    MyAPI 
    Type AWS::Serverless::Api 
    Properties: 
     DefinitionUri: s3://<bucket>/swagger.yaml 

この方法では、出力に使用できるリソースがあります。ただし、これはまた、DefinitionUriが必須の属性なので、swaggerを使用する必要があります。

あなたは常に次のコマンドを使用してIDを抽出することができます。

aws cloudformation describe-stack-resources --stack-name <your-stack> \ 
    --query "StackResources[?ResourceType == 'AWS::ApiGateway::RestApi'].PhysicalResourceId" \ 
    --output text 

あなたも簡単で、あなたのAPIへのURLを抽出することができますことを意味している:あなたが本当になりたい場合は

aws cloudformation describe-stack-resources --stack-name <your-stack> \ 
    --query "StackResources[?ResourceType == 'AWS::ApiGateway::RestApi'].PhysicalResourceId" \ 
    --output text \ 
    | awk '{print "https://"$1".execute-api.eu-west-1.amazonaws.com/Prod"}' 
+0

に関するあなたの元の質問に答えます。ありがとう! –

関連する問題