Я хочу создать два приложения Elastic Beanstalk и базу данных RDS, все в CloudFormation, которые подключены как таковые (без других подключений)
- API Public Internet <-> (общедоступное приложение EB)
- API (общедоступное приложение EB) <-> Внутреннее приложение EB
- API (общедоступное приложение EB) <-> RDS база данных
Проблема, с которой я столкнулся в настоящее время, заключается в том, что соединение № 2 (API-интерфейс с внутренним EB) не работает. Я также хочу убедиться, что база данных (и внутреннее приложение EB) не являются общедоступными, , но я не уверен, так ли это в настоящее время.
Вот часть моего шаблона (с не относящимися к делу частями, такими как параметры и некоторые свойства - он разворачивается со всем включенным), исключая:
Resources:
### API ###
API:
Type: AWS::ElasticBeanstalk::Application
Properties:
ApplicationName: !Sub "${AWS::StackName}-api"
APIDeployment:
Type: AWS::ElasticBeanstalk::Environment
Properties:
ApplicationName: !Ref API
# Some properties excluded
OptionSettings:
- Namespace: aws:elasticbeanstalk:application:environment
OptionName: ALLOWED_HOSTS
Value: !Sub ".${AWS::Region}.elasticbeanstalk.com,.${AWS::Region}.elb.amazonaws.com"
- Namespace: aws:elasticbeanstalk:application:environment
OptionName: INTERNAL_API_URL
Value: !Sub "http://${InternalAPIDeployment.EndpointURL}"
# Database Access
- Namespace: aws:elasticbeanstalk:application:environment
OptionName: DATABASE_URL
Value: !Sub "postgres://${DatabaseUsername}:${DatabasePassword}@${APIDatabase.Endpoint.Address}:${APIDatabase.Endpoint.Port}/${DatabaseName}"
- Namespace: aws:autoscaling:launchconfiguration
OptionName: SecurityGroups
Value: !Ref InstanceSecurityGroup
### Internal API ###
InternalAPI:
Type: AWS::ElasticBeanstalk::Application
Properties:
ApplicationName: !Sub "${AWS::StackName}-quizgen"
InternalAPIDeployment:
Type: AWS::ElasticBeanstalk::Environment
Properties:
ApplicationName: !Ref InternalAPI
# Some properties excluded
OptionSettings:
- Namespace: aws:elb:loadbalancer
OptionName: ManagedSecurityGroup
Value: !GetAtt InternalAPISecurityGroup.GroupId
- Namespace: aws:elb:loadbalancer
OptionName: SecurityGroups
Value: !GetAtt InternalAPISecurityGroup.GroupId
### Database ###
APIDatabase:
Type: AWS::RDS::DBInstance
Properties:
# Some properties excluded
VPCSecurityGroups:
- !GetAtt APIDatabaseSecurityGroup.GroupId
DeletionPolicy: Snapshot
### Security Groups ###
InstanceSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: RDS allows ingress from EC2 instances in this group.
SecurityGroupIngress: []
APIDatabaseSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allows access to the provisioned database.
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: !Ref DatabasePort
ToPort: !Ref DatabasePort
SourceSecurityGroupName: !Ref InstanceSecurityGroup
InternalAPISecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allows access to the Internal API.
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
SourceSecurityGroupName: !Ref InstanceSecurityGroup
Любая помощь по настройке этого очень ценится!