in main.go [22:112]
func main() {
cliArgs := cli.CliArgs{}
cli.ParseArgs(&cliArgs)
cliArgs.Print()
// return retry.AddWithErrorCodes(retry.NewStandard(), (*smTypes.Mal)(nil).ErrorCode())
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion(cliArgs.Region), config.WithRetryer(func() awsStd.Retryer {
return retry.AddWithErrorCodes(retry.AddWithMaxBackoffDelay(retry.AddWithMaxAttempts(retry.NewStandard(), 5), 1*time.Second), "ValidationException", "ThrottlingException")
}))
if err != nil {
log.Fatal("Failed to load default aws config. Encountered Error ", err)
}
iamClient := iam.NewFromConfig(cfg)
smClient := sagemaker.NewFromConfig(cfg)
iotClient := iot.NewFromConfig(cfg)
s3Client := s3.NewFromConfig(cfg)
log.Println("Step-1 Creating S3 bucket for storing device fleet data...")
s3OutputLocation := aws.CreateS3Bucket(s3Client, &cliArgs.DeviceFleetBucket, &cliArgs.Account)
if s3OutputLocation == nil {
return
}
log.Println("Step-1 Completed.")
cliArgs.DeviceFleetBucket = *s3OutputLocation
log.Println("Step-2 Creating device fleet policy...")
fleetPolicy := aws.CreateDeviceFleetPolicy(iamClient, &cliArgs)
log.Println("Step-2 Completed.")
log.Println("Step-3 Creating device fleet bucket policy...")
bucketPolicy := aws.CreateDeviceFleetBucketPolicy(iamClient, &cliArgs)
log.Println("Step-3 Completed.")
log.Println("Step-4 Creating device fleet role...")
role := aws.CreateDeviceFleetRoleIfNotExists(iamClient, &cliArgs.DeviceFleet, &cliArgs.DeviceFleetRole, fleetPolicy, bucketPolicy)
log.Println("Step-4 Completed.")
log.Println("Step-5 Creating iot thing type...")
aws.CreateIotThingType(iotClient, &cliArgs.IotThingType)
log.Println("Step-5 Completed.")
log.Println("Step-6 Creating iot thing...")
aws.CreateIotThing(iotClient, &cliArgs.IotThingType, &cliArgs.IotThingName)
log.Println("Step-6 Completed.")
log.Println("Step-7 Creating device fleet...")
aws.CreateDeviceFleet(smClient, &cliArgs.DeviceFleet, role, s3OutputLocation)
log.Println("Step-7 Completed.")
log.Println("Step-8 Registering device...")
aws.RegisterDevice(smClient, &cliArgs.DeviceFleet, &cliArgs.DeviceName, &cliArgs.IotThingName, &cliArgs.TargetPlatform)
log.Println("Step-8 Completed.")
log.Println("Step-9 Downloading Agent...")
common.DownloadAgent(s3Client, &cliArgs)
log.Println("Step-9 Completed.")
log.Println("Step-10 Downloading code signing root certificate...")
common.DownloadSigningRootCert(s3Client, &cliArgs)
log.Println("Step-10 Completed.")
log.Println("Step-11 Creating iot certificates...")
certs := aws.CreateIOTCertificates(iotClient)
log.Println("Step-11 Completed.")
log.Println("Step-12 Attaching certificate to thing...")
aws.AttachThingToCertificate(iotClient, certs.CertificateArn, &cliArgs.IotThingName)
log.Println("Step-12 Completed.")
log.Println("Step-13 Configuring Agent...")
certsDirectory := filepath.Join(cliArgs.AgentDirectory, "iot-credentials")
aws.WriteCertificatesToFile(certs, &cliArgs.DeviceFleet, &cliArgs.DeviceName, &certsDirectory)
rootCAPath := filepath.Join(certsDirectory, "AmazonRootCA1.pem")
common.DownloadFile(rootCAPath, "https://www.amazontrust.com/repository/AmazonRootCA1.pem")
config := common.AgentConfig{}
configPath := filepath.Join(cliArgs.AgentDirectory, "sagemaker_edge_config.json")
config.FromCliArgs(&cliArgs)
roleAliasArn := aws.GetRoleAliasArn(smClient, &cliArgs.DeviceFleet)
aws.CreateAndAttachRoleAliasPolicy(iotClient, roleAliasArn, certs.CertificateArn, &cliArgs.IotThingName)
roleAliasSplits := strings.Split(*roleAliasArn, "/")
config.ProviderAwsIotCredEndpoint = *aws.GetIotCredentialProviderEndpoint(iotClient, &roleAliasSplits[1])
config.WriteToJson(&configPath)
agentBinaryPath := filepath.Join(cliArgs.AgentDirectory, "bin", "sagemaker_edge_agent_binary")
agentClientPath := filepath.Join(cliArgs.AgentDirectory, "bin", "sagemaker_edge_agent_client_example")
os.Chmod(agentBinaryPath, 0700)
os.Chmod(agentClientPath, 0700)
log.Println("Step-13 Completed.")
}