在 AWS CDK 中,可以使用 lambda.Function
构造函数来创建 Lambda 函数。我们可以使用 lambda.Function
的 role
属性来指定 Lambda 函数的 IAM 角色。此外,我们还需要在 Lambda 函数中添加必要的权限来允许它访问其他 AWS 资源。对于这篇文章中的示例,我们需要允许 Lambda 函数访问 EFS 文件系统。
以下是通过 AWS CDK 为 Lambda 函数添加 EFS 挂载和 IAM 权限的示例代码:
from aws_cdk import (
aws_lambda as lambda_,
aws_iam as iam,
aws_ec2 as ec2,
aws_efs as efs,
core,
)
class LambdaEfsStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
# 创建 VPC
vpc = ec2.Vpc(self, 'MyVpc')
# 创建 EFS 文件系统
file_system = efs.FileSystem(
self, 'MyEfs',
vpc=vpc,
encrypted=True,
)
# 创建 Lambda 函数
lambda_fn = lambda_.Function(
self, 'MyLambda',
runtime=lambda_.Runtime.PYTHON_3_7,
code=lambda_.Code.from_asset('lambda'),
handler='hello.handler',
vpc=vpc,
filesystem=lambda_.FileSystem.from_efs_access_point(
file_system,
'MyAccessPoint',
// 指定挂载点的路径和权限
transit_encryption=efs.TransitEncryption.PLAINTEXT,
// 通过在 IAM 中引用 EFS 权限来授予 Lambda 对 EFS 的访问权限
security_groups=[],
allow_all_outbound=True,
),
// 创建 Lambda 函数的 IAM 角色
role=iam.Role(
self, 'MyLambdaRole',
assumed_by=iam.ServicePrincipal('lambda.amazonaws.com'),
managed_policies=[
iam.ManagedPolicy.from_aws_managed_policy_name('AWSLambdaExecute'),
],
),
)
// 向 EFS 文件系统的访问点添加 Lambda 函数所在的安全组以授予 Lambda 对 EFS 的访问权限
file_system.connections.allow_default_port_from(lambda_fn)
在上面的示例代码中,我们使用 aws_ec2.Vpc
类创建了一个 VPC,并使用 aws_efs.FileSystem
类创建了