

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Step Functions에서 최적화된 서비스 통합
<a name="integrate-optimized"></a>

워크플로는 `Task` 상태의 `Resource` 필드를 사용하여 최적화된 서비스를 직접 호출할 수 있습니다. 다음 주제에서는 AWS서비스 조정을 위해 Amazon States Language에서 지원되는 APIs, 파라미터 및 요청/응답 구문에 대해 설명합니다.

워크플로 유형 및 가용성에 따라 워크플로는 다음 세 가지 서비스 통합 패턴 중 하나를 사용하여 서비스를 직접 호출합니다.
+ [응답 요청(기본값)](connect-to-resource.md#connect-default) - HTTP 응답을 기다린 후 다음 상태로 이동
+ [작업 실행(`.sync`)](connect-to-resource.md#connect-sync) - 작업이 완료될 때까지 대기
+ [콜백 대기(`.waitForTaskToken`)](connect-to-resource.md#connect-wait-token) - 작업 토큰이 반환될 때까지 워크플로 일시 중지

표준 워크플로 및 Express 워크플로는 동일한 **통합**을 지원하지만 동일한 **통합 패턴**은 지원하지 않습니다.
+  **표준 워크플로**는 *요청 응답* 통합을 지원합니다. 특정 서비스는 *작업 실행(.sync)* 또는 *콜백 대기(.waitForTaskToken)*를 지원하며, 경우에 따라 둘 다 지원합니다. 자세한 내용은 다음 최적화된 통합 표를 참조하세요.
+  **Express 워크플로**는 *요청 응답* 통합을 지원합니다.

 [Step Functions에서 워크플로 유형 선택](choosing-workflow-type.md) 섹션을 참조하면 두 유형 중 하나를 결정하는 데 도움이 됩니다.



**AWSStep Functions의 SDK 통합**


| 통합 서비스 | 요청 및 응답 | 작업 실행 - *.sync* | 콜백 대기 - *.waitForTaskToken* | 
| --- | --- | --- | --- | 
| [200개 이상의 서비스](supported-services-awssdk.md#supported-services-awssdk-list) | 표준 및 Express | 지원되지 않음 | 표준 | 

**Step Functions의 최적화된 통합**


| 통합 서비스 | 요청 및 응답 | 작업 실행 - *.sync* | 콜백 대기 - *.waitForTaskToken* | 
| --- | --- | --- | --- | 
| [Amazon API Gateway](connect-api-gateway.md) | 표준 및 Express | 지원되지 않음 | 표준 | 
| [Amazon Athena](connect-athena.md) | 표준 및 Express | 표준 | 지원되지 않음 | 
| [AWS Batch](connect-batch.md) | 표준 및 Express | 표준 | 지원되지 않음 | 
| [Amazon Bedrock](connect-bedrock.md) | 표준 및 Express | 표준 | 표준 | 
| [AWS CodeBuild](connect-codebuild.md) | 표준 및 Express | 표준 | 지원되지 않음 | 
| [Amazon DynamoDB](connect-ddb.md) | 표준 및 Express | 지원되지 않음 | 지원되지 않음 | 
| [Amazon ECS/Fargate](connect-ecs.md) | 표준 및 Express | 표준 | 표준 | 
| [Amazon EKS](connect-eks.md) | 표준 및 Express | 표준 | 표준 | 
| [Amazon EMR](connect-emr.md) | 표준 및 Express | 표준 | 지원되지 않음 | 
| [Amazon EMR on EKS](connect-emr-eks.md) | 표준 및 Express | 표준 | 지원되지 않음 | 
| [Amazon EMR Serverless](connect-emr-serverless.md) | 표준 및 Express | 표준 | 지원되지 않음 | 
| [Amazon EventBridge](connect-eventbridge.md) | 표준 및 Express | 지원되지 않음 | 표준 | 
| [AWS Glue](connect-glue.md) | 표준 및 Express | 표준 | 지원되지 않음 | 
| [AWS Glue DataBrew](connect-databrew.md) | 표준 및 Express | 표준 | 지원되지 않음 | 
| [AWS Lambda](connect-lambda.md) | 표준 및 Express | 지원되지 않음 | 표준 | 
| [AWS Elemental MediaConvert](connect-mediaconvert.md) | 표준 및 Express | 표준 | 지원되지 않음 | 
| [Amazon SageMaker AI](connect-sagemaker.md) | 표준 및 Express | 표준 | 지원되지 않음 | 
| [Amazon SNS](connect-sns.md) | 표준 및 Express | 지원되지 않음 | 표준 | 
| [Amazon SQS](connect-sqs.md) | 표준 및 Express | 지원되지 않음 | 표준 | 
| [AWS Step Functions](connect-stepfunctions.md) | 표준 및 Express | 표준 | 표준 | 

# Step Functions에서 API Gateway REST API 생성
<a name="connect-api-gateway"></a>

Step Functions에서 Amazon API Gateway를 사용하여 HTTP 및 REST API를 생성, 게시, 유지 및 모니터링하는 방법을 알아봅니다. API Gateway와 통합하려면 코드를 작성하거나 다른 인프라를 사용하지 않고도 API Gateway HTTP 또는 API Gateway REST 엔드포인트를 직접 호출하는 Step Functions에서 `Task` 상태를 정의합니다. `Task` 상태 정의에는 API 직접 호출에 필요한 모든 정보가 포함됩니다. 다른 인증 방법을 선택할 수도 있습니다.

Step Functions의 AWS 서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

**최적화된 API Gateway 통합의 주요 기능**  
`apigateway:invoke:` 에는 AWS SDK 서비스 통합과 동등한 기능이 없습니다. 대신 최적화된 API Gateway 서비스에서 API Gateway 엔드포인트를 직접 호출합니다.

## API Gateway 기능 지원
<a name="connect-api-gateway-support"></a>

Step Functions API Gateway 통합은 API Gateway 기능 전부가 아닌 일부만 지원합니다. 지원되는 기능에 대한 자세한 목록은 다음을 참조하세요.
+ Step Functions API Gateway REST API 및 API Gateway HTTP API 통합 모두에서 지원됩니다.
  + **권한 부여자**: IAM([Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html) 사용), 인증 없음, Lambda 권한 부여자(요청 파라미터 기반 및 사용자 지정 헤더가 있는 토큰 기반)
  + **API 유형**: 리전별
  + **API 관리**: API Gateway API 도메인 이름, API 단계, 경로, 쿼리 파라미터, 요청 본문
+ Step Functions API Gateway HTTP API 통합에서 지원됩니다. 엣지에 최적화된 API에 대한 옵션을 제공하는 Step Functions API Gateway REST API 통합은 지원되지 않습니다.
+ 다음은 Step Functions API Gateway 통합에서 지원되지 않습니다.
  +  **권한 부여자**: Amazon Cognito, 기본 Open ID Connect/OAuth 2.0, 토큰 기반 Lambda 권한 부여자를 위한 인증 헤더 
  +  **API 유형:** 프라이빗 
  +  **API 관리**: 사용자 지정 도메인 이름 

API Gateway, HTTP 및 REST API에 대한 자세한 내용은 다음을 참조하세요.
+  [Amazon API Gateway 개념](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-basic-concept.html) 페이지 
+  API Gateway 개발자 안내서의 [HTTP API와 REST API 중에서 선택](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-vs-rest.html) 

## 요청 형식
<a name="connect-api-gateway-requests"></a>

`Task` 상태 정의를 만들면 Step Functions에서 파라미터를 검증하고 직접 호출을 수행하는 데 필요한 URL을 빌드한 다음 API를 직접적으로 호출합니다. 응답에는 HTTP 상태 코드, 헤더 및 응답 본문이 포함됩니다. 요청 형식에는 필수 및 선택적 파라미터가 있습니다.

### 필수 요청 파라미터
<a name="connect-api-gateway-requests-required"></a>
+ `ApiEndpoint`
  + 유형: `String`
  + API Gateway URL의 호스트 이름입니다. 형식은 `<API ID>.execute-api.region.amazonaws.com`입니다.

    API ID에는 영숫자 조합(`0123456789abcdefghijklmnopqrstuvwxyz`)만 사용할 수 있습니다.
+ `Method`
  + 유형: `Enum`
  + HTTP 메서드로, 다음 중 하나여야 합니다.
    + `GET`
    + `POST`
    + `PUT`
    + `DELETE`
    + `PATCH`
    + `HEAD`
    + `OPTIONS`

### 선택적 요청 파라미터
<a name="connect-api-gateway-requests-optional"></a>
+ `Headers`
  + 유형: `JSON`
  + HTTP 헤더는 같은 키와 연결된 값의 목록을 허용합니다.
+ `Stage`
  + 유형: `String`
  + API가 API Gateway에 배포되는 단계의 이름입니다. `$default` 단계를 사용하는 모든 HTTP API의 경우 선택 사항입니다.
+ `Path`
  + 유형: `String`
  + API 엔드포인트 다음에 추가되는 경로 파라미터입니다.
+ `QueryParameters`
  + 유형: `JSON`
  + 쿼리 문자열은 같은 키와 연결된 값의 목록만 허용됩니다.
+ `RequestBody`
  + 유형: `JSON` 또는 `String`
  + HTTP 요청 본문입니다. 유형은 `JSON` 객체나 `String`일 수 있습니다. `RequestBody`는 `PATCH`, `POST` 및 `PUT` HTTP 메서드에만 지원됩니다.
+ `AllowNullValues`
  + 유형: `BOOLEAN` – 기본값: `false`
  + 기본 설정에서는 요청 입력 상태의 **null** 값이 API로 전송되지 **않습니다**. 다음 예제에서는 `AllowNullValues`가 상태 머신 정의에서 `true`로 설정되지 않는 한 `category` 필드가 요청에 포함되지 **않습니다**.

    ```
    {
        "NewPet": {
            "type": "turtle",
            "price": 123,
            "category": null
        }
    }
    ```
**참고**  
기본적으로 요청 입력 상태가 **null** 값인 필드는 API로 전송되지 **않습니다**. 상태 머신 정의에서 `AllowNullValues`를 `true`로 설정하여 null 값을 API로 강제로 전송할 수 있습니다.
+ `AuthType`
  + 유형: `JSON`
  + 인증 방법입니다. 기본 방법은 `NO_AUTH`입니다. 허용 값은 다음과 같습니다.
    + `NO_AUTH`
    + `IAM_ROLE`
    + `RESOURCE_POLICY`

    자세한 내용은 **인증 및 권한 부여**를 참조하세요.

**참고**  
보안상의 이유로 현재 다음 HTTP 헤더 키는 허용되지 않습니다.  
`X-Forwarded`, `X-Amz` 또는 `X-Amzn` 접두사가 있는 모든 항목
`Authorization`
`Connection`
`Content-md5`
`Expect`
`Host`
`Max-Forwards`
`Proxy-Authenticate`
`Server`
`TE`
`Transfer-Encoding`
`Trailer`
`Upgrade`
`Via`
`Www-Authenticate`

다음 코드 예제에서는 Step Functions를 사용하여 API Gateway를 간접적으로 호출하는 방법을 보여줍니다.

```
{
    "Type": "Task", 
    "Resource":"arn:aws:states:::apigateway:invoke", 
    "Arguments": {
        "ApiEndpoint": "example.execute-api.us-east-1.amazonaws.com",
        "Method": "GET", 
        "Headers": { 
            "key": ["value1", "value2"] 
        },
        "Stage": "prod",
        "Path": "bills",
        "QueryParameters": {
            "billId": ["123456"]
        },
        "RequestBody": {},
        "AuthType": "NO_AUTH"
    } 
}
```

## 인증 및 권한 부여
<a name="connect-api-gateway-auth"></a>

다음 인증 방법을 사용할 수 있습니다.
+ **권한 없음**: 권한 부여 방법을 사용하지 않고 API를 직접 호출합니다.
+ **IAM 역할**: 이 메서드를 사용하면 Step Functions에서 상태 머신 역할을 가정하고 [Signature Version 4(SigV4)](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)로 요청에 서명한 다음 API를 직접적으로 호출합니다.
+ **리소스 정책**: Step Functions는 요청을 인증한 다음 API를 직접적으로 호출합니다. 다음을 지정하는 API에 리소스 정책을 연결해야 합니다.

  1. API Gateway를 간접적으로 호출할 상태 머신입니다.
**중요**  
액세스를 제한하려면 상태 머신을 지정해야 합니다. 그렇지 않으면 API에 대한 **리소스 정책** 인증을 사용하여 API Gateway 요청을 인증하는 모든 상태 머신에 액세스 권한이 부여됩니다.

  1. 해당 Step Functions는 API Gateway를 직접적으로 호출하는 서비스입니다(`"Service": "states.amazonaws.com"`).

  1. 액세스할 리소스는 다음과 같습니다.
     + *region*
     + 지정된 리전의 *account-id*
     + *api-id*
     + *stage-name*
     + *HTTP-VERB*(메서드)
     + *resource-path-specifier*

  리소스 정책 예제는 [Step Functions의 IAM 정책 및 API Gateway](#api-gateway-iam)를 참조하세요.

  리소스 형식에 대한 자세한 내용은 API Gateway 개발자 안내서의 [API Gateway의 API 실행 권한의 리소스 형식](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html#api-gateway-iam-policy-resource-format-for-executing-api)을 참조하세요.
**참고**  
리소스 정책은 REST API에서만 지원됩니다.

## 서비스 통합 패턴
<a name="connect-api-gateway-patterns"></a>

API Gateway 통합은 두 가지 서비스 통합 패턴을 지원합니다.
+ [요청 및 응답](connect-to-resource.md#connect-default) - 기본 통합 패턴입니다. 이를 사용하면 Step Functions에서 HTTP 응답을 수신한 직후에 다음 단계로 진행할 수 있습니다.
+ [작업 토큰을 사용하여 콜백 대기](connect-to-resource.md#connect-wait-token)(`.waitForTaskToken`) - 페이로드와 함께 작업 토큰이 반환될 때까지 기다립니다. `.waitForTaskToken` 패턴을 사용하려면 다음 예제와 같이 작업 정의의 **리소스** 필드 끝에 .waitForTaskToken을 추가합니다.

  ```
  {
      "Type": "Task", 
      "Resource":"arn:aws:states:::apigateway:invoke.waitForTaskToken", 
      "Arguments": {
          "ApiEndpoint": "example.execute-api.us-east-1.amazonaws.com",
          "Method": "POST", 
          "Headers": { 
              "TaskToken": "{% $states.context.Task.Token %}"
          },
          "Stage": "prod",
          "Path": "bills/add",
          "QueryParameters": {},
          "RequestBody": {
              "billId": "my-new-bill"
          },
          "AuthType": "IAM_ROLE"
      } 
  }
  ```

## 출력 형식
<a name="connect-api-gateway-output"></a>

다음 출력 파라미터가 제공됩니다.


| 이름 | Type | 설명 | 
| --- | --- | --- | 
| ResponseBody | JSON 또는 String | API 직접 호출의 응답 본문입니다. | 
| Headers | JSON | 응답 헤더입니다. | 
| StatusCode | Integer | 응답의 HTTP 상태 코드입니다. | 
| StatusText | String | 응답의 상태 텍스트입니다. | 

다음은 응답 예제입니다.

```
{
    "ResponseBody": {
        "myBills": []
    },
    "Headers": { 
        "key": ["value1", "value2"]
    }, 
    "StatusCode": 200,
    "StatusText": "OK" 
}
```

## 오류 처리
<a name="connect-api-gateway-errors"></a>

오류가 발생하면 다음과 같이 `error` 및 `cause`가 반환됩니다.
+ HTTP 상태 코드를 사용할 수 있는 경우 오류는 `ApiGateway.<HTTP Status Code>` 형식으로 반환됩니다.
+ HTTP 상태 코드를 사용할 수 없는 경우 오류는 `ApiGateway.<Exception>` 형식으로 반환됩니다.

두 경우 모두 `cause`는 문자열로 반환됩니다.

다음 예제에서는 오류가 발생한 응답을 보여줍니다.

```
{
    "error": "ApiGateway.403", 
    "cause": "{\"message\":\"Missing Authentication Token\"}"
}
```

**참고**  
`2XX` 상태 코드는 성공을 나타내며 오류는 반환되지 않습니다. 다른 모든 상태 코드나 예외 발생으로 인해 오류가 발생합니다.

## Amazon API Gateway 호출에 대한 IAM 정책
<a name="api-gateway-iam"></a>

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions 생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

*리소스:*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "execute-api:Invoke"
            ],
            "Resource": [
                "arn:aws:execute-api:us-east-1:123456789012:ENDPOINT/STAGE/GET/pets",
                "arn:aws:execute-api:us-east-1:123456789012:ENDPOINT/STAGE/POST/pets"
            ],
            "Effect": "Allow"
        }
    ]
}
```

다음 코드 예제에서는 API Gateway를 직접 호출하기 위한 리소스 정책을 보여줍니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "states.amazonaws.com"
            },
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:123456789012:myApi-id/stage-name/HTTP-VERB/resource-path-specifier",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": [
                        "<SourceStateMachineArn>"
                    ]
                }
            }
        }
    ]
}
```

# Step Functions를 사용하여 Athena 쿼리 실행
<a name="connect-athena"></a>

Amazon AthenaAWS Step Functions와 통합하여 쿼리 실행을 시작 및 중지하고 Step Functions로 쿼리 결과를 가져올 수 있습니다. Step Functions를 사용하면 임시 또는 예약된 데이터 쿼리를 실행하고 S3 데이터 레이크를 대상으로 결과를 검색할 수 있습니다. Athena는 서버리스 서비스이므로 설정하거나 관리할 인프라가 없으며 실행한 쿼리에 대해서만 비용을 지불하면 됩니다. 이 페이지에는 지원되는 Athena API가 나열되어 있으며 Athena 쿼리를 시작하기 위한 예제 `Task` 상태가 나와 있습니다.

Step Functions의 AWS서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

**최적화된 Athena 통합의 주요 기능**  
[작업 실행(.sync)](connect-to-resource.md#connect-sync) 통합 패턴이 지원됩니다.
[요청 및 응답](connect-to-resource.md#connect-default) 통합 패턴에 대한 구체적인 최적화는 없습니다.
[작업 토큰을 사용하여 콜백 대기](connect-to-resource.md#connect-wait-token) 통합 패턴은 지원되지 않습니다.

Amazon AthenaAWS Step Functions와 통합하려면 제공된 Athena 서비스 통합 APIs를 사용합니다.

서비스 통합 API는 해당 Athena API와 동일합니다. 다음 표에 나와 있는 것처럼 일부 API는 일부 통합 패턴을 지원하지 않습니다.


| API | 요청 및 응답 | 작업 실행(.sync) | 
| --- | --- | --- | 
| StartQueryExecution | 지원됨 | 지원됨 | 
| StopQueryExecution | 지원됨 | 지원되지 않음 | 
| GetQueryExecution | 지원됨 | 지원되지 않음 | 
| GetQueryResults | 지원됨 | 지원되지 않음 | 

다음에는 Athena 쿼리를 시작하는 Task 상태가 포함됩니다.

```
"Start an Athena query": {
  "Type": "Task",
  "Resource": "arn:aws:states:::athena:startQueryExecution.sync",
  "Arguments": {
    "QueryString": "SELECT * FROM \"myDatabase\".\"myTable\" limit 1",
    "WorkGroup": "primary",
    "ResultConfiguration": {
       "OutputLocation": "s3://amzn-s3-demo-bucket"
    }
  },
  "Next": "Get results of the query"
}
```

## 최적화된 Amazon Athena API:
<a name="connect-athena-api"></a>
+ [https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html)
+ [https://docs.aws.amazon.com/athena/latest/APIReference/API_StopQueryExecution.html](https://docs.aws.amazon.com/athena/latest/APIReference/API_StopQueryExecution.html)
+ [https://docs.aws.amazon.com/athena/latest/APIReference/API_GetQueryExecution.html](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetQueryExecution.html)
+ [https://docs.aws.amazon.com/athena/latest/APIReference/API_GetQueryResults.html](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetQueryResults.html)

**입력 또는 결과 데이터의 할당량**  
서비스 간에 데이터를 전송하거나 수신할 때 작업의 최대 입력 또는 결과는 UTF-8 인코딩 문자열로 256KiB의 데이터입니다. [상태 머신 실행과 관련된 할당량](service-quotas.md#service-limits-state-machine-executions)을(를) 참조하세요.

## Amazon Athena 호출을 위한 IAM 정책
<a name="athena-iam"></a>

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

**참고**  
IAM 정책 외에도를 사용하여 Amazon S3 및와 같은 서비스의 데이터에 대한 액세스 권한을 부여해야 AWS Lake Formation할 수 있습니다AWS Glue Data Catalog. 자세한 내용은 [Athena를 사용하여 등록된 데이터 쿼리를 참조하세요AWS Lake Formation](https://docs.aws.amazon.com/athena/latest/ug/security-athena-lake-formation.html).

### `StartQueryExecution`
<a name="athena-iam-startqueryexecution"></a>

*정적 리소스*

------
#### [ Run a Job (.sync) ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
    {
        "Effect": "Allow",
        "Action": [
            "athena:startQueryExecution",
            "athena:stopQueryExecution",
            "athena:getQueryExecution",
            "athena:getDataCatalog",
            "athena:GetWorkGroup",
            "athena:BatchGetQueryExecution",
            "athena:GetQueryResults",
            "athena:ListQueryExecutions"
        ],
        "Resource": [
            "arn:aws:athena:us-east-1:123456789012:workgroup/myWorkGroup",
            "arn:aws:athena:us-east-1:123456789012:datacatalog/*"
        ]
    },
        {
        "Effect": "Allow",
        "Action": [
            "s3:GetBucketLocation",
            "s3:GetObject",
            "s3:ListBucket",
            "s3:ListBucketMultipartUploads",
            "s3:ListMultipartUploadParts",
            "s3:AbortMultipartUpload",
            "s3:CreateBucket",
            "s3:PutObject"
        ],
        "Resource": [
            "arn:aws:s3:::*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "glue:CreateDatabase",
            "glue:GetDatabase",
            "glue:GetDatabases",
            "glue:UpdateDatabase",
            "glue:DeleteDatabase",
            "glue:CreateTable",
            "glue:UpdateTable",
            "glue:GetTable",
            "glue:GetTables",
            "glue:DeleteTable",
            "glue:BatchDeleteTable",
            "glue:BatchCreatePartition",
            "glue:CreatePartition",
            "glue:UpdatePartition",
            "glue:GetPartition",
            "glue:GetPartitions",
            "glue:BatchGetPartition",
            "glue:DeletePartition",
            "glue:BatchDeletePartition"
        ],
        "Resource": [
            "arn:aws:glue:us-east-1:123456789012:catalog",
            "arn:aws:glue:us-east-1:123456789012:database/*",
            "arn:aws:glue:us-east-1:123456789012:table/*",
            "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "lakeformation:GetDataAccess"
        ],
        "Resource": [
            "*"
        ]
    }
]
}
```

------
#### [ Request Response ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
    {
        "Effect": "Allow",
        "Action": [
            "athena:startQueryExecution",
            "athena:getDataCatalog"
        ],
        "Resource": [
            "arn:aws:athena:us-east-1:123456789012:workgroup/myWorkGroup",
            "arn:aws:athena:us-east-1:123456789012:datacatalog/*"
        ]
    },
        {
        "Effect": "Allow",
        "Action": [
            "s3:GetBucketLocation",
            "s3:GetObject",
            "s3:ListBucket",
            "s3:ListBucketMultipartUploads",
            "s3:ListMultipartUploadParts",
            "s3:AbortMultipartUpload",
            "s3:CreateBucket",
            "s3:PutObject"
        ],
        "Resource": [
            "arn:aws:s3:::*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "glue:CreateDatabase",
            "glue:GetDatabase",
            "glue:GetDatabases",
            "glue:UpdateDatabase",
            "glue:DeleteDatabase",
            "glue:CreateTable",
            "glue:UpdateTable",
            "glue:GetTable",
            "glue:GetTables",
            "glue:DeleteTable",
            "glue:BatchDeleteTable",
            "glue:BatchCreatePartition",
            "glue:CreatePartition",
            "glue:UpdatePartition",
            "glue:GetPartition",
            "glue:GetPartitions",
            "glue:BatchGetPartition",
            "glue:DeletePartition",
            "glue:BatchDeletePartition"
        ],
        "Resource": [
            "arn:aws:glue:us-east-1:123456789012:catalog",
            "arn:aws:glue:us-east-1:123456789012:database/*",
            "arn:aws:glue:us-east-1:123456789012:table/*",
            "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "lakeformation:GetDataAccess"
        ],
        "Resource": [
            "*"
        ]
    }
]
}
```

------

*동적 리소스*

------
#### [ Run a Job (.sync) ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
    {
        "Effect": "Allow",
        "Action": [
            "athena:startQueryExecution",
            "athena:stopQueryExecution",
            "athena:getQueryExecution",
            "athena:getDataCatalog",
            "athena:GetWorkGroup",
            "athena:BatchGetQueryExecution",
            "athena:GetQueryResults",
            "athena:ListQueryExecutions"
        ],
        "Resource": [
            "arn:aws:athena:us-east-1:123456789012:workgroup/*",
            "arn:aws:athena:us-east-1:123456789012:datacatalog/*"
        ]
    },
        {
        "Effect": "Allow",
        "Action": [
            "s3:GetBucketLocation",
            "s3:GetObject",
            "s3:ListBucket",
            "s3:ListBucketMultipartUploads",
            "s3:ListMultipartUploadParts",
            "s3:AbortMultipartUpload",
            "s3:CreateBucket",
            "s3:PutObject"
        ],
        "Resource": [
            "arn:aws:s3:::*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "glue:CreateDatabase",
            "glue:GetDatabase",
            "glue:GetDatabases",
            "glue:UpdateDatabase",
            "glue:DeleteDatabase",
            "glue:CreateTable",
            "glue:UpdateTable",
            "glue:GetTable",
            "glue:GetTables",
            "glue:DeleteTable",
            "glue:BatchDeleteTable",
            "glue:BatchCreatePartition",
            "glue:CreatePartition",
            "glue:UpdatePartition",
            "glue:GetPartition",
            "glue:GetPartitions",
            "glue:BatchGetPartition",
            "glue:DeletePartition",
            "glue:BatchDeletePartition"
        ],
        "Resource": [
            "arn:aws:glue:us-east-1:123456789012:catalog",
            "arn:aws:glue:us-east-1:123456789012:database/*",
            "arn:aws:glue:us-east-1:123456789012:table/*",
            "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "lakeformation:GetDataAccess"
        ],
        "Resource": [
            "*"
        ]
    }
]
}
```

------
#### [ Request Response ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
    {
        "Effect": "Allow",
        "Action": [
            "athena:startQueryExecution",
            "athena:getDataCatalog"
        ],
        "Resource": [
            "arn:aws:athena:us-east-1:123456789012:workgroup/*",
            "arn:aws:athena:us-east-1:123456789012:datacatalog/*"
        ]
    },
        {
        "Effect": "Allow",
        "Action": [
            "s3:GetBucketLocation",
            "s3:GetObject",
            "s3:ListBucket",
            "s3:ListBucketMultipartUploads",
            "s3:ListMultipartUploadParts",
            "s3:AbortMultipartUpload",
            "s3:CreateBucket",
            "s3:PutObject"
        ],
        "Resource": [
            "arn:aws:s3:::*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "glue:CreateDatabase",
            "glue:GetDatabase",
            "glue:GetDatabases",
            "glue:UpdateDatabase",
            "glue:DeleteDatabase",
            "glue:CreateTable",
            "glue:UpdateTable",
            "glue:GetTable",
            "glue:GetTables",
            "glue:DeleteTable",
            "glue:BatchDeleteTable",
            "glue:BatchCreatePartition",
            "glue:CreatePartition",
            "glue:UpdatePartition",
            "glue:GetPartition",
            "glue:GetPartitions",
            "glue:BatchGetPartition",
            "glue:DeletePartition",
            "glue:BatchDeletePartition"
        ],
        "Resource": [
            "arn:aws:glue:us-east-1:123456789012:catalog",
            "arn:aws:glue:us-east-1:123456789012:database/*",
            "arn:aws:glue:us-east-1:123456789012:table/*",
            "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "lakeformation:GetDataAccess"
        ],
        "Resource": [
            "*"
        ]
    }
]
}
```

------

### `StopQueryExecution`
<a name="athena-iam-stopqueryexecution"></a>

*리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
    {
        "Effect": "Allow",
        "Action": [
            "athena:stopQueryExecution"
        ],
        "Resource": [
            "arn:aws:athena:us-east-1:123456789012:workgroup/*"
        ]
    }
    ]
}
```

### `GetQueryExecution`
<a name="athena-iam-getqueryexecution"></a>

*리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
    {
        "Effect": "Allow",
        "Action": [
            "athena:getQueryExecution"
        ],
        "Resource": [
            "arn:aws:athena:us-east-1:123456789012:workgroup/*"
        ]
    }
    ]
}
```

### `GetQueryResults`
<a name="athena-iam-getqueryresults"></a>

*리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
    {
        "Effect": "Allow",
        "Action": [
            "athena:getQueryResults"
        ],
        "Resource": [
            "arn:aws:athena:us-east-1:123456789012:workgroup/*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "s3:GetObject"
        ],
        "Resource": [
            "arn:aws:s3:::*"
        ]
    }
    ]
}
```

# Step Functions를 사용하여 AWS Batch워크로드 실행
<a name="connect-batch"></a>

Step FunctionsAWS Batch를와 통합하여 AWS클라우드에서 배치 컴퓨팅 워크로드를 실행할 수 있습니다. 이 페이지에서는 지원되는 AWS Batch API를 나열하고 배치 처리 작업을 수행하기 위한 예제 `Task` 상태를 제공합니다.

Step Functions의 AWS서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

**최적화된 AWS Batch통합의 주요 기능**  
[작업 실행(.sync)](connect-to-resource.md#connect-sync) 통합 패턴을 사용할 수 있습니다.
[요청 및 응답](connect-to-resource.md#connect-default) 또는 [작업 토큰을 사용하여 콜백 대기](connect-to-resource.md#connect-wait-token) 통합 패턴에 대한 구체적인 최적화는 없습니다.

다음은 AWS Batch작업을 제출하고 작업이 완료될 때까지 기다리는 `Task` 상태의 예입니다. 표시된 많은 인수는 선택 사항입니다.

```
"Submit Batch Job": {
    "Type": "Task",
    "Resource": "arn:aws:states:::batch:submitJob.sync",
    "Arguments": {
        "JobName": "BATCH_NAME",
        "JobQueue": "BATCH_QUEUE_ARN",
        "JobDefinition": "BATCH_JOB_DEFINITION_ARN",
        "ArrayProperties": {
        "Size": 10
        },
        "ContainerOverrides": {
        "ResourceRequirements": [
            {
            "Type": "VCPU",
            "Value": "4"
            }
        ]
        },
        "DependsOn": [
        {
            "JobId": "myJobId",
            "Type": "SEQUENTIAL"
        }
        ],
        "PropagateTags": true,
        "Arguments": {
        "Key1": "value1",
        "Key2": 100
        },
        "RetryStrategy": {
        "Attempts": 1
        },
        "Tags": {
        "Tag": "TAG"
        },
        "Timeout": {
        "AttemptDurationSeconds": 10
        }
    }
}
```

## 최적화된 AWS BatchAPIs
<a name="connect-batch-api"></a>
+ [https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html)

**Step Functions의 파라미터는 PascalCase로 표현됩니다.**  
기본 서비스 API가 API 작업 `startSyncExecution`과 같은 camelCase에 있더라도 `StateMachineArn`과 같은 파라미터를 PascalCase에 지정합니다.

## 호출을 위한 IAM 정책AWS Batch
<a name="batch-iam"></a>

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

`SubmitJob` 및 `TerminateJob`에 대한 작업 ID가 생성되어 런타임에만 알려지기 때문에 특정 리소스를 기반으로 액세스를 제한하는 정책을 생성할 수 없습니다.

**세분화된 액세스를 위한 팁**  
`SubmitJob` 및 `TerminateJob`에 대한 세분화된 액세스를 추가하려면 작업에 태그를 사용하고 태그를 기반으로 액세스를 제한하는 정책을 생성하는 것이 좋습니다. 또한 작업 대기열, 정의 및 소모성 리소스는 알려진 리소스를 사용하는 `SubmitJob`으로 제한될 수 있습니다.

------
#### [ Run a Job (.sync) ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "batch:SubmitJob",
                "batch:DescribeJobs",
                "batch:TerminateJob"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
               "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForBatchJobsRule"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "batch:SubmitJob"
            ],
            "Resource": "*"
        }
    ]
}
```

------

# Step Functions를 사용하여 Amazon Bedrock 모델 간접 호출 및 사용자 지정
<a name="connect-bedrock"></a>

Step Functions를 Amazon Bedrock과 통합하여 지정된 Amazon Bedrock 모델을 간접 호출하고 미세 조정 작업을 생성하여 모델을 사용자 지정할 수 있습니다. 이 페이지에는 최적화된 Amazon Bedrock API가 나열되어 있으며 모델 간접 호출 결과를 추출하는 예제 `Task` 상태가 나와 있습니다.

Step Functions의 AWS서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

**작은 정보**  
Amazon Bedrock과 통합되는 예제 워크플로를 배포하려면 [Amazon Bedrock을 사용하여 AI 프롬프트 체이닝 수행](sample-bedrock-prompt-chaining.md) 섹션을 참조하세요.

## Amazon Bedrock 서비스 통합 API
<a name="connect-bedrock-custom-apis"></a>

AWS Step Functions과 Amazon Bedrock을 통합하려면 다음 API를 사용합니다. 이러한 API는 *InvokeModel*에 추가 요청 필드가 있다는 점을 제외하면 해당 Amazon Bedrock API와 유사합니다.

**Amazon Bedrock API - [CreateModelCustomizationJob](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelCustomizationJob.html)**  
기본 모델을 사용자 지정하기 위한 미세 튜닝 작업을 생성합니다. *요청 응답*의 경우 **CreateModelCustomizationJob**을 사용하거나 *작업 실행(.sync)* 통합 패턴의 경우 **CreateModelCustomizationJob.sync**를 사용하여 Step Functions 통합 API를 간접 호출할 수 있습니다. API 직접 호출의 필드에는 차이가 없습니다.

**Amazon Bedrock API - [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)**  
요청 본문에 제공된 입력을 사용하여 추론을 실행하기 위해 지정된 Amazon Bedrock 모델을 호출합니다. `InvokeModel`을 사용하여 텍스트 모델, 이미지 모델 및 임베딩 모델의 추론을 실행합니다.

*InvokeModel*에 대한 Amazon Bedrock 서비스 통합 API 요청 본문에는 다음 추가 파라미터가 포함됩니다.
+ `Body` - 콘텐츠 유형 요청 헤더에 지정된 형식으로 입력 데이터를 지정합니다. `Body`에는 대상 모델별 파라미터가 포함되어 있습니다.

  `InvokeModel` API를 사용하는 경우 `Body` 파라미터를 지정해야 합니다. Step Functions는 `Body`에 입력된 값의 유효성을 검사하지 않습니다.

  Amazon Bedrock 최적화 통합을 사용하여 `Body`를 지정할 때 최대 256KiB의 페이로드를 지정할 수 있습니다. 페이로드가 256KiB를 초과하는 경우 `Input`을 사용하는 것이 좋습니다.
+ `Input` - 입력 데이터를 검색할 소스를 지정합니다. 이 옵션 필드는 Step Functions를 사용한 Amazon Bedrock 최적화 통합에만 해당됩니다. 이 필드에서 `S3Uri`를 지정할 수 있습니다.

  파라미터의 `Body` 또는 `Input` 중 하나를 지정할 수 있지만 둘 다 지정할 수는 없습니다.

  `ContentType`을 지정하지 않고 `Input`을 지정하면 입력 데이터 소스의 콘텐츠 유형이 `ContentType`의 값이 됩니다.
+ `Output` - API 응답이 기록되는 대상을 지정합니다. 이 옵션 필드는 Step Functions를 사용한 Amazon Bedrock 최적화 통합에만 해당됩니다. 이 필드에서 `S3Uri`를 지정할 수 있습니다.

  이 필드를 지정하면 API 응답 본문이 원래 출력의 Amazon S3 위치에 대한 참조로 대체됩니다.

다음 예제는 Amazon Bedrock 통합용 InvokeModel API에 대한 구문을 보여 줍니다.

```
{
    "ModelId": String,  // required
    "Accept": String,  // default: application/json
    "ContentType": String,  // default: application/json
    "Input": {  // not from Bedrock API
        "S3Uri": String
    },  
    "Output": {  // not from Bedrock API
        "S3Uri": String
    } 
}
```

## Amazon Bedrock 통합용 태스크 상태 정의
<a name="connect-bedrock-task-definition"></a>

다음 태스크 상태 정의는 상태 머신의 Amazon Bedrock과 통합하는 방법을 보여 줍니다. 이 예제는 경로 `result_one`으로 지정된 모델 간접 호출의 전체 결과를 추출하는 태스크 상태를 보여 줍니다. 이는 [파운데이션 모델의 추론 파라미터](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)를 기반으로 합니다. 이 예제에서는 Cohere Command 대규모 언어 모델(LLM)을 사용합니다.

```
{
  "Type": "Task",
  "Resource": "arn:aws:states:::bedrock:invokeModel",
  "Arguments": {
    "ModelId": "cohere.command-text-v14",
    "Body": {
      "prompt": "{% states.input.prompt_one %}",
      "max_tokens": 20
    },
    "ContentType": "application/json",
    "Accept": "*/*"
  },
  "End": true
}
```

## IAM policies for calling Amazon Bedrock
<a name="bedrock-iam"></a>

콘솔을 사용하여 상태 머신을 만들면 Step Functions에서 필요한 최소 권한으로 상태 머신의 실행 역할을 자동으로 만듭니다. 이러한 자동 생성된 IAM 역할은 상태 시스템을 생성하는 AWS 리전에 유효합니다.

IAM 정책을 만들 때는 정책에 와일드카드를 포함하지 않는 것이 좋습니다. 보안 모범 사례로 정책 범위를 최대한 좁혀야 합니다. 런타임 중에 특정 입력 파라미터를 알 수 없는 경우에만 동적 정책을 사용해야 합니다.

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

### Amazon Bedrock 통합을 위한 IAM 정책 예
<a name="bedrock-iam-policy-eg"></a>

다음 섹션에서는 특정 파운데이션 모델 또는 프로비저닝 모델에 사용하는 Amazon Bedrock API를 기반으로 필요한 IAM 권한을 설명합니다. 또한 이 섹션에는 전체 액세스 권한을 부여하는 정책의 예가 포함되어 있습니다.

*기울임꼴* 텍스트를 리소스별 정보로 바꿔야 합니다.
+ [InvokeModel을 사용하여 특정 파운데이션 모델에 액세스하는 IAM 정책의 예](#bedrock-policy-invoke-foundation-model)
+ [InvokeModel을 사용하여 특정 프로비저닝 모델에 액세스하는 IAM 정책의 예](#bedrock-policy-invoke-provisioned-model)
+ [InvokeModel을 사용하기 위한 전체 액세스 IAM 정책 예](#bedrock-policy-invokemodel-full-access)
+ [특정 파운데이션 모델에 기본 모델로 액세스하는 IAM 정책의 예](#bedrock-policy-foundation-model)
+ [특정 사용자 지정 모델에 기본 모델로 액세스하는 IAM 정책의 예](#bedrock-policy-custom-model)
+ [CreateModelCustomizationJob.sync를 사용하기 위한 전체 액세스 IAM 정책 예](#bedrock-policy-createmodel-full-access)
+ [CreateModelCustomizationJob.sync를 사용하여 특정 파운데이션 모델에 액세스하는 IAM 정책 예](#bedrock-policy-createmodel-sync-foundation-model)
+ [CreateModelCustomizationJob.sync를 사용하여 사용자 지정 모델에 액세스하는 IAM 정책 예](#bedrock-policy-createmodel-sync-custom-model)
+ [CreateModelCustomizationJob.sync를 사용하기 위한 전체 액세스 IAM 정책 예](#bedrock-policy-createmodel-sync-full-access)

#### InvokeModel을 사용하여 특정 파운데이션 모델에 액세스하는 IAM 정책의 예
<a name="bedrock-policy-invoke-foundation-model"></a>

다음은 [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) API 작업을 사용하여 `amazon.titan-text-express-v1`이라는 이름의 특정 파운데이션 모델에 액세스하는 상태 머신의 IAM 정책 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "InvokeModel1",
            "Action": [
                "bedrock:InvokeModel"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-express-v1"
            ]
        }
    ]
}
```

#### InvokeModel을 사용하여 특정 프로비저닝 모델에 액세스하는 IAM 정책의 예
<a name="bedrock-policy-invoke-provisioned-model"></a>

다음은 [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) API 작업을 사용하여 `c2oi931ulksx`이라는 이름의 특정 프로비저닝 모델에 액세스하는 상태 머신의 IAM 정책 예입니다.

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Sid": "InvokeModel1",
      "Action": [
        "bedrock:InvokeModel"
      ],
      "Resource": [
        "arn:aws:bedrock:us-east-1:123456789012:provisioned-model/c2oi931ulksx"
      ]
    }
  ]
}
```

#### InvokeModel을 사용하기 위한 전체 액세스 IAM 정책 예
<a name="bedrock-policy-invokemodel-full-access"></a>

다음은 [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) API 작업을 사용할 때 전체 액세스를 제공하는 상태 머신의 IAM 정책 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "InvokeModel1",
            "Action": [
                "bedrock:InvokeModel"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1::foundation-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:provisioned-model/*"
            ]
        }
    ]
}
```

#### 특정 파운데이션 모델에 기본 모델로 액세스하는 IAM 정책의 예
<a name="bedrock-policy-foundation-model"></a>

다음은 [CreateModelCustomizationJob](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelCustomizationJob.html) API 작업을 사용하여 `amazon.titan-text-express-v1`이라는 이름의 특정 파운데이션 모델에 기본 모델로 액세스하는 상태 머신의 IAM 정책 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob1",
            "Action": [
                "bedrock:CreateModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-express-v1",
                "arn:aws:bedrock:us-east-1:123456789012:custom-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob2",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myRole"            
            ]
        }
    ] 
}
```

#### 특정 사용자 지정 모델에 기본 모델로 액세스하는 IAM 정책의 예
<a name="bedrock-policy-custom-model"></a>

다음은 [CreateModelCustomizationJob](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelCustomizationJob.html) API 작업을 사용하여 특정 사용자 지정 모델에 기본 모델로 액세스하는 상태 머신의 IAM 정책 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob1",
            "Action": [
                "bedrock:CreateModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1:123456789012:custom-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob2",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myRoleName"            
            ]
        }
    ] 
}
```

#### CreateModelCustomizationJob.sync를 사용하기 위한 전체 액세스 IAM 정책 예
<a name="bedrock-policy-createmodel-full-access"></a>

다음은 [CreateModelCustomizationJob](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelCustomizationJob.html) API 작업을 사용할 때 전체 액세스를 제공하는 상태 머신의 IAM 정책 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob1",
            "Action": [
                "bedrock:CreateModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1::foundation-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:custom-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob2",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myRole"            
            ]
        }
    ] 
}
```

#### CreateModelCustomizationJob.sync를 사용하여 특정 파운데이션 모델에 액세스하는 IAM 정책 예
<a name="bedrock-policy-createmodel-sync-foundation-model"></a>

다음은 [CreateModelCustomizationJob.sync](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelCustomizationJob.html) API 작업을 사용하여 `amazon.titan-text-express-v1`이라는 이름의 특정 파운데이션 모델에 액세스하는 상태 머신의 IAM 정책 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob1",
            "Action": [
                "bedrock:CreateModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-express-v1",
                "arn:aws:bedrock:us-east-1:123456789012:custom-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob2",
            "Action": [
                "bedrock:GetModelCustomizationJob",
                "bedrock:StopModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob3",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myRole"            
            ]
        }
    ]
}
```

#### CreateModelCustomizationJob.sync를 사용하여 사용자 지정 모델에 액세스하는 IAM 정책 예
<a name="bedrock-policy-createmodel-sync-custom-model"></a>

다음은 [CreateModelCustomizationJob.sync](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelCustomizationJob.html) API 작업을 사용하여 사용자 지정 모델에 액세스하는 상태 머신의 IAM 정책 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob1",
            "Action": [
                "bedrock:CreateModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1:123456789012:custom-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob2",
            "Action": [
                "bedrock:GetModelCustomizationJob",
                "bedrock:StopModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob3",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myRole"            
            ]
        }
    ]
}
```

#### CreateModelCustomizationJob.sync를 사용하기 위한 전체 액세스 IAM 정책 예
<a name="bedrock-policy-createmodel-sync-full-access"></a>

다음은 [CreateModelCustomizationJob.sync](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelCustomizationJob.html) API 작업을 사용할 때 전체 액세스를 제공하는 상태 머신의 IAM 정책 예입니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob1",
            "Action": [
                "bedrock:CreateModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1::foundation-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:custom-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob2",
            "Action": [
                "bedrock:GetModelCustomizationJob",
                "bedrock:StopModelCustomizationJob"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "CreateModelCustomizationJob3",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myRole"            
            ]
        }
    ]
}
```

# Step Functions를 사용하여 AWS CodeBuild 빌드 관리
<a name="connect-codebuild"></a>

Step Functions를와 통합하여 빌드 AWS CodeBuild 를 시작, 중지 및 관리할 수 있습니다. 이 페이지에는 Step Functions와 함께 사용할 수 있는 지원되는 CodeBuild API가 나열되어 있습니다.

Step Functions의 AWS 서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

Step Functions와의 통합을 통해 Step Functions를 사용하여 빌드를 트리거, 중지 및 관리하고 빌드 보고서를 공유할 AWS CodeBuild 수 있습니다. Step Functions를 사용하면 애플리케이션의 소프트웨어 변경 사항을 검증할 수 있도록 지속적인 통합 파이프라인을 설계하고 실행할 수 있습니다.

**최적화된 CodeBuild 통합의 주요 기능**  
[작업 실행(.sync)](connect-to-resource.md#connect-sync) 통합 패턴이 지원됩니다.
`StopBuild` 또는 `StopBuildBatch`를 직접적으로 호출한 후에는 빌드 상태가 마무리되도록 일부 내부 작업이 CodeBuild 내에서 완료될 때까지 빌드나 빌드 배치를 즉시 삭제할 수 없습니다.  
이 기간 동안 `BatchDeleteBuilds` 또는 `DeleteBuildBatch`를 사용하려고 하면 빌드나 빌드 배치가 삭제되지 않을 수 있습니다.  
`BatchDeleteBuilds` 및 `DeleteBuildBatch`의 최적화된 서비스 통합에는 중지 후 즉시 삭제하는 사용 사례를 단순화하기 위한 내부 재시도가 포함되어 있습니다.

다음 표에 나와 있는 것처럼 일부 API는 일부 통합 패턴을 지원하지 않습니다.


| API | 요청 및 응답 | 작업 실행(.sync) | 
| --- | --- | --- | 
| StartBuild | 지원됨 | 지원됨 | 
| StopBuild | 지원됨 | 지원되지 않음 | 
| BatchDeleteBuilds | 지원됨 | 지원되지 않음 | 
| BatchGetReports | 지원됨 | 지원되지 않음 | 
| StartBuildBatch | 지원됨 | 지원됨 | 
| StopBuildBatch | 지원됨 | 지원되지 않음 | 
| RetryBuildBatch | 지원됨 | 지원됨 | 
| DeleteBuildBatch | 지원됨 | 지원되지 않음 | 

**Step Functions의 파라미터는 PascalCase로 표현됩니다.**  
기본 서비스 API가 API 작업 `startSyncExecution`과 같은 camelCase에 있더라도 `StateMachineArn`과 같은 파라미터를 PascalCase에 지정합니다.

## 최적화된 CodeBuild API
<a name="connect-codebuild-api"></a>
+ [https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuild.html#API_StartBuild_RequestSyntax](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuild.html#API_StartBuild_RequestSyntax)
+ [https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StopBuild.html](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StopBuild.html)
+ [https://docs.aws.amazon.com/codebuild/latest/APIReference/API_BatchDeleteBuilds.html](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_BatchDeleteBuilds.html)
+ [https://docs.aws.amazon.com/codebuild/latest/APIReference/API_BatchGetReports.html](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_BatchGetReports.html)
+ [https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuildBatch.html](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuildBatch.html)
+ [https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StopBuildBatch.html](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StopBuildBatch.html)
+ [https://docs.aws.amazon.com/codebuild/latest/APIReference/API_RetryBuildBatch.html](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_RetryBuildBatch.html)
+ [https://docs.aws.amazon.com/codebuild/latest/APIReference/API_DeleteBuildBatch.html](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_DeleteBuildBatch.html)

**참고**  
JSONPath를 사용하는 경우 재귀 하강 연산자(`..`)를 사용하여 `BatchDeleteBuilds`에 대한 파라미터를 제공할 수 있습니다. 반환된 배열을 사용하면 다음 예제와 같이 `Arn` 필드를 `StartBuild`에서 복수 `Ids` 파라미터로 변환할 수 있습니다.  

```
"BatchDeleteBuilds": {
    "Type": "Task",
    "Resource": "arn:aws:states:::codebuild:batchDeleteBuilds",
    "Arguments": {
        "Ids.$": "$.Build..Arn"
    },
    "Next": "MyNextState"
},
```

## 호출을 위한 IAM 정책 AWS CodeBuild
<a name="codebuild-iam"></a>

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions 생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

*리소스:*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "sns:Publish"
            ],
            "Resource": [
                "arn:aws:sns:us-east-1:123456789012:StepFunctionsSample-CodeBuildExecution1111-2222-3333-wJalrXUtnFEMI-SNSTopic-bPxRfiCYEXAMPLEKEY"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "codebuild:StartBuild",
                "codebuild:StopBuild",
                "codebuild:BatchGetBuilds",
                "codebuild:BatchGetReports"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventForCodeBuildStartBuildRule"
            ],
            "Effect": "Allow"
        }
    ]
}
```

### `StartBuild`
<a name="codebuild-iam-startbuild"></a>

*정적 리소스*

------
#### [ Run a Job (.sync) ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:StartBuild",
        "codebuild:StopBuild",
        "codebuild:BatchGetBuilds"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "events:PutTargets",
        "events:PutRule",
        "events:DescribeRule"
      ],
      "Resource": [
        "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventForCodeBuildStartBuildRule"
      ]
    }
  ]
}
```

------
#### [ Request Response ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:StartBuild"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
      ]
    }
  ]
}
```

------

*동적 리소스*

------
#### [ Run a Job (.sync) ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:StartBuild",
        "codebuild:StopBuild",
        "codebuild:BatchGetBuilds"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:*:project/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "events:PutTargets",
        "events:PutRule",
        "events:DescribeRule"
      ],
      "Resource": [
        "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventForCodeBuildStartBuildRule"
      ]
    }
  ]
}
```

------
#### [ Request Response ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:StartBuild"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:*:project/*"
      ]
    }
  ]
}
```

------

### `StopBuild`
<a name="codebuild-iam-stopbuild"></a>

*정적 리소스*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:StopBuild"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
      ]
    }
  ]
}
```

*동적 리소스*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:StopBuild"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:*:project/*"
      ]
    }
  ]
}
```

### `BatchDeleteBuilds`
<a name="codebuild-iam-batchdeletebuilds"></a>

*정적 리소스*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:BatchDeleteBuilds"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
      ]
    }
  ]
}
```

*동적 리소스*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:BatchDeleteBuilds"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:*:project/*"
      ]
    }
  ]
}
```

### `BatchGetReports`
<a name="codebuild-iam-batchgetreports"></a>

*정적 리소스*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:BatchGetReports"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:123456789012:report-group/myReportName"
      ]
    }
  ]
}
```

*동적 리소스*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:BatchGetReports"
      ],
      "Resource": [
        "arn:aws:codebuild:us-east-1:*:report-group/*"
      ]
    }
  ]
}
```

### `StartBuildBatch`
<a name="codebuild-iam-startbuildbatch"></a>

*정적 리소스*

------
#### [ Run a Job (.sync) ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:StartBuildBatch",
                "codebuild:StopBuildBatch",
                "codebuild:BatchGetBuildBatches"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventForCodeBuildStartBuildBatchRule"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:StartBuildBatch"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
            ]
        }
    ]
}
```

------

*동적 리소스*

------
#### [ Run a Job (.sync) ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:StartBuildBatch",
                "codebuild:StopBuildBatch",
                "codebuild:BatchGetBuildBatches"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventForCodeBuildStartBuildBatchRule"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:StartBuildBatch"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/*"
            ]
        }
    ]
}
```

------

### `StopBuildBatch`
<a name="codebuild-iam-stopbuildbatch"></a>

*정적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:StopBuildBatch"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
            ]
        }
    ]
}
```

*동적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:StopBuildBatch"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/*"
            ]
        }
    ]
}
```

### `RetryBuildBatch`
<a name="codebuild-iam-retrybuildbatch"></a>

*정적 리소스*

------
#### [ Run a Job (.sync) ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:RetryBuildBatch",
                "codebuild:StopBuildBatch",
                "codebuild:BatchGetBuildBatches"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:RetryBuildBatch"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
            ]
        }
    ]
}
```

------

*동적 리소스*

------
#### [ Run a Job (.sync) ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:RetryBuildBatch",
                "codebuild:StopBuildBatch",
                "codebuild:BatchGetBuildBatches"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/*"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:RetryBuildBatch"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/*"
            ]
        }
    ]
}
```

------

### `DeleteBuildBatch`
<a name="codebuild-iam-deletebuildbatch"></a>

*정적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:DeleteBuildBatch"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName"
            ]
        }
    ]
}
```

*동적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:DeleteBuildBatch"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:123456789012:project/*"
            ]
        }
    ]
}
```

# Step Functions를 사용하여 DynamoDB CRUD 작업 수행
<a name="connect-ddb"></a>

Step Functions를 DynamoDB와 통합하여 DynamoDB 테이블에서 CRUD 작업을 수행할 수 있습니다. 이 페이지에는 지원되는 DynamoDB API가 나열되어 있으며 DynamoDB에서 항목을 검색할 수 있는 예제 `Task` 상태가 나와 있습니다.

Step Functions의 AWS서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

**최적화된 DynamoDB 통합의 주요 기능**  
[요청 및 응답](connect-to-resource.md#connect-default) 통합 패턴에 대한 구체적인 최적화는 없습니다.
[작업 토큰을 사용하여 콜백 대기](connect-to-resource.md#connect-wait-token) 통합 패턴은 지원되지 않습니다.
최적화된 통합을 통해 [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html), [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html), [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html) 및 [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html) API 작업만 사용할 수 있습니다. 와 같은 다른 API 작업은 DynamoDBAWS SDK 통합을 사용하여 [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html) 사용할 수 있습니다.

다음은 DynamoDB에서 보낸 메시지를 검색하는 예제 `Task` 상태입니다.

```
"Read next Message from DynamoDB": {
    "Type": "Task",
    "Resource": "arn:aws:states:::dynamodb:getItem",
    "Arguments": {
        "TableName": "DYNAMO_DB_TABLE_NAME",
        "Key": {
            "MessageId": {"S": "{% $List[0] %}"}
        }
    }
```

작업 예제에서 이 상태를 보려면 [Lambda, DynamoDB 및 Amazon SQS를 사용하여 데이터 레코드 전송](sample-project-transfer-data-sqs.md) 스타터 템플릿을 참조하세요.

**예외 접두사 차이**  
표준 DynamoDB 연결에 오류가 발생하면 예외 접두사는 `DynamoDb`(혼합 대소문자)가 됩니다.  
최적화된 통합을 위해 예외 접두사는 `DynamoDB`(대문자 `DB`)입니다.

**입력 또는 결과 데이터의 할당량**  
서비스 간에 데이터를 전송하거나 수신할 때 작업의 최대 입력 또는 결과는 UTF-8 인코딩 문자열로 256KiB의 데이터입니다. [상태 머신 실행과 관련된 할당량](service-quotas.md#service-limits-state-machine-executions)을(를) 참조하세요.

## 최적화된 DynamoDB API
<a name="connect-dynamodb-api"></a>
+ [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html)
+ [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html)
+ [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html)
+ [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html)

**Step Functions의 파라미터는 PascalCase로 표현됩니다.**  
기본 서비스 API가 API 작업 `startSyncExecution`과 같은 camelCase에 있더라도 `StateMachineArn`과 같은 파라미터를 PascalCase에 지정합니다.

## DynamoDB 호출을 위한 IAM 정책
<a name="dynamo-iam"></a>

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

*정적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-east-1:123456789012:table/myTableName"
            ]
        }
    ]
}
```

*동적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem"
            ],
            "Resource": "*"
        }
    ]
}
```

모든 DynamoDB API 작업에 대한 IAM 정책에 대한 자세한 내용은 *Amazon DynamoDB 개발자 안내서*의 [DynamoDB의 IAM 정책](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/using-identity-based-policies.html)을 참조하세요. 또한 DynamoDB용 PartiQL의 IAM 정책에 대한 자세한 내용은 *Amazon DynamoDB 개발자 안내서*의 [DynamoDB용 PartiQL의 IAM 정책](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-iam.html)을 참조하세요.

# Step Functions를 사용하여 Amazon ECS 또는 Fargate 작업 실행
<a name="connect-ecs"></a>

Step Functions를 Amazon ECS 또는 Fargate와 통합하여 작업을 실행하고 관리하는 방법을 알아봅니다. Amazon ECS에서 작업은 기본 계산 단위입니다. 작업은 컨테이너 이미지, CPU 및 메모리 제한, 네트워크 구성 및 기타 파라미터를 포함하여 Docker 컨테이너를 실행하는 방법을 지정하는 작업 정의로 정의됩니다. 이 페이지에서는 사용 가능한 Amazon ECS API 작업을 나열하고 Step Functions를 사용하여 Amazon ECS 작업에 데이터를 전달하는 방법에 대한 지침을 제공합니다.

Step Functions의 AWS서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

**최적화된 Amazon ECS/Fargate 통합의 주요 기능**  
[작업 실행(.sync)](connect-to-resource.md#connect-sync) 통합 패턴이 지원됩니다.
`ecs:runTask`에서 HTTP 200 응답을 반환할 수 있지만 다음과 같이 비어 있지 않은 `Failures` 필드가 있습니다.  
**요청 응답**: 응답을 반환하고 최적화되지 않은 통합과 동일한 작업에 실패하지 않습니다.
**작업 실행 또는 태스크 토큰**: 비어 있지 않은 `Failures` 필드가 발견되면 `AmazonECS.Unknown` 오류가 발생하여 태스크가 실패합니다.

## 최적화된 Amazon ECS/Fargate API
<a name="connect-ecs-api"></a>
+ [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html)는 지정된 작업 정의를 사용하여 새 작업을 시작합니다.

**Step Functions의 파라미터는 PascalCase로 표현됩니다.**  
기본 서비스 API가 API 작업 `startSyncExecution`과 같은 camelCase에 있더라도 `StateMachineArn`과 같은 파라미터를 PascalCase에 지정합니다.

## Amazon ECS 작업에 데이터 전달
<a name="connect-ecs-pass-to"></a>

Step Functions의 AWS서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

`overrides`를 사용하여 컨테이너에 대한 기본 명령을 재정의하고 입력을 Amazon ECS 작업으로 전달할 수 있습니다. [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerOverride.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerOverride.html)을(를) 참조하세요. 예제에서는 JsonPath를 사용하여 입력의 `Task` 값을 `Task` 상태로 전달했습니다.

다음에는 Amazon ECS 작업을 실행하고 완료할 때까지 기다리는 `Task` 상태가 포함됩니다.

```
{
 "StartAt": "Run an ECS Task and wait for it to complete",
 "States": {
   "Run an ECS Task and wait for it to complete": {
     "Type": "Task",
     "Resource": "arn:aws:states:::ecs:runTask.sync",
     "Arguments": {
                "Cluster": "cluster-arn",
                "TaskDefinition": "job-id",
                "Overrides": {
                    "ContainerOverrides": [
                        {
                            "Name": "container-name",
                            "Command": "{% $state.input.commands %}" 
                        }
                    ]
                }
            },
     "End": true
    }
  }
}
```

`ContainerOverrides`의 `Command` 줄은 상태 입력에서 컨테이너로 명령을 전달합니다.

이전 예제 상태 머신에서는 다음 입력이 주어지면 각 명령이 컨테이너 재정의로 전달됩니다.

```
{
  "commands": [
    "test command 1",
    "test command 2",
    "test command 3"
  ]
}
```

다음에는 Amazon ECS 작업을 실행한 다음 작업 토큰이 반환될 때까지 기다리는 `Task` 상태가 포함됩니다. [작업 토큰을 사용하여 콜백 대기](connect-to-resource.md#connect-wait-token)을(를) 참조하세요.

```
{  
   "StartAt":"Manage ECS task",
   "States":{  
      "Manage ECS task":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::ecs:runTask.waitForTaskToken",
         "Arguments":{  
            "LaunchType":"FARGATE",
            "Cluster":"cluster-arn",
            "TaskDefinition":"job-id",
            "Overrides":{  
               "ContainerOverrides":[  
                  {  
                     "Name":"container-name",
                     "Environment":[  
                        {  
                           "Name" : "TASK_TOKEN_ENV_VARIABLE",
                           "Value" : "{% $states.context.Task.Token %}"
                        }
                     ]
                  }
               ]
            }
         },
         "End":true
      }
   }
}
```

## Amazon ECS/AWS Fargate 호출을 위한 IAM 정책
<a name="ecs-iam"></a>

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

작업 제출 전까지 `TaskId` 값이 알려지지 않으므로 Step Functions는 권한이 더 많이 부여된 `"Resource": "*"` 정책을 만듭니다.

**참고**  
`"*"` IAM 정책에도 불구하고 Step Functions에서 시작한 Amazon Elastic Container Service(Amazon ECS) 작업만 중지할 수 있습니다.

------
#### [ Run a Job (.sync) ]

*정적 리소스*

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:RunTask"
            ],
            "Resource": [
                "arn:aws:ecs:region:
account-id:task-definition/taskDefinition:revisionNumber"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ecs:StopTask",
                "ecs:DescribeTasks"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
               "arn:aws:events:region:
account-id:rule/StepFunctionsGetEventsForECSTaskRule"
            ]
        }
    ]
}
```

*동적 리소스*

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:RunTask",
                "ecs:StopTask",
                "ecs:DescribeTasks"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
               "arn:aws:events:region:
account-id:rule/StepFunctionsGetEventsForECSTaskRule"
            ]
        }
    ]
}
```

------
#### [ Request Response and Callback (.waitForTaskToken) ]

*정적 리소스*

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:RunTask"
            ],
            "Resource": [
                "arn:aws:ecs:region:
account-id:task-definition/taskDefinition:revisionNumber"
            ]
        }
    ]
}
```

*동적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:RunTask"
            ],
            "Resource": "*"
        }
    ]
}
```

------

예약된 Amazon ECS 작업에 작업 실행 역할, 작업 역할 또는 작업 역할 재정의를 사용해야 하는 경우 각 작업 실행 역할, 작업 역할 또는 작업 역할 재정의에 대한 `iam:PassRole` 권한을 직접 호출 항목(이 경우에는 Step Functions)의 CloudWatch Events IAM 역할에 추가해야 합니다.

# Step Functions를 사용하여 Amazon EKS 클러스터 생성 및 관리
<a name="connect-eks"></a>

Step Functions를 Amazon EKS와 통합하여 Kubernetes 클러스터를 관리하는 방법을 알아봅니다. Step Functions는 Amazon Elastic Kubernetes Service와 통합할 수 있도록 두 가지 유형의 서비스 통합 API를 제공합니다. 하나는 Amazon EKS API를 사용하여 Amazon EKS 클러스터를 만들고 관리할 수 있도록 합니다. 다른 하나는 Kubernetes API를 사용하여 클러스터와 상호 작용하고 작업을 애플리케이션 워크플로의 일부로 실행할 수 있도록 합니다.

 Step Functions를 사용하여 만든 Amazon EKS 클러스터, **eksctl** 도구 또는 [Amazon EKS 콘솔](https://console.aws.amazon.com/eks/home)로 만든 Amazon EKS 클러스터 또는 유사한 방법으로 Kubernetes API 통합을 사용할 수 있습니다. 자세한 내용은 Amazon EKS 사용 설명서의 [Amazon EKS 클러스터 생성](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)을 참조하세요.

Step Functions의 AWS 서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

**최적화된 Amazon EKS 통합의 주요 기능**  
[작업 실행(.sync)](connect-to-resource.md#connect-sync) 통합 패턴이 지원됩니다.
[요청 및 응답](connect-to-resource.md#connect-default) 통합 패턴에 대한 구체적인 최적화는 없습니다.
[작업 토큰을 사용하여 콜백 대기](connect-to-resource.md#connect-wait-token) 통합 패턴은 지원되지 않습니다.

**참고**  
Step Functions EKS 통합은 퍼블릭 엔드포인트 액세스 권한이 있는 Kubernetes API만 지원합니다. 기본적으로 EKS 클러스터 API 서버 엔드포인트에는 퍼블릭 액세스 권한이 있습니다. 자세한 내용은 **Amazon EKS 사용 설명서**의 [Amazon EKS 클러스터 엔드포인트 액세스 제어](https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html)를 참조하세요.

Step Functions는 실행이 중지된 경우 Amazon EKS 클러스터를 자동으로 종료하지 않습니다. Amazon EKS 클러스터가 종료되기 전에 상태 머신이 중지하면 클러스터가 무기한 계속 실행될 수 있으므로 추가 요금이 발생할 수 있습니다. 이를 방지하려면 생성된 모든 Amazon EKS 클러스터를 올바르게 종료해야 합니다. 자세한 내용은 다음을 참조하세요.
+ Amazon EKS 사용 설명서의 [클러스터 삭제](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ 서비스 통합 패턴의 [작업 실행(.sync)](connect-to-resource.md#connect-sync)

**입력 또는 결과 데이터의 할당량**  
서비스 간에 데이터를 전송하거나 수신할 때 작업의 최대 입력 또는 결과는 UTF-8 인코딩 문자열로 256KiB의 데이터입니다. [상태 머신 실행과 관련된 할당량](service-quotas.md#service-limits-state-machine-executions)을(를) 참조하세요.

## Kubernetes API 통합
<a name="connect-eks-kubernetes-apis"></a>

Step Functions는 다음 Kubernetes API를 지원합니다.

### RunJob
<a name="connect-eks-kubernetes-apis-runjob"></a>

`eks:runJob` 서비스 통합을 사용하면 Amazon EKS 클러스터에서 작업을 실행할 수 있습니다. 이 `eks:runJob.sync` 변형을 사용하면 작업이 완료될 때까지 기다릴 수 있으며 선택적으로 로그를 검색할 수 있습니다.

Kubernetes API 서버는 상태 머신에서 사용하는 IAM 역할에 권한을 부여해야 합니다. 자세한 내용은 [권한](#connect-eks-permissions) 단원을 참조하십시오.

**작업 실행**(`.sync`) 패턴의 경우 작업 상태는 폴링을 통해 결정됩니다. Step Functions는 처음에 1분당 약 1회 속도로 폴링합니다. 결국 이 속도는 5분당 약 1회 폴링으로 느려집니다. 더 자주 폴링해야 하거나 폴링 전략을 더 세밀하게 제어해야 하는 경우 `eks:call` 통합을 사용하여 작업 상태를 쿼리하면 됩니다.

`eks:runJob` 통합은 `batch/v1` Kubernetes 작업에만 해당됩니다. 자세한 내용은 Kubernetes 문서의 [작업](https://kubernetes.io/docs/concepts/workloads/controllers/job/)을 참조하세요. 사용자 지정 리소스를 포함하여 다른 Kubernetes 리소스를 관리하려면 `eks:call` 서비스 통합을 사용합니다. [Lambda 및 AWS Batch를 사용한 작업 상태 폴링](sample-project-job-poller.md) 샘플 프로젝트에 나와 있는 것처럼 Step Functions를 사용하여 폴링 루프를 빌드할 수 있습니다.

지원되는 파라미터는 다음과 같습니다.
+ `ClusterName`: 직접적으로 호출하려는 Amazon EKS 클러스터의 이름입니다.
  + `Type`: `String`
  + 필수 항목 여부: 예
+ `CertificateAuthority`: 클러스터와 통신하는 데 필요한 Base64로 인코딩된 인증서 데이터입니다. [Amazon EKS 콘솔](https://console.aws.amazon.com/eks/home)에서 또는 Amazon EKS [DescribeCluster](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeCluster.html) API를 사용하여 가져올 수 있습니다.
  + `Type`: `String`
  + 필수 항목 여부: 예
+ `Endpoint`: Kubernetes API 서버에 대한 엔드포인트 URL입니다. [Amazon EKS 콘솔](https://console.aws.amazon.com/eks/home)에서 또는 Amazon EKS [DescribeCluster](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeCluster.html) API를 사용하여 가져올 수 있습니다.
  + `Type`: `String`
  + 필수 항목 여부: 예
+ `Namespace`: 작업을 실행할 네임스페이스입니다. 제공되지 않으면 `default` 네임스페이스가 사용됩니다.
  + `Type`: `String`
  + 필수 항목 여부: 아니요
+ `Job`: Kubernetes 작업 정의입니다. Kubernets 문서의 [작업](https://kubernetes.io/docs/concepts/workloads/controllers/job/)을 참조하세요.
  + `Type`: `JSON` 또는 `String`
  + 필수 항목 여부: 예
+ `LogOptions`: 선택적 로그 검색을 제어하는 옵션 집합입니다. 실행 작업(.sync) 서비스 통합 패턴을 사용하여 작업 완료를 기다리는 경우에만 적용 가능합니다.
  + `Type`: `JSON`
  + 필수 항목 여부: 아니요
  + 로그는 `logs` 키 아래의 응답에 포함됩니다. 작업 내에 포드가 여러 개 있을 수 있으며 포드마다 컨테이너가 여러 개 있을 수 있습니다.

    ```
    { 
      ...
      "logs": { 
        "pods": { 
          "pod1": { 
            "containers": { 
              "container1": { 
                "log": <log> 
              },
              ...
            }
          },
          ...
        }
      }
    ```
  + 로그 검색은 최선의 노력을 기반으로 수행됩니다. 로그를 검색하는 동안에 오류가 발생하는 경우 `log` 필드 대신 `error` 및 `cause` 필드가 표시됩니다.
+ `LogOptions.RetrieveLogs`: 작업 완료 후 로그 검색을 활성화합니다. 기본적으로 로그는 검색되지 않습니다.
  + `Type`: `Boolean`
  + 필수 항목 여부: 아니요
+ `LogOptions.RawLogs`: `RawLogs`를 true로 설정하면 로그는 JSON으로 파싱하려고 시도하지 않아도 원시 문자열로 반환됩니다. 기본적으로 로그는 가능한 경우 JSON으로 역직렬화됩니다. 경우에 따라 이러한 파싱으로 인해 많은 자릿수가 포함된 숫자의 정밀도 제한과 같은 원치 않는 변경 사항이 발생할 수 있습니다.
  + `Type`: `Boolean`
  + 필수 항목 여부: 아니요
+ `LogOptions.LogParameters`: Kubernetes API의 읽기 로그 API는 로그 검색을 제어하는 쿼리 파라미터를 지원합니다. 예를 들어 `tailLines` 또는 `limitBytes`를 사용하여 검색된 로그의 크기를 제한하고 Step Functions 데이터 크기 할당량 이내로 유지할 수 있습니다. 자세한 내용은 Kubernetes API 참조의 [읽기 로그](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#read-log-pod-v1-core) 섹션을 참조하세요.
  + `Type: ``List of Strings`에 대한 `String` 맵
  + 필수 항목 여부: 아니요
  + 예제:

    ```
    "LogParameters": {
      "tailLines": [ "6" ]
    }
    ```

다음 예제에는 작업을 실행하고 작업이 완료될 때까지 기다린 다음 작업 로그를 검색하는 `Task` 상태가 포함됩니다.

```
{
  "StartAt": "Run a job on EKS",
  "States": {
    "Run a job on EKS": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:runJob.sync",
      "Arguments": {
        "ClusterName": "MyCluster",
        "CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE",
        "Endpoint": "https://AKIAIOSFODNN7EXAMPLE.yl4.us-east-1.eks.amazonaws.com",
        "LogOptions": {
          "RetrieveLogs": true
        },
        "Job": {
          "apiVersion": "batch/v1",
          "kind": "Job",
          "metadata": {
            "name": "example-job"
          },
          "spec": {
            "backoffLimit": 0,
            "template": {
              "metadata": {
                "name": "example-job"
              },
              "spec": {
                "containers": [
                  {
                    "name": "pi-2000",
                    "image": "perl",
                    "command": [ "perl" ],
                    "args": [
                      "-Mbignum=bpi",
                      "-wle",
                      "print bpi(2000)"
                    ]
                  }
                ],
                "restartPolicy": "Never"
              }
            }
          }
        }
      },
      "End": true
    }
  }
}
```

### `Call`
<a name="connect-eks-kubernetes-apis-call"></a>

`eks:call` 서비스 통합을 사용하면 Kubernetes API를 사용하여 Kubernets API 엔드포인트를 통해 Kubernetes 리소스 객체를 읽고 쓸 수 있습니다.

Kubernetes API 서버는 상태 머신에서 사용하는 IAM 역할에 권한을 부여해야 합니다. 자세한 내용은 [권한](#connect-eks-permissions) 단원을 참조하십시오.

사용 가능한 작업에 대한 자세한 내용은 [Kubernetes API 참조](https://kubernetes.io/docs/reference/kubernetes-api/)를 확인하세요.

지원되는 `Call` 파라미터는 다음과 같습니다.
+ `ClusterName`: 직접적으로 호출하려는 Amazon EKS 클러스터의 이름입니다.
  + `Type`: 문자열
  + 필수 항목 여부: 예
+ `CertificateAuthority`: 클러스터와 통신하는 데 필요한 Base64로 인코딩된 인증서 데이터입니다. [Amazon EKS 콘솔](https://console.aws.amazon.com/eks/home)에서 또는 Amazon EKS [DescribeCluster](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeCluster.html) API를 사용하여 가져올 수 있습니다.
  + `Type`: `String`
  + 필수 항목 여부: 예
+ `Endpoint`: Kubernetes API 서버에 대한 엔드포인트 URL입니다. [Amazon EKS 콘솔](https://console.aws.amazon.com/eks/home)에서 또는 Amazon EKS DescribeCluster API를 사용하여 이 값을 찾을 수 있습니다.
  + `Type`: `String`
  + 필수 항목 여부: 예
+ `Method`: 요청의 HTTP 메서드입니다. `GET`, `POST`, `PUT`, `DELETE`, `HEAD` 또는 `PATCH` 중 하나입니다.
  + `Type`: `String`
  + 필수 항목 여부: 예
+ `Path`: Kubernetes REST API 작업의 HTTP 경로입니다.
  + `Type`: `String`
  + 필수 항목 여부: 예
+ `QueryParameters`: Kubernetes REST API 작업의 HTTP 쿼리 파라미터입니다.
  + `Type: ``List of Strings`에 대한 `String` 맵
  + 필수 여부: 아니요
  + 예제:

    ```
    "QueryParameters": {
      "labelSelector": [ "job-name=example-job" ]
    }
    ```
+ `RequestBody`: Kubernetes REST API 작업의 HTTP 메시지 본문입니다.
  + `Type`: `JSON` 또는 `String`
  + 필수 여부: 아니요

다음에는`eks:call`을 사용하여 `example-job` 작업에 속하는 포드를 나열하는 `Task` 상태가 포함됩니다.

```
{
  "StartAt": "Call EKS",
  "States": {
    "Call EKS": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:call",
      "Arguments": {
        "ClusterName": "MyCluster",
        "CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE",
        "Endpoint": "https://444455556666.yl4.us-east-1.eks.amazonaws.com",
        "Method": "GET",
        "Path": "/api/v1/namespaces/default/pods",
        "QueryParameters": {
          "labelSelector": [
            "job-name=example-job"
          ]
        }
      },
      "End": true
    }
  }
}
```

다음에는 `eks:call`을 사용하여 `example-job` 작업을 삭제하고 `propagationPolicy`를 설정하여 작업 포드도 삭제되었는지 확인하는 `Task` 상태가 포함됩니다.

```
{
  "StartAt": "Call EKS",
  "States": {
    "Call EKS": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:call",
      "Arguments": {
        "ClusterName": "MyCluster",
        "CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE",
        "Endpoint": "https://444455556666.yl4.us-east-1.eks.amazonaws.com",
        "Method": "DELETE",
        "Path": "/apis/batch/v1/namespaces/default/jobs/example-job",
        "QueryParameters": {
          "propagationPolicy": [
            "Foreground"
          ]
        }
      },
      "End": true
    }
  }
}
```

## 최적화된 Amazon EKS API
<a name="connect-eks-apis"></a>

지원되는 Amazon EKS API 및 구문은 다음과 같습니다.
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html)
  +  [요청 구문](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html#API_CreateCluster_RequestSyntax) 
  +  [응답 구문](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html#API_CreateCluster_ResponseSyntax) 

    `eks:createCluster` 서비스 통합을 통해 Amazon EKS 클러스터가 생성될 때 IAM 역할은 관리자(system:masters 권한이 있음)로 Kubernetes RBAC 인증 테이블에 추가됩니다. 처음에는 해당 IAM 엔터티만 Kubernetes API 서버를 직접적으로 호출할 수 있습니다. 자세한 내용은 다음을 참조하세요.
    + *Amazon EKS 사용 설명서*의 [클러스터의 사용자 또는 IAM 역할 관리](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html) 
    + [권한](#connect-eks-permissions) 섹션 

    Amazon EKS는 Amazon EKS에서 자동으로 다른 서비스를 직접적으로 호출하는 데 필요한 권한이 포함된 서비스 연결 역할을 사용합니다. 이러한 서비스 연결 역할이 아직 계정에 없으면 Step Functions에서 사용하는 IAM 역할에 `iam:CreateServiceLinkedRole` 권한을 추가해야 합니다. 자세한 내용은 *Amazon EKS 사용 설명서*의 [서비스 연결 역할 사용](https://docs.aws.amazon.com/eks/latest/userguide/using-service-linked-roles.html)을 참조하세요.

    Step Functions에서 사용하는 IAM 역할에는 클러스터 IAM 역할을 Amazon EKS로 전달할 수 있는 `iam:PassRole` 권한이 있어야 합니다. 자세한 내용은 *Amazon EKS 사용 설명서*의 [Amazon EKS 클러스터 IAM 역할](https://docs.aws.amazon.com/eks/latest/userguide/service_IAM_role.html)을 참조하세요.
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteCluster.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteCluster.html)
  +  [요청 구문](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteCluster.html#API_DeleteCluster_RequestSyntax) 
  +  [응답 구문](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteCluster.html#API_DeleteCluster_ResponseSyntax) 

    클러스터를 삭제하기 전에 Fargate 프로필이나 노드 그룹을 삭제해야 합니다.
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateFargateProfile.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateFargateProfile.html)
  +  [요청 구문](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateFargateProfile.html#API_CreateFargateProfile_RequestSyntax) 
  +  [응답 구문](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateFargateProfile.html#API_CreateFargateProfile_ResponseSyntax) 

    Amazon EKS는 Amazon EKS에서 자동으로 다른 서비스를 직접적으로 호출하는 데 필요한 권한이 포함된 서비스 연결 역할을 사용합니다. 이러한 서비스 연결 역할이 아직 계정에 없으면 Step Functions에서 사용하는 IAM 역할에 `iam:CreateServiceLinkedRole` 권한을 추가해야 합니다. 자세한 내용은 *Amazon EKS 사용 설명서*의 [서비스 연결 역할 사용](https://docs.aws.amazon.com/eks/latest/userguide/using-service-linked-roles.html)을 참조하세요.

    일부 리전에서는 Amazon EKS on Fargate를 사용하지 못할 수 있습니다. 리전 가용성은 *Amazon EKS 사용 설명서*의 [Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html) 섹션을 참조하세요.

    Step Functions에서 사용하는 IAM 역할에는 포드 실행 IAM 역할을 Amazon EKS로 전달할 수 있는 `iam:PassRole` 권한이 있어야 합니다. 자세한 내용은 *Amazon EKS 사용 설명서*의 [포드 실행 역할](https://docs.aws.amazon.com/eks/latest/userguide/pod-execution-role.html)을 참조하세요.
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteFargateProfile.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteFargateProfile.html)
  +  [요청 구문](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteFargateProfile.html#API_DeleteFargateProfile_RequestSyntax) 
  +  [응답 구문](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteFargateProfile.html#API_DeleteFargateProfile_ResponseSyntax) 
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateNodegroup.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateNodegroup.html)
  +  [요청 구문](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateNodegroup.html#API_CreateNodegroup_RequestSyntax) 
  +  [응답 구문](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateNodegroup.html#API_CreateNodegroup_ResponseSyntax) 

    Amazon EKS는 Amazon EKS에서 자동으로 다른 서비스를 직접적으로 호출하는 데 필요한 권한이 포함된 서비스 연결 역할을 사용합니다. 이러한 서비스 연결 역할이 아직 계정에 없으면 Step Functions에서 사용하는 IAM 역할에 `iam:CreateServiceLinkedRole` 권한을 추가해야 합니다. 자세한 내용은 *Amazon EKS 사용 설명서*의 [서비스 연결 역할 사용](https://docs.aws.amazon.com/eks/latest/userguide/using-service-linked-roles.html)을 참조하세요.

    Step Functions에서 사용하는 IAM 역할에는 노드 IAM 역할을 Amazon EKS로 전달할 수 있는 `iam:PassRole` 권한이 있어야 합니다. 자세한 내용은 *Amazon EKS 사용 설명서*의 [서비스 연결 역할 사용](https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html)을 참조하세요.
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteNodegroup.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteNodegroup.html)
  +  [요청 구문](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteNodegroup.html#API_DeleteNodegroup_RequestSyntax) 
  +  [응답 구문](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteNodegroup.html#API_DeleteNodegroup_ResponseSyntax) 

다음에는 Amazon EKS 클러스터를 만드는 `Task`가 포함됩니다.

```
{
  "StartAt": "CreateCluster.sync",
  "States": {
    "CreateCluster.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:createCluster.sync",
      "Arguments": {
        "Name": "MyCluster",
        "ResourcesVpcConfig": {
          "SubnetIds": [
            "subnet-053e7c47012341234",
            "subnet-027cfea4b12341234"
          ]
        },
        "RoleArn": "arn:aws:iam::account-id:role/MyEKSClusterRole"
      },
      "End": true
    }
  }
}
```

다음에는 Amazon EKS 클러스터를 삭제하는 `Task` 상태가 포함됩니다.

```
{
  "StartAt": "DeleteCluster.sync",
  "States": {
    "DeleteCluster.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:deleteCluster.sync",
      "Arguments": {
        "Name": "MyCluster"
      },
      "End": true
    }
  }
}
```

다음에는 Fargate 프로필을 만드는 `Task` 상태가 포함됩니다.

```
{
  "StartAt": "CreateFargateProfile.sync",
  "States": {
    "CreateFargateProfile.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:createFargateProfile.sync",
      "Arguments": {
        "ClusterName": "MyCluster",
        "FargateProfileName": "MyFargateProfile",
        "PodExecutionRoleArn": "arn:aws:iam::account-id:role/MyFargatePodExecutionRole",
        "Selectors": [{
            "Namespace": "my-namespace",
            "Labels": { "my-label": "my-value" }
          }]
      },
      "End": true
    }
  }
}
```

다음에는 Fargate 프로필을 삭제하는 `Task` 상태가 포함됩니다.

```
{
  "StartAt": "DeleteFargateProfile.sync",
  "States": {
    "DeleteFargateProfile.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:deleteFargateProfile.sync",
      "Arguments": {
        "ClusterName": "MyCluster",
        "FargateProfileName": "MyFargateProfile"
      },
      "End": true
    }
  }
}
```

다음에는 노드 그룹을 만드는 `Task` 상태가 포함됩니다.

```
{
  "StartAt": "CreateNodegroup.sync",
  "States": {
    "CreateNodegroup.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:createNodegroup.sync",
      "Arguments": {
        "ClusterName": "MyCluster",
        "NodegroupName": "MyNodegroup",
        "NodeRole": "arn:aws:iam::account-id:role/MyNodeInstanceRole",
        "Subnets": ["subnet-09fb51df01234", "subnet-027cfea4b1234"] 
      },
      "End": true
    }
  }
}
```

다음에는 노드 그룹을 삭제하는 `Task` 상태가 포함됩니다.

```
{
  "StartAt": "DeleteNodegroup.sync",
  "States": {
    "DeleteNodegroup.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:deleteNodegroup.sync",
      "Arguments": {
        "ClusterName": "MyCluster",
        "NodegroupName": "MyNodegroup"
      },
      "End": true
    }
  }
}
```

## 권한
<a name="connect-eks-permissions"></a>

`eks:createCluster` 서비스 통합을 통해 Amazon EKS 클러스터가 생성될 때 IAM 역할은 관리자(`system:masters` 권한이 있음)로 Kubernetes RBAC 인증 테이블에 추가됩니다. 처음에는 해당 IAM 엔터티만 Kubernetes API 서버를 직접적으로 호출할 수 있습니다. 예를 들어 Step Functions 상태 머신과 동일한 역할을 가정하거나 권한을 추가 IAM 엔티티에 부여하도록 Kubernetes를 구성하지 않는 한 **kubectl**을 사용하여 Kubernetes API 서버와 상호 작용할 수 없습니다. 자세한 내용은 *Amazon EKS 사용 설명서*의 [클러스터의 사용자 또는 IAM 역할 관리](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html)를 참조하세요.

사용자 또는 역할과 같은 추가 IAM 엔티티를 kube-system 네임스페이스의 `aws-auth` `ConfigMap`에 추가하여 해당 엔티티에 대한 권한을 추가할 수 있습니다. Step Functions에서 클러스터를 만드는 경우 `eks:call` 서비스 통합을 사용합니다.

다음에는 `aws-auth` `ConfigMap`을 만들고 `system:masters` 권한을 `arn:aws:iam::account-id:user/my-user` 사용자와 IAM 역할 `arn:aws:iam::account-id:role/my-role`에 부여하는 `Task` 상태가 포함됩니다.

```
{
  "StartAt": "Add authorized user",
  "States": {
    "Add authorized user": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:call",
      "Arguments": {
        "ClusterName": "MyCluster",
        "CertificateAuthority": "LS0tLS1CRUd...UtLS0tLQo=",
        "Endpoint": "https://444455556666.yl4.region.eks.amazonaws.com",
        "Method": "POST",
        "Path": "/api/v1/namespaces/kube-system/configmaps",
        "RequestBody": {
           "apiVersion": "v1",
           "kind": "ConfigMap",
           "metadata": {
              "name": "aws-auth",
              "namespace": "kube-system"
           },
           "data": {
             "mapUsers": "[{ \"userarn\": \"arn:aws:iam::account-id:user/my-user\", \"username\": \"my-user\", \"groups\": [ \"system:masters\" ] } ]",
             "mapRoles": "[{ \"rolearn\": \"arn:aws:iam::account-id:role/my-role\", \"username\": \"my-role\", \"groups\": [ \"system:masters\" ] } ]"
           }
        }
      },
      "End": true
    }
  }
```

**참고**  
IAM 역할의 ARN이 **/service-role/** 경로(예: `arn:aws:iam::account-id:role/service-role/my-role`)가 포함된 형식으로 표시됩니다. `aws-auth`에 역할을 나열할 때 이 **service-role** 경로 토큰을 포함해서는 안 됩니다.

클러스터를 처음 만들 때는 `aws-auth` `ConfigMap`이 존재하지 않지만 Fargate 프로필을 만들면 자동으로 추가됩니다. `aws-auth`의 현재 값을 검색하고 추가 권한을 추가하고, 새 버전을 `PUT`할 수 있습니다. 일반적으로 Fargate 프로필 전에 `aws-auth`를 만드는 것이 더 쉽습니다.

클러스터가 Step Functions 외부에서 생성된 경우 Kubernetes API 서버와 통신하려면 **kubectl**을 구성하면 됩니다. 그런 다음 `kubectl apply -f aws-auth.yaml`을 사용하여 새 `aws-auth` `ConfigMap`을 만들거나 `kubectl edit -n kube-system configmap/aws-auth`를 사용하여 이미 있는 서버를 편집합니다. 자세한 내용은 다음을 참조하세요.
+  *Amazon EKS 사용 설명서*의 [Amazon EKS용 kubeconfig 생성](https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html) 
+  *Amazon EKS 사용 설명서*의 [클러스터의 사용자 또는 IAM 역할 관리](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html) 

Kubernetes에 IAM 역할에 대한 충분한 권한이 없으면 `eks:call` 또는 `eks:runJob` 서비스 통합이 실패하고 다음 오류가 발생합니다.

```
Error:
EKS.401

Cause:
{
  "ResponseBody": {
    "kind": "Status",
    "apiVersion": "v1",
    "metadata": {},
    "status": "Failure",
    "message": "Unauthorized",
    "reason": "Unauthorized",
    "code": 401
  },
  "StatusCode": 401,
  "StatusText": "Unauthorized"
}
```

## Amazon EKS 호출을 위한 IAM 정책
<a name="eks-iam"></a>

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions 생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

### `CreateCluster`
<a name="eks-iam-createcluster"></a>

*리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:CreateCluster"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "eks:DescribeCluster",
                "eks:DeleteCluster"
            ],
            "Resource": "arn:aws:eks:us-east-1:444455556666:cluster/*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::444455556666:role/StepFunctionsSample-EKSClusterManag-EKSServiceRole-ANPAJ2UCCR6DPCEXAMPLE"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "eks.amazonaws.com"
                }
            }
        }
    ]
}
```

```


```

### `CreateNodeGroup`
<a name="eks-iam-createnodegroup"></a>

*리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeSubnets",
                "eks:CreateNodegroup"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "eks:DescribeNodegroup",
                "eks:DeleteNodegroup"
            ],
            "Resource": "arn:aws:eks:us-east-1:444455556666:nodegroup/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:GetRole",
                "iam:ListAttachedRolePolicies"
            ],
            "Resource": "arn:aws:iam::444455556666:role/*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::444455556666:role/StepFunctionsSample-EKSClusterMan-NodeInstanceRole-ANPAJ2UCCR6DPCEXAMPLE"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "eks.amazonaws.com"
                }
            }
        }
    ]
}
```

### `DeleteCluster`
<a name="eks-iam-deletecluster"></a>

*리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:DeleteCluster",
                "eks:DescribeCluster"
            ],
            "Resource": [
                "arn:aws:eks:us-east-1:444455556666:cluster/ExampleCluster"
            ]
        }
    ]
}
```

### `DeleteNodegroup`
<a name="eks-iam-deletenodegroup"></a>

*리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:DeleteNodegroup",
                "eks:DescribeNodegroup"
            ],
            "Resource": [
                "arn:aws:eks:us-east-1:444455556666:nodegroup/ExampleCluster/ExampleNodegroup/*"
            ]
        }
    ]
}
```

Step Functions에서 Amazon EKS 사용에 대한 자세한 내용은 [Step Functions를 사용하여 Amazon EKS 클러스터 생성 및 관리](#connect-eks) 섹션을 참조하세요.

# Step Functions를 사용하여 Amazon EMR 클러스터 생성 및 관리
<a name="connect-emr"></a>

제공된 Amazon EMR 서비스 통합 APIs를 사용하여 Amazon EMRAWS Step Functions과 통합하는 방법을 알아봅니다. 서비스 통합 API는 해당 Amazon EMR API와 유사하지만 전달되는 필드와 반환되는 응답에 약간의 차이가 있습니다.

Step Functions의 AWS서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

**최적화된 Amazon EMR 통합의 주요 기능**  
최적화된 Amazon EMR 서비스 통합에는 기본 Amazon EMR API를 래핑하는 사용자 지정된 API 집합이 있습니다. 따라서 Amazon EMR AWSSDK 서비스 통합과 크게 다릅니다.
[작업 실행(.sync)](connect-to-resource.md#connect-sync) 통합 패턴이 지원됩니다.

Step Functions는 실행이 중지된 경우 Amazon EMR 클러스터를 자동으로 종료하지 않습니다. Amazon EMR 클러스터가 종료되기 전에 상태 머신이 중지하면 클러스터가 무기한 계속 실행될 수 있으므로 추가 요금이 발생할 수 있습니다. 이를 방지하려면 생성된 모든 Amazon EMR 클러스터를 올바르게 종료해야 합니다. 자세한 내용은 다음을 참조하세요.
+ Amazon EMR 사용 설명서의 [클러스터 종료 제어](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-termination.html)
+ 서비스 통합 패턴 [작업 실행(.sync)](connect-to-resource.md#connect-sync) 섹션

**참고**  
`emr-5.28.0`에 따라 클러스터를 만들 때 `StepConcurrencyLevel` 파라미터를 지정하여 단일 클러스터에서 여러 단계를 동시에 실행할 수 있습니다. Step Functions `Map` 및 `Parallel` 상태를 사용하여 동시에 작업을 클러스터에 제출할 수 있습니다.

Amazon EMR 서비스 통합 가용성은 Amazon EMR API 가용성에 따라 달라질 수 있습니다. 특별 리전에서의 제한 사항은 [Amazon EMR](https://docs.aws.amazon.com//govcloud-us/latest/UserGuide/govcloud-emr.html) 설명서를 참조하세요.

**참고**  
Amazon EMR과 통합을 위해 Step Functions는 처음 10분과 이후 300초 동안 작업 폴링 빈도를 60초로 하드 코딩합니다.

## 최적화된 Amazon EMR API
<a name="connect-emr-api"></a>

다음 표에서는 각 Amazon EMR 서비스 통합 API와 해당 Amazon EMR API 간의 차이점을 설명합니다.


| Amazon EMR 서비스 통합 API | 해당 EMR API | 차이 | 
| --- | --- | --- | 
| createCluster 클러스터(작업 흐름)를 생성하고 실행을 시작합니다. Amazon EMR은 서비스 연결 역할이라고 하는 고유한 유형의 IAM 역할에 직접 연결됩니다. `createCluster` 및 `createCluster.sync` 작업을 수행하려면 서비스 연결 역할인 `AWSServiceRoleForEMRCleanup`을 생성하도록 구성된 필수 권한이 있어야 합니다. IAM 권한 정책에 추가할 수 있는 문을 포함하여 이에 대한 자세한 내용은 [Amazon EMR에 서비스 연결 역할 사용](https://docs.aws.amazon.com/emr/latest/ManagementGuide/using-service-linked-roles.html)을 참조하세요. | [runJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html) | createCluster는 다음을 제외하고 [runJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html)와 동일한 요청 구문을 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/connect-emr.html)응답은 다음과 같습니다.<pre>{<br />  "ClusterId": "string"<br />}</pre> Amazon EMR에서 다음을 사용합니다.<pre>{<br />  "JobFlowId": "string"<br />}</pre>  | 
| createCluster.sync 클러스터(작업 흐름)를 생성하고 실행을 시작합니다. | [runJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html) | createCluster와 동일하지만 클러스터가 WAITING 상태에 도달할 때까지 기다려야 합니다. | 
| setClusterTerminationProtection 클러스터의 EC2 인스턴스가 사용자 개입, API 호출 또는 작업 흐름 오류 발생으로 인하여 종료될 수 없도록 클러스터(작업 흐름)를 잠급니다. | [setTerminationProtection](https://docs.aws.amazon.com/emr/latest/APIReference/API_SetTerminationProtection.html) | 요청은 다음을 사용합니다.<pre>{<br />  "ClusterId": "string"<br />}</pre> Amazon EMR에서 다음을 사용합니다.<pre>{<br />  "JobFlowIds": ["string"]<br />}</pre>  | 
| terminateCluster 클러스터(작업 흐름)를 종료합니다.  | [terminateJobFlows](https://docs.aws.amazon.com/emr/latest/APIReference/API_TerminateJobFlows.html) | 요청은 다음을 사용합니다.<pre>{<br />  "ClusterId": "string"<br />}</pre> Amazon EMR에서 다음을 사용합니다.<pre>{<br />  "JobFlowIds": ["string"]<br />}</pre> | 
| terminateCluster.sync클러스터(작업 흐름)를 종료합니다. | [terminateJobFlows](https://docs.aws.amazon.com/emr/latest/APIReference/API_TerminateJobFlows.html) | terminateCluster와 동일하지만 클러스터가 종료될 때까지 기다려야 합니다. | 
| addStep 실행 중인 클러스터에 새 단계를 추가합니다. 필요한 경우 이 API를 사용하는 중에 `[ExecutionRoleArn](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html#EMR-AddJobFlowSteps-request-ExecutionRoleArn)` 파라미터를 지정할 수도 있습니다. | [addJobFlowSteps](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html) | 요청에서 "ClusterId" 키를 사용합니다. Amazon EMR에서 "JobFlowId"를 사용합니다. 요청은 단일 단계를 사용합니다.<pre>{<br />  "Step": <"StepConfig object"><br />}</pre> Amazon EMR에서 다음을 사용합니다.<pre>{<br />  "Steps": [<StepConfig objects>]<br />}</pre> 응답은 다음과 같습니다.<pre>{<br />  "StepId": "string"<br />}</pre> Amazon EMR에서 다음을 반환합니다.<pre>{<br />  "StepIds": [<strings>]<br />}</pre>  | 
| addStep.sync 실행 중인 클러스터에 새 단계를 추가합니다. 필요한 경우 이 API를 사용하는 중에 `[ExecutionRoleArn](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html#EMR-AddJobFlowSteps-request-ExecutionRoleArn)` 파라미터를 지정할 수도 있습니다. | [addJobFlowSteps](https://docs.aws.amazon.com/emr/latest/APIReference/API_AddJobFlowSteps.html) | addStep과 동일하지만 단계가 완료될 때까지 기다려야 합니다. | 
| cancelStep 실행 중인 클러스터에서 보류 중인 단계를 취소합니다. | [cancelSteps](https://docs.aws.amazon.com/emr/latest/APIReference/API_CancelSteps.html) |  요청은 다음을 사용합니다.<pre>{<br />  "StepId": "string"<br />}</pre> Amazon EMR에서 다음을 사용합니다.<pre>{<br />  "StepIds": [<strings>]<br />}</pre> 응답은 다음과 같습니다.<pre>{<br />  "CancelStepsInfo": <CancelStepsInfo object><br />}</pre> Amazon EMR에서 다음을 사용합니다.<pre>{<br />  "CancelStepsInfoList": [<CancelStepsInfo objects>]<br />}</pre>  | 
| modifyInstanceFleetByName 지정된 `InstanceFleetName`을 사용하여 인스턴스 플릿에 대한 대상 온디맨드 및 대상 스팟 용량을 수정합니다. | [modifyInstanceFleet](https://docs.aws.amazon.com/emr/latest/APIReference/API_ModifyInstanceFleet.html) | 요청은 다음을 제외하고 modifyInstanceFleet과 동일합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/connect-emr.html)  | 
| modifyInstanceGroupByName 인스턴스 그룹의 구성 설정 및 노드 수를 수정합니다. | [modifyInstanceGroups](https://docs.aws.amazon.com/emr/latest/APIReference/API_ModifyInstanceGroups.html) | 요청은 다음과 같습니다.<pre>{<br />  "ClusterId": "string",<br />  "InstanceGroup": <InstanceGroupModifyConfig object><br />}</pre> Amazon EMR에서 다음 목록을 사용합니다.<pre>{<br />  "ClusterId": ["string"],<br />  "InstanceGroups": [<InstanceGroupModifyConfig objects>]<br />}</pre> `InstanceGroupModifyConfig` 객체 내에서 `InstanceGroupId` 필드는 허용되지 않습니다. 새 필드 `InstanceGroupName`이 추가되었습니다. 런타임 시 `InstanceGroupId`는 `ListInstanceGroups`를 호출하고 결과를 구문 분석하여 서비스 통합에 의해 자동으로 결정됩니다.  | 

## 워크플로 예시
<a name="connect-emr-api-examples"></a>

다음은 클러스터를 생성하는 `Task` 상태를 포함합니다.

```
"Create_Cluster": {
    "Type": "Task",
    "Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync",
    "Arguments": {
        "Name": "MyWorkflowCluster",
        "VisibleToAllUsers": true,
        "ReleaseLabel": "emr-5.28.0",
        "Applications": [
            {
                "Name": "Hive"
            }
        ],
        "ServiceRole": "EMR_DefaultRole",
        "JobFlowRole": "EMR_EC2_DefaultRole",
        "LogUri": "s3n://aws-logs-account-id-us-east-1/elasticmapreduce/",
        "Instances": {
            "KeepJobFlowAliveWhenNoSteps": true,
            "InstanceFleets": [
                {
                    "InstanceFleetType": "MASTER",
                    "Name": "MASTER",   
                    "TargetOnDemandCapacity": 1,
                    "InstanceTypeConfigs": [
                        {
                            "InstanceType": "m4.xlarge"
                        }
                    ]
                },
                {
                    "InstanceFleetType": "CORE",
                    "Name": "CORE",
                    "TargetOnDemandCapacity": 1,
                    "InstanceTypeConfigs": [
                        {
                            "InstanceType": "m4.xlarge"
                        }
                    ]
                }
            ]
        }
    },
    "End": true
}
```

다음은 종료 보호를 활성화하는 `Task` 상태를 포함합니다.

```
"Enable_Termination_Protection": {
    "Type": "Task",
    "Resource": "arn:aws:states:::elasticmapreduce:setClusterTerminationProtection",
    "Arguments": {
        "ClusterId": "{% $ClusterId %}",
        "TerminationProtected": true
    },
    "End": true
}
```

다음은 클러스터에 단계를 제출하는 `Task` 상태를 포함합니다.

```
"Step_One": {
    "Type": "Task",
    "Resource": "arn:aws:states:::elasticmapreduce:addStep.sync",
    "Arguments": {
        "ClusterId": "{% $ClusterId %}",
        "ExecutionRoleArn": "arn:aws:iam::account-id:role/myEMR-execution-role",
        "Step": {
            "Name": "The first step",
            "ActionOnFailure": "TERMINATE_CLUSTER",
            "HadoopJarStep": {
                "Jar": "command-runner.jar",
                "Args": [
                    "hive-script",
                    "--run-hive-script",
                    "--args",
                    "-f",
                    "s3://region.elasticmapreduce.samples/cloudfront/code/Hive_CloudFront.q",
                    "-d",
                    "INPUT=s3://region.elasticmapreduce.samples",
                    "-d",
                    "OUTPUT=s3://<amzn-s3-demo-bucket>/MyHiveQueryResults/"
                ]
            }
        }
    },
    "End": true
}
```

다음은 단계를 취소하는 `Task` 상태를 포함합니다.

```
"Cancel_Step_One": {
    "Type": "Task",
    "Resource": "arn:aws:states:::elasticmapreduce:cancelStep",
    "Arguments": {
        "ClusterId": "{% $ClusterId %}",
        "StepId": "{% $AddStepsResult.StepId %}"
    },
    "End": true
}
```

다음은 클러스터를 종료하는 `Task` 상태를 포함합니다.

```
"Terminate_Cluster": {
    "Type": "Task",
    "Resource": "arn:aws:states:::elasticmapreduce:terminateCluster.sync",
    "Arguments": {
        "ClusterId": "{% $ClusterId %}",
    },
    "End": true
}
```

다음은 인스턴스 그룹에 대해 클러스터를 확장 또는 축소하는 `Task` 상태를 포함합니다.

```
"ModifyInstanceGroupByName": {
    "Type": "Task",
    "Resource": "arn:aws:states:::elasticmapreduce:modifyInstanceGroupByName",
    "Arguments": {
        "ClusterId": "j-account-id3",
        "InstanceGroupName": "MyCoreGroup",
        "InstanceGroup": {
            "InstanceCount": 8
        }
    },
    "End": true
}
```

다음은 인스턴스 플릿에 대해 클러스터를 확장 또는 축소하는 `Task` 상태를 포함합니다.

```
"ModifyInstanceFleetByName": {
    "Type": "Task",
    "Resource": "arn:aws:states:::elasticmapreduce:modifyInstanceFleetByName",
    "Arguments": {
        "ClusterId": "j-account-id3",
        "InstanceFleetName": "MyCoreFleet",
        "InstanceFleet": {
            "TargetOnDemandCapacity": 8,
            "TargetSpotCapacity": 0
        }
    },
    "End": true
}
```

## Amazon EMR 호출을 위한 IAM 정책
<a name="emr-iam"></a>

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

### `addStep`
<a name="emr-iam-addstep"></a>

*정적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:AddJobFlowSteps",
                "elasticmapreduce:DescribeStep",
                "elasticmapreduce:CancelSteps"
            ],
            "Resource": [
                "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/clusterId"
            ]
        }
    ]
}
```

*동적 리소스*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:AddJobFlowSteps",
        "elasticmapreduce:DescribeStep",
        "elasticmapreduce:CancelSteps"
      ],
      "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*"
    }
  ]
}
```

### `cancelStep`
<a name="emr-iam-cancelstep"></a>

*정적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "elasticmapreduce:CancelSteps",
            "Resource": [
                "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id"
            ]
        }
    ]
}
```

*동적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "elasticmapreduce:CancelSteps",
            "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*"
        }
    ]
}
```

### `createCluster`
<a name="emr-iam-createcluster"></a>

*정적 리소스*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:RunJobFlow",
        "elasticmapreduce:DescribeCluster",
        "elasticmapreduce:TerminateJobFlows"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:PassRole",
      "Resource": [
        "arn:aws:iam::123456789012:role/myRoleName"
      ]
    }
  ]
}
```

### `setClusterTerminationProtection`
<a name="emr-iam-clusterterminationprotection"></a>

*정적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "elasticmapreduce:SetTerminationProtection",
            "Resource": [
                "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id"
            ]
        }
    ]
}
```

*동적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "elasticmapreduce:SetTerminationProtection",
            "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*"
        }
    ]
}
```

### `modifyInstanceFleetByName`
<a name="emr-iam-modifyinstancefleetbyname"></a>

*정적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:ModifyInstanceFleet",
                "elasticmapreduce:ListInstanceFleets"
            ],
            "Resource": [
                "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id"
            ]
        }
    ]
}
```

*동적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:ModifyInstanceFleet",
                "elasticmapreduce:ListInstanceFleets"
            ],
            "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*"
        }
    ]
}
```

### `modifyInstanceGroupByName`
<a name="emr-iam-modifyinstancegroupbyname"></a>

*정적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:ModifyInstanceGroups",
                "elasticmapreduce:ListInstanceGroups"
            ],
            "Resource": [
                "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id"
            ]
        }
    ]
}
```

*동적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:ModifyInstanceGroups",
                "elasticmapreduce:ListInstanceGroups"
            ],
            "Resource": "*"
        }
    ]
}
```

### `terminateCluster`
<a name="emr-iam-terminatecluster"></a>

*정적 리소스*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:TerminateJobFlows",
        "elasticmapreduce:DescribeCluster"
      ],
      "Resource": [
        "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id"
      ]
    }
  ]
}
```

*동적 리소스*

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:TerminateJobFlows",
        "elasticmapreduce:DescribeCluster"
      ],
      "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*"
    }
  ]
}
```

# 를 사용하여 EKS에서 Amazon EMR 클러스터 생성 및 관리 AWS Step Functions
<a name="connect-emr-eks"></a>

Amazon EMR on EKS 서비스 통합 APIs를 사용하여 Amazon EMR on EKS AWS Step Functions 와 통합하는 방법을 알아봅니다. 서비스 통합 API는 해당 Amazon EMR on EKS API와 동일하지만 다음 표와 같이 모든 API에서 모든 통합 패턴을 지원하지 않습니다.

Step Functions의 AWS 서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

**최적화된 Amazon EMR on EKS 통합과 Amazon EMR on EKS AWS SDK 통합의 차이점**  
[작업 실행(.sync)](connect-to-resource.md#connect-sync) 통합 패턴이 지원됩니다.
[요청 및 응답](connect-to-resource.md#connect-default) 통합 패턴에 대한 구체적인 최적화는 없습니다.
[작업 토큰을 사용하여 콜백 대기](connect-to-resource.md#connect-wait-token) 통합 패턴은 지원되지 않습니다.

**참고**  
Amazon EMR과 통합을 위해 Step Functions는 처음 10분과 이후 300초 동안 작업 폴링 빈도를 60초로 하드 코딩합니다.


| API | 요청 및 응답 | 작업 실행(.sync) | 
| --- | --- | --- | 
| CreateVirtualCluster | 지원됨 | 지원되지 않음 | 
| DeleteVirtualCluster | 지원됨 | 지원됨 | 
| StartJobRun | 지원됨 | 지원됨 | 

지원되는 Amazon EMR on EKS API는 다음과 같습니다.

**입력 또는 결과 데이터의 할당량**  
서비스 간에 데이터를 전송하거나 수신할 때 작업의 최대 입력 또는 결과는 UTF-8 인코딩 문자열로 256KiB의 데이터입니다. [상태 머신 실행과 관련된 할당량](service-quotas.md#service-limits-state-machine-executions)을(를) 참조하세요.


+ [https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_CreateVirtualCluster.html](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_CreateVirtualCluster.html)
  + [요청 구문](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_CreateVirtualCluster.html#API_CreateVirtualCluster_RequestSyntax)
  + [지원되는 파라미터](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_CreateVirtualCluster.html#API_CreateVirtualCluster_RequestBody)
  + [응답 구문](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_CreateVirtualCluster.html#API_CreateVirtualCluster_ResponseSyntax)
+ [https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_DeleteVirtualCluster.html](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_DeleteVirtualCluster.html)
  + [요청 구문](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_DeleteVirtualCluster.html#API_DeleteVirtualCluster_RequestSyntax)
  + [지원되는 파라미터](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_DeleteVirtualCluster.html#API_DeleteVirtualCluster_RequestParameters)
  + [응답 구문](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_CreateVirtualCluster.html#API_CreateVirtualCluster_ResponseSyntax)
+ [https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_StartJobRun.html](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_StartJobRun.html)
  + [요청 구문](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_StartJobRun.html#API_StartJobRun_RequestSyntax)
  + [지원되는 파라미터](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_StartJobRun.html#API_StartJobRun_RequestParameters)
  + [응답 구문](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_StartJobRun.html#API_StartJobRun_ResponseSyntax)

다음에는 가상 클러스터를 만드는 `Task` 상태가 포함됩니다.

```
"Create_Virtual_Cluster": {
  "Type": "Task",
  "Resource": "arn:aws:states:::emr-containers:createVirtualCluster",
  "Arguments": {
    "Name": "MyVirtualCluster",
    "ContainerProvider": {
      "Id": "EKSClusterName",
      "Type": "EKS",
      "Info": {
        "EksInfo": {
          "Namespace": "Namespace"
        }
      }
    }
  },
  "End": true
}
```

다음에는 작업을 가상 클러스터에 제출하고 완료될 때까지 기다리는 `Task` 상태가 포함됩니다.

```
"Submit_Job": {
    "Type": "Task",
    "Resource": "arn:aws:states:::emr-containers:startJobRun.sync",
    "Arguments": {
      "Name": "MyJobName",
      "VirtualClusterId": "{% $VirtualClusterId %}",
      "ExecutionRoleArn": "arn:aws:iam::<accountId>:role/job-execution-role",
      "ReleaseLabel": "emr-6.2.0-latest",
      "JobDriver": {
        "SparkSubmitJobDriver": {
          "EntryPoint": "s3://<amzn-s3-demo-bucket>/jobs/trip-count.py",
          "EntryPointArguments": [
            "60"
          ],
          "SparkSubmitParameters": "--conf spark.driver.cores=2 --conf spark.executor.instances=10 --conf spark.kubernetes.pyspark.pythonVersion=3 --conf spark.executor.memory=10G --conf spark.driver.memory=10G --conf spark.executor.cores=1 --conf spark.dynamicAllocation.enabled=false"
        }
      },
      "ConfigurationOverrides": {
        "ApplicationConfiguration": [
          {
            "Classification": "spark-defaults",
            "Properties": {
              "spark.executor.instances": "2",
              "spark.executor.memory": "2G"
            }
          }
        ],
        "MonitoringConfiguration": {
          "PersistentAppUI": "ENABLED",
          "CloudWatchMonitoringConfiguration": {
            "LogGroupName": "MyLogGroupName",
            "LogStreamNamePrefix": "MyLogStreamNamePrefix"
          },
          "S3MonitoringConfiguration": {
            "LogUri": "s3://<amzn-s3-demo-logging-bucket1>"
          }
        }
      },
      "Tags": {
        "taskType": "jobName"
      }
    },
    "End": true
}
```

다음에는 가상 클러스터를 삭제하고 삭제가 완료될 때까지 기다리는 `Task` 상태가 포함됩니다.

```
"Delete_Virtual_Cluster": {
  "Type": "Task",
  "Resource": "arn:aws:states:::emr-containers:deleteVirtualCluster.sync",
  "Arguments": {
    "Id": "{% $states.input.VirtualClusterId %}",
  },
  "End": true
}
```

를 다른 AWS 서비스와 Step Functions 함께 사용할 때 IAM 권한을 구성하는 방법에 대한 자세한 내용은 섹션을 참조하세요[Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md).

# Step Functions를 사용하여 Amazon EMR Serverless 애플리케이션 생성 및 관리
<a name="connect-emr-serverless"></a>

Step Functions를 사용하여 EMR Serverless에서 애플리케이션을 생성, 시작, 중지 및 삭제하는 방법을 알아봅니다. 이 페이지에서는 지원되는 API를 나열하고 일반적인 사용 사례를 수행하기 위한 예제 `Task` 상태를 제공합니다.

Step Functions의 AWS서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

**최적화된 EMR Serverless 통합의 주요 기능**  
 최적화 EMR Serverless 서비스 통합에는 기본 EMR Serverless API를 래핑하는 사용자 지정된 [API](#connect-emr-serverless-custom-apis) 집합이 있습니다. 이러한 사용자 지정으로 인해 최적화된 EMR Serverless 통합은 AWSSDK 서비스 통합과 크게 다릅니다.
또한 최적화된 EMR Serverless 통합은 [작업 실행(.sync)](connect-to-resource.md#connect-sync) 통합 패턴을 지원합니다.
[작업 토큰을 사용하여 콜백 대기](connect-to-resource.md#connect-wait-token) 통합 패턴은 지원되지 **않습니다**.

## EMR Serverless 서비스 통합 API
<a name="connect-emr-serverless-custom-apis"></a>

AWS Step Functions를 EMR Serverless와 통합하려면 다음과 같은 EMR Serverless 서비스 통합 API 6개를 사용하면 됩니다. 이러한 서비스 통합 API는 해당 EMR Serverless API와 유사하지만 전달되는 필드와 반환되는 응답에 약간의 차이가 있습니다.

다음 표에는 각 EMR Serverless 서비스 통합 API와 해당 EMR Serverless API 간의 차이점이 나와 있습니다.


| EMR Serverless 서비스 통합 API | 해당 EMR Serverless API | 차이 | 
| --- | --- | --- | 
|  *createApplication*  애플리케이션을 생성합니다. EMR Serverless는 서비스 연결 역할이라고 하는 고유한 유형의 IAM 역할에 연결됩니다. `createApplication` 및 `createApplication.sync` 작업을 수행하려면 서비스 연결 역할인 `AWSServiceRoleForAmazonEMRServerless`을 생성하도록 구성된 필수 권한이 있어야 합니다. IAM 권한 정책에 추가할 수 있는 문을 포함하여 이에 대한 자세한 내용은 [EMR Serverless에 서비스 연결 역할 사용](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/using-service-linked-roles.html)을 참조하세요.  |  [CreateApplication](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_CreateApplication.html)  | 없음 | 
|  *createApplication.sync*  애플리케이션을 생성합니다.  |  [CreateApplication](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_CreateApplication.html)  |  EMR Serverless API와 EMR Serverless 서비스 통합 API의 요청과 응답 간에는 차이가 없습니다. 하지만 *createApplication.sync*는 애플리케이션이 `CREATED` 상태에 도달할 때까지 기다립니다.  | 
|  *startApplication* 지정된 애플리케이션을 시작하고 구성된 경우 애플리케이션의 초기 용량을 초기화합니다.  |  [StartApplication](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartApplication.html)  |  EMR Serverless API 응답에는 어떠한 데이터도 포함되지 않지만 EMR Serverless 서비스 통합 API 응답에는 다음 데이터가 포함됩니다. <pre>{<br />  "ApplicationId": "string"<br />}</pre>  | 
|  *startApplication.sync* 지정된 애플리케이션을 시작하고 구성된 경우 초기 용량을 초기화합니다.  |  [StartApplication](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartApplication.html)  |  EMR Serverless API 응답에는 어떠한 데이터도 포함되지 않지만 EMR Serverless 서비스 통합 API 응답에는 다음 데이터가 포함됩니다. <pre>{<br />  "ApplicationId": "string"<br />}</pre> 또한 *startApplication.sync*는 애플리케이션이 `STARTED` 상태에 도달할 때까지 기다립니다.  | 
|  *stopApplication* 지정된 애플리케이션을 중지하고 구성된 경우 초기 용량을 해제합니다. 애플리케이션을 중지하기 전에 예약되고 실행 중인 모든 작업을 완료하거나 취소해야 합니다.  |  [StopApplication](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StopApplication.html)  |  EMR Serverless API 응답에는 어떠한 데이터도 포함되지 않지만 EMR Serverless 서비스 통합 API 응답에는 다음 데이터가 포함됩니다. <pre>{<br />  "ApplicationId": "string"<br />}</pre>  | 
|  *stopApplication.sync* 지정된 애플리케이션을 중지하고 구성된 경우 초기 용량을 해제합니다. 애플리케이션을 중지하기 전에 예약되고 실행 중인 모든 작업을 완료하거나 취소해야 합니다.  |  [StopApplication](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StopApplication.html)  |  EMR Serverless API 응답에는 어떠한 데이터도 포함되지 않지만 EMR Serverless 서비스 통합 API 응답에는 다음 데이터가 포함됩니다. <pre>{<br />  "ApplicationId": "string"<br />}</pre> 또한 *stopApplication.sync*는 애플리케이션이 `STOPPED` 상태에 도달할 때까지 기다립니다.  | 
|  *deleteApplication* 애플리케이션을 삭제합니다. 애플리케이션을 삭제하려면 애플리케이션이 `STOPPED` 또는 `CREATED` 상태여야 합니다.  |  [DeleteApplication](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_DeleteApplication.html)  |  EMR Serverless API 응답에는 어떠한 데이터도 포함되지 않지만 EMR Serverless 서비스 통합 API 응답에는 다음 데이터가 포함됩니다. <pre>{<br />  "ApplicationId": "string"<br />}</pre>  | 
|  *deleteApplication.sync* 애플리케이션을 삭제합니다. 애플리케이션을 삭제하려면 애플리케이션이 `STOPPED` 또는 `CREATED` 상태여야 합니다.  |  [DeleteApplication](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_DeleteApplication.html)  |  EMR Serverless API 응답에는 어떠한 데이터도 포함되지 않지만 EMR Serverless 서비스 통합 API 응답에는 다음 데이터가 포함됩니다. <pre>{<br />  "ApplicationId": "string"<br />}</pre> 또한 *stopApplication.sync*는 애플리케이션이 `TERMINATED` 상태에 도달할 때까지 기다립니다.  | 
|  *startJobRun* 작업 실행을 시작합니다.  |  [StartJobRun](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html)  | 없음 | 
|  *startJobRun.sync* 작업 실행을 시작합니다.  |  [StartJobRun](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html)  |  EMR Serverless API와 EMR Serverless 서비스 통합 API의 요청과 응답 간에는 차이가 없습니다. 하지만 *startJobRun.sync*는 애플리케이션이 `SUCCESS` 상태에 도달할 때까지 기다립니다.  | 
|  *cancelJobRun* 작업 실행을 취소합니다.  |  [CancelJobRun](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_CancelJobRun.html)  | 없음 | 
|  *cancelJobRun.sync* 작업 실행을 취소합니다.  |  [CancelJobRun](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_CancelJobRun.html)  |  EMR Serverless API와 EMR Serverless 서비스 통합 API의 요청과 응답 간에는 차이가 없습니다. 하지만 *cancelJobRun.sync*는 애플리케이션이 `CANCELLED` 상태에 도달할 때까지 기다립니다.  | 

## EMR 서버리스 통합 사용 사례
<a name="connect-emr-serverless-use-cases"></a>

최적화된 EMR Serverless 서비스 통합의 경우 단일 애플리케이션을 만든 다음 해당 애플리케이션을 사용하여 여러 작업을 실행하는 것이 좋습니다. 예를 들어 단일 상태 머신에 같은 애플리케이션을 사용하는 [startJobRun](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html) 요청을 여러 개 포함할 수 있습니다. 다음 [Task 워크플로 상태](state-task.md) 상태 예제에서는 Step Functions를 사용하여 EMR Serverless API를 통합하는 사용 사례를 보여줍니다. 다른 EMR Serverless 사용 사례는 [Amazon EMR Serverless란 무엇입니까?](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/emr-serverless.html) 참조하세요.

**작은 정보**  
여러 작업을 실행할 수 있도록 EMR Serverless와 통합되는 상태 머신의 예제를 배포하려면 [EMR Serverless 작업 실행](sample-emr-serverless-job.md) 섹션을 참조하세요.
+ [애플리케이션 만들기](#connect-emr-serverless-task-state-createapp)
+ [애플리케이션 시작](#connect-emr-serverless-task-state-startapp)
+ [애플리케이션 중지](#connect-emr-serverless-task-state-stopapp)
+ [애플리케이션 삭제](#connect-emr-serverless-task-state-deleteapp)
+ [애플리케이션에서 작업 시작](#connect-emr-serverless-task-state-startjobrun)
+ [애플리케이션에서 작업 취소](#connect-emr-serverless-task-state-canceljobrun)

를 다른 AWS서비스와 Step Functions 함께 사용할 때 IAM 권한을 구성하는 방법에 대한 자세한 내용은 섹션을 참조하세요[Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md).

다음 사용 사례에 표시된 예제에서 *기울임꼴* 텍스트를 리소스별 정보로 바꿉니다. 예를 들어 EMR Serverless 애플리케이션 ID를 *yourApplicationId*로 바꿉니다(예: `00yv7iv71inak893`).

### 애플리케이션 만들기
<a name="connect-emr-serverless-task-state-createapp"></a>

다음 Task 상태 예제는 *createApplication.sync* 서비스 통합 API를 사용하여 애플리케이션을 만듭니다.

```
"Create_Application": {
    "Type": "Task",
    "Resource": "arn:aws:states:::emr-serverless:createApplication.sync",
    "Arguments": {
        "Name": "MyApplication",
        "ReleaseLabel": "emr-6.9.0",
        "Type": "SPARK"
    },
    "End": true
}
```

### 애플리케이션 시작
<a name="connect-emr-serverless-task-state-startapp"></a>

다음 Task 상태 예제는 *startApplication.sync* 서비스 통합 API를 사용하여 애플리케이션을 시작합니다.

```
"Start_Application": {
    "Type": "Task",
    "Resource": "arn:aws:states:::emr-serverless:startApplication.sync",
    "Arguments": {
        "ApplicationId": "yourApplicationId"
    },
    "End": true
}
```

### 애플리케이션 중지
<a name="connect-emr-serverless-task-state-stopapp"></a>

다음 Task 상태 예제는 *stopApplication.sync* 서비스 통합 API를 사용하여 애플리케이션을 중지합니다.

```
"Stop_Application": {
    "Type": "Task",
    "Resource": "arn:aws:states:::emr-serverless:stopApplication.sync",
    "Arguments": {
        "ApplicationId": "yourApplicationId"
    },
    "End": true
}
```

### 애플리케이션 삭제
<a name="connect-emr-serverless-task-state-deleteapp"></a>

다음 Task 상태 예제는 *deleteApplication.sync* 서비스 통합 API를 사용하여 애플리케이션을 삭제합니다.

```
"Delete_Application": {
    "Type": "Task",
    "Resource": "arn:aws:states:::emr-serverless:deleteApplication.sync",
    "Arguments": {
        "ApplicationId": "yourApplicationId"
    },
    "End": true
}
```

### 애플리케이션에서 작업 시작
<a name="connect-emr-serverless-task-state-startjobrun"></a>

다음 Task 상태 예제는 *startJobRun.sync* 서비스 통합 API를 사용하여 애플리케이션에서 작업을 시작합니다.

```
"Start_Job": {
    "Type": "Task",
    "Resource": "arn:aws:states:::emr-serverless:startJobRun.sync",
    "Arguments": {
        "ApplicationId": "yourApplicationId",
        "ExecutionRoleArn": "arn:aws:iam::account-id:role/myEMRServerless-execution-role",
        "JobDriver": {
            "SparkSubmit": {
                "EntryPoint": "s3://<amzn-s3-demo-bucket>/sample.py",
                "EntryPointArguments": ["1"],
                "SparkSubmitParameters": "--conf spark.executor.cores=4 --conf spark.executor.memory=4g --conf spark.driver.cores=2 --conf spark.driver.memory=4g --conf spark.executor.instances=1"
            }
        }
    },
    "End": true
}
```

### 애플리케이션에서 작업 취소
<a name="connect-emr-serverless-task-state-canceljobrun"></a>

다음 Task 상태 예제는 *cancelJobRun.sync* 서비스 통합 API를 사용하여 애플리케이션에서 작업을 취소합니다.

```
"Cancel_Job": {
    "Type": "Task",
    "Resource": "arn:aws:states:::emr-serverless:cancelJobRun.sync",
    "Arguments": {
        "ApplicationId": "{% $states.input.ApplicationId %}",
        "JobRunId": "{% $states.input.JobRunId %}"
    },
    "End": true
}
```

## Amazon EMR Serverless 호출을 위한 IAM 정책
<a name="emr-serverless-iam"></a>

콘솔을 사용하여 상태 머신을 만들면 Step Functions에서 필요한 최소 권한으로 상태 머신의 실행 역할을 자동으로 만듭니다. 이러한 자동 생성된 IAM 역할은 상태 시스템을 생성하는 AWS 리전에 유효합니다.

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

IAM 정책을 만들 때는 정책에 와일드카드를 포함하지 않는 것이 좋습니다. 보안 모범 사례로 정책 범위를 최대한 좁혀야 합니다. 런타임 중에 특정 입력 파라미터를 알 수 없는 경우에만 동적 정책을 사용해야 합니다.

또한 관리자는 관리자가 아닌 사용자에게 상태 머신을 실행할 수 있는 실행 역할을 부여할 때 주의해야 합니다. 정책을 직접 만드는 경우 실행 역할에 passRole 정책을 포함하는 것이 좋습니다. 또한 실행 역할에 `aws:SourceARN` 및 `aws:SourceAccount` 컨텍스트 키를 추가하는 것이 좋습니다.

### Step Functions와 EMR 서버리스 통합에 대한 IAM 정책 예제
<a name="emr-serverless-iam-policy-eg"></a>
+ [CreateApplication에 대한 IAM 정책 예시](#emr-serverless-policy-createapp)
+ [StartApplication에 대한 IAM 정책 예시](#emr-serverless-policy-startapp)
+ [StopApplication에 대한 IAM 정책 예시](#emr-serverless-policy-stopapp)
+ [DeleteApplication에 대한 IAM 정책 예시](#emr-serverless-policy-deleteapp)
+ [StartJobRun에 대한 IAM 정책 예시](#emr-serverless-policy-startjobrun)
+ [CancelJobRun에 대한 IAM 정책 예시](#emr-serverless-policy-canceljobrun)

#### CreateApplication에 대한 IAM 정책 예시
<a name="emr-serverless-policy-createapp"></a>

다음은 CreateApplication [Task 워크플로 상태](state-task.md) 상태의 상태 머신에 대한 IAM 정책 예제입니다.

**참고**  
계정에 처음 애플리케이션을 만들 때는 IAM 정책에 CreateServiceLinkedRole 권한을 지정해야 합니다. 이후에는 이 권한을 추가할 필요가 없습니다. CreateServiceLinkedRole에 대한 자세한 내용은 https://docs.aws.amazon.com/IAM/latest/APIReference/에서 [CreateServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html)을 참조하세요.

다음 정책의 정적 리소스와 동적 리소스는 동일합니다.

------
#### [ Run a Job (.sync) ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "emr-serverless:CreateApplication"
            ],
            "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "emr-serverless:GetApplication",
                "emr-serverless:DeleteApplication"
            ],
            "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:CreateServiceLinkedRole",
            "Resource": "arn:aws:iam::123456789012:role/aws-service-role/ops.emr-serverless.amazonaws.com/AWSServiceRoleForAmazonEMRServerless*",
            "Condition": {
                "StringLike": {
                    "iam:AWSServiceName": "ops.emr-serverless.amazonaws.com"
                }
            }
        }
   ]
}
```

------
#### [ Request Response ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   
   "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "emr-serverless:CreateApplication"
            ],
            "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:CreateServiceLinkedRole",
            "Resource": "arn:aws:iam::123456789012:role/aws-service-role/ops.emr-serverless.amazonaws.com/AWSServiceRoleForAmazonEMRServerless*",
            "Condition": {
                "StringLike": {
                    "iam:AWSServiceName": "ops.emr-serverless.amazonaws.com"
                }
            }
        }
    ]
}
```

------

#### StartApplication에 대한 IAM 정책 예시
<a name="emr-serverless-policy-startapp"></a>

**정적 리소스**  
다음은 StartApplication [Task 워크플로 상태](state-task.md) 상태의 상태 머신을 사용할 때의 정적 리소스에 대한 IAM 정책 예제입니다.

------
#### [ Run a Job (.sync) ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StartApplication",
               "emr-serverless:GetApplication",
               "emr-serverless:StopApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StartApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId"
            ]
        }
    ]
}
```

------

**동적 리소스**  
다음은 StartApplication [Task 워크플로 상태](state-task.md) 상태의 상태 머신을 사용할 때의 동적 리소스에 대한 IAM 정책 예제입니다.

------
#### [ Run a Job (.sync) ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StartApplication",
               "emr-serverless:GetApplication",
               "emr-serverless:StopApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StartApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        }
    ]
}
```

------

#### StopApplication에 대한 IAM 정책 예시
<a name="emr-serverless-policy-stopapp"></a>

**정적 리소스**  
다음은 StopApplication [Task 워크플로 상태](state-task.md) 상태의 상태 머신을 사용할 때의 정적 리소스에 대한 IAM 정책 예제입니다.

------
#### [ Run a Job (.sync) ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StopApplication",
               "emr-serverless:GetApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StopApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId"
            ]
        }
    ]
}
```

------

**동적 리소스**  
다음은 StopApplication [Task 워크플로 상태](state-task.md) 상태의 상태 머신을 사용할 때의 동적 리소스에 대한 IAM 정책 예제입니다.

------
#### [ Run a Job (.sync) ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StopApplication",
               "emr-serverless:GetApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StopApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        }
    ]
}
```

------

#### DeleteApplication에 대한 IAM 정책 예시
<a name="emr-serverless-policy-deleteapp"></a>

**정적 리소스**  
다음은 DeleteApplication [Task 워크플로 상태](state-task.md) 상태의 상태 머신을 사용할 때의 정적 리소스에 대한 IAM 정책 예제입니다.

------
#### [ Run a Job (.sync) ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:DeleteApplication",
               "emr-serverless:GetApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:DeleteApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId"
            ]
        }
    ]
}
```

------

**동적 리소스**  
다음은 DeleteApplication [Task 워크플로 상태](state-task.md) 상태의 상태 머신을 사용할 때의 동적 리소스에 대한 IAM 정책 예제입니다.

------
#### [ Run a Job (.sync) ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:DeleteApplication",
               "emr-serverless:GetApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessApplicationRule"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:DeleteApplication"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        }
    ]
}
```

------

#### StartJobRun에 대한 IAM 정책 예시
<a name="emr-serverless-policy-startjobrun"></a>

**정적 리소스**  
다음은 StartJobRun [Task 워크플로 상태](state-task.md) 상태의 상태 머신을 사용할 때의 정적 리소스에 대한 IAM 정책 예제입니다.

------
#### [ Run a Job (.sync) ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StartJobRun"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::123456789012:role/jobExecutionRoleArn"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "emr-serverless.amazonaws.com"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "emr-serverless:GetJobRun",
                "emr-serverless:CancelJobRun"
            ],
            "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId/jobruns/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessJobRule"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StartJobRun"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::123456789012:role/jobExecutionRoleArn"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "emr-serverless.amazonaws.com"
                }
            }
        }
    ]
}
```

------

**동적 리소스**  
다음은 StartJobRun [Task 워크플로 상태](state-task.md) 상태의 상태 머신을 사용할 때의 동적 리소스에 대한 IAM 정책 예제입니다.

------
#### [ Run a Job (.sync) ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StartJobRun",
               "emr-serverless:GetJobRun",
               "emr-serverless:CancelJobRun"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::123456789012:role/jobExecutionRoleArn"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "emr-serverless.amazonaws.com"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessJobRule"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:StartJobRun"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::123456789012:role/jobExecutionRoleArn"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "emr-serverless.amazonaws.com"
                }
            }
        }
    ]
}
```

------

#### CancelJobRun에 대한 IAM 정책 예시
<a name="emr-serverless-policy-canceljobrun"></a>

**정적 리소스**  
다음은 CancelJobRun [Task 워크플로 상태](state-task.md) 상태의 상태 머신을 사용할 때의 정적 리소스에 대한 IAM 정책 예제입니다.

------
#### [ Run a Job (.sync) ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:CancelJobRun",
               "emr-serverless:GetJobRun"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId/jobruns/jobRunId"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessJobRule"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:CancelJobRun"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/applicationId/jobruns/jobRunId"
            ]
        }
    ]
}
```

------

**동적 리소스**  
다음은 CancelJobRun [Task 워크플로 상태](state-task.md) 상태의 상태 머신을 사용할 때의 동적 리소스에 대한 IAM 정책 예제입니다.

------
#### [ Run a Job (.sync) ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:CancelJobRun",
               "emr-serverless:GetJobRun"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForEMRServerlessJobRule"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
           "Effect": "Allow",
           "Action": [
               "emr-serverless:CancelJobRun"
            ],
           "Resource": [
                "arn:aws:emr-serverless:us-east-1:123456789012:/applications/*"
            ]
        }
    ]
}
```

------

# Step Functions를 사용하여 EventBridge 이벤트 추가
<a name="connect-eventbridge"></a>

Step Functions는 Amazon EventBridge와 통합할 수 있도록 서비스 통합 API를 제공합니다. Step Functions 워크플로에서 직접 사용자 지정 이벤트를 전송하여 이벤트 기반 애플리케이션을 빌드하는 방법을 알아봅니다.

Step Functions의 AWS서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

**최적화된 EventBridge 통합의 주요 기능**  
실행 ARN 및 상태 머신 ARN은 각 `PutEventsRequestEntry`의 `Resources` 필드에 자동으로 추가됩니다.
`PutEvents`의 응답에 0이 아닌 `FailedEntryCount`가 포함된 경우 `Task` 상태가 실패하고 `EventBridge.FailedEntry` 오류가 발생합니다.

 `PutEvents` API를 사용하려면 전송할 이벤트의 특정 패턴과 일치하는 EventBridge 규칙을 계정에 만들어야 합니다. 예를 들면, 다음과 같이 할 수 있습니다.
+ EventBridge 규칙과 일치하는 이벤트를 수신하고 출력하는 Lambda 함수를 계정에 만듭니다.
+  특정 이벤트 패턴과 일치하고 Lambda 함수를 대상으로 하는 기본 이벤트 버스 기반 EventBridge 규칙을 계정에 만듭니다.

 자세한 내용은 다음을 참조하세요.
+ EventBridge 사용 설명서의 [PutEvents와 함께 Amazon EventBridge 이벤트 추가](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-putevents.html)
+ 서비스 통합 패턴의 [작업 토큰을 사용하여 콜백 대기](connect-to-resource.md#connect-wait-token)

다음에는 사용자 지정 이벤트를 전송하는 `Task`가 포함됩니다.

```
{
  "Type": "Task",
  "Resource": "arn:aws:states:::events:putEvents",
  "Arguments": {
    "Entries": [
      {
        "Detail": {
          "Message": "MyMessage"
        },
        "DetailType": "MyDetailType",
        "EventBusName": "MyEventBus",
        "Source": "my.source"
      }
    ]
  },
  "End": true
}
```

**입력 또는 결과 데이터의 할당량**  
서비스 간에 데이터를 전송하거나 수신할 때 작업의 최대 입력 또는 결과는 UTF-8 인코딩 문자열로 256KiB의 데이터입니다. [상태 머신 실행과 관련된 할당량](service-quotas.md#service-limits-state-machine-executions)을(를) 참조하세요.

## 최적화된 EventBridge API
<a name="connect-eventbridge-apis"></a>

지원되는 EventBridge API 및 구문은 다음과 같습니다.
+ [https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEvents.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEvents.html)

## 오류 처리
<a name="connect-eventbridge-error"></a>

`PutEvents` API는 항목 배열을 입력으로 허용한 다음 결과 항목 배열을 반환합니다. `PutEvents` 작업이 성공하면 항목이 하나 이상 실패하더라도 `PutEvents`에서 HTTP 200 응답을 반환합니다. `PutEvents`에서 `FailedEntryCount` 필드에 실패한 항목 수를 반환합니다.

Step Functions는 `FailedEntryCount`가 0보다 큰지 여부를 확인합니다. 값이 0보다 크면 Step Functions에서 상태가 실패하고 `EventBridge.FailedEntry` 오류가 발생합니다. 이를 통해 실패한 항목이 있을 때 추가 상태를 사용하여 응답의 `FailedEntryCount`를 분석할 필요 없이 Task 상태에서 Step Functions의 기본 제공 오류 처리 기능을 사용하여 이 항목을 포착하거나 재시도할 수 있습니다.

**참고**  
멱등성을 구현했고 모든 항목을 안전하게 재시도할 수 있는 경우 Step Functions의 재시도 로직을 사용할 수 있습니다. Step Functions는 재시도하기 전에 `PutEvents` 입력 배열에서 성공한 항목을 제거하지 않습니다. 대신 원래 항목 배열을 사용하여 재시도합니다.

## EventBridge 호출을 위한 IAM 정책
<a name="eventbridge-iam"></a>

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

### `PutEvents`
<a name="eventbridge-iam-listconnections"></a>

*정적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "events:PutEvents"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:event-bus/my-project-eventbus"
            ],
            "Effect": "Allow"
        }
    ]
}
```

*동적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "events:PutEvents"
            ],
            "Resource": "arn:aws:events:*:*:event-bus/*"
        }
    ]
}
```

# Step Functions로 AWS Glue작업 시작
<a name="connect-glue"></a>

Step Functions를 사용하여 AWS Glue에서 작업 실행을 시작하는 방법을 알아봅니다. 이 페이지에서는 지원되는 API 작업을 나열하고 AWS Glue작업을 시작하기 위한 예제 `Task` 상태를 제공합니다.

Step Functions의 AWS서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

**최적화된 AWS Glue통합의 주요 기능**  
[작업 실행(.sync)](connect-to-resource.md#connect-sync) 통합 패턴을 사용할 수 있습니다.
`JobName` 필드는 요청에서 추출되어 응답에 삽입됩니다. 응답에는 보통 `JobRunID`만 포함됩니다.

다음은 AWS Glue작업을 시작하는 `Task` 상태를 포함합니다.

```
"Glue StartJobRun": {
      "Type": "Task",
      "Resource": "arn:aws:states:::glue:startJobRun.sync",
      "Arguments": {
        "JobName": "GlueJob-JTrRO5l98qMG"
      },
      "Next": "ValidateOutput"
    },
```

**Step Functions의 파라미터는 PascalCase로 표현됩니다.**  
기본 서비스 API가 API 작업 `startSyncExecution`과 같은 camelCase에 있더라도 `StateMachineArn`과 같은 파라미터를 PascalCase에 지정합니다.

## 최적화된 AWS GlueAPIs
<a name="connect-glue-api"></a>
+ [https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-runs.html#aws-glue-api-jobs-runs-StartJobRun](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-runs.html#aws-glue-api-jobs-runs-StartJobRun)

## 호출을 위한 IAM 정책AWS Glue
<a name="glue-iam"></a>

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

AWS Glue에는 리소스 기반 제어가 없습니다.

------
#### [ Run a Job (.sync) ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:StartJobRun",
                "glue:GetJobRun",
                "glue:GetJobRuns",
                "glue:BatchStopJobRun"
            ],
            "Resource": "*"
        }
    ]
}
```

------
#### [ Request Response and Callback (.waitForTaskToken) ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:StartJobRun"
            ],
            "Resource": "*"
        }
    ]
}
```

------

# Step Functions로 AWS Glue DataBrew 작업 시작
<a name="connect-databrew"></a>

Step Functions를 사용하여 분석 및 기계 학습 워크플로에 데이터 정리 및 데이터 정규화 단계를 추가하기 위해 DataBrew 통합을 사용하는 방법을 알아봅니다.

Step Functions의 AWS 서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

다음에는 요청-응답 DataBrew 작업을 시작하는 `Task` 상태가 포함됩니다.

```
"DataBrew StartJobRun": {
            "Type": "Task",
            "Resource": "arn:aws:states:::databrew:startJobRun",
            "Arguments": {
               "Name": "sample-proj-job-1"
            },
            "Next": "NEXT_STATE"
          },
```

다음에는 동기 DataBrew 작업을 시작하는 `Task` 상태가 포함됩니다.

```
"DataBrew StartJobRun": {
           "Type": "Task",
           "Resource": "arn:aws:states:::databrew:startJobRun.sync",
           "Arguments": {
              "Name": "sample-proj-job-1"
           },
           "Next": "NEXT_STATE"
          },
```

**Step Functions의 파라미터는 PascalCase로 표현됩니다.**  
기본 서비스 API가 API 작업 `startSyncExecution`과 같은 camelCase에 있더라도 `StateMachineArn`과 같은 파라미터를 PascalCase에 지정합니다.

## 지원되는 DataBrew API
<a name="connect-databrew-api"></a>
+ `[https://docs.aws.amazon.com/databrew/latest/dg/API_StartJobRun.html](https://docs.aws.amazon.com/databrew/latest/dg/API_StartJobRun.html)`

## DataBrew 호출을 위한 IAM 정책
<a name="databrew-iam"></a>

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions 생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

------
#### [ Run a Job (.sync) ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "databrew:startJobRun",
                "databrew:listJobRuns",
                "databrew:stopJobRun"
            ],
            "Resource": [
                "arn:aws:databrew:us-east-1:123456789012:job/*"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "databrew:startJobRun"
            ],
            "Resource": [
                "arn:aws:databrew:us-east-1:123456789012:job/*"
            ]
        }
    ]
}
```

------

# Step Functions를 사용하여 AWS Lambda함수 호출
<a name="connect-lambda"></a>

Step Functions를 사용하여 이벤트 기반 서버리스 애플리케이션의 일부로 Lambda 함수를 동기식 또는 비동기식으로 간접 호출하는 방법을 알아봅니다.

Step Functions의 AWS서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

**최적화된 Lambda 통합의 주요 기능**  
응답 `Payload` 필드는 이스케이프된 Json에서 Json으로 파싱됩니다.
Lambda 함수 내에서 예외가 발생하면 작업이 실패합니다. 실제 예제는 [Step Functions 상태 머신을 사용하여 오류 조건 처리](tutorial-handling-error-conditions.md) 섹션을 참조하세요.

## 최적화된 Lambda API
<a name="connect-lambda-api"></a>
+ [https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html)

## 워크플로 예시
<a name="connect-lambda-api-examples"></a>

다음에는 Lambda 함수를 간접적으로 호출하는 `Task` 상태가 포함됩니다.

```
{  
   "StartAt":"CallLambda",
   "States":{  
      "CallLambda":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::lambda:invoke",
         "Arguments":{  
            "FunctionName":"arn:aws:lambda:region:account-id:function:MyFunction"
         },
         "End":true
      }
   }
}
```

다음에는 [콜백](connect-to-resource.md#connect-wait-token) 서비스 통합 패턴을 구현하는 `Task` 상태가 포함됩니다.

```
{  
   "StartAt":"GetManualReview",
   "States":{  
      "GetManualReview":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::lambda:invoke.waitForTaskToken",
         "Arguments":{  
            "FunctionName":"arn:aws:lambda:region:account-id:function:get-model-review-decision",
            "Payload":{  
               "model":"{% $states.input.my-model %}",
               "TaskToken": "{% $states.context.Task.Token %}"
            },
            "Qualifier":"prod-v1"
         },
         "End":true
      }
   }
}
```

Lambda 함수를 간접적으로 호출하면 함수가 완료될 때까지 실행이 대기합니다. 콜백 작업으로 Lambda 함수를 간접적으로 호출하면 Lambda 함수가 실행을 완료하고 결과를 반환할 때까지 하트비트 제한 시간이 계산되지 않습니다. Lambda 함수가 실행되는 동안에는 하트비트 제한 시간이 적용되지 않습니다.

다음 예제와 같이 `InvocationType` 파라미터를 사용하여 Lambda를 비동기적으로 호출할 수도 있습니다.

```
{

  "Comment": "A Hello World example of the Amazon States Language using Pass states",
  "StartAt": "Hello",
  "States": {
    "Hello": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Arguments": {
        "FunctionName": "arn:aws:lambda:region:account-id:function:echo",
        "InvocationType": "Event"
      },
      "End": true
    }
  }
}
```

**참고**  
Lambda 함수의 비동기 호출의 경우 하트비트 제한 시간이 즉시 시작됩니다.

 `Task` 결과가 반환되면 함수 출력이 메타데이터 사전 내에서 중첩됩니다. 예제:

```
{

   "ExecutedVersion":"$LATEST",
   "Payload":"FUNCTION OUTPUT",
   "SdkHttpMetadata":{
      "HttpHeaders":{
         "Connection":"keep-alive",
         "Content-Length":"4",
         "Content-Type":"application/json",
         "Date":"Fri, 26 Mar 2021 07:42:02 GMT",
         "X-Amz-Executed-Version":"$LATEST",
         "x-amzn-Remapped-Content-Length":"0",
         "x-amzn-RequestId":"0101aa0101-1111-111a-aa55-1010aaa1010",
         "X-Amzn-Trace-Id":"root=1-1a1a000a2a2-fe0101aa10ab;sampled=0"
      },
      "HttpStatusCode":200
   },
   "SdkResponseMetadata":{
      "RequestId":"6b3bebdb-9251-453a-ae45-512d9e2bf4d3"
   },
   "StatusCode":200
}
```

## 직접 지정된 함수 리소스
<a name="w2aac33c40c13"></a>

또는 함수 ARN을 “리소스” 필드에 직접 지정하여 Lambda 함수를 간접적으로 호출할 수 있습니다. 이런 방식으로 Lambda 함수를 간접적으로 호출할 때는 `.waitForTaskToken`을 지정할 수 없으며 작업 결과에 함수 출력만 포함됩니다.

```
{  
   "StartAt":"CallFunction",
   "States":{  
      "CallFunction": {  
         "Type":"Task",
         "Resource":"arn:aws:lambda:region:account-id:function:HelloFunction",
         "End": true
      }
   }
}
```

이러한 형태의 통합을 사용하면 함수가 성공했지만 `FunctionError` 필드가 포함된 응답을 보낼 수 있습니다. 이 시나리오에서는 워크플로 작업이 실패합니다.

`Resource` 필드의 ARN에서 해당 옵션을 지정하여 특정 Lambda 함수 버전 또는 별칭을 간접적으로 호출할 수 있습니다. Lambda 설명서에서 다음을 참조하세요.
+ [AWS Lambda 버전 관리](https://docs.aws.amazon.com/lambda/latest/dg/versioning-intro.html)
+ [AWS Lambda별칭](https://docs.aws.amazon.com/lambda/latest/dg/aliases-intro.html)

## 호출을 위한 IAM 정책AWS Lambda
<a name="lambda-iam"></a>

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

다음 예제에서 `function1` 및를 호출하는 두 개의 AWS Lambda작업이 있는 상태 시스템에`function2`는 자동 생성된 정책에 두 함수에 대한 `lambda:Invoke` 권한이 포함되어 있습니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:us-east-1:123456789012:function:myFn1",
                "arn:aws:lambda:us-east-1:123456789012:function:myFn2"
            ]
        }
    ]
}
```

# Step Functions를 사용하여 AWS Elemental MediaConvert작업 생성
<a name="connect-mediaconvert"></a>

Step Functions를 사용하여 [https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobspost](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobspost) API를 사용하여 AWS Elemental MediaConvert작업을 생성하는 방법을 알아봅니다.

**Step Functions 및 MediaConvert를 사용한 실험**  
비디오 클립의 시작 부분에서 길이가 알려지지 않은 SMTPE 색상 막대를 감지하고 제거하는 워크플로에서 MediaConvert 최적화 통합을 사용하는 방법을 알아봅니다. 2024년 4월 12일 블로그 게시물 읽기:를 [https://aws.amazon.com/blogs/media/low-code-workflows-with-aws-elemental-mediaconvert/](https://aws.amazon.com/blogs/media/low-code-workflows-with-aws-elemental-mediaconvert/)

Step Functions의 AWS서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

**최적화된 MediaConvert 통합의 주요 기능**  
[작업 실행(.sync)](connect-to-resource.md#connect-sync) 및 [요청 및 응답](connect-to-resource.md#connect-default) 통합 패턴이 지원됩니다.
Step Functions는 MediaConvert 작업에 다음 사용자 지정 태그를 추가합니다. `ManagedByService: AWSStepFunctions` 
[작업 토큰을 사용하여 콜백 대기](connect-to-resource.md#connect-wait-token) 통합 패턴에 대한 구체적인 최적화는 없습니다.

다음은 MediaConvert 작업을 제출하고 완료를 기다리는 `Task` 상태를 포함합니다.

```
{
    "StartAt": "MediaConvert_CreateJob",
    "States": {
        "MediaConvert_CreateJob": {
        "Type": "Task",
        "Resource": "arn:aws:states:::mediaconvert:createJob.sync",
        "Arguments": {
            "Role": "arn:aws:iam::111122223333:role/Admin",
            "Settings": {
            "OutputGroups": [
                {
                "Outputs": [
                    {
                    "ContainerSettings": {
                        "Container": "MP4"
                    },
                    "VideoDescription": {
                        "CodecSettings": {
                        "Codec": "H_264",
                        "H264Settings": {
                            "MaxBitrate": 1000,
                            "RateControlMode": "QVBR",
                            "SceneChangeDetect": "TRANSITION_DETECTION"
                        }
                        }
                    },
                    "AudioDescriptions": [
                        {
                        "CodecSettings": {
                            "Codec": "AAC",
                            "AacSettings": {
                            "Bitrate": 96000,
                            "CodingMode": "CODING_MODE_2_0",
                            "SampleRate": 48000
                            }
                        }
                        }
                    ]
                    }
                ],
                "OutputGroupSettings": {
                    "Type": "FILE_GROUP_SETTINGS",
                    "FileGroupSettings": {
                    "Destination": "s3://amzn-s3-demo-destination-bucket/"
                    }
                }
                }
            ],
            "Inputs": [
                {
                "AudioSelectors": {
                    "Audio Selector 1": {
                    "DefaultSelection": "DEFAULT"
                    }
                },
                "FileInput": "s3://amzn-s3-demo-bucket/DOC-EXAMPLE-SOURCE_FILE"
                }
            ]
            }
        },
        "End": true
        }
    }
}
```

**Step Functions의 파라미터는 PascalCase로 표현됩니다.**  
기본 서비스 API가 API 작업 `startSyncExecution`과 같은 camelCase에 있더라도 `StateMachineArn`과 같은 파라미터를 PascalCase에 지정합니다.

## 최적화된 MediaConvert API
<a name="connect-mediaconvert-api"></a>
+ [https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobspost](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobspost)
  + [요청 구문](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-request-body-post-example)
  + 지원되는 파라미터:
    + [https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-prop-createjobrequest-role](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-prop-createjobrequest-role)(필수)
    + [https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-prop-createjobrequest-settings](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-prop-createjobrequest-settings)(필수)
    + [https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-model-createjobrequest](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-model-createjobrequest) (선택 사항)
  + [응답 구문](https://docs.aws.amazon.com/mediaconvert/latest/apireference/jobs.html#jobs-response-examples) - **CreateJobResponse 스키마** 참조

## 호출을 위한 IAM 정책AWS Elemental MediaConvert
<a name="mediaconvert-iam"></a>

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

`GetJob` 및 `CancelJob` 작업에 대한 IAM 정책은 `ManagedByService: AWSStepFunctions` 태그가 있는 작업에 대한 액세스만 허용하도록 범위가 지정됩니다.

**태그 기반 정책**  
자동 생성된 `ManagedByService: AWSStepFunctions` 태그를 수정하면 상태 머신 실행이 실패합니다.

------
#### [ Run a Job (.sync) ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "MediaConvertCreateJob",
            "Effect": "Allow",
            "Action": [
                "mediaconvert:CreateJob"
            ],
            "Resource": [
                "arn:aws:mediaconvert:us-east-1:123456789012:queues/*",
                "arn:aws:mediaconvert:us-east-1:123456789012:jobTemplates/*",
                "arn:aws:mediaconvert:us-east-1:123456789012:presets/*"
            ]
        },
        {
            "Sid": "MediaConvertManageJob",
            "Effect": "Allow",
            "Action": [
                "mediaconvert:GetJob",
                "mediaconvert:CancelJob"
            ],
            "Resource": "arn:aws:mediaconvert:us-east-1:123456789012:jobs/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/ManagedByService": "AWSStepFunctions"
                }
            }
        },
        {
            "Sid": "IamPassRole",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myRoleName"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "mediaconvert.amazonaws.com"
                    ]
                }
            }
        }, 
        {
            "Sid": "EventBridgeManageRule",
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForMediaConvertJobRule"
            ]
        }
    ]
}
```

------
#### [ Request Response ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "MediaConvertCreateJob",
            "Effect": "Allow",
            "Action": [
                "mediaconvert:CreateJob"
            ],
            "Resource": [
                "arn:aws:mediaconvert:us-east-1:123456789012:queues/*",
                "arn:aws:mediaconvert:us-east-1:123456789012:jobTemplates/*",
                "arn:aws:mediaconvert:us-east-1:123456789012:presets/*"
            ]
        },
        {
            "Sid": "IamPassRole",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myRoleName"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "mediaconvert.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

# Step Functions를 사용하여 Amazon SageMaker AI 작업 생성 및 관리
<a name="connect-sagemaker"></a>

Step Functions를 사용하여 SageMaker AI에서 작업을 생성하고 관리하는 방법을 알아봅니다. 이 페이지에는 지원되는 SageMaker AI API 작업이 나열되어 있으며 SageMaker AI 트랜스포밍, 훈련, 레이블 지정 및 처리 작업을 생성하는 예제 `Task` 상태가 나와 있습니다.

Step Functions의 AWS서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

**최적화된 SageMaker AI 통합의 주요 기능**  
[작업 실행(.sync)](connect-to-resource.md#connect-sync) 통합 패턴이 지원됩니다.
[요청 및 응답](connect-to-resource.md#connect-default) 통합 패턴에 대한 구체적인 최적화는 없습니다.
[작업 토큰을 사용하여 콜백 대기](connect-to-resource.md#connect-wait-token) 통합 패턴은 지원되지 않습니다.

## 최적화된 SageMaker AI API
<a name="connect-sagemaker-api"></a>
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpoint.html)
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpointConfig.html)
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateHyperParameterTuningJob.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateHyperParameterTuningJob.html) - `.sync` 통합 패턴을 지원합니다.
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateLabelingJob.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateLabelingJob.html) - `.sync` 통합 패턴을 지원합니다.
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateModel.html)
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateProcessingJob.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateProcessingJob.html) - `.sync` 통합 패턴을 지원합니다.
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTrainingJob.html) - `.sync` 통합 패턴을 지원합니다.
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTransformJob.html) - `.sync` 통합 패턴을 지원합니다.
+ [https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpoint.html)

**참고**  
AWS Step Functions는에 대한 정책을 자동으로 생성하지 않습니다`CreateTransformJob`. 생성된 역할에는 인라인 정책을 연결해야 합니다. 자세한 내용은 이 예제 IAM 정책([`CreateTrainingJob`](#sagemaker-iam-createtrainingjob))을 참조하세요.

## SageMaker AI 트랜스포밍 작업 예제
<a name="sagemaker-example-transform"></a>

다음에는 Amazon SageMaker AI 트랜스포밍 작업을 만들어 `DataSource` 및 `TransformOutput`에 대한 Amazon S3 위치를 지정하는 `Task` 상태가 포함됩니다.

```
{
"SageMaker CreateTransformJob": {
  "Type": "Task",
  "Resource": "arn:aws:states:::sagemaker:createTransformJob.sync",
  "Arguments": {
    "ModelName": "SageMakerCreateTransformJobModel-9iFBKsYti9vr",
    "TransformInput": {
      "CompressionType": "None",
      "ContentType": "text/csv",
      "DataSource": {
        "S3DataSource": {
          "S3DataType": "S3Prefix",
          "S3Uri": "s3://amzn-s3-demo-source-bucket1/TransformJobDataInput.txt"
        }
      }
    },
    "TransformOutput": {
      "S3OutputPath": "s3://amzn-s3-demo-source-bucket1/TransformJobOutputPath"
    },
    "TransformResources": {
      "InstanceCount": 1,
      "InstanceType": "ml.m4.xlarge"
    },
    "TransformJobName": "sfn-binary-classification-prediction"
  },
  "Next": "ValidateOutput"
},
```

## SageMaker AI 훈련 작업 예제
<a name="sagemaker-example-training"></a>

다음에는 Amazon SageMaker AI 훈련 작업을 만드는 `Task` 상태가 포함됩니다.

```
{  
   "SageMaker CreateTrainingJob":{  
      "Type":"Task",
      "Resource":"arn:aws:states:::sagemaker:createTrainingJob.sync",
      "Arguments":{  
         "TrainingJobName":"search-model",
         "ResourceConfig":{  
            "InstanceCount":4,
            "InstanceType":"ml.c4.8xlarge",
            "VolumeSizeInGB":20
         },
         "HyperParameters":{  
            "mode":"batch_skipgram",
            "epochs":"5",
            "min_count":"5",
            "sampling_threshold":"0.0001",
            "learning_rate":"0.025",
            "window_size":"5",
            "vector_dim":"300",
            "negative_samples":"5",
            "batch_size":"11"
         },
         "AlgorithmSpecification":{  
            "TrainingImage":"...",
            "TrainingInputMode":"File"
         },
         "OutputDataConfig":{  
            "S3OutputPath":"s3://amzn-s3-demo-destination-bucket1/doc-search/model"
         },
         "StoppingCondition":{  
            "MaxRuntimeInSeconds":100000
         },
         "RoleArn":"arn:aws:iam::account-id:role/docsearch-stepfunction-iam-role",
         "InputDataConfig":[  
            {  
               "ChannelName":"train",
               "DataSource":{  
                  "S3DataSource":{  
                     "S3DataType":"S3Prefix",
                     "S3Uri":"s3://amzn-s3-demo-destination-bucket1/doc-search/interim-data/training-data/",
                     "S3DataDistributionType":"FullyReplicated"
                  }
               }
            }
         ]
      },
      "Retry":[  
         {  
            "ErrorEquals":[  
               "SageMaker.AmazonSageMakerException"
            ],
            "IntervalSeconds":1,
            "MaxAttempts":100,
            "BackoffRate":1.1
         },
         {  
            "ErrorEquals":[  
               "SageMaker.ResourceLimitExceededException"
            ],
            "IntervalSeconds":60,
            "MaxAttempts":5000,
            "BackoffRate":1
         },
         {  
            "ErrorEquals":[  
               "States.Timeout"
            ],
            "IntervalSeconds":1,
            "MaxAttempts":5,
            "BackoffRate":1
         }
      ],
      "Catch":[  
         {  
            "ErrorEquals":[  
               "States.ALL"
            ],
            "Next":"Sagemaker Training Job Error"
         }
      ],
      "Next":"Delete Interim Data Job"
   }
}
```

## SageMaker AI 레이블 지정 작업 예제
<a name="sagemaker-example-labeling"></a>

다음에는 Amazon SageMaker AI 레이블 지정 작업을 만드는 `Task` 상태가 포함됩니다.

```
{
  "StartAt": "SageMaker CreateLabelingJob",
  "TimeoutSeconds": 3600,
  "States": {
    "SageMaker CreateLabelingJob": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sagemaker:createLabelingJob.sync",
      "Arguments": {
        "HumanTaskConfig": {
          "AnnotationConsolidationConfig": {
            "AnnotationConsolidationLambdaArn": "arn:aws:lambda:region:123456789012:function:ACS-TextMultiClass"
          },
          "NumberOfHumanWorkersPerDataObject": 1,
          "PreHumanTaskLambdaArn": "arn:aws:lambda:region:123456789012:function:PRE-TextMultiClass",
          "TaskDescription": "Classify the following text",
          "TaskKeywords": [
            "tc",
            "Labeling"
          ],
          "TaskTimeLimitInSeconds": 300,
          "TaskTitle": "Classify short bits of text",
          "UiConfig": {
            "UiTemplateS3Uri": "s3://amzn-s3-demo-bucket/TextClassification.template"
          },
          "WorkteamArn": "arn:aws:sagemaker:region:123456789012:workteam/private-crowd/ExampleTesting"
        },
        "InputConfig": {
          "DataAttributes": {
            "ContentClassifiers": [
              "FreeOfPersonallyIdentifiableInformation",
              "FreeOfAdultContent"
            ]
          },
          "DataSource": {
            "S3DataSource": {
              "ManifestS3Uri": "s3://amzn-s3-demo-bucket/manifest.json"
            }
          }
        },
        "LabelAttributeName": "Categories",
        "LabelCategoryConfigS3Uri": "s3://amzn-s3-demo-bucket/labelcategories.json",
        "LabelingJobName": "example-job-name",
        "OutputConfig": {
          "S3OutputPath": "s3://amzn-s3-demo-bucket/output"
        },
        "RoleArn": "arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole",
        "StoppingConditions": {
          "MaxHumanLabeledObjectCount": 10000,
          "MaxPercentageOfInputDatasetLabeled": 100
        }
      },
      "Next": "ValidateOutput"
    },
    "ValidateOutput": {
        "Type": "Choice",
        "Choices": [
            {
                "Next": "Success",
                "Condition": "{% $states.input.LabelingJobArn != '' %}"
            }
        ],
        "Default": "Fail"
        },
        "Success": {
            "Type": "Succeed"
        },
        "Fail": {
            "Type": "Fail",
            "Error": "InvalidOutput",
            "Cause": "Output is not what was expected. This could be due to a service outage or a misconfigured service integration."
        }
    }
}
```

## SageMaker AI 프로세싱 작업 예제
<a name="sagemaker-example-processing"></a>

다음에는 Amazon SageMaker AI 프로세싱 작업을 만드는 `Task` 상태가 포함됩니다.

```
{
  "StartAt": "SageMaker CreateProcessingJob Sync",
  "TimeoutSeconds": 3600,
  "States": {
    "SageMaker CreateProcessingJob Sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sagemaker:createProcessingJob.sync",
      "Arguments": {
        "AppSpecification": {
          "ImageUri": "737474898029.dkr.ecr.sa-east-1.amazonaws.com/sagemaker-scikit-learn:0.20.0-cpu-py3"
        },
        "ProcessingResources": {
          "ClusterConfig": {
            "InstanceCount": 1,
            "InstanceType": "ml.t3.medium",
            "VolumeSizeInGB": 10
          }
        },
        "RoleArn": "arn:aws:iam::account-id:role/SM-003-CreateProcessingJobAPIExecutionRole",
        "ProcessingJobName.$": "$.id"
      },
      "Next": "ValidateOutput"
    },
    "ValidateOutput": {
      "Type": "Choice",
      "Choices": [
        {
          "Not": {
            "Variable": "$.ProcessingJobArn",
            "StringEquals": ""
          },
          "Next": "Succeed"
        }
      ],
      "Default": "Fail"
    },
    "Succeed": {
      "Type": "Succeed"
    },
    "Fail": {
      "Type": "Fail",
      "Error": "InvalidConnectorOutput",
      "Cause": "Connector output is not what was expected. This could be due to a service outage or a misconfigured connector."
    }
  }
}
```

## Amazon SageMaker AI 직접 호출을 위한 IAM 정책
<a name="sagemaker-iam"></a>

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

**참고**  
다음 예제의 경우 `roleArn`은 SageMaker AI에서 ML 컴퓨팅 인스턴스 배포 또는 배치 변형 작업에 대한 모델 아티팩트와 Docker 이미지에 액세스하는 데 사용하는 IAM 역할의 Amazon 리소스 이름(ARN)을 참조합니다. 자세한 내용은 [Amazon SageMaker 역할](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html) 단원을 참조하십시오.

### `CreateTrainingJob`
<a name="sagemaker-iam-createtrainingjob"></a>

*정적 리소스*

------
#### [ Run a Job (.sync) ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateTrainingJob",
        "sagemaker:DescribeTrainingJob",
        "sagemaker:StopTrainingJob"
      ],
      "Resource": [
        "arn:aws:sagemaker:us-east-1:123456789012:training-job/myJobName*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:ListTags",
        "sagemaker:AddTags"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/MyExampleRole"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "sagemaker.amazonaws.com"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "events:PutTargets",
        "events:PutRule",
        "events:DescribeRule"
      ],
      "Resource": [
        "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForSageMakerTrainingJobsRule"
      ]
    }
  ]
}
```

------
#### [ Request Response and Callback (.waitForTaskToken) ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateTrainingJob"
      ],
      "Resource": [
        "arn:aws:sagemaker:us-east-1:123456789012:training-job/myJobName*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:ListTags",
        "sagemaker:AddTags"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/MyExampleRole"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "sagemaker.amazonaws.com"
        }
      }
    }
  ]
}
```

------

*동적 리소스*

------
#### [ .sync or .waitForTaskToken ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateTrainingJob",
        "sagemaker:DescribeTrainingJob",
        "sagemaker:StopTrainingJob"
      ],
      "Resource": [
        "arn:aws:sagemaker:us-east-1:123456789012:training-job/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:ListTags",
        "sagemaker:AddTags"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/MyExampleRole"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "sagemaker.amazonaws.com"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "events:PutTargets",
        "events:PutRule",
        "events:DescribeRule"
      ],
      "Resource": [
        "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForSageMakerTrainingJobsRule"
      ]
    }
  ]
}
```

------
#### [ Request Response and Callback (.waitForTaskToken) ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateTrainingJob"
      ],
      "Resource": [
        "arn:aws:sagemaker:us-east-1:123456789012:training-job/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:ListTags",
        "sagemaker:AddTags"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/MyExampleRole"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "sagemaker.amazonaws.com"
        }
      }
    }
  ]
}
```

------

### `CreateTransformJob`
<a name="sagemaker-iam-createtransformjob"></a>

**참고**  
AWS Step Functions는 SageMaker AI와 통합되는 상태 시스템을 생성할 `CreateTransformJob` 때에 대한 정책을 자동으로 생성하지 않습니다. 다음 IAM 예제 중 하나를 기반으로 만든 역할에 인라인 정책을 연결해야 합니다.

*정적 리소스*

------
#### [ Run a Job (.sync) ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateTransformJob",
        "sagemaker:DescribeTransformJob",
        "sagemaker:StopTransformJob"
      ],
      "Resource": [
        "arn:aws:sagemaker:us-east-1:123456789012:transform-job/myJobName*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:ListTags",
        "sagemaker:AddTags"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/MyExampleRole"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "sagemaker.amazonaws.com"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "events:PutTargets",
        "events:PutRule",
        "events:DescribeRule"
      ],
      "Resource": [
        "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForSageMakerTransformJobsRule"
      ]
    }
  ]
}
```

------
#### [ Request Response and Callback (.waitForTaskToken) ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateTransformJob"
      ],
      "Resource": [
        "arn:aws:sagemaker:us-east-1:123456789012:transform-job/myJobName*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:ListTags",
        "sagemaker:AddTags"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/MyExampleRole"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "sagemaker.amazonaws.com"
        }
      }
    }
  ]
}
```

------

*동적 리소스*

------
#### [ Run a Job (.sync) ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateTransformJob",
        "sagemaker:DescribeTransformJob",
        "sagemaker:StopTransformJob"
      ],
      "Resource": [
        "arn:aws:sagemaker:us-east-1:123456789012:transform-job/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:ListTags",
        "sagemaker:AddTags"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/MyExampleRole"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "sagemaker.amazonaws.com"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "events:PutTargets",
        "events:PutRule",
        "events:DescribeRule"
      ],
      "Resource": [
        "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForSageMakerTransformJobsRule"
      ]
    }
  ]
}
```

------
#### [ Request Response and Callback (.waitForTaskToken) ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateTransformJob"
      ],
      "Resource": [
        "arn:aws:sagemaker:us-east-1:123456789012:transform-job/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:ListTags",
        "sagemaker:AddTags"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/MyExampleRole"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "sagemaker.amazonaws.com"
        }
      }
    }
  ]
}
```

------

# Step Functions를 사용하여 Amazon SNS 주제에 메시지 게시
<a name="connect-sns"></a>

Step Functions를 사용하여 Amazon SNS 주제에 메시지를 게시하는 방법을 알아봅니다. 이 페이지에는 지원되는 Amazon SNS API 작업이 나열되어 있으며 Amazon SNS에 메시지를 게시하는 예제 `Task` 상태가 나와 있습니다.

Step Functions의 AWS서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

**최적화된 Amazon SNS 통합의 주요 기능**  
[요청 및 응답](connect-to-resource.md#connect-default) 또는 [작업 토큰을 사용하여 콜백 대기](connect-to-resource.md#connect-wait-token) 통합 패턴에 대한 구체적인 최적화는 없습니다.

다음에는 Amazon Simple Notification Service(SNS) 주제에 게시하는 `Task` 상태가 포함됩니다.

```
{
 "StartAt": "Publish to SNS",
 "States": {
   "Publish to SNS": {
     "Type": "Task",
     "Resource": "arn:aws:states:::sns:publish",
     "Arguments": {
       "TopicArn": "arn:aws:sns:region:account-id:myTopic",
       "Message": "{% states.input.message %}",
       "MessageAttributes": {
         "my_attribute_no_1": {
           "DataType": "String",
           "StringValue": "value of my_attribute_no_1"
         },
         "my_attribute_no_2": {
           "DataType": "String",
           "StringValue": "value of my_attribute_no_2"
         }
       }
     },
     "End": true
    }
  }
}
```

**동적 값 전달**. 위 예제를 수정하여 이 JSON 페이로드의 속성을 동적으로 전달할 수 있습니다.

```
{
  "message": "Hello world",
  "SNSDetails": {
    "attribute1": "some value",
    "attribute2": "some other value",
  }
}
```

다음은 `StringValue` 필드에 JSONata 표현식을 사용하여 값을 설정합니다.

```
"MessageAttributes": {
  "my_attribute_no_1": {
      "DataType": "String",
      "StringValue": "{% $states.input.SNSDetails.attribute1 %}"
  },
  "my_attribute_no_2": {
      "DataType": "String",
      "StringValue": "{% $states.input.SNSDetails.attribute2 %}"
  }
```

다음에는 Amazon SNS 주제에 게시된 다음 작업 토큰이 반환될 때까지 기다리는 `Task` 상태가 포함됩니다. [작업 토큰을 사용하여 콜백 대기](connect-to-resource.md#connect-wait-token)을(를) 참조하세요.

```
{  
   "StartAt":"Send message to SNS",
   "States":{  
      "Send message to SNS":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::sns:publish.waitForTaskToken",
         "Arguments":{  
            "TopicArn":"arn:aws:sns:region:account-id:myTopic",
            "Message":{  
               "Input":"{% states.input.message %}",
               "TaskToken": "{% $states.context.Task.Token %}"
            }
         },
         "End":true
      }
   }
}
```

## 최적화된 Amazon SNS API
<a name="connect-sns-api"></a>
+ [https://docs.aws.amazon.com/sns/latest/api/API_Publish.html](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html)

**Step Functions의 파라미터는 PascalCase로 표현됩니다.**  
기본 서비스 API가 API 작업 `startSyncExecution`과 같은 camelCase에 있더라도 `StateMachineArn`과 같은 파라미터를 PascalCase에 지정합니다.

**입력 또는 결과 데이터의 할당량**  
서비스 간에 데이터를 전송하거나 수신할 때 작업의 최대 입력 또는 결과는 UTF-8 인코딩 문자열로 256KiB의 데이터입니다. [상태 머신 실행과 관련된 할당량](service-quotas.md#service-limits-state-machine-executions)을(를) 참조하세요.

## Amazon SNS 호출을 위한 IAM 정책
<a name="sns-iam"></a>

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

*정적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sns:Publish"
            ],
            "Resource": [
                "arn:aws:sns:us-east-1:123456789012:myTopicName"
            ]
        }
    ]
}
```

*Path 기반 리소스 또는 `TargetArn`이나 `PhoneNumber`로 게시:*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sns:Publish"
            ],
            "Resource": "*"
        }
    ]
}
```

# Step Functions를 사용하여 Amazon SQS 대기열로 메시지 전송
<a name="connect-sqs"></a>

Step Functions 워크플로에 대한 다음 Amazon SQS API 작업과 예제 `Task` 상태 코드를 사용하여 Amazon SQS 대기열로 메시지를 보낼 수 있습니다.

Step Functions의 AWS 서비스와 통합하는 방법에 대한 자세한 내용은 [ 서비스 통합](integrate-services.md) 및 섹션을 참조하세요[Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md).

Amazon SQS에서 메시지를 수신하는 방법에 대한 자세한 내용은 *Amazon Simple Queue Service 개발자 안내서*의 [메시지 수신 및 삭제](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/step-receive-delete-message.html)를 참조하세요.

다음 샘플에는 선택적 **MessageAttributes**를 통해 Amazon Simple Queue Service(Amazon SQS) 메시지를 전송하는 `Task` 상태(JSONata)가 포함됩니다.

```
{
 "StartAt": "Send to SQS",
 "States": {
   "Send to SQS": {
     "Type": "Task",
     "Resource": "arn:aws:states:::sqs:sendMessage",
     "Arguments": {
       "QueueUrl": "https://sqs.us-east-1.amazonaws.com/account-id/myQueue",
       "MessageBody": "{% $states.input.message %}",
       "MessageAttributes": {
         "my_attribute_no_1": {
           "DataType": "String",
           "StringValue": "attribute1"
         },
         "my_attribute_no_2": {
           "DataType": "String",
           "StringValue": "attribute2"
         }
       }
     },
     "End": true
    }
  }
}
```

다음 상태 머신에는 Amazon SQS 대기열에 게시한 다음 작업 토큰이 반환될 때까지 기다리는 `Task` 상태가 포함됩니다. [작업 토큰을 사용하여 콜백 대기](connect-to-resource.md#connect-wait-token)을(를) 참조하세요.

```
{  
   "StartAt":"Send message to SQS",
   "States":{  
      "Send message to SQS":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::sqs:sendMessage.waitForTaskToken",
         "Arguments":{  
            "QueueUrl":"https://sqs.us-east-1.amazonaws.com/account-id/myQueue",
            "MessageBody":{  
               "Input" : "{% $states.input.message %}",
               "MyTaskToken" : "{% $states.context.Task.Token %}"
            }
         },
         "End":true
      }
   }
}
```

## 최적화된 Amazon SQS API
<a name="connect-sqs-api"></a>
+ [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)

**Step Functions의 파라미터는 PascalCase로 표현됩니다.**  
기본 서비스 API가 API 작업 `startSyncExecution`과 같은 camelCase에 있더라도 `StateMachineArn`과 같은 파라미터를 PascalCase에 지정합니다.

**입력 또는 결과 데이터의 할당량**  
서비스 간에 데이터를 전송하거나 수신할 때 작업의 최대 입력 또는 결과는 UTF-8 인코딩 문자열로 256KiB의 데이터입니다. [상태 머신 실행과 관련된 할당량](service-quotas.md#service-limits-state-machine-executions)을(를) 참조하세요.

## Amazon SQS 호출을 위한 IAM 정책
<a name="sqs-iam"></a>

다음 예제 템플릿은가 상태 시스템 정의의 리소스를 기반으로 IAM 정책을 AWS Step Functions 생성하는 방법을 보여줍니다. 자세한 내용은 [Step Functions가 통합 서비스용 IAM 정책을 생성하는 방법](service-integration-iam-templates.md) 및 [Step Functions에서 서비스 통합 패턴 검색](connect-to-resource.md) 섹션을 참조하세요.

*정적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sqs:SendMessage"
            ],
            "Resource": [
                "arn:aws:sqs:us-east-1:123456789012:myQueueName"
            ]
        }
    ]
}
```

*동적 리소스*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sqs:SendMessage"
            ],
            "Resource": "*"
        }
    ]
}
```

# 실행 중인 실행에서 새 AWS Step Functions 상태 시스템 시작
<a name="connect-stepfunctions"></a>

Step Functions는 서비스 통합으로 자체 API와 통합됩니다. Step Functions를 사용하여 진행 중인 실행의 태스크 상태에서 직접 상태 머신의 새로운 실행을 시작하는 방법을 알아봅니다. 새 워크플로를 작성할 때 기본 워크플로의 복잡성을 줄이고 공통 프로세스를 재사용하려면 [중첩된 워크플로 실행](concepts-nested-workflows.md)을 사용하십시오.

**최적화된 Step Functions 통합의 주요 기능**  
[작업 실행(.sync)](connect-to-resource.md#connect-sync) 통합 패턴을 사용할 수 있습니다.

자세한 내용은 다음을 참조하세요.
+ [작업에서 시작](concepts-nested-workflows.md)
+ [ 서비스 통합](integrate-services.md)
+ [Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md)

## 최적화된 Step Functions API
<a name="connect-stepfunctions-api"></a>
+ [https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)

## 워크플로 예시
<a name="connect-stepfunctions-api-examples"></a>

다음은 다른 상태 머신의 실행을 시작하고 완료될 때까지 기다리는 `Task` 상태를 포함합니다.

```
{  
   "Type":"Task",
   "Resource":"arn:aws:states:::states:startExecution.sync:2",
   "Arguments":{  
      "Input":{
        "Comment": "Hello world!"
       },
      "StateMachineArn":"arn:aws:states:region:account-id:stateMachine:HelloWorld",
      "Name":"ExecutionName"
   },
   "End":true
}
```

다음은 다른 상태 머신의 실행을 시작하는 `Task` 상태를 포함합니다.

```
{  
   "Type":"Task",
   "Resource":"arn:aws:states:::states:startExecution",
   "Arguments":{  
      "Input":{
        "Comment": "Hello world!"
       },
      "StateMachineArn":"arn:aws:states:region:account-id:stateMachine:HelloWorld",
      "Name":"ExecutionName"
   },
   "End":true
}
```

다음에는 [콜백](connect-to-resource.md#connect-wait-token) 서비스 통합 패턴을 구현하는 `Task` 상태가 포함됩니다.

```
{ 
   "Type":"Task",
   "Resource":"arn:aws:states:::states:startExecution.waitForTaskToken",
   "Arguments":{ 
      "Input":{
        "Comment": "Hello world!",
        "token": "{% $states.context.Task.Token %}"
       },
      "StateMachineArn":"arn:aws:states:region:account-id:stateMachine:HelloWorld",
      "Name":"ExecutionName"
   },
   "End":true
}
```

중첩된 워크플로 실행을 시작한 상위 실행과 연결하려면 [컨텍스트 객체](input-output-contextobject.md)에서 가져온 실행 ID를 포함하는 특수하게 이름이 지정된 파라미터를 전달하세요. 중첩 실행을 시작할 때 `AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID`라는 매개 변수를 사용하십시오. 실행 ID를 전달하고를 사용하여 컨텍스트 객체의 ID를 참조합니다`$states.context.Execution.Id`. 자세한 내용은 [컨텍스트 객체 액세스](input-output-contextobject.md#contextobject-access) 단원을 참조하십시오.

```
{  
   "Type":"Task",
   "Resource":"arn:aws:states:::states:startExecution.sync",
   "Arguments":{  
      "Input":{
        "Comment": "Hello world!",
        "AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID": "{% $states.context.Execution.Id %}"
       },
      "StateMachineArn":"arn:aws:states:region:account-id:stateMachine:HelloWorld",
      "Name":"ExecutionName"
   },
   "End":true
}
```

 중첩된 상태 머신은 다음을 반환합니다.


| Resource | 출력 | 
| --- | --- | 
| startExecution.sync | 문자열 | 
| startExecution.sync:2 | JSON | 

둘 다 중첩된 상태 머신이 완료될 때까지 기다리지만, 다른 `Output` 형식을 반환합니다. 예를 들어 `{ "MyKey": "MyValue" }` 객체를 반환하는 Lambda 함수를 만드는 경우 다음과 같은 응답을 얻습니다.

startExecution.sync의 경우:

```
{
   <other fields>
   "Output": "{ \"MyKey\": \"MyValue\" }" 
}
```

startExecution.sync:2의 경우:

```
{
   <other fields> 
   "Output": {
      "MyKey": "MyValue"
   }
}
```

### 중첩된 상태 머신에 대한 IAM 권한 구성
<a name="nested-stepfunctions-iam-permissions"></a>

상위 상태 머신은 폴링과 이벤트를 사용하여 하위 상태 머신에서 실행을 완료했는지 확인합니다. 폴링에는 `states:DescribeExecution`에 대한 권한이 필요한 반면 EventBridge를 통해 Step Functions로 전송된 이벤트에는`events:PutTargets`, `events:PutRule` 및 `events:DescribeRule`에 대한 권한이 필요합니다. IAM 역할에서 이러한 권한이 누락되면 상위 상태 머신에서 하위 상태 머신 실행 완료를 인식할 때까지 지연이 발생할 수 있습니다.

단일 중첩 워크플로 실행을 위해 `StartExecution`을 직접적으로 호출하는 상태 머신의 경우 해당 상태 머신에 대한 권한을 제한하는 IAM 정책을 사용합니다.

## 중첩된 Step Functions 워크플로 호출을 위한 IAM 정책
<a name="stepfunctions-iam"></a>

단일 중첩 워크플로 실행을 위해 `StartExecution`을 직접적으로 호출하는 상태 머신의 경우 해당 상태 머신에 대한 권한을 제한하는 IAM 정책을 사용합니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "states:StartExecution"
            ],
            "Resource": [
                "arn:aws:states:us-east-1:123456789012:stateMachine:myStateMachineName"
            ]
        }
    ]
}
```

자세한 내용은 다음을 참조하세요.
+ [Step Functions에서 서비스 통합](integrate-services.md)
+ [Step Functions의 서비스 API에 파라미터 전달](connect-parameters.md)
+ [실행 중인 실행에서 새 AWS Step Functions 상태 시스템 시작](#connect-stepfunctions)

------
#### [ Synchronous ]<a name="sync-async-iam-policies"></a>

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "states:StartExecution"
            ],
            "Resource": [
                "arn:aws:states:us-east-1:123456789012:stateMachine:stateMachineName"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "states:DescribeExecution",
                "states:StopExecution"
            ],
            "Resource": [
               "arn:aws:states:us-east-1:123456789012:execution:myStateMachineName:*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "events:PutTargets",
                "events:PutRule",
                "events:DescribeRule"
            ],
            "Resource": [
               "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventsForStepFunctionsExecutionRule"
            ]
        }
    ]
}
```

------
#### [ Asynchronous ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "states:StartExecution"
            ],
            "Resource": [
                "arn:aws:states:us-east-1:123456789012:stateMachine:myStateMachineName"
            ]
        }
    ]
}
```

------

**ARN 유형 필요**  
**동기식** 정책에서 `states:StartExecution`에는 상태 머신 ARN이 필요한 반면 `states:DescribeExecution` 및 `states:StopExecution`에는 실행 ARN이 필요합니다.  
실수로 세 작업을 모두 결합한 경우 JSON은 유효하지만 IAM 정책은 올바르지 않습니다. 정책이 올바르지 않으면 워크플로 실행 중에 워크플로 중단 및/또는 액세스 문제가 발생할 수 있습니다.

중첩된 워크플로 실행에 대한 자세한 내용은 [Step Functions의 작업 상태에서 워크플로 실행 시작](concepts-nested-workflows.md) 단원을 참조하십시오.