1.
मेरे कोड में, स्ट्रिंग "HelloWorldApi" एक रेफरी के रूप में बहुत कुछ उपयोग करता है।
क्या रिपीट स्ट्रिंग "HelloWorldApi" को बदलने के लिए मेरे परिभाषित पैरामीटर "APIName" का उपयोग करना संभव है,
ताकि जब मैं एक और स्टैक बनाऊं और एपीआई का नाम बदलूं तो मुझे उन स्ट्रिंग 1 को 1 से अपडेट करने की आवश्यकता नहीं है?

{
    "AWSTemplateFormatVersion": "2010-09-09",
    
    "Parameters": {
      "APIName": {
        "Type": "String",
        "Default": "HelloWorldApi"
      }
    },
    "Resources": {
      "HelloWorldApi": {
        "Type": "AWS::ApiGateway::RestApi",
        "Properties": {
          "Name": "hello-api",
          "Description": "API used for practice",
          "FailOnWarnings": true
        }
      },
      "APIAuthorizer" :{
        "Type" : "AWS::ApiGateway::Authorizer",
        "Properties" : {
            "RestApiId" : {
              "Ref": "HelloWorldApi"
            }
          }
      },
      "BannerDBModel": {
          "Type" : "AWS::ApiGateway::Model",
          "Properties" : {
              "Name" : "postBannerModel",
              "RestApiId" : {
                "Ref": "HelloWorldApi"
              },
              "Schema" : {
                "$schema": "http://json-schema.org/draft-04/schema#",
                "title": "ProductsInputModel",
                "type": "object",
                "properties": {
                    "url": {"type": "string"}
                }                
              }
           }
      },
      "PostRequestValidator": {
        "Type" : "AWS::ApiGateway::RequestValidator",
        "Properties" : {
            "Name" : "PostRequestValidator",
            "RestApiId" : {
                "Ref": "HelloWorldApi"
            }
        }
      },
      "BannerResource": {
        "Type": "AWS::ApiGateway::Resource",
        "Properties": {
            "RestApiId": {
                "Ref": "HelloWorldApi"
            },
            "ParentId": {
                "Fn::GetAtt": [
                    "HelloWorldApi",
                    "RootResourceId"
                ]
            },
            "PathPart": "banner"
        }
      },
      "getBannerMethod": {
        "Type": "AWS::ApiGateway::Method",
        "DependsOn": ["HelloWorldApi"],
        "Properties": {
          "RestApiId": {
            "Ref": "HelloWorldApi"
          },
          "ResourceId": {
            "Ref": "BannerResource"
          },
          "HttpMethod": "GET",
          "AuthorizationType": "NONE"
        }
      },
      "Deployment": {
          "DependsOn": ["HelloWorldApi"],
          "Type": "AWS::ApiGateway::Deployment",
          "Properties": {
            "RestApiId": {
              "Ref": "HelloWorldApi"
            }
          }
      }
    }
  }

2.
मान लें कि मैंने पहले ही नीचे दिए गए कोड के माध्यम से एक स्टैक बना लिया है, यदि APIName का डिफ़ॉल्ट मान गलती से हैलोवर्ल्ड पर सेट हो जाता है जो मूल संस्करण से अलग है, तो क्या मेरे द्वारा अपडेटस्टैक चलाने के तुरंत बाद त्रुटि दिखाई देगी?
तब क्या होगा? एक और एपीआई हैलोवर्ल्ड बनाया जा रहा है?

टिप्पणी के अनुसार अद्यतन कोड

{
    "AWSTemplateFormatVersion": "2010-09-09",
    
    "Parameters": {
      "RestAPI": {
        "Type": "String",
        "Default": "HelloWorldApi"
      }
    },
    "Resources": {
      "RestAPI": {
        "Type": "AWS::ApiGateway::RestApi",
        "Properties": {
          "Name": "hello-api",
          "Description": "API used for practice",
          "FailOnWarnings": true
        }
      },
      "APIAuthorizer" :{
        "Type" : "AWS::ApiGateway::Authorizer",
        "Properties" : {
            "RestApiId" : {
              "Ref": "RestAPI"
            }
          }
      },
      "BannerDBModel": {
          "Type" : "AWS::ApiGateway::Model",
          "Properties" : {
              "Name" : "postBannerModel",
              "RestApiId" : {
                "Ref": "RestAPI"
              },
              "Schema" : {
                "$schema": "http://json-schema.org/draft-04/schema#",
                "title": "ProductsInputModel",
                "type": "object",
                "properties": {
                    "url": {"type": "string"}
                }                
              }
           }
      }
    }
  }
2
CCCC 29 अक्टूबर 2020, 15:36

1 उत्तर

सबसे बढ़िया उत्तर

इस टेम्पलेट का पुन: उपयोग करने के लिए आपको HelloWorldApi नाम के संसाधन का नाम बदलकर कुछ और सामान्य करना चाहिए।

यदि आपने वर्तमान में संसाधन का नाम बदल दिया है और इसे फिर से तैनात करने का प्रयास किया है तो यह किसी भी संसाधन को हटा देगा जो HelloWorldApi एपीआई के साथ-साथ एपीआई को फिर से एपीआई को फिर से तैनात करते समय स्वयं एपीआई से जुड़ा हुआ है।

आप जिस स्ट्रिंग का उपयोग कर रहे हैं वह AWS::ApiGateway::RestApi संसाधन को संदर्भित कर रहा है, APIName पैरामीटर में मान नहीं। यदि आपने इस समय इस पैरामीटर मान को अपडेट किया है तो यह स्टैक को प्रभावित नहीं करेगा क्योंकि ऐसा प्रतीत होता है कि इसका उपयोग नहीं किया गया है।

संक्षेप में Resources में स्ट्रिंग HelloWorldApi का संदर्भ AWS::ApiGateway::RestApi संसाधन तार्किक नाम की बात कर रहा है।

सुनिश्चित करें कि संसाधन पैरामीटर के समान नाम साझा नहीं करते हैं।

टेम्पलेट नीचे जैसा दिखेगा

{
    "AWSTemplateFormatVersion": "2010-09-09",
    
    "Parameters": {
      "RestAPIName": {
        "Type": "String",
        "Default": "HelloWorldApi"
      }
    },
    "Resources": {
      "RestAPI": {
        "Type": "AWS::ApiGateway::RestApi",
        "Properties": {
          "Name": { "Ref": "RestAPIName" },
          "Description": "API used for practice",
          "FailOnWarnings": true
        }
      },
      "APIAuthorizer" :{
        "Type" : "AWS::ApiGateway::Authorizer",
        "Properties" : {
            "RestApiId" : {
              "Ref": "RestAPI"
            }
          }
      },
      "BannerDBModel": {
          "Type" : "AWS::ApiGateway::Model",
          "Properties" : {
              "Name" : "postBannerModel",
              "RestApiId" : {
                "Ref": "RestAPI"
              },
              "Schema" : {
                "$schema": "http://json-schema.org/draft-04/schema#",
                "title": "ProductsInputModel",
                "type": "object",
                "properties": {
                    "url": {"type": "string"}
                }                
              }
           }
      }
    }
  }
1
Chris Williams 29 अक्टूबर 2020, 17:15