Skip to content
Permalink
Browse files

updates

  • Loading branch information...
Scott Cate Scott Cate
Scott Cate authored and Scott Cate committed Feb 24, 2019
1 parent 27a3c50 commit 10694bf2231fc3043a177ca9c0e3e037426872a2
Showing with 3,159 additions and 1,510 deletions.
  1. +60 −0 DAT - Getting the most out of your data/DAT30/README.md
  2. +5 −5 DAT - Getting the most out of your data/DAT30/database/seed.ps1
  3. +3 −2 DEV - Building your Applications for the Cloud/DEV10/README.md
  4. +2 −2 DEV - Building your Applications for the Cloud/DEV10/deployment/azuredeploy.json
  5. +17 −0 ... Building your Applications for the Cloud/DEV10/src/frontend/src/chart/templates/aks-ingress.yaml
  6. +2 −0 ...- Building your Applications for the Cloud/DEV10/src/frontend/src/chart/templates/deployment.yaml
  7. +5 −0 DEV - Building your Applications for the Cloud/DEV10/src/frontend/src/chart/values.yaml
  8. +17 −0 ...s for the Cloud/DEV10/src/inventory-service/InventoryService.Api/chart/templates/aks-ingress.yaml
  9. +4 −0 ...our Applications for the Cloud/DEV10/src/inventory-service/InventoryService.Api/chart/values.yaml
  10. +17 −0 ...ng your Applications for the Cloud/DEV10/src/product-service/src/chart/templates/aks-ingress.yaml
  11. +4 −0 DEV - Building your Applications for the Cloud/DEV10/src/product-service/src/chart/values.yaml
  12. +2 −2 DEV - Building your Applications for the Cloud/DEV10/src/reports/CreateReport/function.json
  13. +4 −2 DEV - Building your Applications for the Cloud/DEV10/src/reports/README.MD
  14. +2 −2 DEV - Building your Applications for the Cloud/DEV10/src/reports/RunCreateReport/function.json
  15. +778 −1 DEV - Building your Applications for the Cloud/DEV20/README.md
  16. BIN ...loud/DEV20/readmeImages/{![](readmeImages/2018-11-09-09-40-38.png).png → 2018-11-09-09-40-39.png}
  17. +1 −1 DEV - Building your Applications for the Cloud/DEV20/src/Nav.js
  18. +0 −776 DEV - Building your Applications for the Cloud/DEV20/walkthrough.md
  19. +156 −0 HYB - Building and maintaining your Azure hybrid environment/HYB10/README.md
  20. +1 −1 HYB - Building and maintaining your Azure hybrid environment/HYB20/README.md
  21. +5 −0 HYB - Building and maintaining your Azure hybrid environment/HYB30/Alert Query.txt
  22. +6 −0 HYB - Building and maintaining your Azure hybrid environment/HYB30/Log analytics query.txt
  23. +11 −38 HYB - Building and maintaining your Azure hybrid environment/HYB30/README.md
  24. +1 −1 ...ng your Azure hybrid environment/HYB30/azure-templates/core-resources/windowsVirtualMachines.json
  25. +3 −0 HYB - Building and maintaining your Azure hybrid environment/HYB30/email creds.txt
  26. +1 −0 HYB - Building and maintaining your Azure hybrid environment/HYB30/phone number.txt
  27. +3 −3 ... and maintaining your Azure hybrid environment/HYB30/support-scripts/Import-dsc-configuration.ps1
  28. +3 −3 ...and maintaining your Azure hybrid environment/HYB30/support-scripts/compile-dsc-configuration.ps1
  29. +1 −1 ...ng and maintaining your Azure hybrid environment/HYB30/support-scripts/windowsfeaturesupdated.ps1
  30. +31 −299 HYB - Building and maintaining your Azure hybrid environment/HYB40/README.md
  31. +33 −0 ...d maintaining your Azure hybrid environment/HYB40/blueprints/assign-blueprint/AssignBlueprint.ps1
  32. +34 −0 ...aining your Azure hybrid environment/HYB40/blueprints/assign-blueprint/assign-blueprint-body.json
  33. +57 −0 ...taining your Azure hybrid environment/HYB40/blueprints/create-blueprint/CreateUpdateBlueprint.ps1
  34. +32 −0 ...d maintaining your Azure hybrid environment/HYB40/blueprints/create-blueprint/blueprint-body.json
  35. +18 −0 ...Building and maintaining your Azure hybrid environment/HYB40/policy/name-by-type/azuredeploy.json
  36. +14 −0 ...d maintaining your Azure hybrid environment/HYB40/policy/name-by-type/azurepolicy.parameters.json
  37. +17 −0 ...ding and maintaining your Azure hybrid environment/HYB40/policy/name-by-type/policyEnforceName.sh
  38. +23 −0 ...lding and maintaining your Azure hybrid environment/HYB40/policy/tag-append-type/azuredeploy.json
  39. +20 −0 ...aintaining your Azure hybrid environment/HYB40/policy/tag-append-type/azurepolicy.parameters.json
  40. +29 −0 ...nd maintaining your Azure hybrid environment/HYB40/policy/tag-append-type/policyTagAppendType.ps1
  41. +20 −0 ...and maintaining your Azure hybrid environment/HYB40/policy/tag-append-type/policyTagAppendType.sh
  42. +15 −0 ...- Building and maintaining your Azure hybrid environment/HYB40/policy/tag-append/azuredeploy.json
  43. +14 −0 ...and maintaining your Azure hybrid environment/HYB40/policy/tag-append/azurepolicy.parameters.json
  44. +26 −0 ...uilding and maintaining your Azure hybrid environment/HYB40/policy/tag-append/policyTagAppend.ps1
  45. +19 −0 ...Building and maintaining your Azure hybrid environment/HYB40/policy/tag-append/policyTagAppend.sh
  46. +9 −0 HYB - Building and maintaining your Azure hybrid environment/HYB40/policy/tag-deny/azuredeploy.json
  47. +8 −0 ...g and maintaining your Azure hybrid environment/HYB40/policy/tag-deny/azurepolicy.parameters.json
  48. +25 −0 HYB - Building and maintaining your Azure hybrid environment/HYB40/policy/tag-deny/policyTagDeny.ps1
  49. +19 −0 HYB - Building and maintaining your Azure hybrid environment/HYB40/policy/tag-deny/policyTagDeny.sh
  50. +26 −0 ...lding and maintaining your Azure hybrid environment/HYB40/policy/tag-deny/policyTagDenyLoopRG.ps1
  51. +22 −0 HYB - Building and maintaining your Azure hybrid environment/HYB40/rbac/container-instances-all.json
  52. +23 −0 HYB - Building and maintaining your Azure hybrid environment/HYB40/rbac/vm-restart.json
  53. +25 −0 MIG - Migrating Applications to the Cloud/MIG20/demos/00-Session outline.md
  54. +103 −0 MIG - Migrating Applications to the Cloud/MIG20/demos/01-Preparation.md
  55. +255 −0 MIG - Migrating Applications to the Cloud/MIG20/demos/02-Demos.md
  56. +102 −0 MIG - Migrating Applications to the Cloud/MIG20/demos/commands.txt
  57. +24 −0 MIG - Migrating Applications to the Cloud/MIG20/demos/new-article.json
  58. +0 −44 MIG - Migrating Applications to the Cloud/MIG20/setup/appservicedeploy.json
  59. +2 −0 MIG - Migrating Applications to the Cloud/MIG20/setup/cloudinitdocker.sh
  60. +3 −3 MIG - Migrating Applications to the Cloud/MIG20/setup/datamigrationservice-deploy.sh
  61. +86 −17 MIG - Migrating Applications to the Cloud/MIG20/setup/deploy.sh
  62. +5 −0 MIG - Migrating Applications to the Cloud/MIG20/setup/inventoryvmconfigure.sh
  63. +5 −18 MIG - Migrating Applications to the Cloud/MIG20/setup/managedinstancedeploy.json
  64. +3 −5 MIG - Migrating Applications to the Cloud/MIG20/setup/mongocloudinit.sh
  65. +2 −0 MIG - Migrating Applications to the Cloud/MIG20/setup/mongoconfigure.sh
  66. +2 −0 MIG - Migrating Applications to the Cloud/MIG20/setup/postprocess.sh
  67. +9 −0 MIG - Migrating Applications to the Cloud/MIG40/Makefile
  68. +151 −31 MIG - Migrating Applications to the Cloud/MIG40/README.md
  69. +5 −0 MIG - Migrating Applications to the Cloud/MIG40/scripts/acr-list.sh
  70. +4 −0 MIG - Migrating Applications to the Cloud/MIG40/scripts/devshell.sh
  71. +2 −0 MIG - Migrating Applications to the Cloud/MIG40/scripts/down/cosmos-delete.sh
  72. +8 −0 MIG - Migrating Applications to the Cloud/MIG40/scripts/down/funcdown.sh
  73. +2 −2 MIG - Migrating Applications to the Cloud/MIG40/scripts/down/rg-delete.sh
  74. +2 −0 MIG - Migrating Applications to the Cloud/MIG40/scripts/up/acr.sh
  75. +1 −1 MIG - Migrating Applications to the Cloud/MIG40/scripts/up/cosmos.sh
  76. +6 −0 MIG - Migrating Applications to the Cloud/MIG40/scripts/up/funcdeploy-local.sh
  77. +1 −10 MIG - Migrating Applications to the Cloud/MIG40/scripts/up/funcdeploy.sh
  78. +12 −6 MIG - Migrating Applications to the Cloud/MIG40/scripts/up/funcsetup.sh
  79. +2 −1 MIG - Migrating Applications to the Cloud/MIG40/scripts/up/postgres.sh
  80. +1 −0 MIG - Migrating Applications to the Cloud/MIG40/scripts/up/rg.sh
  81. +80 −13 MIG - Migrating Applications to the Cloud/MIG40/scripts/up/setup.sh
  82. +2 −0 MIG - Migrating Applications to the Cloud/MIG40/scripts/up/vault.sh
  83. +1 −0 MIG - Migrating Applications to the Cloud/MIG40/src/reports/.gitignore
  84. +18 −11 MIG - Migrating Applications to the Cloud/MIG40/src/reports/CreateReport/index.js
  85. +4 −2 MIG - Migrating Applications to the Cloud/MIG40/src/reports/README.MD
  86. +1 −0 MIG - Migrating Applications to the Cloud/MIG40/src/reports/RunCreateReport/index.js
  87. +13 −2 MIG - Migrating Applications to the Cloud/MIG50/Makefile
  88. +115 −22 MIG - Migrating Applications to the Cloud/MIG50/README.md
  89. +5 −0 MIG - Migrating Applications to the Cloud/MIG50/scripts/acr-list.sh
  90. +2 −0 MIG - Migrating Applications to the Cloud/MIG50/scripts/down/cosmos-delete.sh
  91. +4 −1 MIG - Migrating Applications to the Cloud/MIG50/scripts/down/funcdown.sh
  92. +3 −1 MIG - Migrating Applications to the Cloud/MIG50/scripts/down/reset.sh
  93. +1 −0 MIG - Migrating Applications to the Cloud/MIG50/scripts/down/rg-delete.sh
  94. +0 −2 MIG - Migrating Applications to the Cloud/MIG50/scripts/down/teardown.sh
  95. +4 −0 MIG - Migrating Applications to the Cloud/MIG50/scripts/helm/delete-one-frontend.sh
  96. +9 −0 MIG - Migrating Applications to the Cloud/MIG50/scripts/helm/list-pods.sh
  97. +1 −0 MIG - Migrating Applications to the Cloud/MIG50/scripts/up/acr.sh
  98. +7 −0 MIG - Migrating Applications to the Cloud/MIG50/scripts/up/aks2.sh
  99. +2 −1 MIG - Migrating Applications to the Cloud/MIG50/scripts/up/cosmos.sh
  100. +9 −0 MIG - Migrating Applications to the Cloud/MIG50/scripts/up/get-ingresses.sh
  101. +3 −1 MIG - Migrating Applications to the Cloud/MIG50/scripts/up/postgres.sh
  102. +1 −0 MIG - Migrating Applications to the Cloud/MIG50/scripts/up/rg.sh
  103. +1 −0 MIG - Migrating Applications to the Cloud/MIG50/scripts/up/rg2.sh
  104. +1 −0 MIG - Migrating Applications to the Cloud/MIG50/scripts/up/vault.sh
  105. +18 −6 MIG - Migrating Applications to the Cloud/MIG50/setup.md
  106. +54 −20 SRE - Operating applications and infrastructure in the cloud/SRE10/README.md
  107. +30 −0 SRE - Operating applications and infrastructure in the cloud/SRE10/cleanup.sh
  108. +47 −3 ...erating applications and infrastructure in the cloud/SRE10/demos/src/frontend/azure-pipelines.yml
  109. +1 −1 ...ng applications and infrastructure in the cloud/SRE10/demos/src/web-app-infra/azure-pipelines.yml
  110. +138 −134 ...perating applications and infrastructure in the cloud/SRE10/demos/src/web-app-infra/template.json
  111. +27 −0 SRE - Operating applications and infrastructure in the cloud/SRE10/reset.sh
  112. +53 −2 SRE - Operating applications and infrastructure in the cloud/SRE10/setup.sh
  113. +10 −7 SRE - Operating applications and infrastructure in the cloud/SRE10/setup/0-params.sh
  114. +3 −0 SRE - Operating applications and infrastructure in the cloud/SRE10/setup/4-vault.sh
  115. +3 −3 SRE - Operating applications and infrastructure in the cloud/SRE20/setup/0-params.sh
  116. +16 −0 SRE - Operating applications and infrastructure in the cloud/SRE20/setup/send_traffic.sh
  117. +1 −1 SRE - Operating applications and infrastructure in the cloud/SRE30/setup/0-params.sh
@@ -38,7 +38,67 @@ To run demo #3 (Azure Cognitive Services in Containers), you will need Docker in
### Installation

* Azure Pipelines Build to build the application (or you could build it manually!)
* Fork this repo
* Update the values in the `ARM/arm-parameters.json` file for your subscription and resource names. The `webapp_serverFarmResourceGroup` variable will need to match the resource group name you are planning to use to deploy this to.
* Create a new [Azure Devops](https://dev.azure.com) project
* Create a new Build pipeline pointing to your new repo. This will automatically discover the YAML file and set up the build. Click __RUN__ to create the pipeline and start the build. You will need to wait for this build to finish before you can set up the release pipeline.
* Azure Pipelines Release to deploy the ARM template, the web app, function app, and database seed scripts (or again, manual if you want).
* Create a new release pipeline
* Create the first stage as an empty job called _Deploy to Azure_
* Add the build as an artifact.
* Edit the first stage that was created.
* Rename the first job to `Azure resource group`, and set the pool to _Hosted Windows Container_
* Add a _Azure Resource Group Deployment_ task to this job.
* Set the display name to `Validate Resource Group`
* Select your subscription (adding it or authorizing it if required)
* Set the resource group name to match the one you used for the `webapp_serverFarmResourceGroup` variable in the `ARM/arm-parameters.json` file, and set the location to one nearest to you.
* Set the template and template parameters to the relevant files in the linked artifacts
* Set the deployment mode to _Validation only_
* Clone this task, and name the clone `Deploy Resource Group`.
* Add the following to the override template parameters:

`-db_administratorLogin "$(DbAdminUsername)" -db_administratorLoginPassword "$(DbAdminPassword)"`
* Set the deployment mode to be _Incremental_
* Set the deployment outputs to be `cognitiveKeys`
* Add a new agent job to the stage called `Deploy Azure Function`, and set the pool to _Hosted Windows Container_
* Add a new _Azure App Service Deploy_ task to this job
* Set the version to _4.*_
* Set the display name to `Azure App Service Deploy: Function App`
* Set the subscription
* Set the app service type to _Function app on Linux_
* Set the App service name to the `$(FunctionName)` variable
* Set the package or folder to be the `function` folder from the build artifacts
* Set the runtime stack to be _.NET_
* Add a new agent job to the stage called `Deploy Web App`, and set the pool to _Hosted Ubuntu 1604_
* Add a new _Azure App Service Deploy_ task to this job
* Set the version to _4.*_
* Set the display name to `Azure App Service Deploy: Web App`
* Set the subscription
* Set the app service type to _Web app on Linux_
* Set the App service name to the `$(WebAppName)` variable
* Set the package or folder to be the `web` folder from the build artifacts
* Set the runtime stack to be _.NET Core 2.1_
* Set the startup command to be `dotnet lp3s3-comments.dll`
* Add a new agent job to the stage called `Seed Database`, and set the pool to _Hosted VS2017_
* Add a new _Azure PowerShell_ task to this job
* Set the display name to `Azure PowerShell: run SQL`
* Set the subscription
* Set the script path to the `sql/seed.ps1` file in the build artifacts
* Set the script arguments to be:

`-dbName $(DbName) -dbAdminPassword $(DbAdminPassword) -serverName $(DbServerName) -workingDir $(System.DefaultWorkingDirectory)/<your repo>`
To set the `workingDir` parameter, copy the first two parts of the value from the script path that would have been set when selecting the artifact, up to but not including the `sql` folder.
* Set the Azure powershell version to be the latest installed version
* Head to the _Variables_ tab and add 4 new pipeline variables by taking values from the ARM template parameters
* `DbAdminPassword` - the value of `db_administratorLoginPassword`
* `DbAdminUsername` - the value of `db_administratorLogin`
* `DbName` - the value of `db_databaseName`
* `DbServerName` - the value of `db_serverName`
* `FunctionName` - the value of `function_name`
* `WebAppName` - the value of `webapp_name`
* Add the settings as described above:
* The Azure Web App needs an additional Application Setting called `FunctionsKey` with the `_master` value of the Azure function. You'll need to set this manually, because Functions v2 does not make this available programmatically.
* The Azure Function needs an additional Application Setting called `customVisionProjectId` with the GUID of the Custom Vision project you're using.

## Demos

@@ -1,16 +1,16 @@

Param(
[string]$dbAdminPassword
[string]$dbAdminPassword,
[string]$dbName,
[string]$serverName,
[string]$workingDir
)
# variables
$workingDir = $env:SYSTEM_DEFAULTWORKINGDIRECTORY
$serverName = "lp3s3-db-server"
$dbName = "lp3s3-db"
$dbUser = $env:DBADMINUSERNAME
$dbPass = $dbAdminPassword

# derived variables
$sqlScript = "$workingDir/Azure-Samples.ignite-tour-lp3s3/sql/01-initialdata.sql"
$sqlScript = "$workingDir/sql/01-initialdata.sql"
$connectionString = "Server=tcp:$serverName.database.windows.net,1433;Initial Catalog=$dbName;Persist Security Info=False;User ID=$dbUser;Password=$dbPass;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"

Write-Host "Sql Script = $sqlScript"
@@ -72,7 +72,8 @@ Presenter notes:
* Familiarize yourself [Azure Key Vault](https://docs.microsoft.com/en-us/azure/key-vault/?WT.mc_id=msignitethetour-github-dev10) capabilities
* Libraries such as [ms-rest-azure](https://www.npmjs.com/package/ms-rest-azure) (Node) and [Microsoft.Azure.Services.AppAuthentication](https://www.nuget.org/packages/Microsoft.Azure.Services.AppAuthentication?WT.mc_id=msignitethetour-github-dev10) (.NET) know how to use MSI, and can be used with Key Vault libraries to authenticate easily with MSI. On your local machine or environments with no MSI enabled, these libraries have alternate methods of authenticating the application so your code doesn't have to change.
* Currently there is no automated way for an app to pull in secrets when they are changed in Key Vault. You must restart each instance of the app manually as secrets are retrieved at app startup.
* When updating secrets in Key Vault, you need to create a new version of the secret. The behavior for enabling/disabling is weird so leave old versions enabled for simplicity.
* When updating secrets in Key Vault, you need to create a new version of the secret. The behavior for enabling/disabling can be confusing so leave old versions enabled for simplicity.
* There is now a way for App Service to reference Key Vault secrets [directly in app settings](https://docs.microsoft.com/en-us/azure/app-service/app-service-key-vault-references?WT.mc_id=msignitethetour-github-dev10) (no need to use a Key Vault client in the app).

#### Azure Cosmos DB

@@ -109,7 +110,7 @@ We'll use VS Code to deploy the frontend to Static Websites in Blob Storage.
Static Websites can be placed behind a CDN or Azure Front Door to cache data closer to the customer. This also allows users to access a cached version if Blob storage goes down temporarily.

Presenter notes:
* Static Websites is currently in preview.
* Static Websites is now generally available (as of Dec 12, 2018).

#### Azure Front Door

@@ -250,7 +250,7 @@
"locationName": "[parameters('location')]"
}
],
"enableMultipleWriteLocations": true,
"enableMultipleWriteLocations": false,
"isVirtualNetworkFilterEnabled": false,
"virtualNetworkRules": [],
"dependsOn": []
@@ -275,4 +275,4 @@
],
"$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
"contentVersion": "1.0.0.0"
}
}
@@ -0,0 +1,17 @@
{{- if .Values.aksIngress.baseDomain }}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ template "frontend.fullname" . }}
annotations:
kubernetes.io/ingress.class: addon-http-application-routing
spec:
rules:
- host: {{ template "frontend.fullname" . }}.{{ .Values.aksIngress.baseDomain }}
http:
paths:
- backend:
serviceName: {{ template "frontend.fullname" . }}
servicePort: {{ .Values.service.port }}
path: /
{{- end }}
@@ -31,6 +31,8 @@ spec:
value: "{{ .Values.externalServices.product }}"
- name: DISPLAY_SQL_INFO
value: "{{ .Values.displaySqlInfo }}"
- name: CUSTOM_TITLE
value: "{{ .Values.customTitle }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
@@ -54,3 +54,8 @@ tolerations: []
affinity: {}

displaySqlInfo: ""
customTitle: "TAILWIND TRADERS"

aksIngress:
baseDomain: ''

@@ -0,0 +1,17 @@
{{- if .Values.aksIngress.baseDomain }}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ template "inventoryservice.fullname" . }}
annotations:
kubernetes.io/ingress.class: addon-http-application-routing
spec:
rules:
- host: {{ template "inventoryservice.fullname" . }}.{{ .Values.aksIngress.baseDomain }}
http:
paths:
- backend:
serviceName: {{ template "inventoryservice.fullname" . }}
servicePort: {{ .Values.service.port }}
path: /
{{- end }}
@@ -50,3 +50,7 @@ nodeSelector: {}
tolerations: []

affinity: {}

aksIngress:
baseDomain: ''

@@ -0,0 +1,17 @@
{{- if .Values.aksIngress.baseDomain }}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ template "productservice.fullname" . }}
annotations:
kubernetes.io/ingress.class: addon-http-application-routing
spec:
rules:
- host: {{ template "productservice.fullname" . }}.{{ .Values.aksIngress.baseDomain }}
http:
paths:
- backend:
serviceName: {{ template "productservice.fullname" . }}
servicePort: {{ .Values.service.port }}
path: /
{{- end }}
@@ -48,3 +48,7 @@ nodeSelector: {}
tolerations: []

affinity: {}

aksIngress:
baseDomain: ''

@@ -11,8 +11,8 @@
"type": "sendGrid",
"name": "message",
"apiKey": "SENDGRID_API_KEY",
"to": "someone@microsoft.com",
"from": "tailwind.reports@tailwind.com",
"to": "%RECIPIENT_EMAIL%",
"from": "%SENDER_EMAIL%",
"direction": "out"
}
]
@@ -34,13 +34,15 @@ Add the following variables to your `local.settings.json` file...
"SQL_SERVER": "{Fully Qualified Server Name}",
"SQL_DATABASE": "{Name Of Database With Inventory Table}",
"SENDGRID_API_KEY": "{API Key From SendGrid}",
"SENDGRID_TEMPLATE_ID": "{SendGrid Template ID}"
"SENDGRID_TEMPLATE_ID": "{SendGrid Template ID}",
"RECIPIENT_EMAIL": "{To Email Address}",
"SENDER_EMAIL": "{From Email Address}"
```

Start the local Functions runtime. The timer trigger runs every 24 hours, so you can manually execute the report by navigating to http://localhost:7071/api/RunCreateReport.

### Modifying To/From/Subject

The To and From addresses can be modified in the `CreateReport/function.json` file. By default, the sender is `tailwind.reports@tailwind.com`. That address does not exist, but SendGrid will still send with it. You may consider swapping that out for something else. To send to multiple email addresses, separate addresses with a comma in the "to" field.
For the sender, you can use `tailwind.reports@tailwind.com`. That address does not exist, but SendGrid will still send with it. You may consider swapping that out for something else. To send to multiple email addresses, separate addresses with a comma in the "to" field.

## Deploying To Azure
@@ -17,8 +17,8 @@
"type": "sendGrid",
"name": "message",
"apiKey": "SENDGRID_API_KEY",
"to": "burke.holland@microsoft.com",
"from": "tailwind.reports@tailwind.com",
"to": "%RECIPIENT_EMAIL%",
"from": "%SENDER_EMAIL%",
"direction": "out"
}
]

0 comments on commit 10694bf

Please sign in to comment.
You can’t perform that action at this time.