index.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import * as awsx from '@pulumi/awsx'
  2. import * as eks from '@pulumi/eks'
  3. // import * as k8s from '@pulumi/kubernetes'
  4. import * as pulumi from '@pulumi/pulumi'
  5. import * as k8sjs from './k8sjs'
  6. require('dotenv').config()
  7. const awsConfig = new pulumi.Config('aws')
  8. // Create a VPC for our cluster.
  9. const vpc = new awsx.ec2.Vpc('vpc', { numberOfAvailabilityZones: 2 })
  10. // Create an EKS cluster with the default configuration.
  11. const cluster = new eks.Cluster('eksctl-my-cluster', {
  12. vpcId: vpc.id,
  13. subnetIds: vpc.publicSubnetIds,
  14. instanceType: 't2.micro',
  15. providerCredentialOpts: {
  16. profileName: awsConfig.get('profile'),
  17. },
  18. })
  19. // Export the cluster's kubeconfig.
  20. export const kubeconfig = cluster.kubeconfig
  21. // Create a repository
  22. const repo = new awsx.ecr.Repository('joystream/apps')
  23. export const joystreamAppsImage = repo.buildAndPushImage({
  24. dockerfile: '../../../apps.Dockerfile',
  25. context: '../../../',
  26. })
  27. const redis = new k8sjs.ServiceDeployment('redis', {
  28. image: 'redis:6.0-alpine',
  29. ports: [6379],
  30. provider: cluster.provider,
  31. })
  32. const db = new k8sjs.ServiceDeployment('postgres-db', {
  33. image: 'postgres:12',
  34. ports: [5432],
  35. provider: cluster.provider,
  36. env: [
  37. { name: 'POSTGRES_USER', value: process.env.DB_USER! },
  38. { name: 'POSTGRES_PASSWORD', value: process.env.DB_PASS! },
  39. { name: 'POSTGRES_DB', value: process.env.INDEXER_DB_NAME! },
  40. ],
  41. allocateIpAddress: false,
  42. })
  43. const indexer = new k8sjs.ServiceDeployment('indexer', {
  44. image: 'joystream/hydra-indexer:2.1.0-beta.9',
  45. provider: cluster.provider,
  46. env: [
  47. { name: 'DB_HOST', value: 'postgres-db' },
  48. { name: 'DB_NAME', value: process.env.INDEXER_DB_NAME! },
  49. { name: 'INDEXER_WORKERS', value: '5' },
  50. { name: 'REDIS_URI', value: 'redis://redis:6379/0' },
  51. { name: 'DEBUG', value: 'index-builder:*' },
  52. { name: 'WS_PROVIDER_ENDPOINT_URI', value: process.env.WS_PROVIDER_ENDPOINT_URI! },
  53. { name: 'TYPES_JSON', value: 'types.json' },
  54. ],
  55. command: ['yarn db:bootstrap && yarn start:prod'],
  56. allocateIpAddress: false,
  57. })
  58. const hydraIndexerGateway = new k8sjs.ServiceDeployment('hydra-indexer-gateway', {
  59. image: 'joystream/hydra-indexer:2.1.0-beta.9',
  60. ports: [5432],
  61. provider: cluster.provider,
  62. env: [
  63. { name: 'POSTGRES_USER', value: process.env.DB_USER! },
  64. { name: 'POSTGRES_PASSWORD', value: process.env.DB_PASS! },
  65. { name: 'POSTGRES_DB', value: process.env.INDEXER_DB_NAME! },
  66. ],
  67. allocateIpAddress: false,
  68. })
  69. const processor = new k8sjs.ServiceDeployment('processor', {
  70. image: joystreamAppsImage,
  71. provider: cluster.provider,
  72. env: [
  73. { name: 'INDEXER_ENDPOINT_URL', value: `http://hydra-indexer-gateway:${process.env.WARTHOG_APP_PORT}/graphql` },
  74. { name: 'TYPEORM_HOST', value: 'postgres-db' },
  75. { name: 'TYPEORM_DATABASE', value: process.env.DB_NAME! },
  76. { name: 'DEBUG', value: 'index-builder:*' },
  77. { name: 'PROCESSOR_POLL_INTERVAL', value: '1000' },
  78. ],
  79. volumeMounts: [
  80. {
  81. mountPath: '/joystream/query-node/mappings/lib/generated/types/typedefs.json',
  82. name: 'tmp-volume',
  83. },
  84. ],
  85. volumes: [
  86. {
  87. name: 'tmp-volume',
  88. hostPath: {
  89. path: '../../../types/augment/all/defs.json',
  90. type: 'FileOrCreate',
  91. },
  92. },
  93. ],
  94. allocateIpAddress: false,
  95. })
  96. const graphqlServer = new k8sjs.ServiceDeployment('graphql-server', {
  97. image: joystreamAppsImage,
  98. ports: [Number(process.env.GRAPHQL_SERVER_PORT!)],
  99. provider: cluster.provider,
  100. env: [
  101. { name: 'DB_HOST', value: 'postgres-db' },
  102. { name: 'DB_NAME', value: process.env.DB_NAME! },
  103. ],
  104. allocateIpAddress: true,
  105. })