aws-lambda - 在无服务器框架中创建可用于 Lambda 函数的 RDS 实例
问题描述
我有一个通过无服务器框架部署的 AWS Lambda 应用程序。它需要一个数据库,即我在 serverless.yamlresources
部分中包含的 CloudFormation。
在对 VPC、子网和安全组了解最少的情况下,我的目标如下:
- 使用 s 创建/更新 MySQL RDS 实例
serverless deploy
。 - Lambda 应用程序中的函数应该能够访问数据库。
- 该数据库应该可以通过密码公开访问,因此我可以从我的计算机连接 MySQL 工具,如 Sequel Ace。
到目前为止我已经尝试过:
我已经尝试使用以下无服务器配置进行此操作。它创建了数据库,但不满足#2 和#3。
我还尝试将serverless.yaml 中的provider.vpc.securityGroupIds
和设置provider.vpc.subnetIds
为 RDS 实例使用的相同,但无济于事。
无服务器.yaml
(相关章节)
service: myapp
provider:
name: aws
runtime: provided.al2
lambdaHashingVersion: 20201221
functions:
console:
handler: bin/console
timeout: 120 # in seconds
layers:
- ${bref:layer.php-80} # PHP
- ${bref:layer.console} # The "console" layer
resources:
Resources:
# RDS instance
ProductDatabase:
Type: AWS::RDS::DBInstance
Properties:
AllocatedStorage: 5
DBInstanceClass: db.t3.micro
DBName: myapp
Engine: mysql
EngineVersion: 8.0.25
MasterUsername: myappuser
MasterUserPassword: redacted
PubliclyAccessible: true
解决方案
这里有一篇很好的文章,解释了您需要的步骤。
为了让您的 Lambda 能够访问您的 AWS 资源,它需要位于同一个 VPC 中,并且其执行角色需要通过 IAM 角色/组具有适当的权限。
您还希望避免 RDS 向世界开放,因此您应该在 VPC 中创建所有这些。您可以将 lambda 函数附加到 VPC,然后通过安全组仅允许对 VPC 子网的 RDS 进行访问。
这将为您提供要求的第 1 步和第 2 步。
在同一个安全组中,您可以允许访问计算机的外部 IP 地址以执行第 3 步。您可以通过 CLI 进行配置,因此如果您没有静态 IP,则只需一秒钟即可添加。下面的 PowerShell 示例:
Grant-EC2SecurityGroupIngress -GroupId "sg-xxxxxxxxxx" -IpPermission @(123.123.123.123/32)
推荐阅读
- docker - 是否可以在 kubectl 云构建器中指定入口点?
- php - 如何在单个查询中使用索引进行多表连接?
- azure - Kubernetes:外部 IP 正在等待 AKS 上的某些服务(LoadBalancer)
- tensorflow - 任何新版本的 tf.placeholder?
- android - 在 kotlin android studio 中的片段之间传递数据
- python - 将变量分配给 urlopen(my_url) 时出错
- sql-server - 通过从 SSRS 前端获取用户输入来更新数据库表
- css - 模态没有覆盖整个文档
- reactjs - 如何在 React 应用程序的生产部署期间删除源文件
- codeblocks - resource.rc:没有这样的文件或目录