Package: sagemaker-studio-image-build
SageMaker Docker BuildThis is a CLI for building Docker images in SageMaker Studio using AWS CodeBuild.UsageNavigate to the directory containing the Dockerfile and simply do:sm-dockerbuild.Any additional arguments supported withdocker buildare supportedsm-dockerbuild.--file/path/to/Dockerfile--build-argfoo=barBy default, the CodeBuild project will not run within a VPC, the image will be pushed to a repositorysagemakerstudiowith the taglatest, and use the Studio App's execution role and the default SageMaker Python SDK S3 bucketThese can be overridden with the relevant CLI options.sm-dockerbuild.--repositorymynewrepo:1.0--roleSampleDockerBuildRole--bucketsagemaker-us-east-1-326543455535--vpc-idvpc-0c70e76ef1c603b94--subnet-idssubnet-0d984f080338960bb,subnet-0ac3e96808c8092f2--security-group-idssg-0d31b4042f2902cd0The CLI will take care of packaging the current directory and uploading to S3, creating a CodeBuild project, starting a build with the S3 artifacts, tailing the build logs, and uploading the built image to ECR.InstallingInstall the CLI using pip.pipinstallsagemaker-studio-image-buildEnsure the execution role has a trust policy with CodeBuild.{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":["codebuild.amazonaws.com"]},"Action":"sts:AssumeRole"}]}The following permissions are required in the execution role to execute a build in CodeBuild and push the image to ECR{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["codebuild:DeleteProject","codebuild:CreateProject","codebuild:BatchGetBuilds","codebuild:StartBuild"],"Resource":"arn:aws:codebuild:*:*:project/sagemaker-studio*"},{"Effect":"Allow","Action":"logs:CreateLogStream","Resource":"arn:aws:logs:*:*:log-group:/aws/codebuild/sagemaker-studio*"},{"Effect":"Allow","Action":["logs:GetLogEvents","logs:PutLogEvents"],"Resource":"arn:aws:logs:*:*:log-group:/aws/codebuild/sagemaker-studio*:log-stream:*"},{"Effect":"Allow","Action":"logs:CreateLogGroup","Resource":"*"},{"Effect":"Allow","Action":["ecr:CreateRepository","ecr:BatchGetImage","ecr:CompleteLayerUpload","ecr:DescribeImages","ecr:DescribeRepositories","ecr:UploadLayerPart","ecr:ListImages","ecr:InitiateLayerUpload","ecr:BatchCheckLayerAvailability","ecr:PutImage"],"Resource":"arn:aws:ecr:*:*:repository/sagemaker-studio*"},{"Sid":"ReadAccessToPrebuiltAwsImages","Effect":"Allow","Action":["ecr:BatchGetImage","ecr:GetDownloadUrlForLayer"],"Resource":["arn:aws:ecr:*:763104351884:repository/*","arn:aws:ecr:*:217643126080:repository/*","arn:aws:ecr:*:727897471807:repository/*","arn:aws:ecr:*:626614931356:repository/*","arn:aws:ecr:*:683313688378:repository/*","arn:aws:ecr:*:520713654638:repository/*","arn:aws:ecr:*:462105765813:repository/*"]},{"Sid":"EcrAuthorizationTokenRetrieval","Effect":"Allow","Action":["ecr:GetAuthorizationToken"],"Resource":["*"]},{"Effect":"Allow","Action":["s3:GetObject","s3:DeleteObject","s3:PutObject"],"Resource":"arn:aws:s3:::sagemaker-*/*"},{"Effect":"Allow","Action":["s3:CreateBucket"],"Resource":"arn:aws:s3:::sagemaker*"},{"Effect":"Allow","Action":["iam:GetRole","iam:ListRoles"],"Resource":"*"},{"Effect":"Allow","Action":"iam:PassRole","Resource":"arn:aws:iam::*:role/*","Condition":{"StringLikeIfExists":{"iam:PassedToService":"codebuild.amazonaws.com"}}}]}If you need to run your CodeBuild project within a VPC, please add the following actions to your execution role that the CodeBuild Project will assume:{"Sid":"VpcAccessActions","Effect":"Allow","Action":["ec2:CreateNetworkInterface","ec2:CreateNetworkInterfacePermission","ec2:DescribeDhcpOptions","ec2:DescribeNetworkInterfaces","ec2:DeleteNetworkInterface","ec2:DescribeSubnets","ec2:DescribeSecurityGroups","ec2:DescribeVpcs"],"Resource":"*"}DevelopmentCheckout the repository.makeinstallTesting locallyTo build locally, use one of the example Dockerfiles in theexamplesdirectoryROLE_NAME=<<A role in your account to use in the CodeBuild build job>>(cd examples/basic_build && sm-docker build . --role ${ROLE_NAME})(cdexamples/build_with_args&&sm-dockerbuild.--role${ROLE_NAME}--fileDockerfile.args--build-argBASE_IMAGE=python:3.8)Testing on SageMaker StudioTo build a binary to use on SageMaker Studio, specify an S3 path and use thes3bundletarget.exportDEV_S3_PATH_PREFIX=s3://path/to/location
black.
make-ks3bundleFrom a "System Terminal" in SageMaker StudioexportDEV_S3_PATH_PREFIX=s3://path/to/location
awss3sync${DEV_S3_PATH_PREFIX}/sagemaker-docker-build/dist.pipinstallsagemaker_studio_image_build-x.y.z.tar.gzSecuritySeeCONTRIBUTINGfor more information.LicenseThis library is licensed under the MIT-0 License. See the LICENSE file.