Skip to content

Commit

Permalink
S3 Endpoint Resolver (#300)
Browse files Browse the repository at this point in the history
  • Loading branch information
waahm7 committed Jun 11, 2023
1 parent f5837e5 commit 5d912b0
Show file tree
Hide file tree
Showing 10 changed files with 5,653 additions and 9 deletions.
14 changes: 7 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ matrix.image }} build -p ${{ env.PACKAGE_NAME }}
linux-compiler-compat:
runs-on: ubuntu-20.04 # latest
runs-on: ubuntu-22.04 # latest
strategy:
matrix:
compiler:
Expand All @@ -59,10 +59,10 @@ jobs:
- name: Build ${{ env.PACKAGE_NAME }}
run: |
aws s3 cp s3://aws-crt-test-stuff/ci/${{ env.BUILDER_VERSION }}/linux-container-ci.sh ./linux-container-ci.sh && chmod a+x ./linux-container-ci.sh
./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ env.LINUX_BASE_IMAGE }} build -p ${{ env.PACKAGE_NAME }} --compiler=${{ matrix.compiler }} --cmake-extra=-DASSERT_LOCK_HELD=ON
./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ env.LINUX_BASE_IMAGE }} build -p ${{ env.PACKAGE_NAME }} --compiler=${{ matrix.compiler }} --cmake-extra=-DASSERT_LOCK_HELD=ON --cmake-extra=-DAWS_ENABLE_S3_ENDPOINT_RESOLVER=ON
clang-sanitizers:
runs-on: ubuntu-20.04 # latest
runs-on: ubuntu-22.04 # latest
strategy:
matrix:
sanitizers: [",thread", ",address,undefined"]
Expand All @@ -74,7 +74,7 @@ jobs:
./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ env.LINUX_BASE_IMAGE }} build -p ${{ env.PACKAGE_NAME }} --compiler=clang-11 --cmake-extra=-DENABLE_SANITIZERS=ON --cmake-extra=-DSANITIZERS="${{ matrix.sanitizers }}" --cmake-extra=-DASSERT_LOCK_HELD=ON
linux-shared-libs:
runs-on: ubuntu-20.04 # latest
runs-on: ubuntu-22.04 # latest
steps:
# We can't use the `uses: docker://image` version yet, GitHub lacks authentication for actions -> packages
- name: Build ${{ env.PACKAGE_NAME }}
Expand All @@ -83,7 +83,7 @@ jobs:
./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ env.LINUX_BASE_IMAGE }} build -p ${{ env.PACKAGE_NAME }} --cmake-extra=-DBUILD_SHARED_LIBS=ON --cmake-extra=-DASSERT_LOCK_HELD=ON
byo-crypto:
runs-on: ubuntu-20.04 # latest
runs-on: ubuntu-22.04 # latest
steps:
# We can't use the `uses: docker://image` version yet, GitHub lacks authentication for actions -> packages
- name: Build ${{ env.PACKAGE_NAME }}
Expand Down Expand Up @@ -130,7 +130,7 @@ jobs:
python .\aws-c-s3\build\deps\aws-c-common\scripts\appverifier_ctest.py --build_directory .\aws-c-s3\build\aws-c-s3
osx:
runs-on: macos-12 # latest
runs-on: macos-13 # latest
steps:
- name: Checkout Sources
uses: actions/checkout@v3
Expand All @@ -143,7 +143,7 @@ jobs:
# Test downstream repos.
# This should not be required because we can run into a chicken and egg problem if there is a change that needs some fix in a downstream repo.
downstream:
runs-on: ubuntu-20.04 # latest
runs-on: ubuntu-22.04 # latest
steps:
# We can't use the `uses: docker://image` version yet, GitHub lacks authentication for actions -> packages
- name: Build ${{ env.PACKAGE_NAME }}
Expand Down
12 changes: 10 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ endif()
option(ASSERT_LOCK_HELD "Enable ASSERT_SYNCED_DATA_LOCK_HELD for checking thread issue" OFF)
option(ENABLE_MOCK_SERVER_TESTS "Whether to run the integration tests that rely on pre-configured mock server" OFF)
option(ENABLE_MRAP_TESTS "Whether to run the integration tests that rely on pre-configured multi-region access point" OFF)
option(AWS_ENABLE_S3_ENDPOINT_RESOLVER "Whether to include the s3 endpoint resolver and related config files" OFF)

if (ASSERT_LOCK_HELD)
add_definitions(-DASSERT_LOCK_HELD)
Expand Down Expand Up @@ -52,6 +53,9 @@ file(GLOB AWS_S3_PRIVATE_HEADERS
file(GLOB AWS_S3_ROOT_SRC
"source/*.c"
)
file(GLOB AWS_S3_ENDPOINT_RESOLVER_SRC
"source/s3_endpoint_resolver/*.c"
)

if (WIN32)
if (MSVC)
Expand All @@ -75,9 +79,10 @@ file(GLOB S3_HEADERS

file(GLOB S3_SRC
${AWS_S3_ROOT_SRC}
${AWS_S3_MODEL_SRC}
${AWS_S3_EXTERNAL_SRC}
)
if (AWS_ENABLE_S3_ENDPOINT_RESOLVER)
list(APPEND S3_SRC ${AWS_S3_ENDPOINT_RESOLVER_SRC})
endif()

add_library(${PROJECT_NAME} ${S3_HEADERS} ${S3_SRC})
aws_set_common_properties(${PROJECT_NAME})
Expand All @@ -91,6 +96,9 @@ set_target_properties(${PROJECT_NAME} PROPERTIES VERSION 1.0.0)
set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION 0unstable)

target_compile_definitions(${PROJECT_NAME} PRIVATE -DCJSON_HIDE_SYMBOLS)
if (AWS_ENABLE_S3_ENDPOINT_RESOLVER)
target_compile_definitions(${PROJECT_NAME} PRIVATE "-DAWS_ENABLE_S3_ENDPOINT_RESOLVER")
endif()

target_include_directories(${PROJECT_NAME} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
Expand Down
12 changes: 12 additions & 0 deletions include/aws/s3/private/s3_endpoint_resolver.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifndef AWS_S3_ENDPOINT_RESOLVER_PRIVATE_H
#define AWS_S3_ENDPOINT_RESOLVER_PRIVATE_H

/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/

extern const struct aws_byte_cursor aws_s3_endpoint_resolver_partitions;
extern const struct aws_byte_cursor aws_s3_endpoint_rule_set;

#endif /* AWS_S3_ENDPOINT_RESOLVER_PRIVATE_H */
27 changes: 27 additions & 0 deletions include/aws/s3/s3_endpoint_resolver.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#ifndef AWS_S3_ENDPOINT_RESOLVER_H
#define AWS_S3_ENDPOINT_RESOLVER_H

/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/

#include <aws/s3/private/s3_endpoint_resolver.h>
#include <aws/s3/s3.h>
AWS_PUSH_SANE_WARNING_LEVEL

struct aws_endpoints_request_context;
struct aws_endpoints_rule_engine;
AWS_EXTERN_C_BEGIN

/**
* Creates a new S3 endpoint resolver.
* Warning: Before using this header, you have to enable it by
* setting cmake config AWS_ENABLE_S3_ENDPOINT_RESOLVER=ON
*/
AWS_S3_API
struct aws_endpoints_rule_engine *aws_s3_endpoint_resolver_new(struct aws_allocator *allocator);

AWS_EXTERN_C_END
AWS_POP_SANE_WARNING_LEVEL
#endif /* AWS_S3_ENDPOINT_RESOLVER_H */
116 changes: 116 additions & 0 deletions scripts/update_s3_endpoint_resolver_artifacts.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
# This script pulls latest 'partitions.json' and 's3-endpoint-rule-set.json' from Git.
# You will need a secret in secrets manager which has the 'ruleset-url' and 'ruleset-token'.
# It uses the latest files to generate 'source/s3_endpoint_resolver/aws_s3_endpoint_rule_set.c' and
# 'source/s3_endpoint_resolver/aws_s3_endpoint_resolver_partition.c'

import json
import boto3
import requests


def escape_char(c):
escape_dict = {
'\\': '\\\\',
'\'': '\\\'',
'\0': '\\0',
'\a': '\\a',
'\b': '\\b',
'\f': '\\f',
'\n': '\\n',
'\r': '\\r',
'\t': '\\t',
'\v': '\\v'
}

return escape_dict.get(c, c)


def get_header():
return """\
/**
* Copyright Amazon.com, Inc. or its affiliates.
* All Rights Reserved. SPDX-License-Identifier: Apache-2.0.
*/
#include <aws/s3/s3_endpoint_resolver.h>
/**
* This file is generated using scripts/update_s3_endpoint_resolver_artifacts.py.
* Do not modify directly. */
/* clang-format off */
"""


def generate_c_file_from_json(json_content, c_file_name, c_struct_name):
num_chars_per_line = 20

try:
# Compact the json
compact_json_str = json.dumps(json_content, separators=(',', ':'))
compact_c = []
for i in range(0, len(compact_json_str), num_chars_per_line):
compact_c.append(
', '.join("'{}'".format(escape_char(char)) for char in compact_json_str[i:i + num_chars_per_line]))

# Write json to a C file
with open(c_file_name, 'w') as f:
f.write(get_header())
f.write(f"static const char s_generated_array[] = {{\n\t")
f.write(",\n\t".join(compact_c))
f.write("};\n\n")

f.write(f"const struct aws_byte_cursor {c_struct_name} = {{\n\t")
f.write(f".len = {len(compact_json_str)},\n\t")
f.write(f".ptr = (uint8_t *) s_generated_array\n}};\n")

print(f"{c_file_name} has been created successfully.")

except Exception as e:
print(f"An error occurred: {e}")


def get_secret_from_secrets_manager(secret_name, region_name):
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name
)

try:
get_secret_value_response = client.get_secret_value(
SecretId=secret_name
)
except Exception as e:
raise e

return json.loads(get_secret_value_response['SecretString'])


def download_from_git(url, token=None):
headers = {'Accept': 'application/vnd.github+json'}
if token is not None:
headers['Authorization'] = f"Bearer {token}"
http_response = requests.get(url, headers=headers)
if http_response.status_code != 200:
raise Exception(f"HTTP Status code is {http_response.status_code}")

return json.loads(http_response.content.decode())


if __name__ == '__main__':
git_secret = get_secret_from_secrets_manager("s3/endpoint/resolver/artifacts/git", "us-east-1")

rule_set = download_from_git(git_secret['ruleset-url'], git_secret['ruleset-token'])
partition = download_from_git('https://raw.githubusercontent.com/awslabs/smithy/main/smithy-rules-engine/src/main'
'/resources/software/amazon/smithy/rulesengine/language/partitions.json')

generate_c_file_from_json(
rule_set,
'source/s3_endpoint_resolver/aws_s3_endpoint_rule_set.c',
'aws_s3_endpoint_rule_set')

generate_c_file_from_json(
partition,
'source/s3_endpoint_resolver/aws_s3_endpoint_resolver_partition.c',
'aws_s3_endpoint_resolver_partitions')
104 changes: 104 additions & 0 deletions source/s3_endpoint_resolver/aws_s3_endpoint_resolver_partition.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
/**
* Copyright Amazon.com, Inc. or its affiliates.
* All Rights Reserved. SPDX-License-Identifier: Apache-2.0.
*/

#include <aws/s3/s3_endpoint_resolver.h>

/**
* This file is generated using scripts/update_s3_endpoint_resolver_artifacts.py.
* Do not modify directly. */
/* clang-format off */

static const char s_generated_array[] = {
'{', '"', 'v', 'e', 'r', 's', 'i', 'o', 'n', '"', ':', '"', '1', '.', '1', '"', ',', '"', 'p', 'a',
'r', 't', 'i', 't', 'i', 'o', 'n', 's', '"', ':', '[', '{', '"', 'i', 'd', '"', ':', '"', 'a', 'w',
's', '"', ',', '"', 'r', 'e', 'g', 'i', 'o', 'n', 'R', 'e', 'g', 'e', 'x', '"', ':', '"', '^', '(',
'u', 's', '|', 'e', 'u', '|', 'a', 'p', '|', 's', 'a', '|', 'c', 'a', '|', 'm', 'e', '|', 'a', 'f',
')', '-', '\\', '\\', 'w', '+', '-', '\\', '\\', 'd', '+', '$', '"', ',', '"', 'r', 'e', 'g', 'i', 'o',
'n', 's', '"', ':', '{', '"', 'a', 'f', '-', 's', 'o', 'u', 't', 'h', '-', '1', '"', ':', '{', '}',
',', '"', 'a', 'p', '-', 'e', 'a', 's', 't', '-', '1', '"', ':', '{', '}', ',', '"', 'a', 'p', '-',
'n', 'o', 'r', 't', 'h', 'e', 'a', 's', 't', '-', '1', '"', ':', '{', '}', ',', '"', 'a', 'p', '-',
'n', 'o', 'r', 't', 'h', 'e', 'a', 's', 't', '-', '2', '"', ':', '{', '}', ',', '"', 'a', 'p', '-',
'n', 'o', 'r', 't', 'h', 'e', 'a', 's', 't', '-', '3', '"', ':', '{', '}', ',', '"', 'a', 'p', '-',
's', 'o', 'u', 't', 'h', '-', '1', '"', ':', '{', '}', ',', '"', 'a', 'p', '-', 's', 'o', 'u', 't',
'h', 'e', 'a', 's', 't', '-', '1', '"', ':', '{', '}', ',', '"', 'a', 'p', '-', 's', 'o', 'u', 't',
'h', 'e', 'a', 's', 't', '-', '2', '"', ':', '{', '}', ',', '"', 'a', 'p', '-', 's', 'o', 'u', 't',
'h', 'e', 'a', 's', 't', '-', '3', '"', ':', '{', '}', ',', '"', 'c', 'a', '-', 'c', 'e', 'n', 't',
'r', 'a', 'l', '-', '1', '"', ':', '{', '}', ',', '"', 'e', 'u', '-', 'c', 'e', 'n', 't', 'r', 'a',
'l', '-', '1', '"', ':', '{', '}', ',', '"', 'e', 'u', '-', 'n', 'o', 'r', 't', 'h', '-', '1', '"',
':', '{', '}', ',', '"', 'e', 'u', '-', 's', 'o', 'u', 't', 'h', '-', '1', '"', ':', '{', '}', ',',
'"', 'e', 'u', '-', 'w', 'e', 's', 't', '-', '1', '"', ':', '{', '}', ',', '"', 'e', 'u', '-', 'w',
'e', 's', 't', '-', '2', '"', ':', '{', '}', ',', '"', 'e', 'u', '-', 'w', 'e', 's', 't', '-', '3',
'"', ':', '{', '}', ',', '"', 'm', 'e', '-', 'c', 'e', 'n', 't', 'r', 'a', 'l', '-', '1', '"', ':',
'{', '}', ',', '"', 'm', 'e', '-', 's', 'o', 'u', 't', 'h', '-', '1', '"', ':', '{', '}', ',', '"',
's', 'a', '-', 'e', 'a', 's', 't', '-', '1', '"', ':', '{', '}', ',', '"', 'u', 's', '-', 'e', 'a',
's', 't', '-', '1', '"', ':', '{', '}', ',', '"', 'u', 's', '-', 'e', 'a', 's', 't', '-', '2', '"',
':', '{', '}', ',', '"', 'u', 's', '-', 'w', 'e', 's', 't', '-', '1', '"', ':', '{', '}', ',', '"',
'u', 's', '-', 'w', 'e', 's', 't', '-', '2', '"', ':', '{', '}', ',', '"', 'a', 'w', 's', '-', 'g',
'l', 'o', 'b', 'a', 'l', '"', ':', '{', '}', '}', ',', '"', 'o', 'u', 't', 'p', 'u', 't', 's', '"',
':', '{', '"', 'n', 'a', 'm', 'e', '"', ':', '"', 'a', 'w', 's', '"', ',', '"', 'd', 'n', 's', 'S',
'u', 'f', 'f', 'i', 'x', '"', ':', '"', 'a', 'm', 'a', 'z', 'o', 'n', 'a', 'w', 's', '.', 'c', 'o',
'm', '"', ',', '"', 'd', 'u', 'a', 'l', 'S', 't', 'a', 'c', 'k', 'D', 'n', 's', 'S', 'u', 'f', 'f',
'i', 'x', '"', ':', '"', 'a', 'p', 'i', '.', 'a', 'w', 's', '"', ',', '"', 's', 'u', 'p', 'p', 'o',
'r', 't', 's', 'F', 'I', 'P', 'S', '"', ':', 't', 'r', 'u', 'e', ',', '"', 's', 'u', 'p', 'p', 'o',
'r', 't', 's', 'D', 'u', 'a', 'l', 'S', 't', 'a', 'c', 'k', '"', ':', 't', 'r', 'u', 'e', '}', '}',
',', '{', '"', 'i', 'd', '"', ':', '"', 'a', 'w', 's', '-', 'u', 's', '-', 'g', 'o', 'v', '"', ',',
'"', 'r', 'e', 'g', 'i', 'o', 'n', 'R', 'e', 'g', 'e', 'x', '"', ':', '"', '^', 'u', 's', '\\', '\\',
'-', 'g', 'o', 'v', '\\', '\\', '-', '\\', '\\', 'w', '+', '\\', '\\', '-', '\\', '\\', 'd', '+', '$', '"',
',', '"', 'r', 'e', 'g', 'i', 'o', 'n', 's', '"', ':', '{', '"', 'u', 's', '-', 'g', 'o', 'v', '-',
'w', 'e', 's', 't', '-', '1', '"', ':', '{', '}', ',', '"', 'u', 's', '-', 'g', 'o', 'v', '-', 'e',
'a', 's', 't', '-', '1', '"', ':', '{', '}', ',', '"', 'a', 'w', 's', '-', 'u', 's', '-', 'g', 'o',
'v', '-', 'g', 'l', 'o', 'b', 'a', 'l', '"', ':', '{', '}', '}', ',', '"', 'o', 'u', 't', 'p', 'u',
't', 's', '"', ':', '{', '"', 'n', 'a', 'm', 'e', '"', ':', '"', 'a', 'w', 's', '-', 'u', 's', '-',
'g', 'o', 'v', '"', ',', '"', 'd', 'n', 's', 'S', 'u', 'f', 'f', 'i', 'x', '"', ':', '"', 'a', 'm',
'a', 'z', 'o', 'n', 'a', 'w', 's', '.', 'c', 'o', 'm', '"', ',', '"', 'd', 'u', 'a', 'l', 'S', 't',
'a', 'c', 'k', 'D', 'n', 's', 'S', 'u', 'f', 'f', 'i', 'x', '"', ':', '"', 'a', 'p', 'i', '.', 'a',
'w', 's', '"', ',', '"', 's', 'u', 'p', 'p', 'o', 'r', 't', 's', 'F', 'I', 'P', 'S', '"', ':', 't',
'r', 'u', 'e', ',', '"', 's', 'u', 'p', 'p', 'o', 'r', 't', 's', 'D', 'u', 'a', 'l', 'S', 't', 'a',
'c', 'k', '"', ':', 't', 'r', 'u', 'e', '}', '}', ',', '{', '"', 'i', 'd', '"', ':', '"', 'a', 'w',
's', '-', 'c', 'n', '"', ',', '"', 'r', 'e', 'g', 'i', 'o', 'n', 'R', 'e', 'g', 'e', 'x', '"', ':',
'"', '^', 'c', 'n', '\\', '\\', '-', '\\', '\\', 'w', '+', '\\', '\\', '-', '\\', '\\', 'd', '+', '$', '"',
',', '"', 'r', 'e', 'g', 'i', 'o', 'n', 's', '"', ':', '{', '"', 'c', 'n', '-', 'n', 'o', 'r', 't',
'h', '-', '1', '"', ':', '{', '}', ',', '"', 'c', 'n', '-', 'n', 'o', 'r', 't', 'h', 'w', 'e', 's',
't', '-', '1', '"', ':', '{', '}', ',', '"', 'a', 'w', 's', '-', 'c', 'n', '-', 'g', 'l', 'o', 'b',
'a', 'l', '"', ':', '{', '}', '}', ',', '"', 'o', 'u', 't', 'p', 'u', 't', 's', '"', ':', '{', '"',
'n', 'a', 'm', 'e', '"', ':', '"', 'a', 'w', 's', '-', 'c', 'n', '"', ',', '"', 'd', 'n', 's', 'S',
'u', 'f', 'f', 'i', 'x', '"', ':', '"', 'a', 'm', 'a', 'z', 'o', 'n', 'a', 'w', 's', '.', 'c', 'o',
'm', '.', 'c', 'n', '"', ',', '"', 'd', 'u', 'a', 'l', 'S', 't', 'a', 'c', 'k', 'D', 'n', 's', 'S',
'u', 'f', 'f', 'i', 'x', '"', ':', '"', 'a', 'p', 'i', '.', 'a', 'm', 'a', 'z', 'o', 'n', 'w', 'e',
'b', 's', 'e', 'r', 'v', 'i', 'c', 'e', 's', '.', 'c', 'o', 'm', '.', 'c', 'n', '"', ',', '"', 's',
'u', 'p', 'p', 'o', 'r', 't', 's', 'F', 'I', 'P', 'S', '"', ':', 't', 'r', 'u', 'e', ',', '"', 's',
'u', 'p', 'p', 'o', 'r', 't', 's', 'D', 'u', 'a', 'l', 'S', 't', 'a', 'c', 'k', '"', ':', 't', 'r',
'u', 'e', '}', '}', ',', '{', '"', 'i', 'd', '"', ':', '"', 'a', 'w', 's', '-', 'i', 's', 'o', '"',
',', '"', 'r', 'e', 'g', 'i', 'o', 'n', 'R', 'e', 'g', 'e', 'x', '"', ':', '"', '^', 'u', 's', '\\',
'\\', '-', 'i', 's', 'o', '\\', '\\', '-', '\\', '\\', 'w', '+', '\\', '\\', '-', '\\', '\\', 'd', '+', '$',
'"', ',', '"', 'o', 'u', 't', 'p', 'u', 't', 's', '"', ':', '{', '"', 'n', 'a', 'm', 'e', '"', ':',
'"', 'a', 'w', 's', '-', 'i', 's', 'o', '"', ',', '"', 'd', 'n', 's', 'S', 'u', 'f', 'f', 'i', 'x',
'"', ':', '"', 'c', '2', 's', '.', 'i', 'c', '.', 'g', 'o', 'v', '"', ',', '"', 's', 'u', 'p', 'p',
'o', 'r', 't', 's', 'F', 'I', 'P', 'S', '"', ':', 't', 'r', 'u', 'e', ',', '"', 's', 'u', 'p', 'p',
'o', 'r', 't', 's', 'D', 'u', 'a', 'l', 'S', 't', 'a', 'c', 'k', '"', ':', 'f', 'a', 'l', 's', 'e',
',', '"', 'd', 'u', 'a', 'l', 'S', 't', 'a', 'c', 'k', 'D', 'n', 's', 'S', 'u', 'f', 'f', 'i', 'x',
'"', ':', '"', 'c', '2', 's', '.', 'i', 'c', '.', 'g', 'o', 'v', '"', '}', ',', '"', 'r', 'e', 'g',
'i', 'o', 'n', 's', '"', ':', '{', '"', 'u', 's', '-', 'i', 's', 'o', '-', 'e', 'a', 's', 't', '-',
'1', '"', ':', '{', '}', ',', '"', 'u', 's', '-', 'i', 's', 'o', '-', 'w', 'e', 's', 't', '-', '1',
'"', ':', '{', '}', ',', '"', 'a', 'w', 's', '-', 'i', 's', 'o', '-', 'g', 'l', 'o', 'b', 'a', 'l',
'"', ':', '{', '}', '}', '}', ',', '{', '"', 'i', 'd', '"', ':', '"', 'a', 'w', 's', '-', 'i', 's',
'o', '-', 'b', '"', ',', '"', 'r', 'e', 'g', 'i', 'o', 'n', 'R', 'e', 'g', 'e', 'x', '"', ':', '"',
'^', 'u', 's', '\\', '\\', '-', 'i', 's', 'o', 'b', '\\', '\\', '-', '\\', '\\', 'w', '+', '\\', '\\', '-',
'\\', '\\', 'd', '+', '$', '"', ',', '"', 'o', 'u', 't', 'p', 'u', 't', 's', '"', ':', '{', '"', 'n',
'a', 'm', 'e', '"', ':', '"', 'a', 'w', 's', '-', 'i', 's', 'o', '-', 'b', '"', ',', '"', 'd', 'n',
's', 'S', 'u', 'f', 'f', 'i', 'x', '"', ':', '"', 's', 'c', '2', 's', '.', 's', 'g', 'o', 'v', '.',
'g', 'o', 'v', '"', ',', '"', 's', 'u', 'p', 'p', 'o', 'r', 't', 's', 'F', 'I', 'P', 'S', '"', ':',
't', 'r', 'u', 'e', ',', '"', 's', 'u', 'p', 'p', 'o', 'r', 't', 's', 'D', 'u', 'a', 'l', 'S', 't',
'a', 'c', 'k', '"', ':', 'f', 'a', 'l', 's', 'e', ',', '"', 'd', 'u', 'a', 'l', 'S', 't', 'a', 'c',
'k', 'D', 'n', 's', 'S', 'u', 'f', 'f', 'i', 'x', '"', ':', '"', 's', 'c', '2', 's', '.', 's', 'g',
'o', 'v', '.', 'g', 'o', 'v', '"', '}', ',', '"', 'r', 'e', 'g', 'i', 'o', 'n', 's', '"', ':', '{',
'"', 'u', 's', '-', 'i', 's', 'o', 'b', '-', 'e', 'a', 's', 't', '-', '1', '"', ':', '{', '}', ',',
'"', 'a', 'w', 's', '-', 'i', 's', 'o', '-', 'b', '-', 'g', 'l', 'o', 'b', 'a', 'l', '"', ':', '{',
'}', '}', '}', ']', '}'};

const struct aws_byte_cursor aws_s3_endpoint_resolver_partitions = {
.len = 1705,
.ptr = (uint8_t *) s_generated_array
};
Loading

0 comments on commit 5d912b0

Please sign in to comment.