Как передать адрес таблицы DynamoDB, а также порт и адрес Redis моему экземпляру EC2 в CloudFormation? - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть система, для которой требуется экземпляр EC2, который имеет подключения к таблице DynamoDB и экземпляру Redis. Как настроить их в качестве параметров для моего экземпляра EC2 в CloudFormation с использованием YAML?

Я создал OptionSettings, чтобы установить значения в качестве переменной среды для моего процесса в экземпляре EC2. Я знаю, что мне нужно сделать! Ссылка [что-то здесь], но в документации не было примеров, которые имели бы для меня смысл.

Вот упрощенная версия кода:

---
AWSTemplateFormatVersion: "2010-09-09"

Description: CloudFormation template

Resources:
  # Beanstalk application
  MyApp:
    Type: AWS::ElasticBeanstalk::Application
  ConfigurationTemplate:
    Type: AWS::ElasticBeanstalk::ConfigurationTemplate
    Properties:
      ApplicationName: !Ref MyApp
      OptionSettings:
      - Namespace: "aws:elasticbeanstalk:application:environment"
        OptionName: REDIS_CACHE_PORT
        Value: !Ref AttributeCache.Port # Should be 6379
      - Namespace: "aws:elasticbeanstalk:application:environment"
        OptionName: REDIS_CACHE_ADDRESS
        Value: !Ref MyCache. # Something that AWS creates
      - Namespace: "aws:elasticbeanstalk:application:environment"
        OptionName: DYNAMODB_TABLE_ADDRESS
        Value: !Ref MyDynamoTable. # Something that AWS creates
      SolutionStackName: 64bit Amazon Linux 2018.03 v4.8.1 running Node.js

  # Redis cache
  MyCache:
    Type: AWS::ElastiCache::CacheCluster
    Properties:
      ClusterName: MyCacheCluster
      Engine: redis
      EngineVersion: 4.0.10
      NumCacheNodes: 1
      Port: 6379

  # DynamoDB table
  MyDynamoTable:
    Type: "AWS::DynamoDB::Table"
    Properties:
      AttributeDefinitions:
      - AttributeName: theAttributeName
        AttributeType: S
      KeySchema:
      - AttributeName: theAttributeName
        KeyType: HASH
      TableName: myDynamoTable

Я не уверен, как получить доступ к тому, что создаст CloudFormation. Правильно ли! Ref или мне нужен! GetAtt вместо этого?

Вот ссылки на два разных документа функций.

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html

Даже просто указав мне на то, что мне не хватает, поможет.

1 Ответ

1 голос
/ 26 апреля 2019

Этот вид информации указан в разделе Возвращаемые значения в документации по каждой услуге. Этот раздел документации также предоставляет информацию о том, нужно ли вам использовать !Ref или !GetAtt для получения определенного параметра. Например, CacheCluster docs говорят, что вам нужно использовать !GetAtt MyCache.RedisEndpoint.Port, чтобы получить порт redis ', а Dynamo docs говорят, что вы должны использовать !Ref MyDynamoTable, чтобы получить имя таблицы.

      OptionSettings:
      - Namespace: "aws:elasticbeanstalk:application:environment"
        OptionName: REDIS_CACHE_PORT
        Value: !GetAtt MyCache.RedisEndpoint.Port
      - Namespace: "aws:elasticbeanstalk:application:environment"
        OptionName: REDIS_CACHE_ADDRESS
        Value: !GetAtt MyCache.RedisEndpoint.Address
      - Namespace: "aws:elasticbeanstalk:application:environment"
        OptionName: DYNAMODB_TABLE_ADDRESS
        Value: !Ref MyDynamoTable # You got this one right, but no dot in the end
...