Gems/AWSGameLift/cdkv1/aws_gamelift/support_stack.py (34 lines of code) (raw):
"""
Copyright (c) Contributors to the Open 3D Engine Project.
For complete copyright and license terms please see the LICENSE at the root of this distribution.
SPDX-License-Identifier: Apache-2.0 OR MIT
"""
from aws_cdk import aws_iam as iam
from aws_cdk import aws_s3_assets as assets
from aws_cdk import core
class SupportStack(core.Stack):
"""
The Build support stack
Defines AWS resources that help to create GameLift builds from local files
"""
def __init__(self, scope: core.Construct, id_: str,
stack_name: str, fleet_configurations: dict, **kwargs) -> None:
super().__init__(scope, id_, **kwargs)
self._stack_name = stack_name
self._support_iam_role = self._create_support_iam_role()
for index in range(len(fleet_configurations)):
# Update the fleet configuration to include the corresponding build id
fleet_configurations[index]['build_configuration']['storage_location'] = self._upload_build_asset(
fleet_configurations[index].get('build_configuration', {}), index)
def _create_support_iam_role(self) -> iam.Role:
"""
Create an IAM role for GameLift to read build files stored in S3.
:return: Generated IAM role.
"""
support_role = iam.Role(
self,
id=f'{self._stack_name}-SupportRole',
assumed_by=iam.ServicePrincipal(
service='gamelift.amazonaws.com'
)
)
return support_role
def _upload_build_asset(self, build_configuration: dict, identifier: int) -> dict:
"""
Upload the local build files to S3 for a creating GameLift build.
:param build_configuration: Configuration of the GameLift build.
:param identifier: Unique identifier of the asset which will be included in the resource id.
:return: Storage location of the S3 object.
"""
build_asset = assets.Asset(
self,
id=f'{self._stack_name}-Asset{identifier}',
path=build_configuration.get('build_path')
)
# Grant the support IAM role permission to read the asset
build_asset.grant_read(self._support_iam_role)
storage_location = {
'bucket': build_asset.s3_bucket_name,
'key': build_asset.s3_object_key,
'role_arn': self._support_iam_role.role_arn
}
return storage_location