Terraform: Что такое параметр uri для aws_api_gateway_integration, если целью является aws_sfn_state_machine - PullRequest
0 голосов
/ 29 января 2019

Я хочу создать API функции шага, используя шлюз API , используя Terraforms api_gateway_integration и sfn_state_machine .

Я нахожусь в точке, гдеЯ должен заполнить uri-параметр в api_gateway_integration.

Моя функция шага была создана, я могу сослаться на идентификатор функции шага (что-то вроде arn:aws:states:*region*:*account*:stateMachine:*step-function-name*:stateMachine:*step-function-entry-point*).

Может кто-нибудь сказать мне схему или пример того, как параметр uriнужно будет посмотреть, является ли целевая функция AWS целью?

resource "aws_api_gateway_integration" "endpoint_integration" {
  ...
  integration_http_method = "POST"
  type = "AWS"
  uri = <<<<< What to place here???
}

1 Ответ

0 голосов
/ 05 февраля 2019

В отличие от Terraform-интегрировать лямбду AWS со шлюзом API , вы не можете указывать от шлюза API на конкретный конечный автомат AWS "напрямую" (используя параметр "uri").Вместо этого ресурс aws_api_gateway_integration-ресурс указывает на конечный автомат AWS в целом, на конкретный конечный автомат AWS будет ссылаться AWS ARN как часть запроса. Вы можете использовать шаблон запроса шлюза API для сопоставления шлюза API с конкретным конечным автоматом, чтобы при запросе API можно было опустить die stateMachineArn. Для подробного объяснения см. Документацию AWS «Создание API пошаговых функций с использованием шлюза API» .

Рабочий пример

# var.aws_region = eu-central-1
# var.sfn_orchestrater_arn = arn:aws:states:eu-central-1:*account*:stateMachine:*step-function-entry-point*
resource "aws_api_gateway_integration" "endpoint_integration" {
  http_method             = "POST"
  integration_http_method = "POST"
  type                    = "AWS"
  passthrough_behavior    = "NEVER"
  uri                     = "arn:aws:apigateway:${var.aws_region}:states:action/StartExecution"

  request_templates = {
    "application/json" = <<EOF
{
    "input": "$util.escapeJavaScript($input.json('$'))",
    "stateMachineArn": "${var.sfn_orchestrater_arn)}"
}
EOF
  }
}
...