Как получить имя корзины из объекта корзины в AWS CDK для python

#amazon-web-services #amazon-s3 #aws-cdk

#amazon-веб-сервисы #amazon-s3 #aws-cdk

Вопрос:

Я создал корзину S3 для размещения своего веб-сайта. Для этого я использовал приведенный ниже код из документации AWS CDK для python

 self.bucket = s3.Bucket(
    self,
    "my-bucket-name",
    bucket_name="my-bucket-name",
    removal_policy=core.RemovalPolicy.DESTROY,
    website_index_document="index.html",
    public_read_access=True
)
 

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

 self.bucket.bucket_name
self.bucket.bucket_arn
 

кажется, ничего не работает, вместо этого объект возвращается ${Token[TOKEN.189]} . Может ли кто-нибудь помочь мне в этом?

Комментарии:

1. Можете ли вы поделиться кодом для другого создаваемого вами объекта, которому требуется имя корзины?

2. @maafk Это не имеет значения, потому что я получаю тот же результат, даже если я просто делаю print(f"Bucket Name", self.bucket.bucket_name) прямо под приведенным выше кодом

3. Где вы печатаете имя корзины, bucket_name должно указывать вам имя, если вы используете self.bucket.bucket_name для другого объекта, затем запустите CDK synth и посмотрите на свой шаблон, вы должны увидеть, что он использует ссылку на вашу корзину, я не думаю, что вы сможете распечатать корзинуимя в cdk перед созданием шаблона вы можете, на данный момент это всего лишь ссылка

4. @AnonymousAlias правильно. Спасибо, приятель.

Ответ №1:

Если имя корзины жестко запрограммировано, как в примере, который вы вставили выше, вы всегда можете перенести его в контекстный файл cdk. Как вы видели, когда вы обращаетесь к имени корзины из конструкции корзины, она создает ссылку на него, и поэтому, если вам это нужно в другом ресурсе, формирование облака будет зависеть от значения из ресурса корзины с помощью возможностей Ref / GetAtt в CloudFormation. Тогда будет гарантировано, что ведро действительно существует до того, как оно будет использовано ниже по потоку.

Если вас это не волнует и вам просто нужно фактическое имя корзины в коде приложения cdk, затем поместите значение в json-файл контекста cdk и используйте node.try_get_context, чтобы получить его где угодно.

Комментарии:

1. Спасибо за ответ, я думаю, это единственный способ, я изменю свой код

Ответ №2:

Существует удобный метод fromBucketName , который вы можете использовать, если он не был определен в вашем текущем приложении:

 const bucket = aws_s3.Bucket.fromBucketName(this, 'bucketLabel", "nameYouGaveBucket")
 

В противном случае, я полагаю, вы ищете bucket.bucketName (typescript) или bucket.bucket_name (python).

Смотрите Документы typescript docs документы python. Это также доступно в оболочках CDK на других языках.

Обратите внимание, что существуют аналогичные методы для всех видов конструкций CDK, поэтому вам следует часто обращаться к документам API, так как там есть много подобных, которые вы можете легко найти.

Комментарии:

1. В чем разница между bucketLabel и именем корзины? Кажется, я нигде не нахожу четкого различия

2. bucketLabel это просто идентификатор конструкции, которую вы создаете в CDK, тогда bucketName как это имя ресурса корзины, который вы предоставляете в AWS — тот, который вы использовали бы для указания ресурса в командах CLI, URL-адресах S3 и т. Д. Этот идентификатор намного логичнее при работе с конструкциями, которые генерируют несколько ресурсов, например ecs.FargateService(this, 'MyFargateService', { cluster, taskDefinition }) .