CloudFormation如何按环境配置独立变量实现Lambda安全组按需绑定
问题解答
你不需要编写独立的资源定义,直接通过 CloudFormation 内置的 Fn::If 条件函数即可实现该需求。
你现有模板里已经定义好了环境判断条件,仅需要修改 BackupLambda 资源下 VpcConfig.SecurityGroupIds 的配置即可,修改后的完整模板片段如下:
Conditions: IsEnvProd: Fn::Equals [ !Ref Env, 'prod' ] IsEnvStage: Fn::Equals [ !Ref Env, 'stage' ] BackupLambda: Type: "AWS::Lambda::Function" Properties: Handler: "backup_lambda.lambda_handler" Role: !Ref Role Runtime: "python2.7" MemorySize: 128 Timeout: 120 Code: S3Bucket: !Ref BucketWithLambdaFunction S3Key: !Ref PathToLambdaFile VpcConfig: SecurityGroupIds: - !If - IsEnvProd - !Ref SG2 - !Ref SG1
逻辑说明
Fn::If 函数的逻辑为:
- 第一个参数传入判断条件
IsEnvProd - 第二个参数为条件成立(即当前环境是prod)时返回的值,这里是安全组SG2的引用
- 第三个参数为条件不成立(即当前环境是stage)时返回的值,这里是安全组SG1的引用
如果后续你需要为单个环境绑定多个安全组,直接在对应分支的数组中追加安全组引用即可。
内容的提问来源于stack exchange,提问作者abd
相关产品推荐
相关产品推荐

