【问题标题】:how to pass reference to existing VPC to a cloudformation template?如何将对现有 VPC 的引用传递给 cloudformation 模板?
【发布时间】:2020-10-22 13:40:09
【问题描述】:

我正在创建一个 cloudformation 模板,资源很少,有几个 lambda 函数,S3 存储桶。请参阅下面的代码,它正在进行中,到目前为止,我有一个 S3 存储桶和一个由 S3 触发的 lamda 函数。我们在我们的团队中定义了我们应该使用的 vpc。我想在该 vpc 下为我的 lambda 函数添​​加私有子网,并为 s3 存储桶分配公共子网。如何获取 vpc 的引用,并将其传递给我的模板并使用它?示例代码会有所帮助。

AWSTemplateFormatVersion: 2010-09-09
Resources:

  # S3 Bucket
  S3Bucket:
    Type: AWS::S3::Bucket

  # Functions
  S3-Lambda-trigger:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: .
      Handler: lambda.handler
      Description: s3 object creation triggers lambda
      Runtime: nodejs12.x
      Events:
        S3Bucket:
          Type: S3
          Properties:
            Bucket: !Ref S3Bucket
            Events: 's3:ObjectCreated:*'

  # Permissions
  Allow-lamda-invocation-s3:
    Type: AWS::Lambda::Permission
    Properties:
      Action: 'lambda:InvokeFunction'
      FunctionName: !Ref S3-Lambda-trigger
      Principal: s3.amazonaws.com
      SourceArn: !GetAtt S3Bucket.Arn

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation amazon-vpc


    【解决方案1】:

    如何获取 vpc 的引用,并将其传递给我的模板并使用它?

    一种方法是通过AWS-Specific Parameter Types,特别是AWS::EC2::VPC::Id,在Parameters 部分中。

    例如:

    AWSTemplateFormatVersion: 2010-09-09
    
    Parameters: 
    
      VPCId: 
        Type: AWS::EC2::VPC::Id
    
    Resources:
    
      MySubnet:
        Type: AWS::EC2::Subnet
        Properties: 
          # other properties
          VpcId: !Ref VPCId
    

    因此,在 AWS 控制台中创建堆栈时,您可以选择 existing VPCId 传递给模板。

    【讨论】:

    • 谢谢。想到一件事,我目前正在我的开发环境中进行设置,并计划稍后在 prod 中使用相同的模板。要使用相同的模板,两个环境中的 vpc id 需要相同?
    • @ozil 没问题。部署模板时将选择 VPCId。因此,您当时可以使用相同或不同的 VPC。如果 dev 和 prod 的 VPCId 相同,您还可以为参数指定 Default 值。希望这会有所帮助?
    猜你喜欢
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 2016-06-16
    • 2017-05-07
    • 2014-08-08
    • 1970-01-01
    • 2016-02-16
    相关资源
    最近更新 更多