Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add yaml examples #1211

Merged
merged 2 commits into from
May 4, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions aws-yaml-cue-eks/Pulumi.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
name: cue
runtime:
name: yaml
options:
compiler: cue export
description: CUE Example
11 changes: 11 additions & 0 deletions aws-yaml-cue-eks/aws/eks.cue
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package eks

#EksCluster: {
type: "eks:Cluster"
properties: {
instanceType: *"t2.medium" | "t3.medium"
desiredCapacity: int | *2
minSize: int | *1
maxSize: int | *2
}
}
1 change: 1 addition & 0 deletions aws-yaml-cue-eks/cue.mod/module.cue
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module: "examples.pulumi.com/yaml-eks"
14 changes: 14 additions & 0 deletions aws-yaml-cue-eks/main.cue
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package main

import "examples.pulumi.com/yaml-eks/aws:eks"

resources: {
rawkode: eks.#EksCluster
stack72: eks.#EksCluster & {
properties: {
instanceType: "t2.medium"
desiredCapacity: 4
maxSize: 8
}
}
}
28 changes: 28 additions & 0 deletions aws-yaml-eks/Pulumi.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: aws-eks
runtime: yaml
description: An EKS cluster
variables:
vpcId:
Fn::Invoke:
Function: aws:ec2:getVpc
Arguments:
default: true
Return: id
subnetIds:
Fn::Invoke:
Function: aws:ec2:getSubnetIds
Arguments:
vpcId: ${vpcId}
Return: ids
resources:
cluster:
type: eks:Cluster
properties:
vpcId: ${vpcId}
subnetIds: ${subnetIds}
instanceType: "t2.medium"
desiredCapacity: 2
minSize: 1
maxSize: 2
outputs:
kubeconfig: ${cluster.kubeconfig}
49 changes: 49 additions & 0 deletions aws-yaml-eks/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@

# Amazon EKS Cluster

This example deploys an EKS Kubernetes cluster inside the default AWS VPC.

## Deploying the App

To deploy your infrastructure, follow the below steps.

## Prerequisites

1. [Install Pulumi](https://www.pulumi.com/docs/get-started/install/)
1. [Configure Pulumi for AWS](https://www.pulumi.com/docs/intro/cloud-providers/aws/setup/)

## Deploying and running the program

1. Create a new stack:

```
$ pulumi stack init dev
```

1. Set the AWS region:

```
$ pulumi config set aws:region us-east-2
```

1. Run `pulumi up` to preview and deploy changes:

```
$ pulumi up
Previewing changes:
...

Performing changes:
...
Resources:
+ 28 created

Duration: 10m0s
```

1. Check the deployed kubeconfig:

```
$ pulumi stack output kubeconfig
{"apiVersion":"v1","clusters":[{"cluster":{"certificate-authority-data":"LS0tLS1CRUdJTiBDR...
```
44 changes: 44 additions & 0 deletions aws-yaml-static-website/Pulumi.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: aws-native-static-website
runtime: yaml
description: A static website hosted on AWS S3
resources:
site-bucket:
type: aws-native:s3:Bucket
properties:
websiteConfiguration:
indexDocument: index.html
index.html:
type: aws:s3:BucketObject
properties:
bucket: ${site-bucket}
source:
Fn::FileAsset: ./www/index.html
acl: public-read
contentType: text/html
favicon.png:
type: aws:s3:BucketObject
properties:
bucket: ${site-bucket}
source:
Fn::FileAsset: ./www/favicon.png
acl: public-read
contentType: image/png
bucketPolicy:
type: aws:s3:BucketPolicy
properties:
bucket: ${site-bucket}
policy: |
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject"],
"Resource": ["${site-bucket.arn}/*"]
}
]
}
outputs:
bucketName: ${site-bucket.bucketName}
websiteUrl: ${site-bucket.websiteURL}
99 changes: 99 additions & 0 deletions aws-yaml-static-website/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
[![Deploy](https://get.pulumi.com/new/button.svg)](https://app.pulumi.com/new?template=https://github.com/pulumi/examples/blob/master/aws-native-ts-s3-folder/README.md)

# Host a Static Website on Amazon S3 with the AWS Native Provider

A static website that uses [S3's website support](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html).
For a detailed walkthrough of this example, see the tutorial [Static Website on AWS S3](https://www.pulumi.com/docs/tutorials/aws/s3-website/).

Note: Some resources are not yet supported by the Native AWS provider, so we are using both the Native
and Classic provider in this example. The resources will be updated to use native resources as they are
available in AWS's Cloud Control API.

## Deploying and running the program

Note: some values in this example will be different from run to run. These values are indicated
with `***`.

1. Install required plugins:

```bash
$ pulumi plugin install resource aws 4.37.3
$ pulumi plugin install resource aws-native 0.11.0
```

1. Create a new stack:

```bash
$ pulumi stack init dev
```

1. Set the AWS region:

Either using an environment variable
```bash
$ export AWS_REGION=us-west-2
```

Or with the stack config
```bash
$ pulumi config set aws:region us-west-2
$ pulumi config set aws-native:region us-west-2
```

1. Run `pulumi up` to preview and deploy changes. After the preview is shown you will be
prompted if you want to continue or not.

```bash
$ pulumi up
Previewing update (dev)
...

Updating (dev)

View Live: https://app.pulumi.com/***/aws-native-ts-s3-folder/dev/updates/1

Type Name Status
+ pulumi:pulumi:Stack aws-native-ts-s3-folder-dev created
+ ├─ aws-native:s3:Bucket s3-website-bucket created
+ ├─ aws:s3:BucketPolicy bucketPolicy created
+ ├─ aws:s3:BucketObject index.html created
+ └─ aws:s3:BucketObject favicon.png created

Outputs:
bucketName: "***"
websiteUrl: "http:https://***.s3-website-us-west-2.amazonaws.com"

Resources:
+ 5 created

Duration: ***
```

1. To see the resources that were created, run `pulumi stack output`:

```bash
$ pulumi stack output
Current stack outputs (2):
OUTPUT VALUE
bucketName ***
websiteUrl http:https://***.s3-website-us-west-2.amazonaws.com
```

1. To see that the S3 objects exist, you can either use the AWS Console or the AWS CLI:

```bash
$ aws s3 ls $(pulumi stack output bucketName)
2021-09-30 15:27:58 13731 favicon.png
2021-09-30 15:27:58 198 index.html
```

1. Open the site URL in a browser to see both the rendered HTML and the favicon:

```bash
$ pulumi stack output websiteUrl
***.s3-website-us-west-2.amazonaws.com
```

![Hello S3 example](https://user-images.githubusercontent.com/274700/116912066-9384e300-abfc-11eb-8130-dbcff512a9de.png)

1. To clean up resources, run `pulumi destroy` and answer the confirmation question at the prompt.
Binary file added aws-yaml-static-website/www/favicon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
15 changes: 15 additions & 0 deletions aws-yaml-static-website/www/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<html>

<head>
<meta charset="UTF-8">
<title>Hello, Pulumi!</title>
<link href="favicon.png" rel="icon" type="image/png" />
</head>

<body>
<h1>Hello, S3!</h1>
<p>Made with ❤️ with <a href="https://pulumi.com">Pulumi</a></p>
<p>This file is served from Amazon S3.</p>
</body>

</html>
103 changes: 103 additions & 0 deletions azure-yaml-app-service/Pulumi.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
name: azure-app-service
runtime: yaml
description: A static website hosted on AWS S3
configuration:
sqlAdmin:
type: String
default: pulumi
variables:
blobAccessToken:
Fn::Invoke:
Function: azure-native:storage:listStorageAccountServiceSAS
Arguments:
accountName: ${sa.name}
protocols: https
sharedAccessStartTime: '2022-01-01'
sharedAccessExpiryTime: '2030-01-01'
resource: c
resourceGroupName: ${appservicegroup.name}
permissions: r
canonicalizedResource: /blob/${sa.name}/${container.name}
contentType: application/json
cacheControl: max-age=5
contentDisposition: inline
contentEncoding: deflate
Return: serviceSasToken
resources:
appservicegroup:
type: azure-native:resources:ResourceGroup
sa:
type: azure-native:storage:StorageAccount
properties:
resourceGroupName: ${appservicegroup.name}
kind: 'StorageV2'
sku: { name: 'Standard_LRS' }
appserviceplan:
type: azure-native:web:AppServicePlan
properties:
resourceGroupName: ${appservicegroup.name}
kind: App
sku:
name: B1
tier: Basic
container:
type: azure-native:storage:BlobContainer
properties:
resourceGroupName: ${appservicegroup.name}
accountName: ${sa.name}
publicAccess: None
blob:
type: azure-native:storage:Blob
properties:
resourceGroupName: ${appservicegroup.name}
accountName: ${sa.name}
containerName: ${container.name}
type: 'Block'
source:
Fn::FileArchive: ./www
appInsights:
type: azure-native:insights:Component
properties:
resourceGroupName: ${appservicegroup.name}
applicationType: web
kind: web
sqlPassword:
type: random:RandomPassword
properties:
length: 16
special: true
sqlServer:
type: azure-native:sql:Server
properties:
resourceGroupName: ${appservicegroup.name}
administratorLogin: ${sqlAdmin}
administratorLoginPassword: ${sqlPassword.result}
version: '12.0'
db:
type: azure-native:sql:Database
properties:
resourceGroupName: ${appservicegroup.name}
serverName: ${sqlServer.name}
sku: { name: 'S0' }

app:
type: azure-native:web:WebApp
properties:
resourceGroupName: ${appservicegroup.name}
serverFarmId: ${appserviceplan}
siteConfig:
appSettings:
- name: WEBSITE_RUN_FROM_PACKAGE
value: https://${sa.name}.blob.core.windows.net/${container.name}/${blob.name}?${blobAccessToken}
- name: APPINSIGHTS_INSTRUMENTATIONKEY
value: ${appInsights.instrumentationKey}
- name: APPLICATIONINSIGHTS_CONNECTION_STRING
value: InstrumentationKey=${appInsights.instrumentationKey}
- name: ApplicationInsightsAgent_EXTENSION_VERSION
value: ~2
connectionStrings:
- name: db
type: SQLAzure
connectionString: Server= tcp:${sqlServer.name}.database.windows.net;initial catalog=${db.name};userID=${sqlAdmin};password=${sqlPassword.result};Min Pool Size=0;Max Pool Size=30;Persist Security Info=true;
outputs:
endpoint: ${app.defaultHostName}
Loading