#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 })
.