从部署到特定阶段排除 Lambda 函数
Exclude Lambda function from deploy to a particular stage
我试图排除 Lambda 函数通过无服务器部署到我在 AWS 中的 prod
阶段。
我的无服务器 yaml 中的一个片段看起来像 -
functions:
some-prod-function:
handler: prodFunction.handler
events:
- http:
path: /prod-function
method: post
some-dev-function:
handler: devFunction.handler
events:
- http:
path: /dev-function
method: post
有没有办法将 some-dev-function
排除在产品部署之外?
您可以将这些定义放在不同的 属性 上并使用变量来选择要使用的定义。
environment-functions:
prod:
some-prod-function:
handler: prodFunction.handler
events:
- http:
path: /prod-function
method: post
dev:
some-dev-function:
handler: devFunction.handler
events:
- http:
path: /dev-function
method: post
functions: ${self:environment-functions.${opt:stage}}
您可能需要根据您指定部署阶段的方式(${opt:stage}
或 ${env:stage}
)更改此设置。
我正在使用 SLS 1.32.0
我无法让 functions: ${self:environment-functions.${opt:stage}}
工作。 (不知道为什么)
它returns如下:
A valid service attribute to satisfy the declaration 'self:environment-functions.dev' could not be found.
然而,在 dashmug 的 回答中使用相同的逻辑,file
对我有用:
serverless.yml:
functions: ${file(serverless-${opt:stage}.yml)}
无服务器-dev.yml:
some-dev-function:
handler: devFunction.handler
events:
- http:
path: /dev-function
method: post
无服务器-prod.yml:
some-prod-function:
handler: prodFunction.handler
events:
- http:
path: /prod-function
method: post
如果您使用无服务器框架,您可以使用无服务器插件
serverless-plugin-ifelse
然后
plugins:
- serverless-plugin-ifelse
如果要排除就说func1
functions:
func1:
name: Function 1
handler: lambda.func1
events:
- http:
path: "path1"
method: "post"
authorizer:
arn: arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_0acCDefgh
func2:
name: Function 2
handler: lambda.func2
events:
- http:
path: "path2"
method: "post"
func3:
name: Function 3
handler: lambda.func2
events:
- http:
path: "path3"
method: "post"
美国东部 1 号。然后使用下面的代码片段
- If: '"${self:provider.region}" == "us-east-1"'
Exclude:
- functions.func1
例如创建一个文件
env-functions.yml
并添加如下内容
prod:
some-prod-function:
handler: prodFunction.handler
events:
- http:
path: /prod-function
method: post
dev:
some-dev-function:
handler: devFunction.handler
events:
- http:
path: /dev-function
method: post
在此之后 serverless.yml 设置
functions: ${file(env-functions.yml):${opt:stage, self:provider.stage}}
我试图排除 Lambda 函数通过无服务器部署到我在 AWS 中的 prod
阶段。
我的无服务器 yaml 中的一个片段看起来像 -
functions:
some-prod-function:
handler: prodFunction.handler
events:
- http:
path: /prod-function
method: post
some-dev-function:
handler: devFunction.handler
events:
- http:
path: /dev-function
method: post
有没有办法将 some-dev-function
排除在产品部署之外?
您可以将这些定义放在不同的 属性 上并使用变量来选择要使用的定义。
environment-functions:
prod:
some-prod-function:
handler: prodFunction.handler
events:
- http:
path: /prod-function
method: post
dev:
some-dev-function:
handler: devFunction.handler
events:
- http:
path: /dev-function
method: post
functions: ${self:environment-functions.${opt:stage}}
您可能需要根据您指定部署阶段的方式(${opt:stage}
或 ${env:stage}
)更改此设置。
我正在使用 SLS 1.32.0
我无法让 functions: ${self:environment-functions.${opt:stage}}
工作。 (不知道为什么)
它returns如下:
A valid service attribute to satisfy the declaration 'self:environment-functions.dev' could not be found.
然而,在 dashmug 的 回答中使用相同的逻辑,file
对我有用:
serverless.yml:
functions: ${file(serverless-${opt:stage}.yml)}
无服务器-dev.yml:
some-dev-function:
handler: devFunction.handler
events:
- http:
path: /dev-function
method: post
无服务器-prod.yml:
some-prod-function:
handler: prodFunction.handler
events:
- http:
path: /prod-function
method: post
如果您使用无服务器框架,您可以使用无服务器插件
serverless-plugin-ifelse
然后
plugins:
- serverless-plugin-ifelse
如果要排除就说func1
functions:
func1:
name: Function 1
handler: lambda.func1
events:
- http:
path: "path1"
method: "post"
authorizer:
arn: arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_0acCDefgh
func2:
name: Function 2
handler: lambda.func2
events:
- http:
path: "path2"
method: "post"
func3:
name: Function 3
handler: lambda.func2
events:
- http:
path: "path3"
method: "post"
美国东部 1 号。然后使用下面的代码片段
- If: '"${self:provider.region}" == "us-east-1"'
Exclude:
- functions.func1
例如创建一个文件
env-functions.yml
并添加如下内容
prod:
some-prod-function:
handler: prodFunction.handler
events:
- http:
path: /prod-function
method: post
dev:
some-dev-function:
handler: devFunction.handler
events:
- http:
path: /dev-function
method: post
在此之后 serverless.yml 设置
functions: ${file(env-functions.yml):${opt:stage, self:provider.stage}}