Website-Suche

amazon web services - Wie löst man den Fehler 'Calling [toString] on an [Output<T>] is not supported' in Pulumi TypeScript?


Ich erstelle einen S3-Bucket mit Pulumi TypeScript und möchte diesen Bucket in EC2-Benutzerdaten verwenden, um ein Objekt zu kopieren. Folgendes ist mein Code für beides.

const bucket = new aws.s3.Bucket("bucket-name", {
    acl: "private",
});

Ich habe eine index.html-Datei hochgeladen und hier sind die Benutzerdaten von EC2:-

const userData = 
`#!/bin/bash
sudo apt update -y
sudo apt install -y apache2 && sudo apt install -y awscli 
aws s3 cp s3://`+pulumi.interpolate`${bucket.id}`+`/index.html /var/www/html/index.html
sudo systemctl start apache2`;

Ich habe pulumi.interpolate$ {bucket.id}` verwendet, um die Bucket-ID aufzurufen, aber als ich auf EC2 die Benutzerdaten überprüfte, erhielt ich folgenden Fehler.

aws s3 cp s3://Calling [toString] on an [Output<T>] is not supported.

To get the value of an Output<T> as an Output<string> consider either:
1: o.apply(v => `prefix${v}suffix`)
2: pulumi.interpolate `prefix${v}suffix`

Kann jemand helfen, wie kann ich den Bucket-Namen im Skript aufrufen?

Antwort #1

Sie sollten interpolate außerhalb aller Zeichenkettenoperationen platzieren

const userData = pulumi.interpolate`#!/bin/bash
sudo apt update -y
sudo apt install -y apache2 && sudo apt install -y awscli 
aws s3 cp s3://${bucket.id}/index.html /var/www/html/index.html
sudo systemctl start apache2`;

Wenn Ihr Code die +-Operation aufruft, wird toString auf dem Ergebnis ausgeführt und führt zu dem Fehler.

Verwandte Artikel