mirror of https://github.com/dapr/docs.git
				
				
				
			Merge branch 'v0.11' into PR-Issue-Update
This commit is contained in:
		
						commit
						d43676c1e6
					
				|  | @ -1,31 +0,0 @@ | |||
| --- | ||||
| name: Bug report | ||||
| about: Report a bug in Dapr docs | ||||
| title: '' | ||||
| labels: kind/bug | ||||
| assignees: '' | ||||
| 
 | ||||
| --- | ||||
| ## Expected Behavior | ||||
| 
 | ||||
| <!-- Briefly describe what you expect to happen --> | ||||
| 
 | ||||
| 
 | ||||
| ## Actual Behavior | ||||
| 
 | ||||
| <!-- Briefly describe what is actually happening --> | ||||
| 
 | ||||
| 
 | ||||
| ## Steps to Reproduce the Problem | ||||
| 
 | ||||
| <!-- How can a maintainer reproduce this issue (be detailed) --> | ||||
| 
 | ||||
| ## Release Note | ||||
| <!-- How should the fix for this issue be communicated in our release notes? It can be populated later. --> | ||||
| <!-- Keep it as a single line. Examples: --> | ||||
| 
 | ||||
| <!-- RELEASE NOTE: **ADD** New feature in Dapr. --> | ||||
| <!-- RELEASE NOTE: **FIX** Bug in runtime. --> | ||||
| <!-- RELEASE NOTE: **UPDATE** Runtime dependency. --> | ||||
| 
 | ||||
| RELEASE NOTE: | ||||
|  | @ -1,8 +0,0 @@ | |||
| --- | ||||
| name: Feature Request | ||||
| about: Start a discussion for Dapr docs | ||||
| title: '' | ||||
| labels: kind/discussion | ||||
| assignees: '' | ||||
| 
 | ||||
| --- | ||||
|  | @ -1,19 +0,0 @@ | |||
| --- | ||||
| name: Feature Request | ||||
| about: Create a Feature Request for Dapr docs | ||||
| title: '' | ||||
| labels: kind/enhancement | ||||
| assignees: '' | ||||
| 
 | ||||
| --- | ||||
| ## Describe the feature | ||||
| 
 | ||||
| ## Release Note | ||||
| <!-- How should this new feature be announced in our release notes? It can be populated later. --> | ||||
| <!-- Keep it as a single line. Examples: --> | ||||
| 
 | ||||
| <!-- RELEASE NOTE: **ADD** New feature in Dapr. --> | ||||
| <!-- RELEASE NOTE: **FIX** Bug in runtime. --> | ||||
| <!-- RELEASE NOTE: **UPDATE** Runtime dependency. --> | ||||
| 
 | ||||
| RELEASE NOTE: | ||||
|  | @ -0,0 +1,20 @@ | |||
| --- | ||||
| name: New Content Needed | ||||
| about: Topic is missing and needs to be written | ||||
| title: "[CONTENT]" | ||||
| labels: content/missing-information | ||||
| assignees: '' | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| **What content needs to be created or modified?** | ||||
| A clear and concise description of what the problem is. Ex. There should be docs on how pub/sub works... | ||||
| 
 | ||||
| **Describe the solution you'd like** | ||||
| A clear and concise description of what you want to happen. | ||||
| 
 | ||||
| **Where should the new material be placed?** | ||||
| Please suggest where in the docs structure the new content should be created. | ||||
| 
 | ||||
| **Additional context** | ||||
| Add any other context or screenshots about the feature request here. | ||||
|  | @ -1,9 +0,0 @@ | |||
| --- | ||||
| name: Proposal | ||||
| about: Create a proposal for Dapr docs | ||||
| title: '' | ||||
| labels: kind/proposal | ||||
| assignees: '' | ||||
| 
 | ||||
| --- | ||||
| ## Describe the proposal | ||||
|  | @ -1,9 +0,0 @@ | |||
| --- | ||||
| name: Question | ||||
| about: Ask a question about Dapr docs | ||||
| title: '' | ||||
| labels: kind/question | ||||
| assignees: '' | ||||
| 
 | ||||
| --- | ||||
| ## Ask your question here | ||||
|  | @ -0,0 +1,23 @@ | |||
| --- | ||||
| name: Typo | ||||
| about: Report incorrect language/small updates to fix readability | ||||
| title: "[TYPO]" | ||||
| labels: content/typo | ||||
| assignees: '' | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| **URL of the docs page** | ||||
| The URL(s) on docs.dapr.io where the typo occurs | ||||
| 
 | ||||
| **How is it currently worded?** | ||||
| Please copy and paste the sentence where the typo occurs. | ||||
| 
 | ||||
| **How should it be worded?** | ||||
| Please correct the sentence | ||||
| 
 | ||||
| **Screenshots** | ||||
| If applicable, add screenshots to help explain your problem. | ||||
| 
 | ||||
| **Additional context** | ||||
| Add any other context about the problem here. | ||||
|  | @ -0,0 +1,38 @@ | |||
| --- | ||||
| name: Website Issue | ||||
| about: The website is broken or not working correctly. | ||||
| title: "[WEBSITE]" | ||||
| labels: website/functionality | ||||
| assignees: AaronCrawfis | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| **Describe the bug** | ||||
| A clear and concise description of what the bug is. | ||||
| 
 | ||||
| **To Reproduce** | ||||
| Steps to reproduce the behavior: | ||||
| 1. Go to '...' | ||||
| 2. Click on '....' | ||||
| 3. Scroll down to '....' | ||||
| 4. See error | ||||
| 
 | ||||
| **Expected behavior** | ||||
| A clear and concise description of what you expected to happen. | ||||
| 
 | ||||
| **Screenshots** | ||||
| If applicable, add screenshots to help explain your problem. | ||||
| 
 | ||||
| **Desktop (please complete the following information):** | ||||
|  - OS: [e.g. iOS] | ||||
|  - Browser [e.g. chrome, safari] | ||||
|  - Version [e.g. 22] | ||||
| 
 | ||||
| **Smartphone (please complete the following information):** | ||||
|  - Device: [e.g. iPhone6] | ||||
|  - OS: [e.g. iOS8.1] | ||||
|  - Browser [e.g. stock browser, safari] | ||||
|  - Version [e.g. 22] | ||||
| 
 | ||||
| **Additional context** | ||||
| Add any other context about the problem here. | ||||
|  | @ -0,0 +1,23 @@ | |||
| --- | ||||
| name: Wrong Information/Code/Steps | ||||
| about: Something in the docs is incorrect | ||||
| title: "[CONTENT]" | ||||
| labels: P1, content/incorrect-information | ||||
| assignees: '' | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| **Describe the issue** | ||||
| A clear and concise description of what the bug is. | ||||
| 
 | ||||
| **URL of the docs** | ||||
| Paste the URL (docs.dapr.io/concepts/......) of the page | ||||
| 
 | ||||
| **Expected content** | ||||
| A clear and concise description of what you expected to happen. | ||||
| 
 | ||||
| **Screenshots** | ||||
| If applicable, add screenshots to help explain your problem. | ||||
| 
 | ||||
| **Additional context** | ||||
| Add any other context about the problem here. | ||||
							
								
								
									
										10
									
								
								README.md
								
								
								
								
							
							
						
						
									
										10
									
								
								README.md
								
								
								
								
							|  | @ -30,17 +30,13 @@ git clone https://github.com/dapr/docs.git | |||
| ``` | ||||
| 3. Change to daprdocs directory:  | ||||
| ```sh | ||||
| cd daprdocs | ||||
| cd ./docs/daprdocs | ||||
| ``` | ||||
| 4. Add Docsy submodule:  | ||||
| ```sh | ||||
| git submodule add https://github.com/google/docsy.git themes/docsy | ||||
| ``` | ||||
| 5. Update submodules:  | ||||
| 4. Update submodules:  | ||||
| ```sh | ||||
| git submodule update --init --recursive | ||||
| ``` | ||||
| 6. Install npm packages:  | ||||
| 5. Install npm packages:  | ||||
| ```sh | ||||
| npm install | ||||
| ``` | ||||
|  |  | |||
|  | @ -7,7 +7,9 @@ description: > | |||
|   Introduction to the Distributed Application Runtime | ||||
| --- | ||||
| 
 | ||||
| Dapr is a portable, event-driven runtime that makes it easy for enterprise developers to build resilient, stateless and stateful microservice applications that run on the cloud and edge and embraces the diversity of languages and developer frameworks. | ||||
| Dapr is a portable, event-driven runtime that makes it easy for any developer to build resilient, stateless and stateful applications that run on the cloud and edge and embraces the diversity of languages and developer frameworks. | ||||
| 
 | ||||
| {{< youtube 9o9iDAgYBA8 >}} | ||||
| 
 | ||||
| ## Any language, any framework, anywhere | ||||
| 
 | ||||
|  | @ -118,4 +120,4 @@ The `dapr-sentry` service is a certificate authority that enables mutual TLS bet | |||
| 
 | ||||
| <img src="/images/overview_kubernetes.png" width=800> | ||||
| 
 | ||||
| Deploying and running a Dapr enabled application into your Kubernetes cluster is a simple as adding a few annotations to the deployment schemes. You can see some examples [here](https://github.com/dapr/quickstarts/tree/master/hello-kubernetes/deploy) in the Kubernetes getting started sample. Try this out with the [Kubernetes quickstart](https://github.com/dapr/quickstarts/tree/master/hello-kubernetes). | ||||
| Deploying and running a Dapr enabled application into your Kubernetes cluster is as simple as adding a few annotations to the deployment schemes. You can see some examples [here](https://github.com/dapr/quickstarts/tree/master/hello-kubernetes/deploy) in the Kubernetes getting started sample. Try this out with the [Kubernetes quickstart](https://github.com/dapr/quickstarts/tree/master/hello-kubernetes). | ||||
|  |  | |||
|  | @ -26,6 +26,7 @@ These conventions should be followed throughout all Dapr documentation to ensure | |||
| - **Use simple sentences** - Easy-to-read sentences mean the reader can quickly use the guidance you share. | ||||
| - **Avoid the first person** - Use 2nd person "you", "your" instead of "I", "we", "our". | ||||
| - **Assume a new developer audience** - Some obvious steps can seem hard. E.g. Now set an environment variable Dapr to a value X. It is better to give the reader the explicit command to do this, rather than having them figure this out. | ||||
| - **Use present tense** - Avoid sentences like "this command will install redis", which implies the action is in the future. Instead use "This command installs redis" which is in the present tense. | ||||
| 
 | ||||
| ## Contributing a new docs page | ||||
| - Make sure the documentation you are writing is in the correct place in the hierarchy.  | ||||
|  |  | |||
|  | @ -31,6 +31,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: bindings.kafka | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: brokers | ||||
|     value: localhost:9092 | ||||
|  |  | |||
|  | @ -39,6 +39,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: bindings.kafka | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: topics | ||||
|     value: topic1 | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ Read [W3C distributed tracing]({{< ref w3c-tracing >}}) for more background on W | |||
| 
 | ||||
| Dapr uses [probabilistic sampling](https://opencensus.io/tracing/sampling/probabilistic/) as defined by OpenCensus. The sample rate defines the probability a tracing span will be sampled and can have a value between 0 and 1 (inclusive). The deafault sample rate is 0.0001 (i.e. 1 in 10,000 spans is sampled). | ||||
| 
 | ||||
| To change the default tracing behavior, use a configuration file (in self hosted mode) or a Kubernetes configuration object (in Kubernetes mode). For example, the following configuration object changes the sample rate to 1 (i.e. every span is sampled): | ||||
| To change the default tracing behavior, use a configuration file (in self hosted mode) or a Kubernetes configuration object (in Kubernetes mode). For example, the following configuration object changes the sample rate to 1 (i.e. every span is sampled), and sends trace using Zipkin protocol to the Zipkin server at http://zipkin.default.svc.cluster.local | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
|  | @ -40,29 +40,14 @@ metadata: | |||
| spec: | ||||
|   tracing: | ||||
|     samplingRate: "1" | ||||
|     zipkin: | ||||
|       endpointAddress: "http://zipkin.default.svc.cluster.local:9411/api/v2/spans" | ||||
| ``` | ||||
| 
 | ||||
| Similarly, changing `samplingRate` to 0 will disable tracing altogether. | ||||
| Changing `samplingRate` to 0 will disable tracing altogether. | ||||
| 
 | ||||
| See the [References](#references) section for more details on how to configure tracing on local environment and Kubernetes environment. | ||||
| 
 | ||||
| Dapr supports pluggable exporters, defined by configuration files (in self hosted mode) or a Kubernetes custom resource object (in Kubernetes mode). For example, the following manifest defines a Zipkin exporter: | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
| kind: Component | ||||
| metadata: | ||||
|   name: zipkin | ||||
|   namespace: default | ||||
| spec: | ||||
|   type: exporters.zipkin | ||||
|   metadata: | ||||
|   - name: enabled | ||||
|     value: "true" | ||||
|   - name: exporterAddress | ||||
|     value: "http://zipkin.default.svc.cluster.local:9411/api/v2/spans" | ||||
| ``` | ||||
| 
 | ||||
| ## References | ||||
| 
 | ||||
| - [How-To: Setup Application Insights for distributed tracing with OpenTelemetry Collector]({{< ref open-telemetry-collector.md >}}) | ||||
|  |  | |||
|  | @ -31,6 +31,7 @@ metadata: | |||
|   name: pubsub | ||||
| spec: | ||||
|   type: pubsub.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: localhost:6379 | ||||
|  | @ -52,6 +53,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: pubsub.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: localhost:6379 | ||||
|  | @ -311,7 +313,7 @@ Invoke-RestMethod -Method Post -ContentType 'application/json' -Body '{"status": | |||
| 
 | ||||
| {{< /tabs >}} | ||||
| 
 | ||||
| Dapr automatically wraps the user payload in a Cloud Events v1.0 compliant envelope. | ||||
| Dapr automatically wraps the user payload in a Cloud Events v1.0 compliant envelope, using `Content-Type` header value for `datacontenttype` attribute. | ||||
| 
 | ||||
| ## Step 4: ACK-ing a message | ||||
| 
 | ||||
|  |  | |||
|  | @ -8,44 +8,30 @@ description: "Overview of the Dapr Pub/Sub building block" | |||
| 
 | ||||
| ## Introduction | ||||
| 
 | ||||
| The [publish/subscribe pattern](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern) allows your microservices to communicate with each other purely by sending messages. In this system, the **producer** of a message sends it to a **topic**, with no knowledge of what service will receive the message. A messages can even be sent if there's no consumer for it. | ||||
| The [publish/subscribe pattern](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern) allows microservices to communicate with each other using messages. The **producer** sends messages to a **topic** without knowledge of what application will receive them. Similarly, a **consumer** will subscribe to the topic and receive its messages without any knowledge of what application produced these messages. This pattern is especially useful when you need to decouple microservices from one another. | ||||
| 
 | ||||
| Similarly, a **consumer** will receive messages from a topic without knowledge of what producer sent it. This pattern is especially useful when you need to decouple microservices from one another. | ||||
| 
 | ||||
| Dapr provides a publish/subscribe API that provides at-least-once guarantees and integrates with various message brokers implementations. These implementations are pluggable, and developed outside of the Dapr runtime in [components-contrib](https://github.com/dapr/components-contrib/tree/master/pubsub). | ||||
| The publish/subscribe API in Dapr provides an at-least-once guarantee and integrates with various message brokers and queuing systems. The specific implementation to your application is pluggable and configured externally at runtime. This approach removes the dependency from your application and, as a result, makes your application more portable. The complete list of available publish/subscribe implementations is available [here]({{< ref supported-pubsub >}}). | ||||
| 
 | ||||
| ## Features | ||||
| 
 | ||||
| ### Publish/Subscribe API | ||||
| 
 | ||||
| The API for Publish/Subscribe can be found in the [spec repo]({{< ref pubsub_api.md >}}). | ||||
| The publish/subscribe API is located in the [API reference]({{< ref pubsub_api.md >}}). | ||||
| 
 | ||||
| ### At-Least-Once guarantee | ||||
| ### Message Format | ||||
| 
 | ||||
| Dapr guarantees At-Least-Once semantics for message delivery. | ||||
| That means that when an application publishes a message to a topic using the Publish/Subscribe API, it can assume the message is delivered at least once to any subscriber when the response status code from that endpoint is `200`, or returns no error if using the gRPC client. | ||||
| To enable message routing and to provide additional context with each message Dapr uses the [CloudEvents 1.0 specification](https://github.com/cloudevents/spec/tree/v1.0) as its message format. Any message sent by an application to a topic using Dapr will automatically be "wrapped" in Cloud Events envelope, using `Content-Type` header value for `datacontenttype` attribute. | ||||
| 
 | ||||
| ### Consumer groups and multiple instances | ||||
| Dapr implements the following Cloud Events fields: | ||||
| 
 | ||||
| The burden of dealing with concepts like consumer groups and multiple instances inside consumer groups is all handled autoamtically by Dapr: | ||||
| 
 | ||||
| * When multiple instances of the same application (same IDs) subscribe to a topic, Dapr will deliver each message to only one instance of that application.  | ||||
| * If two different applications (different IDs) subscribe to the same topic, Dapr will deliver each message to only one instance of each application. | ||||
| 
 | ||||
| ### Cloud events | ||||
| 
 | ||||
| Dapr follows the [CloudEvents 1.0 Spec](https://github.com/cloudevents/spec/tree/v1.0) and wraps any payload sent to a topic inside a Cloud Events envelope. | ||||
| 
 | ||||
| The following fields from the Cloud Events spec are implemented with Dapr: | ||||
| - `id` | ||||
| - `source` | ||||
| - `specversion` | ||||
| - `type` | ||||
| - `datacontenttype` (Optional) | ||||
| 
 | ||||
| > Starting with Dapr v0.9, Dapr no longer wraps published content into CloudEvent if the published payload itself is already in CloudEvent format.  | ||||
| * `id` | ||||
| * `source` | ||||
| * `specversion` | ||||
| * `type` | ||||
| * `datacontenttype` (Optional) | ||||
| 
 | ||||
| The following example shows an XML content in CloudEvent v1.0 serialized as JSON: | ||||
| 
 | ||||
| ```json | ||||
| { | ||||
|     "specversion" : "1.0", | ||||
|  | @ -59,11 +45,30 @@ The following example shows an XML content in CloudEvent v1.0 serialized as JSON | |||
| } | ||||
| ``` | ||||
| 
 | ||||
| > Starting with v0.9 release, Dapr no longer wraps published content into CloudEvent if the published payload is already in the CloudEvent format.  | ||||
| 
 | ||||
| ### Message Subscription  | ||||
| 
 | ||||
| Dapr allows two methods by which you can subscribe to topics: **declarative**, where a subscription is defined in an external file, and **programmatic**, where a subscription is defined in the user code. For more information see Dapr's documentation on [subscribing to a topic](https://docs.dapr.io/developing-applications/building-blocks/pubsub/howto-publish-subscribe/#step-2-subscribe-to-topics). | ||||
| 
 | ||||
| ### Message Delivery | ||||
| 
 | ||||
| In principle, Dapr considers message successfully delivered when the subscriber responds with a non-error response after processing the message. For more granular control, Dapr's publish/subscribe API also provides explicit statuses, defined in the response payload, which the subscriber can use to indicate the specific handling instructions to Dapr (e.g. `RETRY` or `DROP`). For more information message routing see [Dapr publish/subscribe API documentation] ({{< ref "pubsub_api.md#provide-routes-for-dapr-to-deliver-topic-events" >}}) | ||||
| 
 | ||||
| ### At-Least-Once guarantee | ||||
| 
 | ||||
| Dapr guarantees at-least-once semantics for message delivery. That means that when an application publishes a message to a topic using the publish/subscribe API, Dapr ensures that this message will be delivered at least once to every subscriber. | ||||
| 
 | ||||
| ### Consumer groups and multiple instances | ||||
| 
 | ||||
| The burden of dealing with concepts like consumer groups and multiple application instances using a single consumer group is all handled automatically by Dapr. When multiple instances of the same application (same IDs) subscribe to a topic, Dapr delivers each message to only one instance of that application. Similarly, if two different applications (different IDs) subscribe to the same topic, Dapr will deliver each message to only one instance of each application. | ||||
| 
 | ||||
| ### Topic scoping | ||||
| 
 | ||||
| Limit which topics applications are able to publish/subscibe to in order to limit access to potentially sensitive data streams. Read [Pub/Sub scoping]({{< ref pubsub-scopes.md >}}) for more information. | ||||
| By default, all topics backing the Dapr publish/subscribe component (e.g. Kafka, Redis, RabbitMQ) are available to every application configured with that component. To limit which application can publish or subscribe to topics, Dapr provides topic scoping. See [publish/subscribe topic scoping]({{< ref pubsub-scopes.md >}}) for more information. | ||||
| 
 | ||||
| ## Next steps | ||||
| 
 | ||||
| - Read the How-To guide on [publishing and subscribing]({{< ref howto-publish-subscribe.md >}}) | ||||
| - Learn about [Pub/Sub scopes]({{< ref pubsub-scopes.md >}}) | ||||
| - Read the [API reference]({{< ref pubsub_api.md >}}) | ||||
|  |  | |||
|  | @ -51,6 +51,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: pubsub.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: "localhost:6379" | ||||
|  | @ -97,6 +98,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: pubsub.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: "localhost:6379" | ||||
|  | @ -121,6 +123,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: pubsub.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: "localhost:6379" | ||||
|  |  | |||
|  | @ -36,7 +36,7 @@ Watch this [video](https://www.youtube.com/watch?v=OtbYCBt9C34&feature=youtu.be& | |||
| 
 | ||||
| Now that the secret store is set up, you can call Dapr to get the secrets for a given key for a specific secret store. | ||||
| 
 | ||||
| For a full API reference, go [here](https://github.com/dapr/docs/blob/master/reference/api/secrets_api.md). | ||||
| For a full API reference, go [here]({{< ref secrets_api.md >}}). | ||||
| 
 | ||||
| Here are a few examples in different programming languages: | ||||
| 
 | ||||
|  |  | |||
|  | @ -31,7 +31,7 @@ spec: | |||
|         defaultAccess: deny | ||||
| ``` | ||||
| 
 | ||||
| For applications that need to be deined access to the Kubernetes secret store, follow [these instructions]({{< ref kubernetes-overview.md >}}), and add the following annotation to the application pod.  | ||||
| For applications that need to be denied access to the Kubernetes secret store, follow [these instructions]({{< ref kubernetes-overview.md >}}), and add the following annotation to the application pod.  | ||||
| 
 | ||||
| ```yaml | ||||
| dapr.io/config: appconfig | ||||
|  |  | |||
|  | @ -117,3 +117,4 @@ The diagram below shows sequence 1-7 again on a local machine showing the API ca | |||
|     * [How-to: Get started with Dapr and gRPC]({{< ref grpc >}}) | ||||
| * Try out the [hello world quickstart](https://github.com/dapr/quickstarts/blob/master/hello-world/README.md) which shows how to use HTTP service invocation or visit the samples in each of the [Dapr SDKs]({{< ref sdks >}}) | ||||
| * Read the [service invocation API specification]({{< ref service_invocation_api.md >}}) | ||||
| * See the [service invocation performance]({{< ref perf-service-invocation.md >}}) numbers | ||||
|  |  | |||
|  | @ -0,0 +1,7 @@ | |||
| --- | ||||
| type: docs | ||||
| title: "Authenticating to services" | ||||
| linkTitle: "Authenticating to services" | ||||
| weight: 3000 | ||||
| description: "Information about authentication and configuration for various cloud providers" | ||||
| --- | ||||
|  | @ -0,0 +1,62 @@ | |||
| --- | ||||
| type: docs | ||||
| title: "Authenticating to AWS" | ||||
| linkTitle: "Authenticating to AWS" | ||||
| weight: 10 | ||||
| description: "Information about authentication and configuration options for AWS" | ||||
| --- | ||||
| 
 | ||||
| All Dapr components using various AWS services (DynamoDB, SQS, S3, etc) use a standardized set of attributes for configuration, these are described below. | ||||
| 
 | ||||
| [This article](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials) provides a good overview of how the AWS SDK (which Dapr uses) handles credentials | ||||
| 
 | ||||
| None of the following attributes are required, since the AWS SDK may be configured using the default provider chain described in the link above. It's important to test the component configuration and inspect the log output from the Dapr runtime to ensure that components initialize correctly. | ||||
| 
 | ||||
| `region`: Which AWS region to connect to. In some situations (when running Dapr in self-hosted mode, for example) this flag can be provided by the environment variable `AWS_REGION`. Since Dapr sidecar injection doesn't allow configuring environment variables on the Dapr sidecar, it is recommended to always set the `region` attribute in the component spec.    | ||||
| `endpoint`: The endpoint is normally handled internally by the AWS SDK. However, in some situations it might make sense to set it locally - for example if developing against [DynamoDB Local](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html).    | ||||
| `accessKey`: AWS Access key id.    | ||||
| `secretKey`: AWS Secret access key. Use together with `accessKey` to explicitly specify credentials.    | ||||
| `sessionToken`: AWS Session token. Used together with `accessKey` and `secretKey`. When using a regular IAM user's access key and secret, a session token is normally not required. | ||||
| 
 | ||||
| ## Alternatives to explicitly specifying credentials in component manifest files | ||||
| In production scenarios, it is recommended to use a solution such as [Kiam](https://github.com/uswitch/kiam) or [Kube2iam](https://github.com/jtblin/kube2iam). If running on AWS EKS, you can [link an IAM role to a Kubernetes service account](https://docs.aws.amazon.com/eks/latest/userguide/create-service-account-iam-policy-and-role.html), which your pod can use. | ||||
| 
 | ||||
| All of these solutions solve the same problem: They allow the Dapr runtime process (or sidecar) to retrive credentials dynamically, so that explicit credentials aren't needed. This provides several benefits, such as automated key rotation, and avoiding having to manage secrets.  | ||||
| 
 | ||||
| Both Kiam and Kube2IAM work by intercepting calls to the [instance metadata service](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html). | ||||
| 
 | ||||
| ## Using instance role/profile when running in stand-alone mode on AWS EC2 | ||||
| If running Dapr directly on an AWS EC2 instance in stand-alone mode, instance profiles can be used. Simply configure an iam role and [attach it to the instance profile](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) for the ec2 instance, and Dapr should be able to authenticate to AWS without specifying credentials in the Dapr component manifest. | ||||
| 
 | ||||
| ## Authenticating to AWS when running dapr locally in stand-alone mode | ||||
| When running Dapr (or the Dapr runtime directly) in stand-alone mode, you have the option of injecting environment variables into the process like this (on Linux/MacOS:    | ||||
| ```bash | ||||
| FOO=bar daprd --app-id myapp | ||||
| ```    | ||||
| If you have [configured named AWS profiles](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) locally , you can tell Dapr (or the Dapr runtime) which profile to use by specifying the "AWS_PROFILE" environment variable: | ||||
| 
 | ||||
| ```bash | ||||
| AWS_PROFILE=myprofile dapr run... | ||||
| ``` | ||||
| or  | ||||
| ```bash | ||||
| AWS_PROFILE=myprofile daprd... | ||||
| ``` | ||||
| You can use any of the [supported environment variables](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html#envvars-list) to configure Dapr in this manner. | ||||
| 
 | ||||
| On Windows, the environment variable needs to be set before starting the `dapr` or `daprd` command, doing it inline as shown above is not supported. | ||||
| 
 | ||||
| ## Authenticating to AWS if using AWS SSO based profiles | ||||
| If you authenticate to AWS using [AWS SSO](https://aws.amazon.com/single-sign-on/), some AWS SDKs (including the Go SDK) don't yet support this natively. There are several utilities you can use to "bridge the gap" between AWS SSO-based credentials, and "legacy" credentials, such as [AwsHelper](https://pypi.org/project/awshelper/) or [aws-sso-util](https://github.com/benkehoe/aws-sso-util). | ||||
| 
 | ||||
| If using AwsHelper, start Dapr like this: | ||||
| ```bash | ||||
| AWS_PROFILE=myprofile awshelper dapr run... | ||||
| ``` | ||||
| or  | ||||
| ```bash | ||||
| AWS_PROFILE=myprofile awshelper daprd... | ||||
| ``` | ||||
| 
 | ||||
| On Windows, the environment variable needs to be set before starting the `awshelper` command, doing it inline as shown above is not supported. | ||||
| 
 | ||||
|  | @ -70,6 +70,7 @@ metadata: | |||
|   name: autoscaling-pubsub | ||||
| spec: | ||||
|   type: pubsub.kafka | ||||
|   version: v1 | ||||
|   metadata: | ||||
|     - name: brokers | ||||
|       value: kafka-cp-kafka.kafka.svc.cluster.local:9092 | ||||
|  |  | |||
|  | @ -18,6 +18,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: middleware.http.opa | ||||
|   version: v1 | ||||
|   metadata: | ||||
|     # `includedHeaders` is a comma-seperated set of case-insensitive headers to include in the request input. | ||||
|     # Request headers are not passed to the policy by default. Include to recieve incoming request headers in | ||||
|  |  | |||
|  | @ -1,228 +0,0 @@ | |||
| --- | ||||
| type: docs | ||||
| title: "How-To: Setup a customized Redis store" | ||||
| linkTitle: "(optional) Configure Redis" | ||||
| weight: 40 | ||||
| description: "Configure Redis for Dapr state management or Pub/Sub" | ||||
| --- | ||||
| 
 | ||||
| Dapr can use Redis in two ways: | ||||
| 
 | ||||
| 1. As state store component (state.redis) for persistence and restoration | ||||
| 2. As pub/sub component (pubsub.redis) for async style message delivery | ||||
| 
 | ||||
| ## Create a Redis store | ||||
| 
 | ||||
| Dapr can use any Redis instance - containerized, running on your local dev machine, or a managed cloud service. If you already have a Redis store, move on to the [configuration](#configure-dapr-components) section. | ||||
| 
 | ||||
| {{< tabs "Self-Hosted" "Kubernetes (Helm)" "Azure Redis Cache" "AWS Redis" "GCP Memorystore" >}} | ||||
| 
 | ||||
| {{% codetab %}} | ||||
| Redis is automatically installed in self-hosted environments by the Dapr CLI as part of the initialization process. | ||||
| {{% /codetab %}} | ||||
| 
 | ||||
| {{% codetab %}} | ||||
| You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our Kubernetes cluster. This approach requires [Installing Helm v3](https://github.com/helm/helm#install). | ||||
| 
 | ||||
| 1. Install Redis into your cluster: | ||||
| 
 | ||||
|    ```bash | ||||
|    helm repo add bitnami https://charts.bitnami.com/bitnami | ||||
|    helm repo update | ||||
|    helm install redis bitnami/redis | ||||
|    ``` | ||||
| 
 | ||||
|    Note that you will need a Redis version greater than 5, which is what Dapr's pub/sub functionality requires. If you're intending on using Redis as just a state store (and not for pub/sub) a lower version can be used. | ||||
| 
 | ||||
| 2. Run `kubectl get pods` to see the Redis containers now running in your cluster: | ||||
| 
 | ||||
|     ```bash | ||||
|     $ kubectl get pods  | ||||
|     NAME             READY   STATUS    RESTARTS   AGE | ||||
|     redis-master-0   1/1     Running   0          69s | ||||
|     redis-slave-0    1/1     Running   0          69s | ||||
|     redis-slave-1    1/1     Running   0          22s | ||||
|     ``` | ||||
| 
 | ||||
| 3. Add `redis-master.default.svc.cluster.local:6379` as the `redisHost` in your [redis.yaml](#configure-dapr-components) file. For example: | ||||
| 
 | ||||
|    ```yaml | ||||
|    metadata: | ||||
|    - name: redisHost | ||||
|      value: redis-master.default.svc.cluster.local:6379 | ||||
|    ``` | ||||
| 
 | ||||
| 4. Securely reference the redis passoword in your [redis.yaml](#configure-dapr-components) file. For example: | ||||
|      | ||||
|     ```yaml | ||||
|     - name: redisPassword | ||||
|       secretKeyRef: | ||||
|         name: redis | ||||
|         key: redis-password | ||||
|     ``` | ||||
| 
 | ||||
| 5. (Alternative) It is **not recommended**, but you can use a hard code a password instead of using secretKeyRef. First you'll get the Redis password, which is slightly different depending on the OS you're using: | ||||
| 
 | ||||
|    - **Windows**: In Powershell run:  | ||||
|       ```powershell | ||||
|       PS C:\> $base64pwd=kubectl get secret --namespace default redis -o jsonpath="{.data.redis-password}" | ||||
|       PS C:\> $redispassword=[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($base64pwd)) | ||||
|       PS C:\> $base64pwd="" | ||||
|       PS C:\> $redispassword | ||||
|       ``` | ||||
|    - **Linux/MacOS**: Run: | ||||
|       ```bash | ||||
|       kubectl get secret --namespace default redis -o jsonpath="{.data.redis-password}" | base64 --decode | ||||
|       ``` | ||||
| 
 | ||||
|    Add this password as the `redisPassword` value in your [redis.yaml](#configure-dapr-components) file. For example: | ||||
| 
 | ||||
|    ```yaml | ||||
|    metadata: | ||||
|    - name: redisPassword | ||||
|      value: lhDOkwTlp0 | ||||
|    ``` | ||||
| {{% /codetab %}} | ||||
| 
 | ||||
| {{% codetab %}} | ||||
| This method requires having an Azure Subscription. | ||||
| 
 | ||||
| 1. Open the [Azure Portal](https://ms.portal.azure.com/#create/Microsoft.Cache) to start the Azure Redis Cache creation flow. Log in if necessary. | ||||
| 1. Fill out the necessary information | ||||
| 1. Click "Create" to kickoff deployment of your Redis instance. | ||||
| 1. Once your instance is created, you'll need to grab your access key. Navigate to "Access Keys" under "Settings" and copy your key. | ||||
| 1. You'll need the hostname of your Redis instance, which you can retrieve from the "Overview" in Azure. It should look like `xxxxxx.redis.cache.windows.net:6380`. | ||||
| 1. Finally, you'll need to add our key and our host to a `redis.yaml` file that Dapr can apply to our cluster. If you're running a sample, you'll add the host and key to the provided `redis.yaml`. If you're creating a project from the ground up, you'll create a `redis.yaml` file as specified in [Configuration](#configure-dapr-components). | ||||
| 
 | ||||
|    As the connection to Azure is encrypted, make sure to add the following block to the `metadata` section of your `redis.yaml` file. | ||||
| 
 | ||||
|    ```yaml | ||||
|    metadata: | ||||
|    - name: enableTLS | ||||
|      value: "true" | ||||
|    ``` | ||||
| 
 | ||||
| > **NOTE:** Dapr pub/sub uses [Redis streams](https://redis.io/topics/streams-intro) that was introduced by Redis 5.0, which isn't currently available on Azure Cache for Redis. Consequently, you can use Azure Cache for Redis only for state persistence. | ||||
| {{% /codetab %}} | ||||
| 
 | ||||
| {{% codetab %}} | ||||
| Visit [AWS Redis](https://aws.amazon.com/redis/). | ||||
| {{% /codetab %}} | ||||
| 
 | ||||
| {{% codetab %}} | ||||
| Visit [GCP Cloud MemoryStore](https://cloud.google.com/memorystore/). | ||||
| {{% /codetab %}} | ||||
| 
 | ||||
| {{< /tabs >}} | ||||
| 
 | ||||
| ## Configure Dapr components | ||||
| 
 | ||||
| Dapr can use Redis as a [`statestore` component]({{< ref setup-state-store >}}) for state persistence (`state.redis`) or as a [`pubsub` component]({{< ref setup-pubsub >}}) (`pubsub.redis`). The following yaml files demonstrates how to define each component using either a secretKey reference (which is preferred) or a plain text password. | ||||
| 
 | ||||
| ### Create component files | ||||
| 
 | ||||
| #### State store component with secret reference | ||||
| 
 | ||||
| Create a file called redis-state.yaml, and paste the following: | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
| kind: Component | ||||
| metadata: | ||||
|   name: statestore | ||||
|   namespace: default | ||||
| spec: | ||||
|   type: state.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: <HOST e.g. redis-master.default.svc.cluster.local:6379> | ||||
|   - name: redisPassword | ||||
|     secretKeyRef: | ||||
|       name: redis | ||||
|       key: redis-password | ||||
| ``` | ||||
| 
 | ||||
| #### Pub/sub component with secret reference | ||||
| 
 | ||||
| Create a file called redis-pubsub.yaml, and paste the following: | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
| kind: Component | ||||
| metadata: | ||||
|   name: pubsub | ||||
|   namespace: default | ||||
| spec: | ||||
|   type: pubsub.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: <HOST e.g. redis-master.default.svc.cluster.local:6379> | ||||
|   - name: redisPassword | ||||
|     secretKeyRef: | ||||
|       name: redis | ||||
|       key: redis-password | ||||
| ``` | ||||
| 
 | ||||
| #### State store component with hard coded password (not recommended) | ||||
| 
 | ||||
| For development purposes only, create a file called redis-state.yaml, and paste the following: | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
| kind: Component | ||||
| metadata: | ||||
|   name: statestore | ||||
|   namespace: default | ||||
| spec: | ||||
|   type: state.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: <HOST> | ||||
|   - name: redisPassword | ||||
|     value: <PASSWORD> | ||||
| ``` | ||||
| 
 | ||||
| #### Pub/Sub component with hard coded password (not recommended) | ||||
| 
 | ||||
| For development purposes only, create a file called redis-pubsub.yaml, and paste the following: | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
| kind: Component | ||||
| metadata: | ||||
|   name: pubsub | ||||
|   namespace: default | ||||
| spec: | ||||
|   type: pubsub.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: <HOST> | ||||
|   - name: redisPassword | ||||
|     value: <PASSWORD> | ||||
| ``` | ||||
| 
 | ||||
| ### Apply the configuration | ||||
| 
 | ||||
| {{< tabs "Self-Hosted" "Kubernetes">}} | ||||
| 
 | ||||
| {{% codetab %}} | ||||
| By default the Dapr CLI creates a local Redis instance when you run `dapr init`. However, if you want to configure a different Redis instance, create a `components` dir containing the YAML file and provide the path to the `dapr run` command with the flag `--components-path`. | ||||
| 
 | ||||
| If you initialized Dapr using `dapr init --slim`, the Dapr CLI did not create a Redis instance or a default configuration file for it. Follow [the instructions above](#creat-a-redis-store) to create a Redis store. Create the `redis.yaml` following the configuration [instructions](#configure-dapr-components) in a `components` dir and provide the path to the `dapr run` command with the flag `--components-path`. | ||||
| {{% /codetab %}} | ||||
| 
 | ||||
| {{% codetab %}} | ||||
| 
 | ||||
| Run `kubectl apply -f <FILENAME>` for both state and pubsub files: | ||||
| 
 | ||||
| ```bash | ||||
| kubectl apply -f redis-state.yaml | ||||
| kubectl apply -f redis-pubsub.yaml | ||||
| ``` | ||||
| {{% /codetab %}} | ||||
| 
 | ||||
| {{< /tabs >}} | ||||
|  | @ -0,0 +1,232 @@ | |||
| --- | ||||
| type: docs | ||||
| title: "How-To: Configure state store and pub/sub message broker" | ||||
| linkTitle: "Configure state & pub/sub" | ||||
| weight: 40 | ||||
| description: "Configure state store and pub/sub message broker components for Dapr" | ||||
| aliases: | ||||
|   - /getting-started/configure-redis/ | ||||
| --- | ||||
| 
 | ||||
| In order to get up and running with the state and pub/sub building blocks two components are needed: | ||||
| 
 | ||||
| 1. A state store component for persistence and restoration | ||||
| 2. As pub/sub message broker component for async-style message delivery | ||||
| 
 | ||||
| A full list of supported components can be found here: | ||||
| - [Supported state stores]({{< ref supported-state-stores >}}) | ||||
| - [Supported pub/sub message brokers]({{< ref supported-pubsub >}}) | ||||
| 
 | ||||
| The rest of this page describes how to get up and running with Redis. | ||||
| 
 | ||||
| {{% alert title="Self-hosted mode" color="warning" %}} | ||||
| When initialized in self-hosted mode, Dapr automatically runs a Redis container and sets up the required component yaml files. You can skip this page and go to [next steps](#next-steps) | ||||
| {{% /alert %}} | ||||
| 
 | ||||
| ## Create a Redis store | ||||
| 
 | ||||
| Dapr can use any Redis instance - either containerized on your local dev machine or a managed cloud service. If you already have a Redis store, move on to the [configuration](#configure-dapr-components) section. | ||||
| 
 | ||||
| {{< tabs "Self-Hosted" "Kubernetes" "Azure" "AWS" "GCP" >}} | ||||
| 
 | ||||
| {{% codetab %}} | ||||
| Redis is automatically installed in self-hosted environments by the Dapr CLI as part of the initialization process. You are all set and can skip to the [next steps](next steps) | ||||
| {{% /codetab %}} | ||||
| 
 | ||||
| {{% codetab %}} | ||||
| You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our Kubernetes cluster. This approach requires [Installing Helm v3](https://github.com/helm/helm#install). | ||||
| 
 | ||||
| 1. Install Redis into your cluster: | ||||
| 
 | ||||
|    ```bash | ||||
|    helm repo add bitnami https://charts.bitnami.com/bitnami | ||||
|    helm repo update | ||||
|    helm install redis bitnami/redis | ||||
|    ``` | ||||
| 
 | ||||
|    Note that you will need a Redis version greater than 5, which is what Dapr's pub/sub functionality requires. If you're intending on using Redis as just a state store (and not for pub/sub) a lower version can be used. | ||||
| 
 | ||||
| 2. Run `kubectl get pods` to see the Redis containers now running in your cluster: | ||||
| 
 | ||||
|     ```bash | ||||
|     $ kubectl get pods  | ||||
|     NAME             READY   STATUS    RESTARTS   AGE | ||||
|     redis-master-0   1/1     Running   0          69s | ||||
|     redis-slave-0    1/1     Running   0          69s | ||||
|     redis-slave-1    1/1     Running   0          22s | ||||
|     ``` | ||||
| 
 | ||||
| Note that the hostname is `redis-master.default.svc.cluster.local:6379`, and a Kubernetes secret, `redis`, is created automatically. | ||||
| 
 | ||||
| {{% /codetab %}} | ||||
| 
 | ||||
| {{% codetab %}} | ||||
| This method requires having an Azure Subscription. | ||||
| 
 | ||||
| 1. Open the [Azure Portal](https://ms.portal.azure.com/#create/Microsoft.Cache) to start the Azure Redis Cache creation flow. Log in if necessary. | ||||
| 1. Fill out the necessary information | ||||
|    - Dapr pub/sub uses [Redis streams](https://redis.io/topics/streams-intro) that was introduced by Redis 5.0. If you would like to use Azure Redis Cache for pub/sub make sure to set the version to (PREVIEW) 6. | ||||
| 1. Click "Create" to kickoff deployment of your Redis instance. | ||||
| 1. You'll need the hostname of your Redis instance, which you can retrieve from the "Overview" in Azure. It should look like `xxxxxx.redis.cache.windows.net:6380`. Note this for later. | ||||
| 1. Once your instance is created, you'll need to grab your access key. Navigate to "Access Keys" under "Settings" and create a Kubernetes secret to store your Redis password: | ||||
|    ```bash | ||||
|    kubectl create secret generic redis --from-literal=redis-password=********* | ||||
|    ``` | ||||
| 
 | ||||
| {{% /codetab %}} | ||||
| 
 | ||||
| {{% codetab %}} | ||||
| 1. Visit [AWS Redis](https://aws.amazon.com/redis/) to deploy a Redis instance | ||||
| 1. Note the Redis hostname in the AWS portal for use later | ||||
| 1. Create a Kubernetes secret to store your Redis password: | ||||
|    ```bash | ||||
|    kubectl create secret generic redis --from-literal=redis-password=********* | ||||
|    ``` | ||||
| {{% /codetab %}} | ||||
| 
 | ||||
| {{% codetab %}} | ||||
| 1. Visit [GCP Cloud MemoryStore](https://cloud.google.com/memorystore/) to deploy a MemoryStore instance | ||||
| 1. Note the Redis hostname in the GCP portal for use later | ||||
| 1. Create a Kubernetes secret to store your Redis password: | ||||
|    ```bash | ||||
|    kubectl create secret generic redis --from-literal=redis-password=********* | ||||
|    ``` | ||||
| {{% /codetab %}} | ||||
| 
 | ||||
| {{< /tabs >}} | ||||
| 
 | ||||
| ## Configure Dapr components | ||||
| 
 | ||||
| Dapr uses components to define what resources to use for building block functionality. These steps go through how to connect the resources you created above to Dapr for state and pub/sub. | ||||
| 
 | ||||
| In self-hosted mode, component files are automatically created under: | ||||
| - **Windows**: `%USERPROFILE%\.dapr\components\` | ||||
| - **Linux/MacOS**: `$HOME/.dapr/components` | ||||
| 
 | ||||
| For Kubernetes, files can be created in any directory, as they are applied with `kubectl`. | ||||
| 
 | ||||
| ### Create State store component | ||||
| 
 | ||||
| Create a file named `redis-state.yaml`, and paste the following: | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
| kind: Component | ||||
| metadata: | ||||
|   name: statestore | ||||
|   namespace: default | ||||
| spec: | ||||
|   type: state.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: <REPLACE WITH HOSTNAME FROM ABOVE - for Redis on Kubernetes it is redis-master.default.svc.cluster.local:6379> | ||||
|   - name: redisPassword | ||||
|     secretKeyRef: | ||||
|       name: redis | ||||
|       key: redis-password | ||||
| ```    | ||||
| 
 | ||||
| This example uses the the kubernetes secret that was created when setting up a cluster with the above instructions. | ||||
| 
 | ||||
| {{% alert title="Other stores" color="primary" %}} | ||||
| If using a state store other than Redis, refer to the [supported state stores]({{< ref supported-state-stores >}}) for information on what options to set. | ||||
| {{% /alert %}} | ||||
| 
 | ||||
| ### Create Pub/sub message broker component | ||||
| 
 | ||||
| Create a file called redis-pubsub.yaml, and paste the following: | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
| kind: Component | ||||
| metadata: | ||||
|   name: pubsub | ||||
|   namespace: default | ||||
| spec: | ||||
|   type: pubsub.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: <REPLACE WITH HOSTNAME FROM ABOVE - for Redis on Kubernetes it is redis-master.default.svc.cluster.local:6379> | ||||
|   - name: redisPassword | ||||
|     secretKeyRef: | ||||
|       name: redis | ||||
|       key: redis-password | ||||
| ``` | ||||
| 
 | ||||
| This example uses the the kubernetes secret that was created when setting up a cluster with the above instructions. | ||||
| 
 | ||||
| {{% alert title="Other stores" color="primary" %}} | ||||
| If using a pub/sub message broker other than Redis, refer to the [supported pub/sub message brokers]({{< ref supported-pubsub >}}) for information on what options to set. | ||||
| {{% /alert %}} | ||||
| 
 | ||||
| ### Hard coded passwords (not recommended) | ||||
| 
 | ||||
| For development purposes only you can skip creating kubernetes secrets and place passwords directly into the Dapr component file: | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
| kind: Component | ||||
| metadata: | ||||
|   name: statestore | ||||
|   namespace: default | ||||
| spec: | ||||
|   type: state.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: <HOST> | ||||
|   - name: redisPassword | ||||
|     value: <PASSWORD> | ||||
| ``` | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
| kind: Component | ||||
| metadata: | ||||
|   name: pubsub | ||||
|   namespace: default | ||||
| spec: | ||||
|   type: pubsub.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: <HOST> | ||||
|   - name: redisPassword | ||||
|     value: <PASSWORD> | ||||
| ``` | ||||
| 
 | ||||
| ## Apply the configuration | ||||
| 
 | ||||
| {{< tabs "Self-Hosted" "Kubernetes">}} | ||||
| 
 | ||||
| {{% codetab %}} | ||||
| 
 | ||||
| By default the Dapr CLI creates a local Redis instance when you run `dapr init`. However, if you want to configure a different Redis instance you can either: | ||||
| - Update the existing component files or create new ones in the default components directory | ||||
|    - **Linux/MacOS:** `$HOME/.dapr/components` | ||||
|    - **Windows:** `%USERPROFILE%\.dapr\components` | ||||
| - Create a new `components` directory in your app folder containing the YAML files and provide the path to the `dapr run` command with the flag `--components-path` | ||||
| 
 | ||||
| {{% alert title="Self-hosted slim mode" color="primary" %}} | ||||
| If you initialized Dapr in [slim mode]({{< ref self-hosted-no-docker.md >}}) (without Docker) you need to manually create the default directory, or always specify a components directory using `--components-path`. | ||||
| {{% /alert %}} | ||||
| 
 | ||||
| {{% /codetab %}} | ||||
| 
 | ||||
| {{% codetab %}} | ||||
| 
 | ||||
| Run `kubectl apply -f <FILENAME>` for both state and pubsub files: | ||||
| 
 | ||||
| ```bash | ||||
| kubectl apply -f redis-state.yaml | ||||
| kubectl apply -f redis-pubsub.yaml | ||||
| ``` | ||||
| {{% /codetab %}} | ||||
| 
 | ||||
| {{< /tabs >}} | ||||
| 
 | ||||
| ## Next steps | ||||
| - [Setup your development environment]({{< ref dev-environment.md >}}) | ||||
| - [Try out a Dapr quickstart]({{< ref quickstarts.md >}}) | ||||
|  | @ -0,0 +1,26 @@ | |||
| --- | ||||
| type: docs | ||||
| title: "How-To: Setup a Dapr dev environment" | ||||
| linkTitle: "Setup Dev environment" | ||||
| weight: 50 | ||||
| description: "How to get up and running with Dapr SDKs, extensions, and tooling" | ||||
| --- | ||||
| 
 | ||||
| As you get up and running with Dapr there are a variety of SDKs and tools to make things easier for you. Check out the below the options to get up and running in your preferred tools. | ||||
| 
 | ||||
| ## Dapr SDKs | ||||
| 
 | ||||
| Dapr offers a variety of SDKs for developing with Dapr in your preferred language. | ||||
| 
 | ||||
| Visit the [Dapr SDK docs]({{< ref sdks>}}) for more information and to get started in your preferred language. | ||||
| 
 | ||||
| ## IDE integrations | ||||
| 
 | ||||
| For information on the available extensions and integrations with IDEs such as [VS Code]({{< ref vscode.md >}}) and [IntelliJ]({{< ref intellij.md >}}) visit the [Dapr IDE integrations docs]({{< ref ides >}}). | ||||
| 
 | ||||
| ## Dapr Dashboard | ||||
| 
 | ||||
| For easy access to key information about your Dapr applications and components, make sure to run `dapr dashboard` to launch the [dashboard app](https://github.com/dapr/dashboard). | ||||
| 
 | ||||
| ## Next steps | ||||
| - [Try out a Dapr quickstart]({{< ref quickstarts.md >}}) | ||||
|  | @ -8,31 +8,31 @@ description: "Install the Dapr CLI to get started with Dapr" | |||
| 
 | ||||
| ## Dapr CLI installation scripts | ||||
| 
 | ||||
| Begin by downloading and installing the Dapr CLI for v1.0.0-rc.2. This will be used to initialize your environment on your desired platform. | ||||
| Begin by downloading and installing the Dapr CLI for v0.11. This is used to initialize your environment on your desired platform. | ||||
| 
 | ||||
| {{% alert title="Note" color="warning" %}} | ||||
| This command will download and install Dapr v0.11. To install v1.0-rc.1, the release candidate for the [upcoming v1.0 release](https://blog.dapr.io/posts/2020/10/20/the-path-to-v.1.0-production-ready-dapr/), please visit the [v1.0-rc.1 docs](https://v1-rc1.docs.dapr.io/getting-started/install-dapr-cli). | ||||
| This command downloads and install Dapr CLI v0.11. To install v1.0-rc2, our latest preview release prior to the release of the [upcoming v1.0 release](https://blog.dapr.io/posts/2020/10/20/the-path-to-v.1.0-production-ready-dapr/), please visit the [v1.0-rc1 docs](https://v1-rc1.docs.dapr.io). | ||||
| {{% /alert %}} | ||||
| 
 | ||||
| {{< tabs Linux Windows MacOS Binaries>}} | ||||
| 
 | ||||
| {{% codetab %}} | ||||
| This command will install the latest linux Dapr CLI to `/usr/local/bin`: | ||||
| This command installs the latest linux Dapr CLI to `/usr/local/bin`: | ||||
| ```bash | ||||
| wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash | ||||
| ``` | ||||
| {{% /codetab %}} | ||||
| 
 | ||||
| {{% codetab %}} | ||||
| This command will install the latest windows Dapr cli to `%USERPROFILE%\.dapr\` and add this directory to User PATH environment variable: | ||||
| This command installs the latest windows Dapr cli to `C:\dapr` and add this directory to User PATH environment variable. Run in Command Prompt: | ||||
| ```powershell | ||||
| powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex" | ||||
| ``` | ||||
| Verify by opening Explorer and entering `%USERPROFILE%\.dapr\` into the address bar. You should see folders for bin, componenets and a config file. | ||||
| Verify by opening Explorer and entering `C:\dapr` into the address bar. You should see folders for bin, components, and a config file. | ||||
| {{% /codetab %}} | ||||
| 
 | ||||
| {{% codetab %}} | ||||
| This command will install the latest darwin Dapr CLI to `/usr/local/bin`: | ||||
| This command installs the latest darwin Dapr CLI to `/usr/local/bin`: | ||||
| ```bash | ||||
| curl -fsSL https://raw.githubusercontent.com/dapr/cli/master/install/install.sh | /bin/bash | ||||
| ``` | ||||
|  | @ -57,6 +57,6 @@ Each release of Dapr CLI includes various OSes and architectures. These binary v | |||
| Learn more about the CLI and available commands in the [CLI docs]( {{< ref cli >}}). | ||||
| 
 | ||||
| ## Next steps | ||||
| - [Init Dapr locally]({{< ref install-dapr.md >}}) | ||||
| - [Init Dapr locally]({{< ref install-dapr-selfhost.md >}}) | ||||
| - [Init Dapr on Kubernetes]({{< ref install-dapr-kubernetes.md >}}) | ||||
| - [Try a Dapr Quickstart]({{< ref quickstarts.md >}}) | ||||
| 
 | ||||
|  |  | |||
|  | @ -8,14 +8,20 @@ description: "Install Dapr in a Kubernetes cluster" | |||
| 
 | ||||
| When setting up Kubernetes you can use either the Dapr CLI or Helm. | ||||
| 
 | ||||
| The following pods will be installed: | ||||
| As part of the Dapr initialization the following pods are installed: | ||||
| 
 | ||||
| - dapr-operator: Manages component updates and Kubernetes services endpoints for Dapr (state stores, pub/subs, etc.) | ||||
| - dapr-sidecar-injector: Injects Dapr into annotated deployment pods | ||||
| - dapr-placement: Used for actors only. Creates mapping tables that map actor instances to pods | ||||
| - dapr-sentry: Manages mTLS between services and acts as a certificate authority | ||||
| - **dapr-operator:** Manages component updates and Kubernetes services endpoints for Dapr (state stores, pub/subs, etc.) | ||||
| - **dapr-sidecar-injector:** Injects Dapr into annotated deployment pods | ||||
| - **dapr-placement:** Used for actors only. Creates mapping tables that map actor instances to pods | ||||
| - **dapr-sentry:** Manages mTLS between services and acts as a certificate authority | ||||
| 
 | ||||
| ## Setup cluster | ||||
| ## Prerequisites | ||||
| 
 | ||||
| - Install [Dapr CLI]({{< ref install-dapr-cli.md >}}) | ||||
| - Install [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) | ||||
| - Kubernetes cluster (see below if needed) | ||||
| 
 | ||||
| ### Create cluster | ||||
| 
 | ||||
| You can install Dapr on any Kubernetes cluster. Here are some helpful links: | ||||
| 
 | ||||
|  | @ -24,8 +30,8 @@ You can install Dapr on any Kubernetes cluster. Here are some helpful links: | |||
| - [Setup Google Cloud Kubernetes Engine](https://cloud.google.com/kubernetes-engine/docs/quickstart) | ||||
| - [Setup Amazon Elastic Kubernetes Service](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) | ||||
| 
 | ||||
| {{% alert title="Note" color="primary" %}} | ||||
| Both the Dapr CLI and the Dapr Helm chart automatically deploy with affinity for nodes with the label `kubernetes.io/os=linux`. You can deploy Dapr to Windows nodes, but most users should not need to. For more information see [Deploying to a hybrid Linux/Windows Kubernetes cluster]({{<ref kubernetes-hybrid-clusters>}}). | ||||
| {{% alert title="Hybrid clusters" color="primary" %}} | ||||
| Both the Dapr CLI and the Dapr Helm chart automatically deploy with affinity for nodes with the label `kubernetes.io/os=linux`. You can deploy Dapr to Windows nodes if your application requires it. For more information see [Deploying to a hybrid Linux/Windows Kubernetes cluster]({{<ref kubernetes-hybrid-clusters>}}). | ||||
| {{% /alert %}} | ||||
| 
 | ||||
| 
 | ||||
|  | @ -33,13 +39,19 @@ Both the Dapr CLI and the Dapr Helm chart automatically deploy with affinity for | |||
| 
 | ||||
| You can install Dapr to a Kubernetes cluster using the [Dapr CLI]({{< ref install-dapr-cli.md >}}). | ||||
| 
 | ||||
| {{% alert title="Note" color="warning" %}} | ||||
| This command will download and install Dapr v0.11. To install v1.0-rc.1, the release candidate for the [upcoming v1.0 release](https://blog.dapr.io/posts/2020/10/20/the-path-to-v.1.0-production-ready-dapr/), please visit the [v1.0-rc.1 docs](https://v1-rc1.docs.dapr.io/getting-started/install-dapr-kubernetes). | ||||
| {{% alert title="Release candidate" color="warning" %}} | ||||
| This command downloads and install Dapr runtime v0.11. To install v1.0-rc1, the latest release prior to the release candidates for the [upcoming v1.0 release](https://blog.dapr.io/posts/2020/10/20/the-path-to-v.1.0-production-ready-dapr/), please visit the [v1.0-rc1 docs](https://v1-rc1.docs.dapr.io). | ||||
| {{% /alert %}} | ||||
| 
 | ||||
| ### Install Dapr | ||||
| 
 | ||||
| The `-k` flag will initialize Dapr on the Kuberentes cluster in your current context. | ||||
| The `-k` flag initializes Dapr on the Kubernetes cluster in your current context. | ||||
| 
 | ||||
| {{% alert title="Target cluster" color="primary" %}} | ||||
| Make sure the correct "target" cluster is set. Check `kubectl context (kubectl config kubectl config get-contexts)` to verify. You can set a different context using `kubectl config use-context <CONTEXT>`. | ||||
| {{% /alert %}} | ||||
| 
 | ||||
| Run `dapr init -k` on your local machine: | ||||
| 
 | ||||
| ```bash | ||||
| $ dapr init -k | ||||
|  | @ -51,14 +63,15 @@ $ dapr init -k | |||
| ✅  Success! Dapr has been installed to namespace dapr-system. To verify, run "dapr status -k" in your terminal. To get started, go here: https://aka.ms/dapr-getting-started | ||||
| ``` | ||||
| 
 | ||||
| ### Install to a custom namespace: | ||||
| ### Install in custom namespace | ||||
| 
 | ||||
| The default namespace when initializeing Dapr is `dapr-system`. You can override this with the `-n` flag. | ||||
| The default namespace when initializing Dapr is `dapr-system`. You can override this with the `-n` flag. | ||||
| 
 | ||||
| ``` | ||||
| dapr init -k -n mynamespace | ||||
| ``` | ||||
| 
 | ||||
| 
 | ||||
| ### Install in highly available mode: | ||||
| 
 | ||||
| You can run Dapr with 3 replicas of each control plane pod with the exception of the Placement pod in the dapr-system namespace for [production scenarios]({{< ref kubernetes-production.md >}}). | ||||
|  | @ -67,7 +80,7 @@ You can run Dapr with 3 replicas of each control plane pod with the exception of | |||
| dapr init -k --enable-ha=true | ||||
| ``` | ||||
| 
 | ||||
| ### Disable mTLS: | ||||
| ### Disable mTLS | ||||
| 
 | ||||
| Dapr is initialized by default with [mTLS]({{< ref "security-concept.md#sidecar-to-sidecar-communication" >}}). You can disable it with: | ||||
| 
 | ||||
|  | @ -75,7 +88,7 @@ Dapr is initialized by default with [mTLS]({{< ref "security-concept.md#sidecar- | |||
| dapr init -k --enable-mtls=false | ||||
| ``` | ||||
| 
 | ||||
| ### Uninstall Dapr on Kubernetes | ||||
| ### Uninstall Dapr on Kubernetes with CLI | ||||
| 
 | ||||
| ```bash | ||||
| $ dapr uninstall --kubernetes | ||||
|  | @ -90,10 +103,10 @@ You can install Dapr to Kubernetes cluster using a Helm 3 chart. | |||
| The latest Dapr helm chart no longer supports Helm v2. Please migrate from helm v2 to helm v3 by following [this guide](https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/). | ||||
| {{% /alert %}} | ||||
| 
 | ||||
| ### Install Dapr on Kubernetes | ||||
| ### Add and install Dapr helm chart | ||||
| 
 | ||||
| 1. Make sure Helm 3 is installed on your machine | ||||
| 2. Add Helm repo | ||||
| 1. Make sure [Helm 3](https://github.com/helm/helm/releases) is installed on your machine | ||||
| 2. Add Helm repo and update | ||||
| 
 | ||||
|     ```bash | ||||
|     helm repo add dapr https://dapr.github.io/helm-charts/ | ||||
|  | @ -114,7 +127,7 @@ The latest Dapr helm chart no longer supports Helm v2. Please migrate from helm | |||
| 
 | ||||
| ### Verify installation | ||||
| 
 | ||||
| Once the chart installation is complete, verify the dapr-operator, dapr-placement, dapr-sidecar-injector and dapr-sentry pods are running in the `dapr-system` namespace: | ||||
| Once the chart installation is complete verify the dapr-operator, dapr-placement, dapr-sidecar-injector and dapr-sentry pods are running in the `dapr-system` namespace: | ||||
| 
 | ||||
| ```bash | ||||
| $ kubectl get pods -n dapr-system -w | ||||
|  | @ -133,8 +146,10 @@ dapr-sentry-9435776c7f-8f7yd             1/1       Running   0          40s | |||
| helm uninstall dapr -n dapr-system | ||||
| ``` | ||||
| 
 | ||||
| > **Note:** See [this page](https://github.com/dapr/dapr/blob/master/charts/dapr/README.md) for details on Dapr helm charts. | ||||
| ### More information | ||||
| 
 | ||||
| ## Sidecar annotations | ||||
| See [this page](https://github.com/dapr/dapr/blob/master/charts/dapr/README.md) for details on Dapr helm charts. | ||||
| 
 | ||||
| To see all the supported annotations for the Dapr sidecar on Kubernetes, visit [this]({{<ref "kubernetes-annotations.md">}}) how to guide. | ||||
| ## Next steps | ||||
| 
 | ||||
| - [Configure state store & pubsub message broker]({{< ref configure-state-pubsub.md >}}) | ||||
|  |  | |||
|  | @ -0,0 +1,116 @@ | |||
| --- | ||||
| type: docs | ||||
| title: "How-To: Install Dapr into your local environment" | ||||
| linkTitle: "Init Dapr locally" | ||||
| weight: 20 | ||||
| description: "Install Dapr in your local environment for testing and self-hosting" | ||||
| aliases: | ||||
|   - /getting-started/install-dapr/ | ||||
| --- | ||||
| 
 | ||||
| ## Prerequisites | ||||
| 
 | ||||
| - Install [Dapr CLI]({{< ref install-dapr-cli.md >}}) | ||||
| - Install [Docker Desktop](https://docs.docker.com/install/) | ||||
|    - Windows users ensure that `Docker Desktop For Windows` uses Linux containers. | ||||
|    - (alternately) Install Dapr without Docker using [Dapr slim init]({{< ref self-hosted-no-docker.md >}}) | ||||
| 
 | ||||
| ## Initialize Dapr using the CLI | ||||
| 
 | ||||
| This step installs the latest Dapr Docker containers and setup a developer environment to help you get started easily with Dapr. | ||||
| 
 | ||||
| - In Linux/MacOS Dapr is initialized with default components and files in `$HOME/.dapr`. | ||||
| - For Windows Dapr is initialized to `%USERPROFILE%\.dapr\` | ||||
| 
 | ||||
| {{% alert title="Note" color="warning" %}} | ||||
| This command downloads and installs Dapr runtime v0.11. To install v1.0-rc1, the release candidates for the [upcoming v1.0 release](https://blog.dapr.io/posts/2020/10/20/the-path-to-v.1.0-production-ready-dapr/), please visit the [v1.0-rc1 docs](https://v1-rc1.docs.dapr.io). | ||||
| {{% /alert %}} | ||||
| 
 | ||||
| 1. Ensure you are in an elevated terminal: | ||||
| 
 | ||||
|    {{< tabs "Linux/MacOS" "Windows">}} | ||||
| 
 | ||||
|    {{% codetab %}} | ||||
|    If you run your docker commands with sudo or the install path is `/usr/local/bin`(default install path), you need to use `sudo` | ||||
|    {{% /codetab %}} | ||||
|     | ||||
|    {{% codetab %}} | ||||
|    Make sure that you run the command prompt terminal in administrator mode (right click, run as administrator) | ||||
|    {{% /codetab %}} | ||||
|     | ||||
|    {{< /tabs >}} | ||||
| 
 | ||||
| 1. Run `dapr init`: | ||||
| 
 | ||||
|    You can install or upgrade to a specific version of the Dapr runtime using `dapr init --runtime-version`. You can find the list of versions in [Dapr Release](https://github.com/dapr/dapr/releases) | ||||
| 
 | ||||
|     ```bash | ||||
|     $ dapr init | ||||
|     ⌛  Making the jump to hyperspace... | ||||
|     Downloading binaries and setting up components | ||||
|     ✅  Success! Dapr is up and running. To get started, go here: https://aka.ms/dapr-getting-started | ||||
|     ``` | ||||
| 
 | ||||
| 1. Verify Dapr version with `dapr --version`: | ||||
| 
 | ||||
|     ```bash | ||||
|     $ dapr --version | ||||
|     CLI version: 0.11 | ||||
|     Runtime version: 0.11 | ||||
|     ``` | ||||
| 
 | ||||
| 1. Verify Dapr containers are running with `docker ps`: | ||||
| 
 | ||||
|    Make sure the `daprio/dapr`, `openzipkin/zipkin`, and `redis` container images are all running: | ||||
| 
 | ||||
|    ```bash | ||||
|    $ docker ps | ||||
|    CONTAINER ID   IMAGE                    COMMAND                  CREATED         STATUS         PORTS                              NAMES | ||||
|    0dda6684dc2e   openzipkin/zipkin        "/busybox/sh run.sh"     2 minutes ago   Up 2 minutes   9410/tcp, 0.0.0.0:9411->9411/tcp   dapr_zipkin | ||||
|    9bf6ef339f50   redis                    "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:6379->6379/tcp             dapr_redis | ||||
|    8d993e514150   daprio/dapr              "./placement"            2 minutes ago   Up 2 minutes   0.0.0.0:6050->50005/tcp            dapr_placement | ||||
|    ``` | ||||
| 
 | ||||
| 1. Verify Dapr directory has been initialized | ||||
| 
 | ||||
|    {{< tabs "Linux/MacOS" "Windows">}} | ||||
| 
 | ||||
|    {{% codetab %}} | ||||
|    Run `ls $HOME/.dapr`: | ||||
|    ```bash | ||||
|    $ ls $HOME/.dapr | ||||
|    bin  components  config.yaml | ||||
|    ``` | ||||
|    {{% /codetab %}} | ||||
|     | ||||
|    {{% codetab %}} | ||||
|    Open `%USERPROFILE%\.dapr\` in file explorer | ||||
|        | ||||
|     | ||||
|    {{% /codetab %}} | ||||
|     | ||||
|    {{< /tabs >}} | ||||
| 
 | ||||
| ## Uninstall Dapr in self-hosted mode | ||||
| 
 | ||||
| This cli command removes the placement Dapr container: | ||||
| 
 | ||||
| ```bash | ||||
| $ dapr uninstall | ||||
| ``` | ||||
| 
 | ||||
| {{% alert title="Warning" color="warning" %}} | ||||
| This command won't remove the Redis or Zipkin containers by default, just in case you were using them for other purposes. To remove Redis, Zipkin, Actor Placement container, as well as the default Dapr directory located at `$HOME/.dapr` or `%USERPROFILE%\.dapr\`, run: | ||||
| 
 | ||||
| ```bash | ||||
| $ dapr uninstall --all | ||||
| ``` | ||||
| {{% /alert %}} | ||||
| 
 | ||||
| {{% alert title="Note" color="primary" %}} | ||||
| For Linux/MacOS users, if you run your docker cmds with sudo or the install path is `/usr/local/bin`(default install path), you need to use `sudo dapr uninstall` to remove dapr binaries and/or the containers. | ||||
| {{% /alert %}} | ||||
| 
 | ||||
| ## Next steps | ||||
| - [Setup a state store and pub/sub message broker]({{< ref configure-state-pubsub.md >}}) | ||||
| 
 | ||||
|  | @ -1,86 +0,0 @@ | |||
| --- | ||||
| type: docs | ||||
| title: "How-To: Install Dapr into your local environment" | ||||
| linkTitle: "Init Dapr locally" | ||||
| weight: 20 | ||||
| description: "Install Dapr in your local environment for testing and self-hosting" | ||||
| --- | ||||
| 
 | ||||
| ## Prerequisites | ||||
| 
 | ||||
| - Install [Dapr CLI]({{< ref install-dapr-cli.md >}}) | ||||
| - Install [Docker Desktop](https://docs.docker.com/install/) | ||||
|    - Windows users ensure that `Docker Desktop For Windows` uses Linux containers. | ||||
| 
 | ||||
| By default Dapr will install with a developer environment using Docker containers to get you started easily. This getting started guide assumes Docker is installed to ensure the best experience. However, Dapr does not depend on Docker to run. Read [this page]({{< ref self-hosted-no-docker.md >}}) for instructions on installing Dapr locally without Docker using slim init. | ||||
| 
 | ||||
| ## Initialize Dapr using the CLI | ||||
| 
 | ||||
| This step will install the latest Dapr Docker containers and setup a developer environment to help you get started easily with Dapr. | ||||
| 
 | ||||
| {{% alert title="Note" color="warning" %}} | ||||
| This command will download and install Dapr v0.11. To install v1.0-rc.1, the release candidate for the [upcoming v1.0 release](https://blog.dapr.io/posts/2020/10/20/the-path-to-v.1.0-production-ready-dapr/), please visit the [v1.0-rc.1 docs](https://v1-rc1.docs.dapr.io/getting-started/install-dapr). | ||||
| {{% /alert %}} | ||||
| 
 | ||||
| 1. Ensure you are in an elevated terminal: | ||||
|    - **Linux/MacOS:** if you run your docker cmds with sudo or the install path is `/usr/local/bin`(default install path), you need to use `sudo` | ||||
|    - **Windows:** make sure that you run the cmd terminal in administrator mode | ||||
| 
 | ||||
| 2. Run `dapr init` | ||||
| 
 | ||||
|     ```bash | ||||
|     $ dapr init | ||||
|     ⌛  Making the jump to hyperspace... | ||||
|     Downloading binaries and setting up components | ||||
|     ✅  Success! Dapr is up and running. To get started, go here: https://aka.ms/dapr-getting-started | ||||
|     ``` | ||||
| 
 | ||||
| 3. Verify installation | ||||
| 
 | ||||
|    From a command prompt run the `docker ps` command and check that the `daprio/dapr`, `openzipkin/zipkin`, and `redis` container images are running: | ||||
| 
 | ||||
|    ```bash | ||||
|    $ docker ps | ||||
|    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                              NAMES | ||||
|    67bc611a118c        daprio/dapr         "./placement"            About a minute ago   Up About a minute   0.0.0.0:6050->50005/tcp            dapr_placement | ||||
|    855f87d10249        openzipkin/zipkin   "/busybox/sh run.sh"     About a minute ago   Up About a minute   9410/tcp, 0.0.0.0:9411->9411/tcp   dapr_zipkin | ||||
|    71cccdce0e8f        redis               "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:6379->6379/tcp             dapr_redis | ||||
|    ``` | ||||
| 
 | ||||
| 4. Visit our [hello world quickstart](https://github.com/dapr/quickstarts/tree/master/hello-world) or dive into the [Dapr building blocks]({{< ref building-blocks >}}) | ||||
| 
 | ||||
| ## (optional) Install a specific runtime version | ||||
| 
 | ||||
| You can install or upgrade to a specific version of the Dapr runtime using `dapr init --runtime-version`. You can find the list of versions in [Dapr Release](https://github.com/dapr/dapr/releases). | ||||
| 
 | ||||
| ```bash | ||||
| # Install v0.11.0 runtime | ||||
| $ dapr init --runtime-version 0.11.0 | ||||
| 
 | ||||
| # Check the versions of cli and runtime | ||||
| $ dapr --version | ||||
| cli version: v0.11.0 | ||||
| runtime version: v0.11.2 | ||||
| ``` | ||||
| 
 | ||||
| ## Uninstall Dapr in self-hosted mode | ||||
| 
 | ||||
| This command will remove the placement Dapr container: | ||||
| 
 | ||||
| ```bash | ||||
| $ dapr uninstall | ||||
| ``` | ||||
| 
 | ||||
| {{% alert title="Warning" color="warning" %}} | ||||
| This command won't remove the Redis or Zipkin containers by default, just in case you were using them for other purposes. To remove Redis, Zipkin, Actor Placement container, as well as the default Dapr directory located at `$HOME/.dapr` or `%USERPROFILE%\.dapr\`, run: | ||||
| 
 | ||||
| ```bash | ||||
| $ dapr uninstall --all | ||||
| ``` | ||||
| {{% /alert %}} | ||||
| 
 | ||||
| > For Linux/MacOS users, if you run your docker cmds with sudo or the install path is `/usr/local/bin`(default install path), you need to use `sudo dapr uninstall` to remove dapr binaries and/or the containers. | ||||
| 
 | ||||
| ## Configure Redis | ||||
| 
 | ||||
| Unlike Dapr self-hosted, redis is not pre-installed out of the box on Kubernetes. To install Redis as a state store or as a pub/sub message bus in your Kubernetes cluster see [How-To: Setup Redis]({{< ref configure-redis.md >}}) | ||||
|  | @ -2,21 +2,26 @@ | |||
| type: docs | ||||
| title: "Try out Dapr quickstarts to learn core concepts" | ||||
| linkTitle: "Dapr Quickstarts" | ||||
| weight: 50 | ||||
| description: "Configure Redis for Dapr state management or Pub/Sub" | ||||
| weight: 60 | ||||
| description: "Tutorials with code samples that are aimed to get you started quickly with Dapr" | ||||
| --- | ||||
| 
 | ||||
| The [Dapr Quickstarts](https://github.com/dapr/quickstarts) are a collection of tutorials with code samples that are aimed to get you started quickly with Dapr, each highlighting a different Dapr capability. | ||||
| The [Dapr Quickstarts](https://github.com/dapr/quickstarts/tree/release-0.11) are a collection of tutorials with code samples that are aimed to get you started quickly with Dapr, each highlighting a different Dapr capability. | ||||
| 
 | ||||
| - A good place to start is the hello-world quickstart, it demonstrates how to run Dapr in standalone mode locally on your machine and demonstrates state management and service invocation in a simple application. | ||||
| - Next, if you are familiar with Kubernetes and want to see how to run the same application in a Kubernetes environment, look for the hello-kubernetes quickstart. Other quickstarts such as pub-sub, bindings and the distributed-calculator quickstart explore different Dapr capabilities include instructions for running both locally and on Kubernetes and can be completed in any order. A full list of the quickstarts can be found below. | ||||
| - At anytime, you can explore the Dapr documentation or SDK specific samples and come back to try additional quickstarts. | ||||
| - When you're done, consider exploring the [Dapr samples repository](https://github.com/dapr/samples) for additional code samples contributed by the community that show more advanced or specific usages of Dapr. | ||||
| 
 | ||||
| ## Quickstarts | ||||
| 
 | ||||
| | Quickstart               | Description                                                                                                                                                                                    | | ||||
| |--------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | ||||
| | [Hello-world](https://github.com/dapr/quickstarts/tree/master/hello-world)            | Demonstrates how to run Dapr locally. Highlights service invocation and state management.                                                                                                      | | ||||
| | [Hello-kubernetes](https://github.com/dapr/quickstarts/tree/master/hello-kubernetes)       | Demonstrates how to run Dapr in Kubernetes. Highlights service invocation and state management.                                                                                                | | ||||
| | [Distributed-calculator](https://github.com/dapr/quickstarts/tree/master/distributed-calculator) | Demonstrates a distributed calculator application that uses Dapr services to power a React web app. Highlights polyglot (multi-language) programming, service invocation and state management. | | ||||
| | [Pub-sub](https://github.com/dapr/quickstarts/tree/master/pub-sub)                | Demonstrates how to use Dapr to enable pub-sub applications. Uses Redis as a pub-sub component.                                                                                          | | ||||
| | [Bindings](https://github.com/dapr/quickstarts/tree/master/bindings)            | Demonstrates how to use Dapr to create input and output bindings to other components. Uses bindings to Kafka.                                                                            | | ||||
| | [Middleware](https://github.com/dapr/quickstarts/tree/master/middleware) | Demonstrates use of Dapr middleware to enable OAuth 2.0 authorization. | | ||||
| | [Observability](https://github.com/dapr/quickstarts/tree/master/observability) | Demonstrates Dapr tracing capabilities. Uses Zipkin as a tracing component. | | ||||
| | [Secret Store](https://github.com/dapr/quickstarts/tree/master/secretstore) | Demonstrates the use of Dapr Secrets API to access secret stores. | | ||||
| | [Hello World](https://github.com/dapr/quickstarts/tree/release-0.11/hello-world)            | Demonstrates how to run Dapr locally. Highlights service invocation and state management.                                                                                                      | | ||||
| | [Hello Kubernetes](https://github.com/dapr/quickstarts/tree/release-0.11/hello-kubernetes)       | Demonstrates how to run Dapr in Kubernetes. Highlights service invocation and state management.                                                                                                | | ||||
| | [Distributed Calculator](https://github.com/dapr/quickstarts/tree/release-0.11/distributed-calculator) | Demonstrates a distributed calculator application that uses Dapr services to power a React web app. Highlights polyglot (multi-language) programming, service invocation and state management. | | ||||
| | [Pub/Sub](https://github.com/dapr/quickstarts/tree/release-0.11/pub-sub)                | Demonstrates how to use Dapr to enable pub-sub applications. Uses Redis as a pub-sub component.                                                                                          | | ||||
| | [Bindings](https://github.com/dapr/quickstarts/tree/release-0.11/bindings)            | Demonstrates how to use Dapr to create input and output bindings to other components. Uses bindings to Kafka.                                                                            | | ||||
| | [Middleware](https://github.com/dapr/quickstarts/tree/release-0.11/middleware) | Demonstrates use of Dapr middleware to enable OAuth 2.0 authorization. | | ||||
| | [Observability](https://github.com/dapr/quickstarts/tree/release-0.11/observability) | Demonstrates Dapr tracing capabilities. Uses Zipkin as a tracing component. | | ||||
| | [Secret Store](https://github.com/dapr/quickstarts/tree/release-0.11/secretstore) | Demonstrates the use of Dapr Secrets API to access secret stores. | | ||||
|  |  | |||
|  | @ -23,6 +23,7 @@ metadata: | |||
|   namespace: production | ||||
| spec: | ||||
|   type: state.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: redis-master:6379 | ||||
|  | @ -71,6 +72,7 @@ metadata: | |||
|   namespace: production | ||||
| spec: | ||||
|   type: state.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: redis-master:6379 | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| --- | ||||
| type: docs | ||||
| title: "How-To: Reference secret stores in components" | ||||
| title: "How-To: Reference secrets in components" | ||||
| linkTitle: "How-To: Reference secrets" | ||||
| weight: 200 | ||||
| description: "How to securly reference secrets from a component definition" | ||||
|  | @ -18,9 +18,93 @@ When running in Kubernetes, if the `auth.secretStore` is empty, the Kubernetes s | |||
| 
 | ||||
| Go to [this]({{< ref "howto-secrets.md" >}}) link to see all the secret stores supported by Dapr, along with information on how to configure and use them. | ||||
| 
 | ||||
| ## Non default namespaces | ||||
| ## Referencing secrets | ||||
| 
 | ||||
| If your Dapr enabled apps are using components that fetch secrets from non-default namespaces, apply the following resources to the namespace: | ||||
| While you have the option to use plain text secrets, this is not recommended for production: | ||||
| 
 | ||||
| ```yml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
| kind: Component | ||||
| metadata: | ||||
|   name: statestore | ||||
|   namespace: default | ||||
| spec: | ||||
|   type: state.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: localhost:6379 | ||||
|   - name: redisPassword | ||||
|     value: MyPassword | ||||
| ``` | ||||
| 
 | ||||
| Instead create the secret in your secret store and reference it in the component definition: | ||||
| 
 | ||||
| ```yml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
| kind: Component | ||||
| metadata: | ||||
|   name: statestore | ||||
|   namespace: default | ||||
| spec: | ||||
|   type: state.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: localhost:6379 | ||||
|   - name: redisPassword | ||||
|     secretKeyRef: | ||||
|     	name: redis-secret | ||||
|         key:  redis-password | ||||
| auth: | ||||
|   secretStore: <SECRET_STORE_NAME> | ||||
| ``` | ||||
| 
 | ||||
| `SECRET_STORE_NAME` is the name of the configured [secret store component]({{< ref supported-secret-stores >}}). When running in Kubernetes and using a Kubernetes secret store, the field `auth.SecretStore` defaults to `kubernetes` and can be left empty.  | ||||
| 
 | ||||
| The above component definition tells Dapr to extract a secret named `redis-secret` from the defined secret store and assign the value of the `redis-password` key in the secret to the `redisPassword` field in the Component. | ||||
| 
 | ||||
| ## Example  | ||||
| 
 | ||||
| ### Referencing a Kubernetes secret | ||||
| 
 | ||||
| The following example shows you how to create a Kubernetes secret to hold the connection string for an Event Hubs binding. | ||||
| 
 | ||||
| 1. First, create the Kubernetes secret: | ||||
|     ```bash | ||||
|      kubectl create secret generic eventhubs-secret --from-literal=connectionString=********* | ||||
|     ``` | ||||
| 
 | ||||
| 2. Next, reference the secret in your binding: | ||||
|     ```yaml | ||||
|     apiVersion: dapr.io/v1alpha1 | ||||
|     kind: Component | ||||
|     metadata: | ||||
|       name: eventhubs | ||||
|       namespace: default | ||||
|     spec: | ||||
|       type: bindings.azure.eventhubs | ||||
|       version: v1 | ||||
|       metadata: | ||||
|       - name: connectionString | ||||
|         secretKeyRef: | ||||
|           name: eventhubs-secret | ||||
|           key: connectionString | ||||
|     ``` | ||||
| 
 | ||||
| 3. Finally, apply the component to the Kubernetes cluster: | ||||
|     ```bash | ||||
|     kubectl apply -f ./eventhubs.yaml | ||||
|     ``` | ||||
| ## Kubernetes permissions | ||||
| 
 | ||||
| ### Default namespace  | ||||
| 
 | ||||
| When running in Kubernetes, Dapr, during installtion, defines default Role and RoleBinding for secrets access from Kubernetes secret store in the `default` namespace. For Dapr enabled apps that fetch secrets from `default` namespace, a secret can be defined and referenced in components as shown in the example above. | ||||
| 
 | ||||
| ### Non-default namespaces | ||||
| 
 | ||||
| If your Dapr enabled apps are using components that fetch secrets from non-default namespaces, apply the following resources to that namespace: | ||||
| 
 | ||||
| ```yaml | ||||
| --- | ||||
|  | @ -49,79 +133,8 @@ roleRef: | |||
|   apiGroup: rbac.authorization.k8s.io | ||||
| ``` | ||||
| 
 | ||||
| ## Examples | ||||
| These resources grant Dapr permissions to get secrets from the Kubernetes secret store for the namespace defined in the Role and RoleBinding. | ||||
| 
 | ||||
| Using plain text: | ||||
| 
 | ||||
| ```yml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
| kind: Component | ||||
| metadata: | ||||
|   name: statestore | ||||
|   namespace: default | ||||
| spec: | ||||
|   type: state.redis | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: localhost:6379 | ||||
|   - name: redisPassword | ||||
|     value: MyPassword | ||||
| ``` | ||||
| 
 | ||||
| Using a Kubernetes secret: | ||||
| 
 | ||||
| ```yml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
| kind: Component | ||||
| metadata: | ||||
|   name: statestore | ||||
|   namespace: default | ||||
| spec: | ||||
|   type: state.redis | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: localhost:6379 | ||||
|   - name: redisPassword | ||||
|     secretKeyRef: | ||||
|     	name: redis-secret | ||||
|         key:  redis-password | ||||
| auth: | ||||
|   secretStore: kubernetes | ||||
| ``` | ||||
| 
 | ||||
| The above example tells Dapr to use the `kubernetes` secret store, extract a secret named `redis-secret` and assign the value of the `redis-password` key in the secret to the `redisPassword` field in the Component. | ||||
| 
 | ||||
| ### Creating a secret and referencing it in a Component | ||||
| 
 | ||||
| The following example shows you how to create a Kubernetes secret to hold the connection string for an Event Hubs binding. | ||||
| 
 | ||||
| First, create the Kubernetes secret: | ||||
| 
 | ||||
| ```bash | ||||
| kubectl create secret generic eventhubs-secret --from-literal=connectionString=********* | ||||
| ``` | ||||
| 
 | ||||
| Next, reference the secret in your binding: | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
| kind: Component | ||||
| metadata: | ||||
|   name: eventhubs | ||||
|   namespace: default | ||||
| spec: | ||||
|   type: bindings.azure.eventhubs | ||||
|   metadata: | ||||
|   - name: connectionString | ||||
|     secretKeyRef: | ||||
|       name: eventhubs-secret | ||||
|       key: connectionString | ||||
| ``` | ||||
| 
 | ||||
| Finally, apply the component to the Kubernetes cluster: | ||||
| 
 | ||||
| ```bash | ||||
| kubectl apply -f ./eventhubs.yaml | ||||
| ``` | ||||
| 
 | ||||
| All done! | ||||
| {{% alert title="Note" color="warning" %}} | ||||
| In production scenario to limit Dapr's access to certain secret resources alone, you can use the `resourceNames` field. See this [link](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#referring-to-resources) for further explanation. | ||||
| {{% /alert %}} | ||||
|  |  | |||
|  | @ -20,14 +20,14 @@ Every binding has its own unique set of properties. Click the name link to see t | |||
| | [Kubernetes Events]({{< ref "kubernetes-binding.md" >}}) | ✅ |    | Experimental | | ||||
| | [MQTT]({{< ref mqtt.md >}})           | ✅ | ✅ | Experimental | | ||||
| | [PostgreSql]({{< ref postgres.md >}})       |    | ✅ | Experimental | | ||||
| | [Postmark]({{< ref postmark.md >}})       |    | ✅ | Experimental | | ||||
| | [RabbitMQ]({{< ref rabbitmq.md >}})   | ✅ | ✅ | Experimental | | ||||
| | [Redis]({{< ref redis.md >}})         |    | ✅ | Experimental | | ||||
| | [Twilio]({{< ref twilio.md >}})       |    | ✅ | Experimental | | ||||
| | [Twitter]({{< ref twitter.md >}})       | ✅ | ✅ | Experimental | | ||||
| | [SendGrid]({{< ref sendgrid.md >}})       |    | ✅ | Experimental | | ||||
| 
 | ||||
| 
 | ||||
| ### Amazon Web Service (AWS) | ||||
| ### Amazon Web Services (AWS) | ||||
| 
 | ||||
| | Name | Input<br>Binding | Output<br>Binding | Status | | ||||
| |------|:----------------:|:-----------------:|--------| | ||||
|  | @ -37,7 +37,6 @@ Every binding has its own unique set of properties. Click the name link to see t | |||
| | [AWS SQS]({{< ref sqs.md >}})           | ✅ | ✅ | Experimental | | ||||
| | [AWS Kinesis]({{< ref kinesis.md >}})   | ✅ | ✅ | Experimental | | ||||
| 
 | ||||
| 
 | ||||
| ### Google Cloud Platform (GCP) | ||||
| 
 | ||||
| | Name | Input<br>Binding | Output<br>Binding | Status | | ||||
|  |  | |||
|  | @ -16,6 +16,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.apns | ||||
|   version: v1 | ||||
|   metadata: | ||||
|     - name: development | ||||
|       value: <true | false> | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.azure.blobstorage | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: storageAccount | ||||
|     value: myStorageAccountName | ||||
|  | @ -22,8 +23,6 @@ spec: | |||
|     value: *********** | ||||
|   - name: container | ||||
|     value: container1 | ||||
|   - name: decodeBase64 | ||||
|     value: true | ||||
| ``` | ||||
| 
 | ||||
| - `storageAccount` is the Blob Storage account name. | ||||
|  | @ -39,7 +38,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr | |||
| 
 | ||||
| ### Create Blob | ||||
| 
 | ||||
| To perform a get blob operation, invoke the Azure Blob Storage binding with a `POST` method and the following JSON body: | ||||
| To perform a create blob operation, invoke the Azure Blob Storage binding with a `POST` method and the following JSON body: | ||||
| 
 | ||||
| ```json | ||||
| { | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.azure.cosmosdb | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: url | ||||
|     value: https://******.documents.azure.com:443/ | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.cron | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: schedule | ||||
|     value: "@every 15m" # valid cron schedule   | ||||
|  |  | |||
|  | @ -6,6 +6,7 @@ description: "Detailed documentation on the AWS DynamoDB binding component" | |||
| --- | ||||
| 
 | ||||
| ## Setup Dapr component | ||||
| See [Authenticating to AWS]({{< ref authenticating-aws.md >}}) for information about authentication-related attributes | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
|  | @ -15,22 +16,24 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.aws.dynamodb | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: table | ||||
|     value: items | ||||
|   - name: region | ||||
|     value: us-west-2 | ||||
|   - name: accessKey | ||||
|     value: ***************** | ||||
|   - name: secretKey | ||||
|     value: ***************** | ||||
|   - name: table | ||||
|     value: items | ||||
| ``` | ||||
|   - name: sessionToken | ||||
|     value: ***************** | ||||
| 
 | ||||
| - `region` is the AWS region. | ||||
| - `accessKey` is the AWS access key. | ||||
| - `secretKey` is the AWS secret key. | ||||
| ``` | ||||
| - `table` is the DynamoDB table name. | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| {{% alert title="Warning" color="warning" %}} | ||||
| The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). | ||||
| {{% /alert %}} | ||||
|  | @ -44,3 +47,4 @@ The above example uses secrets as plain strings. It is recommended to use a secr | |||
| - [How-To: Trigger application with input binding]({{< ref howto-triggers.md >}}) | ||||
| - [How-To: Use bindings to interface with external resources]({{< ref howto-bindings.md >}}) | ||||
| - [Bindings API reference]({{< ref bindings_api.md >}}) | ||||
| - [Authenticating to AWS]({{< ref authenticating-aws.md >}}) | ||||
|  |  | |||
|  | @ -16,6 +16,7 @@ metadata: | |||
|   name: <name> | ||||
| spec: | ||||
|   type: bindings.azure.eventgrid | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   # Required Input Binding Metadata | ||||
|   - name: tenantId | ||||
|  |  | |||
|  | @ -17,6 +17,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.azure.eventhubs | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: connectionString      # Azure EventHubs connection string | ||||
|     value: "Endpoint=sb://****" | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.gcp.bucket | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: bucket | ||||
|     value: mybucket | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.gcp.pubsub | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: topic | ||||
|     value: topic1 | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.http | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: url | ||||
|     value: http://something.com | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.influx | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: url # Required | ||||
|     value: <INFLUX-DB-URL> | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.kafka | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: topics # Optional. in use for input bindings | ||||
|     value: topic1,topic2 | ||||
|  |  | |||
|  | @ -8,6 +8,7 @@ description: "Detailed documentation on the AWS Kinesis binding component" | |||
| See [this](https://aws.amazon.com/kinesis/data-streams/getting-started/) for instructions on how to set up an AWS Kinesis data streams | ||||
| 
 | ||||
| ## Setup Dapr component | ||||
| See [Authenticating to AWS]({{< ref authenticating-aws.md >}}) for information about authentication-related attributes | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
|  | @ -17,24 +18,24 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.aws.kinesis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: region | ||||
|     value: AWS_REGION #replace | ||||
|   - name: accessKey | ||||
|     value: AWS_ACCESS_KEY # replace | ||||
|   - name: secretKey | ||||
|     value: AWS_SECRET_KEY #replace | ||||
|   - name: streamName | ||||
|     value: KINESIS_STREAM_NAME # Kinesis stream name | ||||
|   - name: consumerName  | ||||
|     value: KINESIS_CONSUMER_NAME # Kinesis consumer name  | ||||
|   - name: mode | ||||
|     value: shared # shared - Shared throughput or extended - Extended/Enhanced fanout | ||||
| ``` | ||||
|   - name: region | ||||
|     value: AWS_REGION #replace | ||||
|   - name: accessKey | ||||
|     value: AWS_ACCESS_KEY # replace | ||||
|   - name: secretKey | ||||
|     value: AWS_SECRET_KEY #replace | ||||
|   - name: sessionToken | ||||
|     value: ***************** | ||||
| 
 | ||||
| - `region` is the AWS region. | ||||
| - `accessKey` is the AWS access key. | ||||
| - `secretKey` is the AWS secret key. | ||||
| ``` | ||||
| - `mode` Accepted values: shared, extended. shared - Shared throughput, extended - Extended/Enhanced fanout methods. More details are [here](https://docs.aws.amazon.com/streams/latest/dev/building-consumers.html) | ||||
| - `streamName` is the AWS Kinesis Stream Name. | ||||
| - `consumerName` is the AWS Kinesis Consumer Name. | ||||
|  | @ -53,3 +54,4 @@ The above example uses secrets as plain strings. It is recommended to use a secr | |||
| - [How-To: Trigger application with input binding]({{< ref howto-triggers.md >}}) | ||||
| - [How-To: Use bindings to interface with external resources]({{< ref howto-bindings.md >}}) | ||||
| - [Bindings API reference]({{< ref bindings_api.md >}}) | ||||
| - [Authenticating to AWS]({{< ref authenticating-aws.md >}}) | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.kubernetes | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: namespace | ||||
|     value: <NAMESPACE> | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.mqtt | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: url | ||||
|     value: mqtt[s]://[username][:password]@host.domain[:port] | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.postgres | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: url # Required | ||||
|     value: <CONNECTION_STRING> | ||||
|  |  | |||
|  | @ -0,0 +1,69 @@ | |||
| --- | ||||
| type: docs | ||||
| title: "Postmark binding spec" | ||||
| linkTitle: "Postmark" | ||||
| description: "Detailed documentation on the Postmark binding component" | ||||
| --- | ||||
| 
 | ||||
| ## Setup Dapr component | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
| kind: Component | ||||
| metadata: | ||||
|   name: postmark | ||||
|   namespace: default | ||||
| spec: | ||||
|   type: bindings.postmark | ||||
|   metadata: | ||||
|   - name: accountToken | ||||
|     value: "YOUR_ACCOUNT_TOKEN" # required, this is your Postmark account token | ||||
|   - name: serverToken | ||||
|     value: "YOUR_SERVER_TOKEN" # required, this is your Postmark server token | ||||
|   - name: emailFrom | ||||
|     value: "testapp@dapr.io" # optional | ||||
|   - name: emailTo | ||||
|     value: "dave@dapr.io" # optional | ||||
|   - name: subject | ||||
|     value: "Hello!" # optional | ||||
| ``` | ||||
| 
 | ||||
| - `accountToken` is your Postmark account token, this should be considered a secret value. Required. | ||||
| - `serverToken` is your Postmark server token, this should be considered a secret value. Required. | ||||
| - `emailFrom` If set this specifies the 'from' email address of the email message. Optional field, see below. | ||||
| - `emailTo` If set this specifies the 'to' email address of the email message. Optional field, see below. | ||||
| - `emailCc` If set this specifies the 'cc' email address of the email message. Optional field, see below. | ||||
| - `emailBcc` If set this specifies the 'bcc' email address of the email message. Optional field, see below. | ||||
| - `subject` If set this specifies the subject of the email message. Optional field, see below. | ||||
| 
 | ||||
| You can specify any of the optional metadata properties on the output binding request too (e.g. `emailFrom`, `emailTo`, `subject`, etc.) | ||||
| 
 | ||||
| Combined, the optional metadata properties in the component configuration and the request payload should at least contain the `emailFrom`, `emailTo` and `subject` fields, as these are required to send an email with success. | ||||
| 
 | ||||
| Example request payload | ||||
| 
 | ||||
| ```json | ||||
| { | ||||
|   "operation": "create", | ||||
|   "metadata": { | ||||
|     "emailTo": "changeme@example.net", | ||||
|     "subject": "An email from Dapr Postmark binding" | ||||
|   }, | ||||
|   "data": "<h1>Testing Dapr Bindings</h1>This is a test.<br>Bye!" | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| {{% alert title="Warning" color="warning" %}} | ||||
| The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). | ||||
| {{% /alert %}} | ||||
| 
 | ||||
| ## Output Binding Supported Operations | ||||
| 
 | ||||
| - `create` | ||||
| 
 | ||||
| ## Related links | ||||
| 
 | ||||
| - [Bindings building block]({{< ref bindings >}}) | ||||
| - [How-To: Trigger application with input binding]({{< ref howto-triggers.md >}}) | ||||
| - [How-To: Use bindings to interface with external resources]({{< ref howto-bindings.md >}}) | ||||
| - [Bindings API reference]({{< ref bindings_api.md >}}) | ||||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.rabbitmq | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: queueName | ||||
|     value: queue1 | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: <address>:6379 | ||||
|  |  | |||
|  | @ -23,6 +23,7 @@ metadata: | |||
|   name: changes | ||||
| spec: | ||||
|   type: bindings.rethinkdb.statechange | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: address | ||||
|     value: <REPLACE-RETHINKDB-ADDRESS> # Required, e.g. 127.0.0.1:28015 or rethinkdb.default.svc.cluster.local:28015). | ||||
|  |  | |||
|  | @ -6,6 +6,7 @@ description: "Detailed documentation on the AWS S3 binding component" | |||
| --- | ||||
| 
 | ||||
| ## Setup Dapr component | ||||
| See [Authenticating to AWS]({{< ref authenticating-aws.md >}}) for information about authentication-related attributes | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
|  | @ -15,7 +16,10 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.aws.s3 | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: bucket | ||||
|     value: mybucket | ||||
|   - name: region | ||||
|     value: us-west-2 | ||||
|   - name: accessKey | ||||
|  | @ -26,10 +30,7 @@ spec: | |||
|     value: mybucket | ||||
| ``` | ||||
| 
 | ||||
| - `region` is the AWS region. | ||||
| - `accessKey` is the AWS access key. | ||||
| - `secretKey` is the AWS secret key. | ||||
| - `table` is the name of the S3 bucket to write to. | ||||
| - `bucket` is the name of the S3 bucket to write to. | ||||
| 
 | ||||
| {{% alert title="Warning" color="warning" %}} | ||||
| The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). | ||||
|  | @ -44,3 +45,4 @@ The above example uses secrets as plain strings. It is recommended to use a secr | |||
| - [How-To: Trigger application with input binding]({{< ref howto-triggers.md >}}) | ||||
| - [How-To: Use bindings to interface with external resources]({{< ref howto-bindings.md >}}) | ||||
| - [Bindings API reference]({{< ref bindings_api.md >}}) | ||||
| - [Authenticating to AWS]({{< ref authenticating-aws.md >}}) | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: bindings.twilio.sendgrid | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: emailFrom | ||||
|     value: "testapp@dapr.io" # optional  | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.azure.servicebusqueues | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: connectionString | ||||
|     value: "sb://************" | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.azure.signalr | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: connectionString | ||||
|     value: Endpoint=https://<your-azure-signalr>.service.signalr.net;AccessKey=<your-access-key>;Version=1.0; | ||||
|  |  | |||
|  | @ -6,6 +6,7 @@ description: "Detailed documentation on the AWS SNS binding component" | |||
| --- | ||||
| 
 | ||||
| ## Setup Dapr component | ||||
| See [Authenticating to AWS]({{< ref authenticating-aws.md >}}) for information about authentication-related attributes | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
|  | @ -15,20 +16,21 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.aws.sns | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: topicArn | ||||
|     value: mytopic | ||||
|   - name: region | ||||
|     value: us-west-2 | ||||
|   - name: accessKey | ||||
|     value: ***************** | ||||
|   - name: secretKey | ||||
|     value: ***************** | ||||
|   - name: topicArn | ||||
|     value: mytopic | ||||
|   - name: sessionToken | ||||
|     value: ***************** | ||||
| 
 | ||||
| ``` | ||||
| 
 | ||||
| - `region` is the AWS region. | ||||
| - `accessKey` is the AWS access key. | ||||
| - `secretKey` is the AWS secret key. | ||||
| - `topicArn` is the SNS topic name. | ||||
| 
 | ||||
| {{% alert title="Warning" color="warning" %}} | ||||
|  | @ -44,3 +46,4 @@ The above example uses secrets as plain strings. It is recommended to use a secr | |||
| - [How-To: Trigger application with input binding]({{< ref howto-triggers.md >}}) | ||||
| - [How-To: Use bindings to interface with external resources]({{< ref howto-bindings.md >}}) | ||||
| - [Bindings API reference]({{< ref bindings_api.md >}}) | ||||
| - [Authenticating to AWS]({{< ref authenticating-aws.md >}}) | ||||
|  |  | |||
|  | @ -6,6 +6,7 @@ description: "Detailed documentation on the AWS SQS binding component" | |||
| --- | ||||
| 
 | ||||
| ## Setup Dapr component | ||||
| See [Authenticating to AWS]({{< ref authenticating-aws.md >}}) for information about authentication-related attributes | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
|  | @ -15,20 +16,21 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.aws.sqs | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: queueName | ||||
|     value: items | ||||
|   - name: region | ||||
|     value: us-west-2 | ||||
|   - name: accessKey | ||||
|     value: ***************** | ||||
|   - name: secretKey | ||||
|     value: ***************** | ||||
|   - name: queueName | ||||
|     value: items | ||||
|   - name: sessionToken | ||||
|     value: ***************** | ||||
| 
 | ||||
| ``` | ||||
| 
 | ||||
| - `region` is the AWS region. | ||||
| - `accessKey` is the AWS access key. | ||||
| - `secretKey` is the AWS secret key. | ||||
| - `queueName` is the SQS queue name. | ||||
| 
 | ||||
| {{% alert title="Warning" color="warning" %}} | ||||
|  | @ -45,3 +47,4 @@ The above example uses secrets as plain strings. It is recommended to use a secr | |||
| - [How-To: Trigger application with input binding]({{< ref howto-triggers.md >}}) | ||||
| - [How-To: Use bindings to interface with external resources]({{< ref howto-bindings.md >}}) | ||||
| - [Bindings API reference]({{< ref bindings_api.md >}}) | ||||
| - [Authenticating to AWS]({{< ref authenticating-aws.md >}}) | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.azure.storagequeues | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: storageAccount | ||||
|     value: "account1" | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.twilio.sms | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: toNumber # required. | ||||
|     value: 111-111-1111 | ||||
|  |  | |||
|  | @ -17,6 +17,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: bindings.twitter | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: consumerKey | ||||
|     value: "****" # twitter api consumer key, required | ||||
|  |  | |||
|  | @ -46,6 +46,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: pubsub.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: "redisHost" | ||||
|     value: "redis-master.namespace-a.svc:6379" | ||||
|  |  | |||
|  | @ -21,6 +21,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: pubsub.<NAME> | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: <KEY> | ||||
|     value: <VALUE> | ||||
|  |  | |||
|  | @ -33,6 +33,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: pubsub.kafka | ||||
|   version: v1 | ||||
|   metadata: | ||||
|       # Kafka broker connection setting | ||||
|     - name: brokers | ||||
|  |  | |||
|  | @ -14,8 +14,10 @@ This article describes configuring Dapr to use AWS SNS/SQS for pub/sub on local | |||
| {{% codetab %}} | ||||
| For local development the [localstack project](https://github.com/localstack/localstack) is used to integrate AWS SNS/SQS. Follow the instructions [here](https://github.com/localstack/localstack#installing) to install the localstack CLI. | ||||
| 
 | ||||
| In order to use localstack with your pubsub binding, you need to provide the `awsEndpoint` configuration  | ||||
| in the component metadata. The `awsEndpoint` is unncessary when running against production AWS. | ||||
| In order to use localstack with your pubsub binding, you need to provide the `endpoint` configuration  | ||||
| in the component metadata. The `endpoint` is unncessary when running against production AWS. | ||||
| 
 | ||||
| See [Authenticating to AWS]({{< ref authenticating-aws.md >}}) for information about authentication-related attributes | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
|  | @ -24,8 +26,9 @@ metadata: | |||
|   name: messagebus | ||||
| spec: | ||||
|   type: pubsub.snssqs | ||||
|   version: v1 | ||||
|   metadata: | ||||
|     - name: awsEndpoint | ||||
|     - name: endpoint | ||||
|       value: http://localhost:4566 | ||||
|     # Use us-east-1 for localstack | ||||
|     - name: awsRegion | ||||
|  | @ -36,7 +39,7 @@ spec: | |||
| {{% codetab %}} | ||||
| To run localstack on Kubernetes, you can apply the configuration below. Localstack is then  | ||||
| reachable at the DNS name `http://localstack.default.svc.cluster.local:4566`  | ||||
| (assuming this was applied to the default namespace) and this should be used as the `awsEndpoint` | ||||
| (assuming this was applied to the default namespace) and this should be used as the `endpoint` | ||||
| ```yaml | ||||
| apiVersion: apps/v1 | ||||
| kind: Deployment | ||||
|  | @ -101,17 +104,18 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: pubsub.snssqs | ||||
|   version: v1 | ||||
|   metadata: | ||||
|     # ID of the AWS account with appropriate permissions to SNS and SQS | ||||
|     - name: awsAccountID | ||||
|       value: <AWS account ID> | ||||
|     - name: accessKey | ||||
|       value: ********** | ||||
|     # Secret for the AWS user | ||||
|     - name: awsSecret | ||||
|       value: <AWS secret> | ||||
|     - name: secretKey | ||||
|       value: ********** | ||||
|     # The AWS region you want to operate in.  | ||||
|     # See this page for valid regions: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html | ||||
|     # Make sure that SNS and SQS are available in that region. | ||||
|     - name: awsRegion | ||||
|     - name: region | ||||
|       value: us-east-1 | ||||
| ``` | ||||
| 
 | ||||
|  | @ -128,3 +132,4 @@ Visit [this guide]({{< ref "howto-publish-subscribe.md#step-2-publish-a-topic" > | |||
| - [AWS SQS as subscriber to SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-sqs-as-subscriber.html) | ||||
| - [AWS SNS API refernce](https://docs.aws.amazon.com/sns/latest/api/Welcome.html) | ||||
| - [AWS SQS API refernce](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Welcome.html) | ||||
| - [Authenticating to AWS]({{< ref authenticating-aws.md >}}) | ||||
|  |  | |||
|  | @ -24,6 +24,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: pubsub.azure.eventhubs | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: connectionString | ||||
|     value: <REPLACE-WITH-CONNECTION-STRING> # Required. "Endpoint=sb://****" | ||||
|  |  | |||
|  | @ -23,6 +23,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: pubsub.azure.servicebus | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: connectionString | ||||
|     value: <REPLACE-WITH-CONNECTION-STRING> # Required. | ||||
|  |  | |||
|  | @ -23,6 +23,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: pubsub.gcp.pubsub | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: topic | ||||
|     value: <TOPIC_NAME> | ||||
|  |  | |||
|  | @ -39,6 +39,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: pubsub.hazelcast | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: hazelcastServers | ||||
|     value: <REPLACE-WITH-HOSTS> # Required. A comma delimited string of servers. Example: "hazelcast:3000,hazelcast2:3000" | ||||
|  |  | |||
|  | @ -89,6 +89,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: pubsub.mqtt | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: url | ||||
|     value: "tcp://[username][:password]@host.domain[:port]" | ||||
|  |  | |||
|  | @ -54,6 +54,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: pubsub.natsstreaming | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: natsURL | ||||
|     value: <REPLACE-WITH-NATS-SERVER-ADDRESS> # Required. example nats://localhost:4222 | ||||
|  | @ -62,8 +63,10 @@ spec: | |||
|     # blow are subscription configuration. | ||||
|   - name: subscriptionType | ||||
|     value: <REPLACE-WITH-SUBSCRIPTION-TYPE> # Required. Allowed values: topic, queue. | ||||
|   - name: consumerID | ||||
|     value: <REPLACE-WITH-consumerID> # Optional. Any String would be accept. | ||||
|   # - name: ackWaitTime | ||||
|     # value: "" # Optional. See: https://docs.nats.io/developing-with-nats-streaming/acks#acknowledgements | ||||
|   # - name: maxInFlight | ||||
|     # value: "" # Optional. See: https://docs.nats.io/developing-with-nats-streaming/acks#acknowledgements | ||||
|   # - name: durableSubscriptionName | ||||
|   #   value: "" | ||||
|   # following subscription options - only one can be used | ||||
|  |  | |||
|  | @ -42,6 +42,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: pubsub.pulsar | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: host | ||||
|     value: <REPLACE WITH PULSAR URL> #default is localhost:6650 | ||||
|  |  | |||
|  | @ -52,11 +52,10 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: pubsub.rabbitmq | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: host | ||||
|     value: <REPLACE-WITH-HOST> # Required. Example: "amqp://rabbitmq.default.svc.cluster.local:5672", "amqp://localhost:5672" | ||||
|   - name: consumerID | ||||
|     value: <REPLACE-WITH-CONSUMER-ID> # Required. Any unique ID. Example: "myConsumerID" | ||||
|   - name: durable | ||||
|     value: <REPLACE-WITH-DURABLE> # Optional. Default: "false" | ||||
|   - name: deletedWhenUnused | ||||
|  |  | |||
|  | @ -78,6 +78,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: pubsub.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: <HOST> | ||||
|  |  | |||
|  | @ -21,6 +21,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: secretstores.<NAME> | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: <KEY> | ||||
|     value: <VALUE> | ||||
|  |  | |||
|  | @ -10,6 +10,7 @@ description: Detailed information on the  decret store component | |||
| Setup AWS Secrets Manager using the AWS documentation: https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html. | ||||
| 
 | ||||
| ## Create the Dapr component | ||||
| See [Authenticating to AWS]({{< ref authenticating-aws.md >}}) for information about authentication-related attributes | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: dapr.io/v1alpha1 | ||||
|  | @ -19,14 +20,15 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: secretstores.aws.secretmanager | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: region | ||||
|     value: [aws_region] # Required. | ||||
|   - name: accessKey # Required. | ||||
|     value: "[aws_region]" | ||||
|   - name: accessKey | ||||
|     value: "[aws_access_key]" | ||||
|   - name: secretKey # Required. | ||||
|   - name: secretKey | ||||
|     value: "[aws_secret_key]" | ||||
|   - name: sessionToken # Required. | ||||
|   - name: sessionToken | ||||
|     value: "[aws_session_token]" | ||||
| ``` | ||||
| 
 | ||||
|  | @ -47,6 +49,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: state.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: "[redis]:6379" | ||||
|  | @ -67,3 +70,4 @@ The above example uses secrets as plain strings. It is recommended to use a loca | |||
| - [How-To: Retreive a secret]({{< ref "howto-secrets.md" >}}) | ||||
| - [How-To: Reference secrets in Dapr components]({{< ref component-secrets.md >}}) | ||||
| - [Secrets API reference]({{< ref secrets_api.md >}}) | ||||
| - [Authenticating to AWS]({{< ref authenticating-aws.md >}}) | ||||
|  |  | |||
|  | @ -30,7 +30,7 @@ description: How to configure Azure Key Vault and Kubernetes to use Azure Manage | |||
| 
 | ||||
| 3. Create the managed identity(Optional) | ||||
|     | ||||
|     This step is required only if the AKS Cluster is provisoned without the flag "--enable-managed-identity". If the cluster is provisioned with a managed identity, then it is suggested to use the autogenerated managed identity that is associated to the Resource Group MC_*. | ||||
|     This step is required only if the AKS Cluster is provisoned without the flag "--enable-managed-identity". If the cluster is provisioned with manahed identity, than is suggested to use the autogenerated managed identity that is associated to the Resource Group MC_*. | ||||
| 
 | ||||
|     ```bash | ||||
|     $identity = az identity create -g [your resource group] -n [you managed identity name] -o json | ConvertFrom-Json | ||||
|  | @ -45,7 +45,7 @@ description: How to configure Azure Key Vault and Kubernetes to use Azure Manage | |||
| 
 | ||||
| 4.  Retrieve Managed Identity ID | ||||
|    | ||||
|     The two main scenarios are: | ||||
|     The two main scenario are: | ||||
|     - Service Principal, in this case the Resource Group is the one in which is deployed the AKS Service Cluster | ||||
| 
 | ||||
|     ```bash | ||||
|  | @ -67,9 +67,7 @@ description: How to configure Azure Key Vault and Kubernetes to use Azure Manage | |||
|     ``` | ||||
| 
 | ||||
| 6. Assign the Managed Identity Operator role to the AKS Service Principal | ||||
| 
 | ||||
|   Refer to the previous step about the Resource Group to use and which identity to assign. | ||||
| 
 | ||||
|   Refer to previous step about the Resource Group to use and which identity to assign | ||||
|     ```bash | ||||
|     az role assignment create  --role "Managed Identity Operator"  --assignee $clientId  --scope /subscriptions/[your subscription id]/resourcegroups/[your resource group] | ||||
| 
 | ||||
|  | @ -126,7 +124,7 @@ In Kubernetes mode, you store the certificate for the service principal into the | |||
| 
 | ||||
| 1. Create azurekeyvault.yaml component file | ||||
| 
 | ||||
|     The component yaml uses the name of your key vault and the Client ID of the managed identity to setup the secret store. | ||||
|     The component yaml uses the name of your key vault and the Cliend ID of the managed identity to setup the secret store. | ||||
| 
 | ||||
|     ```yaml | ||||
|     apiVersion: dapr.io/v1alpha1 | ||||
|  | @ -136,6 +134,7 @@ In Kubernetes mode, you store the certificate for the service principal into the | |||
|       namespace: default | ||||
|     spec: | ||||
|       type: secretstores.azure.keyvault | ||||
|       version: v1 | ||||
|       metadata: | ||||
|       - name: vaultName | ||||
|         value: [your_keyvault_name] | ||||
|  | @ -150,7 +149,7 @@ In Kubernetes mode, you store the certificate for the service principal into the | |||
|     ``` | ||||
| 
 | ||||
| ## References | ||||
| - [Azure CLI Key Vault CLI](https://docs.microsoft.com/en-us/cli/azure/keyvault?view=azure-cli-latest#az-keyvault-create) | ||||
| - [Azure CLI Keyvault CLI](https://docs.microsoft.com/en-us/cli/azure/keyvault?view=azure-cli-latest#az-keyvault-create) | ||||
| - [Create an Azure service principal with Azure CLI](https://docs.microsoft.com/en-us/cli/azure/create-an-azure-service-principal-azure-cli?view=azure-cli-latest) | ||||
| - [AAD Pod Identity](https://github.com/Azure/aad-pod-identity) | ||||
| - [Secrets building block]({{< ref secrets >}}) | ||||
|  |  | |||
|  | @ -102,6 +102,7 @@ Azure Managed Identity can be used for Azure Key Vault access on Kubernetes. Ins | |||
|       namespace: default | ||||
|     spec: | ||||
|       type: secretstores.azure.keyvault | ||||
|       version: v1 | ||||
|       metadata: | ||||
|       - name: vaultName | ||||
|         value: [your_keyvault_name] | ||||
|  | @ -140,6 +141,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: secretstores.azure.keyvault | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: vaultName | ||||
|     value: [your_keyvault_name] | ||||
|  |  | |||
|  | @ -24,6 +24,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: secretstores.local.env | ||||
|   version: v1 | ||||
|   metadata: | ||||
| ``` | ||||
| 
 | ||||
|  |  | |||
|  | @ -32,6 +32,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: secretstores.local.file | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: secretsFile | ||||
|     value: [path to the JSON file] | ||||
|  |  | |||
|  | @ -21,6 +21,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: secretstores.gcp.secretmanager | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: type | ||||
|     value: service_account | ||||
|  | @ -80,6 +81,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: state.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: "[redis]:6379" | ||||
|  |  | |||
|  | @ -30,6 +30,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: secretstores.hashicorp.vault | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: vaultAddr | ||||
|     value: [vault_address] # Optional. Default: "https://127.0.0.1:8200" | ||||
|  | @ -78,6 +79,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: state.redis | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: redisHost | ||||
|     value: "[redis]:6379" | ||||
|  |  | |||
|  | @ -20,6 +20,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: state.<DATABASE> | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: <KEY> | ||||
|     value: <VALUE> | ||||
|  |  | |||
|  | @ -51,6 +51,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.Aerospike | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: hosts | ||||
|     value: <REPLACE-WITH-HOSTS> # Required. A comma delimited string of hosts. Example: "aerospike:3000,aerospike2:3000" | ||||
|  |  | |||
|  | @ -30,6 +30,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.azure.blobstorage | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: accountName | ||||
|     value: <REPLACE-WITH-ACCOUNT-NAME> | ||||
|  | @ -55,6 +56,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.azure.blobstorage | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: accountName | ||||
|     value: <REPLACE-WITH-ACCOUNT-NAME> | ||||
|  |  | |||
|  | @ -31,6 +31,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.azure.cosmosdb | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: url | ||||
|     value: <REPLACE-WITH-URL> | ||||
|  | @ -57,6 +58,7 @@ metadata: | |||
|   name: statestore | ||||
| spec: | ||||
|   type: state.azure.cosmosdb | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: url | ||||
|     value: https://accountname.documents.azure.com:443 | ||||
|  | @ -77,6 +79,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.azure.cosmosdb | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: url | ||||
|     value: <REPLACE-WITH-URL> | ||||
|  |  | |||
|  | @ -30,6 +30,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.azure.tablestorage | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: accountName | ||||
|     value: <REPLACE-WITH-ACCOUNT-NAME> | ||||
|  | @ -55,6 +56,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.azure.tablestorage | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: accountName | ||||
|     value: <REPLACE-WITH-ACCOUNT-NAME> | ||||
|  |  | |||
|  | @ -51,6 +51,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.cassandra | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: hosts | ||||
|     value: <REPLACE-WITH-COMMA-DELIMITED-HOSTS> # Required. Example: cassandra.cassandra.svc.cluster.local | ||||
|  | @ -86,6 +87,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.cassandra | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: hosts | ||||
|     value: <REPLACE-WITH-HOSTS> | ||||
|  |  | |||
|  | @ -36,6 +36,7 @@ metadata: | |||
|   namespace: default | ||||
| spec: | ||||
|   type: state.cloudstate | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: host | ||||
|     value: "localhost:8013" | ||||
|  |  | |||
|  | @ -50,6 +50,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.consul | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: datacenter | ||||
|     value: <REPLACE-WITH-DATA-CENTER> # Required. Example: dc1 | ||||
|  | @ -79,6 +80,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.consul | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: datacenter | ||||
|     value: <REPLACE-WITH-DATACENTER> | ||||
|  |  | |||
|  | @ -45,6 +45,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.couchbase | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: couchbaseURL | ||||
|     value: <REPLACE-WITH-URL> # Required. Example: "http://localhost:8091" | ||||
|  |  | |||
|  | @ -51,6 +51,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.etcd | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: endpoints | ||||
|     value: <REPLACE-WITH-COMMA-DELIMITED-ENDPOINTS> # Required. Example: "etcd-etcd.default.svc.cluster.local:2379" | ||||
|  |  | |||
|  | @ -35,6 +35,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.gcp.firestore | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: type | ||||
|     value: <REPLACE-WITH-CREDENTIALS-TYPE> # Required. Example: "serviceaccount" | ||||
|  |  | |||
|  | @ -39,6 +39,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.hazelcast | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: hazelcastServers | ||||
|     value: <REPLACE-WITH-HOSTS> # Required. A comma delimited string of servers. Example: "hazelcast:3000,hazelcast2:3000" | ||||
|  |  | |||
|  | @ -50,6 +50,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.memcached | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: hosts | ||||
|     value: <REPLACE-WITH-COMMA-DELIMITED-ENDPOINTS> # Required. Example: "memcached.default.svc.cluster.local:11211" | ||||
|  |  | |||
|  | @ -54,6 +54,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.mongodb | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: host | ||||
|     value: <REPLACE-WITH-HOST> # Required. Example: "mongo-mongodb.default.svc.cluster.local:27017" | ||||
|  | @ -89,6 +90,7 @@ metadata: | |||
|   namespace: <NAMESPACE> | ||||
| spec: | ||||
|   type: state.mondodb | ||||
|   version: v1 | ||||
|   metadata: | ||||
|   - name: host | ||||
|     value: <REPLACE-WITH-HOST> | ||||
|  |  | |||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue