Chilkat Online Tools

GetImage PureBasic Example

EC2 Image Builder

IncludeFile "CkJsonObject.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkRest.pb"
IncludeFile "CkAuthAws.pb"

Procedure ChilkatExample()

    ; This example requires the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    rest.i = CkRest::ckCreate()
    If rest.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success.i

    authAws.i = CkAuthAws::ckCreate()
    If authAws.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkAuthAws::setCkAccessKey(authAws, "AWS_ACCESS_KEY")
    CkAuthAws::setCkSecretKey(authAws, "AWS_SECRET_KEY")

    ; Don't forget to change the region to your particular region. (Also make the same change in the call to Connect below.)
    CkAuthAws::setCkRegion(authAws, "us-west-2")
    CkAuthAws::setCkServiceName(authAws, "imagebuilder")
    ; SetAuthAws causes Chilkat to automatically add the following headers: Authorization, X-Amz-Date
    CkRest::ckSetAuthAws(rest,authAws)

    ; URL: https://imagebuilder.us-west-2.amazonaws.com/
    ; Use the same region as specified above.
    success = CkRest::ckConnect(rest,"imagebuilder.us-west-2.amazonaws.com",443,1,1)
    If success <> 1
        Debug "ConnectFailReason: " + Str(CkRest::ckConnectFailReason(rest))
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        ProcedureReturn
    EndIf

    CkRest::ckAddHeader(rest,"Content-Type","application/x-amz-json-1.1")
    CkRest::ckAddHeader(rest,"X-Amz-Target","GetImage")

    sbResponseBody.i = CkStringBuilder::ckCreate()
    If sbResponseBody.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkRest::ckFullRequestNoBodySb(rest,"GET","/GetImage",sbResponseBody)
    If success <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        CkStringBuilder::ckDispose(sbResponseBody)
        ProcedureReturn
    EndIf

    respStatusCode.i = CkRest::ckResponseStatusCode(rest)
    Debug "response status code = " + Str(respStatusCode)
    If respStatusCode <> 200
        Debug "Response Header:"
        Debug CkRest::ckResponseHeader(rest)
        Debug "Response Body:"
        Debug CkStringBuilder::ckGetAsString(sbResponseBody)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        CkStringBuilder::ckDispose(sbResponseBody)
        ProcedureReturn
    EndIf

    jResp.i = CkJsonObject::ckCreate()
    If jResp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckLoadSb(jResp,sbResponseBody)

    ; The following code parses the JSON response.
    ; A sample JSON response is shown below the sample code.

    ; Use this online tool to generate parsing code from sample JSON:
    ; Generate Parsing Code from JSON

    componentArn.s
    j.i
    count_j.i
    name.s
    k.i
    count_k.i
    strVal.s
    deviceName.s
    DeleteOnTermination.i
    ebsEncrypted.i
    Iops.i
    ebsKmsKeyId.s
    SnapshotId.s
    Throughput.i
    VolumeSize.i
    VolumeType.s
    noDevice.s
    virtualName.s
    AmiTagsString.s
    amiDistributionConfigurationDescription.s
    amiDistributionConfigurationKmsKeyId.s
    amiDistributionConfigurationName.s
    containerDistributionConfigurationDescription.s
    TargetRepositoryRepositoryName.s
    TargetRepositoryService.s
    region.s
    DiskImageFormat.s
    RoleName.s
    S3Bucket.s
    S3Prefix.s
    accountId.s
    enabled.i
    LaunchTemplateId.s
    LaunchTemplateName.s
    LaunchTemplateVersion.s
    maxParallelLaunches.i
    TargetResourceCount.i
    launchTemplateId.s
    setDefaultVersion.i
    ebsDeleteOnTermination.i
    ebsIops.i
    ebsSnapshotId.s
    ebsThroughput.i
    ebsVolumeSize.i
    ebsVolumeType.s
    description.s
    image.s
    stateReason.s
    stateStatus.s

    Arn.s = CkJsonObject::ckStringOf(jResp,"image.arn")
    BuildType.s = CkJsonObject::ckStringOf(jResp,"image.buildType")
    ContainerRecipeArn.s = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.arn")
    ContainerType.s = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.containerType")
    DateCreated.s = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.dateCreated")
    Description.s = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.description")
    DockerfileTemplateData.s = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.dockerfileTemplateData")
    Encrypted.i = CkJsonObject::ckIntOf(jResp,"image.containerRecipe.encrypted")
    Image.s = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.instanceConfiguration.image")
    KmsKeyId.s = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.kmsKeyId")
    Name.s = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.name")
    Owner.s = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.owner")
    ParentImage.s = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.parentImage")
    Platform.s = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.platform")
    v_String.s = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.tags.string")
    RepositoryName.s = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.targetRepository.repositoryName")
    Service.s = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.targetRepository.service")
    Version.s = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.version")
    WorkingDirectory.s = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.workingDirectory")
    imageDateCreated.s = CkJsonObject::ckStringOf(jResp,"image.dateCreated")
    DistributionConfigurationArn.s = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.arn")
    DistributionConfigurationDateCreated.s = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.dateCreated")
    DateUpdated.s = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.dateUpdated")
    DistributionConfigurationDescription.s = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.description")
    DistributionConfigurationName.s = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.name")
    TagsString.s = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.tags.string")
    TimeoutMinutes.i = CkJsonObject::ckIntOf(jResp,"image.distributionConfiguration.timeoutMinutes")
    EnhancedImageMetadataEnabled.i = CkJsonObject::ckIntOf(jResp,"image.enhancedImageMetadataEnabled")
    UninstallAfterBuild.i = CkJsonObject::ckIntOf(jResp,"image.imageRecipe.additionalInstanceConfiguration.systemsManagerAgent.uninstallAfterBuild")
    UserDataOverride.s = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.additionalInstanceConfiguration.userDataOverride")
    ImageRecipeArn.s = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.arn")
    ImageRecipeDateCreated.s = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.dateCreated")
    ImageRecipeDescription.s = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.description")
    ImageRecipeName.s = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.name")
    ImageRecipeOwner.s = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.owner")
    ImageRecipeParentImage.s = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.parentImage")
    ImageRecipePlatform.s = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.platform")
    TagsString = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.tags.string")
    v_Type.s = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.type")
    ImageRecipeVersion.s = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.version")
    ImageRecipeWorkingDirectory.s = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.workingDirectory")
    ImageTestsEnabled.i = CkJsonObject::ckIntOf(jResp,"image.imageTestsConfiguration.imageTestsEnabled")
    ImageTestsConfigurationTimeoutMinutes.i = CkJsonObject::ckIntOf(jResp,"image.imageTestsConfiguration.timeoutMinutes")
    InfrastructureConfigurationArn.s = CkJsonObject::ckStringOf(jResp,"image.infrastructureConfiguration.arn")
    InfrastructureConfigurationDateCreated.s = CkJsonObject::ckStringOf(jResp,"image.infrastructureConfiguration.dateCreated")
    InfrastructureConfigurationDateUpdated.s = CkJsonObject::ckStringOf(jResp,"image.infrastructureConfiguration.dateUpdated")
    InfrastructureConfigurationDescription.s = CkJsonObject::ckStringOf(jResp,"image.infrastructureConfiguration.description")
    HttpPutResponseHopLimit.i = CkJsonObject::ckIntOf(jResp,"image.infrastructureConfiguration.instanceMetadataOptions.httpPutResponseHopLimit")
    HttpTokens.s = CkJsonObject::ckStringOf(jResp,"image.infrastructureConfiguration.instanceMetadataOptions.httpTokens")
    InstanceProfileName.s = CkJsonObject::ckStringOf(jResp,"image.infrastructureConfiguration.instanceProfileName")
    KeyPair.s = CkJsonObject::ckStringOf(jResp,"image.infrastructureConfiguration.keyPair")
    S3BucketName.s = CkJsonObject::ckStringOf(jResp,"image.infrastructureConfiguration.logging.s3Logs.s3BucketName")
    S3KeyPrefix.s = CkJsonObject::ckStringOf(jResp,"image.infrastructureConfiguration.logging.s3Logs.s3KeyPrefix")
    InfrastructureConfigurationName.s = CkJsonObject::ckStringOf(jResp,"image.infrastructureConfiguration.name")
    ResourceTagsString.s = CkJsonObject::ckStringOf(jResp,"image.infrastructureConfiguration.resourceTags.string")
    SnsTopicArn.s = CkJsonObject::ckStringOf(jResp,"image.infrastructureConfiguration.snsTopicArn")
    SubnetId.s = CkJsonObject::ckStringOf(jResp,"image.infrastructureConfiguration.subnetId")
    TagsString = CkJsonObject::ckStringOf(jResp,"image.infrastructureConfiguration.tags.string")
    TerminateInstanceOnFailure.i = CkJsonObject::ckIntOf(jResp,"image.infrastructureConfiguration.terminateInstanceOnFailure")
    imageName.s = CkJsonObject::ckStringOf(jResp,"image.name")
    OsVersion.s = CkJsonObject::ckStringOf(jResp,"image.osVersion")
    imagePlatform.s = CkJsonObject::ckStringOf(jResp,"image.platform")
    SourcePipelineArn.s = CkJsonObject::ckStringOf(jResp,"image.sourcePipelineArn")
    SourcePipelineName.s = CkJsonObject::ckStringOf(jResp,"image.sourcePipelineName")
    Reason.s = CkJsonObject::ckStringOf(jResp,"image.state.reason")
    Status.s = CkJsonObject::ckStringOf(jResp,"image.state.status")
    TagsString = CkJsonObject::ckStringOf(jResp,"image.tags.string")
    imageType.s = CkJsonObject::ckStringOf(jResp,"image.type")
    imageVersion.s = CkJsonObject::ckStringOf(jResp,"image.version")
    requestId.s = CkJsonObject::ckStringOf(jResp,"requestId")
    i.i = 0
    count_i.i = CkJsonObject::ckSizeOfArray(jResp,"image.containerRecipe.components")
    While i < count_i
        CkJsonObject::setCkI(jResp, i)
        componentArn = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.components[i].componentArn")
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"image.containerRecipe.components[i].parameters")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            name = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.components[i].parameters[j].name")
            k = 0
            count_k = CkJsonObject::ckSizeOfArray(jResp,"image.containerRecipe.components[i].parameters[j].value")
            While k < count_k
                CkJsonObject::setCkK(jResp, k)
                strVal = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.components[i].parameters[j].value[k]")
                k = k + 1
            Wend
            j = j + 1
        Wend
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jResp,"image.containerRecipe.instanceConfiguration.blockDeviceMappings")
    While i < count_i
        CkJsonObject::setCkI(jResp, i)
        deviceName = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.instanceConfiguration.blockDeviceMappings[i].deviceName")
        DeleteOnTermination = CkJsonObject::ckIntOf(jResp,"image.containerRecipe.instanceConfiguration.blockDeviceMappings[i].ebs.deleteOnTermination")
        ebsEncrypted = CkJsonObject::ckIntOf(jResp,"image.containerRecipe.instanceConfiguration.blockDeviceMappings[i].ebs.encrypted")
        Iops = CkJsonObject::ckIntOf(jResp,"image.containerRecipe.instanceConfiguration.blockDeviceMappings[i].ebs.iops")
        ebsKmsKeyId = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.instanceConfiguration.blockDeviceMappings[i].ebs.kmsKeyId")
        SnapshotId = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.instanceConfiguration.blockDeviceMappings[i].ebs.snapshotId")
        Throughput = CkJsonObject::ckIntOf(jResp,"image.containerRecipe.instanceConfiguration.blockDeviceMappings[i].ebs.throughput")
        VolumeSize = CkJsonObject::ckIntOf(jResp,"image.containerRecipe.instanceConfiguration.blockDeviceMappings[i].ebs.volumeSize")
        VolumeType = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.instanceConfiguration.blockDeviceMappings[i].ebs.volumeType")
        noDevice = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.instanceConfiguration.blockDeviceMappings[i].noDevice")
        virtualName = CkJsonObject::ckStringOf(jResp,"image.containerRecipe.instanceConfiguration.blockDeviceMappings[i].virtualName")
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jResp,"image.distributionConfiguration.distributions")
    While i < count_i
        CkJsonObject::setCkI(jResp, i)
        AmiTagsString = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].amiDistributionConfiguration.amiTags.string")
        amiDistributionConfigurationDescription = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].amiDistributionConfiguration.description")
        amiDistributionConfigurationKmsKeyId = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].amiDistributionConfiguration.kmsKeyId")
        amiDistributionConfigurationName = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].amiDistributionConfiguration.name")
        containerDistributionConfigurationDescription = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].containerDistributionConfiguration.description")
        TargetRepositoryRepositoryName = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].containerDistributionConfiguration.targetRepository.repositoryName")
        TargetRepositoryService = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].containerDistributionConfiguration.targetRepository.service")
        region = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].region")
        DiskImageFormat = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].s3ExportConfiguration.diskImageFormat")
        RoleName = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].s3ExportConfiguration.roleName")
        S3Bucket = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].s3ExportConfiguration.s3Bucket")
        S3Prefix = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].s3ExportConfiguration.s3Prefix")
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"image.distributionConfiguration.distributions[i].amiDistributionConfiguration.launchPermission.organizationalUnitArns")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            strVal = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].amiDistributionConfiguration.launchPermission.organizationalUnitArns[j]")
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"image.distributionConfiguration.distributions[i].amiDistributionConfiguration.launchPermission.organizationArns")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            strVal = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].amiDistributionConfiguration.launchPermission.organizationArns[j]")
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"image.distributionConfiguration.distributions[i].amiDistributionConfiguration.launchPermission.userGroups")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            strVal = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].amiDistributionConfiguration.launchPermission.userGroups[j]")
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"image.distributionConfiguration.distributions[i].amiDistributionConfiguration.launchPermission.userIds")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            strVal = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].amiDistributionConfiguration.launchPermission.userIds[j]")
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"image.distributionConfiguration.distributions[i].amiDistributionConfiguration.targetAccountIds")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            strVal = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].amiDistributionConfiguration.targetAccountIds[j]")
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"image.distributionConfiguration.distributions[i].containerDistributionConfiguration.containerTags")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            strVal = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].containerDistributionConfiguration.containerTags[j]")
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"image.distributionConfiguration.distributions[i].fastLaunchConfigurations")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            accountId = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].fastLaunchConfigurations[j].accountId")
            enabled = CkJsonObject::ckIntOf(jResp,"image.distributionConfiguration.distributions[i].fastLaunchConfigurations[j].enabled")
            LaunchTemplateId = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].fastLaunchConfigurations[j].launchTemplate.launchTemplateId")
            LaunchTemplateName = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].fastLaunchConfigurations[j].launchTemplate.launchTemplateName")
            LaunchTemplateVersion = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].fastLaunchConfigurations[j].launchTemplate.launchTemplateVersion")
            maxParallelLaunches = CkJsonObject::ckIntOf(jResp,"image.distributionConfiguration.distributions[i].fastLaunchConfigurations[j].maxParallelLaunches")
            TargetResourceCount = CkJsonObject::ckIntOf(jResp,"image.distributionConfiguration.distributions[i].fastLaunchConfigurations[j].snapshotConfiguration.targetResourceCount")
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"image.distributionConfiguration.distributions[i].launchTemplateConfigurations")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            accountId = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].launchTemplateConfigurations[j].accountId")
            launchTemplateId = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].launchTemplateConfigurations[j].launchTemplateId")
            setDefaultVersion = CkJsonObject::ckIntOf(jResp,"image.distributionConfiguration.distributions[i].launchTemplateConfigurations[j].setDefaultVersion")
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"image.distributionConfiguration.distributions[i].licenseConfigurationArns")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            strVal = CkJsonObject::ckStringOf(jResp,"image.distributionConfiguration.distributions[i].licenseConfigurationArns[j]")
            j = j + 1
        Wend
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jResp,"image.imageRecipe.blockDeviceMappings")
    While i < count_i
        CkJsonObject::setCkI(jResp, i)
        deviceName = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.blockDeviceMappings[i].deviceName")
        ebsDeleteOnTermination = CkJsonObject::ckIntOf(jResp,"image.imageRecipe.blockDeviceMappings[i].ebs.deleteOnTermination")
        ebsEncrypted = CkJsonObject::ckIntOf(jResp,"image.imageRecipe.blockDeviceMappings[i].ebs.encrypted")
        ebsIops = CkJsonObject::ckIntOf(jResp,"image.imageRecipe.blockDeviceMappings[i].ebs.iops")
        ebsKmsKeyId = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.blockDeviceMappings[i].ebs.kmsKeyId")
        ebsSnapshotId = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.blockDeviceMappings[i].ebs.snapshotId")
        ebsThroughput = CkJsonObject::ckIntOf(jResp,"image.imageRecipe.blockDeviceMappings[i].ebs.throughput")
        ebsVolumeSize = CkJsonObject::ckIntOf(jResp,"image.imageRecipe.blockDeviceMappings[i].ebs.volumeSize")
        ebsVolumeType = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.blockDeviceMappings[i].ebs.volumeType")
        noDevice = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.blockDeviceMappings[i].noDevice")
        virtualName = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.blockDeviceMappings[i].virtualName")
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jResp,"image.imageRecipe.components")
    While i < count_i
        CkJsonObject::setCkI(jResp, i)
        componentArn = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.components[i].componentArn")
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"image.imageRecipe.components[i].parameters")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            name = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.components[i].parameters[j].name")
            k = 0
            count_k = CkJsonObject::ckSizeOfArray(jResp,"image.imageRecipe.components[i].parameters[j].value")
            While k < count_k
                CkJsonObject::setCkK(jResp, k)
                strVal = CkJsonObject::ckStringOf(jResp,"image.imageRecipe.components[i].parameters[j].value[k]")
                k = k + 1
            Wend
            j = j + 1
        Wend
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jResp,"image.infrastructureConfiguration.instanceTypes")
    While i < count_i
        CkJsonObject::setCkI(jResp, i)
        strVal = CkJsonObject::ckStringOf(jResp,"image.infrastructureConfiguration.instanceTypes[i]")
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jResp,"image.infrastructureConfiguration.securityGroupIds")
    While i < count_i
        CkJsonObject::setCkI(jResp, i)
        strVal = CkJsonObject::ckStringOf(jResp,"image.infrastructureConfiguration.securityGroupIds[i]")
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jResp,"image.outputResources.amis")
    While i < count_i
        CkJsonObject::setCkI(jResp, i)
        accountId = CkJsonObject::ckStringOf(jResp,"image.outputResources.amis[i].accountId")
        description = CkJsonObject::ckStringOf(jResp,"image.outputResources.amis[i].description")
        image = CkJsonObject::ckStringOf(jResp,"image.outputResources.amis[i].image")
        name = CkJsonObject::ckStringOf(jResp,"image.outputResources.amis[i].name")
        region = CkJsonObject::ckStringOf(jResp,"image.outputResources.amis[i].region")
        stateReason = CkJsonObject::ckStringOf(jResp,"image.outputResources.amis[i].state.reason")
        stateStatus = CkJsonObject::ckStringOf(jResp,"image.outputResources.amis[i].state.status")
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jResp,"image.outputResources.containers")
    While i < count_i
        CkJsonObject::setCkI(jResp, i)
        region = CkJsonObject::ckStringOf(jResp,"image.outputResources.containers[i].region")
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"image.outputResources.containers[i].imageUris")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            strVal = CkJsonObject::ckStringOf(jResp,"image.outputResources.containers[i].imageUris[j]")
            j = j + 1
        Wend
        i = i + 1
    Wend

    ; A sample JSON response body parsed by the above code:

    ; {
    ;   "image": {
    ;     "arn": "string",
    ;     "buildType": "string",
    ;     "containerRecipe": {
    ;       "arn": "string",
    ;       "components": [
    ;         {
    ;           "componentArn": "string",
    ;           "parameters": [
    ;             {
    ;               "name": "string",
    ;               "value": [
    ;                 "string"
    ;               ]
    ;             }
    ;           ]
    ;         }
    ;       ],
    ;       "containerType": "string",
    ;       "dateCreated": "string",
    ;       "description": "string",
    ;       "dockerfileTemplateData": "string",
    ;       "encrypted": boolean,
    ;       "instanceConfiguration": {
    ;         "blockDeviceMappings": [
    ;           {
    ;             "deviceName": "string",
    ;             "ebs": {
    ;               "deleteOnTermination": boolean,
    ;               "encrypted": boolean,
    ;               "iops": number,
    ;               "kmsKeyId": "string",
    ;               "snapshotId": "string",
    ;               "throughput": number,
    ;               "volumeSize": number,
    ;               "volumeType": "string"
    ;             },
    ;             "noDevice": "string",
    ;             "virtualName": "string"
    ;           }
    ;         ],
    ;         "image": "string"
    ;       },
    ;       "kmsKeyId": "string",
    ;       "name": "string",
    ;       "owner": "string",
    ;       "parentImage": "string",
    ;       "platform": "string",
    ;       "tags": {
    ;         "string": "string"
    ;       },
    ;       "targetRepository": {
    ;         "repositoryName": "string",
    ;         "service": "string"
    ;       },
    ;       "version": "string",
    ;       "workingDirectory": "string"
    ;     },
    ;     "dateCreated": "string",
    ;     "distributionConfiguration": {
    ;       "arn": "string",
    ;       "dateCreated": "string",
    ;       "dateUpdated": "string",
    ;       "description": "string",
    ;       "distributions": [
    ;         {
    ;           "amiDistributionConfiguration": {
    ;             "amiTags": {
    ;               "string": "string"
    ;             },
    ;             "description": "string",
    ;             "kmsKeyId": "string",
    ;             "launchPermission": {
    ;               "organizationalUnitArns": [
    ;                 "string"
    ;               ],
    ;               "organizationArns": [
    ;                 "string"
    ;               ],
    ;               "userGroups": [
    ;                 "string"
    ;               ],
    ;               "userIds": [
    ;                 "string"
    ;               ]
    ;             },
    ;             "name": "string",
    ;             "targetAccountIds": [
    ;               "string"
    ;             ]
    ;           },
    ;           "containerDistributionConfiguration": {
    ;             "containerTags": [
    ;               "string"
    ;             ],
    ;             "description": "string",
    ;             "targetRepository": {
    ;               "repositoryName": "string",
    ;               "service": "string"
    ;             }
    ;           },
    ;           "fastLaunchConfigurations": [
    ;             {
    ;               "accountId": "string",
    ;               "enabled": boolean,
    ;               "launchTemplate": {
    ;                 "launchTemplateId": "string",
    ;                 "launchTemplateName": "string",
    ;                 "launchTemplateVersion": "string"
    ;               },
    ;               "maxParallelLaunches": number,
    ;               "snapshotConfiguration": {
    ;                 "targetResourceCount": number
    ;               }
    ;             }
    ;           ],
    ;           "launchTemplateConfigurations": [
    ;             {
    ;               "accountId": "string",
    ;               "launchTemplateId": "string",
    ;               "setDefaultVersion": boolean
    ;             }
    ;           ],
    ;           "licenseConfigurationArns": [
    ;             "string"
    ;           ],
    ;           "region": "string",
    ;           "s3ExportConfiguration": {
    ;             "diskImageFormat": "string",
    ;             "roleName": "string",
    ;             "s3Bucket": "string",
    ;             "s3Prefix": "string"
    ;           }
    ;         }
    ;       ],
    ;       "name": "string",
    ;       "tags": {
    ;         "string": "string"
    ;       },
    ;       "timeoutMinutes": number
    ;     },
    ;     "enhancedImageMetadataEnabled": boolean,
    ;     "imageRecipe": {
    ;       "additionalInstanceConfiguration": {
    ;         "systemsManagerAgent": {
    ;           "uninstallAfterBuild": boolean
    ;         },
    ;         "userDataOverride": "string"
    ;       },
    ;       "arn": "string",
    ;       "blockDeviceMappings": [
    ;         {
    ;           "deviceName": "string",
    ;           "ebs": {
    ;             "deleteOnTermination": boolean,
    ;             "encrypted": boolean,
    ;             "iops": number,
    ;             "kmsKeyId": "string",
    ;             "snapshotId": "string",
    ;             "throughput": number,
    ;             "volumeSize": number,
    ;             "volumeType": "string"
    ;           },
    ;           "noDevice": "string",
    ;           "virtualName": "string"
    ;         }
    ;       ],
    ;       "components": [
    ;         {
    ;           "componentArn": "string",
    ;           "parameters": [
    ;             {
    ;               "name": "string",
    ;               "value": [
    ;                 "string"
    ;               ]
    ;             }
    ;           ]
    ;         }
    ;       ],
    ;       "dateCreated": "string",
    ;       "description": "string",
    ;       "name": "string",
    ;       "owner": "string",
    ;       "parentImage": "string",
    ;       "platform": "string",
    ;       "tags": {
    ;         "string": "string"
    ;       },
    ;       "type": "string",
    ;       "version": "string",
    ;       "workingDirectory": "string"
    ;     },
    ;     "imageTestsConfiguration": {
    ;       "imageTestsEnabled": boolean,
    ;       "timeoutMinutes": number
    ;     },
    ;     "infrastructureConfiguration": {
    ;       "arn": "string",
    ;       "dateCreated": "string",
    ;       "dateUpdated": "string",
    ;       "description": "string",
    ;       "instanceMetadataOptions": {
    ;         "httpPutResponseHopLimit": number,
    ;         "httpTokens": "string"
    ;       },
    ;       "instanceProfileName": "string",
    ;       "instanceTypes": [
    ;         "string"
    ;       ],
    ;       "keyPair": "string",
    ;       "logging": {
    ;         "s3Logs": {
    ;           "s3BucketName": "string",
    ;           "s3KeyPrefix": "string"
    ;         }
    ;       },
    ;       "name": "string",
    ;       "resourceTags": {
    ;         "string": "string"
    ;       },
    ;       "securityGroupIds": [
    ;         "string"
    ;       ],
    ;       "snsTopicArn": "string",
    ;       "subnetId": "string",
    ;       "tags": {
    ;         "string": "string"
    ;       },
    ;       "terminateInstanceOnFailure": boolean
    ;     },
    ;     "name": "string",
    ;     "osVersion": "string",
    ;     "outputResources": {
    ;       "amis": [
    ;         {
    ;           "accountId": "string",
    ;           "description": "string",
    ;           "image": "string",
    ;           "name": "string",
    ;           "region": "string",
    ;           "state": {
    ;             "reason": "string",
    ;             "status": "string"
    ;           }
    ;         }
    ;       ],
    ;       "containers": [
    ;         {
    ;           "imageUris": [
    ;             "string"
    ;           ],
    ;           "region": "string"
    ;         }
    ;       ]
    ;     },
    ;     "platform": "string",
    ;     "sourcePipelineArn": "string",
    ;     "sourcePipelineName": "string",
    ;     "state": {
    ;       "reason": "string",
    ;       "status": "string"
    ;     },
    ;     "tags": {
    ;       "string": "string"
    ;     },
    ;     "type": "string",
    ;     "version": "string"
    ;   },
    ;   "requestId": "string"
    ; }


    CkRest::ckDispose(rest)
    CkAuthAws::ckDispose(authAws)
    CkStringBuilder::ckDispose(sbResponseBody)
    CkJsonObject::ckDispose(jResp)


    ProcedureReturn
EndProcedure