수집과 비수집 간 주제 유형 변경
더 살펴보기
이 코드 샘플이 포함된 자세한 문서는 다음을 참조하세요.
코드 샘플
C++
이 샘플을 사용해 보기 전에 Pub/Sub 빠른 시작: 클라이언트 라이브러리 사용의 C++ 설정 안내를 따르세요. 자세한 내용은 Pub/Sub C++ API 참고 문서를 확인하세요.
Pub/Sub에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
namespace pubsub = ::google::cloud::pubsub;
namespace pubsub_admin = ::google::cloud::pubsub_admin;
[](pubsub_admin::TopicAdminClient client, std::string project_id,
std::string topic_id, std::string stream_arn, std::string consumer_arn,
std::string aws_role_arn, std::string gcp_service_account) {
google::pubsub::v1::UpdateTopicRequest request;
request.mutable_topic()->set_name(
pubsub::Topic(std::move(project_id), std::move(topic_id)).FullName());
auto* aws_kinesis = request.mutable_topic()
->mutable_ingestion_data_source_settings()
->mutable_aws_kinesis();
aws_kinesis->set_stream_arn(stream_arn);
aws_kinesis->set_consumer_arn(consumer_arn);
aws_kinesis->set_aws_role_arn(aws_role_arn);
aws_kinesis->set_gcp_service_account(gcp_service_account);
*request.mutable_update_mask()->add_paths() =
"ingestion_data_source_settings";
auto topic = client.UpdateTopic(request);
if (!topic) throw std::move(topic).status();
std::cout << "The topic was successfully updated: " << topic->DebugString()
<< "\n";
}
Go
이 샘플을 사용해 보기 전에 Pub/Sub 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Go API 참고 문서를 확인하세요.
Pub/Sub에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
import (
"context"
"fmt"
"io"
"cloud.google.com/go/pubsub"
)
func updateTopicType(w io.Writer, projectID, topicID string) error {
// projectID := "my-project-id"
// topicID := "my-topic"
streamARN := "stream-arn"
consumerARN := "consumer-arn"
awsRoleARN := "aws-role-arn"
gcpServiceAccount := "gcp-service-account"
ctx := context.Background()
client, err := pubsub.NewClient(ctx, projectID)
if err != nil {
return fmt.Errorf("pubsub.NewClient: %w", err)
}
defer client.Close()
updateCfg := pubsub.TopicConfigToUpdate{
// If wanting to clear ingestion settings, set this to zero value: &pubsub.IngestionDataSourceSettings{}
IngestionDataSourceSettings: &pubsub.IngestionDataSourceSettings{
Source: &pubsub.IngestionDataSourceAWSKinesis{
StreamARN: streamARN,
ConsumerARN: consumerARN,
AWSRoleARN: awsRoleARN,
GCPServiceAccount: gcpServiceAccount,
},
},
}
topicCfg, err := client.Topic(topicID).Update(ctx, updateCfg)
if err != nil {
return fmt.Errorf("topic.Update: %w", err)
}
fmt.Fprintf(w, "Topic updated with kinesis source: %v\n", topicCfg)
return nil
}
Java
이 샘플을 사용해 보기 전에 Pub/Sub 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Java API 참고 문서를 확인하세요.
Pub/Sub에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
import com.google.cloud.pubsub.v1.TopicAdminClient;
import com.google.protobuf.FieldMask;
import com.google.pubsub.v1.IngestionDataSourceSettings;
import com.google.pubsub.v1.Topic;
import com.google.pubsub.v1.TopicName;
import com.google.pubsub.v1.UpdateTopicRequest;
import java.io.IOException;
public class UpdateTopicTypeExample {
public static void main(String... args) throws Exception {
// TODO(developer): Replace these variables before running the sample.
String projectId = "your-project-id";
String topicId = "your-topic-id";
// Kinesis ingestion settings.
String streamArn = "stream-arn";
String consumerArn = "consumer-arn";
String awsRoleArn = "aws-role-arn";
String gcpServiceAccount = "gcp-service-account";
UpdateTopicTypeExample.updateTopicTypeExample(
projectId, topicId, streamArn, consumerArn, awsRoleArn, gcpServiceAccount);
}
public static void updateTopicTypeExample(
String projectId,
String topicId,
String streamArn,
String consumerArn,
String awsRoleArn,
String gcpServiceAccount)
throws IOException {
try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
TopicName topicName = TopicName.of(projectId, topicId);
IngestionDataSourceSettings.AwsKinesis awsKinesis =
IngestionDataSourceSettings.AwsKinesis.newBuilder()
.setStreamArn(streamArn)
.setConsumerArn(consumerArn)
.setAwsRoleArn(awsRoleArn)
.setGcpServiceAccount(gcpServiceAccount)
.build();
IngestionDataSourceSettings ingestionDataSourceSettings =
IngestionDataSourceSettings.newBuilder().setAwsKinesis(awsKinesis).build();
// Construct the topic with Kinesis ingestion settings.
Topic topic =
Topic.newBuilder()
.setName(topicName.toString())
.setIngestionDataSourceSettings(ingestionDataSourceSettings)
.build();
// Construct a field mask to indicate which field to update in the topic.
FieldMask updateMask =
FieldMask.newBuilder().addPaths("ingestion_data_source_settings").build();
UpdateTopicRequest request =
UpdateTopicRequest.newBuilder().setTopic(topic).setUpdateMask(updateMask).build();
Topic response = topicAdminClient.updateTopic(request);
System.out.println(
"Updated topic with Kinesis ingestion settings: " + response.getAllFields());
}
}
}
Node.js
/**
* TODO(developer): Uncomment these variables before running the sample.
*/
// const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
// const awsRoleArn = 'arn:aws:iam:...';
// const gcpServiceAccount = 'ingestion-account@...';
// const streamArn = 'arn:aws:kinesis:...';
// const consumerArn = 'arn:aws:kinesis:...';
// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');
// Creates a client; cache this for further use
const pubSubClient = new PubSub();
async function updateTopicIngestionType(
topicNameOrId,
awsRoleArn,
gcpServiceAccount,
streamArn,
consumerArn
) {
const metadata = {
ingestionDataSourceSettings: {
awsKinesis: {
awsRoleArn,
gcpServiceAccount,
streamArn,
consumerArn,
},
},
};
await pubSubClient.topic(topicNameOrId).setMetadata(metadata);
console.log('Topic updated with Kinesis source successfully.');
}
Node.js
/**
* TODO(developer): Uncomment these variables before running the sample.
*/
// const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
// const awsRoleArn = 'arn:aws:iam:...';
// const gcpServiceAccount = 'ingestion-account@...';
// const streamArn = 'arn:aws:kinesis:...';
// const consumerArn = 'arn:aws:kinesis:...';
// Imports the Google Cloud client library
import {PubSub, TopicMetadata} from '@google-cloud/pubsub';
// Creates a client; cache this for further use
const pubSubClient = new PubSub();
async function updateTopicIngestionType(
topicNameOrId: string,
awsRoleArn: string,
gcpServiceAccount: string,
streamArn: string,
consumerArn: string
) {
const metadata: TopicMetadata = {
ingestionDataSourceSettings: {
awsKinesis: {
awsRoleArn,
gcpServiceAccount,
streamArn,
consumerArn,
},
},
};
await pubSubClient.topic(topicNameOrId).setMetadata(metadata);
console.log('Topic updated with Kinesis source successfully.');
}
Python
이 샘플을 사용해 보기 전에 Pub/Sub 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Python API 참고 문서를 확인하세요.
Pub/Sub에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
from google.cloud import pubsub_v1
from google.pubsub_v1.types import Topic
from google.pubsub_v1.types import IngestionDataSourceSettings
from google.pubsub_v1.types import UpdateTopicRequest
from google.protobuf import field_mask_pb2
# TODO(developer)
# project_id = "your-project-id"
# topic_id = "your-topic-id"
# stream_arn = "your-stream-arn"
# consumer_arn = "your-consumer-arn"
# aws_role_arn = "your-aws-role-arn"
# gcp_service_account = "your-gcp-service-account"
publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(project_id, topic_id)
update_request = UpdateTopicRequest(
topic=Topic(
name=topic_path,
ingestion_data_source_settings=IngestionDataSourceSettings(
aws_kinesis=IngestionDataSourceSettings.AwsKinesis(
stream_arn=stream_arn,
consumer_arn=consumer_arn,
aws_role_arn=aws_role_arn,
gcp_service_account=gcp_service_account,
)
),
),
update_mask=field_mask_pb2.FieldMask(paths=["ingestion_data_source_settings"]),
)
topic = publisher.update_topic(request=update_request)
print(f"Updated topic: {topic.name} with AWS Kinesis Ingestion Settings")
다음 단계
다른 Google Cloud 제품의 코드 샘플을 검색하고 필터링하려면 Google Cloud 샘플 브라우저를 참조하세요.