Ссылка на имя корзины AWS S3 программно, а не жестко - PullRequest
0 голосов
/ 18 апреля 2020

Я работаю с AWS Amplify для разработки приложения iOS. Я добавил хранилище через S3 для размещения некоторых ресурсов и пытаюсь настроить приложение для их загрузки. Единственная проблема заключается в том, что каждый пример, который я вижу, имеет жестко закодированные имя и путь сегмента, но поскольку у меня несколько сред и иногда создаются новые среды, а к каждому сегменту добавляется имя среды, я не хочу переписывать этот сегмент. имя каждый раз.

Например, если я нахожусь в моей тестовой среде, имя корзины может быть assetsxxxxxx-test, но если я переключаюсь на новую среду, я могу сослаться на assetsyyyyy-dev, скажем.

Дело в том, что на имя сегмента ссылается aswconfiguration. json file:

"S3TransferUtility": {
    "Default": {
        "Bucket": "assetsxxxxx-test",
        "Region": "us-east-2"
    }
}

Поэтому мой вопрос заключается в том, как я могу ссылаться на это имя блока программным образом, чтобы при переписывании этого поля, когда я переключать среды, мне не придется менять свой код.

Спасибо

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Мне неясно, что вы используете для создания ваших ресурсов Amplify (cloudformation, terrraform,? Console? Et c) и, в свою очередь, создаете свой "aswconfiguration. json file". Но, похоже, вам нужно передать динамическую переменную c, которая очень достижима.

Если вы используете codepipeline, компоновку codebuild для развертывания ваших ресурсов и конфигурационный файл, вы можете использовать команды bash (sed или perl) на этапе codebuild для изменения переменной. Или пользовательскую лямбду, чтобы обновить содержимое файла и скопировать в S3, после чего вы передадите переменную dynamici c в параметр переменной среды.

Обычно, если это шаблон облачной информации, вы можете использовать псевдопараметр Ссылка ! Sub команда , а затем параметр будет объявлен на раннем этапе и будет ссылаться на любое окружение, например

"Bucket": "asssetsxxxxxx - $ {Environment}"

0 голосов
/ 24 апреля 2020

Я решил это. Для всех, кто еще интересуется, я все еще не уверен, есть ли поле, встроенное в AWS SDK, но я решил проанализировать файл awsconfiguration. json непосредственно в пользовательской структуре:

struct AWSConfigurationJSON: Codable{
    let S3TransferUtility: S3TransferUtility
}

struct S3TransferUtility: Codable{
    let Default: S3TransferUtilityDefault
}

struct S3TransferUtilityDefault: Codable{
    let Bucket: String
    let Region: String
}

а затем я прочитал файл и проанализировал JSON.

if let path = Bundle.main.path(forResource: "awsconfiguration", ofType: "json") {
            do{
                let data = try Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)
                let jsonResult = try JSONDecoder().decode(AWSConfigurationJSON.self, from: data)
                print(jsonResult.S3TransferUtility.Default.Bucket)
                bucketPath = jsonResult.S3TransferUtility.Default.Bucket
            }catch let e{
                print("error \(e)")
                bucketPath = ""

            }
        }else{
            bucketPath = ""

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...