How to deploy same cloudformation template in a multi region via AWS Deployment Framework (ADF)?

Viewed 10

I have a cloudformation template ( sample below) , which deployed manually via uploading to cloudformation service in aws works. now i want to use AWS Deployment Framework (ADF) to automate process of creating resource and i want this to be multi region , so that i don't have to upload this template in two different region to create resources . How can i deploy this to multi region?

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

Resources:
  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: prod
      DefinitionBody:
          swagger: "2.0"
          info:
            version: "2016-12-09T04:29:17Z"
            title: multiregion-api
          basePath: "/prod"
          schemes:
          - "https"
          paths:
           /get:
              get:
                consumes:
                - "application/json"
                produces:
                - "application/json"
                responses:
                  "200":
                    description: "200 response"
                    schema:
                      $ref: "#/definitions/Empty"
                    headers:
                      Access-Control-Allow-Origin:
                        type: "string"
                x-amazon-apigateway-integration:
                  responses:
                    default:
                      statusCode: "200"
                      responseParameters:
                        method.response.header.Access-Control-Allow-Origin: "'*'"
                  uri:
                    Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${MyFunc.Arn}/invocations
                  passthroughBehavior: "when_no_templates"
                  httpMethod: "POST"
                  contentHandling: "CONVERT_TO_TEXT"
                  type: "aws"
              options:
                consumes:
                - "application/json"
                produces:
                - "application/json"
                responses:
                  "200":
                    description: "200 response"
                    schema:
                      $ref: "#/definitions/Empty"
                    headers:
                      Access-Control-Allow-Origin:
                        type: "string"
                      Access-Control-Allow-Methods:
                        type: "string"
                      Access-Control-Allow-Headers:
                        type: "string"
                x-amazon-apigateway-integration:
                  responses:
                    default:
                      statusCode: "200"
                      responseParameters:
                        method.response.header.Access-Control-Allow-Methods: "'GET,OPTIONS'"
                        method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
                        method.response.header.Access-Control-Allow-Origin: "'*'"
                  requestTemplates:
                    application/json: "{\"statusCode\": 200}"
                  passthroughBehavior: "when_no_match"
                  type: "mock"
            /healthcheck:
              get:
                consumes:
                - "application/json"
                produces:
                - "application/json"
                responses:
                  "200":
                    description: "200 response"
                    schema:
                      $ref: "#/definitions/Empty"
                    headers:
                      Access-Control-Allow-Origin:
                        type: "string"
                x-amazon-apigateway-integration:
                  responses:
                    default:
                      statusCode: "200"
                      responseParameters:
                        method.response.header.Access-Control-Allow-Origin: "'*'"
                  uri:
                    Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${GetHealthcheck.Arn}/invocations
                  passthroughBehavior: "when_no_templates"
                  httpMethod: "POST"
                  contentHandling: "CONVERT_TO_TEXT"
                  type: "aws"
              options:
                consumes:
                - "application/json"
                produces:
                - "application/json"
                responses:
                  "200":
                    description: "200 response"
                    schema:
                      $ref: "#/definitions/Empty"
                    headers:
                      Access-Control-Allow-Origin:
                        type: "string"
                      Access-Control-Allow-Methods:
                        type: "string"
                      Access-Control-Allow-Headers:
                        type: "string"
                x-amazon-apigateway-integration:
                  responses:
                    default:
                      statusCode: "200"
                      responseParameters:
                        method.response.header.Access-Control-Allow-Methods: "'GET,OPTIONS'"
                        method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
                        method.response.header.Access-Control-Allow-Origin: "'*'"
                  requestTemplates:
                    application/json: "{\"statusCode\": 200}"
                  passthroughBehavior: "when_no_match"
                  type: "mock"
          definitions:
            Empty:
              type: "object"
              title: "Empty Schema"


  MyFunc:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: .
      Handler: app.lambda_handler
      Runtime: python2.7
      Events:
        GetResource:
          Type: Api
          Properties:
            RestApiId: !Ref MyApi
            Path:/get
            Method: get


  GetHealthcheck:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: .
      Handler: get_healthcheck.lambda_handler
      Runtime: python2.7
      Environment:
        Variables:
          STATUS: "ok"
      Events:
        GetResource:
          Type: Api
          Properties:
            RestApiId: !Ref MyApi
            Path: /healthcheck
            Method: get


Outputs:
  RestAPIID:
    Description: Rest API ID
    Value: !Ref MyApi
  HealthcheckApiUrl:
    Description: URL of your API endpoint
    Value: !Join
      - ''
      - - https://
        - !Ref MyApi
        - '.execute-api.'
        - !Ref 'AWS::Region'
        - '.amazonaws.com/prod'
0 Answers
Related