我有一个通过Serverless Framework部署的AWS应用程序。它需要一个数据库,我在serverless.yaml. needs的CloudFormation部分中包含了这个数据库。
由于对VPC、子网和安全组的了解最少,我的目标是:
serverless deploy创建/更新一个RDS实例。到目前为止我尝试过的:
我已经尝试了下面的无服务器配置。它创建了数据库,但没有实现#2和#3。
我还尝试将provider.vpc.securityGroupIds和provider.vpc.subnetIds在serverless.yaml中设置为RDS实例使用的相同类型,但没有效果。
serverless.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发布于 2021-11-09 01:35:04
有一篇很好的文章这里解释了您需要的步骤。
为了让Lambda能够访问AWS资源,它需要在同一个VPC中,并且它的执行角色需要通过IAM角色/组拥有适当的权限。
您还希望避免向世界开放您的RDS,因此您应该在VPC中创建所有这些。您可以将lambda函数附加到VPC,然后只允许通过安全组访问RDS到VPC子网。
这将使您获得所需的步骤1和步骤2。
在同一个安全组中,您可以允许访问计算机的外部IP地址以获得步骤3。您可以通过CLI配置此地址,因此如果没有静态IP,则只需添加一秒钟即可。下面是PowerShell示例:
Grant-EC2SecurityGroupIngress -GroupId "sg-xxxxxxxxxx" -IpPermission @(123.123.123.123/32)https://stackoverflow.com/questions/69878886
复制相似问题