

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 支援和取代的 Apache Flink 版本
<a name="release-version-list"></a>

本主題包含 Managed Service for Apache Flink 中 Apache Flink 支援版本的相關資訊。本主題也列出每個版本中支援的 Apache Flink 功能。

**注意**  
如果您使用的是已棄用的 Apache Flink 版本，建議您使用 Managed Service for Apache Flink 中的 [針對 Apache Flink 使用就地版本升級](how-in-place-version-upgrades.md)功能，將應用程式升級至最新的支援 Flink 版本。


| Apache Flink 版本 | 狀態 - Amazon Managed Service for Apache Flink | 狀態 - Apache Flink 社群 | 連結 | 注意 | 
| --- | --- | --- | --- | --- | 
| 2.2.0 | 支援 | 支援 | [Amazon Managed Service for Apache Flink 2.2](flink-2-2.md) | 這是具有重大變更的主要版本。在繼續[中斷變更和棄用](flink-2-2.md#flink-2-2-breaking-changes)之前，請參閱 。 | 
| 1.20.0 | 支援 | 支援 | [Amazon Managed Service for Apache Flink 1.20](flink-1-20.md) |  | 
| 1.19.1 | 支援 | 支援 | [Amazon Managed Service for Apache Flink 1.19](flink-1-19.md) |  | 
| 1.18.1 | 支援 | 不支援 | [Amazon Managed Service for Apache Flink 1.18](flink-1-18.md) |  | 
| 1.15.2 | 支援 | 不支援 | [Amazon Managed Service for Apache Flink 1.15](flink-1-15-2.md) |  | 
| 1.13.1 | 棄用 | 不支援 | [入門：Flink 1.13.2](earlier.md#getting-started-1-13) | Amazon Managed Service for Apache Flink 中對此版本的支援將於 2025 年 10 月 16 日結束。 | 
| 1.11.1 | 棄用 | 不支援 | [Managed Service for Apache Flink 的早期版本資訊](earlier.md) （自 2025 年 2 月起不支援此版本） |  我們計劃結束對 Amazon Managed Service for Apache Flink 中 Apache Flink 1.6、1.8 和 1.11 版的支援。 從 2025 年 7 月 14 日起，我們會將使用這些版本的應用程式置於 READY 狀態。 從 2025 年 7 月 28 日起，您將無法使用這些版本啟動應用程式。 我們建議您現在立即使用 Amazon Managed Service for Apache Flink 中的就地版本升級功能，將應用程式升級至 Flink 1.20 版。如需詳細資訊，請參閱[針對 Apache Flink 使用就地版本升級](how-in-place-version-upgrades.md)。  | 
| 1.8.2 | 棄用 | 不支援 | [Managed Service for Apache Flink 的早期版本資訊](earlier.md) （自 2025 年 2 月起不支援此版本） |  我們計劃結束對 Amazon Managed Service for Apache Flink 中 Apache Flink 1.6、1.8 和 1.11 版的支援。 從 2025 年 7 月 14 日起，我們會將使用這些版本的應用程式置於 READY 狀態。 從 2025 年 7 月 28 日起，您將無法使用這些版本啟動應用程式。 我們建議您現在立即使用 Amazon Managed Service for Apache Flink 中的就地版本升級功能，將應用程式升級至 Flink 1.20 版。如需詳細資訊，請參閱[針對 Apache Flink 使用就地版本升級](how-in-place-version-upgrades.md)。 | 
| 1.6.2 | 棄用 | 不支援 | [Managed Service for Apache Flink 的早期版本資訊](earlier.md) （自 2025 年 2 月起不支援此版本） |  我們計劃結束對 Amazon Managed Service for Apache Flink 中 Apache Flink 1.6、1.8 和 1.11 版的支援。 從 2025 年 7 月 14 日起，我們會將使用這些版本的應用程式置於 READY 狀態。 從 2025 年 7 月 28 日起，您將無法使用這些版本啟動應用程式。 我們建議您現在立即使用 Amazon Managed Service for Apache Flink 中的就地版本升級功能，將應用程式升級至 Flink 1.20 版。如需詳細資訊，請參閱[針對 Apache Flink 使用就地版本升級](how-in-place-version-upgrades.md)。  | 

**Topics**
+ [Amazon Managed Service for Apache Flink 2.2](flink-2-2.md)
+ [Amazon Managed Service for Apache Flink 1.20](flink-1-20.md)
+ [Amazon Managed Service for Apache Flink 1.19](flink-1-19.md)
+ [Amazon Managed Service for Apache Flink 1.18](flink-1-18.md)
+ [Amazon Managed Service for Apache Flink 1.15](flink-1-15-2.md)
+ [Managed Service for Apache Flink 的早期版本資訊](earlier.md)

# Amazon Managed Service for Apache Flink 2.2
<a name="flink-2-2"></a>

Amazon Managed Service for Apache Flink 現在支援 Apache Flink 2.2 版。這是服務的第一個主要版本升級。此頁面涵蓋 Flink 2.2 中介紹的功能，以及從 Flink 1.x 升級的重要考量。

**注意**  
Flink 2.2 引入了需要仔細規劃的重大變更。從 1.x 升級[Flink 2.2 升級的狀態相容性指南](state-compatibility.md)之前，請先檢閱以下和 的重大變更和棄用的完整清單。

## Amazon Managed Service for Apache Flink 2.2 的新功能
<a name="flink-2-2-whats-new"></a>

Amazon Managed Service for Apache Flink 2.2 引入可能在升級時破壞現有應用程式的行為變更。與下一節的 Flink API 變更一起仔細檢閱這些變更。

**程式設計組態處理**
+ 當客戶嘗試透過 `env.getConfig().set()`或類似 APIs.2 現在會報告例外狀況。請參閱 [程式設計 Flink 組態屬性](programmatic-configuration.md)。
+ 客戶仍然可以透過支援票證請求變更特定組態 （請參閱[可修改的設定](https://docs.aws.amazon.com/managed-flink/latest/java/reference-modifiable-settings.html))

**指標移除**
+ 指標`fullRestarts`已在 Flink 2.2 中移除。請改用 `numRestarts` 指標。
+ 已在 Flink 連接器 `bytesRequestedPerFetch` 6.0.0 版中移除 KDS AWS 連接器的指標 （僅限與 Flink 2.2 相容的連接器版本）。
+ `uptime` 和 `downtime`指標在 Flink 2.2 中都標示為已棄用，很快就會移除。`uptime` 將 取代為新的指標 `runningTime`。`downtime` 以一或多個 `restartingTime`、 `cancellingTime`和 取代 `failingTime`。
+ 如需支援指標的完整清單，請參閱[指標和維度頁面](https://docs.aws.amazon.com/managed-flink/latest/java/metrics-dimensions.html)。

**封鎖的非憑證 IMDS 呼叫**
+ 這些允許的端點由 AWS SDK 的 **DefaultCredentialsProvider** (`/latest/meta-data/iam/security-credentials/`) 和 **DefaultAwsRegionProviderChain** (`/latest/dynamic/instance-identity/document`) 使用，以自動設定應用程式的登入資料和區域。
+ 使用依賴非憑證 IMDS 呼叫 （例如 `EC2MetadataUtils.getInstanceId()`、`EC2MetadataUtils.getLocalHostName()`、 `EC2MetadataUtils.getInstanceType()`或 `EC2MetadataUtils.getAvailabilityZone()`) 的 AWS 開發套件函數的應用程式，在嘗試這些呼叫時會收到 HTTP 4xx 錯誤。
+ 如果您的應用程式將 IMDS 用於執行個體中繼資料或允許路徑以外的其他資訊，請重構程式碼以改用環境變數或應用程式組態。

**唯讀根檔案系統**
+ 為了提高安全性，`/tmp`其中 以外的任何相依性都是預設 flink 工作目錄，將導致：`java.io.FileNotFoundException: /{path}/{filename} (Read-only file system)`。
+ 檔案系統相依性可以直接來自您的程式碼，也可以間接來自您的相依性中包含的程式庫。覆寫程式碼`/tmp/`中 的直接檔案系統相依性。對於來自程式庫的間接檔案系統相依性，請使用程式庫組態覆寫將檔案系統操作重新導向至 `/tmp/`。

## 中斷變更和棄用
<a name="flink-2-2-breaking-changes"></a>

以下是 Managed Service for Apache Flink 2.2 中引進的重大變更和棄用摘要。如需介紹這些重大變更的 [Apache Flink 2.0 完整版本備註，請參閱 Apache Flink 2.0 版本備註](https://nightlies.apache.org/flink/flink-docs-stable/release-notes/flink-2.0/)。

**DataSet API 已移除**
+ 用於批次處理的舊版 DataSet API 已在 Flink 2.0\$1 中完全移除。所有批次處理現在必須使用統一的 DataStream API。
+ 使用 DataSet API 的應用程式必須先遷移至 DataStream API，才能升級。請參閱 [ DataSet 至 DataStream 轉換的 Apache Flink 遷移指南](https://nightlies.apache.org/flink/flink-docs-release-1.20/docs/dev/datastream/dataset_migration/) 

**Java 11 和 Python 3.8 已移除**
+ Java 11 支援完全移除；Java 17 是預設和建議的執行時間。
+ Python 3.8 支援已移除；Python 3.12 現在為預設值。

**已移除舊版連接器類別**
+ 舊版 `SourceFunction`和 `SinkFunction` 界面已由新的統一來源 (FLIP-27) 和接收器 (FLIP-143) APIs 取代，可更好地支援受限/未受限的雙重性、改善檢查點協調，以及更簡潔的程式設計模型。
+ 對於 Kinesis Data Streams，請使用`KinesisStreamsSink`來自 的 `KinesisStreamsSource`和 `flink-connector-aws-kinesis-streams:6.0.0-2.0`。

**已移除 Scala API**
+ Flink Scala API 已移除。Flink 的 Java API 現在是 JVM 型應用程式的單一支援 API。
+ 如果您的應用程式是以 Scala 撰寫，您仍然可以使用來自 Scala 程式碼的 Flink 的 Java API，主要變更是 Scala 特定的包裝函式和隱含轉換不再可用。如需更新 Scala 應用程式的詳細資訊，請參閱[升級應用程式和 Flink 版本](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/ops/upgrading/)。

**狀態相容性考量事項**
+ 從 2.24 版升級至 5.6 版的 Kryo 序列化程式可能會導致狀態相容性問題。
+ 具有集合 (`HashMap`、`ArrayList`、`HashSet`) POJOs 可能有狀態相容性問題。
+ Avro 和 Protobuf 序列化不受影響。
+ [Flink 2.2 升級的狀態相容性指南](state-compatibility.md) 如需分類應用程式風險層級的詳細評估，請參閱 。

## 支援 Apache Flink 2.2 功能
<a name="flink-2-2-supported-features"></a>

**執行期和語言支援**


****  

| 功能 | Description | 文件 | 
| --- | --- | --- | 
| Java 17 執行期 | Java 17 現在是預設和建議的執行時間；Java 11 支援已移除。 | [Java 相容性](https://nightlies.apache.org/flink/flink-docs-stable/zh/docs/deployment/java_compatibility/) | 
| Python 3.12 支援 | Python 3.12 現在支援；Python 3.8 支援已移除。 | [PyFlink 文件](https://nightlies.apache.org/flink/flink-docs-release-2.2/docs/dev/python/overview/) | 

**狀態管理和效能**


****  

| 功能 | Description | 文件 | 
| --- | --- | --- | 
| RocksDB 8.10.0 | 透過 RocksDB 升級改善 I/O 效能。 | [狀態後端](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/ops/state/state_backends/) | 
| 序列化改進 | Map、List、Set； Kryo 專用序列化程式從 2.24 升級到 5.6。 | [類型序列化](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/dev/datastream/fault-tolerance/serialization/types_serialization/) | 

**SQL 和資料表 API 功能**


****  

| 功能 | Description | 文件 | 
| --- | --- | --- | 
| VARIANT 資料類型 | 原生支援半結構化資料 (JSON)，無需重複字串剖析。 | [資料類型](https://nightlies.apache.org/flink/flink-docs-release-2.1/docs/dev/table/types/) | 
| Delta 加入 | 僅維護每個金鑰的最新版本，以減少串流聯結的狀態需求； 需要客戶管理的基礎設施 （例如 Apache Fluss)。 | [聯結](https://nightlies.apache.org/flink/flink-docs-release-2.1/docs/dev/table/sql/queries/joins/) | 
| StreamingMultiJoinOperator | 以單一運算子執行多方聯結，消除中繼具體化。 | [FLIP-516](https://cwiki.apache.org/confluence/display/FLINK/FLIP-516) | 
| ProcessTableFunction (PTF) | 使用每個金鑰狀態和計時器，在 SQL 中直接啟用具狀態的事件驅動邏輯。 | [使用者定義的函數](https://nightlies.apache.org/flink/flink-docs-release-2.1/docs/dev/table/functions/udfs/) | 
| ML\$1PREDICT 函數 | 直接從 SQL 在串流/批次資料表上呼叫已註冊的 ML 模型。要求客戶綁定 ModelProvider 實作 （例如 flink-model-openai)。ModelProvider 程式庫並非由 Managed Service for Apache Flink 運送。 | [ML 預測](https://nightlies.apache.org/flink/flink-docs-release-2.1/docs/dev/table/sql/queries/model-inference/) | 
| 模型 DDL | 使用 CREATE MODEL 陳述式將 ML 模型定義為一級目錄物件。 | [CREATE 陳述式](https://nightlies.apache.org/flink/flink-docs-release-2.1/docs/dev/table/sql/create/#create-model) | 
| 向量搜尋 | Flink SQL API 支援搜尋向量資料庫。目前沒有可用的開放原始碼VectorSearchTableSource實作；客戶必須提供自己的實作。 | [Flink SQL](https://nightlies.apache.org/flink/flink-docs-stable/release-notes/flink-2.2/#support-vector_search-in-flink-sql) | 

**DataStream API 功能**


****  

| 功能 | Description | 文件 | 
| --- | --- | --- | 
| FLIP-27 來源 API | 取代舊版 SourceFunction 的新統一來源界面。 | [來源](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/dev/datastream/sources/) | 
| FLIP-143 接收器 API | 取代舊版 SinkFunction 的新統一接收器界面。 | [接收器](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/dev/datastream/sinks/) | 
| 非同步 Python DataStream | 使用 AsyncFunction 在 Python DataStream API 中非封鎖 I/O 操作。 | [非同步 I/O](https://nightlies.apache.org/flink/flink-docs-release-2.2/docs/dev/python/datastream/operators/async_io/) | 

## 連接器可用性
<a name="flink-2-2-connectors"></a>

升級至 Flink 2.2 時，您也需要將連接器相依性更新為與 Flink 2.2 執行時間相容的版本。Flink 連接器獨立於 Flink 執行期發行，而且並非所有連接器都具有與 Flink 2.2 相容的版本。下表摘要說明 Amazon Managed Service for Apache Flink 中常用連接器的可用性：


**Flink 2.2 的連接器可用性**  

| 連接器 | Flink 1.20 版本 | Flink 2.0\$1 版本 | 備註 | 
| --- | --- | --- | --- | 
| Apache Kafka | flink-connector-kafka 3.4.0-1.20 | flink-connector-kafka 4.0.0-2.0 | 建議用於 Flink 2.2 | 
| Kinesis Data Streams （來源） | flink-connector-kinesis 5.0.0-1.20 | flink-connector-aws-kinesis-streams 6.0.0-2.0 | 建議用於 Flink 2.2 | 
| Kinesis Data Streams （接收器） | flink-connector-aws-kinesis-streams 5.1.0-1.20 | flink-connector-aws-kinesis-streams 6.0.0-2.0 | 建議用於 Flink 2.2 | 
| Amazon Data Firehose | flink-connector-aws-kinesis-firehose 5.1.0-1.20 | flink-connector-aws-kinesis-firehose 6.0.0-2.0 | 與 Flink 2.0 相容 | 
| Amazon DynamoDB | flink-connector-dynamodb 5.1.0-1.20 | flink-connector-dynamodb 6.0.0-2.0 | 與 Flink 2.0 相容 | 
| Amazon SQS | flink-connector-sqs 5.1.0-1.20 | flink-connector-sqs 6.0.0-2.0 | 與 Flink 2.0 相容 | 
| FileSystem (S3、HDFS) | 與 Flink 綁定 | 與 Flink 綁定 | 內建於 Flink 分佈中 — 一律可用 | 
| JDBC | flink-connector-jdbc 3.3.0-1.20 | 尚未針對 2.x 發行 | 沒有可用的 Flink 2.x 相容版本 | 
| OpenSearch | flink-connector-opensearch 1.2.0-1.19 | 尚未針對 2.x 發行 | 沒有可用的 Flink 2.x 相容版本 | 
| Elasticsearch | 僅限舊版連接器 | 尚未針對 2.x 發行 | 考慮遷移至 OpenSearch 連接器 | 
| Amazon Managed Service for Prometheus | flink-connector-prometheus 1.0.0-1.20 | 尚未針對 2.x 發行 | 沒有可用的 Flink 2.x 相容版本 | 
+ 如果您的應用程式依賴的連接器尚未有 Flink 2.x 版本，您有兩個選項：等待連接器發行相容的版本，或評估您是否可以使用替代版本取代它 （例如，使用 JDBC 目錄或自訂接收器）。
+ 更新連接器版本時，請注意成品名稱變更 — 某些連接器在主要版本之間重新命名 （例如，在某些中繼版本`flink-connector-aws-kinesis-firehose``flink-connector-aws-firehose`中，Firehose 連接器從 變更為 )。
+ 請務必檢查 [Amazon Managed Service for Apache Flink 連接器文件](https://docs.aws.amazon.com/managed-flink/latest/java/how-flink-connectors.html)，了解目標執行時間中支援的確切成品名稱和版本。

## 不支援和實驗性功能
<a name="flink-2-2-unsupported"></a>

Amazon Managed Service for Apache Flink 2.2 不支援下列功能：
+ **具體化資料表**：持續維護、可查詢的資料表快照。
+ **自訂遙測變更**：自訂指標報告程式和遙測組態。
+ **ForSt 狀態後端**：分解狀態儲存 （在開放原始碼中進行實驗）。
+ **Java 21**：開放原始碼中的實驗性支援，在 Managed Service for Apache Flink 中不支援。

## 已知問題
<a name="flink-2-2-known-issues"></a>

**Amazon Managed Service for Apache Flink Studio**

Amazon Managed Service for Apache Flink 中的 Flink 2.2 不支援 Studio 應用程式。如需詳細資訊，請參閱[建立 Studio 筆記本](https://docs.aws.amazon.com/managed-flink/latest/java/how-zeppelin-creating.html)。

**Kinesis 連接器 EFO**
+ 當 Kinesis 串流進行重新分片時，連接器 v5.0.0 和 v6.0.0 中引入`KinesisStreamsSource`搭配 EFO （增強廣發/SubscribeToShard) 路徑使用 的應用程式可能會失敗。這是社群中的已知問題。如需詳細資訊，請參閱 [FLINK-37648](https://issues.apache.org/jira/browse/FLINK-37648)。
+ 如果 Flink 應用程式處於背壓狀態，則連接器 v5.0.0 和 v6.0.0 中引入`KinesisStreamsSource`的搭配 EFO （增強廣發/SubscribeToShard) 路徑使用 的應用程式`KinesisStreamsSink`可能會遇到死結，導致一個或多個 TaskManagers 中的資料處理完全停止。需要強制停止操作和啟動應用程式操作才能復原應用程式。這是社群中已知問題的子案例。如需詳細資訊，請參閱 [FLINK-34071](https://issues.apache.org/jira/browse/FLINK-34071)。

## 升級體驗
<a name="flink-2-2-upgrade"></a>

Amazon Managed Service for Apache Flink 支援就地版本升級，保留您的應用程式組態、日誌、指標、標籤，以及如果狀態和二進位檔相容，則為您的應用程式狀態。如需逐步說明，請參閱 [升級到 Flink 2.2：完成指南](flink-2-2-upgrade-guide.md)。

如需在升級期間評估狀態相容性風險及處理不相容狀態的指引，請參閱 [Flink 2.2 升級的狀態相容性指南](state-compatibility.md)。

## 後續步驟
<a name="flink-2-2-next-steps"></a>
+ 第一次使用 Flink 2.2？ 如需詳細的 Apache Flink 2.2 文件，請參閱 [Apache Flink 2.2 文件。](https://nightlies.apache.org/flink/flink-docs-release-2.2/)
+ 規劃升級？ 請參閱 [升級到 Flink 2.2：完成指南](flink-2-2-upgrade-guide.md)
+ 狀態相容性問題？ 請參閱 [Flink 2.2 升級的狀態相容性指南](state-compatibility.md)

如有疑問或問題，請參閱 [Managed Service for Apache Flink 故障診斷](troubleshooting.md)或聯絡 AWS Support。

# Amazon Managed Service for Apache Flink 1.20
<a name="flink-1-20"></a>

Managed Service for Apache Flink 現在支援 Apache Flink 1.20.0 版。本節將介紹 Managed Service for Apache Flink 1.20.0 支援的主要新功能和變更。Apache Flink 1.20 預期是最後一個 1.x 版本和 Flink 長期支援 (LTS) 版本。如需詳細資訊，請參閱 [FLIP-458：Apache Flink 1.x Line 最終版本的長期支援。](https://cwiki.apache.org/confluence/display/FLINK/FLIP-458%3A+Long-Term+Support+for+the+Final+Release+of+Apache+Flink+1.x+Line)

**注意**  
如果您使用舊版支援的 Apache Flink，並想要將現有應用程式升級至 Apache Flink 1.20.0，則可以使用就地 Apache Flink 版本升級來執行此操作。如需詳細資訊，請參閱[針對 Apache Flink 使用就地版本升級](how-in-place-version-upgrades.md)。透過就地版本升級，您可以針對跨 Apache Flink 版本的單一 ARN 保留應用程式可追蹤性，包括快照、日誌、指標、標籤、Flink 組態等。

## 支援的功能
<a name="flink-1-20-0-supported-features"></a>

Apache Flink 1.20.0 在 SQL APIs、DataStream APIs 和 Flink 儀表板中引入了改進功能。


**支援的功能和相關文件**  

| 支援的功能 | Description | Apache Flink 文件參考  | 
| --- | --- | --- | 
| 新增 DISTRIBUTED BY 子句 | 許多 SQL 引擎會公開 Partitioning、 Bucketing或 的概念Clustering。Flink 1.20 將 Bucketing的概念引入 Flink。 | [FLIP-376：新增 DISTRIBUTED BY 子句](https://cwiki.apache.org/confluence/display/FLINK/FLIP-376%3A+Add+DISTRIBUTED+BY+clause) | 
| DataStream API：支援完整分割區處理  | Flink 1.20 引入了透過 FullPartitionWindow API 在非金鑰串流上彙總的內建支援。 | [FLIP-380：支援非金鑰 DataStream 上的完整分割區處理](https://cwiki.apache.org/confluence/display/FLINK/FLIP-380%3A+Support+Full+Partition+Processing+On+Non-keyed+DataStream) | 
| 在 Flink Dashboard 上顯示資料扭曲分數 | Flink 1.20 儀表板現在會顯示資料扭曲侵權。Flink 任務圖表 UI 上的每個運算子都會顯示額外的資料扭曲分數。 | [FLIP-418：在 Flink Dashboard 上顯示資料扭曲分數](https://cwiki.apache.org/confluence/display/FLINK/FLIP-418%3A+Show+data+skew+score+on+Flink+Dashboard) | 

如需 Apache Flink 1.20.0 版本文件，請參閱 [ Apache Flink 文件 1.20.0 ](https://nightlies.apache.org/flink/flink-docs-stable/)版。如需 Flink 1.20 版本備註，請參閱[版本備註 - Flink 1.20](https://nightlies.apache.org/flink/flink-docs-release-1.20/release-notes/flink-1.20/)

## 元件
<a name="flink-1-20-0-components"></a>


**Flink 1.20 元件**  

| 元件 | 版本 | 
| --- | --- | 
| Java  | 11 (建議使用) | 
| Python |  3.11  | 
| Kinesis Data Analytics Flink 執行期 (aws-kinesisanalytics-runtime) | 1.2.0 | 
| 連接器 | 如需可用連接器的資訊，請參閱 [Apache Flink 連接器](https://docs.aws.amazon.com/managed-flink/latest/java/how-flink-connectors.html)。 | 
| [Apache Beam (僅限於 Beam 應用程式)](https://aws.amazon.com/developer/language/python/) |  沒有適用於 Flink 1.20 的相容 Apache Flink Runner。如需詳細資訊，請參閱 [Flink 版本相容性](https://beam.apache.org/documentation/runners/flink/#flink-version-compatibility)。  | 

## 已知問題
<a name="flink-1-20-0-known-issues"></a>

**Apache 光束**

Apache Beam 中目前沒有適用於 Flink 1.20 的相容 Apache Flink Runner。如需詳細資訊，請參閱 [Flink 版本相容性](https://beam.apache.org/documentation/runners/flink/#flink-version-compatibility)。

**Amazon Managed Service for Apache Flink Studio**

Amazon Managed Service for Apache Flink Studio 使用 Apache Zeppelin 筆記本提供單一介面開發體驗，用於開發、偵錯程式碼和執行 Apache Flink 串流處理應用程式。Zeppelin 的 Flink 解譯器需要升級，才能支援 Flink 1.20。此工作是與 Zeppelin 社群一起排程。我們會在工作完成時更新這些備註。您可以繼續使用 Flink 1.15 搭配 Amazon Managed Service for Apache Flink Studio。如需詳細資訊，請參閱[建立 Studio 筆記本](https://docs.aws.amazon.com/managed-flink/latest/java/how-zeppelin-creating.html)。

**反向移植錯誤修正**

Amazon Managed Service for Apache Flink 後端連接埠修正來自 Flink 社群的重大問題。以下是我們已向後移植的錯誤修正清單：


**反向移植錯誤修正**  

| Apache Flink JIRA 連結 | Description | 
| --- | --- | 
| [FLINK-35886](https://issues.apache.org/jira/browse/FLINK-35886) | 此修正解決了當子任務受到背壓/封鎖時，導致浮水印閒置逾時計算不正確的問題。 | 

# Amazon Managed Service for Apache Flink 1.19
<a name="flink-1-19"></a>

Managed Service for Apache Flink 現在支援 Apache Flink 1.19.1 版。本節將介紹 Managed Service for Apache Flink 1.19.1 支援的主要新功能和變更。

**注意**  
如果您使用的是舊版支援的 Apache Flink，而且想要將現有應用程式升級至 Apache Flink 1.19.1，則可以使用就地 Apache Flink 版本升級來執行此操作。如需詳細資訊，請參閱[針對 Apache Flink 使用就地版本升級](how-in-place-version-upgrades.md)。透過就地版本升級，您可以針對跨 Apache Flink 版本的單一 ARN 保留應用程式可追蹤性，包括快照、日誌、指標、標籤、Flink 組態等。

## 支援的功能
<a name="flink-1-19-1-supported-features"></a>

Apache Flink 1.19.1 引進 SQL API 的改進，例如具名參數、自訂來源平行處理，以及各種 Flink 運算子的不同狀態 TTLs。


**支援的功能和相關文件**  

| 支援的功能 | Description | Apache Flink 文件參考  | 
| --- | --- | --- | 
| SQL API：支援使用 SQL 提示設定不同的狀態 TTLs  | 使用者現在可以在串流定期聯結和群組彙總上設定狀態 TTL。 | [FLIP-373：使用 SQL Hint 設定不同的狀態 TTLs ](https://cwiki.apache.org/confluence/display/FLINK/FLIP-373%3A+Support+Configuring+Different+State+TTLs+using+SQL+Hint) | 
| SQL API：支援函數和呼叫程序的具名參數 | 使用者現在可以在函數中使用具名參數，而不是依賴參數的順序。 | [FLIP-378：支援函數和呼叫程序的具名參數](https://cwiki.apache.org/confluence/display/FLINK/FLIP-387%3A+Support+named+parameters+for+functions+and+call+procedures) | 
| SQL API：設定 SQL 來源的平行處理 | 使用者現在可以指定 SQL 來源的平行處理。 | [FLIP-367：支援設定資料表/SQL 來源的平行處理](https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=263429150) | 
| SQL API：支援工作階段視窗 TVF | 使用者現在可以使用工作階段視窗的資料表值函數。 | [FLINK-24024：支援工作階段視窗 TVF](https://issues.apache.org/jira/browse/FLINK-24024) | 
| SQL API：Window TVF 彙總支援 Changelog 輸入 | 使用者現在可以在 changelog 輸入上執行視窗彙總。 | [FLINK-20281：視窗彙總支援 changelog 串流輸入](https://issues.apache.org/jira/browse/FLINK-20281) | 
|  支援 Python 3.11  | Flink 現在支援 Python 3.11，比 Python 3.10 快 10-60%。如需詳細資訊，請參閱 [Python 3.11 中的最新消息。](https://docs.python.org/3/whatsnew/3.11.html#summary-release-highlights) | [FLINK-33030：新增 python 3.11 支援](https://issues.apache.org/jira/browse/FLINK-33030) | 
| 提供 TwoPhaseCommitting 接收器的指標 | 使用者可以檢視兩個階段遞交目的地中遞交者狀態的統計資料。 | [ FLIP-371：提供在 TwoPhaseCommittingSink 中建立發射器的初始化內容](https://cwiki.apache.org/confluence/display/FLINK/FLIP-371%3A+Provide+initialization+context+for+Committer+creation+in+TwoPhaseCommittingSink) | 
|  用於任務重新啟動和檢查點的追蹤報告程式  | 使用者現在可以監控檢查點持續時間和周轉趨勢的追蹤。在 Amazon Managed Service for Apache Flink 中，我們預設啟用 Slf4j 追蹤報告程式，讓使用者可以透過應用程式 CloudWatch Logs 監控檢查點和任務追蹤。 | [ FLIP-384：介紹 TraceReporter，並使用它來建立檢查點和復原追蹤](https://cwiki.apache.org/confluence/display/FLINK/FLIP-384%3A+Introduce+TraceReporter+and+use+it+to+create+checkpointing+and+recovery+traces) | 

**注意**  
您可以透過提交[支援案例](https://console.aws.amazon.com/support/home#/)來選擇加入下列功能：


**選擇加入功能和相關文件**  

| 選擇加入功能 | Description | Apache Flink 文件參考  | 
| --- | --- | --- | 
| 當來源正在處理待處理項目時，支援使用較大的檢查點間隔 | 這是選擇加入功能，因為使用者必須針對其特定任務需求調整組態。 | [FLIP-309：支援在來源處理待處理項目時使用較大的檢查點間隔](https://cwiki.apache.org/confluence/display/FLINK/FLIP-309%3A+Support+using+larger+checkpointing+interval+when+source+is+processing+backlog) | 
| 將 System.out 和 System.err 重新導向至 Java 日誌 | 這是選擇加入功能。在 Amazon Managed Service for Apache Flink 上，預設行為是忽略 System.out 和 System.err 的輸出，因為生產中的最佳實務是使用原生 Java 記錄器。 | [FLIP-390：支援系統輸出和錯誤重新導向至 LOG 或捨棄](https://cwiki.apache.org/confluence/display/FLINK/FLIP-390%3A+Support+System+out+and+err+to+be+redirected+to+LOG+or+discarded) | 

如需 Apache Flink 1.19.1 版本文件，請參閱 [ Apache Flink 文件 1.19.1 ](https://nightlies.apache.org/flink/flink-docs-stable/)版。

## Amazon Managed Service for Apache Flink 1.19.1 的變更
<a name="flink-1-19-1-known-issues"></a>

**預設啟用記錄追蹤報告程式**

Apache Flink 1.19.1 引進檢查點和復原追蹤，讓使用者能夠更好地偵錯檢查點和任務復原問題。在 Amazon Managed Service for Apache Flink 中，這些追蹤會登入 CloudWatch 日誌串流，允許使用者細分任務初始化所花費的時間，並記錄檢查點的歷史大小。

**預設重新啟動策略現在為指數延遲**

在 Apache Flink 1.19.1 中，指數延遲重新啟動策略有大幅改善。在 Flink 1.19.1 之後的 Amazon Managed Service for Apache Flink 中，Flink 任務預設使用指數延遲重新啟動策略。這表示使用者任務將從暫時性錯誤中更快速復原，但如果任務重新啟動持續存在，則不會讓外部系統超載。

**反向移植錯誤修正**

Amazon Managed Service for Apache Flink 後端連接埠修正來自 Flink 社群的重大問題。這表示執行時間與 Apache Flink 1.19.1 版不同。以下是我們已向後移植的錯誤修正清單：


**反向移植錯誤修正**  

| Apache Flink JIRA 連結 | Description | 
| --- | --- | 
| [FLINK-35531](https://issues.apache.org/jira/browse/FLINK-35531) | 此修正解決了 1.17.0 中引入的效能迴歸，這會導致 HDFS 的寫入速度變慢。 | 
| [FLINK-35157](https://issues.apache.org/jira/browse/FLINK-35157) | 此修正解決了當具有浮水印對齊的來源遇到已完成子任務時，Flink 任務停滯的問題。 | 
| [FLINK-34252](https://issues.apache.org/jira/browse/FLINK-34252) | 此修正解決了產生浮水印時導致 IDLE 浮水印狀態錯誤的問題。 | 
| [FLINK-34252](https://issues.apache.org/jira/browse/FLINK-34252) | 此修正透過減少系統呼叫來解決浮水印產生期間的效能迴歸。 | 
| [FLINK-33936](https://issues.apache.org/jira/browse/FLINK-33936) | 此修正解決了資料表 API 上的微批次彙總期間重複記錄的問題。 | 
| [FLINK-35498](https://issues.apache.org/jira/browse/FLINK-35498) | 此修正解決了在資料表 API UDFs 中定義具名參數時，引數名稱衝突的問題。 | 
| [FLINK-33192](https://issues.apache.org/jira/browse/FLINK-33192) | 此修正解決了由於不正確的計時器清除，視窗運算子中狀態記憶體流失的問題。 | 
| [FLINK-35069](https://issues.apache.org/jira/browse/FLINK-35069) | 此修正解決了 Flink 任務在視窗結束時卡住觸發計時器的問題。 | 
| [FLINK-35832](https://issues.apache.org/jira/browse/FLINK-35832) | 此修正解決了 IFNULL 傳回不正確結果的問題。 | 
| [FLINK-35886](https://issues.apache.org/jira/browse/FLINK-35886) | 此修正可解決將背壓任務視為閒置時的問題。 | 

## 元件
<a name="flink-1-19-1-components"></a>


****  

| 元件 | 版本 | 
| --- | --- | 
| Java  | 11 (建議使用) | 
| Python |  3.11  | 
| Kinesis Data Analytics Flink 執行期 (aws-kinesisanalytics-runtime) | 1.2.0 | 
| 連接器 | 如需可用連接器的資訊，請參閱 [Apache Flink 連接器](https://docs.aws.amazon.com/managed-flink/latest/java/how-flink-connectors.html)。 | 
| [Apache Beam (僅限於 Beam 應用程式)](https://aws.amazon.com/developer/language/python/) |  從 2.61.0 版開始。如需詳細資訊，請參閱 [Flink 版本相容性](https://beam.apache.org/documentation/runners/flink/#flink-version-compatibility)。  | 

## 已知問題
<a name="flink-1-19-other-issues"></a>

**Amazon Managed Service for Apache Flink Studio**

Studio 使用 Apache Zeppelin 筆記本提供單一介面開發體驗，用於開發、偵錯程式碼和執行 Apache Flink 串流處理應用程式。Zeppelin 的 Flink 解譯器需要升級，才能支援 Flink 1.19。此工作是與 Zeppelin 社群排程的，我們將在完成時更新這些備註。您可以繼續使用 Flink 1.15 搭配 Amazon Managed Service for Apache Flink Studio。如需詳細資訊，請參閱[建立 Studio 筆記本](https://docs.aws.amazon.com/managed-flink/latest/java/how-zeppelin-creating.html)。

# Amazon Managed Service for Apache Flink 1.18
<a name="flink-1-18"></a>

 Managed Service for Apache Flink 現在支援 Apache Flink 1.18.1 版。了解 Managed Service for Apache Flink 支援 Apache Flink 1.18.1 推出的重要新功能和變更。

**注意**  
如果您使用的是舊版支援的 Apache Flink，而且想要將現有應用程式升級至 Apache Flink 1.18.1，則可以使用就地 Apache Flink 版本升級來執行此操作。透過就地版本升級，您可以保留跨 Apache Flink 版本的單一 ARN 的應用程式可追蹤性，包括快照、日誌、指標、標籤、Flink 組態等。您可以在 `RUNNING`和 `READY` 狀態使用此功能。如需詳細資訊，請參閱[針對 Apache Flink 使用就地版本升級](how-in-place-version-upgrades.md)。


**Apache Flink 文件參考支援的 功能**  

| 支援的功能 | Description | Apache Flink 文件參考  | 
| --- | --- | --- | 
| Opensearch 連接器 | 此連接器包含提供at-least-once保證的接收器。 | [github：Opensearch Connector](https://github.com/apache/flink-connector-opensearch/blob/main/docs/content/docs/connectors/datastream/opensearch.md) | 
| Amazon DynamoDB 連接器 | 此連接器包含提供at-least-once保證的接收器。 | [Amazon DynamoDB Sink](https://nightlies.apache.org/flink/flink-docs-master/docs/connectors/datastream/dynamodb/) | 
| MongoDB 連接器 | 此連接器包含提供at-least-once保證的來源和接收器。 | [MongoDB 連接器](https://nightlies.apache.org/flink/flink-docs-master/docs/connectors/datastream/mongodb/) | 
| 使用 Flink 規劃器解耦 Hive |  您可以直接使用 Hive 方言，無需額外的 JAR 交換。  | [FLINK-26603：使用 Flink 規劃器解耦 Hive](https://issues.apache.org/jira/browse/FLINK-26603) | 
| 根據預設，在 RocksDBWriteBatchWrapper 中停用 WAL |  這可提供更快的復原時間。  | [FLINK-32326：預設在 RocksDBWriteBatchWrapper 中停用 WAL](https://issues.apache.org/jira/browse/FLINK-32326) | 
|  改善啟用浮水印對齊時的浮水印彙總效能  |  改善啟用浮水印對齊時的浮水印彙總效能，並新增相關基準。  | [FLINK-32524：浮水印彙總效能](https://issues.apache.org/jira/browse/FLINK-32420) | 
| 讓浮水印對齊準備好供生產使用 | 消除大型任務超載 JobManager 的風險 | [ FLINK-32548：準備好浮水印對齊](https://issues.apache.org/jira/browse/FLINK-32548) | 
|  非同步接收器的可設定 RateLimitingStratey   |  RateLimitingStrategy 可讓您設定要擴展的內容、擴展的時間，以及擴展的數量。  | [ FLIP-242：引入適用於非同步接收器的可設定 RateLimitingStrategy ](https://cwiki.apache.org/confluence/display/FLINK/FLIP-242%3A+Introduce+configurable+RateLimitingStrategy+for+Async+Sink) | 
|  大量擷取資料表和資料欄統計資料  | 改善查詢效能。 | [ FLIP-247：大量擷取指定分割區的資料表和資料欄統計資料](https://cwiki.apache.org/confluence/display/FLINK/FLIP-247%3A+Bulk+fetch+of+table+and+column+statistics+for+given+partitions) | 

如需 Apache Flink 1.18.1 版本文件，請參閱 [ Apache Flink 1.18.1 版本公告。](https://flink.apache.org/2024/01/19/apache-flink-1.18.1-release-announcement/)

## Amazon Managed Service for Apache Flink with Apache Flink 1.18 的變更
<a name="flink-1-15-2-known-issues"></a>

**Akka 取代為 Pekko**

 Apache Flink 1.18 中的 Apache Flink 將 Akka 取代為 Pekko。Managed Service for Apache Flink 1.18.1 及更新版本完全支援此變更。由於此變更，您不需要修改應用程式。如需詳細資訊，請參閱 [FLINK-32468： Replace Akka by Pekko](https://issues.apache.org/jira/browse/FLINK-32468)。

**在執行緒模式中支援 PyFlink 執行期執行**

此 Apache Flink 變更為 Pyflink 執行期架構 程序模式引進新的執行模式。程序模式現在可以在相同的執行緒中執行 Python 使用者定義的函數，而不是個別的程序。

**反向移植錯誤修正**

Amazon Managed Service for Apache Flink 後端連接埠修正來自 Flink 社群的重大問題。這表示執行時間與 Apache Flink 1.18.1 版不同。以下是我們已向後移植的錯誤修正清單：


**反向移植錯誤修正**  

| Apache Flink JIRA 連結 | Description | 
| --- | --- | 
| [FLINK-33863](https://issues.apache.org/jira/browse/FLINK-33863) | 此修正可解決壓縮快照的狀態還原失敗的問題。 | 
| [FLINK-34063](https://issues.apache.org/jira/browse/FLINK-34063) | 此修正可解決啟用快照壓縮時來源運算子遺失分割的問題。Apache Flink 為所有檢查點和儲存點提供選用的壓縮 （預設：關閉）。Apache Flink 已識別 Flink 1.18.1 中的錯誤，其中在啟用快照壓縮時，無法正確還原運算子狀態。這可能會導致資料遺失或無法從檢查點還原。 | 
| [FLINK-35069](https://issues.apache.org/jira/browse/FLINK-35069) | 此修正解決了 Flink 任務在視窗結束時卡住觸發計時器的問題。 | 
| [FLINK-35097](https://issues.apache.org/jira/browse/FLINK-35097) | 此修正以原始格式解決資料表 API 檔案系統連接器中重複記錄的問題。 | 
| [FLINK-34379](https://issues.apache.org/jira/browse/FLINK-34379) | 此修正解決了啟用動態資料表篩選時 OutOfMemoryError 的問題。 | 
| [FLINK-28693](https://issues.apache.org/jira/browse/FLINK-28693) | 此修正解決了如果浮水印具有 columnBy 表達式，資料表 API 無法產生圖形的問題。 | 
| [FLINK-35217](https://issues.apache.org/jira/browse/FLINK-35217) | 此修正可解決特定 Flink 任務失敗模式期間檢查點損毀的問題。 | 

## 元件
<a name="flink-1-15-2-components"></a>


****  

| 元件 | 版本 | 
| --- | --- | 
| Java  | 11 (建議使用) | 
| Scala |  自 1.15 版以來，Flink 與 Scala 無關。作為參考，MSF Flink 1.18 已針對 Scala 3.3 (LTS) 驗證。  | 
| Managed Service for Apache Flink 執行期 (aws-kinesisanalytics-runtime) | 1.2.0 | 
| [AWS Kinesis 連接器 (flink-connector-kinesis)【來源】](https://mvnrepository.com/artifact/org.apache.flink/flink-connector-kinesis/4.2.0-1.18) | 4.2.0-1.18 | 
| [AWS Kinesis 連接器 (flink-connector-kinesis)【Sink】](https://mvnrepository.com/artifact/org.apache.flink/flink-connector-aws-kinesis-streams/4.2.0-1.18) | 4.2.0-1.18 | 
| [Apache Beam (僅限於 Beam 應用程式)](https://aws.amazon.com/developer/language/python/) |  從 2.57.0 版開始。如需詳細資訊，請參閱 [Flink 版本相容性](https://beam.apache.org/documentation/runners/flink/#flink-version-compatibility)。  | 

## 已知問題
<a name="flink-1-18-known-issues"></a>

**Amazon Managed Service for Apache Flink Studio**

Studio 使用 Apache Zeppelin 筆記本提供單一介面開發體驗，用於開發、偵錯程式碼和執行 Apache Flink 串流處理應用程式。Zeppelin 的 Flink 解譯器需要升級，才能支援 Flink 1.18。此工作是與 Zeppelin 社群一起排程的，我們將在完成時更新這些備註。您可以繼續使用 Flink 1.15 搭配 Amazon Managed Service for Apache Flink Studio。如需詳細資訊，請參閱[建立 Studio 筆記本](https://docs.aws.amazon.com/managed-flink/latest/java/how-zeppelin-creating.html)。

**當子任務受到背壓時，浮水印閒置不正確**

當子任務受到背壓時，浮水印產生中存在已知問題，該問題已從 Flink 1.19 及更新版本修正。當 Flink 任務圖表受到背壓時，這可能會在延遲記錄的數量中顯示為峰值。我們建議您升級至最新的 Flink 版本，以插入此修正。如需詳細資訊，請參閱當[子任務受到背壓/封鎖時，浮水印閒置逾時會計不正確](https://issues.apache.org/jira/browse/FLINK-35886)。

# Amazon Managed Service for Apache Flink 1.15
<a name="flink-1-15-2"></a>

 Managed Service for Apache Flink 支援 Apache 1.15.2 中的下列新功能：


****  

| 功能 | Description | Apache FLIP 參考  | 
| --- | --- | --- | 
| 非同步接收器  | 用於建置非同步目的地的 AWS 貢獻架構，可讓開發人員建置自訂 AWS 連接器，前次工作不到一半。如需詳細資訊，請參閱[通用非同步基本接收器](https://flink.apache.org/2022/05/06/async-sink-base.html)。 | [FLIP-171：非同步接收器](https://cwiki.apache.org/confluence/display/FLINK/FLIP-171%3A+Async+Sink)。 | 
| Kinesis Data Firehose 接收器  | AWS 已使用非同步架構貢獻新的 Amazon Kinesis Firehose Sink。 | [Amazon Kinesis Data Firehose 接收器](https://nightlies.apache.org/flink/flink-docs-release-1.15//docs/connectors/datastream/firehose/)。 | 
| 使用儲存點停止  | 「使用儲存點停止」可確保乾淨利落的停止操作，最重要的是為依賴它們的客戶提供了僅支援一次的語義。 | [FLIP-34：使用儲存點終止/暫停作業](https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=103090212)。 | 
| Scala 解耦  | 使用者現在可以利用任何 Scala 版本的 Java API，包括 Scala 3。客戶需要將所選擇的 Scala 標準程式庫綁定在他們的 Scala 應用程式中。 | [FLIP-28：將移除 flink-table 的 Scala 相依性作為長期目標](https://cwiki.apache.org/confluence/display/FLINK/FLIP-28%3A+Long-term+goal+of+making+flink-table+Scala-free)。 | 
| Scala | 請參閱上面的 Scala 解耦  | [FLIP-28：將移除 flink-table 的 Scala 相依性作為長期目標](https://cwiki.apache.org/confluence/display/FLINK/FLIP-28%3A+Long-term+goal+of+making+flink-table+Scala-free)。 | 
| 統一的連接器指標 | Flink 針對作業、任務和運算子擁有[已定義的標準指標](https://nightlies.apache.org/flink/flink-docs-release-1.15//docs/ops/metrics/)。Managed Service for Apache Flink 將繼續支援接收器和來源指標，並在 1.15 版中為可用性指標同時引入了 numRestarts 與 fullRestarts。 | [FLIP-33：將連接器指標標準化](https://cwiki.apache.org/confluence/display/FLINK/FLIP-33%3A+Standardize+Connector+Metrics)和 [FLIP-179：公開標準化的運算子指標](https://cwiki.apache.org/confluence/display/FLINK/FLIP-179%3A+Expose+Standardized+Operator+Metrics)。 | 
| 檢查點已完成的任務  | 此功能在 Flink 1.15 中預設為啟用，即使作業圖表的某些部分已完成處理所有資料 (如果包含綁定的 (批次) 來源，可能會發生此情況)，仍可以繼續執行檢查點。 | [FLIP-147：在任務完成後支援檢查點](https://cwiki.apache.org/confluence/display/FLINK/FLIP-147%3A+Support+Checkpoints+After+Tasks+Finished)。 | 

## 使用 Apache Flink 1.15 的 Amazon Managed Service for Apache Flink 中的變更
<a name="flink-1-15-2-changes"></a>

**Studio 筆記本**

Managed Service for Apache Flink Studio 現支援 Apache Flink 1.15。Managed Service for Apache Flink Studio 利用 Apache Zeppelin 筆記本提供單一介面開發體驗，用於開發、程式碼偵錯和執行 Apache Flink 串流處理應用程式。您可以在 [使用 Studio 筆記本搭配 Managed Service for Apache Flink](how-notebook.md) 中進一步了解 Managed Service for Apache Flink Studio 以及如何開始使用。

**EFO 連接器**

升級至 Managed Service for Apache Flink 1.15 版時，確保使用的是最新的 EFO 連接器，也就是任何 1.15.3 版或更新版本。如需原因的詳細資訊，請參閱 [FLINK-29324](https://issues.apache.org/jira/browse/FLINK-29324 )。

**Scala 解耦**

從 Flink 1.15.2 開始，您需要將您選擇的 Scala 標準程式庫綁定到 Scala 應用程式中。

**Kinesis Data Firehose 接收器**

升級至 Managed Service for Apache Flink 1.15 版時，確保使用的是最新的 [Amazon Kinesis Data Firehose 接收器](https://nightlies.apache.org/flink/flink-docs-release-1.15//docs/connectors/datastream/firehose/)。

**Kafka 連接器**

升級至 Amazon Managed Service for Apache Flink 1.15 版時，確保使用的是最新的 Kafka 連接器 API。Apache Flink 已不推薦使用 [FlinkKafkaConsumer](https://nightlies.apache.org/flink/flink-docs-master/docs/connectors/datastream/kafka/#kafka-consumer) 和 [FlinkKafkaProducer](https://nightlies.apache.org/flink/flink-docs-master/docs/connectors/datastream/kafka/#kafka-producer)。對於 Flink 1.15，這些用於 Kafka 接收器的 API 無法遞交給 Kafka。確保您正在使用 [KafkaSource](https://nightlies.apache.org/flink/flink-docs-master/docs/connectors/datastream/kafka/#kafka-source) 和 [KafkaSink](https://nightlies.apache.org/flink/flink-docs-master/docs/connectors/datastream/kafka/#kafka-sink)。

## 元件
<a name="flink-1-15-2-components"></a>


****  

| 元件 | 版本 | 
| --- | --- | 
| Java  | 11 (建議使用) | 
| Scala | 2.12 | 
| Managed Service for Apache Flink 執行期 (aws-kinesisanalytics-runtime) | 1.2.0 | 
| [AWS Kinesis 連接器 (flink-connector-kinesis)](https://mvnrepository.com/artifact/org.apache.flink/flink-connector-kinesis/1.15.4) | 1.15.4 | 
| [Apache Beam (僅限於 Beam 應用程式)](https://aws.amazon.com/developer/language/python/) | 2.33.0，帶有 Jackson 2.12.2 版 | 

## 已知問題
<a name="flink-1-15-known-issues"></a>

**代理程式重新啟動後，Kafka 遞交檢查點會重複失敗**

Flink 1.15 版中的 Apache Kafka 連接器存在已知的開放原始碼 Apache Flink 問題，因為 Kafka 用戶端 2.8.1 中的重大開放原始碼 Kafka 用戶端錯誤。如需詳細資訊，請參閱 [Kafka Commit on checkpointing 在代理程式重新啟動後重複失敗，](https://issues.apache.org/jira/browse/FLINK-28060)且在 [ commitOffsetAsync 例外狀況後，KafkaConsumer 無法復原與群組協調器的連線](https://issues.apache.org/jira/browse/KAFKA-13840)。

為了避免此問題，建議您在 Amazon Managed Service for Apache Flink 中使用 Apache Flink 1.18 或更新版本。

# Managed Service for Apache Flink 的早期版本資訊
<a name="earlier"></a>

**注意**  
Apache Flink 社群已支援 Apache Flink 1.6、1.8 和 1.11 版超過三年。我們已在 2024 年 6 月和 2024 年 10 月發出此變更的通知，現在將在 Amazon Managed Service for Apache Flink 中結束對這些版本的支援。  
2025 年 7 月 14 日，我們將停止您的應用程式，並將其置於就緒狀態。屆時，您將能夠重新啟動應用程式，並根據服務限制繼續正常使用應用程式。
從 2025 年 7 月 28 日起，我們將停用啟動應用程式的功能。您目前無法啟動或操作 Flink 1.6 版應用程式。
建議您使用 Apache Flink 1.6、1.8 或 1.11 版，立即將任何現有的應用程式升級至 Apache Flink 1.20 版。這是最新支援的 Flink 版本。您可以使用 Amazon Managed Service for Apache Flink 中的就地版本升級功能來升級應用程式。如需詳細資訊，請參閱[針對 Apache Flink 使用就地版本升級](how-in-place-version-upgrades.md)。  
如果您有其他問題或疑慮，您可以聯絡 [AWS 支援](https://aws.amazon.com/support)。

**注意**  
Apache Flink **1.13 版**已超過三年未被 Apache Flink 社群支援。我們現在計劃在 20**25 年 10 月 16** 日終止 Amazon Managed Service for Apache Flink 對此版本的支援。在此日期之後，您將無法再使用 Amazon Managed Service for Apache Flink 1.13 版建立、啟動或執行應用程式。  
您可以使用 Managed Service for Apache Flink 中的就地版本升級功能，以狀態升級應用程式。如需詳細資訊，請參閱[針對 Apache Flink 使用就地版本升級](how-in-place-version-upgrades.md)。

Managed Service for Apache Flink 支援 **1.15.2** 版，但 Apache Flink 社群不再支援。

**Topics**
+ [將 Apache Flink Kinesis Streams 連接器與先前的 Apache Flink 版本搭配使用](#how-creating-apps-building-kinesis)
+ [使用 Apache Flink 1.8.2 建置應用程式](#earlier-buildingapps-1_8)
+ [使用 Apache Flink 1.6.2 建置應用程式](#earlier-buildingapps-1_6)
+ [升級應用程式](#earlier-upgrading)
+ [Apache Flink 1.6.2 和 1.8.2 中的可用連接器](#earlier-connectors)
+ [入門：Flink 1.13.2](#getting-started-1-13)
+ [入門：Flink 1.11.1 - 棄用](#earlier-gs-1_11)
+ [入門：Flink 1.8.2 - 棄用](#earlier-gs-1_8)
+ [入門：Flink 1.6.2 - 棄用](#earlier-gs-1_6)
+ [Managed Service for Apache Flink 的舊版 （舊版） 範例](#legacy-examples)

## 將 Apache Flink Kinesis Streams 連接器與先前的 Apache Flink 版本搭配使用
<a name="how-creating-apps-building-kinesis"></a>

1.11 版之前的 Apache Flink 中不包含 Apache Flink Kinesis 串流連接器。若要讓應用程式能夠將 Apache Flink Kinesis 連接器與先前版本的 Apache Flink 搭配使用，必須下載、編譯並安裝該應用程式所使用的 Apache Flink 版本。此連接器用於取用作為應用程式來源的 Kinesis 串流中的資料，或將資料寫入作為應用程式輸出的 Kinesis 串流。

**注意**  
確保正在使用 [KPL 0.14.0 版本](https://mvnrepository.com/artifact/com.amazonaws/amazon-kinesis-producer/0.14.0)或更高版本建置連接器。

若要下載並安裝 Apache Flink 1.8.2 版來源程式碼，請執行下列動作：

1. 確保已安裝 [Apache Maven](https://maven.apache.org/)，並且 `JAVA_HOME` 環境變數指向 JDK 而不是 JRE。您可以使用以下命令來測試 Apache Maven 安裝：

   ```
   mvn -version
   ```

1. 下載 Apache Flink 版本 1.8.2 來源程式碼：

   ```
   wget https://archive.apache.org/dist/flink/flink-1.8.2/flink-1.8.2-src.tgz
   ```

1. 解壓縮 Apache Flink 來源程式碼：

   ```
   tar -xvf flink-1.8.2-src.tgz
   ```

1. 切換到 Apache Flink 來源程式碼目錄：

   ```
   cd flink-1.8.2
   ```

1. 編譯並安裝 Apache Flink：

   ```
   mvn clean install -Pinclude-kinesis -DskipTests
   ```
**注意**  
如果您在 Microsoft 視窗中編譯 Flink，則需要添加 `-Drat.skip=true` 參數。

## 使用 Apache Flink 1.8.2 建置應用程式
<a name="earlier-buildingapps-1_8"></a>

本節包含您用來建置與 Apache Flink 1.8.2 搭配使用的 Managed Service for Apache Flink 之元件的相關資訊。

將下列元件版本用於 Managed Service for Apache Flink 應用程式：


****  

| 元件 | 版本 | 
| --- | --- | 
| Java | 1.8 (建議使用) | 
| Apache Flink | 1.8.2 | 
| 用於 Flink 執行期 (aws-kinesisanalytics-runtime) 的 Managed Service for Apache Flink | 1.0.1 | 
| Managed Service for Apache Flink Flink 連接器 (aws-kinesisanalytics-flink) | 1.0.1 | 
| Apache Maven | 3.1 | 

若要編譯使用 Apache Flink 1.8.2 版的應用程式，請使用下列參數執行 Maven：

```
mvn package -Dflink.version=1.8.2
```

如需使用 Apache Flink 1.8.2 版的 Managed Service for Apache Flink 應用程式的 `pom.xml` 檔案範例，請參閱 [Managed Service for Apache Flink 1.8.2 入門](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/blob/master/GettingStarted_1_8/pom.xml)。

如需如何為 Managed Service for Apache Flink 應用程式建置及使用應用程式程式碼的相關資訊，請參閱[建立應用程式](how-creating-apps.md)。

## 使用 Apache Flink 1.6.2 建置應用程式
<a name="earlier-buildingapps-1_6"></a>

本節包含您用來建置與 Apache Flink 1.6.2 搭配使用的 Managed Service for Apache Flink 之元件的相關資訊。

將下列元件版本用於 Managed Service for Apache Flink 應用程式：


****  

| 元件 | 版本 | 
| --- | --- | 
| Java | 1.8 (建議使用) | 
| AWS Java 開發套件 | 1.11.379 | 
| Apache Flink | 1.6.2 | 
| 用於 Flink 執行期 (aws-kinesisanalytics-runtime) 的 Managed Service for Apache Flink | 1.0.1 | 
| Managed Service for Apache Flink Flink 連接器 (aws-kinesisanalytics-flink) | 1.0.1 | 
| Apache Maven | 3.1 | 
| Apache Beam | 不支援用於 Apache Flink 1.6.2。 | 

**注意**  
使用 Managed Service for Apache Flink 執行期 **1.0.1** 版時，可以在 `pom.xml` 檔案中指定 Apache Flink 的版本，而不是在編譯應用程式程式碼時使用 `-Dflink.version` 參數。

如需使用 Apache Flink 1.6.2 版的 Managed Service for Apache Flink 應用程式的 `pom.xml` 檔案範例，請參閱 [Managed Service for Apache Flink 1.6.2 入門](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/blob/master/GettingStarted_1_6/pom.xml)。

如需如何為 Managed Service for Apache Flink 應用程式建置及使用應用程式程式碼的相關資訊，請參閱[建立應用程式](how-creating-apps.md)。

## 升級應用程式
<a name="earlier-upgrading"></a>

若要升級 Amazon Managed Service for Apache Flink 應用程式的 Apache Flink 版本，請使用 AWS CLI、 AWS SDK CloudFormation或 來使用就地 Apache Flink 版本升級功能 AWS 管理主控台。如需詳細資訊，請參閱[針對 Apache Flink 使用就地版本升級](how-in-place-version-upgrades.md)。

您可以搭配 Amazon Managed Service for Apache Flink 處於 `READY`或 `RUNNING` 狀態的任何現有應用程式使用此功能。

## Apache Flink 1.6.2 和 1.8.2 中的可用連接器
<a name="earlier-connectors"></a>

Apache Flink 架構包含用於存取各種來源之資料的連接器。
+ 如需 Apache Flink 1.6.2 架構中可用連接器的相關資訊，請參閱 [Apache Flink 文件 (1.6.2)](https://ci.apache.org/projects/flink/flink-docs-release-1.6/) 中的[連接器 (1.6.2)](https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/connectors/)。
+ 如需 Apache Flink 1.8.2 架構中可用連接器的相關資訊，請參閱 [Apache Flink 文件 (1.8.2)](https://ci.apache.org/projects/flink/flink-docs-release-1.8/) 中的[連接器 (1.8.2)](https://ci.apache.org/projects/flink/flink-docs-release-1.8/dev/connectors/)。

## 入門：Flink 1.13.2
<a name="getting-started-1-13"></a>

本節將為您介紹 Managed Service for Apache Flink 和 DataStream API 的基本概念。它描述了建立和測試應用程式的可用選項。此外，它還提供了相關指示，以協助您安裝完成本指南教學課程以及建立您的第一個應用程式所需要的工具。

**Topics**
+ [Managed Service for Apache Flink 應用程式的元件](#getting-started-components-1-13)
+ [完成練習的先決條件](#setting-up-prerequisites-1-13)
+ [步驟 1：設定 AWS 帳戶並建立管理員使用者](#earlier-gs-1_13-setting-up)
+ [下一步驟](#earlier-gs-1_13-setup-awscli)
+ [步驟 2：設定 AWS Command Line Interface (AWS CLI)](#setup-awscli-1-13)
+ [步驟 3：建立並執行 Managed Service for Apache Flink 應用程式](#get-started-exercise-1-13)
+ [步驟 4：清除 AWS 資源](#getting-started-cleanup-1-13)
+ [步驟 5：後續步驟](#getting-started-next-steps-1-13)

### Managed Service for Apache Flink 應用程式的元件
<a name="getting-started-components-1-13"></a>

為了處理資料，您的 Managed Service for Apache Flink 應用程式使用 Java/Apache Maven 或 Scala 應用程式來處理輸入，使用 Apache Flink 執行期生成輸出。

Managed Service for Apache Flink 應用程式包含以下元件：
+ **執行期屬性：**您可以使用*執行期屬性*來設定應用程式，無需重新編譯應用程式的程式碼。
+ **來源：**應用程式使用*來源*來消耗資料。來源連接器從 Kinesis 資料串流、Amazon S3 儲存貯體等讀取資料。如需詳細資訊，請參閱[新增串流資料來源](how-sources.md)。
+ **運算子：**應用程式會使用一或多個*運算子*來處理資料。運算子可以轉換、富集或彙總資料。如需詳細資訊，請參閱[運算子](how-operators.md)。
+ **接收器：**應用程式透過使用*接收器*生成資料到外部來源。接收器連接器會將資料寫入 Kinesis 資料串流、Firehose 串流、Amazon S3 儲存貯體等。如需詳細資訊，請參閱[使用接收器寫入資料](how-sinks.md)。

建立、編譯和封裝應用程式的程式碼後，將程式碼套件上傳到 Amazon Simple Storage Service (Amazon S3) 儲存貯體。然後建立 Managed Service for Apache Flink 應用程式。您可以傳入程式碼套件位置，Kinesis 資料串流作為串流資料來源，以及通常是接收應用程式處理後的資料的串流或檔案位置。

### 完成練習的先決條件
<a name="setting-up-prerequisites-1-13"></a>

若要完成本指南中的步驟，您必須執行下列各項：
+ [Java 開發套件 (JDK) 版本 11](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html)。將 `JAVA_HOME` 環境變數設為指向您的 JDK 安裝位置。
+ 我們建議您使用開發環境 (如 [Eclipse Java Neon](http://www.eclipse.org/downloads/packages/release/neon/3) 或 [IntelliJ Idea](https://www.jetbrains.com/idea/)) 來開發和編譯您的應用程式。
+ [Git 用戶端](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。如果您尚未安裝 Git 用戶端，請先安裝。
+ [Apache Maven 編譯器外掛程式](https://maven.apache.org/plugins/maven-compiler-plugin/)。Maven 必須在您的工作路徑中。若要測試您的 Apache Maven 安裝，輸入以下資訊：

  ```
  $ mvn -version
  ```

開始執行，請移至 [設定 AWS 帳戶並建立管理員使用者](setting-up.md)。

### 步驟 1：設定 AWS 帳戶並建立管理員使用者
<a name="earlier-gs-1_13-setting-up"></a>

#### 註冊 AWS 帳戶
<a name="sign-up-for-aws"></a>

如果您沒有 AWS 帳戶，請完成下列步驟來建立一個。

**註冊 AWS 帳戶**

1. 開啟 [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup)。

1. 請遵循線上指示進行。

   部分註冊程序需接收來電或簡訊，並在電話鍵盤輸入驗證碼。

   當您註冊 時 AWS 帳戶，*AWS 帳戶根使用者*會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務，請將管理存取權指派給使用者，並且僅使用根使用者來執行[需要根使用者存取權的任務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時登錄 [https://aws.amazon.com/](https://aws.amazon.com/) 並選擇**我的帳戶**，以檢視您目前的帳戶活動並管理帳戶。

#### 建立具有管理存取權的使用者
<a name="create-an-admin"></a>

註冊 後 AWS 帳戶，請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center和建立管理使用者，以免將根使用者用於日常任務。

**保護您的 AWS 帳戶根使用者**

1.  選擇**根使用者**並輸入 AWS 帳戶 您的電子郵件地址，以帳戶擁有者[AWS 管理主控台](https://console.aws.amazon.com/)身分登入 。在下一頁中，輸入您的密碼。

   如需使用根使用者登入的說明，請參閱 *AWS 登入 使用者指南*中的[以根使用者身分登入](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

   如需說明，請參閱《*IAM 使用者指南*》中的[為您的 AWS 帳戶 根使用者 （主控台） 啟用虛擬 MFA 裝置](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**建立具有管理存取權的使用者**

1. 啟用 IAM Identity Center。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[啟用 AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)。

1. 在 IAM Identity Center 中，將管理存取權授予使用者。

   如需使用 IAM Identity Center 目錄 做為身分來源的教學課程，請參閱*AWS IAM Identity Center 《 使用者指南*》中的[使用預設值設定使用者存取 IAM Identity Center 目錄](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理存取權的使用者身分登入**
+ 若要使用您的 IAM Identity Center 使用者簽署，請使用建立 IAM Identity Center 使用者時傳送至您電子郵件地址的簽署 URL。

  如需使用 IAM Identity Center 使用者登入的說明，請參閱*AWS 登入 《 使用者指南*》中的[登入 AWS 存取入口網站](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**指派存取權給其他使用者**

1. 在 IAM Identity Center 中，建立一個許可集來遵循套用最低權限的最佳實務。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[建立許可集](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 將使用者指派至群組，然後對該群組指派單一登入存取權。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[新增群組](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

#### 授與程式設計存取權
<a name="setting-up-access-gs-13"></a>

如果使用者想要與 AWS 外部互動，則需要程式設計存取 AWS 管理主控台。授予程式設計存取權的方式取決於正在存取的使用者類型 AWS。

若要授予使用者程式設計存取權，請選擇下列其中一個選項。


****  

| 哪個使用者需要程式設計存取權？ | 到 | 根據 | 
| --- | --- | --- | 
| IAM | （建議） 使用主控台登入資料做為臨時登入資料，以簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)  | 
|  人力資源身分 (IAM Identity Center 中管理的使用者)  | 使用暫時登入資料簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)  | 
| IAM | 使用暫時登入資料簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs | 遵循《IAM 使用者指南》中[將臨時登入資料與 AWS 資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)搭配使用的指示。 | 
| IAM | (不建議使用)使用長期登入資料來簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)  | 

#### 下一步驟
<a name="earlier-gs-1_13-setting-up-next-step-2"></a>

[設定 AWS Command Line Interface (AWS CLI)](#earlier-gs-1_13-setup-awscli)

### 下一步驟
<a name="earlier-gs-1_13-setup-awscli"></a>

[步驟 2：設定 AWS Command Line Interface (AWS CLI)](#setup-awscli-1-13)

### 步驟 2：設定 AWS Command Line Interface (AWS CLI)
<a name="setup-awscli-1-13"></a>

在此步驟中，您會下載並設定 AWS CLI 以搭配 Managed Service for Apache Flink 使用。

**注意**  
本指南的入門練習均假設您使用帳戶中的管理員登入資料 (`adminuser`) 來執行操作。

**注意**  
如果您已 AWS CLI 安裝 ，您可能需要升級 以取得最新功能。如需詳細資訊，請參閱《AWS Command Line Interface 使用者指南》**中的[安裝 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)。若要檢查 的版本 AWS CLI，請執行下列命令：  

```
aws --version
```
本教學課程中的練習需要下列 AWS CLI 版本 或更新版本：  

```
aws-cli/1.16.63
```

**若要設定 AWS CLI**

1. 下載和設定 AWS CLI。如需相關指示，請參閱《AWS Command Line Interface 使用者指南》**中的下列主題：
   + [安裝 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)
   + [設定 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)

1. 在 AWS CLI `config` 檔案中為管理員使用者新增具名設定檔。當您執行 AWS CLI 命令時，使用此設定檔。如需具名描述檔的詳細資訊，請參閱《AWS Command Line Interface 使用者指南》**中的[具名描述檔](https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html)。

   ```
   [profile adminuser]
   aws_access_key_id = adminuser access key ID
   aws_secret_access_key = adminuser secret access key
   region = aws-region
   ```

   如需可用 AWS 區域的清單，請參閱 中的[區域和端點](https://docs.aws.amazon.com/general/latest/gr/rande.html)*Amazon Web Services 一般參考*。
**注意**  
本教學課程中的範例程式碼和命令使用美國西部 (奧勒岡) 區域。若要使用其他區域，請將本教學課程的程式碼和指令中的「區域」變更為您要使用的區域。

1. 在命令提示字元中輸入下列 help 命令，以驗證設定：

   ```
   aws help
   ```

設定 AWS 帳戶和 之後 AWS CLI，您可以嘗試下一個練習，在其中設定範例應用程式並測試end-to-end設定。

#### 下一步驟
<a name="setup-awscli-next-step-3-1-13"></a>

[步驟 3：建立並執行 Managed Service for Apache Flink 應用程式](#get-started-exercise-1-13)

### 步驟 3：建立並執行 Managed Service for Apache Flink 應用程式
<a name="get-started-exercise-1-13"></a>

在本練習中，您會建立 Managed Service for Apache Flink 應用程式，並將資料串流作為來源和目的地。

**Topics**
+ [建立兩個 Amazon Kinesis 資料串流](#get-started-exercise-1-1-13)
+ [將範例記錄寫入輸入串流](#get-started-exercise-2-1-13)
+ [下載並檢查 Apache Flink 串流 Java 程式碼](#get-started-exercise-5-1-13)
+ [編譯應用程式程式碼](#get-started-exercise-5.5-1-13)
+ [上傳 Apache Flink 串流 Java 程式碼](#get-started-exercise-6-1-13)
+ [建立並執行 Managed Service for Apache Flink 應用程式](#get-started-exercise-7-1-13)
+ [下一步驟](#get-started-exercise-next-step-4-1-13)

#### 建立兩個 Amazon Kinesis 資料串流
<a name="get-started-exercise-1-1-13"></a>

在為本練習建立 Managed Service for Apache Flink 應用程式之前，請先建立兩個 Kinesis 資料串流 (`ExampleInputStream` 和 `ExampleOutputStream`)。您的應用程式會將這些串流用於應用程式來源和目的地串流。

您可以使用 Amazon Kinesis 主控台或以下 AWS CLI 命令來建立這些串流。如需主控台指示，請參閱《Amazon Kinesis Data Streams 開發人員指南》中的[建立和更新資料串流](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html)**。

**建立資料串流 (AWS CLI)**

1. 若要建立第一個串流 (`ExampleInputStream`)，請使用下列 Amazon Kinesis `create-stream` AWS CLI 命令。

   ```
   $ aws kinesis create-stream \
   --stream-name ExampleInputStream \
   --shard-count 1 \
   --region us-west-2 \
   --profile adminuser
   ```

1. 若要建立應用程式用來寫入輸出的第二個串流，請執行相同的命令，將串流名稱變更為 `ExampleOutputStream`。

   ```
   $ aws kinesis create-stream \
   --stream-name ExampleOutputStream \
   --shard-count 1 \
   --region us-west-2 \
   --profile adminuser
   ```

#### 將範例記錄寫入輸入串流
<a name="get-started-exercise-2-1-13"></a>

在本節，您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

**注意**  
本節需要 [適用於 Python (Boto) 的 AWS SDK](https://aws.amazon.com/developers/getting-started/python/)。

1. 使用下列內容建立名為 `stock.py` 的檔案：

   ```
       import datetime
       import json
       import random
       import boto3
       STREAM_NAME = "ExampleInputStream"
       def get_data():
           return {
               'event_time': datetime.datetime.now().isoformat(),
               'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
               'price': round(random.random() * 100, 2)}
       def generate(stream_name, kinesis_client):
           while True:
               data = get_data()
               print(data)
               kinesis_client.put_record(
                   StreamName=stream_name,
                   Data=json.dumps(data),
                   PartitionKey="partitionkey")
       if __name__ == '__main__':
           generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
   ```

1. 在教學課程後半段，您會執行 `stock.py` 指令碼來傳送資料至應用程式。

   ```
   $ python stock.py
   ```

#### 下載並檢查 Apache Flink 串流 Java 程式碼
<a name="get-started-exercise-5-1-13"></a>

此範例的 Java 應用程式的程式碼可從 GitHub 下載。若要下載應用程式的程式碼，請執行下列動作：

1. 使用以下指令複製遠端儲存庫：

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. 導覽至 `amazon-kinesis-data-analytics-java-examples/GettingStarted` 目錄。

請留意下列與應用程式的程式碼相關的資訊：
+ [專案物件模型 (pom.xml)](https://maven.apache.org/guides/introduction/introduction-to-the-pom.html) 檔案包含應用程式的組態和相依性資訊，包括 Managed Service for Apache Flink 程式庫。
+ `BasicStreamingJob.java` 檔案包含定義應用程式功能的 `main` 方法。
+ 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源：

  ```
  return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
                  new SimpleStringSchema(), inputProperties));
  ```
+ 您的應用程式會建立來源與目的地連接器，以使用 `StreamExecutionEnvironment` 物件來存取外部資源。
+ 應用程式會使用靜態屬性來建立來源與目的地連接器。若要使用動態應用程式屬性，請使用 `createSourceFromApplicationProperties` 和 `createSinkFromApplicationProperties` 方法來建立連接器。這些方法會讀取應用程式的屬性，來設定連接器。

  如需執行期屬性的詳細資訊，請參閱[使用執行期屬性](how-properties.md)。

#### 編譯應用程式程式碼
<a name="get-started-exercise-5.5-1-13"></a>

在本節中，您會使用 Apache Maven 編譯器來建立應用程式的 Java 程式碼。如需安裝 Apache Maven 和 Java 開發套件 (JDK) 的相關資訊，請參閱 [滿足完成練習的先決條件](getting-started.md#setting-up-prerequisites)。

**編譯應用程式的程式碼**

1. 請將應用程式的程式碼編譯並封裝成 JAR 檔案，以使用應用程式的程式碼。您可以使用下列兩種方式的其中之一，編譯和封裝您的程式碼：
   + 使用命令列 Maven 工具。請在包含 `pom.xml` 檔案的目錄中執行下列命令，來建立 JAR 檔案：

     ```
     mvn package -Dflink.version=1.13.2
     ```
   + 設定開發環境。如需詳細資訊，請參閱您的開發環境文件。
**注意**  
提供的來源程式碼依賴於 Java 11 中的程式庫。

   您可以將您的套件做為 JAR 檔案上傳，或壓縮您的套件並做為 ZIP 檔案上傳。如果您使用 建立應用程式 AWS CLI，您可以指定程式碼內容類型 (JAR 或 ZIP)。

1. 如果編譯時發生錯誤，請確認您的 `JAVA_HOME` 環境變數是否正確設定。

如果應用程式成功編譯，則會建立下列檔案：

`target/aws-kinesis-analytics-java-apps-1.0.jar`

#### 上傳 Apache Flink 串流 Java 程式碼
<a name="get-started-exercise-6-1-13"></a>

在本節中，您會建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體並上傳您的應用程式的程式碼。

**上傳應用程式的程式碼**

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 選擇**建立儲存貯體**。

1. 在**儲存貯體名稱**欄位中，輸入 **ka-app-code-*<username>***。新增尾碼至儲存貯體名稱，例如您的使用者名稱，使其成為全域唯一的。選擇**下一步**。

1. 在**設定選項**步驟中，保留原有設定並選擇 **Next (下一步)**。

1. 在**設定許可**步驟中，保留原有設定並選擇 **Next (下一步)**。

1. 選擇**建立儲存貯體**。

1. 在 Amazon S3 主控台中，選擇 **ka-app-code-*<username>*** 儲存貯體，並選擇**上傳**。

1. 在**選取檔案**步驟中，選擇**新增檔案**。導覽至您在上一步驟中建立的 `aws-kinesis-analytics-java-apps-1.0.jar` 檔案。選擇**下一步**。

1. 您不需要變更物件的任何設定，因此請選擇**上傳**。

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

#### 建立並執行 Managed Service for Apache Flink 應用程式
<a name="get-started-exercise-7-1-13"></a>

您可以使用主控台或 AWS CLI建立和執行 Managed Service for Apache Flink 應用程式。

**注意**  
當您使用主控台建立應用程式時，系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch Logs 資源。當您使用 建立應用程式時 AWS CLI，您可以分別建立這些資源。

**Topics**
+ [建立並執行應用程式 （主控台）](#get-started-exercise-7-console-1-13)
+ [建立並執行應用程式 (AWS CLI)](#get-started-exercise-7-cli-1-13)

##### 建立並執行應用程式 （主控台）
<a name="get-started-exercise-7-console-1-13"></a>

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

##### 建立應用程式
<a name="get-started-exercise-7-console-create-1-13"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 儀表板上，選擇**建立分析應用程式**。

1. 在 **Managed Service for Apache Flink - 建立應用程式**頁面，提供應用程式詳細資訊，如下所示：
   + 在**應用程式名稱**中，輸入 **MyApplication**。
   + 對於 **Description (說明)**，輸入 **My java test app**。
   + 對於**​執行期**，選擇 **​Apache Flink**。
   + 將版本下拉式清單保留為 **Apache Flink 1.13 版**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。

**注意**  
使用主控台建立 Managed Service for Apache Flink 應用程式時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
政策：`kinesis-analytics-service-MyApplication-us-west-2`
角色：`kinesisanalytics-MyApplication-us-west-2`

##### 編輯 IAM 政策
<a name="get-started-exercise-7-console-iam-1-13"></a>

編輯 IAM 政策來新增存取 Kinesis 資料串流的許可。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇**政策**。選擇主控台為您在上一節所建立的 **`kinesis-analytics-service-MyApplication-us-west-2`** 政策。

1. 在**摘要**頁面，選擇**編輯政策**。請選擇 **JSON** 標籤。

1. 將下列政策範例的反白部分新增至政策。使用您的帳戶 ID 取代範例帳戶 ID (*012345678901*)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-username/aws-kinesis-analytics-java-apps-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "Sid": "DescribeLogStreams",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogStreams"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
               ]
           },
           {
               "Sid": "PutLogEvents",
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
               ]
           },
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           },
           {
               "Sid": "WriteOutputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream"
           }
       ]
   }
   ```

------

##### 設定應用程式
<a name="get-started-exercise-7-console-configure-1-13"></a>

1. 在**我的應用程式**頁面，選擇**設定**。

1. 在**設定應用程式**頁面，提供**程式碼位置**：
   + 對於 **Amazon S3 儲存貯體**，請輸入 **ka-app-code-*<username>***。
   + 對於 **Amazon S3 物件的路徑**，請輸入 **aws-kinesis-analytics-java-apps-1.0.jar**。

1. 在**存取應用程式資源**下，對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 輸入下列資料：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

1. 在**監控**下，確保**監控指標層級**設為**應用程式**。

1. 針對 **CloudWatch 記錄**，選取**啟用**核取方塊。

1. 選擇**更新**。

**注意**  
當您選擇啟用 Amazon CloudWatch 日誌時，Managed Service for Apache Flink 便會為您建立日誌群組和日誌串流。這些資源的名稱如下所示：  
日誌群組：`/aws/kinesis-analytics/MyApplication`
日誌串流：`kinesis-analytics-log-stream`

##### 執行應用程式
<a name="get-started-exercise-7-console-run-1-13"></a>

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業，即可檢視 Flink 作業圖表。

##### 停止應用程式
<a name="get-started-exercise-7-console-stop-1-13"></a>

在 **MyApplication** 頁面，選擇**停止**。確認動作。

##### 更新應用程式
<a name="get-started-exercise-7-console-update-1-13"></a>

您可以使用主控台更新應用程式設定，例如應用程式屬性、監控設定及位置或應用程式 JAR 的檔名。如果需要更新應用程式的程式碼，也可以從 Amazon S3 儲存貯體重新載入應用程式 JAR。

在 **MyApplication** 頁面，選擇**設定**。更新應用程式設定，然後選擇**更新**。

##### 建立並執行應用程式 (AWS CLI)
<a name="get-started-exercise-7-cli-1-13"></a>

在本節中，您可以使用 AWS CLI 來建立和執行 Managed Service for Apache Flink 應用程式。Managed Service for Apache Flink 使用 `kinesisanalyticsv2` AWS CLI 命令來建立 Managed Service for Apache Flink 應用程式並與之互動。

##### 建立許可政策
<a name="get-started-exercise-7-cli-policy-1-13"></a>

**注意**  
您必須為應用程式建立許可政策和角色。如果您未建立這些 IAM 資源，應用程式將無法存取其資料和日誌串流。

您會先建立具有兩條陳述式的許可政策：一條陳述式授與來源串流上 `read` 動作的許可，而另一條則是授與目的地串流上 `write` 動作的許可。您之後會將政策連接至 IAM 角色 (您會在下一節中建立)。因此，當 Managed Service for Apache Flink 擔任角色時，服務便具有從來源串流讀取並寫入目的地串流的所需許可。

使用以下程式碼來建立 `AKReadSourceStreamWriteSinkStream` 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 `username`。使用您的帳戶 ID 取代 Amazon Resource Name (ARN) (`012345678901`) 中的帳戶 ID。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": ["arn:aws:s3:::ka-app-code-username",
                "arn:aws:s3:::ka-app-code-username/*"
            ]
        },
        {
            "Sid": "ReadInputStream",
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
        },
        {
            "Sid": "WriteOutputStream",
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream"
        }
    ]
}
```

------

如需建立許可政策的逐步指示，請參閱《IAM 使用者指南》**中的[教學課程：建立和連接您的第一個客戶管理政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#part-two-create-policy)。

**注意**  
若要存取其他 Amazon 服務，您可以使用 適用於 Java 的 AWS SDK。Managed Service for Apache Flink 自動將 SDK 所需的憑證設定為與應用程式相關聯的服務執行 IAM 角色。無須採取額外的步驟。

##### 建立 IAM 角色
<a name="get-started-exercise-7-cli-role-1-13"></a>

在本節中，您會建立 Managed Service for Apache Flink 應用程式可以擔任的 IAM 角色，以便讀取來源串流與寫入目的地串流。

Managed Service for Apache Flink 沒有許可，無法存取串流。您可以透過 IAM 角色來授與這些許可。各 IAM 角色都有連接兩項政策。信任政策會授與擔任角色的 Managed Service for Apache Flink 許可，而許可政策決定了 Managed Service for Apache Flink 在擔任角色後可以執行的作業。

您會將在上一節中建立的許可政策連接至此角色。

**若要建立一個 IAM 角色**

1. 前往網址 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**角色** 、**建立角色**。

1. 在**選取可信身分類型**下，選擇 **AWS 服務**。在**選擇將使用此角色的服務**下，選擇 **Kinesis**。在 **Select your use case (選取您的使用案例)** 下，選擇 **Kinesis Analytics (Kinesis 分析)**。

   選擇**下一步：許可**。

1. 在**連接許可政策**頁面，選擇**下一步：檢閱**。您會在建立角色後連接許可政策。

1. 在**建立角色**頁面，輸入 **MF-stream-rw-role** 作為**角色名稱**。選擇建**立角色**。

   現在您已建立新的 IAM 角色，名為 `MF-stream-rw-role`。您接著會更新角色的信任和許可政策。

1. 將 許可政策連接到角色。
**注意**  
在此練習中，Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟中建立的政策，[建立許可政策](#get-started-exercise-7-cli-policy-1-13)。

   1. 在**摘要**頁面，選擇**許可**標籤。

   1. 選擇**連接政策**。

   1. 在搜尋方塊中，輸入 **AKReadSourceStreamWriteSinkStream** (您在上一節中建立的政策)。

   1. 選擇 **AKReadSourceStreamWriteSinkStream** 政策，然後選擇**連接政策**。

您現在已建立應用程式用於存取資源的服務執行角色。請記下新角色的 ARN。

如需建立角色的逐步說明，請參閱《IAM 使用者指南》**中的[建立 IAM 角色 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console)。

##### 建立 Managed Service for Apache Flink 應用程式
<a name="get-started-exercise-7-cli-create-1-13"></a>

1. 將下列 JSON 程式碼複製到名為 `create_request.json` 的檔案。使用您之前建立之角色的 ARN，取代範例角色 ARN。使用您在上一節中選擇的尾碼取代儲存貯體 ARN 尾碼 (`username`)。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (`012345678901`)。

   ```
   {
       "ApplicationName": "test",
       "ApplicationDescription": "my java test app",
       "RuntimeEnvironment": "FLINK-1_15",
       "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
       "ApplicationConfiguration": {
           "ApplicationCodeConfiguration": {
               "CodeContent": {
                   "S3ContentLocation": {
                       "BucketARN": "arn:aws:s3:::ka-app-code-username",
                       "FileKey": "aws-kinesis-analytics-java-apps-1.0.jar"
                   }
               },
               "CodeContentType": "ZIPFILE"
           },
           "EnvironmentProperties":  { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "flink.stream.initpos" : "LATEST",
                       "aws.region" : "us-west-2",
                       "AggregationEnabled" : "false"
                  }
               },
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2"
                  }
               }
            ]
         }
       }
   }
   ```

1. 使用前述請求執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) 動作以建立應用程式：

   ```
   aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
   ```

應用程式現在已建立。您會在下一個步驟中啟動應用程式。

##### 啟動應用程式
<a name="get-started-exercise-7-cli-start-1-13"></a>

在本節中，您會透過 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) 動作來啟動應用程式。

**啟動應用程式**

1. 將下列 JSON 程式碼複製到名為 `start_request.json` 的檔案。

   ```
   {
       "ApplicationName": "test",
       "RunConfiguration": {
           "ApplicationRestoreConfiguration": { 
            "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"
            }
       }
   }
   ```

1. 以啟動應用程式的上述請求，執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) 動作：

   ```
   aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
   ```

應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上查看 Managed Service for Apache Flink 指標，以確認應用程式是否正常運作。

##### 停止應用程式
<a name="get-started-exercise-7-cli-stop-1-13"></a>

在本節，您會使用該 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) 動作來停止應用程式。

**停止應用程式**

1. 將下列 JSON 程式碼複製到名為 `stop_request.json` 的檔案。

   ```
   {
      "ApplicationName": "test"
   }
   ```

1. 以停止應用程式的上述請求，執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) 動作：

   ```
   aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
   ```

現在已停止應用程式。

##### 新增 CloudWatch 記錄選項
<a name="get-started-exercise-7-cli-cw-1-13"></a>

您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需搭配應用程式使用 CloudWatch Logs 的相關資訊，請參閱 [在 Managed Service for Apache Flink 中設定應用程式記錄](cloudwatch-logs.md)。

##### 更新環境屬性
<a name="get-started-exercise-7-cli-update-env-1-13"></a>

在本節中，您可以使用 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) 動作來變更應用程式的環境屬性，無需重新編譯應用程式的程式碼。在此範例中，您會變更來源和目的地串流的「區域」。

**更新應用程式的環境屬性**

1. 將下列 JSON 程式碼複製到名為 `update_properties_request.json` 的檔案。

   ```
   {"ApplicationName": "test",
      "CurrentApplicationVersionId": 1,
      "ApplicationConfigurationUpdate": { 
         "EnvironmentPropertyUpdates": { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "flink.stream.initpos" : "LATEST",
                       "aws.region" : "us-west-2",
                       "AggregationEnabled" : "false"
                  }
               },
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2"
                  }
               }
            ]
         }
      }
   }
   ```

1. 使用前述請求執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) 動作以更新環境屬性：

   ```
   aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
   ```

##### 更新應用程式的程式碼
<a name="get-started-exercise-7-cli-update-code-1-13"></a>

當您需要使用新版本的程式碼套件更新應用程式程式碼時，您可以使用 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) AWS CLI 動作。

**注意**  
若要載入具有相同檔案名稱的新版應用程式的程式碼，必須指定新的物件版本。如需如何使用 Amazon S3 物件版本的詳細資訊，請參閱[啟用或停用版本控制](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/enable-versioning.html)。

若要使用 AWS CLI，請從 Amazon S3 儲存貯體中刪除先前的程式碼套件、上傳新版本，然後呼叫 `UpdateApplication`、指定相同的 Amazon S3 儲存貯體和物件名稱，以及新的物件版本。應用程式將以新的程式碼套件重新啟動。

`UpdateApplication` 動作的下列範例請求會重新載入應用程式的程式碼並重新啟動應用程式。將 `CurrentApplicationVersionId` 更新至目前的應用程式版本。您可以使用 `ListApplications` 或 `DescribeApplication` 動作來檢查目前的應用程式版本。使用您在[建立兩個 Amazon Kinesis 資料串流](get-started-exercise.md#get-started-exercise-1)一節中選擇的尾碼更新儲存貯體名稱尾碼 (*<username>*)。

```
{
    "ApplicationName": "test",
    "CurrentApplicationVersionId": 1,
    "ApplicationConfigurationUpdate": {
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username",
                    "FileKeyUpdate": "aws-kinesis-analytics-java-apps-1.0.jar",
                    "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU"
                }
            }
        }
    }
}
```

#### 下一步驟
<a name="get-started-exercise-next-step-4-1-13"></a>

[步驟 4：清除 AWS 資源](#getting-started-cleanup-1-13)

### 步驟 4：清除 AWS 資源
<a name="getting-started-cleanup-1-13"></a>

本節包含清除入門教學課程中建立 AWS 之資源的程序。

**Topics**
+ [刪除 Managed Service for Apache Flink 應用程式](#getting-started-cleanup-app-1-13)
+ [刪除您的 Kinesis 資料串流](#getting-started-cleanup-stream-1-13)
+ [刪除您的 Amazon S3 物件和儲存貯體](#getting-started-cleanup-s3-1-13)
+ [刪除您的 IAM 資源](#getting-started-cleanup-iam-1-13)
+ [刪除您的 CloudWatch 資源](#getting-started-cleanup-cw-1-13)
+ [下一步驟](#getting-started-cleanup-next-step-5-1-13)

#### 刪除 Managed Service for Apache Flink 應用程式
<a name="getting-started-cleanup-app-1-13"></a>

1. 在以下網址開啟 Kinesis 主控台：[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis)。

1. 在 Managed Service for Apache Flink 面板中，選擇 **MyApplication**。

1. 在應用程式的頁面，選擇**刪除**，然後確認刪除。

#### 刪除您的 Kinesis 資料串流
<a name="getting-started-cleanup-stream-1-13"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Kinesis Data Streams 面板中，選擇 **ExampleInputStream**。

1. 在 **ExampleInputStream** 頁面，選擇**刪除 Kinesis 串流**，然後確認刪除。

1. 在 **Kinesis 串流**頁面，依序選擇 **ExampleOutputStream**、**動作**和**刪除**，然後確認刪除。

#### 刪除您的 Amazon S3 物件和儲存貯體
<a name="getting-started-cleanup-s3-1-13"></a>

1. 在以下網址開啟 Amazon S3 主控台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 選擇 **ka-app-code-*<username>* 儲存貯體。**

1. 選擇**刪除**，然後輸入儲存貯體名稱以確認刪除。

#### 刪除您的 IAM 資源
<a name="getting-started-cleanup-iam-1-13"></a>

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽列中，選擇**政策**。

1. 在篩選器控制項中，輸入 **kinesis**。

1. 選擇 **kinesis-analytics-service-MyApplication-us-west-2** 政策。

1. 選擇**政策動作**，然後選擇**刪除**。

1. 在導覽列中，選擇**角色**。

1. 選擇 **kinesis-analytics-MyApplication-us-west-2** 角色。

1. 選擇**刪除角色**，然後確認刪除。

#### 刪除您的 CloudWatch 資源
<a name="getting-started-cleanup-cw-1-13"></a>

1. 在以下網址開啟 CloudWatch 主控台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在導覽列中，選擇**日誌**。

1. 選擇 **/aws/kinesis-analytics/MyApplication** 日誌群組。

1. 選擇**刪除日誌群組**，然後確認刪除。

#### 下一步驟
<a name="getting-started-cleanup-next-step-5-1-13"></a>

[步驟 5：後續步驟](#getting-started-next-steps-1-13)

### 步驟 5：後續步驟
<a name="getting-started-next-steps-1-13"></a>

現在您已建立並執行 Managed Service for Apache Flink 應用程式，請參閱下列資源，取得更進階的 Managed Service for Apache Flink 解決方案。
+ 適用於** [ Amazon Kinesis 的 AWS 串流資料解決方案](https://aws.amazon.com/solutions/implementations/aws-streaming-data-solution-for-amazon-kinesis/)：**適用於 Amazon Kinesis 的 AWS 串流資料解決方案會自動設定所需的 AWS 服務，以輕鬆擷取、儲存、處理和交付串流資料。該解決方案提供了多種解決串流資料使用案例的選項。Managed Service for Apache Flink 選項提供端對端串流 ETL 範例，展示真實世界的應用程式如何根據模擬的紐約計程車資料執行分析作業。解決方案會設定所有必要 AWS 的資源，例如 IAM 角色和政策、CloudWatch 儀表板和 CloudWatch 警示。
+ ** [AWS 適用於 Amazon MSK 的串流資料解決方案](https://aws.amazon.com/solutions/implementations/aws-streaming-data-solution-for-amazon-msk/)：**適用於 AWS Amazon MSK 的串流資料解決方案提供 AWS CloudFormation 範本，其中資料流經生產者、串流儲存體、消費者和目的地。
+ **[使用 Apache Flink 和 Apache Kafka 的點擊流實驗室](https://amazonmsk-labs.workshop.aws/en/mskkdaflinklab.html)**：點擊流使用案例的端對端實驗室，使用 Amazon Managed Streaming for Apache Kafka 進行串流儲存，使用適用於 Apache Flink 應用程式的 Managed Service for Apache Flink 進行串流處理。
+ **[Amazon Managed Service for Apache Flink 研討會](https://catalog.workshops.aws/managed-flink)：**在本研討會中，您將建置end-to-end串流架構，以近乎即時的方式擷取、分析和視覺化串流資料。您著手改善紐約市一家計程車公司的運營。您可以近乎即時地分析紐約市計程車車隊的遙測資料，以最佳化其車隊運作。
+ **[學習 Flink：動手訓練：](https://ci.apache.org/projects/flink/flink-docs-master/learn-flink/)**官方介紹性 Apache Flink 訓練課程，可協助您開始撰寫可擴展的串流 ETL、分析和事件驅動型應用程式。
**注意**  
請注意，Managed Service for Apache Flink 不支援本訓練中使用的 Apache Flink 版本 (1.12)。您可以在 Flink Managed Service for Apache Flink 中使用 Flink 1.15.2。

## 入門：Flink 1.11.1 - 棄用
<a name="earlier-gs-1_11"></a>

**注意**  
Apache Flink 社群已超過三年不支援 Apache Flink 1.**6、1.8 和 1.11** 版。我們計劃於 **2024 年 11 月 5** 日在 Amazon Managed Service for Apache Flink 中棄用這些版本。從這個日期開始，您將無法為這些 Flink 版本建立新的應用程式。此時您可以繼續執行現有的應用程式。您可以使用 Amazon Managed Service for Apache Flink 中的就地版本升級功能，以狀態升級應用程式。如需詳細資訊，請參閱 [針對 Apache Flink 使用就地版本升級](how-in-place-version-upgrades.md)。

本主題包含使用 Apache Flink 1.11.1 的[教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md)教學課程版本。

本節將為您介紹 Managed Service for Apache Flink 和 DataStream API 的基本概念。它描述了建立和測試應用程式的可用選項。此外，它還提供了相關指示，以協助您安裝完成本指南教學課程以及建立您的第一個應用程式所需要的工具。

**Topics**
+ [Managed Service for Apache Flink 應用程式的元件](#earlier-gs-1_11-components)
+ [完成練習的先決條件](#earlier-gs-1_11-setting-up-prerequisites)
+ [步驟 1：設定 AWS 帳戶並建立管理員使用者](#earlier-gs-1_11-setting-up)
+ [步驟 2：設定 AWS Command Line Interface (AWS CLI)](#earlier-gs-1_11-setup-awscli)
+ [步驟 3：建立並執行 Managed Service for Apache Flink 應用程式](#earlier-gs-1_11-get-started-exercise)
+ [步驟 4：清除 AWS 資源](#earlier-gs-1_11-cleanup)
+ [步驟 5：後續步驟](#earlier-gs-1_11-next-steps)

### Managed Service for Apache Flink 應用程式的元件
<a name="earlier-gs-1_11-components"></a>

為了處理資料，您的 Managed Service for Apache Flink 應用程式使用 Java/Apache Maven 或 Scala 應用程式來處理輸入，使用 Apache Flink 執行期生成輸出。

Managed Service for Apache Flink 應用程式包含以下元件：
+ **執行期屬性：**您可以使用*執行期屬性*來設定應用程式，無需重新編譯應用程式的程式碼。
+ **來源：**應用程式使用*來源*來消耗資料。來源連接器從 Kinesis 資料串流、Amazon S3 儲存貯體等讀取資料。如需詳細資訊，請參閱[新增串流資料來源](how-sources.md)。
+ **運算子：**應用程式會使用一或多個*運算子*來處理資料。運算子可以轉換、富集或彙總資料。如需詳細資訊，請參閱[運算子](how-operators.md)。
+ **接收器：**應用程式透過使用*接收器*生成資料到外部來源。接收器連接器會將資料寫入 Kinesis 資料串流、Firehose 串流、Amazon S3 儲存貯體等。如需詳細資訊，請參閱[使用接收器寫入資料](how-sinks.md)。

建立、編譯和封裝應用程式的程式碼後，將程式碼套件上傳到 Amazon Simple Storage Service (Amazon S3) 儲存貯體。然後建立 Managed Service for Apache Flink 應用程式。您可以傳入程式碼套件位置，Kinesis 資料串流作為串流資料來源，以及通常是接收應用程式處理後的資料的串流或檔案位置。

### 完成練習的先決條件
<a name="earlier-gs-1_11-setting-up-prerequisites"></a>

若要完成本指南中的步驟，您必須執行下列各項：
+ [Java 開發套件 (JDK) 版本 11](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html)。將 `JAVA_HOME` 環境變數設為指向您的 JDK 安裝位置。
+ 我們建議您使用開發環境 (如 [Eclipse Java Neon](http://www.eclipse.org/downloads/packages/release/neon/3) 或 [IntelliJ Idea](https://www.jetbrains.com/idea/)) 來開發和編譯您的應用程式。
+ [Git 用戶端](https://git-scm.com/book/en/v2/earlier-gs-1_11-Installing-Git)。如果您尚未安裝 Git 用戶端，請先安裝。
+ [Apache Maven 編譯器外掛程式](https://maven.apache.org/plugins/maven-compiler-plugin/)。Maven 必須在您的工作路徑中。若要測試您的 Apache Maven 安裝，輸入以下資訊：

  ```
  $ mvn -version
  ```

開始執行，請移至 [設定 AWS 帳戶並建立管理員使用者](setting-up.md)。

### 步驟 1：設定 AWS 帳戶並建立管理員使用者
<a name="earlier-gs-1_11-setting-up"></a>

#### 註冊 AWS 帳戶
<a name="sign-up-for-aws"></a>

如果您沒有 AWS 帳戶，請完成下列步驟來建立一個。

**註冊 AWS 帳戶**

1. 開啟 [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup)。

1. 請遵循線上指示進行。

   部分註冊程序需接收來電或簡訊，並在電話鍵盤輸入驗證碼。

   當您註冊 時 AWS 帳戶，*AWS 帳戶根使用者*會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務，請將管理存取權指派給使用者，並且僅使用根使用者來執行[需要根使用者存取權的任務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時登錄 [https://aws.amazon.com/](https://aws.amazon.com/) 並選擇**我的帳戶**，以檢視您目前的帳戶活動並管理帳戶。

#### 建立具有管理存取權的使用者
<a name="create-an-admin"></a>

註冊 後 AWS 帳戶，請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center和建立 管理使用者，以免將根使用者用於日常任務。

**保護您的 AWS 帳戶根使用者**

1.  選擇**根使用者**並輸入 AWS 帳戶 您的電子郵件地址，以帳戶擁有者[AWS 管理主控台](https://console.aws.amazon.com/)身分登入 。在下一頁中，輸入您的密碼。

   如需使用根使用者登入的說明，請參閱 *AWS 登入 使用者指南*中的[以根使用者身分登入](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

   如需說明，請參閱《*IAM 使用者指南*》中的[為您的 AWS 帳戶 根使用者 （主控台） 啟用虛擬 MFA 裝置](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**建立具有管理存取權的使用者**

1. 啟用 IAM Identity Center。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[啟用 AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)。

1. 在 IAM Identity Center 中，將管理存取權授予使用者。

   如需使用 IAM Identity Center 目錄 做為身分來源的教學課程，請參閱*AWS IAM Identity Center 《 使用者指南*》中的[使用預設值設定使用者存取 IAM Identity Center 目錄](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理存取權的使用者身分登入**
+ 若要使用您的 IAM Identity Center 使用者簽署，請使用建立 IAM Identity Center 使用者時傳送至您電子郵件地址的簽署 URL。

  如需使用 IAM Identity Center 使用者登入的說明，請參閱*AWS 登入 《 使用者指南*》中的[登入 AWS 存取入口網站](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**指派存取權給其他使用者**

1. 在 IAM Identity Center 中，建立一個許可集來遵循套用最低權限的最佳實務。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[建立許可集](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 將使用者指派至群組，然後對該群組指派單一登入存取權。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[新增群組](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

#### 授與程式設計存取權
<a name="setting-up-access-gs-11"></a>

如果使用者想要與 AWS 外部互動，則需要程式設計存取 AWS 管理主控台。授予程式設計存取權的方式取決於正在存取的使用者類型 AWS。

若要授予使用者程式設計存取權，請選擇下列其中一個選項。


****  

| 哪個使用者需要程式設計存取權？ | 到 | 根據 | 
| --- | --- | --- | 
| IAM | （建議） 使用主控台登入資料做為臨時登入資料，以簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)  | 
|  人力資源身分 (IAM Identity Center 中管理的使用者)  | 使用暫時登入資料簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)  | 
| IAM | 使用暫時登入資料簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs | 遵循《IAM 使用者指南》中[將臨時登入資料與 AWS 資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)搭配使用的指示。 | 
| IAM | (不建議使用)使用長期憑證簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)  | 

#### 下一步驟
<a name="earlier-gs-1_11-setting-up-next-step-2"></a>

[設定 AWS Command Line Interface (AWS CLI)](#earlier-gs-1_11-setup-awscli)

### 步驟 2：設定 AWS Command Line Interface (AWS CLI)
<a name="earlier-gs-1_11-setup-awscli"></a>

在此步驟中，您會下載並設定 AWS CLI 以搭配 Managed Service for Apache Flink 使用。

**注意**  
本指南的入門練習均假設您使用帳戶中的管理員登入資料 (`adminuser`) 來執行操作。

**注意**  
如果您已 AWS CLI 安裝 ，您可能需要升級 以取得最新功能。如需詳細資訊，請參閱《AWS Command Line Interface 使用者指南》**中的[安裝 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)。若要檢查 的版本 AWS CLI，請執行下列命令：  

```
aws --version
```
本教學課程中的練習需要以下 AWS CLI 版本 或更新版本：  

```
aws-cli/1.16.63
```

**若要設定 AWS CLI**

1. 下載和設定 AWS CLI。如需相關指示，請參閱《AWS Command Line Interface 使用者指南》**中的下列主題：
   + [安裝 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)
   + [設定 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-earlier-gs-1_11.html)

1. 在 AWS CLI `config` 檔案中為管理員使用者新增具名設定檔。當您執行 AWS CLI 命令時，使用此設定檔。如需具名描述檔的詳細資訊，請參閱《AWS Command Line Interface 使用者指南》**中的[具名描述檔](https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html)。

   ```
   [profile adminuser]
   aws_access_key_id = adminuser access key ID
   aws_secret_access_key = adminuser secret access key
   region = aws-region
   ```

   如需可用 AWS 區域的清單，請參閱 中的[區域和端點](https://docs.aws.amazon.com/general/latest/gr/rande.html)*Amazon Web Services 一般參考*。
**注意**  
本教學課程中的範例程式碼和命令使用美國西部 (奧勒岡) 區域。若要使用其他區域，請將本教學課程的程式碼和指令中的「區域」變更為您要使用的區域。

1. 在命令提示字元中輸入下列 help 命令，以驗證設定：

   ```
   aws help
   ```

設定 AWS 帳戶和 之後 AWS CLI，您可以嘗試下一個練習，在其中設定範例應用程式並測試end-to-end設定。

#### 下一步驟
<a name="earlier-gs-1_11-setup-awscli-next-step-3"></a>

[步驟 3：建立並執行 Managed Service for Apache Flink 應用程式](#earlier-gs-1_11-get-started-exercise)

### 步驟 3：建立並執行 Managed Service for Apache Flink 應用程式
<a name="earlier-gs-1_11-get-started-exercise"></a>

在本練習中，您會建立 Managed Service for Apache Flink 應用程式，並將資料串流作為來源和目的地。

**Topics**
+ [建立兩個 Amazon Kinesis 資料串流](#earlier-gs-1_11-get-started-exercise-1)
+ [將範例記錄寫入輸入串流](#earlier-gs-1_11-get-started-exercise-2)
+ [下載並檢查 Apache Flink 串流 Java 程式碼](#earlier-gs-1_11-get-started-exercise-5)
+ [編譯應用程式程式碼](#earlier-gs-1_11-get-started-exercise-5.5)
+ [上傳 Apache Flink 串流 Java 程式碼](#earlier-gs-1_11-get-started-exercise-6)
+ [建立並執行 Managed Service for Apache Flink 應用程式](#earlier-gs-1_11-get-started-exercise-7)
+ [下一步驟](#earlier-gs-1_11-get-started-exercise-next-step-4)

#### 建立兩個 Amazon Kinesis 資料串流
<a name="earlier-gs-1_11-get-started-exercise-1"></a>

在為本練習建立 Managed Service for Apache Flink 應用程式之前，請先建立兩個 Kinesis 資料串流 (`ExampleInputStream` 和 `ExampleOutputStream`)。您的應用程式會將這些串流用於應用程式來源和目的地串流。

您可以使用 Amazon Kinesis 主控台或以下 AWS CLI 命令來建立這些串流。如需主控台指示，請參閱《Amazon Kinesis Data Streams 開發人員指南》中的[建立和更新資料串流](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html)**。

**建立資料串流 (AWS CLI)**

1. 若要建立第一個串流 (`ExampleInputStream`)，請使用下列 Amazon Kinesis `create-stream` AWS CLI 命令。

   ```
   $ aws kinesis create-stream \
   --stream-name ExampleInputStream \
   --shard-count 1 \
   --region us-west-2 \
   --profile adminuser
   ```

1. 若要建立應用程式用來寫入輸出的第二個串流，請執行相同的命令，將串流名稱變更為 `ExampleOutputStream`。

   ```
   $ aws kinesis create-stream \
   --stream-name ExampleOutputStream \
   --shard-count 1 \
   --region us-west-2 \
   --profile adminuser
   ```

#### 將範例記錄寫入輸入串流
<a name="earlier-gs-1_11-get-started-exercise-2"></a>

在本節，您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

**注意**  
本節需要 [適用於 Python (Boto) 的 AWS SDK](https://aws.amazon.com/sdk-for-python/)。

1. 使用下列內容建立名為 `stock.py` 的檔案：

   ```
    
   import datetime
   import json
   import random
   import boto3
   
   STREAM_NAME = "ExampleInputStream"
   
   
   def get_data():
       return {
           "EVENT_TIME": datetime.datetime.now().isoformat(),
           "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]),
           "PRICE": round(random.random() * 100, 2),
       }
   
   
   def generate(stream_name, kinesis_client):
       while True:
           data = get_data()
           print(data)
           kinesis_client.put_record(
               StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey"
           )
   
   
   if __name__ == "__main__":
       generate(STREAM_NAME, boto3.client("kinesis"))
   ```

1. 在教學課程後半段，您會執行 `stock.py` 指令碼來傳送資料至應用程式。

   ```
   $ python stock.py
   ```

#### 下載並檢查 Apache Flink 串流 Java 程式碼
<a name="earlier-gs-1_11-get-started-exercise-5"></a>

此範例的 Java 應用程式的程式碼可從 GitHub 下載。若要下載應用程式的程式碼，請執行下列動作：

1. 使用以下指令複製遠端儲存庫：

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. 導覽至 `amazon-kinesis-data-analytics-java-examples/GettingStarted` 目錄。

請留意下列與應用程式的程式碼相關的資訊：
+ [專案物件模型 (pom.xml)](https://maven.apache.org/guides/introduction/introduction-to-the-pom.html) 檔案包含應用程式的組態和相依性資訊，包括 Managed Service for Apache Flink 程式庫。
+ `BasicStreamingJob.java` 檔案包含定義應用程式功能的 `main` 方法。
+ 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源：

  ```
  return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
                  new SimpleStringSchema(), inputProperties));
  ```
+ 您的應用程式會建立來源與目的地連接器，以使用 `StreamExecutionEnvironment` 物件來存取外部資源。
+ 應用程式會使用靜態屬性來建立來源與目的地連接器。若要使用動態應用程式屬性，請使用 `createSourceFromApplicationProperties` 和 `createSinkFromApplicationProperties` 方法來建立連接器。這些方法會讀取應用程式的屬性，來設定連接器。

  如需執行期屬性的詳細資訊，請參閱[使用執行期屬性](how-properties.md)。

#### 編譯應用程式程式碼
<a name="earlier-gs-1_11-get-started-exercise-5.5"></a>

在本節中，您會使用 Apache Maven 編譯器來建立應用程式的 Java 程式碼。如需安裝 Apache Maven 和 Java 開發套件 (JDK) 的相關資訊，請參閱 [滿足完成練習的先決條件](getting-started.md#setting-up-prerequisites)。

**編譯應用程式的程式碼**

1. 請將應用程式的程式碼編譯並封裝成 JAR 檔案，以使用應用程式的程式碼。您可以使用下列兩種方式的其中之一，編譯和封裝您的程式碼：
   + 使用命令列 Maven 工具。請在包含 `pom.xml` 檔案的目錄中執行下列命令，來建立 JAR 檔案：

     ```
     mvn package -Dflink.version=1.11.3
     ```
   + 設定開發環境。如需詳細資訊，請參閱您的開發環境文件。
**注意**  
提供的來源程式碼依賴於 Java 11 中的程式庫。確保您專案的 Java 版本是 11。

   您可以將您的套件做為 JAR 檔案上傳，或壓縮您的套件並做為 ZIP 檔案上傳。如果您使用 建立應用程式 AWS CLI，您可以指定程式碼內容類型 (JAR 或 ZIP)。

1. 如果編譯時發生錯誤，請確認您的 `JAVA_HOME` 環境變數是否正確設定。

如果應用程式成功編譯，則會建立下列檔案：

`target/aws-kinesis-analytics-java-apps-1.0.jar`

#### 上傳 Apache Flink 串流 Java 程式碼
<a name="earlier-gs-1_11-get-started-exercise-6"></a>

在本節中，您會建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體並上傳您的應用程式的程式碼。

**上傳應用程式的程式碼**

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 選擇**建立儲存貯體**。

1. 在**儲存貯體名稱**欄位中，輸入 **ka-app-code-*<username>***。新增尾碼至儲存貯體名稱，例如您的使用者名稱，使其成為全域唯一的。選擇**下一步**。

1. 在**設定選項**步驟中，保留原有設定並選擇 **Next (下一步)**。

1. 在**設定許可**步驟中，保留原有設定並選擇 **Next (下一步)**。

1. 選擇**建立儲存貯體**。

1. 在 Amazon S3 主控台中，選擇 **ka-app-code-*<username>*** 儲存貯體，並選擇**上傳**。

1. 在**選取檔案**步驟中，選擇**新增檔案**。導覽至您在上一步驟中建立的 `aws-kinesis-analytics-java-apps-1.0.jar` 檔案。選擇**下一步**。

1. 您不需要變更物件的任何設定，因此請選擇**上傳**。

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

#### 建立並執行 Managed Service for Apache Flink 應用程式
<a name="earlier-gs-1_11-get-started-exercise-7"></a>

您可以使用主控台或 AWS CLI建立和執行 Managed Service for Apache Flink 應用程式。

**注意**  
當您使用 主控台建立應用程式時，系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch Logs 資源。當您使用 建立應用程式時 AWS CLI，您可以分別建立這些資源。

**Topics**
+ [建立並執行應用程式 （主控台）](#earlier-gs-1_11-get-started-exercise-7-console)
+ [建立並執行應用程式 (AWS CLI)](#earlier-gs-1_11-get-started-exercise-7-cli)

##### 建立並執行應用程式 （主控台）
<a name="earlier-gs-1_11-get-started-exercise-7-console"></a>

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

##### 建立應用程式
<a name="earlier-gs-1_11-get-started-exercise-7-console-create"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 儀表板上，選擇**建立分析應用程式**。

1. 在 **Managed Service for Apache Flink - 建立應用程式**頁面，提供應用程式詳細資訊，如下所示：
   + 在**應用程式名稱**中，輸入 **MyApplication**。
   + 對於 **Description (說明)**，輸入 **My java test app**。
   + 對於**​執行期**，選擇 **​Apache Flink**。
   + 將版本下拉式清單保留為 **Apache Flink 1.11 版 (建議版本)**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。

**注意**  
使用主控台建立 Managed Service for Apache Flink 應用程式時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
政策：`kinesis-analytics-service-MyApplication-us-west-2`
角色：`kinesisanalytics-MyApplication-us-west-2`

##### 編輯 IAM 政策
<a name="earlier-gs-1_11-get-started-exercise-7-console-iam"></a>

編輯 IAM 政策來新增存取 Kinesis 資料串流的許可。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇**政策**。選擇主控台為您在上一節所建立的 **`kinesis-analytics-service-MyApplication-us-west-2`** 政策。

1. 在**摘要**頁面，選擇**編輯政策**。請選擇 **JSON** 標籤。

1. 將下列政策範例的反白部分新增至政策。使用您的帳戶 ID 取代範例帳戶 ID (*012345678901*)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-username/aws-kinesis-analytics-java-apps-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "Sid": "DescribeLogStreams",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogStreams"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
               ]
           },
           {
               "Sid": "PutLogEvents",
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
               ]
           },
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           },
           {
               "Sid": "WriteOutputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream"
           }
       ]
   }
   ```

------

##### 設定應用程式
<a name="earlier-gs-1_11-get-started-exercise-7-console-configure"></a>

1. 在**我的應用程式**頁面，選擇**設定**。

1. 在**設定應用程式**頁面，提供**程式碼位置**：
   + 對於 **Amazon S3 儲存貯體**，請輸入 **ka-app-code-*<username>***。
   + 對於 **Amazon S3 物件的路徑**，請輸入 **aws-kinesis-analytics-java-apps-1.0.jar**。

1. 在**存取應用程式資源**下，對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 在**屬性**下，為**群組 ID**輸入 **ProducerConfigProperties**。

1. 輸入以下應用程式屬性和數值：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

1. 在**監控**下，確保**監控指標層級**設為**應用程式**。

1. 針對 **CloudWatch 記錄**，選取**啟用**核取方塊。

1. 選擇**更新**。

**注意**  
當您選擇啟用 Amazon CloudWatch 日誌時，Managed Service for Apache Flink 便會為您建立日誌群組和日誌串流。這些資源的名稱如下所示：  
日誌群組：`/aws/kinesis-analytics/MyApplication`
日誌串流：`kinesis-analytics-log-stream`

##### 執行應用程式
<a name="earlier-gs-1_11-get-started-exercise-7-console-run"></a>

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業，即可檢視 Flink 作業圖表。

##### 停止應用程式
<a name="earlier-gs-1_11-get-started-exercise-7-console-stop"></a>

在 **MyApplication** 頁面，選擇**停止**。確認動作。

##### 更新應用程式
<a name="earlier-gs-1_11-get-started-exercise-7-console-update"></a>

您可以使用主控台更新應用程式設定，例如應用程式屬性、監控設定及位置或應用程式 JAR 的檔名。如果需要更新應用程式的程式碼，也可以從 Amazon S3 儲存貯體重新載入應用程式 JAR。

在 **MyApplication** 頁面，選擇**設定**。更新應用程式設定，然後選擇**更新**。

##### 建立並執行應用程式 (AWS CLI)
<a name="earlier-gs-1_11-get-started-exercise-7-cli"></a>

在本節中，您可以使用 AWS CLI 來建立和執行 Managed Service for Apache Flink 應用程式。Managed Service for Apache Flink 會使用 `kinesisanalyticsv2` AWS CLI 命令來建立並與 Managed Service for Apache Flink 應用程式互動。

##### 建立許可政策
<a name="earlier-gs-1_11-get-started-exercise-7-cli-policy"></a>

**注意**  
您必須為應用程式建立許可政策和角色。如果您未建立這些 IAM 資源，應用程式將無法存取其資料和日誌串流。

您會先建立具有兩條陳述式的許可政策：一條陳述式授與來源串流上 `read` 動作的許可，而另一條則是授與目的地串流上 `write` 動作的許可。您之後會將政策連接至 IAM 角色 (您會在下一節中建立)。因此，當 Managed Service for Apache Flink 擔任角色時，服務便具有從來源串流讀取並寫入目的地串流的所需許可。

使用以下程式碼來建立 `AKReadSourceStreamWriteSinkStream` 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 `username`。使用您的帳戶 ID 取代 Amazon Resource Name (ARN) (`012345678901`) 中的帳戶 ID。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": ["arn:aws:s3:::ka-app-code-username",
                "arn:aws:s3:::ka-app-code-username/*"
            ]
        },
        {
            "Sid": "ReadInputStream",
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
        },
        {
            "Sid": "WriteOutputStream",
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream"
        }
    ]
}
```

------

如需建立許可政策的逐步指示，請參閱《IAM 使用者指南》**中的[教學課程：建立和連接您的第一個客戶管理政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#part-two-create-policy)。

**注意**  
若要存取其他 Amazon 服務，您可以使用 適用於 Java 的 AWS SDK。Managed Service for Apache Flink 自動將 SDK 所需的憑證設定為與應用程式相關聯的服務執行 IAM 角色。無須採取額外的步驟。

##### 建立 IAM 角色
<a name="earlier-gs-1_11-get-started-exercise-7-cli-role"></a>

在本節中，您會建立 Managed Service for Apache Flink 應用程式可以擔任的 IAM 角色，以便讀取來源串流與寫入目的地串流。

Managed Service for Apache Flink 沒有許可，無法存取串流。您可以透過 IAM 角色來授與這些許可。各 IAM 角色都有連接兩項政策。信任政策會授與擔任角色的 Managed Service for Apache Flink 許可，而許可政策決定了 Managed Service for Apache Flink 在擔任角色後可以執行的作業。

您會將在上一節中建立的許可政策連接至此角色。

**若要建立一個 IAM 角色**

1. 前往網址 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**角色** 、**建立角色**。

1. 在**選取可信身分類型**下，選擇 **AWS 服務**。在**選擇將使用此角色的服務**下，選擇 **Kinesis**。在 **Select your use case (選取您的使用案例)** 下，選擇 **Kinesis Analytics (Kinesis 分析)**。

   選擇**下一步：許可**。

1. 在**連接許可政策**頁面，選擇**下一步：檢閱**。您會在建立角色後連接許可政策。

1. 在**建立角色**頁面，輸入 **MF-stream-rw-role** 作為**角色名稱**。選擇建**立角色**。

   現在您已建立新的 IAM 角色，名為 `MF-stream-rw-role`。您接著會更新角色的信任和許可政策。

1. 將 許可政策連接到角色。
**注意**  
在此練習中，Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟中建立的政策，[建立許可政策](#earlier-gs-1_11-get-started-exercise-7-cli-policy)。

   1. 在**摘要**頁面，選擇**許可**標籤。

   1. 選擇**連接政策**。

   1. 在搜尋方塊中，輸入 **AKReadSourceStreamWriteSinkStream** (您在上一節中建立的政策)。

   1. 選擇 **AKReadSourceStreamWriteSinkStream** 政策，然後選擇**連接政策**。

您現在已建立應用程式用於存取資源的服務執行角色。請記下新角色的 ARN。

如需建立角色的逐步說明，請參閱《IAM 使用者指南》**中的[建立 IAM 角色 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console)。

##### 建立 Managed Service for Apache Flink 應用程式
<a name="earlier-gs-1_11-get-started-exercise-7-cli-create"></a>

1. 將下列 JSON 程式碼複製到名為 `create_request.json` 的檔案。使用您之前建立之角色的 ARN，取代範例角色 ARN。使用您在上一節中選擇的尾碼取代儲存貯體 ARN 尾碼 (`username`)。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (`012345678901`)。

   ```
   {
       "ApplicationName": "test",
       "ApplicationDescription": "my java test app",
       "RuntimeEnvironment": "FLINK-1_11",
       "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
       "ApplicationConfiguration": {
           "ApplicationCodeConfiguration": {
               "CodeContent": {
                   "S3ContentLocation": {
                       "BucketARN": "arn:aws:s3:::ka-app-code-username",
                       "FileKey": "aws-kinesis-analytics-java-apps-1.0.jar"
                   }
               },
               "CodeContentType": "ZIPFILE"
           },
           "EnvironmentProperties":  { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "flink.stream.initpos" : "LATEST",
                       "aws.region" : "us-west-2",
                       "AggregationEnabled" : "false"
                  }
               },
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2"
                  }
               }
            ]
         }
       }
   }
   ```

1. 使用前述請求執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) 動作以建立應用程式：

   ```
   aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
   ```

應用程式現在已建立。您會在下一個步驟中啟動應用程式。

##### 啟動應用程式
<a name="earlier-gs-1_11-get-started-exercise-7-cli-start"></a>

在本節中，您會透過 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) 動作來啟動應用程式。

**啟動應用程式**

1. 將下列 JSON 程式碼複製到名為 `start_request.json` 的檔案。

   ```
   {
       "ApplicationName": "test",
       "RunConfiguration": {
           "ApplicationRestoreConfiguration": { 
            "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"
            }
       }
   }
   ```

1. 以啟動應用程式的上述請求，執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) 動作：

   ```
   aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
   ```

應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上查看 Managed Service for Apache Flink 指標，以確認應用程式是否正常運作。

##### 停止應用程式
<a name="earlier-gs-1_11-get-started-exercise-7-cli-stop"></a>

在本節，您會使用該 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) 動作來停止應用程式。

**停止應用程式**

1. 將下列 JSON 程式碼複製到名為 `stop_request.json` 的檔案。

   ```
   {
       "ApplicationName": "test"
   }
   ```

1. 以停止應用程式的上述請求，執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) 動作：

   ```
   aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
   ```

現在已停止應用程式。

##### 新增 CloudWatch 記錄選項
<a name="earlier-gs-1_11-get-started-exercise-7-cli-cw"></a>

您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需搭配應用程式使用 CloudWatch Logs 的相關資訊，請參閱 [在 Managed Service for Apache Flink 中設定應用程式記錄](cloudwatch-logs.md)。

##### 更新環境屬性
<a name="earlier-gs-1_11-get-started-exercise-7-cli-update-env"></a>

在本節中，您可以使用 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) 動作來變更應用程式的環境屬性，無需重新編譯應用程式的程式碼。在此範例中，您會變更來源和目的地串流的「區域」。

**更新應用程式的環境屬性**

1. 將下列 JSON 程式碼複製到名為 `update_properties_request.json` 的檔案。

   ```
   {"ApplicationName": "test",
      "CurrentApplicationVersionId": 1,
      "ApplicationConfigurationUpdate": { 
         "EnvironmentPropertyUpdates": { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "flink.stream.initpos" : "LATEST",
                       "aws.region" : "us-west-2",
                       "AggregationEnabled" : "false"
                  }
               },
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2"
                  }
               }
            ]
         }
      }
   }
   ```

1. 使用前述請求執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) 動作以更新環境屬性：

   ```
   aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
   ```

##### 更新應用程式的程式碼
<a name="earlier-gs-1_11-get-started-exercise-7-cli-update-code"></a>

當您需要使用新版本的程式碼套件來更新應用程式程式碼時，您可以使用 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) AWS CLI 動作。

**注意**  
若要載入具有相同檔案名稱的新版應用程式的程式碼，必須指定新的物件版本。如需如何使用 Amazon S3 物件版本的詳細資訊，請參閱[啟用或停用版本控制](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/enable-versioning.html)。

若要使用 AWS CLI，請從 Amazon S3 儲存貯體中刪除先前的程式碼套件、上傳新版本，然後呼叫 `UpdateApplication`、指定相同的 Amazon S3 儲存貯體和物件名稱，以及新的物件版本。應用程式將以新的程式碼套件重新啟動。

`UpdateApplication` 動作的下列範例請求會重新載入應用程式的程式碼並重新啟動應用程式。將 `CurrentApplicationVersionId` 更新至目前的應用程式版本。您可以使用 `ListApplications` 或 `DescribeApplication` 動作來檢查目前的應用程式版本。使用您在[建立兩個 Amazon Kinesis 資料串流](#earlier-gs-1_11-get-started-exercise-1)一節中選擇的尾碼更新儲存貯體名稱尾碼 (*<username>*)。

```
{
    "ApplicationName": "test",
    "CurrentApplicationVersionId": 1,
    "ApplicationConfigurationUpdate": {
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username",
                    "FileKeyUpdate": "aws-kinesis-analytics-java-apps-1.0.jar",
                    "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU"
                }
            }
        }
    }
}
```

#### 下一步驟
<a name="earlier-gs-1_11-get-started-exercise-next-step-4"></a>

[步驟 4：清除 AWS 資源](#earlier-gs-1_11-cleanup)

### 步驟 4：清除 AWS 資源
<a name="earlier-gs-1_11-cleanup"></a>

本節包含清除入門教學課程中建立 AWS 之資源的程序。

**Topics**
+ [刪除 Managed Service for Apache Flink 應用程式](#earlier-gs-1_11-cleanup-app)
+ [刪除您的 Kinesis 資料串流](#earlier-gs-1_11-cleanup-stream)
+ [刪除您的 Amazon S3 物件和儲存貯體](#earlier-gs-1_11-cleanup-s3)
+ [刪除 Rour IAM 資源](#earlier-gs-1_11-cleanup-iam)
+ [刪除您的 CloudWatch 資源](#earlier-gs-1_11-cleanup-cw)
+ [下一步驟](#earlier-gs-1_11-cleanup-next-step-5)

#### 刪除 Managed Service for Apache Flink 應用程式
<a name="earlier-gs-1_11-cleanup-app"></a>

1. 在以下網址開啟 Kinesis 主控台：[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis)。

1. 在 Managed Service for Apache Flink 面板中，選擇 **MyApplication**。

1. 在應用程式的頁面，選擇**刪除**，然後確認刪除。

#### 刪除您的 Kinesis 資料串流
<a name="earlier-gs-1_11-cleanup-stream"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Kinesis Data Streams 面板中，選擇 **ExampleInputStream**。

1. 在 **ExampleInputStream** 頁面，選擇**刪除 Kinesis 串流**，然後確認刪除。

1. 在 **Kinesis 串流**頁面，依序選擇 **ExampleOutputStream**、**動作**和**刪除**，然後確認刪除。

#### 刪除您的 Amazon S3 物件和儲存貯體
<a name="earlier-gs-1_11-cleanup-s3"></a>

1. 在以下網址開啟 Amazon S3 主控台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 選擇 **ka-app-code-*<username>* 儲存貯體。**

1. 選擇**刪除**，然後輸入儲存貯體名稱以確認刪除。

#### 刪除 Rour IAM 資源
<a name="earlier-gs-1_11-cleanup-iam"></a>

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽列中，選擇**政策**。

1. 在篩選器控制項中，輸入 **kinesis**。

1. 選擇 **kinesis-analytics-service-MyApplication-us-west-2** 政策。

1. 選擇**政策動作**，然後選擇**刪除**。

1. 在導覽列中，選擇**角色**。

1. 選擇 **kinesis-analytics-MyApplication-us-west-2** 角色。

1. 選擇**刪除角色**，然後確認刪除。

#### 刪除您的 CloudWatch 資源
<a name="earlier-gs-1_11-cleanup-cw"></a>

1. 在以下網址開啟 CloudWatch 主控台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在導覽列中，選擇**日誌**。

1. 選擇 **/aws/kinesis-analytics/MyApplication** 日誌群組。

1. 選擇**刪除日誌群組**，然後確認刪除。

#### 下一步驟
<a name="earlier-gs-1_11-cleanup-next-step-5"></a>

[步驟 5：後續步驟](#earlier-gs-1_11-next-steps)

### 步驟 5：後續步驟
<a name="earlier-gs-1_11-next-steps"></a>

現在您已建立並執行 Managed Service for Apache Flink 應用程式，請參閱下列資源，取得更進階的 Managed Service for Apache Flink 解決方案。
+ 適用於** [ Amazon Kinesis 的 AWS 串流資料解決方案](https://aws.amazon.com/solutions/implementations/aws-streaming-data-solution-for-amazon-kinesis/)：**適用於 Amazon Kinesis 的 AWS 串流資料解決方案會自動設定所需的 AWS 服務，以輕鬆擷取、儲存、處理和交付串流資料。該解決方案提供了多種解決串流資料使用案例的選項。Managed Service for Apache Flink 選項提供端對端串流 ETL 範例，展示真實世界的應用程式如何根據模擬的紐約計程車資料執行分析作業。解決方案會設定所有必要 AWS 的資源，例如 IAM 角色和政策、CloudWatch 儀表板和 CloudWatch 警示。
+ ** [AWS 適用於 Amazon MSK 的串流資料解決方案](https://aws.amazon.com/solutions/implementations/aws-streaming-data-solution-for-amazon-msk/)：**適用於 Amazon MSK 的串流資料解決方案提供 AWS CloudFormation 範本，其中資料流經生產者、串流儲存體、消費者和目的地。 AWS 
+ **[使用 Apache Flink 和 Apache Kafka 的點擊流實驗室](https://amazonmsk-labs.workshop.aws/en/mskkdaflinklab.html)**：點擊流使用案例的端對端實驗室，使用 Amazon Managed Streaming for Apache Kafka 進行串流儲存，使用適用於 Apache Flink 應用程式的 Managed Service for Apache Flink 進行串流處理。
+ **[Amazon Managed Service for Apache Flink 研討會](https://catalog.workshops.aws/managed-flink)：**在本研討會中，您將建置end-to-end串流架構，以近乎即時的方式擷取、分析和視覺化串流資料。您著手改善紐約市一家計程車公司的運營。您可以近乎即時地分析紐約市計程車車隊的遙測資料，以最佳化其車隊運作。
+ **[學習 Flink：動手訓練：](https://ci.apache.org/projects/flink/flink-docs-master/learn-flink/)**官方介紹性 Apache Flink 訓練課程，可協助您開始撰寫可擴展的串流 ETL、分析和事件驅動型應用程式。
**注意**  
請注意，Managed Service for Apache Flink 不支援本訓練中使用的 Apache Flink 版本 (1.12)。您可以在 Flink Managed Service for Apache Flink 中使用 Flink 1.15.2。
+ **[Apache Flink 程式碼範例](https://github.com/apache/flink/tree/master/flink-examples/flink-examples-streaming/src/main/java/org/apache/flink/streaming/examples)：**一個 GitHub 儲存庫，其中有各種 Apache Flink 應用程式範例。

## 入門：Flink 1.8.2 - 棄用
<a name="earlier-gs-1_8"></a>

**注意**  
Apache Flink 社群已超過三年不支援 Apache Flink **1.6、1.8 和 1.11** 版。我們計劃於 **2024 年 11 月 5** 日在 Amazon Managed Service for Apache Flink 中棄用這些版本。從這個日期開始，您將無法為這些 Flink 版本建立新的應用程式。此時您可以繼續執行現有的應用程式。您可以使用 Amazon Managed Service for Apache Flink 中的就地版本升級功能，以狀態升級應用程式。如需詳細資訊，請參閱 [針對 Apache Flink 使用就地版本升級](how-in-place-version-upgrades.md)。

本主題包含使用 Apache Flink 1.8.2 的[教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md)教學課程版本。

**Topics**
+ [Managed Service for Apache Flink 應用程式的元件](#getting-started-components)
+ [完成練習的先決條件](#su-1_8-prerequisites)
+ [步驟 1：設定 AWS 帳戶並建立管理員使用者](#earlier-gs-1_8-setting-up)
+ [步驟 2：設定 AWS Command Line Interface (AWS CLI)](#su-1_8-awscli)
+ [步驟 3：建立並執行 Managed Service for Apache Flink 應用程式](#earlier-gs-1_8-exercise)
+ [步驟 4：清除 AWS 資源](#earlier-gs-1_8-cleanup)

### Managed Service for Apache Flink 應用程式的元件
<a name="getting-started-components"></a>

為了處理資料，您的 Managed Service for Apache Flink 應用程式使用 Java/Apache Maven 或 Scala 應用程式來處理輸入，使用 Apache Flink 執行期生成輸出。

Managed Service for Apache Flink 應用程式包含以下元件：
+ **執行期屬性：**您可以使用*執行期屬性*來設定應用程式，無需重新編譯應用程式的程式碼。
+ **來源：**應用程式使用*來源*來消耗資料。來源連接器從 Kinesis 資料串流、Amazon S3 儲存貯體等讀取資料。如需詳細資訊，請參閱[新增串流資料來源](how-sources.md)。
+ **運算子：**應用程式會使用一或多個*運算子*來處理資料。運算子可以轉換、富集或彙總資料。如需詳細資訊，請參閱[運算子](how-operators.md)。
+ **接收器：**應用程式透過使用*接收器*生成資料到外部來源。接收器連接器會將資料寫入 Kinesis 資料串流、Firehose 串流、Amazon S3 儲存貯體等。如需詳細資訊，請參閱[使用接收器寫入資料](how-sinks.md)。

建立、編譯和封裝應用程式的程式碼後，將程式碼套件上傳到 Amazon Simple Storage Service (Amazon S3) 儲存貯體。然後建立 Managed Service for Apache Flink 應用程式。您可以傳入程式碼套件位置，Kinesis 資料串流作為串流資料來源，以及通常是接收應用程式處理後的資料的串流或檔案位置。

### 完成練習的先決條件
<a name="su-1_8-prerequisites"></a>

若要完成本指南中的步驟，您必須執行下列各項：
+ [Java 開發套件](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) (JDK) 版本 8。將 `JAVA_HOME` 環境變數設為指向您的 JDK 安裝位置。
+ 若要在本教學課程中使用 Apache Flink Kinesis 連接器，您必須下載並安裝 Apache Flink。如需詳細資訊，請參閱[將 Apache Flink Kinesis Streams 連接器與先前的 Apache Flink 版本搭配使用](#how-creating-apps-building-kinesis)。
+ 我們建議您使用開發環境 (如 [Eclipse Java Neon](http://www.eclipse.org/downloads/packages/release/neon/3) 或 [IntelliJ Idea](https://www.jetbrains.com/idea/)) 來開發和編譯您的應用程式。
+ [Git 用戶端](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。如果您尚未安裝 Git 用戶端，請先安裝。
+ [Apache Maven 編譯器外掛程式](https://maven.apache.org/plugins/maven-compiler-plugin/)。Maven 必須在您的工作路徑中。若要測試您的 Apache Maven 安裝，輸入以下資訊：

  ```
  $ mvn -version
  ```

開始執行，請移至 [步驟 1：設定 AWS 帳戶並建立管理員使用者](#earlier-gs-1_8-setting-up)。

### 步驟 1：設定 AWS 帳戶並建立管理員使用者
<a name="earlier-gs-1_8-setting-up"></a>

#### 註冊 AWS 帳戶
<a name="sign-up-for-aws"></a>

如果您沒有 AWS 帳戶，請完成下列步驟來建立一個。

**註冊 AWS 帳戶**

1. 開啟 [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup)。

1. 請遵循線上指示進行。

   部分註冊程序需接收來電或簡訊，並在電話鍵盤輸入驗證碼。

   當您註冊 時 AWS 帳戶，*AWS 帳戶根使用者*會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務，請將管理存取權指派給使用者，並且僅使用根使用者來執行[需要根使用者存取權的任務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時登錄 [https://aws.amazon.com/](https://aws.amazon.com/) 並選擇**我的帳戶**，以檢視您目前的帳戶活動並管理帳戶。

#### 建立具有管理存取權的使用者
<a name="create-an-admin"></a>

註冊 後 AWS 帳戶，請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center和建立管理使用者，以免將根使用者用於日常任務。

**保護您的 AWS 帳戶根使用者**

1.  選擇**根使用者**並輸入 AWS 帳戶 您的電子郵件地址，以帳戶擁有者[AWS 管理主控台](https://console.aws.amazon.com/)身分登入 。在下一頁中，輸入您的密碼。

   如需使用根使用者登入的說明，請參閱 *AWS 登入 使用者指南*中的[以根使用者身分登入](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

   如需說明，請參閱《*IAM 使用者指南*》中的[為您的 AWS 帳戶 根使用者 （主控台） 啟用虛擬 MFA 裝置](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**建立具有管理存取權的使用者**

1. 啟用 IAM Identity Center。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[啟用 AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)。

1. 在 IAM Identity Center 中，將管理存取權授予使用者。

   如需使用 IAM Identity Center 目錄 做為身分來源的教學課程，請參閱*AWS IAM Identity Center 《 使用者指南*》中的[使用預設值設定使用者存取 IAM Identity Center 目錄](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理存取權的使用者身分登入**
+ 若要使用您的 IAM Identity Center 使用者簽署，請使用建立 IAM Identity Center 使用者時傳送至您電子郵件地址的簽署 URL。

  如需使用 IAM Identity Center 使用者登入的說明，請參閱*AWS 登入 《 使用者指南*》中的[登入 AWS 存取入口網站](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**指派存取權給其他使用者**

1. 在 IAM Identity Center 中，建立一個許可集來遵循套用最低權限的最佳實務。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[建立許可集](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 將使用者指派至群組，然後對該群組指派單一登入存取權。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[新增群組](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

#### 授與程式設計存取權
<a name="setting-up-access-gs-8"></a>

如果使用者想要與 AWS 外部互動，則需要程式設計存取 AWS 管理主控台。授予程式設計存取權的方式取決於正在存取的使用者類型 AWS。

若要授予使用者程式設計存取權，請選擇下列其中一個選項。


****  

| 哪個使用者需要程式設計存取權？ | 到 | 根據 | 
| --- | --- | --- | 
| IAM | （建議） 使用主控台登入資料做為臨時登入資料，以簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)  | 
|  人力資源身分 (IAM Identity Center 中管理的使用者)  | 使用暫時登入資料簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)  | 
| IAM | 使用暫時登入資料簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs | 遵循《IAM 使用者指南》中[將臨時登入資料與 AWS 資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)搭配使用的指示。 | 
| IAM | (不建議使用)使用長期憑證簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)  | 

### 步驟 2：設定 AWS Command Line Interface (AWS CLI)
<a name="su-1_8-awscli"></a>

在此步驟中，您會下載並設定 AWS CLI 以搭配 Managed Service for Apache Flink 使用。

**注意**  
本指南的入門練習均假設您使用帳戶中的管理員登入資料 (`adminuser`) 來執行操作。

**注意**  
如果您已 AWS CLI 安裝 ，您可能需要升級 以取得最新功能。如需詳細資訊，請參閱《AWS Command Line Interface 使用者指南》**中的[安裝 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)。若要檢查 的版本 AWS CLI，請執行下列命令：  

```
aws --version
```
本教學課程中的練習需要以下 AWS CLI 版本 或更新版本：  

```
aws-cli/1.16.63
```

**若要設定 AWS CLI**

1. 下載和設定 AWS CLI。如需相關指示，請參閱《AWS Command Line Interface 使用者指南》**中的下列主題：
   + [安裝 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)
   + [設定 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)

1. 在 AWS CLI `config` 檔案中為管理員使用者新增具名設定檔。當您執行 AWS CLI 命令時，使用此設定檔。如需具名描述檔的詳細資訊，請參閱《AWS Command Line Interface 使用者指南》**中的[具名描述檔](https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html)。

   ```
   [profile adminuser]
   aws_access_key_id = adminuser access key ID
   aws_secret_access_key = adminuser secret access key
   region = aws-region
   ```

   如需可用區域的清單，請參閱 *Amazon Web Services 一般參考* 中的[區域與端點](https://docs.aws.amazon.com/general/latest/gr/rande.html)。
**注意**  
本教學課程中的範例程式碼和命令使用美國西部 (奧勒岡) 區域。若要使用不同的 AWS 區域，請將本教學課程程式碼和命令中的區域變更為您要使用的 區域。

1. 在命令提示字元中輸入下列 help 命令，以驗證設定：

   ```
   aws help
   ```

設定 AWS 帳戶和 之後 AWS CLI，您可以嘗試下一個練習，在其中設定範例應用程式並測試end-to-end設定。

#### 下一步驟
<a name="su-1_8-awscli-next-step-3"></a>

[步驟 3：建立並執行 Managed Service for Apache Flink 應用程式](#earlier-gs-1_8-exercise)

### 步驟 3：建立並執行 Managed Service for Apache Flink 應用程式
<a name="earlier-gs-1_8-exercise"></a>

在本練習中，您會建立 Managed Service for Apache Flink 應用程式，並將資料串流作為來源和目的地。

**Topics**
+ [建立兩個 Amazon Kinesis 資料串流](#earlier-gs-1_8-exercise-1)
+ [將範例記錄寫入輸入串流](#earlier-gs-1_8-exercise-2)
+ [下載並檢查 Apache Flink 串流 Java 程式碼](#earlier-gs-1_8-exercise-5)
+ [編譯應用程式程式碼](#earlier-gs-1_8-exercise-5.5)
+ [上傳 Apache Flink 串流 Java 程式碼](#earlier-gs-1_8-exercise-6)
+ [建立並執行 Managed Service for Apache Flink 應用程式](#earlier-gs-1_8-exercise-7)
+ [下一步驟](#earlier-gs-1_8-exercise-next-step-4)

#### 建立兩個 Amazon Kinesis 資料串流
<a name="earlier-gs-1_8-exercise-1"></a>

在為本練習建立 Managed Service for Apache Flink 應用程式之前，請先建立兩個 Kinesis 資料串流 (`ExampleInputStream` 和 `ExampleOutputStream`)。您的應用程式會將這些串流用於應用程式來源和目的地串流。

您可以使用 Amazon Kinesis 主控台或以下 AWS CLI 命令來建立這些串流。如需主控台指示，請參閱《Amazon Kinesis Data Streams 開發人員指南》中的[建立和更新資料串流](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html)**。

**建立資料串流 (AWS CLI)**

1. 若要建立第一個串流 (`ExampleInputStream`)，請使用下列 Amazon Kinesis `create-stream` AWS CLI 命令。

   ```
   $ aws kinesis create-stream \
   --stream-name ExampleInputStream \
   --shard-count 1 \
   --region us-west-2 \
   --profile adminuser
   ```

1. 若要建立應用程式用來寫入輸出的第二個串流，請執行相同的命令，將串流名稱變更為 `ExampleOutputStream`。

   ```
   $ aws kinesis create-stream \
   --stream-name ExampleOutputStream \
   --shard-count 1 \
   --region us-west-2 \
   --profile adminuser
   ```

#### 將範例記錄寫入輸入串流
<a name="earlier-gs-1_8-exercise-2"></a>

在本節，您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

**注意**  
本節需要 [適用於 Python (Boto) 的 AWS SDK](https://aws.amazon.com/developers/getting-started/python/)。

1. 使用下列內容建立名為 `stock.py` 的檔案：

   ```
    
   import datetime
   import json
   import random
   import boto3
   
   STREAM_NAME = "ExampleInputStream"
   
   
   def get_data():
       return {
           "EVENT_TIME": datetime.datetime.now().isoformat(),
           "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]),
           "PRICE": round(random.random() * 100, 2),
       }
   
   
   def generate(stream_name, kinesis_client):
       while True:
           data = get_data()
           print(data)
           kinesis_client.put_record(
               StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey"
           )
   
   
   if __name__ == "__main__":
       generate(STREAM_NAME, boto3.client("kinesis"))
   ```

1. 在教學課程後半段，您會執行 `stock.py` 指令碼來傳送資料至應用程式。

   ```
   $ python stock.py
   ```

#### 下載並檢查 Apache Flink 串流 Java 程式碼
<a name="earlier-gs-1_8-exercise-5"></a>

此範例的 Java 應用程式的程式碼可從 GitHub 下載。若要下載應用程式的程式碼，請執行下列動作：

1. 使用以下指令複製遠端儲存庫：

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. 導覽至 `amazon-kinesis-data-analytics-java-examples/GettingStarted_1_8` 目錄。

請留意下列與應用程式的程式碼相關的資訊：
+ [專案物件模型 (pom.xml)](https://maven.apache.org/guides/introduction/introduction-to-the-pom.html) 檔案包含應用程式的組態和相依性資訊，包括 Managed Service for Apache Flink 程式庫。
+ `BasicStreamingJob.java` 檔案包含定義應用程式功能的 `main` 方法。
+ 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源：

  ```
  return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
                  new SimpleStringSchema(), inputProperties));
  ```
+ 您的應用程式會建立來源與目的地連接器，以使用 `StreamExecutionEnvironment` 物件來存取外部資源。
+ 應用程式會使用靜態屬性來建立來源與目的地連接器。若要使用動態應用程式屬性，請使用 `createSourceFromApplicationProperties` 和 `createSinkFromApplicationProperties` 方法來建立連接器。這些方法會讀取應用程式的屬性，來設定連接器。

  如需執行期屬性的詳細資訊，請參閱[使用執行期屬性](how-properties.md)。

#### 編譯應用程式程式碼
<a name="earlier-gs-1_8-exercise-5.5"></a>

在本節中，您會使用 Apache Maven 編譯器來建立應用程式的 Java 程式碼。如需安裝 Apache Maven 和 Java 開發套件 (JDK) 的相關資訊，請參閱 [完成練習的先決條件](#su-1_8-prerequisites)。

**注意**  
**若要將 Kinesis 連接器用於 1.11 之前版本的 Apache Flink，你需要下載、建置和安裝 Apache Maven。如需詳細資訊，請參閱 [將 Apache Flink Kinesis Streams 連接器與先前的 Apache Flink 版本搭配使用](#how-creating-apps-building-kinesis)。**

**編譯應用程式的程式碼**

1. 請將應用程式的程式碼編譯並封裝成 JAR 檔案，以使用應用程式的程式碼。您可以使用下列兩種方式的其中之一，編譯和封裝您的程式碼：
   + 使用命令列 Maven 工具。請在包含 `pom.xml` 檔案的目錄中執行下列命令，來建立 JAR 檔案：

     ```
     mvn package -Dflink.version=1.8.2
     ```
   + 設定開發環境。如需詳細資訊，請參閱您的開發環境文件。
**注意**  
提供的來源程式碼依賴於 Java 1.8 中的程式庫。確保您專案的 Java 版本是 1.8。

   您可以將您的套件做為 JAR 檔案上傳，或壓縮您的套件並做為 ZIP 檔案上傳。如果您使用 建立應用程式 AWS CLI，您可以指定程式碼內容類型 (JAR 或 ZIP)。

1. 如果編譯時發生錯誤，請確認您的 `JAVA_HOME` 環境變數是否正確設定。

如果應用程式成功編譯，則會建立下列檔案：

`target/aws-kinesis-analytics-java-apps-1.0.jar`

#### 上傳 Apache Flink 串流 Java 程式碼
<a name="earlier-gs-1_8-exercise-6"></a>

在本節中，您會建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體並上傳您的應用程式的程式碼。

**上傳應用程式的程式碼**

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 選擇**建立儲存貯體**。

1. 在**儲存貯體名稱**欄位中，輸入 **ka-app-code-*<username>***。新增尾碼至儲存貯體名稱，例如您的使用者名稱，使其成為全域唯一的。選擇**下一步**。

1. 在**設定選項**步驟中，保留原有設定並選擇 **Next (下一步)**。

1. 在**設定許可**步驟中，保留原有設定並選擇 **Next (下一步)**。

1. 選擇**建立儲存貯體**。

1. 在 Amazon S3 主控台中，選擇 **ka-app-code-*<username>*** 儲存貯體，並選擇**上傳**。

1. 在**選取檔案**步驟中，選擇**新增檔案**。導覽至您在上一步驟中建立的 `aws-kinesis-analytics-java-apps-1.0.jar` 檔案。選擇**下一步**。

1. 您不需要變更物件的任何設定，因此請選擇**上傳**。

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

#### 建立並執行 Managed Service for Apache Flink 應用程式
<a name="earlier-gs-1_8-exercise-7"></a>

您可以使用主控台或 AWS CLI建立和執行 Managed Service for Apache Flink 應用程式。

**注意**  
當您使用 主控台建立應用程式時，系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch Logs 資源。當您使用 建立應用程式時 AWS CLI，您可以分別建立這些資源。

**Topics**
+ [建立並執行應用程式 （主控台）](#earlier-gs-1_8-exercise-7-console)
+ [建立並執行應用程式 (AWS CLI)](#earlier-gs-1_8-exercise-7-cli)

##### 建立並執行應用程式 （主控台）
<a name="earlier-gs-1_8-exercise-7-console"></a>

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

##### 建立應用程式
<a name="earlier-gs-1_8-exercise-7-console-create"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 儀表板上，選擇**建立分析應用程式**。

1. 在 **Managed Service for Apache Flink - 建立應用程式**頁面，提供應用程式詳細資訊，如下所示：
   + 在**應用程式名稱**中，輸入 **MyApplication**。
   + 對於 **Description (說明)**，輸入 **My java test app**。
   + 對於**​執行期**，選擇 **​Apache Flink**。
   + 將版本下拉式清單保留為 **Apache Flink 1.8 版 (建議版本)**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。

**注意**  
使用主控台建立 Managed Service for Apache Flink 應用程式時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
政策：`kinesis-analytics-service-MyApplication-us-west-2`
角色：`kinesisanalytics-MyApplication-us-west-2`

##### 編輯 IAM 政策
<a name="earlier-gs-1_8-exercise-7-console-iam"></a>

編輯 IAM 政策來新增存取 Kinesis 資料串流的許可。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇**政策**。選擇主控台為您在上一節所建立的 **`kinesis-analytics-service-MyApplication-us-west-2`** 政策。

1. 在**摘要**頁面，選擇**編輯政策**。請選擇 **JSON** 標籤。

1. 將下列政策範例的反白部分新增至政策。使用您的帳戶 ID 取代範例帳戶 ID (*012345678901*)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-username/aws-kinesis-analytics-java-apps-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "Sid": "DescribeLogStreams",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogStreams"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
               ]
           },
           {
               "Sid": "PutLogEvents",
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
               ]
           },
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           },
           {
               "Sid": "WriteOutputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream"
           }
       ]
   }
   ```

------

##### 設定應用程式
<a name="earlier-gs-1_8-exercise-7-console-configure"></a>

1. 在**我的應用程式**頁面，選擇**設定**。

1. 在**設定應用程式**頁面，提供**程式碼位置**：
   + 對於 **Amazon S3 儲存貯體**，請輸入 **ka-app-code-*<username>***。
   + 對於 **Amazon S3 物件的路徑**，請輸入 **aws-kinesis-analytics-java-apps-1.0.jar**。

1. 在**存取應用程式資源**下，對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 輸入以下應用程式屬性和數值：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

1. 在**監控**下，確保**監控指標層級**設為**應用程式**。

1. 針對 **CloudWatch 記錄**，選取**啟用**核取方塊。

1. 選擇**更新**。

**注意**  
當您選擇啟用 Amazon CloudWatch 日誌時，Managed Service for Apache Flink 便會為您建立日誌群組和日誌串流。這些資源的名稱如下所示：  
日誌群組：`/aws/kinesis-analytics/MyApplication`
日誌串流：`kinesis-analytics-log-stream`

##### 執行應用程式
<a name="earlier-gs-1_8-exercise-7-console-run"></a>

1. 在 **MyApplication** 頁面，選擇**執行**。確認動作。

1. 應用程式執行時，重新整理頁面。主控台會顯示 **Application graph (應用程式圖形)**。

##### 停止應用程式
<a name="earlier-gs-1_8-exercise-7-console-stop"></a>

在 **MyApplication** 頁面，選擇**停止**。確認動作。

##### 更新應用程式
<a name="earlier-gs-1_8-exercise-7-console-update"></a>

您可以使用主控台更新應用程式設定，例如應用程式屬性、監控設定及位置或應用程式 JAR 的檔名。如果需要更新應用程式的程式碼，也可以從 Amazon S3 儲存貯體重新載入應用程式 JAR。

在 **MyApplication** 頁面，選擇**設定**。更新應用程式設定，然後選擇**更新**。

##### 建立並執行應用程式 (AWS CLI)
<a name="earlier-gs-1_8-exercise-7-cli"></a>

在本節中，您可以使用 AWS CLI 來建立和執行 Managed Service for Apache Flink 應用程式。Managed Service for Apache Flink 使用 `kinesisanalyticsv2` AWS CLI 命令來建立 Managed Service for Apache Flink 應用程式並與之互動。

##### 建立許可政策
<a name="earlier-gs-1_8-exercise-7-cli-policy"></a>

**注意**  
您必須為應用程式建立許可政策和角色。如果您未建立這些 IAM 資源，應用程式將無法存取其資料和日誌串流。

您會先建立具有兩條陳述式的許可政策：一條陳述式授與來源串流上 `read` 動作的許可，而另一條則是授與目的地串流上 `write` 動作的許可。您之後會將政策連接至 IAM 角色 (您會在下一節中建立)。因此，當 Managed Service for Apache Flink 擔任角色時，服務便具有從來源串流讀取並寫入目的地串流的所需許可。

使用以下程式碼來建立 `AKReadSourceStreamWriteSinkStream` 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 `username`。使用您的帳戶 ID 取代 Amazon Resource Name (ARN) (`012345678901`) 中的帳戶 ID。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": ["arn:aws:s3:::ka-app-code-username",
                "arn:aws:s3:::ka-app-code-username/*"
            ]
        },
        {
            "Sid": "ReadInputStream",
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
        },
        {
            "Sid": "WriteOutputStream",
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream"
        }
    ]
}
```

------

如需建立許可政策的逐步指示，請參閱《IAM 使用者指南》**中的[教學課程：建立和連接您的第一個客戶管理政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#part-two-create-policy)。

**注意**  
若要存取其他 Amazon 服務，您可以使用 適用於 Java 的 AWS SDK。Managed Service for Apache Flink 自動將 SDK 所需的憑證設定為與應用程式相關聯的服務執行 IAM 角色。無須採取額外的步驟。

##### 建立 IAM 角色
<a name="earlier-gs-1_8-exercise-7-cli-role"></a>

在本節中，您會建立 Managed Service for Apache Flink 應用程式可以擔任的 IAM 角色，以便讀取來源串流與寫入目的地串流。

Managed Service for Apache Flink 沒有許可，無法存取串流。您可以透過 IAM 角色來授與這些許可。各 IAM 角色都有連接兩項政策。信任政策會授與擔任角色的 Managed Service for Apache Flink 許可，而許可政策決定了 Managed Service for Apache Flink 在擔任角色後可以執行的作業。

您會將在上一節中建立的許可政策連接至此角色。

**若要建立一個 IAM 角色**

1. 前往網址 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**角色** 、**建立角色**。

1. 在**選取可信身分類型**下，選擇 **AWS 服務**。在**選擇將使用此角色的服務**下，選擇 **Kinesis**。在 **Select your use case (選取您的使用案例)** 下，選擇 **Kinesis Analytics (Kinesis 分析)**。

   選擇**下一步：許可**。

1. 在**連接許可政策**頁面，選擇**下一步：檢閱**。您會在建立角色後連接許可政策。

1. 在**建立角色**頁面，輸入 **MF-stream-rw-role** 作為**角色名稱**。選擇建**立角色**。

   現在您已建立新的 IAM 角色，名為 `MF-stream-rw-role`。您接著會更新角色的信任和許可政策。

1. 將 許可政策連接到角色。
**注意**  
在此練習中，Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟中建立的政策，[建立許可政策](#earlier-gs-1_8-exercise-7-cli-policy)。

   1. 在**摘要**頁面，選擇**許可**標籤。

   1. 選擇**連接政策**。

   1. 在搜尋方塊中，輸入 **AKReadSourceStreamWriteSinkStream** (您在上一節中建立的政策)。

   1. 選擇 **AKReadSourceStreamWriteSinkStream** 政策，然後選擇**連接政策**。

您現在已建立應用程式用於存取資源的服務執行角色。請記下新角色的 ARN。

如需建立角色的逐步說明，請參閱《IAM 使用者指南》**中的[建立 IAM 角色 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console)。

##### 建立 Managed Service for Apache Flink 應用程式
<a name="earlier-gs-1_8-exercise-7-cli-create"></a>

1. 將下列 JSON 程式碼複製到名為 `create_request.json` 的檔案。使用您之前建立之角色的 ARN，取代範例角色 ARN。使用您在上一節中選擇的尾碼取代儲存貯體 ARN 尾碼 (`username`)。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (`012345678901`)。

   ```
   {
       "ApplicationName": "test",
       "ApplicationDescription": "my java test app",
       "RuntimeEnvironment": "FLINK-1_8",
       "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
       "ApplicationConfiguration": {
           "ApplicationCodeConfiguration": {
               "CodeContent": {
                   "S3ContentLocation": {
                       "BucketARN": "arn:aws:s3:::ka-app-code-username",
                       "FileKey": "aws-kinesis-analytics-java-apps-1.0.jar"
                   }
               },
               "CodeContentType": "ZIPFILE"
           },
           "EnvironmentProperties":  { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "flink.stream.initpos" : "LATEST",
                       "aws.region" : "us-west-2",
                       "AggregationEnabled" : "false"
                  }
               },
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2"
                  }
               }
            ]
         }
       }
   }
   ```

1. 使用前述請求執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) 動作以建立應用程式：

   ```
   aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
   ```

應用程式現在已建立。您會在下一個步驟中啟動應用程式。

##### 啟動應用程式
<a name="earlier-gs-1_8-exercise-7-cli-start"></a>

在本節中，您會透過 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) 動作來啟動應用程式。

**啟動應用程式**

1. 將下列 JSON 程式碼複製到名為 `start_request.json` 的檔案。

   ```
   {
       "ApplicationName": "test",
       "RunConfiguration": {
           "ApplicationRestoreConfiguration": { 
            "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"
            }
       }
   }
   ```

1. 以啟動應用程式的上述請求，執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) 動作：

   ```
   aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
   ```

應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上查看 Managed Service for Apache Flink 指標，以確認應用程式是否正常運作。

##### 停止應用程式
<a name="earlier-gs-1_8-exercise-7-cli-stop"></a>

在本節，您會使用該 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) 動作來停止應用程式。

**停止應用程式**

1. 將下列 JSON 程式碼複製到名為 `stop_request.json` 的檔案。

   ```
   {
      "ApplicationName": "test"
   }
   ```

1. 以停止應用程式的上述請求，執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) 動作：

   ```
   aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
   ```

現在已停止應用程式。

##### 新增 CloudWatch 記錄選項
<a name="earlier-gs-1_8-exercise-7-cli-cw"></a>

您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需搭配應用程式使用 CloudWatch Logs 的相關資訊，請參閱 [在 Managed Service for Apache Flink 中設定應用程式記錄](cloudwatch-logs.md)。

##### 更新環境屬性
<a name="earlier-gs-1_8-exercise-7-cli-update-env"></a>

在本節中，您可以使用 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) 動作來變更應用程式的環境屬性，無需重新編譯應用程式的程式碼。在此範例中，您會變更來源和目的地串流的「區域」。

**更新應用程式的環境屬性**

1. 將下列 JSON 程式碼複製到名為 `update_properties_request.json` 的檔案。

   ```
   {"ApplicationName": "test",
      "CurrentApplicationVersionId": 1,
      "ApplicationConfigurationUpdate": { 
         "EnvironmentPropertyUpdates": { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "flink.stream.initpos" : "LATEST",
                       "aws.region" : "us-west-2",
                       "AggregationEnabled" : "false"
                  }
               },
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2"
                  }
               }
            ]
         }
      }
   }
   ```

1. 使用前述請求執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) 動作以更新環境屬性：

   ```
   aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
   ```

##### 更新應用程式的程式碼
<a name="earlier-gs-1_8-exercise-7-cli-update-code"></a>

當您需要使用新版本的程式碼套件來更新應用程式程式碼時，您可以使用 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) AWS CLI 動作。

**注意**  
若要載入具有相同檔案名稱的新版應用程式的程式碼，必須指定新的物件版本。如需如何使用 Amazon S3 物件版本的詳細資訊，請參閱[啟用或停用版本控制](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/enable-versioning.html)。

若要使用 AWS CLI，請從 Amazon S3 儲存貯體刪除先前的程式碼套件、上傳新版本，然後呼叫 `UpdateApplication`、指定相同的 Amazon S3 儲存貯體和物件名稱，以及新的物件版本。應用程式將以新的程式碼套件重新啟動。

`UpdateApplication` 動作的下列範例請求會重新載入應用程式的程式碼並重新啟動應用程式。將 `CurrentApplicationVersionId` 更新至目前的應用程式版本。您可以使用 `ListApplications` 或 `DescribeApplication` 動作來檢查目前的應用程式版本。使用您在[建立兩個 Amazon Kinesis 資料串流](#earlier-gs-1_8-exercise-1)一節中選擇的尾碼更新儲存貯體名稱尾碼 (*<username>*)。

```
{
    "ApplicationName": "test",
    "CurrentApplicationVersionId": 1,
    "ApplicationConfigurationUpdate": {
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username",
                    "FileKeyUpdate": "aws-kinesis-analytics-java-apps-1.0.jar",
                    "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU"
                }
            }
        }
    }
}
```

#### 下一步驟
<a name="earlier-gs-1_8-exercise-next-step-4"></a>

[步驟 4：清除 AWS 資源](#earlier-gs-1_8-cleanup)

### 步驟 4：清除 AWS 資源
<a name="earlier-gs-1_8-cleanup"></a>

本節包含清除入門教學課程中建立 AWS 之資源的程序。

**Topics**
+ [刪除 Managed Service for Apache Flink 應用程式](#earlier-gs-1_8-cleanup-app)
+ [刪除您的 Kinesis 資料串流](#earlier-gs-1_8-cleanup-stream)
+ [刪除您的 Amazon S3 物件和儲存貯體](#earlier-gs-1_8-cleanup-s3)
+ [刪除您的 IAM 資源](#earlier-gs-1_8-cleanup-iam)
+ [刪除您的 CloudWatch 資源](#earlier-gs-1_8-cleanup-cw)

#### 刪除 Managed Service for Apache Flink 應用程式
<a name="earlier-gs-1_8-cleanup-app"></a>

1. 在以下網址開啟 Kinesis 主控台：[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis)。

1. 在 Managed Service for Apache Flink 面板中，選擇 **MyApplication**。

1. 選擇**設定**。

1. 在**快照**區段中，選擇**停用**，然後選擇**更新**。

1. 在應用程式的頁面，選擇**刪除**，然後確認刪除。

#### 刪除您的 Kinesis 資料串流
<a name="earlier-gs-1_8-cleanup-stream"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Kinesis Data Streams 面板中，選擇 **ExampleInputStream**。

1. 在 **ExampleInputStream** 頁面，選擇**刪除 Kinesis 串流**，然後確認刪除。

1. 在 **Kinesis 串流**頁面，依序選擇 **ExampleOutputStream**、**動作**和**刪除**，然後確認刪除。

#### 刪除您的 Amazon S3 物件和儲存貯體
<a name="earlier-gs-1_8-cleanup-s3"></a>

1. 在以下網址開啟 Amazon S3 主控台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 選擇 **ka-app-code-*<username>* 儲存貯體。**

1. 選擇**刪除**，然後輸入儲存貯體名稱以確認刪除。

#### 刪除您的 IAM 資源
<a name="earlier-gs-1_8-cleanup-iam"></a>

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽列中，選擇**政策**。

1. 在篩選器控制項中，輸入 **kinesis**。

1. 選擇 **kinesis-analytics-service-MyApplication-us-west-2** 政策。

1. 選擇**政策動作**，然後選擇**刪除**。

1. 在導覽列中，選擇**角色**。

1. 選擇 **kinesis-analytics-MyApplication-us-west-2** 角色。

1. 選擇**刪除角色**，然後確認刪除。

#### 刪除您的 CloudWatch 資源
<a name="earlier-gs-1_8-cleanup-cw"></a>

1. 在以下網址開啟 CloudWatch 主控台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在導覽列中，選擇**日誌**。

1. 選擇 **/aws/kinesis-analytics/MyApplication** 日誌群組。

1. 選擇**刪除日誌群組**，然後確認刪除。

## 入門：Flink 1.6.2 - 棄用
<a name="earlier-gs-1_6"></a>

**注意**  
Apache Flink 社群超過三年不支援 Apache Flink 1.**6、1.8 和 1.11** 版。我們計劃於 **2024 年 11 月 5** 日在 Amazon Managed Service for Apache Flink 中棄用這些版本。從這個日期開始，您將無法為這些 Flink 版本建立新的應用程式。此時您可以繼續執行現有的應用程式。您可以使用 Amazon Managed Service for Apache Flink 中的就地版本升級功能，以狀態升級應用程式。如需詳細資訊，請參閱 [針對 Apache Flink 使用就地版本升級](how-in-place-version-upgrades.md)。

本主題包含使用 Apache Flink 1.6.2 的[教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md)教學課程版本。

**Topics**
+ [Managed Service for Apache Flink 應用程式的元件](#earlier-gs-1_6-components)
+ [完成練習的先決條件](#su-1_6-prerequisites)
+ [步驟 1：設定 AWS 帳戶並建立管理員使用者](#earlier-gs-1_6-setting-up)
+ [步驟 2：設定 AWS Command Line Interface (AWS CLI)](#su-1_6-awscli)
+ [步驟 3：建立並執行 Managed Service for Apache Flink 應用程式](#earlier-gs-1_6-exercise)
+ [步驟 4：清除 AWS 資源](#earlier-gs-1_6-cleanup)

### Managed Service for Apache Flink 應用程式的元件
<a name="earlier-gs-1_6-components"></a>

為了處理資料，您的 Managed Service for Apache Flink 應用程式使用 Java/Apache Maven 或 Scala 應用程式來處理輸入，使用 Apache Flink 執行期生成輸出。

Managed Service for Apache Flink 應用程式包含以下元件：
+ **執行期屬性：**您可以使用*執行期屬性*來設定應用程式，無需重新編譯應用程式的程式碼。
+ **來源：**應用程式使用*來源*來消耗資料。來源連接器從 Kinesis 資料串流、Amazon S3 儲存貯體等讀取資料。如需詳細資訊，請參閱[新增串流資料來源](how-sources.md)。
+ **運算子：**應用程式會使用一或多個*運算子*來處理資料。運算子可以轉換、富集或彙總資料。如需詳細資訊，請參閱[運算子](how-operators.md)。
+ **接收器：**應用程式透過使用*接收器*生成資料到外部來源。接收器連接器會將資料寫入 Kinesis 資料串流、Firehose 串流、Amazon S3 儲存貯體等。如需詳細資訊，請參閱[使用接收器寫入資料](how-sinks.md)。

建立、編譯和封裝應用程式後，將程式碼套件上傳到 Amazon Simple Storage Service (Amazon S3) 儲存貯體。然後建立 Managed Service for Apache Flink 應用程式。您可以傳入程式碼套件位置，Kinesis 資料串流作為串流資料來源，以及通常是接收應用程式處理後的資料的串流或檔案位置。

### 完成練習的先決條件
<a name="su-1_6-prerequisites"></a>

若要完成本指南中的步驟，您必須執行下列各項：
+ [Java 開發套件](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) (JDK) 版本 8。將 `JAVA_HOME` 環境變數設為指向您的 JDK 安裝位置。
+ 我們建議您使用開發環境 (如 [Eclipse Java Neon](http://www.eclipse.org/downloads/packages/release/neon/3) 或 [IntelliJ Idea](https://www.jetbrains.com/idea/)) 來開發和編譯您的應用程式。
+ [Git 用戶端。](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)如果您尚未安裝 Git 用戶端，請先安裝。
+ [Apache Maven 編譯器外掛程式](https://maven.apache.org/plugins/maven-compiler-plugin/)。Maven 必須在您的工作路徑中。若要測試您的 Apache Maven 安裝，輸入以下資訊：

  ```
  $ mvn -version
  ```

開始執行，請移至 [步驟 1：設定 AWS 帳戶並建立管理員使用者](#earlier-gs-1_6-setting-up)。

### 步驟 1：設定 AWS 帳戶並建立管理員使用者
<a name="earlier-gs-1_6-setting-up"></a>

#### 註冊 AWS 帳戶
<a name="sign-up-for-aws"></a>

如果您沒有 AWS 帳戶，請完成下列步驟來建立一個。

**註冊 AWS 帳戶**

1. 開啟 [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup)。

1. 請遵循線上指示進行。

   部分註冊程序需接收來電或簡訊，並在電話鍵盤輸入驗證碼。

   當您註冊 時 AWS 帳戶，*AWS 帳戶根使用者*會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務，請將管理存取權指派給使用者，並且僅使用根使用者來執行[需要根使用者存取權的任務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時登錄 [https://aws.amazon.com/](https://aws.amazon.com/) 並選擇**我的帳戶**，以檢視您目前的帳戶活動並管理帳戶。

#### 建立具有管理存取權的使用者
<a name="create-an-admin"></a>

註冊 後 AWS 帳戶，請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center和建立 管理使用者，以免將根使用者用於日常任務。

**保護您的 AWS 帳戶根使用者**

1.  選擇**根使用者**並輸入 AWS 帳戶 您的電子郵件地址，以帳戶擁有者[AWS 管理主控台](https://console.aws.amazon.com/)身分登入 。在下一頁中，輸入您的密碼。

   如需使用根使用者登入的說明，請參閱 *AWS 登入 使用者指南*中的[以根使用者身分登入](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

   如需說明，請參閱《*IAM 使用者指南*》中的[為您的 AWS 帳戶 根使用者 （主控台） 啟用虛擬 MFA 裝置](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**建立具有管理存取權的使用者**

1. 啟用 IAM Identity Center。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[啟用 AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)。

1. 在 IAM Identity Center 中，將管理存取權授予使用者。

   如需使用 IAM Identity Center 目錄 做為身分來源的教學課程，請參閱*AWS IAM Identity Center 《 使用者指南*》中的[使用預設值設定使用者存取 IAM Identity Center 目錄](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理存取權的使用者身分登入**
+ 若要使用您的 IAM Identity Center 使用者簽署，請使用建立 IAM Identity Center 使用者時傳送至您電子郵件地址的簽署 URL。

  如需使用 IAM Identity Center 使用者登入的說明，請參閱*AWS 登入 《 使用者指南*》中的[登入 AWS 存取入口網站](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**指派存取權給其他使用者**

1. 在 IAM Identity Center 中，建立一個許可集來遵循套用最低權限的最佳實務。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[建立許可集](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 將使用者指派至群組，然後對該群組指派單一登入存取權。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[新增群組](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

#### 授與程式設計存取權
<a name="setting-up-access-gs-6"></a>

如果使用者想要與 AWS 外部互動，則需要程式設計存取 AWS 管理主控台。授予程式設計存取權的方式取決於正在存取的使用者類型 AWS。

若要授予使用者程式設計存取權，請選擇下列其中一個選項。


****  

| 哪個使用者需要程式設計存取權？ | 到 | 根據 | 
| --- | --- | --- | 
| IAM | （建議） 使用主控台登入資料做為臨時登入資料，以簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)  | 
|  人力資源身分 (IAM Identity Center 中管理的使用者)  | 使用暫時登入資料簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)  | 
| IAM | 使用暫時登入資料簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs | 遵循《IAM 使用者指南》中[將臨時登入資料與 AWS 資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)搭配使用的指示。 | 
| IAM | (不建議使用)使用長期憑證簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)  | 

### 步驟 2：設定 AWS Command Line Interface (AWS CLI)
<a name="su-1_6-awscli"></a>

在此步驟中，您會下載並設定 AWS CLI 以搭配 Managed Service for Apache Flink 使用。

**注意**  
本指南的入門練習均假設您使用帳戶中的管理員登入資料 (`adminuser`) 來執行操作。

**注意**  
如果您已 AWS CLI 安裝 ，您可能需要升級 以取得最新功能。如需詳細資訊，請參閱《AWS Command Line Interface 使用者指南》**中的[安裝 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)。若要檢查 的版本 AWS CLI，請執行下列命令：  

```
aws --version
```
本教學課程中的練習需要以下 AWS CLI 版本 或更新版本：  

```
aws-cli/1.16.63
```

**若要設定 AWS CLI**

1. 下載和設定 AWS CLI。如需相關指示，請參閱《AWS Command Line Interface 使用者指南》**中的下列主題：
   + [安裝 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)
   + [設定 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)

1. 在 AWS CLI `config` 檔案中為管理員使用者新增具名設定檔。當您執行 AWS CLI 命令時，使用此設定檔。如需具名描述檔的詳細資訊，請參閱《AWS Command Line Interface 使用者指南》**中的[具名描述檔](https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html)。

   ```
   [profile adminuser]
   aws_access_key_id = adminuser access key ID
   aws_secret_access_key = adminuser secret access key
   region = aws-region
   ```

   如需可用 AWS 區域的清單，請參閱 中的[區域和端點](https://docs.aws.amazon.com/general/latest/gr/rande.html)*Amazon Web Services 一般參考*。
**注意**  
本教學課程中的範例程式碼和命令使用美國西部 (奧勒岡) 區域。若要使用其他區域，請將本教學課程的程式碼和指令中的「區域」變更為您要使用的區域。

1. 在命令提示字元中輸入下列 help 命令，以驗證設定：

   ```
   aws help
   ```

設定 AWS 帳戶和 之後 AWS CLI，您可以嘗試下一個練習，在其中設定範例應用程式並測試end-to-end設定。

#### 下一步驟
<a name="su-1_6-next-step-3"></a>

[步驟 3：建立並執行 Managed Service for Apache Flink 應用程式](#earlier-gs-1_6-exercise)

### 步驟 3：建立並執行 Managed Service for Apache Flink 應用程式
<a name="earlier-gs-1_6-exercise"></a>

在本練習中，您會建立 Managed Service for Apache Flink 應用程式，並將資料串流作為來源和目的地。

**Topics**
+ [建立兩個 Amazon Kinesis 資料串流](#earlier-gs-1_6-exercise-1)
+ [將範例記錄寫入輸入串流](#earlier-gs-1_6-exercise-2)
+ [下載並檢查 Apache Flink 串流 Java 程式碼](#earlier-gs-1_6-exercise-5)
+ [編譯應用程式程式碼](#earlier-gs-1_6-exercise-5.5)
+ [上傳 Apache Flink 串流 Java 程式碼](#earlier-gs-1_6-exercise-6)
+ [建立並執行 Managed Service for Apache Flink 應用程式](#earlier-gs-1_6-exercise-7)

#### 建立兩個 Amazon Kinesis 資料串流
<a name="earlier-gs-1_6-exercise-1"></a>

在為本練習建立 Managed Service for Apache Flink 應用程式之前，請先建立兩個 Kinesis 資料串流 (`ExampleInputStream` 和 `ExampleOutputStream`)。您的應用程式會將這些串流用於應用程式來源和目的地串流。

您可以使用 Amazon Kinesis 主控台或以下 AWS CLI 命令來建立這些串流。如需主控台指示，請參閱《Amazon Kinesis Data Streams 開發人員指南》中的[建立和更新資料串流](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html)**。

**建立資料串流 (AWS CLI)**

1. 若要建立第一個串流 (`ExampleInputStream`)，請使用下列 Amazon Kinesis `create-stream` AWS CLI 命令。

   ```
   $ aws kinesis create-stream \
   --stream-name ExampleInputStream \
   --shard-count 1 \
   --region us-west-2 \
   --profile adminuser
   ```

1. 若要建立應用程式用來寫入輸出的第二個串流，請執行相同的命令，將串流名稱變更為 `ExampleOutputStream`。

   ```
   $ aws kinesis create-stream \
   --stream-name ExampleOutputStream \
   --shard-count 1 \
   --region us-west-2 \
   --profile adminuser
   ```

#### 將範例記錄寫入輸入串流
<a name="earlier-gs-1_6-exercise-2"></a>

在本節，您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

**注意**  
本節需要 [適用於 Python (Boto) 的 AWS SDK](https://aws.amazon.com/developers/getting-started/python/)。

1. 使用下列內容建立名為 `stock.py` 的檔案：

   ```
    
   import datetime
   import json
   import random
   import boto3
   
   STREAM_NAME = "ExampleInputStream"
   
   
   def get_data():
       return {
           "EVENT_TIME": datetime.datetime.now().isoformat(),
           "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]),
           "PRICE": round(random.random() * 100, 2),
       }
   
   
   def generate(stream_name, kinesis_client):
       while True:
           data = get_data()
           print(data)
           kinesis_client.put_record(
               StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey"
           )
   
   
   if __name__ == "__main__":
       generate(STREAM_NAME, boto3.client("kinesis"))
   ```

1. 在教學課程後半段，您會執行 `stock.py` 指令碼來傳送資料至應用程式。

   ```
   $ python stock.py
   ```

#### 下載並檢查 Apache Flink 串流 Java 程式碼
<a name="earlier-gs-1_6-exercise-5"></a>

此範例的 Java 應用程式的程式碼可從 GitHub 下載。若要下載應用程式的程式碼，請執行下列動作：

1. 使用以下指令複製遠端儲存庫：

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. 導覽至 `amazon-kinesis-data-analytics-java-examples/GettingStarted_1_6` 目錄。

請留意下列與應用程式的程式碼相關的資訊：
+ [專案物件模型 (pom.xml)](https://maven.apache.org/guides/introduction/introduction-to-the-pom.html) 檔案包含應用程式的組態和相依性資訊，包括 Managed Service for Apache Flink 程式庫。
+ `BasicStreamingJob.java` 檔案包含定義應用程式功能的 `main` 方法。
+ 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源：

  ```
  return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
                  new SimpleStringSchema(), inputProperties));
  ```
+ 您的應用程式會建立來源與目的地連接器，以使用 `StreamExecutionEnvironment` 物件來存取外部資源。
+ 應用程式會使用靜態屬性來建立來源與目的地連接器。若要使用動態應用程式屬性，請使用 `createSourceFromApplicationProperties` 和 `createSinkFromApplicationProperties` 方法來建立連接器。這些方法會讀取應用程式的屬性，來設定連接器。

  如需執行期屬性的詳細資訊，請參閱[使用執行期屬性](how-properties.md)。

#### 編譯應用程式程式碼
<a name="earlier-gs-1_6-exercise-5.5"></a>

在本節中，您會使用 Apache Maven 編譯器來建立應用程式的 Java 程式碼。如需安裝 Apache Maven 和 Java 開發套件 (JDK) 的相關資訊，請參閱 [完成練習的先決條件](#su-1_6-prerequisites)。

**注意**  
**若要將 Kinesis 連接器用於 1.11 之前版本的 Apache Flink，您需要下載連接器的來源程式碼，並如 [Apache Flink 文件](https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/connectors/kinesis.html)所述建置**。

**編譯應用程式的程式碼**

1. 請將應用程式的程式碼編譯並封裝成 JAR 檔案，以使用應用程式的程式碼。您可以使用下列兩種方式的其中之一，編譯和封裝您的程式碼：
   + 使用命令列 Maven 工具。請在包含 `pom.xml` 檔案的目錄中執行下列命令，來建立 JAR 檔案：

     ```
     mvn package
     ```
**注意**  
Managed Service for Apache Flink Runtime 1.0.1 版本不需要 -Dflink.version 參數；只有版本 1.1.0 及更新版本才需要此參數。如需詳細資訊，請參閱[指定應用程式的 Apache Flink 版本](how-creating-apps.md#how-creating-apps-building-flink)。
   + 設定開發環境。如需詳細資訊，請參閱您的開發環境文件。

   您可以將您的套件做為 JAR 檔案上傳，或壓縮您的套件並做為 ZIP 檔案上傳。如果您使用 建立應用程式 AWS CLI，您可以指定程式碼內容類型 (JAR 或 ZIP)。

1. 如果編譯時發生錯誤，請確認您的 `JAVA_HOME` 環境變數是否正確設定。

如果應用程式成功編譯，則會建立下列檔案：

`target/aws-kinesis-analytics-java-apps-1.0.jar`

#### 上傳 Apache Flink 串流 Java 程式碼
<a name="earlier-gs-1_6-exercise-6"></a>

在本節中，您會建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體並上傳您的應用程式的程式碼。

**上傳應用程式的程式碼**

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 選擇**建立儲存貯體**。

1. 在**儲存貯體名稱**欄位中，輸入 **ka-app-code-*<username>***。新增尾碼至儲存貯體名稱，例如您的使用者名稱，使其成為全域唯一的。選擇**下一步**。

1. 在**設定選項**步驟中，保留原有設定並選擇 **Next (下一步)**。

1. 在**設定許可**步驟中，保留原有設定並選擇 **Next (下一步)**。

1. 選擇**建立儲存貯體**。

1. 在 Amazon S3 主控台中，選擇 **ka-app-code-*<username>*** 儲存貯體，並選擇**上傳**。

1. 在**選取檔案**步驟中，選擇**新增檔案**。導覽至您在上一步驟中建立的 `aws-kinesis-analytics-java-apps-1.0.jar` 檔案。選擇**下一步**。

1. 在**設定許可**步驟中，保留原有設定。選擇**下一步**。

1. 在**設定屬性**步驟中，保留原有設定。選擇**上傳**。

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

#### 建立並執行 Managed Service for Apache Flink 應用程式
<a name="earlier-gs-1_6-exercise-7"></a>

您可以使用主控台或 AWS CLI建立和執行 Managed Service for Apache Flink 應用程式。

**注意**  
當您使用 主控台建立應用程式時，系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch Logs 資源。當您使用 建立應用程式時 AWS CLI，您可以分別建立這些資源。

**Topics**
+ [建立並執行應用程式 （主控台）](#earlier-gs-1_6-exercise-7-console)
+ [建立並執行應用程式 (AWS CLI)](#earlier-gs-1_6-exercise-7-cli)

##### 建立並執行應用程式 （主控台）
<a name="earlier-gs-1_6-exercise-7-console"></a>

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

##### 建立應用程式
<a name="earlier-gs-1_6-exercise-7-console-create"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 儀表板上，選擇**建立分析應用程式**。

1. 在 **Managed Service for Apache Flink - 建立應用程式**頁面，提供應用程式詳細資訊，如下所示：
   + 在**應用程式名稱**中，輸入 **MyApplication**。
   + 對於 **Description (說明)**，輸入 **My java test app**。
   + 對於**​執行期**，選擇 **​Apache Flink**。
**注意**  
Managed Service for Apache Flink 使用 Apache Flink 1.8.2 或 1.6.2 版。
   + 將版本下拉式清單變更為 **Apache Flink 1.6**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。

**注意**  
使用主控台建立 Managed Service for Apache Flink 應用程式時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
政策：`kinesis-analytics-service-MyApplication-us-west-2`
角色：`kinesisanalytics-MyApplication-us-west-2`

##### 編輯 IAM 政策
<a name="earlier-gs-1_6-exercise-7-console-iam"></a>

編輯 IAM 政策來新增存取 Kinesis 資料串流的許可。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇**政策**。選擇主控台為您在上一節所建立的 **`kinesis-analytics-service-MyApplication-us-west-2`** 政策。

1. 在**摘要**頁面，選擇**編輯政策**。請選擇 **JSON** 標籤。

1. 將下列政策範例的反白部分新增至政策。使用您的帳戶 ID 取代範例帳戶 ID (*012345678901*)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-username/java-getting-started-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "Sid": "DescribeLogStreams",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogStreams"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
               ]
           },
           {
               "Sid": "PutLogEvents",
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
               ]
           },
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           },
           {
               "Sid": "WriteOutputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream"
           }
       ]
   }
   ```

------

##### 設定應用程式
<a name="earlier-gs-1_6-exercise-7-console-configure"></a>

1. 在**我的應用程式**頁面，選擇**設定**。

1. 在**設定應用程式**頁面，提供**程式碼位置**：
   + 對於 **Amazon S3 儲存貯體**，請輸入 **ka-app-code-*<username>***。
   + 對於 **Amazon S3 物件的路徑**，請輸入 **java-getting-started-1.0.jar**。

1. 在**存取應用程式資源**下，對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 輸入以下應用程式屬性和數值：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

1. 在**監控**下，確保**監控指標層級**設為**應用程式**。

1. 針對 **CloudWatch 記錄**，選取**啟用**核取方塊。

1. 選擇**更新**。

**注意**  
當您選擇啟用 Amazon CloudWatch 日誌時，Managed Service for Apache Flink 便會為您建立日誌群組和日誌串流。這些資源的名稱如下所示：  
日誌群組：`/aws/kinesis-analytics/MyApplication`
日誌串流：`kinesis-analytics-log-stream`

##### 執行應用程式
<a name="earlier-gs-1_6-exercise-7-console-run"></a>

1. 在 **MyApplication** 頁面，選擇**執行**。確認動作。

1. 應用程式執行時，重新整理頁面。主控台會顯示 **Application graph (應用程式圖形)**。

##### 停止應用程式
<a name="earlier-gs-1_6-exercise-7-console-stop"></a>

在 **MyApplication** 頁面，選擇**停止**。確認動作。

##### 更新應用程式
<a name="earlier-gs-1_6-exercise-7-console-update"></a>

您可以使用主控台更新應用程式設定，例如應用程式屬性、監控設定及位置或應用程式 JAR 的檔名。如果需要更新應用程式的程式碼，也可以從 Amazon S3 儲存貯體重新載入應用程式 JAR。

在 **MyApplication** 頁面，選擇**設定**。更新應用程式設定，然後選擇**更新**。

##### 建立並執行應用程式 (AWS CLI)
<a name="earlier-gs-1_6-exercise-7-cli"></a>

在本節中，您可以使用 AWS CLI 來建立和執行 Managed Service for Apache Flink 應用程式。Managed Service for Apache Flink 使用 `kinesisanalyticsv2` AWS CLI 命令來建立 Managed Service for Apache Flink 應用程式並與之互動。

##### 建立許可政策
<a name="earlier-gs-1_6-exercise-7-cli-policy"></a>

您會先建立具有兩條陳述式的許可政策：一條陳述式授與來源串流上 `read` 動作的許可，而另一條則是授與目的地串流上 `write` 動作的許可。您之後會將政策連接至 IAM 角色 (您會在下一節中建立)。因此，當 Managed Service for Apache Flink 擔任角色時，服務便具有從來源串流讀取並寫入目的地串流的所需許可。

使用以下程式碼來建立 `AKReadSourceStreamWriteSinkStream` 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 `username`。使用您的帳戶 ID 取代 Amazon Resource Name (ARN) (`012345678901`) 中的帳戶 ID。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": ["arn:aws:s3:::ka-app-code-username",
                "arn:aws:s3:::ka-app-code-username/*"
            ]
        },
        {
            "Sid": "ReadInputStream",
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
        },
        {
            "Sid": "WriteOutputStream",
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream"
        }
    ]
}
```

------

如需建立許可政策的逐步指示，請參閱《IAM 使用者指南》**中的[教學課程：建立和連接您的第一個客戶管理政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#part-two-create-policy)。

**注意**  
若要存取其他 Amazon 服務，您可以使用 適用於 Java 的 AWS SDK。Managed Service for Apache Flink 自動將 SDK 所需的憑證設定為與應用程式相關聯的服務執行 IAM 角色。無須採取額外的步驟。

##### 建立 IAM 角色
<a name="earlier-gs-1_6-exercise-7-cli-role"></a>

在本節中，您會建立 Managed Service for Apache Flink 應用程式可以擔任的 IAM 角色，以便讀取來源串流與寫入目的地串流。

Managed Service for Apache Flink 沒有許可，無法存取串流。您可以透過 IAM 角色來授與這些許可。各 IAM 角色都有連接兩項政策。信任政策會授與擔任角色的 Managed Service for Apache Flink 許可，而許可政策決定了 Managed Service for Apache Flink 在擔任角色後可以執行的作業。

您會將在上一節中建立的許可政策連接至此角色。

**若要建立一個 IAM 角色**

1. 前往網址 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**角色** 、**建立角色**。

1. 在**選取可信身分類型**下，選擇 **AWS 服務**。在**選擇將使用此角色的服務**下，選擇 **Kinesis**。在 **Select your use case (選取您的使用案例)** 下，選擇 **Kinesis Analytics (Kinesis 分析)**。

   選擇**下一步：許可**。

1. 在**連接許可政策**頁面，選擇**下一步：檢閱**。您會在建立角色後連接許可政策。

1. 在**建立角色**頁面，輸入 **MF-stream-rw-role** 作為**角色名稱**。選擇建**立角色**。

   現在您已建立新的 IAM 角色，名為 `MF-stream-rw-role`。您接著會更新角色的信任和許可政策。

1. 將 許可政策連接到角色。
**注意**  
在此練習中，Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟中建立的政策，[建立許可政策](#earlier-gs-1_6-exercise-7-cli-policy)。

   1. 在**摘要**頁面，選擇**許可**標籤。

   1. 選擇**連接政策**。

   1. 在搜尋方塊中，輸入 **AKReadSourceStreamWriteSinkStream** (您在上一節中建立的政策)。

   1. 選擇 **AKReadSourceStreamWriteSinkStream** 政策，然後選擇**連接政策**。

您現在已建立應用程式用於存取資源的服務執行角色。請記下新角色的 ARN。

如需建立角色的逐步說明，請參閱《IAM 使用者指南》**中的[建立 IAM 角色 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console)。

##### 建立 Managed Service for Apache Flink 應用程式
<a name="earlier-gs-1_6-exercise-7-cli-create"></a>

1. 將下列 JSON 程式碼複製到名為 `create_request.json` 的檔案。使用您之前建立之角色的 ARN，取代範例角色 ARN。使用您在上一節中選擇的尾碼取代儲存貯體 ARN 尾碼 (`username`)。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (`012345678901`)。

   ```
   {
       "ApplicationName": "test",
       "ApplicationDescription": "my java test app",
       "RuntimeEnvironment": "FLINK-1_6",
       "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
       "ApplicationConfiguration": {
           "ApplicationCodeConfiguration": {
               "CodeContent": {
                   "S3ContentLocation": {
                       "BucketARN": "arn:aws:s3:::ka-app-code-username",
                       "FileKey": "java-getting-started-1.0.jar"
                   }
               },
               "CodeContentType": "ZIPFILE"
           },
           "EnvironmentProperties":  { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "flink.stream.initpos" : "LATEST",
                       "aws.region" : "us-west-2",
                       "AggregationEnabled" : "false"
                  }
               },
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2"
                  }
               }
            ]
         }
       }
   }
   ```

1. 使用前述請求執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) 動作以建立應用程式：

   ```
   aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
   ```

應用程式現在已建立。您會在下一個步驟中啟動應用程式。

##### 啟動應用程式
<a name="earlier-gs-1_6-exercise-7-cli-start"></a>

在本節中，您會透過 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) 動作來啟動應用程式。

**啟動應用程式**

1. 將下列 JSON 程式碼複製到名為 `start_request.json` 的檔案。

   ```
   {
       "ApplicationName": "test",
       "RunConfiguration": {
           "ApplicationRestoreConfiguration": { 
            "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"
            }
       }
   }
   ```

1. 以啟動應用程式的上述請求，執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) 動作：

   ```
   aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
   ```

應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上查看 Managed Service for Apache Flink 指標，以確認應用程式是否正常運作。

##### 停止應用程式
<a name="earlier-gs-1_6-exercise-7-cli-stop"></a>

在本節，您會使用該 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) 動作來停止應用程式。

**停止應用程式**

1. 將下列 JSON 程式碼複製到名為 `stop_request.json` 的檔案。

   ```
   {
      "ApplicationName": "test"
   }
   ```

1. 以停止應用程式的上述請求，執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) 動作：

   ```
   aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
   ```

現在已停止應用程式。

##### 新增 CloudWatch 記錄選項
<a name="earlier-gs-1_6-exercise-7-cli-cw"></a>

您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需搭配應用程式使用 CloudWatch Logs 的相關資訊，請參閱 [在 Managed Service for Apache Flink 中設定應用程式記錄](cloudwatch-logs.md)。

##### 更新環境屬性
<a name="earlier-gs-1_6-exercise-7-cli-update-env"></a>

在本節中，您可以使用 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) 動作來變更應用程式的環境屬性，無需重新編譯應用程式的程式碼。在此範例中，您會變更來源和目的地串流的「區域」。

**更新應用程式的環境屬性**

1. 將下列 JSON 程式碼複製到名為 `update_properties_request.json` 的檔案。

   ```
   {"ApplicationName": "test",
      "CurrentApplicationVersionId": 1,
      "ApplicationConfigurationUpdate": { 
         "EnvironmentPropertyUpdates": { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "flink.stream.initpos" : "LATEST",
                       "aws.region" : "us-west-2",
                       "AggregationEnabled" : "false"
                  }
               },
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2"
                  }
               }
            ]
         }
      }
   }
   ```

1. 使用前述請求執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) 動作以更新環境屬性：

   ```
   aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
   ```

##### 更新應用程式的程式碼
<a name="earlier-gs-1_6-exercise-7-cli-update-code"></a>

當您需要使用新版本的程式碼套件來更新應用程式程式碼時，您可以使用 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) AWS CLI 動作。

若要使用 AWS CLI，請從 Amazon S3 儲存貯體中刪除先前的程式碼套件、上傳新版本，然後呼叫 `UpdateApplication`，指定相同的 Amazon S3 儲存貯體和物件名稱。應用程式將以新的程式碼套件重新啟動。

`UpdateApplication` 動作的下列範例請求會重新載入應用程式的程式碼並重新啟動應用程式。將 `CurrentApplicationVersionId` 更新至目前的應用程式版本。您可以使用 `ListApplications` 或 `DescribeApplication` 動作來檢查目前的應用程式版本。使用您在[建立兩個 Amazon Kinesis 資料串流](#earlier-gs-1_6-exercise-1)一節中選擇的尾碼更新儲存貯體名稱尾碼 (*<username>*)。

```
{
    "ApplicationName": "test",
    "CurrentApplicationVersionId": 1,
    "ApplicationConfigurationUpdate": {
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username",
                    "FileKeyUpdate": "java-getting-started-1.0.jar"
                }
            }
        }
    }
}
```

### 步驟 4：清除 AWS 資源
<a name="earlier-gs-1_6-cleanup"></a>

本節包含清除入門教學課程中建立 AWS 之資源的程序。

**Topics**
+ [刪除 Managed Service for Apache Flink 應用程式](#earlier-gs-1_6-cleanup-app)
+ [刪除您的 Kinesis 資料串流](#earlier-gs-1_6-cleanup-stream)
+ [刪除您的 Amazon S3 物件和儲存貯體](#earlier-gs-1_6-cleanup-s3)
+ [刪除您的 IAM 資源](#earlier-gs-1_6-cleanup-iam)
+ [刪除您的 CloudWatch 資源](#earlier-gs-1_6-cleanup-cw)

#### 刪除 Managed Service for Apache Flink 應用程式
<a name="earlier-gs-1_6-cleanup-app"></a>

1. 在以下網址開啟 Kinesis 主控台：[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis)。

1. 在 Managed Service for Apache Flink 面板中，選擇 **MyApplication**。

1. 選擇**設定**。

1. 在**快照**區段中，選擇**停用**，然後選擇**更新**。

1. 在應用程式的頁面，選擇**刪除**，然後確認刪除。

#### 刪除您的 Kinesis 資料串流
<a name="earlier-gs-1_6-cleanup-stream"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Kinesis Data Streams 面板中，選擇 **ExampleInputStream**。

1. 在 **ExampleInputStream** 頁面，選擇**刪除 Kinesis 串流**，然後確認刪除。

1. 在 **Kinesis 串流**頁面，依序選擇 **ExampleOutputStream**、**動作**和**刪除**，然後確認刪除。

#### 刪除您的 Amazon S3 物件和儲存貯體
<a name="earlier-gs-1_6-cleanup-s3"></a>

1. 在以下網址開啟 Amazon S3 主控台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 選擇 **ka-app-code-*<username>* 儲存貯體。**

1. 選擇**刪除**，然後輸入儲存貯體名稱以確認刪除。

#### 刪除您的 IAM 資源
<a name="earlier-gs-1_6-cleanup-iam"></a>

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽列中，選擇**政策**。

1. 在篩選器控制項中，輸入 **kinesis**。

1. 選擇 **kinesis-analytics-service-MyApplication-us-west-2** 政策。

1. 選擇**政策動作**，然後選擇**刪除**。

1. 在導覽列中，選擇**角色**。

1. 選擇 **kinesis-analytics-MyApplication-us-west-2** 角色。

1. 選擇**刪除角色**，然後確認刪除。

#### 刪除您的 CloudWatch 資源
<a name="earlier-gs-1_6-cleanup-cw"></a>

1. 在以下網址開啟 CloudWatch 主控台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在導覽列中，選擇**日誌**。

1. 選擇 **/aws/kinesis-analytics/MyApplication** 日誌群組。

1. 選擇**刪除日誌群組**，然後確認刪除。

## Managed Service for Apache Flink 的舊版 （舊版） 範例
<a name="legacy-examples"></a>

**注意**  
如需目前範例，請參閱 [建立和使用 Managed Service for Apache Flink 應用程式的範例](examples-collapsibles.md)。

本節提供在 Managed Service for Apache Flink 中建立及使用應用程式的範例。其中包含範例程式碼和逐步指示，可協助您建立 Managed Service for Apache Flink 應用程式並測試結果。

在探索這些範例之前，建議先檢閱以下內容：
+ [運作方式](how-it-works.md)
+ [教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md)

**注意**  
這些範例假設您使用美國西部 (奧勒岡) 區域 (`us-west-2`)。如果您使其他區域，請相應地更新應用程式的程式碼、命令和 IAM 角色。

**Topics**
+ [DataStream API 範例](#examples-datastream)
+ [Python 範例](#examples-python)
+ [Scala 範例](#examples-scala)

### DataStream API 範例
<a name="examples-datastream"></a>

下列範例示範如何使用 Apache Flink DataStream API 建立應用程式。

**Topics**
+ [範例：輪轉時段](#examples-tumbling)
+ [範例：滑動視窗](#examples-sliding)
+ [範例：寫入 Amazon S3 儲存貯體](#examples-s3)
+ [教學課程：使用 Managed Service for Apache Flink 應用程式，將資料從 MSK 叢集中的一個主題複寫到 VPC 中的另一個主題](#example-msk)
+ [範例：搭配 Kinesis 資料串流使用 EFO 取用者](#examples-efo)
+ [範例：寫入 Firehose](#get-started-exercise-fh)
+ [範例：從不同帳戶中的 Kinesis 串流讀取](#examples-cross)
+ [教學課程：搭配 Amazon MSK 使用自訂信任存放區](#example-keystore)

#### 範例：輪轉時段
<a name="examples-tumbling"></a>

**注意**  
如需目前範例，請參閱 [建立和使用 Managed Service for Apache Flink 應用程式的範例](examples-collapsibles.md)。

在本練習中，您將使用輪轉視窗建立可彙總資料的 Managed Service for Apache Flink 應用程式。彙總在 Flink 中預設為啟用。可使用下列命令將其停用：

```
sink.producer.aggregation-enabled' = 'false'
```

**注意**  
若要設定此練習的必要先決條件，請先完成 [教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md) 練習。

**Topics**
+ [建立相依資源](#examples-tumbling-resources)
+ [將範例記錄寫入輸入串流](#examples-tumbling-write)
+ [下載並檢查應用程式程式碼](#examples-tumbling-download)
+ [編譯應用程式程式碼](#examples-tumbling-compile)
+ [上傳 Apache Flink 串流 Java 程式碼](#examples-tumbling-upload)
+ [建立並執行 Managed Service for Apache Flink 應用程式](#examples-tumbling-create-run)
+ [清除 AWS 資源](#examples-tumbling-cleanup)

##### 建立相依資源
<a name="examples-tumbling-resources"></a>

在為本練習建立 Managed Service for Apache Flink 應用程式之前，先建立下列相依資源：
+ 兩個 Kinesis 資料串流 (`ExampleInputStream` 和 `ExampleOutputStream`)
+ Amazon S3 儲存貯體，用來儲存應用程式的程式碼 (`ka-app-code-<username>`) 

您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示，請參閱以下主題：
+ 《Amazon Kinesis Data Streams 開發人員指南》中的[建立和更新資料串流](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html)**。為資料串流 **ExampleInputStream** 和 **ExampleOutputStream** 命名。
+ 《Amazon Simple Storage Service 使用者指南》中的[如何建立 S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html)。**透過附加登入名稱 (例如 **ka-app-code-*<username>***)，為 Amazon S3 儲存貯體提供全域唯一的名稱。

##### 將範例記錄寫入輸入串流
<a name="examples-tumbling-write"></a>

在本節，您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

**注意**  
本節需要 [適用於 Python (Boto) 的 AWS SDK](https://aws.amazon.com/developers/getting-started/python/)。

1. 使用下列內容建立名為 `stock.py` 的檔案：

   ```
       import datetime
       import json
       import random
       import boto3
   
       STREAM_NAME = "ExampleInputStream"
   
   
       def get_data():
           return {
               'event_time': datetime.datetime.now().isoformat(),
               'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
               'price': round(random.random() * 100, 2)}
   
   
       def generate(stream_name, kinesis_client):
           while True:
               data = get_data()
               print(data)
               kinesis_client.put_record(
                   StreamName=stream_name,
                   Data=json.dumps(data),
                   PartitionKey="partitionkey")
   
   
       if __name__ == '__main__':
           generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
   ```

1. 執行 `stock.py` 指令碼：

   ```
   $ python stock.py
   ```

   在完成教學課程的其餘部分時，讓指令碼保持執行狀態。

##### 下載並檢查應用程式程式碼
<a name="examples-tumbling-download"></a>

此範例的 Java 應用程式的程式碼可從 GitHub 下載。若要下載應用程式的程式碼，請執行下列動作：

1. 如果您尚未安裝 Git 用戶端，請先安裝。如需詳細資訊，請參閱[安裝 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。

1. 使用以下指令複製遠端儲存庫：

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. 導覽至 `amazon-kinesis-data-analytics-java-examples/TumblingWindow` 目錄。

應用程式的程式碼位於 `TumblingWindowStreamingJob.java` 檔案中。請留意下列與應用程式的程式碼相關的資訊：
+ 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源：

  ```
  return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
                  new SimpleStringSchema(), inputProperties));
  ```
+ 新增以下 import 陳述式：

  ```
  import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows; //flink 1.13 onward
  ```
+ 該應用程式使用 `timeWindow` 運算子在 5 秒的輪轉視窗內尋找每個股票代碼的值計數。下列程式碼會建立運算子，並將彙總的資料傳送至新的 Kinesis Data Streams 接收器：

  ```
  input.flatMap(new Tokenizer()) // Tokenizer for generating words
                      .keyBy(0) // Logically partition the stream for each word
                      
                      .window(TumblingProcessingTimeWindows.of(Time.seconds(5))) //Flink 1.13 onward
                      .sum(1) // Sum the number of words per partition
                      .map(value -> value.f0 + "," + value.f1.toString() + "\n")
                      .addSink(createSinkFromStaticConfig());
  ```

##### 編譯應用程式程式碼
<a name="examples-tumbling-compile"></a>

若要編譯應用程式，請執行下列動作：

1. 如果尚未安裝 Java 和 Maven，請先安裝。如需詳細資訊，請參閱[教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md)教學課程中的[完成必要的先決條件](getting-started.md#setting-up-prerequisites)。

1. 使用下列命令編譯應用程式：

   ```
   mvn package -Dflink.version=1.15.3
   ```
**注意**  
提供的來源程式碼依賴於 Java 11 中的程式庫。

編譯應用程式會建立應用程式 JAR 檔案 (`target/aws-kinesis-analytics-java-apps-1.0.jar`)。

##### 上傳 Apache Flink 串流 Java 程式碼
<a name="examples-tumbling-upload"></a>

在本節中，您會將應用程式的程式碼上傳至在[建立相依資源](#examples-tumbling-resources)一節建立的 Amazon S3 儲存貯體。

1. 在 Amazon S3 主控台中，選擇 **ka-app-code-*<username>*** 儲存貯體，並選擇**上傳**。

1. 在**選取檔案**步驟中，選擇**新增檔案**。導覽至您在上一步驟中建立的 `aws-kinesis-analytics-java-apps-1.0.jar` 檔案。

1. 您不需要變更物件的任何設定，因此請選擇**上傳**。

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

##### 建立並執行 Managed Service for Apache Flink 應用程式
<a name="examples-tumbling-create-run"></a>

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

##### 建立應用程式
<a name="examples-tumbling-create"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 儀表板上，選擇**建立分析應用程式**。

1. 在 **Managed Service for Apache Flink - 建立應用程式**頁面，提供應用程式詳細資訊，如下所示：
   + 在**應用程式名稱**中，輸入 **MyApplication**。
   + 對於**​執行期**，選擇 **​Apache Flink**。
**注意**  
Managed Service for Apache Flink 使用 Apache Flink 1.15.2 版。
   + 將版本下拉式清單保留為 **Apache Flink 1.15.2 版 (建議版本)**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。

**注意**  
使用主控台建立 Managed Service for Apache Flink 應用程式時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
政策：`kinesis-analytics-service-MyApplication-us-west-2`
角色：`kinesisanalytics-MyApplication-us-west-2`

##### 編輯 IAM 政策
<a name="get-started-exercise-7-console-iam"></a>

編輯 IAM 政策來新增存取 Kinesis 資料串流的許可。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇**政策**。選擇主控台為您在上一節所建立的 **`kinesis-analytics-service-MyApplication-us-west-2`** 政策。

1. 在**摘要**頁面，選擇**編輯政策**。請選擇 **JSON** 標籤。

1. 將下列政策範例的反白部分新增至政策。使用您的帳戶 ID 取代範例帳戶 ID (*012345678901*)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "logs:DescribeLogGroups",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*",
                   "arn:aws:s3:::ka-app-code-<username>/aws-kinesis-analytics-java-apps-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogStreams",
               "Effect": "Allow",
               "Action": "logs:DescribeLogStreams",
               "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
           },
           {
               "Sid": "PutLogEvents",
               "Effect": "Allow",
               "Action": "logs:PutLogEvents",
               "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
           },
           {
               "Sid": "ListCloudwatchLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           },
           {
               "Sid": "WriteOutputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream"
           }
       ]
   }
   ```

------

##### 設定應用程式
<a name="examples-tumbling-configure"></a>

1. 在**我的應用程式**頁面，選擇**設定**。

1. 在**設定應用程式**頁面，提供**程式碼位置**：
   + 對於 **Amazon S3 儲存貯體**，請輸入 **ka-app-code-*<username>***。
   + 對於 **Amazon S3 物件的路徑**，請輸入 **aws-kinesis-analytics-java-apps-1.0.jar**。

1. 在**存取應用程式資源**下，對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 在**監控**下，確保**監控指標層級**設為**應用程式**。

1. 針對 **CloudWatch 記錄**，選取**啟用**核取方塊。

1. 選擇**更新**。

**注意**  
當您選擇啟用 CloudWatch 記錄時，Managed Service for Apache Flink 便會為您建立日誌群組和日誌串流。這些資源的名稱如下所示：  
日誌群組：`/aws/kinesis-analytics/MyApplication`
日誌串流：`kinesis-analytics-log-stream`
此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

##### 執行應用程式
<a name="examples-tumbling-run"></a>

1. 在 **MyApplication** 頁面，選擇**執行**。保持選取**不使用快照執行**選項，然後確認動作。

1. 應用程式執行時，重新整理頁面。主控台會顯示 **Application graph (應用程式圖形)**。

您可以在 CloudWatch 主控台上查看 Managed Service for Apache Flink 指標，以確認應用程式是否正常運作。

##### 清除 AWS 資源
<a name="examples-tumbling-cleanup"></a>

本節包含清除在輪轉時段教學課程中建立 AWS 之資源的程序。

**Topics**
+ [刪除 Managed Service for Apache Flink 應用程式](#examples-tumbling-cleanup-app)
+ [刪除您的 Kinesis 資料串流](#examples-tumbling-cleanup-stream)
+ [刪除您的 Amazon S3 物件和儲存貯體](#examples-tumbling-cleanup-s3)
+ [刪除您的 IAM 資源](#examples-tumbling-cleanup-iam)
+ [刪除您的 CloudWatch 資源](#examples-tumbling-cleanup-cw)

##### 刪除 Managed Service for Apache Flink 應用程式
<a name="examples-tumbling-cleanup-app"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 面板中，選擇 **MyApplication**。

1. 在應用程式的頁面，選擇**刪除**，然後確認刪除。

##### 刪除您的 Kinesis 資料串流
<a name="examples-tumbling-cleanup-stream"></a>

1. 在以下網址開啟 Kinesis 主控台：[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis)。

1. 在 Kinesis Data Streams 面板中，選擇 **ExampleInputStream**。

1. 在 **ExampleInputStream** 頁面，選擇**刪除 Kinesis 串流**，然後確認刪除。

1. 在 **Kinesis 串流**頁面，依序選擇 **ExampleOutputStream**、**動作**和**刪除**，然後確認刪除。

##### 刪除您的 Amazon S3 物件和儲存貯體
<a name="examples-tumbling-cleanup-s3"></a>

1. 在以下網址開啟 Amazon S3 主控台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 選擇 **ka-app-code-*<username>* 儲存貯體。**

1. 選擇**刪除**，然後輸入儲存貯體名稱以確認刪除。

##### 刪除您的 IAM 資源
<a name="examples-tumbling-cleanup-iam"></a>

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽列中，選擇**政策**。

1. 在篩選器控制項中，輸入 **kinesis**。

1. 選擇 **kinesis-analytics-service-MyApplication-us-west-2** 政策。

1. 選擇**政策動作**，然後選擇**刪除**。

1. 在導覽列中，選擇**角色**。

1. 選擇 **kinesis-analytics-MyApplication-us-west-2** 角色。

1. 選擇**刪除角色**，然後確認刪除。

##### 刪除您的 CloudWatch 資源
<a name="examples-tumbling-cleanup-cw"></a>

1. 在以下網址開啟 CloudWatch 主控台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在導覽列中，選擇**日誌**。

1. 選擇 **/aws/kinesis-analytics/MyApplication** 日誌群組。

1. 選擇**刪除日誌群組**，然後確認刪除。

#### 範例：滑動視窗
<a name="examples-sliding"></a>

**注意**  
如需目前範例，請參閱 [建立和使用 Managed Service for Apache Flink 應用程式的範例](examples-collapsibles.md)。

**注意**  
若要設定此練習的必要先決條件，請先完成 [教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md) 練習。

**Topics**
+ [建立相依資源](#examples-sliding-resources)
+ [將範例記錄寫入輸入串流](#examples-sliding-write)
+ [下載並檢查應用程式程式碼](#examples-sliding-download)
+ [編譯應用程式程式碼](#examples-sliding-compile)
+ [上傳 Apache Flink 串流 Java 程式碼](#examples-sliding-upload)
+ [建立並執行 Managed Service for Apache Flink 應用程式](#examples-sliding-create-run)
+ [清除 AWS 資源](#examples-sliding-cleanup)

##### 建立相依資源
<a name="examples-sliding-resources"></a>

在為本練習建立 Managed Service for Apache Flink 應用程式之前，先建立下列相依資源：
+ 兩個 Kinesis 資料串流 (`ExampleInputStream` 和 `ExampleOutputStream`)
+ Amazon S3 儲存貯體，用來儲存應用程式的程式碼 (`ka-app-code-<username>`) 

您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示，請參閱以下主題：
+ 《Amazon Kinesis Data Streams 開發人員指南》中的[建立和更新資料串流](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html)**。為資料串流 **ExampleInputStream** 和 **ExampleOutputStream** 命名。
+ 《Amazon Simple Storage Service 使用者指南》中的[如何建立 S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html)。**透過附加登入名稱 (例如 **ka-app-code-*<username>***)，為 Amazon S3 儲存貯體提供全域唯一的名稱。

##### 將範例記錄寫入輸入串流
<a name="examples-sliding-write"></a>

在本節，您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

**注意**  
本節需要 [適用於 Python (Boto) 的 AWS SDK](https://aws.amazon.com/developers/getting-started/python/)。

1. 使用下列內容建立名為 `stock.py` 的檔案：

   ```
    
   import datetime
   import json
   import random
   import boto3
   
   STREAM_NAME = "ExampleInputStream"
   
   
   def get_data():
       return {
           "EVENT_TIME": datetime.datetime.now().isoformat(),
           "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]),
           "PRICE": round(random.random() * 100, 2),
       }
   
   
   def generate(stream_name, kinesis_client):
       while True:
           data = get_data()
           print(data)
           kinesis_client.put_record(
               StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey"
           )
   
   
   if __name__ == "__main__":
       generate(STREAM_NAME, boto3.client("kinesis"))
   ```

1. 執行 `stock.py` 指令碼：

   ```
   $ python stock.py
   ```

   在完成教學課程的其餘部分時，讓指令碼保持執行狀態。

##### 下載並檢查應用程式程式碼
<a name="examples-sliding-download"></a>

此範例的 Java 應用程式的程式碼可從 GitHub 下載。若要下載應用程式的程式碼，請執行下列動作：

1. 如果您尚未安裝 Git 用戶端，請先安裝。如需詳細資訊，請參閱[安裝 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。

1. 使用以下指令複製遠端儲存庫：

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. 導覽至 `amazon-kinesis-data-analytics-java-examples/SlidingWindow` 目錄。

應用程式的程式碼位於 `SlidingWindowStreamingJobWithParallelism.java` 檔案中。請留意下列與應用程式的程式碼相關的資訊：
+ 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源：

  ```
  return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
                  new SimpleStringSchema(), inputProperties));
  ```
+ 該應用程式使用 `timeWindow` 運算子在按 5 秒滑動的 10 秒視窗內尋找每個股票代碼的最小值。下列程式碼會建立運算子，並將彙總的資料傳送至新的 Kinesis Data Streams 接收器：
+ 新增以下 import 陳述式：

  ```
  import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows; //flink 1.13 onward
  ```
+ 該應用程式使用 `timeWindow` 運算子在 5 秒的輪轉視窗內尋找每個股票代碼的值計數。下列程式碼會建立運算子，並將彙總的資料傳送至新的 Kinesis Data Streams 接收器：

  ```
  input.flatMap(new Tokenizer()) // Tokenizer for generating words
                  .keyBy(0) // Logically partition the stream for each word
                 
  		.window(TumblingProcessingTimeWindows.of(Time.seconds(5))) //Flink 1.13 onward
                  .sum(1) // Sum the number of words per partition
                  .map(value -> value.f0 + "," + value.f1.toString() + "\n")
                  .addSink(createSinkFromStaticConfig());
  ```

##### 編譯應用程式程式碼
<a name="examples-sliding-compile"></a>

若要編譯應用程式，請執行下列動作：

1. 如果尚未安裝 Java 和 Maven，請先安裝。如需詳細資訊，請參閱[教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md)教學課程中的[完成必要的先決條件](getting-started.md#setting-up-prerequisites)。

1. 使用下列命令編譯應用程式：

   ```
   mvn package -Dflink.version=1.15.3
   ```
**注意**  
提供的來源程式碼依賴於 Java 11 中的程式庫。

編譯應用程式會建立應用程式 JAR 檔案 (`target/aws-kinesis-analytics-java-apps-1.0.jar`)。

##### 上傳 Apache Flink 串流 Java 程式碼
<a name="examples-sliding-upload"></a>

在本節中，您會將應用程式的程式碼上傳至在[建立相依資源](#examples-sliding-resources)一節建立的 Amazon S3 儲存貯體。

1. 在 Amazon S3 主控台中，選擇 **ka-app-code-*<username>*** 儲存貯體，並選擇**上傳**。

1. 在**選取檔案**步驟中，選擇 **新增檔案**。導覽至您在上一步驟中建立的 `aws-kinesis-analytics-java-apps-1.0.jar` 檔案。

1. 您不需要變更物件的任何設定，因此請選擇**上傳**。

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

##### 建立並執行 Managed Service for Apache Flink 應用程式
<a name="examples-sliding-create-run"></a>

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

##### 建立應用程式
<a name="examples-sliding-create"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 儀表板上，選擇**建立分析應用程式**。

1. 在 **Managed Service for Apache Flink - 建立應用程式**頁面，提供應用程式詳細資訊，如下所示：
   + 在**應用程式名稱**中，輸入 **MyApplication**。
   + 對於**​執行期**，選擇 **​Apache Flink**。
   + 將版本下拉式清單保留為 **Apache Flink 1.15.2 版 (建議版本)**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。

**注意**  
使用主控台建立 Managed Service for Apache Flink 應用程式時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
政策：`kinesis-analytics-service-MyApplication-us-west-2`
角色：`kinesisanalytics-MyApplication-us-west-2`

##### 編輯 IAM 政策
<a name="get-started-exercise-7-console-iam"></a>

編輯 IAM 政策來新增存取 Kinesis 資料串流的許可。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇**政策**。選擇主控台為您在上一節所建立的 **`kinesis-analytics-service-MyApplication-us-west-2`** 政策。

1. 在**摘要**頁面，選擇**編輯政策**。請選擇 **JSON** 標籤。

1. 將下列政策範例的反白部分新增至政策。使用您的帳戶 ID 取代範例帳戶 ID (*012345678901*)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "logs:DescribeLogGroups",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*",
                   "arn:aws:s3:::ka-app-code-<username>/aws-kinesis-analytics-java-apps-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogStreams",
               "Effect": "Allow",
               "Action": "logs:DescribeLogStreams",
               "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
           },
           {
               "Sid": "PutLogEvents",
               "Effect": "Allow",
               "Action": "logs:PutLogEvents",
               "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
           },
           {
               "Sid": "ListCloudwatchLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           },
           {
               "Sid": "WriteOutputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream"
           }
       ]
   }
   ```

------

##### 設定應用程式
<a name="examples-sliding-configure"></a>

1. 在**我的應用程式**頁面，選擇**設定**。

1. 在**設定應用程式**頁面，提供**程式碼位置**：
   + 對於 **Amazon S3 儲存貯體**，請輸入 **ka-app-code-*<username>***。
   + 對於 **Amazon S3 物件的路徑**，請輸入 **aws-kinesis-analytics-java-apps-1.0.jar**。

1. 在**存取應用程式資源**下，對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 在**監控**下，確保**監控指標層級**設為**應用程式**。

1. 針對 **CloudWatch 記錄**，選取**啟用**核取方塊。

1. 選擇**更新**。

**注意**  
當您選擇啟用 Amazon CloudWatch 日誌時，Managed Service for Apache Flink 便會為您建立日誌群組和日誌串流。這些資源的名稱如下所示：  
日誌群組：`/aws/kinesis-analytics/MyApplication`
日誌串流：`kinesis-analytics-log-stream`
此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

##### 設定應用程式平行處理
<a name="examples-sliding-parallelism"></a>

此應用程式範例使用任務的平行執行。下列應用程式的程式碼會設定 `min` 運算子的平行處理層級：

```
.setParallelism(3) // Set parallelism for the min operator
```

應用程式平行處理層級不能大於佈建的平行處理層級 (預設值為 1)。若要增加應用程式的平行處理，請使用下列 AWS CLI 動作：

```
aws kinesisanalyticsv2 update-application
      --application-name MyApplication
      --current-application-version-id <VersionId>
      --application-configuration-update "{\"FlinkApplicationConfigurationUpdate\": { \"ParallelismConfigurationUpdate\": {\"ParallelismUpdate\": 5, \"ConfigurationTypeUpdate\": \"CUSTOM\" }}}"
```

您可以使用 [DescribeApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_DescribeApplication.html) 或 [ListApplications](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_ListApplications.html) 動作擷取目前的應用程式版本 ID。

##### 執行應用程式
<a name="examples-sliding-run"></a>

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業，即可檢視 Flink 作業圖表。

您可以在 CloudWatch 主控台上查看 Managed Service for Apache Flink 指標，以確認應用程式是否正常運作。

##### 清除 AWS 資源
<a name="examples-sliding-cleanup"></a>

本節包含清除在滑動視窗教學課程中建立 AWS 之資源的程序。

**Topics**
+ [刪除 Managed Service for Apache Flink 應用程式](#examples-sliding-cleanup-app)
+ [刪除您的 Kinesis 資料串流](#examples-sliding-cleanup-stream)
+ [刪除您的 Amazon S3 物件和儲存貯體](#examples-sliding-cleanup-s3)
+ [刪除您的 IAM 資源](#examples-sliding-cleanup-iam)
+ [刪除您的 CloudWatch 資源](#examples-sliding-cleanup-cw)

##### 刪除 Managed Service for Apache Flink 應用程式
<a name="examples-sliding-cleanup-app"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 面板中，選擇 **MyApplication**。

1. 在應用程式的頁面，選擇**刪除**，然後確認刪除。

##### 刪除您的 Kinesis 資料串流
<a name="examples-sliding-cleanup-stream"></a>

1. 在以下網址開啟 Kinesis 主控台：[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis)。

1. 在 Kinesis Data Streams 面板中，選擇 **ExampleInputStream**。

1. 在 **ExampleInputStream** 頁面，選擇**刪除 Kinesis 串流**，然後確認刪除。

1. 在 **Kinesis 串流**頁面，依序選擇 **ExampleOutputStream**、**動作**和**刪除**，然後確認刪除。

##### 刪除您的 Amazon S3 物件和儲存貯體
<a name="examples-sliding-cleanup-s3"></a>

1. 在以下網址開啟 Amazon S3 主控台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 選擇 **ka-app-code-*<username>* 儲存貯體。**

1. 選擇**刪除**，然後輸入儲存貯體名稱以確認刪除。

##### 刪除您的 IAM 資源
<a name="examples-sliding-cleanup-iam"></a>

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽列中，選擇**政策**。

1. 在篩選器控制項中，輸入 **kinesis**。

1. 選擇 **kinesis-analytics-service-MyApplication-us-west-2** 政策。

1. 選擇**政策動作**，然後選擇**刪除**。

1. 在導覽列中，選擇**角色**。

1. 選擇 **kinesis-analytics-MyApplication-us-west-2** 角色。

1. 選擇**刪除角色**，然後確認刪除。

##### 刪除您的 CloudWatch 資源
<a name="examples-sliding-cleanup-cw"></a>

1. 在以下網址開啟 CloudWatch 主控台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在導覽列中，選擇**日誌**。

1. 選擇 **/aws/kinesis-analytics/MyApplication** 日誌群組。

1. 選擇**刪除日誌群組**，然後確認刪除。

#### 範例：寫入 Amazon S3 儲存貯體
<a name="examples-s3"></a>

在本練習中，您會建立 Managed Service for Apache Flink 應用程式，並將 Kinesis 資料串流作為來源，將 Amazon S3 儲存貯體作為接收器。使用接收器，您就可以驗證 Amazon S3 主控台的應用程式輸出。

**注意**  
若要設定此練習的必要先決條件，請先完成 [教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md) 練習。

**Topics**
+ [建立相依資源](#examples-s3-resources)
+ [將範例記錄寫入輸入串流](#examples-s3-write)
+ [下載並檢查應用程式程式碼](#examples-s3-download)
+ [修改應用程式程式碼](#examples-s3-modify)
+ [編譯應用程式程式碼](#examples-s3-compile)
+ [上傳 Apache Flink 串流 Java 程式碼](#examples-s3-upload)
+ [建立並執行 Managed Service for Apache Flink 應用程式](#examples-s3-create-run)
+ [驗證應用程式輸出](#examples-s3-verify)
+ [選用：自訂來源和接收器](#examples-s3-customize)
+ [清除 AWS 資源](#examples-s3-cleanup)

##### 建立相依資源
<a name="examples-s3-resources"></a>

在為本練習建立 Managed Service for Apache Flink 之前，先建立下列相依資源：
+ Kinesis 資料串流 (`ExampleInputStream`)。
+ Amazon S3 儲存貯體，用來儲存應用程式的程式碼和輸出 (`ka-app-code-<username>`) 

**注意**  
Managed Service for Apache Flink 無法在其自身啟用伺服器端加密的情況下將資料寫入 Amazon S3。

您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示，請參閱以下主題：
+ 《Amazon Kinesis Data Streams 開發人員指南》中的[建立和更新資料串流](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html)**。為資料串流 **ExampleInputStream** 命名。
+ 《Amazon Simple Storage Service 使用者指南》中的[如何建立 S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html)。**透過附加登入名稱 (例如 **ka-app-code-*<username>***)，為 Amazon S3 儲存貯體提供全域唯一的名稱。在 Amazon S3 儲存貯體中建立兩個資料夾 (**code** 和 **data**)。

如果下列 CloudWatch 資源尚不存在，則應用程式會建立這些資源：
+ 名為 `/AWS/KinesisAnalytics-java/MyApplication` 的日誌群組。
+ 名為 `kinesis-analytics-log-stream` 的日誌串流。

##### 將範例記錄寫入輸入串流
<a name="examples-s3-write"></a>

在本節，您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

**注意**  
本節需要 [適用於 Python (Boto) 的 AWS SDK](https://aws.amazon.com/developers/getting-started/python/)。

1. 使用下列內容建立名為 `stock.py` 的檔案：

   ```
       import datetime
       import json
       import random
       import boto3
   
       STREAM_NAME = "ExampleInputStream"
   
   
       def get_data():
           return {
               'event_time': datetime.datetime.now().isoformat(),
               'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
               'price': round(random.random() * 100, 2)}
   
   
       def generate(stream_name, kinesis_client):
           while True:
               data = get_data()
               print(data)
               kinesis_client.put_record(
                   StreamName=stream_name,
                   Data=json.dumps(data),
                   PartitionKey="partitionkey")
   
   
       if __name__ == '__main__':
           generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
   ```

1. 執行 `stock.py` 指令碼：

   ```
   $ python stock.py
   ```

   在完成教學課程的其餘部分時，讓指令碼保持執行狀態。

##### 下載並檢查應用程式程式碼
<a name="examples-s3-download"></a>

此範例的 Java 應用程式的程式碼可從 GitHub 下載。若要下載應用程式的程式碼，請執行下列動作：

1. 如果您尚未安裝 Git 用戶端，請先安裝。如需詳細資訊，請參閱[安裝 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。

1. 使用以下指令複製遠端儲存庫：

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. 導覽至 `amazon-kinesis-data-analytics-java-examples/S3Sink` 目錄。

應用程式的程式碼位於 `S3StreamingSinkJob.java` 檔案中。請留意下列與應用程式的程式碼相關的資訊：
+ 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源：

  ```
  return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
                  new SimpleStringSchema(), inputProperties));
  ```
+ 您需要新增以下 import 陳述式：

  ```
  import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows;
  ```
+ 該應用程式使用 Apache Flink S3 接收器寫入 Amazon S3。

  接收器會在輪轉視窗中讀取訊息、將訊息編碼到 S3 儲存貯體物件，並將編碼的物件傳送至 S3 接收器。下列程式碼會對傳送至 Amazon S3 的物件進行編碼：

  ```
  input.map(value -> { // Parse the JSON
                  JsonNode jsonNode = jsonParser.readValue(value, JsonNode.class);
                  return new Tuple2<>(jsonNode.get("ticker").toString(), 1);
              }).returns(Types.TUPLE(Types.STRING, Types.INT))
              .keyBy(v -> v.f0) // Logically partition the stream for each word
              .window(TumblingProcessingTimeWindows.of(Time.minutes(1)))
              .sum(1) // Count the appearances by ticker per partition
              .map(value -> value.f0 + " count: " + value.f1.toString() + "\n")
              .addSink(createS3SinkFromStaticConfig());
  ```

**注意**  
該應用程式使用 Flink `StreamingFileSink` 物件寫入 Amazon S3。如需 `StreamingFileSink` 的詳細資訊，請參閱 [Apache Flink 文件](https://nightlies.apache.org/flink/flink-docs-release-1.13/)中的 [StreamingFileSink](https://nightlies.apache.org/flink/flink-docs-release-1.13/dev/connectors/streamfile_sink.html)。

##### 修改應用程式程式碼
<a name="examples-s3-modify"></a>

在本節中，您要修改應用程式的程式碼，以將輸出寫入 Amazon S3 儲存貯體。

使用您的使用者名稱更新下列行，以指定應用程式的輸出位置：

```
private static final String s3SinkPath = "s3a://ka-app-code-<username>/data";
```

##### 編譯應用程式程式碼
<a name="examples-s3-compile"></a>

若要編譯應用程式，請執行下列動作：

1. 如果尚未安裝 Java 和 Maven，請先安裝。如需詳細資訊，請參閱[教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md)教學課程中的[完成必要的先決條件](getting-started.md#setting-up-prerequisites)。

1. 使用下列命令編譯應用程式：

   ```
   mvn package -Dflink.version=1.15.3
   ```

編譯應用程式會建立應用程式 JAR 檔案 (`target/aws-kinesis-analytics-java-apps-1.0.jar`)。

**注意**  
提供的來源程式碼依賴於 Java 11 中的程式庫。

##### 上傳 Apache Flink 串流 Java 程式碼
<a name="examples-s3-upload"></a>

在本節中，您會將應用程式的程式碼上傳至在[建立相依資源將範例記錄寫入輸入串流](#examples-s3-resources)一節建立的 Amazon S3 儲存貯體。

1. 在 Amazon S3 主控台中，選擇 **ka-app-code-*<username>*** 儲存貯體，導航到 **code** 資料夾，然後選擇**上傳**。

1. 在**選取檔案**步驟中，選擇 **新增檔案**。導覽至您在上一步驟中建立的 `aws-kinesis-analytics-java-apps-1.0.jar` 檔案。

1. 您不需要變更物件的任何設定，因此請選擇**上傳**。

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

##### 建立並執行 Managed Service for Apache Flink 應用程式
<a name="examples-s3-create-run"></a>

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

##### 建立應用程式
<a name="examples-s3-create"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 儀表板上，選擇**建立分析應用程式**。

1. 在 **Managed Service for Apache Flink - 建立應用程式**頁面，提供應用程式詳細資訊，如下所示：
   + 在**應用程式名稱**中，輸入 **MyApplication**。
   + 對於**​執行期**，選擇 **​Apache Flink**。
   + 將版本下拉式清單保留為 **Apache Flink 1.15.2 版 (建議版本)**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。
**注意**  
使用主控台建立 Managed Service for Apache Flink 應用程式時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
在**應用程式名稱**中，輸入 **MyApplication**。
對於**​執行期**，選擇 **​Apache Flink**。
將版本保留為 **Apache Flink 1.15.2 版 (建議版本)**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。

**注意**  
使用主控台建立 Managed Service for Apache Flink 時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
政策：`kinesis-analytics-service-MyApplication-us-west-2`
角色：`kinesisanalytics-MyApplication-us-west-2`

##### 編輯 IAM 政策
<a name="get-started-exercise-7-console-iam"></a>

編輯 IAM 政策來新增存取 Kinesis 資料串流的許可。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇**政策**。選擇主控台為您在上一節所建立的 **`kinesis-analytics-service-MyApplication-us-west-2`** 政策。

1. 在**摘要**頁面，選擇**編輯政策**。請選擇 **JSON** 標籤。

1. 將下列政策範例的反白部分新增至政策。使用您的帳戶 ID 取代範例帳戶 ID (*012345678901*)。使用您的使用者名稱取代 <username>。

   ```
   {
               "Sid": "S3",
               "Effect": "Allow",
               "Action": [
                   "s3:Abort*",
                   "s3:DeleteObject*",
                   "s3:GetObject*",
                   "s3:GetBucket*",
                   "s3:List*",
                   "s3:ListBucket",
                   "s3:PutObject"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-<username>",
                   "arn:aws:s3:::ka-app-code-<username>/*"
               ]
             }, 
           {
               "Sid": "ListCloudwatchLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:region:account-id:log-group:*"
               ]
           },
           {
               "Sid": "ListCloudwatchLogStreams",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogStreams"
               ],
               "Resource": [
                   "arn:aws:logs:region:account-id:log-group:%LOG_GROUP_PLACEHOLDER%:log-stream:*"
               ]
           },
           {
               "Sid": "PutCloudwatchLogs",
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:region:account-id:log-group:%LOG_GROUP_PLACEHOLDER%:log-stream:%LOG_STREAM_PLACEHOLDER%"
               ]
           }
           ,
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           },
           
       ]
   }
   ```

##### 設定應用程式
<a name="examples-s3-configure"></a>

1. 在**我的應用程式**頁面，選擇**設定**。

1. 在**設定應用程式**頁面，提供**程式碼位置**：
   + 對於 **Amazon S3 儲存貯體**，請輸入 **ka-app-code-*<username>***。
   + 對於 **Amazon S3 物件的路徑**，請輸入 **code/aws-kinesis-analytics-java-apps-1.0.jar**。

1. 在**存取應用程式資源**下，對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 在**監控**下，確保**監控指標層級**設為**應用程式**。

1. 針對 **CloudWatch 記錄**，選取**啟用**核取方塊。

1. 選擇**更新**。

**注意**  
當您選擇啟用 CloudWatch 記錄時，Managed Service for Apache Flink 便會為您建立日誌群組和日誌串流。這些資源的名稱如下所示：  
日誌群組：`/aws/kinesis-analytics/MyApplication`
日誌串流：`kinesis-analytics-log-stream`
此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

##### 執行應用程式
<a name="examples-s3-run"></a>

1. 在 **MyApplication** 頁面，選擇**執行**。保持選取**不使用快照執行**選項，然後確認動作。

1. 應用程式執行時，重新整理頁面。主控台會顯示 **Application graph (應用程式圖形)**。

##### 驗證應用程式輸出
<a name="examples-s3-verify"></a>

在 Amazon S3 主控台中開啟 S3 儲存貯體中的 **data** 資料夾。

幾分鐘後，將顯示包含來自應用程式之彙總資料的物件。

**注意**  
彙總在 Flink 中預設為啟用。可使用下列命令將其停用：  

```
sink.producer.aggregation-enabled' = 'false'
```

##### 選用：自訂來源和接收器
<a name="examples-s3-customize"></a>

在本節中，您將自訂來源和接收器物件的設定。

**注意**  
在變更以下各節中描述的程式碼區段之後，請執行下列動作以重新載入應用程式的程式碼：  
重複[編譯應用程式程式碼](#examples-s3-compile)一節中的步驟，以編譯更新的應用程式程式碼。
重複[上傳 Apache Flink 串流 Java 程式碼](#examples-s3-upload)一節中的步驟，以上傳更新的應用程式程式碼。
在主控台的應用程式頁面，選擇**設定**，然後選擇**更新**，以將更新的應用程式程式碼重新載入您的應用程式。

**Topics**
+ [設定資料分割](#examples-s3-configure-partition)
+ [設定讀取頻率](#examples-s3-configure-read)
+ [設定寫入緩衝](#examples-s3-configure-write)

##### 設定資料分割
<a name="examples-s3-configure-partition"></a>

在本節中，您可以設定串流檔案接收器在 S3 儲存貯體中建立的資料夾名稱。若要執行此作業，請將儲存貯體指派者新增至串流檔案接收器。

若要自訂 S3 儲存貯體中建立的資料夾之名稱，請執行以下動作：

1. 將以下 import 陳述式新增到 `S3StreamingSinkJob.java` 檔案的開頭：

   ```
   import org.apache.flink.streaming.api.functions.sink.filesystem.rollingpolicies.DefaultRollingPolicy;
   import org.apache.flink.streaming.api.functions.sink.filesystem.bucketassigners.DateTimeBucketAssigner;
   ```

1. 將程式碼中的 `createS3SinkFromStaticConfig()` 方法更新為如下所示：

   ```
   private static StreamingFileSink<String> createS3SinkFromStaticConfig() {
   
       final StreamingFileSink<String> sink = StreamingFileSink
           .forRowFormat(new Path(s3SinkPath), new SimpleStringEncoder<String>("UTF-8"))
           .withBucketAssigner(new DateTimeBucketAssigner("yyyy-MM-dd--HH"))
           .withRollingPolicy(DefaultRollingPolicy.create().build())
           .build();
       return sink;
   }
   ```

上述程式碼範例使用自訂日期格式的 `DateTimeBucketAssigner` 在 S3 儲存貯體中建立資料夾。`DateTimeBucketAssigner` 使用目前的系統時間建立儲存貯體名稱。如果您想要建立自訂儲存貯體指派者，以進一步自訂建立的資料夾名稱，您可以建立實作 [BucketAssigner](https://nightlies.apache.org/flink/flink-docs-release-1.15/api/java/org/apache/flink/streaming/api/functions/sink/filesystem/BucketAssigner.html) 的類別。您可以使用 `getBucketId` 方法實作自訂邏輯。

`BucketAssigner` 的自訂實作可以使用 [Context](https://nightlies.apache.org/flink/flink-docs-release-1.15/api/java/org/apache/flink/streaming/api/functions/sink/filesystem/BucketAssigner.Context.html) 參數取得記錄的詳細資訊，以判定其目的地資料夾。

##### 設定讀取頻率
<a name="examples-s3-configure-read"></a>

在本節中，您可以設定來源串流的讀取頻率。

依預設，Kinesis 串流取用者每秒會從來源串流讀取五次。如果有多個用戶端從串流讀取，或應用程式需要重試讀取記錄，則此頻率會造成問題。您可以設定取用者的讀取頻率來避免這些問題。

若要設定 Kinesis 取用者的讀取頻率，請設定 `SHARD_GETRECORDS_INTERVAL_MILLIS` 設定。

下列程式碼範例會將 `SHARD_GETRECORDS_INTERVAL_MILLIS` 設定設為 1 秒：

```
kinesisConsumerConfig.setProperty(ConsumerConfigConstants.SHARD_GETRECORDS_INTERVAL_MILLIS, "1000");
```

##### 設定寫入緩衝
<a name="examples-s3-configure-write"></a>

在本節中，您要設定接收器的寫入頻率和其他設定。

依預設，應用程式會每分鐘寫入目的地儲存貯體。您可以設定 `DefaultRollingPolicy` 物件來變更此間隔和其他設定。

**注意**  
每次應用程式建立檢查點時，Apache Flink 串流檔案接收器都會寫入其輸出儲存貯體。應用程式預設每分鐘建立一個檢查點。若要增加 S3 接收器的寫入間隔，必須也增加檢查點間隔。

若要設定 `DefaultRollingPolicy` 物件，請執行下列動作：

1. 增加應用程式的 `CheckpointInterval` 設定。[UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html) 動作的下列輸入會將檢查點間隔設定為 10 分鐘：

   ```
   {
      "ApplicationConfigurationUpdate": {  
         "FlinkApplicationConfigurationUpdate": { 
            "CheckpointConfigurationUpdate": {
               "ConfigurationTypeUpdate" : "CUSTOM", 
               "CheckpointIntervalUpdate": 600000
            }
         }
      },
      "ApplicationName": "MyApplication",
      "CurrentApplicationVersionId": 5
   }
   ```

   若要使用上述程式碼，請指定目前的應用程式版本。您可以使用 [ListApplications](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_ListApplications.html) 動作擷取目前的應用程式版本。

1. 將以下 import 陳述式新增到 `S3StreamingSinkJob.java` 檔案的開頭：

   ```
   import java.util.concurrent.TimeUnit; 
   ```

1. 將 `S3StreamingSinkJob.java` 檔案中的 `createS3SinkFromStaticConfig` 方法更新為如下所示：

   ```
   private static StreamingFileSink<String> createS3SinkFromStaticConfig() {
   
           final StreamingFileSink<String> sink = StreamingFileSink
                   .forRowFormat(new Path(s3SinkPath), new SimpleStringEncoder<String>("UTF-8"))
                   .withBucketAssigner(new DateTimeBucketAssigner("yyyy-MM-dd--HH"))
                   .withRollingPolicy(
                           DefaultRollingPolicy.create()
                               .withRolloverInterval(TimeUnit.MINUTES.toMillis(8))
                               .withInactivityInterval(TimeUnit.MINUTES.toMillis(5))
                               .withMaxPartSize(1024 * 1024 * 1024)
                               .build())
                   .build();
           return sink;
       }
   ```

   上述程式碼範例會將寫入 Amazon S3 儲存貯體的頻率設定為 8 分鐘。

如需設定 Apache Flink 串流檔案接收器的詳細資訊，請參閱 [Apache Flink 文件](https://nightlies.apache.org/flink/flink-docs-release-1.13/)中的[資料列編碼格式](https://nightlies.apache.org/flink/flink-docs-release-1.13/dev/connectors/streamfile_sink.html#row-encoded-formats)。

##### 清除 AWS 資源
<a name="examples-s3-cleanup"></a>

本節包含清除您在 Amazon S3 教學課程中建立 AWS 之資源的程序。

**Topics**
+ [刪除 Managed Service for Apache Flink 應用程式](#examples-s3-cleanup-app)
+ [刪除您的 Kinesis 資料串流](#examples-s3-cleanup-stream)
+ [刪除您的 Amazon S3 物件和儲存貯體](#examples-s3-cleanup-s3)
+ [刪除您的 IAM 資源](#examples-s3-cleanup-iam)
+ [刪除您的 CloudWatch 資源](#examples-s3-cleanup-cw)

##### 刪除 Managed Service for Apache Flink 應用程式
<a name="examples-s3-cleanup-app"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 面板中，選擇 **MyApplication**。

1. 在應用程式頁面，選擇**刪除**，然後確認刪除。

##### 刪除您的 Kinesis 資料串流
<a name="examples-s3-cleanup-stream"></a>

1. 在以下網址開啟 Kinesis 主控台：[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis)。

1. 在 Kinesis Data Streams 面板中，選擇 **ExampleInputStream**。

1. 在 **ExampleInputStream** 頁面，選擇**刪除 Kinesis 串流**，然後確認刪除。

##### 刪除您的 Amazon S3 物件和儲存貯體
<a name="examples-s3-cleanup-s3"></a>

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 選擇 **ka-app-code-*<username>* 儲存貯體。**

1. 選擇**刪除**，然後輸入儲存貯體名稱以確認刪除。

##### 刪除您的 IAM 資源
<a name="examples-s3-cleanup-iam"></a>

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽列中，選擇**政策**。

1. 在篩選器控制項中，輸入 **kinesis**。

1. 選擇 **kinesis-analytics-service-MyApplication-us-west-2** 政策。

1. 選擇**政策動作**，然後選擇**刪除**。

1. 在導覽列中，選擇**角色**。

1. 選擇 **kinesis-analytics-MyApplication-us-west-2** 角色。

1. 選擇**刪除角色**，然後確認刪除。

##### 刪除您的 CloudWatch 資源
<a name="examples-s3-cleanup-cw"></a>

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽列中，選擇**日誌**。

1. 選擇 **/aws/kinesis-analytics/MyApplication** 日誌群組。

1. 選擇**刪除日誌群組**，然後確認刪除。

#### 教學課程：使用 Managed Service for Apache Flink 應用程式，將資料從 MSK 叢集中的一個主題複寫到 VPC 中的另一個主題
<a name="example-msk"></a>

**注意**  
如需目前範例，請參閱 [建立和使用 Managed Service for Apache Flink 應用程式的範例](examples-collapsibles.md)。

以下教學課程將示範如何建立 Amazon MSK 叢集和 Amazon VPC 以及兩個主題，以及如何建立一個 Managed Service for Apache Flink 應用程式以從 Amazon MSK 主題讀取並寫入另一個主題。

**注意**  
若要設定此練習的必要先決條件，請先完成 [教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md) 練習。

**Topics**
+ [建立 Amazon VPC 和 Amazon MSK 叢集](#example-msk-createcluster)
+ [建立應用程式碼](#example-msk-code)
+ [上傳 Apache Flink 串流 Java 程式碼](#example-msk-upload)
+ [建立應用程式](#example-msk-create)
+ [設定應用程式](#example-msk-configure)
+ [執行應用程式](#example-msk-run)
+ [測試應用程式。](#example-msk-test)

##### 建立 Amazon VPC 和 Amazon MSK 叢集
<a name="example-msk-createcluster"></a>

若要建立範例 VPC 和 Amazon MSK 叢集以從 Managed Service for Apache Flink 應用程式存取，請按照 [Amazon MSK 使用入門](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html)教學課程進行操作。

完成教學課程時，請注意以下事項：
+ 在[步驟 3：建立主題](https://docs.aws.amazon.com/msk/latest/developerguide/create-topic.html)中，重複 `kafka-topics.sh --create` 命令以建立名為 `AWSKafkaTutorialTopicDestination` 的目的地主題：

  ```
  bin/kafka-topics.sh --create --zookeeper ZooKeeperConnectionString --replication-factor 3 --partitions 1 --topic AWS KafkaTutorialTopicDestination
  ```
+ 記錄叢集的啟動伺服器清單。您可以使用以下命令取得啟動伺服器的清單 (使用 *ClusterArn* 取代 MSK 叢集的 ARN)：

  ```
  aws kafka get-bootstrap-brokers --region us-west-2 --cluster-arn ClusterArn
  {...
      "BootstrapBrokerStringTls": "b-2.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-1.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-3.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094"
  }
  ```
+ 遵循教學課程中的步驟時，請務必在程式碼、命令和主控台項目中使用您選取的 AWS 區域。

##### 建立應用程式碼
<a name="example-msk-code"></a>

在本節中，您會下載並編譯應用程式 JAR 檔案。我們建議使用 Java 11。

此範例的 Java 應用程式的程式碼可從 GitHub 下載。若要下載應用程式的程式碼，請執行下列動作：

1. 如果您尚未安裝 Git 用戶端，請先安裝。如需詳細資訊，請參閱[安裝 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。

1. 使用以下指令複製遠端儲存庫：

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. 應用程式的程式碼位於 `amazon-kinesis-data-analytics-java-examples/KafkaConnectors/KafkaGettingStartedJob.java` 檔案中。您可以檢查程式碼，以熟悉 Managed Service for Apache Flink 應用程式程式碼的結構。

1. 使用命令列 Maven 工具或偏好的開發環境來建立 JAR 檔案。若要使用命令列 Maven 工具編譯 JAR 檔案，請輸入下列命令：

   ```
   mvn package -Dflink.version=1.15.3
   ```

   如果建置成功，會建立下列檔案：

   ```
   target/KafkaGettingStartedJob-1.0.jar
   ```
**注意**  
提供的來源程式碼依賴於 Java 11 中的程式庫。如果您使用的是開發環境，

##### 上傳 Apache Flink 串流 Java 程式碼
<a name="example-msk-upload"></a>

在本節中，您會將應用程式的程式碼上傳至在[教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md)一節建立的 Amazon S3 儲存貯體。

**注意**  
如果您從入門教學課程中刪除了 Amazon S3 儲存貯體，請再次執行下列 [上傳應用程式碼 JAR 檔案](get-started-exercise.md#get-started-exercise-6) 步驟。

1. 在 Amazon S3 主控台中，選擇 **ka-app-code-*<username>*** 儲存貯體，並選擇**上傳**。

1. 在**選取檔案**步驟中，選擇**新增檔案**。導覽至您在上一步驟中建立的 `KafkaGettingStartedJob-1.0.jar` 檔案。

1. 您不需要變更物件的任何設定，因此請選擇**上傳**。

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

##### 建立應用程式
<a name="example-msk-create"></a>

1. 登入 AWS 管理主控台，並在 https://console.aws.amazon.com/flink：// 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 儀表板上，選擇**建立分析應用程式**。

1. 在 **Managed Service for Apache Flink - 建立應用程式**頁面，提供應用程式詳細資訊，如下所示：
   + 在**應用程式名稱**中，輸入 **MyApplication**。
   + 針對**​執行期**，選擇 **​Apache Flink 1.15.2 版**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。

**注意**  
使用主控台建立 Managed Service for Apache Flink 應用程式時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
政策：`kinesis-analytics-service-MyApplication-us-west-2`
角色：`kinesisanalytics-MyApplication-us-west-2`

##### 設定應用程式
<a name="example-msk-configure"></a>

1. 在**我的應用程式**頁面，選擇**設定**。

1. 在**設定應用程式**頁面，提供**程式碼位置**：
   + 對於 **Amazon S3 儲存貯體**，請輸入 **ka-app-code-*<username>***。
   + 對於 **Amazon S3 物件的路徑**，請輸入 **KafkaGettingStartedJob-1.0.jar**。

1. 在**存取應用程式資源**下，對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。
**注意**  
當您使用主控台 (例如 CloudWatch Logs 或 Amazon VPC) 指定應用程式資源時，主控台會修改您的應用程式執行角色，以授與存取這些資源的許可。

1. 在**屬性**下，選擇**新增群組**。輸入下列屬性：  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)
**注意**  
預設憑證的 **ssl.truststore.password** 是「changeit」；如果您使用預設憑證，不需要變更此值。

   再次選擇**新增群組**。輸入下列屬性：  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

   應用程式的程式碼會讀取上述應用程式屬性，以設定用來與 VPC 和 Amazon MSK 叢集互動的來源和接收器。如需如何使用屬性的詳細資訊，請參閱[使用執行期屬性](how-properties.md)。

1. 在**快照**下選擇**停用**。這可以讓您更輕鬆地更新應用程式，而無需加載無效的應用程式狀態資料。

1. 在**監控**下，確保**監控指標層級**設為**應用程式**。

1. 針對 **CloudWatch 記錄**，選取**啟用**核取方塊。

1. 在**虛擬私有雲端 (VPC)** 區段中，選擇要與應用程式建立關聯的 VPC。選擇希望應用程式用來存取 VPC 資源的與 VPC 相關聯的子網路和安全群組。

1. 選擇**更新**。

**注意**  
當您選擇啟用 CloudWatch 記錄時，Managed Service for Apache Flink 便會為您建立日誌群組和日誌串流。這些資源的名稱如下所示：  
日誌群組：`/aws/kinesis-analytics/MyApplication`
日誌串流：`kinesis-analytics-log-stream`
此日誌串流用於監控應用程式。

##### 執行應用程式
<a name="example-msk-run"></a>

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業，即可檢視 Flink 作業圖表。

##### 測試應用程式。
<a name="example-msk-test"></a>

在本節中，您將記錄寫入來源主題。應用程式會從來源主題讀取記錄，並將其寫入目的地主題。您可以將記錄寫入來源主題並讀取目的地主題中的記錄，以確認應用程式是否正常運作。

若要寫入和讀取主題中的記錄，請按照 [Amazon MSK 使用入門](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html)教學課程中的[步驟 6：產生和使用資料](https://docs.aws.amazon.com/msk/latest/developerguide/produce-consume.html)中的步驟進行操作。

若要讀取目的地主題，請在與叢集的第二個連線中使用目的地主題而非來源主題的名稱：

```
bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerString --consumer.config client.properties --topic AWS KafkaTutorialTopicDestination --from-beginning
```

如果目的地主題中未顯示任何記錄，請參閱 [Managed Service for Apache Flink 故障診斷](troubleshooting.md) 主題中的[無法存取 VPC 中的資源](troubleshooting-symptoms.md#troubleshooting-rt-vpc)一節。

#### 範例：搭配 Kinesis 資料串流使用 EFO 取用者
<a name="examples-efo"></a>

**注意**  
如需目前範例，請參閱 [建立和使用 Managed Service for Apache Flink 應用程式的範例](examples-collapsibles.md)。

在本練習中，您會建立 Managed Service for Apache Flink 應用程式，使用[增強型廣發 (EFO) ](https://docs.aws.amazon.com/streams/latest/dev/enhanced-consumers.html)取用者從 Kinesis 資料串流讀取。如果 Kinesis 取用者使用 EFO，Kinesis Data Streams 服務會提供專屬頻寬，而不是讓取用者與其他從串流讀取的取用者共用串流的固定頻寬。

如需將 EFO 用於 Kinesis 取用者的詳細資訊，請參閱 [FLIP-128：將增強型扇出用於 Kinesis 取用者](https://cwiki.apache.org/confluence/display/FLINK/FLIP-128%3A+Enhanced+Fan+Out+for+AWS+Kinesis+Consumers)。

您在此範例中建立的應用程式使用 AWS Kinesis 連接器 (flink-connector-kinesis) 1.15.3。

**注意**  
若要設定此練習的必要先決條件，請先完成 [教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md) 練習。

**Topics**
+ [建立相依資源](#examples-efo-resources)
+ [將範例記錄寫入輸入串流](#examples-efo-write)
+ [下載並檢查應用程式程式碼](#examples-efo-download)
+ [編譯應用程式程式碼](#examples-efo-compile)
+ [上傳 Apache Flink 串流 Java 程式碼](#examples-efo-upload)
+ [建立並執行 Managed Service for Apache Flink 應用程式](#examples-efo-create-run)
+ [清除 AWS 資源](#examples-efo-cleanup)

##### 建立相依資源
<a name="examples-efo-resources"></a>

在為本練習建立 Managed Service for Apache Flink 應用程式之前，先建立下列相依資源：
+ 兩個 Kinesis 資料串流 (`ExampleInputStream` 和 `ExampleOutputStream`)
+ Amazon S3 儲存貯體，用來儲存應用程式的程式碼 (`ka-app-code-<username>`) 

您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示，請參閱以下主題：
+ 《Amazon Kinesis Data Streams 開發人員指南》中的[建立和更新資料串流](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html)**。為資料串流 **ExampleInputStream** 和 **ExampleOutputStream** 命名。
+ 《Amazon Simple Storage Service 使用者指南》中的[如何建立 S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html)。**透過附加登入名稱 (例如 **ka-app-code-*<username>***)，為 Amazon S3 儲存貯體提供全域唯一的名稱。

##### 將範例記錄寫入輸入串流
<a name="examples-efo-write"></a>

在本節，您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

**注意**  
本節需要 [適用於 Python (Boto) 的 AWS SDK](https://aws.amazon.com/developers/getting-started/python/)。

1. 使用下列內容建立名為 `stock.py` 的檔案：

   ```
    
       import datetime
       import json
       import random
       import boto3
   
       STREAM_NAME = "ExampleInputStream"
   
   
       def get_data():
           return {
               'event_time': datetime.datetime.now().isoformat(),
               'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
               'price': round(random.random() * 100, 2)}
   
   
       def generate(stream_name, kinesis_client):
           while True:
               data = get_data()
               print(data)
               kinesis_client.put_record(
                   StreamName=stream_name,
                   Data=json.dumps(data),
                   PartitionKey="partitionkey")
   
   
       if __name__ == '__main__':
           generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
   ```

1. 執行 `stock.py` 指令碼：

   ```
   $ python stock.py
   ```

   在完成教學課程的其餘部分時，讓指令碼保持執行狀態。

##### 下載並檢查應用程式程式碼
<a name="examples-efo-download"></a>

此範例的 Java 應用程式的程式碼可從 GitHub 下載。若要下載應用程式的程式碼，請執行下列動作：

1. 如果您尚未安裝 Git 用戶端，請先安裝。如需詳細資訊，請參閱[安裝 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。

1. 使用以下指令複製遠端儲存庫：

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. 導覽至 `amazon-kinesis-data-analytics-java-examples/EfoConsumer` 目錄。

應用程式的程式碼位於 `EfoApplication.java` 檔案中。請留意下列與應用程式的程式碼相關的資訊：
+ 您可以在 Kinesis 取用者上設定下列參數來啟用 EFO 取用者：
  + **RECORD\$1PUBLISHER\$1TYPE**：將此參數設定為 **EFO**，以便讓應用程式使用 EFO 取用者來存取 Kinesis 資料串流資料。
  + **EFO\$1CONSUMER\$1NAME**：將此參數設定為字串值，確保在此串流的取用者中保持唯一。在相同的 Kinesis 資料串流中重複使用取用者名稱，將導致先前使用該名稱的使用者遭到終止。
+ 下列程式碼範例示範如何將值指派給取用者組態屬性，以便使用 EFO 取用者從來源串流讀取：

  ```
  consumerConfig.putIfAbsent(RECORD_PUBLISHER_TYPE, "EFO");
  consumerConfig.putIfAbsent(EFO_CONSUMER_NAME, "basic-efo-flink-app");
  ```

##### 編譯應用程式程式碼
<a name="examples-efo-compile"></a>

若要編譯應用程式，請執行下列動作：

1. 如果尚未安裝 Java 和 Maven，請先安裝。如需詳細資訊，請參閱[教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md)教學課程中的[完成必要的先決條件](getting-started.md#setting-up-prerequisites)。

1. 使用下列命令編譯應用程式：

   ```
   mvn package -Dflink.version=1.15.3
   ```
**注意**  
提供的來源程式碼依賴於 Java 11 中的程式庫。

編譯應用程式會建立應用程式 JAR 檔案 (`target/aws-kinesis-analytics-java-apps-1.0.jar`)。

##### 上傳 Apache Flink 串流 Java 程式碼
<a name="examples-efo-upload"></a>

在本節中，您會將應用程式的程式碼上傳至在[建立相依資源](#examples-efo-resources)一節建立的 Amazon S3 儲存貯體。

1. 在 Amazon S3 主控台中，選擇 **ka-app-code-*<username>*** 儲存貯體，並選擇**上傳**。

1. 在**選取檔案**步驟中，選擇**新增檔案**。導覽至您在上一步驟中建立的 `aws-kinesis-analytics-java-apps-1.0.jar` 檔案。

1. 您不需要變更物件的任何設定，因此請選擇**上傳**。

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

##### 建立並執行 Managed Service for Apache Flink 應用程式
<a name="examples-efo-create-run"></a>

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

##### 建立應用程式
<a name="examples-efo-create"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 儀表板上，選擇**建立分析應用程式**。

1. 在 **Managed Service for Apache Flink - 建立應用程式**頁面，提供應用程式詳細資訊，如下所示：
   + 在**應用程式名稱**中，輸入 **MyApplication**。
   + 對於**​執行期**，選擇 **​Apache Flink**。
**注意**  
Managed Service for Apache Flink 使用 Apache Flink 1.15.2 版。
   + 將版本下拉式清單保留為 **Apache Flink 1.15.2 版 (建議版本)**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。

**注意**  
使用主控台建立 Managed Service for Apache Flink 應用程式時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
政策：`kinesis-analytics-service-MyApplication-us-west-2`
角色：`kinesisanalytics-MyApplication-us-west-2`

##### 編輯 IAM 政策
<a name="get-started-exercise-7-console-iam"></a>

編輯 IAM 政策來新增存取 Kinesis 資料串流的許可。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇**政策**。選擇主控台為您在上一節所建立的 **`kinesis-analytics-service-MyApplication-us-west-2`** 政策。

1. 在**摘要**頁面，選擇**編輯政策**。請選擇 **JSON** 標籤。

1. 將下列政策範例的反白部分新增至政策。使用您的帳戶 ID 取代範例帳戶 ID (*012345678901*)。
**注意**  
這些許可授與應用程式存取 EFO 取用者的能力。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "logs:DescribeLogGroups",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*",
                   "arn:aws:s3:::ka-app-code-<username>/aws-kinesis-analytics-java-apps-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogStreams",
               "Effect": "Allow",
               "Action": "logs:DescribeLogStreams",
               "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
           },
           {
               "Sid": "PutLogEvents",
               "Effect": "Allow",
               "Action": "logs:PutLogEvents",
               "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
           },
           {
               "Sid": "ListCloudwatchLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "Sid": "AllStreams",
               "Effect": "Allow",
               "Action": [
                   "kinesis:ListShards",
                   "kinesis:ListStreamConsumers",
                   "kinesis:DescribeStreamSummary"
               ],
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/*"
           },
           {
               "Sid": "Stream",
               "Effect": "Allow",
               "Action": [
                   "kinesis:DescribeStream",
                   "kinesis:RegisterStreamConsumer",
                   "kinesis:DeregisterStreamConsumer"
               ],
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           },
           {
               "Sid": "WriteOutputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream"
           },
           {
               "Sid": "Consumer",
               "Effect": "Allow",
               "Action": [
                   "kinesis:DescribeStreamConsumer",
                   "kinesis:SubscribeToShard"
               ],
               "Resource": [
                   "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream/consumer/my-efo-flink-app",
                   "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream/consumer/my-efo-flink-app:*"
               ]
           }
       ]
   }
   ```

------

##### 設定應用程式
<a name="examples-efo-configure"></a>

1. 在**我的應用程式**頁面，選擇**設定**。

1. 在**設定應用程式**頁面，提供**程式碼位置**：
   + 對於 **Amazon S3 儲存貯體**，請輸入 **ka-app-code-*<username>***。
   + 對於 **Amazon S3 物件的路徑**，請輸入 **aws-kinesis-analytics-java-apps-1.0.jar**。

1. 在**存取應用程式資源**下，對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 在**屬性**下，選擇**建立群組**。

1. 輸入以下應用程式屬性和數值：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

1. 在**屬性**下，選擇**建立群組**。

1. 輸入以下應用程式屬性和數值：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

1. 在**監控**下，確保**監控指標層級**設為**應用程式**。

1. 針對 **CloudWatch 記錄**，選取**啟用**核取方塊。

1. 選擇**更新**。

**注意**  
當您選擇啟用 CloudWatch 記錄時，Managed Service for Apache Flink 便會為您建立日誌群組和日誌串流。這些資源的名稱如下所示：  
日誌群組：`/aws/kinesis-analytics/MyApplication`
日誌串流：`kinesis-analytics-log-stream`
此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

##### 執行應用程式
<a name="examples-efo-run"></a>

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業，即可檢視 Flink 作業圖表。

您可以在 CloudWatch 主控台上查看 Managed Service for Apache Flink 指標，以確認應用程式是否正常運作。

您也可以在資料串流的**增強型扇出**標籤中查看 Kinesis Data Streams 主控台，以取得取用者名稱 (*basic-efo-flink-app*)。

##### 清除 AWS 資源
<a name="examples-efo-cleanup"></a>

本節包含清除 efo Window 教學課程中建立 AWS 的資源的程序。

**Topics**
+ [刪除 Managed Service for Apache Flink 應用程式](#examples-efo-cleanup-app)
+ [刪除您的 Kinesis 資料串流](#examples-efo-cleanup-stream)
+ [刪除 Amazon S3 物件與儲存貯體](#examples-efo-cleanup-s3)
+ [刪除您的 IAM 資源](#examples-efo-cleanup-iam)
+ [刪除您的 CloudWatch 資源](#examples-efo-cleanup-cw)

##### 刪除 Managed Service for Apache Flink 應用程式
<a name="examples-efo-cleanup-app"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 面板中，選擇 **MyApplication**。

1. 在應用程式的頁面，選擇**刪除**，然後確認刪除。

##### 刪除您的 Kinesis 資料串流
<a name="examples-efo-cleanup-stream"></a>

1. 在以下網址開啟 Kinesis 主控台：[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis)。

1. 在 Kinesis Data Streams 面板中，選擇 **ExampleInputStream**。

1. 在 **ExampleInputStream** 頁面，選擇**刪除 Kinesis 串流**，然後確認刪除。

1. 在 **Kinesis 串流**頁面，依序選擇 **ExampleOutputStream**、**動作**和**刪除**，然後確認刪除。

##### 刪除 Amazon S3 物件與儲存貯體
<a name="examples-efo-cleanup-s3"></a>

1. 在以下網址開啟 Amazon S3 主控台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 選擇 **ka-app-code-*<username>* 儲存貯體。**

1. 選擇**刪除**，然後輸入儲存貯體名稱以確認刪除。

##### 刪除您的 IAM 資源
<a name="examples-efo-cleanup-iam"></a>

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽列中，選擇**政策**。

1. 在篩選器控制項中，輸入 **kinesis**。

1. 選擇 **kinesis-analytics-service-MyApplication-us-west-2** 政策。

1. 選擇**政策動作**，然後選擇**刪除**。

1. 在導覽列中，選擇**角色**。

1. 選擇 **kinesis-analytics-MyApplication-us-west-2** 角色。

1. 選擇**刪除角色**，然後確認刪除。

##### 刪除您的 CloudWatch 資源
<a name="examples-efo-cleanup-cw"></a>

1. 在以下網址開啟 CloudWatch 主控台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在導覽列中，選擇**日誌**。

1. 選擇 **/aws/kinesis-analytics/MyApplication** 日誌群組。

1. 選擇**刪除日誌群組**，然後確認刪除。

#### 範例：寫入 Firehose
<a name="get-started-exercise-fh"></a>

**注意**  
如需目前範例，請參閱 [建立和使用 Managed Service for Apache Flink 應用程式的範例](examples-collapsibles.md)。

在本練習中，您會建立 Managed Service for Apache Flink 應用程式，其具有 Kinesis 資料串流做為來源，以及 Firehose 串流做為接收器。使用接收器，您就可以驗證 Amazon S3 儲存貯體的應用程式輸出。

**注意**  
若要設定此練習的必要先決條件，請先完成 [教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md) 練習。

**Topics**
+ [建立相依資源](#get-started-exercise-fh-1)
+ [將範例記錄寫入輸入串流](#get-started-exercise-fh-2)
+ [下載並檢查 Apache Flink 串流 Java 程式碼](#get-started-exercise-fh-5)
+ [編譯應用程式程式碼](#get-started-exercise-fh-5.5)
+ [上傳 Apache Flink 串流 Java 程式碼](#get-started-exercise-fh-6)
+ [建立並執行 Managed Service for Apache Flink 應用程式](#get-started-exercise-fh-7)
+ [清除 AWS 資源](#getting-started-fh-cleanup)

##### 建立相依資源
<a name="get-started-exercise-fh-1"></a>

在為本練習建立 Managed Service for Apache Flink 之前，先建立下列相依資源：
+ Kinesis 資料串流 (`ExampleInputStream`) 
+ 應用程式將輸出寫入 () 的 Firehose 串流`ExampleDeliveryStream`。
+ Amazon S3 儲存貯體，用來儲存應用程式的程式碼 (`ka-app-code-<username>`)

您可以使用 主控台建立 Kinesis 串流、Amazon S3 儲存貯體和 Firehose 串流。如需建立這些資源的相關指示，請參閱以下主題：
+ 《Amazon Kinesis Data Streams 開發人員指南》中的[建立和更新資料串流](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html)**。為資料串流 **ExampleInputStream** 命名。
+ 《[Amazon Data Firehose 開發人員指南》中的建立 Amazon Kinesis Data Firehose 交付串流](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html)。 **為您的 Firehose 串流命名 **ExampleDeliveryStream**。當您建立 Firehose 串流時，也請建立 Firehose 串流的 **S3 目的地**和 **IAM 角色**。
+ 《Amazon Simple Storage Service 使用者指南》中的[如何建立 S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html)。**透過附加登入名稱 (例如 **ka-app-code-*<username>***)，為 Amazon S3 儲存貯體提供全域唯一的名稱。

##### 將範例記錄寫入輸入串流
<a name="get-started-exercise-fh-2"></a>

在本節，您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

**注意**  
本節需要 [適用於 Python (Boto) 的 AWS SDK](https://aws.amazon.com/developers/getting-started/python/)。

1. 使用下列內容建立名為 `stock.py` 的檔案：

   ```
    import datetime
       import json
       import random
       import boto3
   
       STREAM_NAME = "ExampleInputStream"
   
   
       def get_data():
           return {
               'event_time': datetime.datetime.now().isoformat(),
               'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
               'price': round(random.random() * 100, 2)}
   
   
       def generate(stream_name, kinesis_client):
           while True:
               data = get_data()
               print(data)
               kinesis_client.put_record(
                   StreamName=stream_name,
                   Data=json.dumps(data),
                   PartitionKey="partitionkey")
   
   
       if __name__ == '__main__':
           generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
   ```

1. 執行 `stock.py` 指令碼：

   ```
   $ python stock.py
   ```

   在完成教學課程的其餘部分時，讓指令碼保持執行狀態。

##### 下載並檢查 Apache Flink 串流 Java 程式碼
<a name="get-started-exercise-fh-5"></a>

此範例的 Java 應用程式的程式碼可從 GitHub 下載。若要下載應用程式的程式碼，請執行下列動作：

1. 使用以下指令複製遠端儲存庫：

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. 導覽至 `amazon-kinesis-data-analytics-java-examples/FirehoseSink` 目錄。

應用程式的程式碼位於 `FirehoseSinkStreamingJob.java` 檔案中。請留意下列與應用程式的程式碼相關的資訊：
+ 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源：

  ```
  return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
                  new SimpleStringSchema(), inputProperties));
  ```
+ 應用程式使用 Firehose 接收器將資料寫入 Firehose 串流。下列程式碼片段會建立 Firehose 接收器：

  ```
  private static KinesisFirehoseSink<String> createFirehoseSinkFromStaticConfig() {
          Properties sinkProperties = new Properties();
          sinkProperties.setProperty(AWS_REGION, region);
  
          return KinesisFirehoseSink.<String>builder()
                  .setFirehoseClientProperties(sinkProperties)
                  .setSerializationSchema(new SimpleStringSchema())
                  .setDeliveryStreamName(outputDeliveryStreamName)
                  .build();
      }
  ```

##### 編譯應用程式程式碼
<a name="get-started-exercise-fh-5.5"></a>

若要編譯應用程式，請執行下列動作：

1. 如果尚未安裝 Java 和 Maven，請先安裝。如需詳細資訊，請參閱[教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md)教學課程中的[完成必要的先決條件](getting-started.md#setting-up-prerequisites)。

1. **若要將 Kinesis 連接器用於以下應用程式，您需要下載、建置並安裝 Apache Maven。如需詳細資訊，請參閱 [將 Apache Flink Kinesis Streams 連接器與先前的 Apache Flink 版本搭配使用](#how-creating-apps-building-kinesis)。**

1. 使用下列命令編譯應用程式：

   ```
   mvn package -Dflink.version=1.15.3
   ```
**注意**  
提供的來源程式碼依賴於 Java 11 中的程式庫。

編譯應用程式會建立應用程式 JAR 檔案 (`target/aws-kinesis-analytics-java-apps-1.0.jar`)。

##### 上傳 Apache Flink 串流 Java 程式碼
<a name="get-started-exercise-fh-6"></a>

在本節中，您會將應用程式的程式碼上傳至在[建立相依資源](#get-started-exercise-fh-1)一節建立的 Amazon S3 儲存貯體。

**上傳應用程式的程式碼**

1. 前往 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 開啟的 Amazon Simple Storage Service (Amazon S3) 主控台。

1. 在主控台中，選擇 **ka-app-code-*<username>*** 儲存貯體，並選擇**上傳**。

1. 在**選取檔案**步驟中，選擇 **新增檔案**。導覽至您在上一步驟中建立的 `java-getting-started-1.0.jar` 檔案。

1. 您不需要變更物件的任何設定，因此請選擇**上傳**。

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

##### 建立並執行 Managed Service for Apache Flink 應用程式
<a name="get-started-exercise-fh-7"></a>

您可以使用主控台或 AWS CLI建立和執行 Managed Service for Apache Flink 應用程式。

**注意**  
當您使用 主控台建立應用程式時，系統會為您建立 AWS Identity and Access Management (IAM) 和 Amazon CloudWatch Logs 資源。當您使用 建立應用程式時 AWS CLI，您可以分別建立這些資源。

**Topics**
+ [建立並執行應用程式 （主控台）](#get-started-exercise-fh-7-console)
+ [建立並執行應用程式 (AWS CLI)](#get-started-exercise-fh-7-cli)

##### 建立並執行應用程式 （主控台）
<a name="get-started-exercise-fh-7-console"></a>

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

##### 建立應用程式
<a name="get-started-exercise-fh-7-console-create"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 儀表板上，選擇**建立分析應用程式**。

1. 在 **Managed Service for Apache Flink - 建立應用程式**頁面，提供應用程式詳細資訊，如下所示：
   + 在**應用程式名稱**中，輸入 **MyApplication**。
   + 對於 **Description (說明)**，輸入 **My java test app**。
   + 對於**​執行期**，選擇 **​Apache Flink**。
**注意**  
Managed Service for Apache Flink 使用 Apache Flink 1.15.2 版。
   + 將版本下拉式清單保留為 **Apache Flink 1.15.2 版 (建議版本)**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。

**注意**  
使用主控台建立應用程式時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式會使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
政策：`kinesis-analytics-service-MyApplication-us-west-2`
角色：`kinesisanalytics-MyApplication-us-west-2`

##### 編輯 IAM 政策
<a name="get-started-exercise-fh-7-console-iam"></a>

編輯 IAM 政策以新增存取 Kinesis 資料串流和 Firehose 串流的許可。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇**政策**。選擇主控台為您在上一節所建立的 **`kinesis-analytics-service-MyApplication-us-west-2`** 政策。

1. 在**摘要**頁面，選擇**編輯政策**。請選擇 **JSON** 標籤。

1. 將下列政策範例的反白部分新增至政策。使用您的帳戶 ID 取代範例帳戶 ID (*012345678901*) 的所有執行個體。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-username/java-getting-started-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "Sid": "DescribeLogStreams",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogStreams"
              ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
               ]
           },
           {
               "Sid": "PutLogEvents",
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
               ]
           },
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           },
           {
               "Sid": "WriteDeliveryStream",
               "Effect": "Allow",
               "Action": "firehose:*",
               "Resource": "arn:aws:firehose:us-west-2:012345678901:deliverystream/ExampleDeliveryStream"
           }
       ]
   }
   ```

------

##### 設定應用程式
<a name="get-started-exercise-fh-7-console-configure"></a>

1. 在**我的應用程式**頁面，選擇**設定**。

1. 在**設定應用程式**頁面，提供**程式碼位置**：
   + 對於 **Amazon S3 儲存貯體**，請輸入 **ka-app-code-*<username>***。
   + 對於 **Amazon S3 物件的路徑**，請輸入 **java-getting-started-1.0.jar**。

1. 在**存取應用程式資源**下，對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 在**監控**下，確保**監控指標層級**設為**應用程式**。

1. 針對 **CloudWatch 記錄**，選取**啟用**核取方塊。

1. 選擇**更新**。

**注意**  
當您選擇啟用 CloudWatch 記錄時，Managed Service for Apache Flink 便會為您建立日誌群組和日誌串流。這些資源的名稱如下所示：  
日誌群組：`/aws/kinesis-analytics/MyApplication`
日誌串流：`kinesis-analytics-log-stream`

##### 執行應用程式
<a name="get-started-exercise-fh-7-console-run"></a>

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業，即可檢視 Flink 作業圖表。

##### 停止應用程式
<a name="get-started-exercise-fh-7-console-stop"></a>

在 **MyApplication** 頁面，選擇**停止**。確認動作。

##### 更新應用程式
<a name="get-started-exercise-fh-7-console-update"></a>

您可以使用主控台更新應用程式設定，例如應用程式屬性、監控設定及位置或應用程式 JAR 的檔名。

在 **MyApplication** 頁面，選擇**設定**。更新應用程式設定，然後選擇**更新**。

**注意**  
若要在主控台上更新應用程式的程式碼，您必須變更 JAR 的物件名稱、使用不同的 S3 儲存貯體，或使用[更新應用程式的程式碼](#get-started-exercise-fh-7-cli-update-code)章節中所述的 AWS CLI 。如果檔案名稱或儲存貯體未變更，當您在**設定**頁面上選擇**更新**時，不會重新載入應用程式的程式碼。

##### 建立並執行應用程式 (AWS CLI)
<a name="get-started-exercise-fh-7-cli"></a>

在本節中，您可以使用 AWS CLI 來建立和執行 Managed Service for Apache Flink 應用程式。

##### 建立許可政策
<a name="get-started-exercise-fh-7-cli-policy"></a>

您會先建立具有兩條陳述式的許可政策：一條陳述式授與來源串流上 `read` 動作的許可，而另一條則是授與目的地串流上 `write` 動作的許可。您之後會將政策連接至 IAM 角色 (您會在下一節中建立)。因此，當 Managed Service for Apache Flink 擔任角色時，服務便具有從來源串流讀取並寫入目的地串流的所需許可。

使用以下程式碼來建立 `AKReadSourceStreamWriteSinkStream` 許可政策。使用您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 *username* 。使用您的帳戶 ID 取代 Amazon Resource Name (ARN) (`012345678901`) 中的帳戶 ID。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": ["arn:aws:s3:::ka-app-code-username",
                "arn:aws:s3:::ka-app-code-username/*"
            ]
        },
        {
            "Sid": "ReadInputStream",
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
        },
        {
            "Sid": "WriteDeliveryStream",
            "Effect": "Allow",
            "Action": "firehose:*",
            "Resource": "arn:aws:firehose:us-west-2:012345678901:deliverystream/ExampleDeliveryStream"
        }
    ]
}
```

------

如需建立許可政策的逐步指示，請參閱《IAM 使用者指南》**中的[教學課程：建立和連接您的第一個客戶管理政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#part-two-create-policy)。

**注意**  
若要存取其他 Amazon 服務，您可以使用 適用於 Java 的 AWS SDK。Managed Service for Apache Flink 自動將 SDK 所需的憑證設定為與應用程式相關聯的服務執行 IAM 角色。無須採取額外的步驟。

##### 建立 IAM 角色
<a name="get-started-exercise-fh-7-cli-role"></a>

在本節中，您會建立 Managed Service for Apache Flink 應用程式可以擔任的 IAM 角色，以便讀取來源串流與寫入目的地串流。

Managed Service for Apache Flink 如果沒有許可，將無法存取串流。您可以透過 IAM 角色來授與這些許可。各 IAM 角色都有連接兩項政策。信任政策會授與 Managed Service for Apache Flink 許可以擔任角色。許可政策決定了 Managed Service for Apache Flink 在擔任角色之後可以執行的作業。

您會將在上一節中建立的許可政策連接至此角色。

**若要建立一個 IAM 角色**

1. 前往網址 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**角色** 、**建立角色**。

1. 在**選取可信身分類型**下，選擇 **AWS 服務**。在**選擇將使用此角色的服務**下，選擇 **Kinesis**。在 **Select your use case (選取您的使用案例)** 下，選擇 **Kinesis Analytics (Kinesis 分析)**。

   選擇**下一步：許可**。

1. 在**連接許可政策**頁面，選擇**下一步：檢閱**。您會在建立角色後連接許可政策。

1. 在**建立角色**頁面，輸入 **MF-stream-rw-role** 作為**角色名稱**。選擇建**立角色**。

   現在您已建立新的 IAM 角色，名為 `MF-stream-rw-role`。您接著會更新角色的信任和許可政策。

1. 將 許可政策連接到角色。
**注意**  
在此練習中，Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟中建立的政策，[建立許可政策](#get-started-exercise-fh-7-cli-policy)。

   1. 在**摘要**頁面，選擇**許可**標籤。

   1. 選擇**連接政策**。

   1. 在搜尋方塊中，輸入 **AKReadSourceStreamWriteSinkStream** (您在上一節中建立的政策)。

   1. 選擇 **AKReadSourceStreamWriteSinkStream** 政策，然後選擇**連接政策**。

您現在已建立應用程式將用於存取資源的服務執行角色。請記下新角色的 ARN。

如需建立角色的逐步說明，請參閱《IAM 使用者指南》**中的[建立 IAM 角色 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console)。

##### 建立 Managed Service for Apache Flink 應用程式
<a name="get-started-exercise-fh-7-cli-create"></a>

1. 將下列 JSON 程式碼複製到名為 `create_request.json` 的檔案。使用您之前建立之角色的 ARN，取代範例角色 ARN。使用您在[建立相依資源](#get-started-exercise-fh-1)一節中選擇的尾碼 (`ka-app-code-<username>`) 取代儲存貯體 ARN 尾碼。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (*012345678901*)。

   ```
   {
       "ApplicationName": "test",
       "ApplicationDescription": "my java test app",
       "RuntimeEnvironment": "FLINK-1_15",
       "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
       "ApplicationConfiguration": {
           "ApplicationCodeConfiguration": {
               "CodeContent": {
                   "S3ContentLocation": {
                       "BucketARN": "arn:aws:s3:::ka-app-code-username",
                       "FileKey": "java-getting-started-1.0.jar"
                   }
               },
               "CodeContentType": "ZIPFILE"
           }
         }
       }
   }
   ```

1. 使用前述請求執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) 動作以建立應用程式：

   ```
   aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
   ```

應用程式現在已建立。您會在下一個步驟中啟動應用程式。

##### 啟動應用程式
<a name="get-started-exercise-fh-7-cli-start"></a>

在本節中，您會透過 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) 動作來啟動應用程式。

**啟動應用程式**

1. 將下列 JSON 程式碼複製到名為 `start_request.json` 的檔案。

   ```
   {
       "ApplicationName": "test",
       "RunConfiguration": {
           "ApplicationRestoreConfiguration": { 
            "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"
            }
       }
   }
   ```

1. 以啟動應用程式的上述請求，執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) 動作：

   ```
   aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
   ```

應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上查看 Managed Service for Apache Flink 指標，以確認應用程式是否正常運作。

##### 停止應用程式
<a name="get-started-exercise-fh-7-cli-stop"></a>

在本節，您會使用該 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) 動作來停止應用程式。

**停止應用程式**

1. 將下列 JSON 程式碼複製到名為 `stop_request.json` 的檔案。

   ```
   {
       "ApplicationName": "test"
   }
   ```

1. 以停止應用程式的上述請求，執行 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) 動作：

   ```
   aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
   ```

現在已停止應用程式。

##### 新增 CloudWatch 記錄選項
<a name="get-started-exercise-fh-7-cli-cw"></a>

您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需搭配應用程式使用 CloudWatch Logs 的相關資訊，請參閱 [在 Managed Service for Apache Flink 中設定應用程式記錄](cloudwatch-logs.md)。

##### 更新應用程式的程式碼
<a name="get-started-exercise-fh-7-cli-update-code"></a>

當您需要使用新版本的程式碼套件來更新應用程式程式碼時，您可以使用 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) AWS CLI 動作。

若要使用 AWS CLI，請從 Amazon S3 儲存貯體中刪除先前的程式碼套件、上傳新版本，然後呼叫 `UpdateApplication`，指定相同的 Amazon S3 儲存貯體和物件名稱。

`UpdateApplication` 動作的下列範例請求會重新載入應用程式的程式碼並重新啟動應用程式。將 `CurrentApplicationVersionId` 更新至目前的應用程式版本。您可以使用 `ListApplications` 或 `DescribeApplication` 動作來檢查目前的應用程式版本。使用您在[建立相依資源](#get-started-exercise-fh-1)一節中選擇的尾碼更新儲存貯體名稱尾碼 (<*username*>)。

```
{
    "ApplicationName": "test",
    "CurrentApplicationVersionId": 1,
    "ApplicationConfigurationUpdate": {
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username",
                    "FileKeyUpdate": "java-getting-started-1.0.jar"
                }
            }
        }
    }
}
```

##### 清除 AWS 資源
<a name="getting-started-fh-cleanup"></a>

本節包含清除入門教學課程中建立 AWS 之資源的程序。

**Topics**
+ [刪除 Managed Service for Apache Flink 應用程式](#getting-started-fh-cleanup-app)
+ [刪除您的 Kinesis 資料串流](#getting-started-fh-cleanup-stream)
+ [刪除您的 Firehose 串流](#getting-started-fh-cleanup-fh)
+ [刪除您的 Amazon S3 物件和儲存貯體](#getting-started-fh-cleanup-s3)
+ [刪除您的 IAM 資源](#getting-started-fh-cleanup-iam)
+ [刪除您的 CloudWatch 資源](#getting-started-fh-cleanup-cw)

##### 刪除 Managed Service for Apache Flink 應用程式
<a name="getting-started-fh-cleanup-app"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 面板中，選擇 **MyApplication**。

1. 選擇**設定**。

1. 在**快照**區段中，選擇**停用**，然後選擇**更新**。

1. 在應用程式的頁面，選擇**刪除**，然後確認刪除。

##### 刪除您的 Kinesis 資料串流
<a name="getting-started-fh-cleanup-stream"></a>

1. 在以下網址開啟 Kinesis 主控台：[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis)。

1. 在 Kinesis Data Streams 面板中，選擇 **ExampleInputStream**。

1. 在 **ExampleInputStream** 頁面，選擇**刪除 Kinesis 串流**，然後確認刪除。

##### 刪除您的 Firehose 串流
<a name="getting-started-fh-cleanup-fh"></a>

1. 在以下網址開啟 Kinesis 主控台：[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis)。

1. 在 Firehose 面板中，選擇 **ExampleDeliveryStream**。

1. 在 **ExampleDeliveryStream** 頁面中，選擇**刪除 Firehose 串流**，然後確認刪除。

##### 刪除您的 Amazon S3 物件和儲存貯體
<a name="getting-started-fh-cleanup-s3"></a>

1. 在以下網址開啟 Amazon S3 主控台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 選擇 **ka-app-code-*<username>* 儲存貯體。**

1. 選擇**刪除**，然後輸入儲存貯體名稱以確認刪除。

1. 如果您已為 Firehose 串流的目的地建立 Amazon S3 儲存貯體，請一併刪除該儲存貯體。

##### 刪除您的 IAM 資源
<a name="getting-started-fh-cleanup-iam"></a>

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽列中，選擇**政策**。

1. 在篩選器控制項中，輸入 **kinesis**。

1. 選擇 **kinesis-analytics-service-MyApplication-us-west-2** 政策。

1. 選擇**政策動作**，然後選擇**刪除**。

1. 如果您已為 Firehose 串流建立新的政策，請一併刪除該政策。

1. 在導覽列中，選擇**角色**。

1. 選擇 **kinesis-analytics-MyApplication-us-west-2** 角色。

1. 選擇**刪除角色**，然後確認刪除。

1. 如果您為 Firehose 串流建立新的角色，也請刪除該角色。

##### 刪除您的 CloudWatch 資源
<a name="getting-started-fh-cleanup-cw"></a>

1. 在以下網址開啟 CloudWatch 主控台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在導覽列中，選擇**日誌**。

1. 選擇 **/aws/kinesis-analytics/MyApplication** 日誌群組。

1. 選擇**刪除日誌群組**，然後確認刪除。

#### 範例：從不同帳戶中的 Kinesis 串流讀取
<a name="examples-cross"></a>

**注意**  
如需目前範例，請參閱 [建立和使用 Managed Service for Apache Flink 應用程式的範例](examples-collapsibles.md)。

本範例示範如何建立可從不同帳戶的 Kinesis 串流讀取資料的 Managed Service for Apache Flink 應用程式。在此範例中，您將一個帳戶用於來源 Kinesis 串流，將另一個帳戶用於 Managed Service for Apache Flink 應用程式和接收器 Kinesis 串流。

**Topics**
+ [先決條件](#examples-cross-prerequisites)
+ [設定](#examples-cross-setup)
+ [建立來源 Kinesis 串流](#examples-cross-streams)
+ [建立和更新 IAM 角色和政策](#examples-cross-iam)
+ [更新 Python 指令碼](#examples-cross-python)
+ [更新 Java 應用程式](#examples-cross-app)
+ [建置、上傳和執行應用程式](#examples-cross-run)

##### 先決條件
<a name="examples-cross-prerequisites"></a>
+ 在本教學課程中，您將修改*入門*範例，從不同帳戶的 Kinesis 串流讀取資料。請完成[教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md)教學課程後再繼續。
+ 您需要兩個 AWS 帳戶才能完成此教學課程：一個用於來源串流，另一個用於應用程式和接收器串流。使用您用於應用程式和接收器串流入門教學 AWS 課程的帳戶。對來源串流使用不同的 AWS 帳戶。

##### 設定
<a name="examples-cross-setup"></a>

您將使用具名設定檔來存取您的兩個 AWS 帳戶。修改您的 AWS 登入資料和組態檔案，以包含兩個設定檔，其中包含兩個帳戶的 區域和連線資訊。

下列範例憑證檔案包含兩個具名的設定檔 `ka-source-stream-account-profile` 和 `ka-sink-stream-account-profile`。將用於入門教學課程的帳戶用於接收器串流帳戶。

```
[ka-source-stream-account-profile]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[ka-sink-stream-account-profile]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
```

下列範例組態檔案包含具有區域和輸出格式資訊的相同具名設定檔。

```
[profile ka-source-stream-account-profile]
region=us-west-2
output=json

[profile ka-sink-stream-account-profile]
region=us-west-2
output=json
```

**注意**  
本教學課程不使用 `ka-sink-stream-account-profile`。其中包含了如何使用設定檔存取兩個不同 AWS 帳戶的範例。

如需搭配 使用具名設定檔的詳細資訊 AWS CLI，請參閱 *AWS Command Line Interface* 文件中的[具名設定檔](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)。

##### 建立來源 Kinesis 串流
<a name="examples-cross-streams"></a>

在本節中，您將在來源帳戶中建立 Kinesis 串流。

輸入下列命令建立 Kinesis 串流，供應用程式用來輸入。請注意，`--profile` 參數會指定要使用的帳戶設定檔。

```
$ aws kinesis create-stream \
--stream-name SourceAccountExampleInputStream \
--shard-count 1 \
--profile ka-source-stream-account-profile
```

##### 建立和更新 IAM 角色和政策
<a name="examples-cross-iam"></a>

若要允許跨 AWS 帳戶存取物件，您可以在來源帳戶中建立 IAM 角色和政策。然後修改接收器帳戶中的 IAM 政策。如需建立和管理 IAM 角色和政策的相關資訊，請參閱《AWS Identity and Access Management 使用者指南》**中的下列主題：
+ [建立 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)
+ [建立 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)

##### 接收器帳戶角色和政策
<a name="examples-cross-iam-sink"></a>

1. 從入門教學課程編輯 `kinesis-analytics-service-MyApplication-us-west-2` 策略。此政策允許應用程式擔任來源帳戶中的角色，以讀取來源串流。
**注意**  
使用主控台建立應用程式時，主控台會建立名為 `kinesis-analytics-service-<application name>-<application region>` 的政策和名為 `kinesisanalytics-<application name>-<application region>` 的角色。

   將下面反白顯示的部分新增至政策。使用將用於來源串流的帳戶 ID 取代範例帳戶 ID (*SOURCE01234567*)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AssumeRoleInSourceAccount",
               "Effect": "Allow",
               "Action": "sts:AssumeRole",
               "Resource": "arn:aws:iam::123456789012:role/KA-Source-Stream-Role"
           },
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-username/aws-kinesis-analytics-java-apps-1.0.jar"
               ]
           },
           {
               "Sid": "ListCloudwatchLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:123456789012:log-group:*"
               ]
           },
           {
               "Sid": "ListCloudwatchLogStreams",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogStreams"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:123456789012:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
               ]
           },
           {
               "Sid": "PutCloudwatchLogs",
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:123456789012:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
               ]
           }
       ]
   }
   ```

------

1. 開啟 `kinesis-analytics-MyApplication-us-west-2` 角色，記下其 Amazon Resource Name (ARN)。您會在下一節中用到它。角色 ARN 如下所示：

   ```
   arn:aws:iam::SINK012345678:role/service-role/kinesis-analytics-MyApplication-us-west-2
   ```

##### 來源帳戶角色和政策
<a name="examples-cross-iam-source"></a>

1. 在名為的 `KA-Source-Stream-Policy` 來源帳戶中建立策略。可以為政策使用下列 JSON。使用來源帳戶 ID 取代範例帳戶 ID。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": [
                   "kinesis:DescribeStream",
                   "kinesis:GetRecords",
                   "kinesis:GetShardIterator",
                   "kinesis:ListShards"
               ],
               "Resource": "arn:aws:kinesis:us-west-2:111122223333:stream/SourceAccountExampleInputStream"
           }
       ]
   }
   ```

------

1. 在名為的 `MF-Source-Stream-Role` 來源帳戶中建立角色。執行下列動作，以使用**受管 Flink** 使用案例建立角色：

   1. 在 IAM 管理主控台中，選擇**建立角色**。

   1. 在**建立角色**頁面上選擇 **AWS 服務**。在服務清單中，選擇 **Kinesis**。

   1. 在**選取使用案例**區塊中，選擇 **Managed Service for Apache Flink**。

   1. 選擇**下一步：許可**。

   1. 新增您在上個步驟中建立的 `KA-Source-Stream-Policy` 許可政策：選擇 **Next: Add Tags (下一步：新增標籤)**。

   1. 選擇下**一步：檢閱**。

   1. 將角色命名為 `KA-Source-Stream-Role`。您的應用程式將使用此角色來存取來源串流。

1. 將接收器帳戶的 `kinesis-analytics-MyApplication-us-west-2` ARN 新增至來源帳戶中 `KA-Source-Stream-Role` 角色的信任關係中：

   1. 在 IAM 主控台中開啟 `KA-Source-Stream-Role`。

   1. 選取 **Trust Relationships** (信任關係) 索引標籤。

   1. 選擇 **Edit trust relationship (編輯信任關係)**。

   1. 將下列程式碼用於信任關係。使用您的接收器帳戶 ID 取代範例帳戶 ID (**SINK012345678**)。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/service-role/kinesis-analytics-MyApplication-us-west-2"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

##### 更新 Python 指令碼
<a name="examples-cross-python"></a>

在本節中，您將更新產生範例資料的 Python 指令碼，以使用來源帳戶設定檔。

使用下列反白顯示的變更更新 `stock.py` 指令碼。

```
import json
import boto3
import random
import datetime
import os

os.environ['AWS_PROFILE'] ='ka-source-stream-account-profile'
os.environ['AWS_DEFAULT_REGION'] = 'us-west-2'


kinesis = boto3.client('kinesis')
def getReferrer():
    data = {}
    now = datetime.datetime.now()
    str_now = now.isoformat()
    data['event_time'] = str_now
    data['ticker'] = random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV'])
    price = random.random() * 100
    data['price'] = round(price, 2)
    return data

while True:
        data = json.dumps(getReferrer())
        print(data)
        kinesis.put_record(
                StreamName="SourceAccountExampleInputStream",
                Data=data,
                PartitionKey="partitionkey")
```

##### 更新 Java 應用程式
<a name="examples-cross-app"></a>

在本節中，您將更新 Java 應用程式的程式碼，以便在從來源串流讀取時擔任來源帳戶角色。

對 `BasicStreamingJob.java` 檔案進行下列變更。使用您的來源帳戶 ID 取代範例來源帳戶 ID (*SOURCE01234567*)。

```
package com.amazonaws.services.managed-flink;

import com.amazonaws.services.managed-flink.runtime.KinesisAnalyticsRuntime;
import org.apache.flink.api.common.serialization.SimpleStringSchema;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.connectors.kinesis.FlinkKinesisConsumer;
import org.apache.flink.streaming.connectors.kinesis.FlinkKinesisProducer;
import org.apache.flink.streaming.connectors.kinesis.config.ConsumerConfigConstants;
import org.apache.flink.streaming.connectors.kinesis.config.AWSConfigConstants;

import java.io.IOException;
import java.util.Map;
import java.util.Properties;

 /**
 * A basic Managed Service for Apache Flink for Java application with Kinesis data streams
 * as source and sink.
 */
public class BasicStreamingJob {
    private static final String region = "us-west-2";
    private static final String inputStreamName = "SourceAccountExampleInputStream";
    private static final String outputStreamName = ExampleOutputStream;
    private static final String roleArn = "arn:aws:iam::SOURCE01234567:role/KA-Source-Stream-Role";
    private static final String roleSessionName = "ksassumedrolesession";

    private static DataStream<String> createSourceFromStaticConfig(StreamExecutionEnvironment env) {
        Properties inputProperties = new Properties();
        inputProperties.setProperty(AWSConfigConstants.AWS_CREDENTIALS_PROVIDER, "ASSUME_ROLE");
        inputProperties.setProperty(AWSConfigConstants.AWS_ROLE_ARN, roleArn);
        inputProperties.setProperty(AWSConfigConstants.AWS_ROLE_SESSION_NAME, roleSessionName);
        inputProperties.setProperty(ConsumerConfigConstants.AWS_REGION, region);
        inputProperties.setProperty(ConsumerConfigConstants.STREAM_INITIAL_POSITION, "LATEST");

        return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
    }

    private static KinesisStreamsSink<String> createSinkFromStaticConfig() {
        Properties outputProperties = new Properties();
        outputProperties.setProperty(AWSConfigConstants.AWS_REGION, region);

        return KinesisStreamsSink.<String>builder()
                .setKinesisClientProperties(outputProperties)
                .setSerializationSchema(new SimpleStringSchema())
                .setStreamName(outputProperties.getProperty("OUTPUT_STREAM", "ExampleOutputStream"))
                .setPartitionKeyGenerator(element -> String.valueOf(element.hashCode()))
                .build();
    }

    public static void main(String[] args) throws Exception {
        // set up the streaming execution environment
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        DataStream<String> input = createSourceFromStaticConfig(env);

        input.addSink(createSinkFromStaticConfig());

        env.execute("Flink Streaming Java API Skeleton");
    }
}
```

##### 建置、上傳和執行應用程式
<a name="examples-cross-run"></a>

執行下列動作以更新並執行應用程式：

1. 在包含 `pom.xml` 檔案的目錄中，執行下列命令來再次建置應用程式。

   ```
   mvn package -Dflink.version=1.15.3
   ```

1. 從 Amazon Simple Storage Service (Amazon S3) 儲存貯體刪除先前的 JAR 檔案，然後將新 `aws-kinesis-analytics-java-apps-1.0.jar` 檔案上傳到 S3 儲存貯體。

1. 在 Managed Service for Apache Flink 主控台的應用程式頁面，依序選擇**設定**和**更新**，以重新載入應用程式 JAR 檔案。

1. 執行 `stock.py` 指令碼，以將資料傳送至來源串流。

   ```
   python stock.py
   ```

應用程式現在會從另一個帳戶的 Kinesis 串流讀取資料。

您可以檢查 `ExampleOutputStream` 串流的 `PutRecords.Bytes` 指標，以驗證應用程式是否正在運作。如果輸出串流中有活動，表示應用程式運作正常。

#### 教學課程：搭配 Amazon MSK 使用自訂信任存放區
<a name="example-keystore"></a>

**注意**  
如需目前範例，請參閱 [建立和使用 Managed Service for Apache Flink 應用程式的範例](examples-collapsibles.md)。

##### 目前資料來源 API
<a name="example-keystore-test-new"></a>

如果您使用的是目前的資料來源 APIs，您的應用程式可以利用[此處](https://github.com/aws-samples/msk-config-providers)所述的 Amazon MSK Config Providers 公用程式。這可讓您的 KafkaSource 函數存取 Amazon S3 中雙向 TLS 的金鑰存放區和信任存放區。

```
...
// define names of config providers:
builder.setProperty("config.providers", "secretsmanager,s3import");

// provide implementation classes for each provider:
builder.setProperty("config.providers.secretsmanager.class", "com.amazonaws.kafka.config.providers.SecretsManagerConfigProvider");
builder.setProperty("config.providers.s3import.class", "com.amazonaws.kafka.config.providers.S3ImportConfigProvider");

String region = appProperties.get(Helpers.S3_BUCKET_REGION_KEY).toString();
String keystoreS3Bucket = appProperties.get(Helpers.KEYSTORE_S3_BUCKET_KEY).toString();
String keystoreS3Path = appProperties.get(Helpers.KEYSTORE_S3_PATH_KEY).toString();
String truststoreS3Bucket = appProperties.get(Helpers.TRUSTSTORE_S3_BUCKET_KEY).toString();
String truststoreS3Path = appProperties.get(Helpers.TRUSTSTORE_S3_PATH_KEY).toString();
String keystorePassSecret = appProperties.get(Helpers.KEYSTORE_PASS_SECRET_KEY).toString();
String keystorePassSecretField = appProperties.get(Helpers.KEYSTORE_PASS_SECRET_FIELD_KEY).toString();

// region, etc..
builder.setProperty("config.providers.s3import.param.region", region);

// properties
builder.setProperty("ssl.truststore.location", "${s3import:" + region + ":" + truststoreS3Bucket + "/" + truststoreS3Path + "}");
builder.setProperty("ssl.keystore.type", "PKCS12");
builder.setProperty("ssl.keystore.location", "${s3import:" + region + ":" + keystoreS3Bucket + "/" + keystoreS3Path + "}");
builder.setProperty("ssl.keystore.password", "${secretsmanager:" + keystorePassSecret + ":" + keystorePassSecretField + "}");
builder.setProperty("ssl.key.password", "${secretsmanager:" + keystorePassSecret + ":" + keystorePassSecretField + "}");
...
```

詳細資訊和逐步導覽可以在[此處](https://github.com/aws-samples/amazon-kinesisanalytics-examples/tree/master/CustomKeystoreWithConfigProviders)找到。

##### 舊版 SourceFunction API
<a name="example-keystore-legacy"></a>

如果您使用舊版 SourceFunction API，您的應用程式將使用自訂序列化和還原序列化結構描述，這些結構描述會覆寫 `open` 方法以載入自訂信任存放區。這讓應用程式在重新啟動或取代執行緒之後可以使用信任存放區。

可使用以下程式碼檢索和存儲自訂信任存放區：

```
public static void initializeKafkaTruststore() {
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    URL inputUrl = classLoader.getResource("kafka.client.truststore.jks");
    File dest = new File("/tmp/kafka.client.truststore.jks");

    try {
        FileUtils.copyURLToFile(inputUrl, dest);
    } catch (Exception ex) {
        throw new FlinkRuntimeException("Failed to initialize Kakfa truststore", ex);
    }
}
```

**注意**  
Apache Flink 要求信任存放區為 [JKS 格式](https://en.wikipedia.org/wiki/Java_KeyStore)。

**注意**  
若要設定此練習的必要先決條件，請先完成 [教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md) 練習。

以下教學課程示範如何安全地連線 (傳輸中加密) 到使用由自訂、私有甚至自託管憑證授權機構 (CA) 發行的伺服器憑證之 Kafka 叢集。

若要透過 TLS 將任何 Kafka 用戶端安全地連線至 Kafka 叢集，Kafka 用戶端 （例如範例 Flink 應用程式） 必須信任 Kafka 叢集伺服器憑證 （從發行 CA 到根層級 CA) 所呈現的完整信任鏈。作為自訂信任存放區的範例，我們將使用啟用相互 TLS (MTLS) 身分驗證的 Amazon MSK 叢集。這表示 MSK 叢集節點使用由 AWS Certificate Manager Private Certificate Authority (ACM Private CA) 發行的伺服器憑證，該憑證是您帳戶和區域的私有憑證，因此不受執行 Flink 應用程式之 Java 虛擬機器 (JVM) 的預設信任存放區所信任。

**注意**  
**金鑰存放區**用於存放私有金鑰，以及應用程式應同時呈現給伺服器或用戶端進行驗證的身分憑證。
**信任存放區**用於存放來自認證授權機構 (CA) 的憑證，以驗證伺服器在 SSL 連線中呈現的憑證。

 您也可以使用本教學課程中的技術，在 Managed Service for Apache Flink 應用程式與其他 Apache Kafka 來源之間進行互動，例如：
+ 在 AWS ([Amazon EC2](https://aws.amazon.com/ec2/) 或 Amazon [EKS](https://aws.amazon.com/eks/)) 中託管的自訂 Apache Kafka 叢集
+ 在 中託管[的 Confluent Kafka](https://www.confluent.io) 叢集 AWS
+ 透過 [AWS Direct Connect](https://aws.amazon.com/directconnect/) 或 VPN 存取的內部部署 Kafka 叢集

**Topics**
+ [目前資料來源 API](#example-keystore-test-new)
+ [舊版 SourceFunction API](#example-keystore-legacy)
+ [使用 Amazon MSK 叢集建立 VPC](#example-keystore-createcluster)
+ [建立自訂信任存放區並將其套用至您的叢集](#example-keystore-cert)
+ [建立應用程式碼](#example-keystore-code)
+ [上傳 Apache Flink 串流 Java 程式碼](#example-keystore-upload)
+ [建立應用程式](#example-keystore-create)
+ [設定應用程式](#example-keystore-configure)
+ [執行應用程式](#example-keystore-run)
+ [測試應用程式。](#example-keystore-test)

##### 使用 Amazon MSK 叢集建立 VPC
<a name="example-keystore-createcluster"></a>

若要建立範例 VPC 和 Amazon MSK 叢集以從 Managed Service for Apache Flink 應用程式存取，請按照 [Amazon MSK 使用入門](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html)教學課程進行操作。

完成教學課程時，請注意以下事項：
+ 在[步驟 3：建立主題](https://docs.aws.amazon.com/msk/latest/developerguide/create-topic.html)中，重複 `kafka-topics.sh --create` 命令以建立名為 `AWS KafkaTutorialTopicDestination` 的目的地主題：

  ```
  bin/kafka-topics.sh --create --bootstrap-server ZooKeeperConnectionString --replication-factor 3 --partitions 1 --topic AWSKafkaTutorialTopicDestination
  ```
**注意**  
如果 `kafka-topics.sh` 命令傳回 `ZooKeeperClientTimeoutException`，請確認 Kafka 叢集的安全群組具有一項傳入規則，即允許來自用戶端執行個體私有 IP 地址的所有流量。
+ 記錄叢集的啟動伺服器清單。您可以使用以下命令取得啟動伺服器的清單 (使用 *ClusterArn* 取代 MSK 叢集的 ARN)：

  ```
  aws kafka get-bootstrap-brokers --region us-west-2 --cluster-arn ClusterArn
  {...
      "BootstrapBrokerStringTls": "b-2.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-1.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-3.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094"
  }
  ```
+ 遵循本教學課程中的步驟和先決條件教學課程時，請務必在程式碼、命令和主控台項目中使用您選取的 AWS 區域。

##### 建立自訂信任存放區並將其套用至您的叢集
<a name="example-keystore-cert"></a>

在本節中，您將建立自訂憑證授權機構 (CA)、使用它來產生自訂信任存放區，並將其套用至 MSK 叢集。

若要建立和套用您的自訂信任存放區，請按照 *Amazon Managed Streaming for Apache Kafka 開發人員指南*中的[用戶端身分驗證](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html)教學課程操作。

##### 建立應用程式碼
<a name="example-keystore-code"></a>

在本節中，您會下載並編譯應用程式 JAR 檔案。

此範例的 Java 應用程式的程式碼可從 GitHub 下載。若要下載應用程式的程式碼，請執行下列動作：

1. 如果您尚未安裝 Git 用戶端，請先安裝。如需詳細資訊，請參閱[安裝 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。

1. 使用以下指令複製遠端儲存庫：

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. 應用程式的程式碼位於 `amazon-kinesis-data-analytics-java-examples/CustomKeystore` 檔案中。您可以檢查程式碼，以熟悉 Managed Service for Apache Flink 程式碼的結構。

1. 使用命令列 Maven 工具或偏好的開發環境來建立 JAR 檔案。若要使用命令列 Maven 工具編譯 JAR 檔案，請輸入下列命令：

   ```
   mvn package -Dflink.version=1.15.3
   ```

   如果建置成功，會建立下列檔案：

   ```
   target/flink-app-1.0-SNAPSHOT.jar
   ```
**注意**  
提供的來源程式碼依賴於 Java 11 中的程式庫。

##### 上傳 Apache Flink 串流 Java 程式碼
<a name="example-keystore-upload"></a>

在本節中，您會將應用程式的程式碼上傳至在[教學課程：開始使用 Managed Service for Apache Flink 中的 DataStream API](getting-started.md)一節建立的 Amazon S3 儲存貯體。

**注意**  
如果您從入門教學課程中刪除了 Amazon S3 儲存貯體，請再次執行下列 [上傳應用程式碼 JAR 檔案](get-started-exercise.md#get-started-exercise-6) 步驟。

1. 在 Amazon S3 主控台中，選擇 **ka-app-code-*<username>*** 儲存貯體，並選擇**上傳**。

1. 在**選取檔案**步驟中，選擇**新增檔案**。導覽至您在上一步驟中建立的 `flink-app-1.0-SNAPSHOT.jar` 檔案。

1. 您不需要變更物件的任何設定，因此請選擇**上傳**。

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

##### 建立應用程式
<a name="example-keystore-create"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 儀表板上，選擇**建立分析應用程式**。

1. 在 **Managed Service for Apache Flink - 建立應用程式**頁面，提供應用程式詳細資訊，如下所示：
   + 在**應用程式名稱**中，輸入 **MyApplication**。
   + 針對**​執行期**，選擇 **​Apache Flink 1.15.2 版**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。

**注意**  
使用主控台建立 Managed Service for Apache Flink 時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
政策：`kinesis-analytics-service-MyApplication-us-west-2`
角色：`kinesisanalytics-MyApplication-us-west-2`

##### 設定應用程式
<a name="example-keystore-configure"></a>

1. 在**我的應用程式**頁面，選擇**設定**。

1. 在**設定應用程式**頁面，提供**程式碼位置**：
   + 對於 **Amazon S3 儲存貯體**，請輸入 **ka-app-code-*<username>***。
   + 對於 **Amazon S3 物件的路徑**，請輸入 **flink-app-1.0-SNAPSHOT.jar**。

1. 在**存取應用程式資源**下，對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。
**注意**  
當您使用主控台 (例如日誌或 VPC) 指定應用程式資源時，主控台會修改您的應用程式執行角色，以授與存取這些資源的許可。

1. 在**屬性**下，選擇**新增群組**。輸入下列屬性：  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)
**注意**  
預設憑證的 **ssl.truststore.password** 是「changeit」；如果您使用預設憑證，不需要變更此值。

   再次選擇**新增群組**。輸入下列屬性：  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

   應用程式的程式碼會讀取上述應用程式屬性，以設定用來與 VPC 和 Amazon MSK 叢集互動的來源和接收器。如需如何使用屬性的詳細資訊，請參閱[使用執行期屬性](how-properties.md)。

1. 在**快照**下選擇**停用**。這可以讓您更輕鬆地更新應用程式，而無需加載無效的應用程式狀態資料。

1. 在**監控**下，確保**監控指標層級**設為**應用程式**。

1. 針對 **CloudWatch 記錄**，選取**啟用**核取方塊。

1. 在**虛擬私有雲端 (VPC)** 區段中，選擇要與應用程式建立關聯的 VPC。選擇希望應用程式用來存取 VPC 資源的與 VPC 相關聯的子網路和安全群組。

1. 選擇**更新**。

**注意**  
當您選擇啟用 CloudWatch 記錄時，Managed Service for Apache Flink 便會為您建立日誌群組和日誌串流。這些資源的名稱如下所示：  
日誌群組：`/aws/kinesis-analytics/MyApplication`
日誌串流：`kinesis-analytics-log-stream`
此日誌串流用於監控應用程式。

##### 執行應用程式
<a name="example-keystore-run"></a>

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業，即可檢視 Flink 作業圖表。

##### 測試應用程式。
<a name="example-keystore-test"></a>

在本節中，您將記錄寫入來源主題。應用程式會從來源主題讀取記錄，並將其寫入目的地主題。您可以將記錄寫入來源主題並讀取目的地主題中的記錄，以確認應用程式是否正常運作。

若要寫入和讀取主題中的記錄，請按照 [Amazon MSK 使用入門](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html)教學課程中的[步驟 6：產生和使用資料](https://docs.aws.amazon.com/msk/latest/developerguide/produce-consume.html)中的步驟進行操作。

若要讀取目的地主題，請在與叢集的第二個連線中使用目的地主題而非來源主題的名稱：

```
bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerString --consumer.config client.properties --topic AWS KafkaTutorialTopicDestination --from-beginning
```

如果目的地主題中未顯示任何記錄，請參閱 [Managed Service for Apache Flink 故障診斷](troubleshooting.md) 主題中的[無法存取 VPC 中的資源](troubleshooting-symptoms.md#troubleshooting-rt-vpc)一節。

### Python 範例
<a name="examples-python"></a>

下列範例示範如何搭配使用 Python 與 Apache Flink 資料表 API 建立應用程式。

**Topics**
+ [範例：在 Python 中建立輪轉視窗](#examples-python-tumbling)
+ [範例：在 Python 中建立滑動視窗](#examples-python-sliding)
+ [範例：在 Python 中將串流資料傳送至 Amazon S3](#examples-python-s3)

#### 範例：在 Python 中建立輪轉視窗
<a name="examples-python-tumbling"></a>

**注意**  
如需目前範例，請參閱 [建立和使用 Managed Service for Apache Flink 應用程式的範例](examples-collapsibles.md)。

在本練習中，您將使用輪轉視窗建立可彙總資料的適用於 Python 的 Managed Service for Apache Flink 應用程式。

**注意**  
若要設定此練習的必要先決條件，請先完成 [教學課程：開始使用 Managed Service for Apache Flink 中的 Python](gs-python.md) 練習。

**Topics**
+ [建立相依資源](#examples-python-tumbling-resources)
+ [將範例記錄寫入輸入串流](#examples-python-tumbling-write)
+ [下載並檢查應用程式程式碼](#examples-python-tumbling-download)
+ [壓縮並上傳 Apache Flink 串流 Python 程式碼](#examples-python-tumbling-upload)
+ [建立並執行 Managed Service for Apache Flink 應用程式](#examples-python-tumbling-create-run)
+ [清除 AWS 資源](#examples-python-tumbling-cleanup)

##### 建立相依資源
<a name="examples-python-tumbling-resources"></a>

在為本練習建立 Managed Service for Apache Flink 應用程式之前，先建立下列相依資源：
+ 兩個 Kinesis 資料串流 (`ExampleInputStream` 和 `ExampleOutputStream`)
+ Amazon S3 儲存貯體，用來儲存應用程式的程式碼 (`ka-app-code-<username>`) 

您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示，請參閱以下主題：
+ 《Amazon Kinesis Data Streams 開發人員指南》中的[建立和更新資料串流](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html)**。為資料串流 **ExampleInputStream** 和 **ExampleOutputStream** 命名。
+ 《Amazon Simple Storage Service 使用者指南》中的[如何建立 S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html)。**透過附加登入名稱 (例如 **ka-app-code-*<username>***)，為 Amazon S3 儲存貯體提供全域唯一的名稱。

##### 將範例記錄寫入輸入串流
<a name="examples-python-tumbling-write"></a>

在本節，您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

**注意**  
本節需要 [適用於 Python (Boto) 的 AWS SDK](https://aws.amazon.com/developers/getting-started/python/)。

**注意**  
本節中的 Python 指令碼會使用 AWS CLI。您必須 AWS CLI 將 設定為使用您的帳戶登入資料和預設區域。若要設定您的 AWS CLI，請輸入下列項目：  

```
aws configure
```

1. 使用下列內容建立名為 `stock.py` 的檔案：

   ```
       import datetime
       import json
       import random
       import boto3
   
       STREAM_NAME = "ExampleInputStream"
   
   
       def get_data():
           return {
               'event_time': datetime.datetime.now().isoformat(),
               'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
               'price': round(random.random() * 100, 2)}
   
   
       def generate(stream_name, kinesis_client):
           while True:
               data = get_data()
               print(data)
               kinesis_client.put_record(
                   StreamName=stream_name,
                   Data=json.dumps(data),
                   PartitionKey="partitionkey")
   
   
       if __name__ == '__main__':
           generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
   ```

1. 執行 `stock.py` 指令碼：

   ```
   $ python stock.py
   ```

   在完成教學課程的其餘部分時，讓指令碼保持執行狀態。

##### 下載並檢查應用程式程式碼
<a name="examples-python-tumbling-download"></a>

此範例的 Python 應用程式的程式碼可從 GitHub 下載。若要下載應用程式的程式碼，請執行下列動作：

1. 如果您尚未安裝 Git 用戶端，請先安裝。如需詳細資訊，請參閱[安裝 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。

1. 使用以下指令複製遠端儲存庫：

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. 導覽至 `amazon-kinesis-data-analytics-java-examples/python/TumblingWindow` 目錄。

應用程式的程式碼位於 `tumbling-windows.py` 檔案中。請留意下列與應用程式的程式碼相關的資訊：
+ 應用程式使用 Kinesis 資料表來源從來源串流讀取。下列程式碼片段會呼叫 `create_table` 函數來建立 Kinesis 資料表來源：

  ```
  table_env.execute_sql(
          create_input_table(input_table_name, input_stream, input_region, stream_initpos)
      )
  ```

  `create_table` 函數使用 SQL 命令來建立由串流來源支援的資料表：

  ```
  def create_input_table(table_name, stream_name, region, stream_initpos):
      return """ CREATE TABLE {0} (
                  ticker VARCHAR(6),
                  price DOUBLE,
                  event_time TIMESTAMP(3),
                  WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND
                )
                PARTITIONED BY (ticker)
                WITH (
                  'connector' = 'kinesis',
                  'stream' = '{1}',
                  'aws.region' = '{2}',
                  'scan.stream.initpos' = '{3}',
                  'format' = 'json',
                  'json.timestamp-format.standard' = 'ISO-8601'
                ) """.format(table_name, stream_name, region, stream_initpos)
  ```
+ 應用程式使用 `Tumble` 運算子來彙總指定的輪轉視窗中的記錄，並將彙總記錄作為資料表物件傳回：

  ```
  tumbling_window_table = (
          input_table.window(
              Tumble.over("10.seconds").on("event_time").alias("ten_second_window")
          )
          .group_by("ticker, ten_second_window")
          .select("ticker, price.min as price, to_string(ten_second_window.end) as event_time")
  ```
+ 應用程式使用來自 [https://mvnrepository.com/artifact/org.apache.flink/flink-sql-connector-kinesis/1.15.2](https://mvnrepository.com/artifact/org.apache.flink/flink-sql-connector-kinesis/1.15.2) 的Kinesis Flink 連接器。

##### 壓縮並上傳 Apache Flink 串流 Python 程式碼
<a name="examples-python-tumbling-upload"></a>

在本節中，您會將應用程式的程式碼上傳至在[建立相依資源](#examples-python-tumbling-resources)一節建立的 Amazon S3 儲存貯體。

1. 使用偏好的壓縮應用程式來壓縮 `tumbling-windows.py` 和 `flink-sql-connector-kinesis-1.15.2.jar` 檔案。命名存檔 `myapp.zip`。

1. 在 Amazon S3 主控台中，選擇 **ka-app-code-*<username>*** 儲存貯體，並選擇**上傳**。

1. 在**選取檔案**步驟中，選擇**新增檔案**。導覽至您在上一步驟中建立的 `myapp.zip` 檔案。

1. 您不需要變更物件的任何設定，因此請選擇**上傳**。

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

##### 建立並執行 Managed Service for Apache Flink 應用程式
<a name="examples-python-tumbling-create-run"></a>

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

##### 建立應用程式
<a name="examples-python-tumbling-create"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 儀表板上，選擇**建立分析應用程式**。

1. 在 **Managed Service for Apache Flink - 建立應用程式**頁面，提供應用程式詳細資訊，如下所示：
   + 在**應用程式名稱**中，輸入 **MyApplication**。
   + 對於**​執行期**，選擇 **​Apache Flink**。
**注意**  
Managed Service for Apache Flink 使用 Apache Flink 1.15.2 版。
   + 將版本下拉式清單保留為 **Apache Flink 1.15.2 版 (建議版本)**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。

**注意**  
使用主控台建立 Managed Service for Apache Flink 應用程式時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
政策：`kinesis-analytics-service-MyApplication-us-west-2`
角色：`kinesisanalytics-MyApplication-us-west-2`

##### 設定應用程式
<a name="examples-python-tumbling-configure"></a>

1. 在**我的應用程式**頁面，選擇**設定**。

1. 在**設定應用程式**頁面，提供**程式碼位置**：
   + 對於 **Amazon S3 儲存貯體**，請輸入 **ka-app-code-*<username>***。
   + 對於 **Amazon S3 物件的路徑**，請輸入 **myapp.zip**。

1. 在**存取應用程式資源**下，對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 在**屬性**下，選擇**新增群組**。

1. 輸入下列資料：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

   選擇**儲存**。

1. 在**屬性**下，再次選擇**新增群組**。

1. 輸入下列資料：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

1. 在**屬性**下，再次選擇**新增群組**。針對**群組 ID**，輸入 **kinesis.analytics.flink.run.options**。這個特殊的屬性群組會告訴您的應用程式在何處尋找其程式碼資源。如需詳細資訊，請參閱[指定您的程式碼檔案](how-python-creating.md#how-python-creating-code)。

1. 輸入下列資料：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

1. 在**監控**下，確保**監控指標層級**設為**應用程式**。

1. 針對 **CloudWatch 記錄**，選取**啟用**核取方塊。

1. 選擇**更新**。

**注意**  
當您選擇啟用 CloudWatch 記錄時，Managed Service for Apache Flink 便會為您建立日誌群組和日誌串流。這些資源的名稱如下所示：  
日誌群組：`/aws/kinesis-analytics/MyApplication`
日誌串流：`kinesis-analytics-log-stream`
此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

##### 編輯 IAM 政策
<a name="examples-python-tumbling-iam"></a>

編輯 IAM 政策來新增存取 Kinesis 資料串流的許可。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇**政策**。選擇主控台為您在上一節所建立的 **`kinesis-analytics-service-MyApplication-us-west-2`** 政策。

1. 在**摘要**頁面，選擇**編輯政策**。請選擇 **JSON** 標籤。

1. 將下列政策範例的反白部分新增至政策。使用您的帳戶 ID 取代範例帳戶 ID (*012345678901*)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "logs:DescribeLogGroups",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*",
                   "arn:aws:s3:::ka-app-code-<username>/myapp.zip"
               ]
           },
           {
               "Sid": "DescribeLogStreams",
               "Effect": "Allow",
               "Action": "logs:DescribeLogStreams",
               "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
           },
           {
               "Sid": "PutLogEvents",
               "Effect": "Allow",
               "Action": "logs:PutLogEvents",
               "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
           },
           {
               "Sid": "ListCloudwatchLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           },
           {
               "Sid": "WriteOutputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream"
           }
       ]
   }
   ```

------

##### 執行應用程式
<a name="examples-python-tumbling-run"></a>

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業，即可檢視 Flink 作業圖表。

您可以在 CloudWatch 主控台上查看 Managed Service for Apache Flink 指標，以確認應用程式是否正常運作。

##### 清除 AWS 資源
<a name="examples-python-tumbling-cleanup"></a>

本節包含清除在輪轉時段教學課程中建立 AWS 之資源的程序。

**Topics**
+ [刪除 Managed Service for Apache Flink 應用程式](#examples-python-tumbling-cleanup-app)
+ [刪除您的 Kinesis 資料串流](#examples-python-tumbling-cleanup-stream)
+ [刪除您的 Amazon S3 物件和儲存貯體](#examples-python-tumbling-cleanup-s3)
+ [刪除您的 IAM 資源](#examples-python-tumbling-cleanup-iam)
+ [刪除您的 CloudWatch 資源](#examples-python-tumbling-cleanup-cw)

##### 刪除 Managed Service for Apache Flink 應用程式
<a name="examples-python-tumbling-cleanup-app"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 面板中，選擇 **MyApplication**。

1. 在應用程式的頁面，選擇**刪除**，然後確認刪除。

##### 刪除您的 Kinesis 資料串流
<a name="examples-python-tumbling-cleanup-stream"></a>

1. 在以下網址開啟 Kinesis 主控台：[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis)。

1. 在 Kinesis Data Streams 面板中，選擇 **ExampleInputStream**。

1. 在 **ExampleInputStream** 頁面，選擇**刪除 Kinesis 串流**，然後確認刪除。

1. 在 **Kinesis 串流**頁面，依序選擇 **ExampleOutputStream**、**動作**和**刪除**，然後確認刪除。

##### 刪除您的 Amazon S3 物件和儲存貯體
<a name="examples-python-tumbling-cleanup-s3"></a>

1. 在以下網址開啟 Amazon S3 主控台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 選擇 **ka-app-code-*<username>* 儲存貯體。**

1. 選擇**刪除**，然後輸入儲存貯體名稱以確認刪除。

##### 刪除您的 IAM 資源
<a name="examples-python-tumbling-cleanup-iam"></a>

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽列中，選擇**政策**。

1. 在篩選器控制項中，輸入 **kinesis**。

1. 選擇 **kinesis-analytics-service-MyApplication-us-west-2** 政策。

1. 選擇**政策動作**，然後選擇**刪除**。

1. 在導覽列中，選擇**角色**。

1. 選擇 **kinesis-analytics-MyApplication-us-west-2** 角色。

1. 選擇**刪除角色**，然後確認刪除。

##### 刪除您的 CloudWatch 資源
<a name="examples-python-tumbling-cleanup-cw"></a>

1. 在以下網址開啟 CloudWatch 主控台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在導覽列中，選擇**日誌**。

1. 選擇 **/aws/kinesis-analytics/MyApplication** 日誌群組。

1. 選擇**刪除日誌群組**，然後確認刪除。

#### 範例：在 Python 中建立滑動視窗
<a name="examples-python-sliding"></a>

**注意**  
如需目前範例，請參閱 [建立和使用 Managed Service for Apache Flink 應用程式的範例](examples-collapsibles.md)。

**注意**  
若要設定此練習的必要先決條件，請先完成 [教學課程：開始使用 Managed Service for Apache Flink 中的 Python](gs-python.md) 練習。

**Topics**
+ [建立相依資源](#examples-python-sliding-resources)
+ [將範例記錄寫入輸入串流](#examples-python-sliding-write)
+ [下載並檢查應用程式程式碼](#examples-python-sliding-download)
+ [壓縮並上傳 Apache Flink 串流 Python 程式碼](#examples-python-sliding-upload)
+ [建立並執行 Managed Service for Apache Flink 應用程式](#examples-python-sliding-create-run)
+ [清除 AWS 資源](#examples-python-sliding-cleanup)

##### 建立相依資源
<a name="examples-python-sliding-resources"></a>

在為本練習建立 Managed Service for Apache Flink 應用程式之前，先建立下列相依資源：
+ 兩個 Kinesis 資料串流 (`ExampleInputStream` 和 `ExampleOutputStream`)
+ Amazon S3 儲存貯體，用來儲存應用程式的程式碼 (`ka-app-code-<username>`) 

您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示，請參閱以下主題：
+ 《Amazon Kinesis Data Streams 開發人員指南》中的[建立和更新資料串流](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html)**。為資料串流 **ExampleInputStream** 和 **ExampleOutputStream** 命名。
+ 《Amazon Simple Storage Service 使用者指南》中的[如何建立 S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html)。**透過附加登入名稱 (例如 **ka-app-code-*<username>***)，為 Amazon S3 儲存貯體提供全域唯一的名稱。

##### 將範例記錄寫入輸入串流
<a name="examples-python-sliding-write"></a>

在本節，您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

**注意**  
本節需要 [適用於 Python (Boto) 的 AWS SDK](https://aws.amazon.com/developers/getting-started/python/)。

**注意**  
本節中的 Python 指令碼會使用 AWS CLI。您必須 AWS CLI 將 設定為使用您的帳戶登入資料和預設區域。若要設定您的 AWS CLI，請輸入下列項目：  

```
aws configure
```

1. 使用下列內容建立名為 `stock.py` 的檔案：

   ```
       import datetime
       import json
       import random
       import boto3
   
       STREAM_NAME = "ExampleInputStream"
   
   
       def get_data():
           return {
               'event_time': datetime.datetime.now().isoformat(),
               'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
               'price': round(random.random() * 100, 2)}
   
   
       def generate(stream_name, kinesis_client):
           while True:
               data = get_data()
               print(data)
               kinesis_client.put_record(
                   StreamName=stream_name,
                   Data=json.dumps(data),
                   PartitionKey="partitionkey")
   
   
       if __name__ == '__main__':
           generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
   ```

1. 執行 `stock.py` 指令碼：

   ```
   $ python stock.py
   ```

   在完成教學課程的其餘部分時，讓指令碼保持執行狀態。

##### 下載並檢查應用程式程式碼
<a name="examples-python-sliding-download"></a>

此範例的 Python 應用程式的程式碼可從 GitHub 下載。若要下載應用程式的程式碼，請執行下列動作：

1. 如果您尚未安裝 Git 用戶端，請先安裝。如需詳細資訊，請參閱[安裝 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。

1. 使用以下指令複製遠端儲存庫：

   ```
   git clone https://github.com/aws-samples/>amazon-kinesis-data-analytics-java-examples
   ```

1. 導覽至 `amazon-kinesis-data-analytics-java-examples/python/SlidingWindow` 目錄。

應用程式的程式碼位於 `sliding-windows.py` 檔案中。請留意下列與應用程式的程式碼相關的資訊：
+ 應用程式使用 Kinesis 資料表來源從來源串流讀取。下列程式碼片段會呼叫 `create_input_table` 函數來建立 Kinesis 資料表來源：

  ```
  table_env.execute_sql(
          create_input_table(input_table_name, input_stream, input_region, stream_initpos)
      )
  ```

  `create_input_table` 函數使用 SQL 命令來建立由串流來源支援的資料表：

  ```
  def create_input_table(table_name, stream_name, region, stream_initpos):
      return """ CREATE TABLE {0} (
                  ticker VARCHAR(6),
                  price DOUBLE,
                  event_time TIMESTAMP(3),
                  WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND
                )
                PARTITIONED BY (ticker)
                WITH (
                  'connector' = 'kinesis',
                  'stream' = '{1}',
                  'aws.region' = '{2}',
                  'scan.stream.initpos' = '{3}',
                  'format' = 'json',
                  'json.timestamp-format.standard' = 'ISO-8601'
                ) """.format(table_name, stream_name, region, stream_initpos)
   }
  ```
+ 應用程式會使用 `Slide` 運算子來彙總指定滑動視窗內的記錄，並將彙總記錄作為資料表物件傳回：

  ```
  sliding_window_table = (
          input_table
              .window(
                  Slide.over("10.seconds")
                  .every("5.seconds")
                  .on("event_time")
                  .alias("ten_second_window")
              )
              .group_by("ticker, ten_second_window")
              .select("ticker, price.min as price, to_string(ten_second_window.end) as event_time")
      )
  ```
+ 該應用程式使用 Kinesis Flink 連接器，來自 [flink-sql-connector-kinesis-1.15.2.jar](https://mvnrepository.com/artifact/org.apache.flink/flink-sql-connector-kinesis/1.15.2) 檔案。

##### 壓縮並上傳 Apache Flink 串流 Python 程式碼
<a name="examples-python-sliding-upload"></a>

在本節中，您會將應用程式的程式碼上傳至在[建立相依資源](#examples-python-sliding-resources)一節建立的 Amazon S3 儲存貯體。

本節說明如何封裝 Python 應用程式。

1. 使用偏好的壓縮應用程式來壓縮 `sliding-windows.py` 和 `flink-sql-connector-kinesis-1.15.2.jar` 檔案。命名存檔 `myapp.zip`。

1. 在 Amazon S3 主控台中，選擇 **ka-app-code-*<username>*** 儲存貯體，並選擇**上傳**。

1. 在**選取檔案**步驟中，選擇**新增檔案**。導覽至您在上一步驟中建立的 `myapp.zip` 檔案。

1. 您不需要變更物件的任何設定，因此請選擇**上傳**。

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

##### 建立並執行 Managed Service for Apache Flink 應用程式
<a name="examples-python-sliding-create-run"></a>

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

##### 建立應用程式
<a name="examples-python-sliding-create"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 儀表板上，選擇**建立分析應用程式**。

1. 在 **Managed Service for Apache Flink - 建立應用程式**頁面，提供應用程式詳細資訊，如下所示：
   + 在**應用程式名稱**中，輸入 **MyApplication**。
   + 對於**​執行期**，選擇 **​Apache Flink**。
**注意**  
Managed Service for Apache Flink 使用 Apache Flink 1.15.2 版。
   + 將版本下拉式清單保留為 **Apache Flink 1.15.2 版 (建議版本)**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。

**注意**  
使用主控台建立 Managed Service for Apache Flink 應用程式時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
政策：`kinesis-analytics-service-MyApplication-us-west-2`
角色：`kinesisanalytics-MyApplication-us-west-2`

##### 設定應用程式
<a name="examples-python-sliding-configure"></a>

1. 在**我的應用程式**頁面，選擇**設定**。

1. 在**設定應用程式**頁面，提供**程式碼位置**：
   + 對於 **Amazon S3 儲存貯體**，請輸入 **ka-app-code-*<username>***。
   + 對於 **Amazon S3 物件的路徑**，請輸入 **myapp.zip**。

1. 在**存取應用程式資源**下，對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 在**屬性**下，選擇**新增群組**。

1. 輸入以下應用程式屬性和數值：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

   選擇**儲存**。

1. 在**屬性**下，再次選擇**新增群組**。

1. 輸入以下應用程式屬性和數值：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

1. 在**屬性**下，再次選擇**新增群組**。針對**群組 ID**，輸入 **kinesis.analytics.flink.run.options**。這個特殊的屬性群組會告訴您的應用程式在何處尋找其程式碼資源。如需詳細資訊，請參閱 [指定您的程式碼檔案](how-python-creating.md#how-python-creating-code)。

1. 輸入以下應用程式屬性和數值：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

1. 在**監控**下，確保**監控指標層級**設為**應用程式**。

1. 針對 **CloudWatch 記錄**，選取**啟用**核取方塊。

1. 選擇**更新**。

**注意**  
當您選擇啟用 CloudWatch 記錄時，Managed Service for Apache Flink 便會為您建立日誌群組和日誌串流。這些資源的名稱如下所示：  
日誌群組：`/aws/kinesis-analytics/MyApplication`
日誌串流：`kinesis-analytics-log-stream`
此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

##### 編輯 IAM 政策
<a name="examples-python-sliding-iam"></a>

編輯 IAM 政策來新增存取 Kinesis 資料串流的許可。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇**政策**。選擇主控台為您在上一節所建立的 **`kinesis-analytics-service-MyApplication-us-west-2`** 政策。

1. 在**摘要**頁面，選擇**編輯政策**。請選擇 **JSON** 標籤。

1. 將下列政策範例的反白部分新增至政策。使用您的帳戶 ID 取代範例帳戶 ID (*012345678901*)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "logs:DescribeLogGroups",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*",
                   "arn:aws:s3:::ka-app-code-<username>/myapp.zip"
               ]
           },
           {
               "Sid": "DescribeLogStreams",
               "Effect": "Allow",
               "Action": "logs:DescribeLogStreams",
               "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
           },
           {
               "Sid": "PutLogEvents",
               "Effect": "Allow",
               "Action": "logs:PutLogEvents",
               "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
           },
           {
               "Sid": "ListCloudwatchLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           },
           {
               "Sid": "WriteOutputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream"
           }
       ]
   }
   ```

------

##### 執行應用程式
<a name="examples-python-sliding-run"></a>

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業，即可檢視 Flink 作業圖表。

您可以在 CloudWatch 主控台上查看 Managed Service for Apache Flink 指標，以確認應用程式是否正常運作。

##### 清除 AWS 資源
<a name="examples-python-sliding-cleanup"></a>

本節包含清除在滑動視窗教學課程中建立 AWS 之資源的程序。

**Topics**
+ [刪除 Managed Service for Apache Flink 應用程式](#examples-python-sliding-cleanup-app)
+ [刪除您的 Kinesis 資料串流](#examples-python-sliding-cleanup-stream)
+ [刪除您的 Amazon S3 物件和儲存貯體](#examples-python-sliding-cleanup-s3)
+ [刪除您的 IAM 資源](#examples-python-sliding-cleanup-iam)
+ [刪除您的 CloudWatch 資源](#examples-python-sliding-cleanup-cw)

##### 刪除 Managed Service for Apache Flink 應用程式
<a name="examples-python-sliding-cleanup-app"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 面板中，選擇 **MyApplication**。

1. 在應用程式的頁面，選擇**刪除**，然後確認刪除。

##### 刪除您的 Kinesis 資料串流
<a name="examples-python-sliding-cleanup-stream"></a>

1. 在以下網址開啟 Kinesis 主控台：[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis)。

1. 在 Kinesis Data Streams 面板中，選擇 **ExampleInputStream**。

1. 在 **ExampleInputStream** 頁面，選擇**刪除 Kinesis 串流**，然後確認刪除。

1. 在 **Kinesis 串流**頁面，依序選擇 **ExampleOutputStream**、**動作**和**刪除**，然後確認刪除。

##### 刪除您的 Amazon S3 物件和儲存貯體
<a name="examples-python-sliding-cleanup-s3"></a>

1. 在以下網址開啟 Amazon S3 主控台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 選擇 **ka-app-code-*<username>* 儲存貯體。**

1. 選擇**刪除**，然後輸入儲存貯體名稱以確認刪除。

##### 刪除您的 IAM 資源
<a name="examples-python-sliding-cleanup-iam"></a>

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽列中，選擇**政策**。

1. 在篩選器控制項中，輸入 **kinesis**。

1. 選擇 **kinesis-analytics-service-MyApplication-us-west-2** 政策。

1. 選擇**政策動作**，然後選擇**刪除**。

1. 在導覽列中，選擇**角色**。

1. 選擇 **kinesis-analytics-MyApplication-us-west-2** 角色。

1. 選擇**刪除角色**，然後確認刪除。

##### 刪除您的 CloudWatch 資源
<a name="examples-python-sliding-cleanup-cw"></a>

1. 在以下網址開啟 CloudWatch 主控台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在導覽列中，選擇**日誌**。

1. 選擇 **/aws/kinesis-analytics/MyApplication** 日誌群組。

1. 選擇**刪除日誌群組**，然後確認刪除。

#### 範例：在 Python 中將串流資料傳送至 Amazon S3
<a name="examples-python-s3"></a>

**注意**  
如需目前範例，請參閱 [建立和使用 Managed Service for Apache Flink 應用程式的範例](examples-collapsibles.md)。

在本練習中，您將建立適用於 Python 的 Managed Service for Apache Flink 應用程式，將資料串流傳輸到 Amazon Simple Storage Service 接收器。

**注意**  
若要設定此練習的必要先決條件，請先完成 [教學課程：開始使用 Managed Service for Apache Flink 中的 Python](gs-python.md) 練習。

**Topics**
+ [建立相依資源](#examples-python-s3-resources)
+ [將範例記錄寫入輸入串流](#examples-python-s3-write)
+ [下載並檢查應用程式程式碼](#examples-python-s3-download)
+ [壓縮並上傳 Apache Flink 串流 Python 程式碼](#examples-python-s3-upload)
+ [建立並執行 Managed Service for Apache Flink 應用程式](#examples-python-s3-create-run)
+ [清除 AWS 資源](#examples-python-s3-cleanup)

##### 建立相依資源
<a name="examples-python-s3-resources"></a>

在為本練習建立 Managed Service for Apache Flink 應用程式之前，先建立下列相依資源：
+ Kinesis 資料串流 (`ExampleInputStream`)
+ Amazon S3 儲存貯體，用來儲存應用程式的程式碼和輸出 (`ka-app-code-<username>`) 

**注意**  
Managed Service for Apache Flink 無法在其自身啟用伺服器端加密的情況下將資料寫入 Amazon S3。

您可以在主控台中建立 Kinesis 串流和 Amazon S3 儲存貯體。如需建立這些資源的相關指示，請參閱以下主題：
+ 《Amazon Kinesis Data Streams 開發人員指南》中的[建立和更新資料串流](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html)**。為資料串流 **ExampleInputStream** 命名。
+ 《Amazon Simple Storage Service 使用者指南》中的[如何建立 S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html)。**透過附加登入名稱 (例如 **ka-app-code-*<username>***)，為 Amazon S3 儲存貯體提供全域唯一的名稱。

##### 將範例記錄寫入輸入串流
<a name="examples-python-s3-write"></a>

在本節，您會使用 Python 指令碼將範例記錄寫入供應用程式處理的串流。

**注意**  
本節需要 [適用於 Python (Boto) 的 AWS SDK](https://aws.amazon.com/developers/getting-started/python/)。

**注意**  
本節中的 Python 指令碼會使用 AWS CLI。您必須 AWS CLI 將 設定為使用您的帳戶登入資料和預設區域。若要設定您的 AWS CLI，請輸入下列項目：  

```
aws configure
```

1. 使用下列內容建立名為 `stock.py` 的檔案：

   ```
       import datetime
       import json
       import random
       import boto3
   
       STREAM_NAME = "ExampleInputStream"
   
   
       def get_data():
           return {
               'event_time': datetime.datetime.now().isoformat(),
               'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
               'price': round(random.random() * 100, 2)}
   
   
       def generate(stream_name, kinesis_client):
           while True:
               data = get_data()
               print(data)
               kinesis_client.put_record(
                   StreamName=stream_name,
                   Data=json.dumps(data),
                   PartitionKey="partitionkey")
   
   
       if __name__ == '__main__':
           generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
   ```

1. 執行 `stock.py` 指令碼：

   ```
   $ python stock.py
   ```

   在完成教學課程的其餘部分時，讓指令碼保持執行狀態。

##### 下載並檢查應用程式程式碼
<a name="examples-python-s3-download"></a>

此範例的 Python 應用程式的程式碼可從 GitHub 下載。若要下載應用程式的程式碼，請執行下列動作：

1. 如果您尚未安裝 Git 用戶端，請先安裝。如需詳細資訊，請參閱[安裝 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。

1. 使用以下指令複製遠端儲存庫：

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. 導覽至 `amazon-kinesis-data-analytics-java-examples/python/S3Sink` 目錄。

應用程式的程式碼位於 `streaming-file-sink.py` 檔案中。請留意下列與應用程式的程式碼相關的資訊：
+ 應用程式使用 Kinesis 資料表來源從來源串流讀取。下列程式碼片段會呼叫 `create_source_table` 函數來建立 Kinesis 資料表來源：

  ```
  table_env.execute_sql(
          create_source_table(input_table_name, input_stream, input_region, stream_initpos)
      )
  ```

  `create_source_table` 函數使用 SQL 命令來建立由串流來源支援的資料表

  ```
  import datetime
      import json
      import random
      import boto3
  
      STREAM_NAME = "ExampleInputStream"
  
  
      def get_data():
          return {
              'event_time': datetime.datetime.now().isoformat(),
              'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
              'price': round(random.random() * 100, 2)}
  
  
      def generate(stream_name, kinesis_client):
          while True:
              data = get_data()
              print(data)
              kinesis_client.put_record(
                  StreamName=stream_name,
                  Data=json.dumps(data),
                  PartitionKey="partitionkey")
  
  
      if __name__ == '__main__':
          generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  ```
+ 應用程式會使用 `filesystem` 連接器將記錄傳送至 Amazon S3 儲存貯體：

  ```
  def create_sink_table(table_name, bucket_name):
      return """ CREATE TABLE {0} (
                  ticker VARCHAR(6),
                  price DOUBLE,
                  event_time VARCHAR(64)
                )
                PARTITIONED BY (ticker)
                WITH (
                    'connector'='filesystem',
                    'path'='s3a://{1}/',
                    'format'='json',
                    'sink.partition-commit.policy.kind'='success-file',
                    'sink.partition-commit.delay' = '1 min'
                ) """.format(table_name, bucket_name)
  ```
+ 該應用程式使用 Kinesis Flink 連接器，來自 [flink-sql-connector-kinesis-1.15.2.jar](https://mvnrepository.com/artifact/org.apache.flink/flink-sql-connector-kinesis/1.15.2) 檔案。

##### 壓縮並上傳 Apache Flink 串流 Python 程式碼
<a name="examples-python-s3-upload"></a>

在本節中，您會將應用程式的程式碼上傳至在[建立相依資源](#examples-python-s3-resources)一節建立的 Amazon S3 儲存貯體。

1. 使用偏好的壓縮應用程式來壓縮 `streaming-file-sink.py` 和 [flink-sql-connector-kinesis-1.15.2.jar](https://mvnrepository.com/artifact/org.apache.flink/flink-sql-connector-kinesis/1.15.2) 檔案。命名存檔 `myapp.zip`。

1. 在 Amazon S3 主控台中，選擇 **ka-app-code-*<username>*** 儲存貯體，並選擇**上傳**。

1. 在**選取檔案**步驟中，選擇**新增檔案**。導覽至您在上一步驟中建立的 `myapp.zip` 檔案。

1. 您不需要變更物件的任何設定，因此請選擇**上傳**。

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

##### 建立並執行 Managed Service for Apache Flink 應用程式
<a name="examples-python-s3-create-run"></a>

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

##### 建立應用程式
<a name="examples-python-s3-create"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 儀表板上，選擇**建立分析應用程式**。

1. 在 **Managed Service for Apache Flink - 建立應用程式**頁面，提供應用程式詳細資訊，如下所示：
   + 在**應用程式名稱**中，輸入 **MyApplication**。
   + 對於**​執行期**，選擇 **​Apache Flink**。
**注意**  
Managed Service for Apache Flink 使用 Apache Flink 1.15.2 版。
   + 將版本下拉式清單保留為 **Apache Flink 1.15.2 版 (建議版本)**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。

**注意**  
使用主控台建立 Managed Service for Apache Flink 應用程式時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
政策：`kinesis-analytics-service-MyApplication-us-west-2`
角色：`kinesisanalytics-MyApplication-us-west-2`

##### 設定應用程式
<a name="examples-python-s3-configure"></a>

1. 在**我的應用程式**頁面，選擇**設定**。

1. 在**設定應用程式**頁面，提供**程式碼位置**：
   + 對於 **Amazon S3 儲存貯體**，請輸入 **ka-app-code-*<username>***。
   + 對於 **Amazon S3 物件的路徑**，請輸入 **myapp.zip**。

1. 在**存取應用程式資源**下，對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 在**屬性**下，選擇**新增群組**。

1. 輸入以下應用程式屬性和數值：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

   選擇**儲存**。

1. 在**屬性**下，再次選擇**新增群組**。針對**群組 ID**，輸入 **kinesis.analytics.flink.run.options**。這個特殊的屬性群組會告訴您的應用程式在何處尋找其程式碼資源。如需詳細資訊，請參閱 [指定您的程式碼檔案](how-python-creating.md#how-python-creating-code)。

1. 輸入以下應用程式屬性和數值：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

1. 在**屬性**下，再次選擇**新增群組**。針對**群組 ID**，輸入 **sink.config.0**。這個特殊的屬性群組會告訴您的應用程式在何處尋找其程式碼資源。如需詳細資訊，請參閱 [指定您的程式碼檔案](how-python-creating.md#how-python-creating-code)。

1. 輸入以下應用程式屬性和值：(使用 Amazon S3 儲存貯體的實際名稱取代 *bucket-name*。)    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

1. 在**監控**下，確保**監控指標層級**設為**應用程式**。

1. 針對 **CloudWatch 記錄**，選取**啟用**核取方塊。

1. 選擇**更新**。

**注意**  
當您選擇啟用 CloudWatch 記錄時，Managed Service for Apache Flink 便會為您建立日誌群組和日誌串流。這些資源的名稱如下所示：  
日誌群組：`/aws/kinesis-analytics/MyApplication`
日誌串流：`kinesis-analytics-log-stream`
此日誌串流用於監控應用程式。這與應用程式用來傳送結果的日誌串流不同。

##### 編輯 IAM 政策
<a name="examples-python-s3-iam"></a>

編輯 IAM 政策來新增存取 Kinesis 資料串流的許可。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇**政策**。選擇主控台為您在上一節所建立的 **`kinesis-analytics-service-MyApplication-us-west-2`** 政策。

1. 在**摘要**頁面，選擇**編輯政策**。請選擇 **JSON** 標籤。

1. 將下列政策範例的反白部分新增至政策。使用您的帳戶 ID 取代範例帳戶 ID (*012345678901*)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "logs:DescribeLogGroups",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*",
                   "arn:aws:s3:::ka-app-code-<username>/myapp.zip"
               ]
           },
           {
               "Sid": "DescribeLogStreams",
               "Effect": "Allow",
               "Action": "logs:DescribeLogStreams",
               "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
           },
           {
               "Sid": "PutLogEvents",
               "Effect": "Allow",
               "Action": "logs:PutLogEvents",
               "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
           },
           {
               "Sid": "ListCloudwatchLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           },
           {
               "Sid": "WriteObjects",
               "Effect": "Allow",
               "Action": [
                   "s3:Abort*",
                   "s3:DeleteObject*",
                   "s3:GetObject*",
                   "s3:GetBucket*",
                   "s3:List*",
                   "s3:ListBucket",
                   "s3:PutObject"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-<username>",
                   "arn:aws:s3:::ka-app-code-<username>/*"
               ]
           }
       ]
   }
   ```

------

##### 執行應用程式
<a name="examples-python-s3-run"></a>

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業，即可檢視 Flink 作業圖表。

您可以在 CloudWatch 主控台上查看 Managed Service for Apache Flink 指標，以確認應用程式是否正常運作。

##### 清除 AWS 資源
<a name="examples-python-s3-cleanup"></a>

本節包含清除在滑動視窗教學課程中建立 AWS 之資源的程序。

**Topics**
+ [刪除 Managed Service for Apache Flink 應用程式](#examples-python-s3-cleanup-app)
+ [刪除您的 Kinesis 資料串流](#examples-python-s3-cleanup-stream)
+ [刪除您的 Amazon S3 物件和儲存貯體](#examples-python-s3-cleanup-s3)
+ [刪除您的 IAM 資源](#examples-python-s3-cleanup-iam)
+ [刪除您的 CloudWatch 資源](#examples-python-s3-cleanup-cw)

##### 刪除 Managed Service for Apache Flink 應用程式
<a name="examples-python-s3-cleanup-app"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 面板中，選擇 **MyApplication**。

1. 在應用程式的頁面，選擇**刪除**，然後確認刪除。

##### 刪除您的 Kinesis 資料串流
<a name="examples-python-s3-cleanup-stream"></a>

1. 在以下網址開啟 Kinesis 主控台：[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis)。

1. 在 Kinesis Data Streams 面板中，選擇 **ExampleInputStream**。

1. 在 **ExampleInputStream** 頁面，選擇**刪除 Kinesis 串流**，然後確認刪除。

##### 刪除您的 Amazon S3 物件和儲存貯體
<a name="examples-python-s3-cleanup-s3"></a>

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 選擇 **ka-app-code-*<username>* 儲存貯體。**

1. 選擇**刪除**，然後輸入儲存貯體名稱以確認刪除。

##### 刪除您的 IAM 資源
<a name="examples-python-s3-cleanup-iam"></a>

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽列中，選擇**政策**。

1. 在篩選器控制項中，輸入 **kinesis**。

1. 選擇 **kinesis-analytics-service-MyApplication-us-west-2** 政策。

1. 選擇**政策動作**，然後選擇**刪除**。

1. 在導覽列中，選擇**角色**。

1. 選擇 **kinesis-analytics-MyApplication-us-west-2** 角色。

1. 選擇**刪除角色**，然後確認刪除。

##### 刪除您的 CloudWatch 資源
<a name="examples-python-s3-cleanup-cw"></a>

1. 在以下網址開啟 CloudWatch 主控台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在導覽列中，選擇**日誌**。

1. 選擇 **/aws/kinesis-analytics/MyApplication** 日誌群組。

1. 選擇**刪除日誌群組**，然後確認刪除。

### Scala 範例
<a name="examples-scala"></a>

下列範例示範如何搭配使用 Scala 與 Apache Flink 來建立應用程式。

**Topics**
+ [範例：在 Scala 中建立輪轉視窗](#examples-tumbling-scala)
+ [範例：在 Scala 中建立滑動視窗](#examples-sliding-scala)
+ [範例：在 Scala 中將串流資料傳送至 Amazon S3](#examples-s3sink-scala)

#### 範例：在 Scala 中建立輪轉視窗
<a name="examples-tumbling-scala"></a>

**注意**  
如需目前範例，請參閱 [建立和使用 Managed Service for Apache Flink 應用程式的範例](examples-collapsibles.md)。

**注意**  
從 Flink 1.15 版開始，移除了 Scala 相依性。應用程式現在可以使用任何 Scala 版本的 Java API。Flink 仍然在內部的幾個關鍵元件中使用 Scala，但不會將 Scala 公開給使用者程式碼類別加載器。因此，使用者需要將 Scala 相依性添加到他們的 jar 存檔中。  
如需 Flink 1.15 中的 Scala 變更之詳細資訊，請參閱[在 1.15 版中移除了 Scala 相依性](https://flink.apache.org/2022/02/22/scala-free.html)。

在本練習中，您將建立一個使用 Scala 3.2.0 和 Flink 的 Java DataStream API 的簡單串流應用程式。應用程式會從 Kinesis 串流讀取資料，使用滑動視窗彙總資料，並將結果寫入輸出 Kinesis 串流。

**注意**  
若要設定此練習的必要先決條件，請先完成[入門 (Scala)](https://docs.aws.amazon.com/managed-flink/latest/java/examples-gs-scala.html) 練習。

**Topics**
+ [下載並檢查應用程式程式碼](#examples-tumbling-scala-download)
+ [編譯和上傳應用程式的程式碼](#examples-tumbling-scala-upload)
+ [建立並執行應用程式 （主控台）](#scala-7)
+ [建立並執行應用程式 (CLI)](#examples-tumbling-scala-create-run-cli)
+ [更新應用程式的程式碼](#examples-tumbling-scala-update-app-code)
+ [清除 AWS 資源](#examples-tumbling-scala-cleanup)

##### 下載並檢查應用程式程式碼
<a name="examples-tumbling-scala-download"></a>

此範例的 Python 應用程式的程式碼可從 GitHub 下載。若要下載應用程式的程式碼，請執行下列動作：

1. 如果您尚未安裝 Git 用戶端，請先安裝。如需詳細資訊，請參閱[安裝 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。

1. 使用以下指令複製遠端儲存庫：

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. 導覽至 `amazon-kinesis-data-analytics-java-examples/scala/TumblingWindow` 目錄。

請留意下列與應用程式的程式碼相關的資訊：
+ `build.sbt` 檔案包含應用程式的組態和相依性資訊，包括 Managed Service for Apache Flink 程式庫。
+ `BasicStreamingJob.scala` 檔案包含定義應用程式功能的主要方法。
+ 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源：

  ```
  private def createSource: FlinkKinesisConsumer[String] = {
    val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties
    val inputProperties = applicationProperties.get("ConsumerConfigProperties")
  
    new FlinkKinesisConsumer[String](inputProperties.getProperty(streamNameKey, defaultInputStreamName),
      new SimpleStringSchema, inputProperties)
  }
  ```

  應用程式也會使用 Kinesis 接收器寫入結果串流。以下程式碼片段會建立 Kinesis 目的地：

  ```
  private def createSink: KinesisStreamsSink[String] = {
    val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties
    val outputProperties = applicationProperties.get("ProducerConfigProperties")
  
    KinesisStreamsSink.builder[String]
      .setKinesisClientProperties(outputProperties)
      .setSerializationSchema(new SimpleStringSchema)
      .setStreamName(outputProperties.getProperty(streamNameKey, defaultOutputStreamName))
      .setPartitionKeyGenerator((element: String) => String.valueOf(element.hashCode))
      .build
  }
  ```
+ 該應用程式使用視窗運算子在 5 秒的輪轉視窗內尋找每個股票代碼的值計數。下列程式碼會建立運算子，並將彙總的資料傳送至新的 Kinesis Data Streams 接收器：

  ```
  environment.addSource(createSource)
    .map { value =>
      val jsonNode = jsonParser.readValue(value, classOf[JsonNode])
      new Tuple2[String, Int](jsonNode.get("ticker").toString, 1)
    }
    .returns(Types.TUPLE(Types.STRING, Types.INT))
    .keyBy(v => v.f0) // Logically partition the stream for each ticker 
    .window(TumblingProcessingTimeWindows.of(Time.seconds(10)))
    .sum(1) // Sum the number of tickers per partition
    .map { value => value.f0 + "," + value.f1.toString + "\n" }
    .sinkTo(createSink)
  ```
+ 應用程式會建立來源與目的地連接器，以使用 StreamExecutionEnvironment 物件來存取外部資源。
+ 應用程式會使用動態應用程式屬性來建立來源與目的地連接器。會讀取執行期應用程式的屬性，來設定連接器。如需執行期屬性的詳細資訊，請參閱[執行期屬性](https://docs.aws.amazon.com/managed-flink/latest/java/how-properties.html)。

##### 編譯和上傳應用程式的程式碼
<a name="examples-tumbling-scala-upload"></a>

在本節中，您會編譯並上傳您應用程式的程式碼至 Amazon S3 儲存貯體。

**編譯應用程式的程式碼**

使用 [SBT](https://www.scala-sbt.org/) 建置工具為應用程式建置 Scala 程式碼。若要安裝 SBT，請參閱[使用 cs 安裝程式安裝 sbt](https://www.scala-sbt.org/download.html)。您還需要安裝 Java 開發套件 (JDK)。請參閱[完成練習的先決條件](https://docs.aws.amazon.com/managed-flink/latest/java/getting-started.html#setting-up-prerequisites)。

1. 請將應用程式的程式碼編譯並封裝成 JAR 檔案，以使用應用程式的程式碼。您可以使用 SBT 編譯和封裝程式碼：

   ```
   sbt assembly
   ```

1. 如果應用程式成功編譯，則會建立下列檔案：

   ```
   target/scala-3.2.0/tumbling-window-scala-1.0.jar
   ```

**上傳 Apache Flink 串流 Scala 程式碼**

在本節中，您會建立 Amazon S3 儲存貯體並上傳您應用程式的程式碼。

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 選擇**建立儲存貯體**。

1. 在**儲存貯體名稱**欄位中，輸入 `ka-app-code-<username>`。新增尾碼至儲存貯體名稱，例如您的使用者名稱，使其成為全域唯一的。選擇**下一步**。

1. 在**設定選項**中，保留原有設定並選擇**下一步**。

1. 在**設定許可**步驟中，保留原有設定並選擇**下一步**。

1. 選擇**建立儲存貯體**。

1. 選擇 `ka-app-code-<username>` 儲存貯體，然後選擇**上傳**。

1. 在**選取檔案**步驟中，選擇 **新增檔案**。導覽至您在上一步驟中建立的 `tumbling-window-scala-1.0.jar` 檔案。

1. 您不需要變更物件的任何設定，因此請選擇**上傳**。

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

##### 建立並執行應用程式 （主控台）
<a name="scala-7"></a>

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

##### 建立應用程式
<a name="scala-7-console-create"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 儀表板上，選擇**建立分析應用程式**。

1. 在 **Managed Service for Apache Flink - 建立應用程式**頁面，提供應用程式詳細資訊，如下所示：
   + 在**應用程式名稱**中，輸入 **MyApplication**。
   + 對於 **Description (說明)**，輸入 **My Scala test app**。
   + 對於**​執行期**，選擇 **​Apache Flink**。
   + 將版本保留為 **Apache Flink 1.15.2 版 (建議版本)**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。

**注意**  
使用主控台建立 Managed Service for Apache Flink 應用程式時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
政策：`kinesis-analytics-service-MyApplication-us-west-2`
角色：`kinesisanalytics-MyApplication-us-west-2`

##### 設定應用程式
<a name="scala-7-console-configure"></a>

請使用下列程序設定應用程式。

**設定應用程式**

1. 在**我的應用程式**頁面，選擇**設定**。

1. 在**設定應用程式**頁面，提供**程式碼位置**：
   + 對於 **Amazon S3 儲存貯體**，請輸入 **ka-app-code-*<username>***。
   + 對於 **Amazon S3 物件的路徑**，請輸入 **tumbling-window-scala-1.0.jar**。

1. 在**存取應用程式資源**下，對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 在**屬性**下，選擇**新增群組**。

1. 輸入下列資料：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

   選擇**儲存**。

1. 在**屬性**下，再次選擇**新增群組**。

1. 輸入下列資料：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

1. 在**監控**下，確保**監控指標層級**設為**應用程式**。

1. 針對 **CloudWatch 記錄**，選取**啟用**核取方塊。

1. 選擇**更新**。

**注意**  
當您選擇啟用 Amazon CloudWatch 日誌時，Managed Service for Apache Flink 便會為您建立日誌群組和日誌串流。這些資源的名稱如下所示：  
日誌群組：`/aws/kinesis-analytics/MyApplication`
日誌串流：`kinesis-analytics-log-stream`

##### 編輯 IAM 政策
<a name="scala-7-console-iam"></a>

編輯 IAM 政策以新增 Amazon S3 儲存貯體存取許可。

**編輯 IAM 政策以新增 S3 儲存貯體許可**

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇**政策**。選擇主控台為您在上一節所建立的 **`kinesis-analytics-service-MyApplication-us-west-2`** 政策。

1. 在**摘要**頁面，選擇**編輯政策**。請選擇 **JSON** 標籤。

1. 將下列政策範例的反白部分新增至政策。使用您的帳戶 ID 取代範例帳戶 ID (*012345678901*)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-username/tumbling-window-scala-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "Sid": "DescribeLogStreams",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogStreams"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
               ]
           },
           {
               "Sid": "PutLogEvents",
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
               ]
           },
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           },
           {
               "Sid": "WriteOutputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream"
           }
       ]
   }
   ```

------

##### 執行應用程式
<a name="scala-7-console-run"></a>

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業，即可檢視 Flink 作業圖表。

##### 停止應用程式
<a name="scala-7-console-stop"></a>

若要停止應用程式，請在 **MyApplication** 頁面上選擇**停止**。確認動作。

##### 建立並執行應用程式 (CLI)
<a name="examples-tumbling-scala-create-run-cli"></a>

在本節中，您可以使用 AWS Command Line Interface 來建立和執行 Managed Service for Apache Flink 應用程式。使用 *kinesisanalyticsv2* AWS CLI 命令來建立 Managed Service for Apache Flink 應用程式並與之互動。

##### 建立許可政策
<a name="examples-tumbling-scala-permissions"></a>

**注意**  
您必須為應用程式建立許可政策和角色。如果您未建立這些 IAM 資源，應用程式將無法存取其資料和日誌串流。

您會先建立具有兩條陳述式的許可政策：一條陳述式授與來源串流上 read 動作的許可，而另一條則是授與目的地串流上 write 動作的許可。您之後會將政策連接至 IAM 角色 (您會在下一節中建立)。因此，當 Managed Service for Apache Flink 擔任角色時，服務便具有從來源串流讀取並寫入目的地串流的所需許可。

使用以下程式碼來建立 `AKReadSourceStreamWriteSinkStream` 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 **username**。使用您的帳戶 ID 取代 Amazon Resource Name (ARN) **(012345678901)** 中的帳戶 ID。**MF-stream-rw-role** 服務執行角色應根據客戶特定角色而打造。

```
{
    "ApplicationName": "tumbling_window",
    "ApplicationDescription": "Scala tumbling window application",
    "RuntimeEnvironment": "FLINK-1_15",
    "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
    "ApplicationConfiguration": {
        "ApplicationCodeConfiguration": {
            "CodeContent": {
                "S3ContentLocation": {
                    "BucketARN": "arn:aws:s3:::ka-app-code-username",
                    "FileKey": "tumbling-window-scala-1.0.jar"
                }
            },
            "CodeContentType": "ZIPFILE"
        },
        "EnvironmentProperties":  { 
         "PropertyGroups": [ 
            { 
               "PropertyGroupId": "ConsumerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleInputStream",
                    "flink.stream.initpos" : "LATEST"
               }
            },
            { 
               "PropertyGroupId": "ProducerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleOutputStream"
               }
            }
         ]
      }
    },
    "CloudWatchLoggingOptions": [ 
      { 
         "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream"
      }
   ]
}
```

如需建立許可政策的逐步指示，請參閱《IAM 使用者指南》**中的[教學課程：建立和連接您的第一個客戶管理政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#part-two-create-policy)。

##### 建立 IAM 角色
<a name="examples-tumbling-scala-iam-policy"></a>

在本節中，您會建立 Managed Service for Apache Flink 應用程式可以擔任的 IAM 角色，以便讀取來源串流與寫入目的地串流。

Managed Service for Apache Flink 沒有許可，無法存取串流。您可以透過 IAM 角色來授與這些許可。各 IAM 角色都有連接兩項政策。信任政策會授與擔任角色的 Managed Service for Apache Flink 許可，而許可政策決定了 Managed Service for Apache Flink 在擔任角色後可以執行的作業。

您會將在上一節中建立的許可政策連接至此角色。

**若要建立一個 IAM 角色**

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**角色**，然後選擇**建立角色**。

1. 在**選取可信身分類型**下，選擇 **AWS 服務**。

1. 在**選擇將使用此角色的服務**下，選擇 **Kinesis**。

1. 在**選取使用案例**下，選擇 **Managed Service for Apache Flink**。

1. 選擇**下一步：許可**。

1. 在**連接許可政策**頁面，選擇**下一步：檢閱**。您會在建立角色後連接許可政策。

1. 在**建立角色**頁面，輸入 **MF-stream-rw-role** 作為**角色名稱**。選擇建**立角色**。

    現在您已建立新的 IAM 角色，名為 `MF-stream-rw-role`。您接著會更新角色的信任和許可政策

1. 將 許可政策連接到角色。
**注意**  
在此練習中，Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟[建立許可政策](https://docs.aws.amazon.com/managed-flink/latest/java/get-started-exercise.html#get-started-exercise-7-cli-policy)中建立的政策。

   1. 在**摘要**頁面，選擇**許可**標籤。

   1. 選擇**連接政策**。

   1. 在搜尋方塊中，輸入 **AKReadSourceStreamWriteSinkStream** (您在上一節中建立的政策)。

   1. 選擇 `AKReadSourceStreamWriteSinkStream` 政策，然後選擇**連接政策**。

您現在已建立應用程式用於存取資源的服務執行角色。請記下新角色的 ARN。

如需建立角色的逐步指示，請參閱《IAM 使用者指南》**中的[建立 IAM 角色 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console)。

##### 建立應用程式
<a name="examples-tumbling-scala-create-application-cli"></a>

將下列 JSON 程式碼複製到名為 `create_request.json` 的檔案。使用您之前建立之角色的 ARN，取代範例角色 ARN。使用您在上一節中選擇的尾碼取代儲存貯體 ARN 尾碼 (username)。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (012345678901)。`ServiceExecutionRole` 應包括您在上一節建立的 IAM 使用者角色。

```
"ApplicationName": "tumbling_window",
    "ApplicationDescription": "Scala getting started application",
    "RuntimeEnvironment": "FLINK-1_15",
    "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
    "ApplicationConfiguration": {
        "ApplicationCodeConfiguration": {
            "CodeContent": {
                "S3ContentLocation": {
                    "BucketARN": "arn:aws:s3:::ka-app-code-username",
                    "FileKey": "tumbling-window-scala-1.0.jar"
                }
            },
            "CodeContentType": "ZIPFILE"
        },
        "EnvironmentProperties":  { 
         "PropertyGroups": [ 
            { 
               "PropertyGroupId": "ConsumerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleInputStream",
                    "flink.stream.initpos" : "LATEST"
               }
            },
            { 
               "PropertyGroupId": "ProducerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleOutputStream"
               }
            }
         ]
      }
    },
    "CloudWatchLoggingOptions": [ 
      { 
         "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream"
      }
   ]
}
```

使用下列請求執行 [CreateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_CreateApplication.html) 以建立應用程式：

```
aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
```

應用程式現在已建立。您會在下一個步驟中啟動應用程式。

##### 啟動應用程式
<a name="examples-tumbling-scala-start"></a>

在本節中，您會透過 [StartApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_StartApplication.html) 動作來啟動應用程式。

**啟動應用程式**

1. 將下列 JSON 程式碼複製到名為 `start_request.json` 的檔案。

   ```
   {
       "ApplicationName": "tumbling_window",
       "RunConfiguration": {
           "ApplicationRestoreConfiguration": { 
            "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"
            }
       }
   }
   ```

1. 以啟動應用程式的上述請求，執行 `StartApplication` 動作：

   ```
   aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
   ```

應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上查看 Managed Service for Apache Flink 指標，以確認應用程式是否正常運作。

##### 停止應用程式
<a name="examples-tumbling-scala-stop"></a>

在本節，您會使用 [StopApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_StopApplication.html) 動作來停止應用程式。

**停止應用程式**

1. 將下列 JSON 程式碼複製到名為 `stop_request.json` 的檔案。

   ```
   {
      "ApplicationName": "tumbling_window"
   }
   ```

1. 使用前述請求執行 `StopApplication` 動作以停止應用程式：

   ```
   aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
   ```

現在已停止應用程式。

##### 新增 CloudWatch 記錄選項
<a name="examples-tumbling-scala-cw-option"></a>

您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需搭配應用程式使用 CloudWatch Logs 的相關資訊，請參閱[設定應用程式記錄](https://docs.aws.amazon.com/managed-flink/latest/java/cloudwatch-logs.html)。

##### 更新環境屬性
<a name="examples-tumbling-scala-update-environment-properties"></a>

在本節中，您可以使用 [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html) 動作來變更應用程式的環境屬性，無需重新編譯應用程式的程式碼。在此範例中，您會變更來源和目的地串流的「區域」。

**更新應用程式的環境屬性**

1. 將下列 JSON 程式碼複製到名為 `update_properties_request.json` 的檔案。

   ```
   {"ApplicationName": "tumbling_window",
      "CurrentApplicationVersionId": 1,
      "ApplicationConfigurationUpdate": { 
         "EnvironmentPropertyUpdates": { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2",
                       "stream.name" : "ExampleInputStream",
                       "flink.stream.initpos" : "LATEST"
                  }
               },
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2",
                       "stream.name" : "ExampleOutputStream"
                  }
               }
            ]
         }
      }
   }
   ```

1. 使用前述請求執行 `UpdateApplication` 動作以更新環境屬性：

   ```
   aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
   ```

##### 更新應用程式的程式碼
<a name="examples-tumbling-scala-update-app-code"></a>

需要使用新版本的程式碼套件更新應用程式的程式碼時，請使用 [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html) CLI 動作。

**注意**  
若要載入具有相同檔案名稱的新版應用程式的程式碼，必須指定新的物件版本。如需如何使用 Amazon S3 物件版本的詳細資訊，請參閱[啟用或停用版本控制](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/enable-versioning.html)。

若要使用 AWS CLI，請從 Amazon S3 儲存貯體刪除先前的程式碼套件、上傳新版本，然後呼叫 `UpdateApplication`、指定相同的 Amazon S3 儲存貯體和物件名稱，以及新的物件版本。應用程式將以新的程式碼套件重新啟動。

`UpdateApplication` 動作的下列範例請求會重新載入應用程式的程式碼並重新啟動應用程式。將 `CurrentApplicationVersionId` 更新至目前的應用程式版本。您可以使用 `ListApplications` 或 `DescribeApplication` 動作來檢查目前的應用程式版本。使用您在[建立相依資源](examples-gs-scala.md#examples-gs-scala-resources)一節中選擇的尾碼更新儲存貯體名稱尾碼 (<username>)。

```
{
    "ApplicationName": "tumbling_window",
    "CurrentApplicationVersionId": 1,
    "ApplicationConfigurationUpdate": {
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username",
                    "FileKeyUpdate": "tumbling-window-scala-1.0.jar",
                    "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU"
                }
            }
        }
    }
}
```

##### 清除 AWS 資源
<a name="examples-tumbling-scala-cleanup"></a>

本節包含清除在輪轉時段教學課程中建立 AWS 之資源的程序。

**Topics**
+ [刪除 Managed Service for Apache Flink 應用程式](#examples-tumbling-scala-cleanup-app)
+ [刪除您的 Kinesis 資料串流](#examples-tumbling-scala-cleanup-stream)
+ [刪除您的 Amazon S3 物件和儲存貯體](#examples-tumbling-scala-cleanup-s3)
+ [刪除您的 IAM 資源](#examples-tumbling-scala-cleanup-iam)
+ [刪除您的 CloudWatch 資源](#examples-tumbling-scala-cleanup-cw)

##### 刪除 Managed Service for Apache Flink 應用程式
<a name="examples-tumbling-scala-cleanup-app"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 面板中，選擇 **MyApplication**。

1. 在應用程式的頁面，選擇**刪除**，然後確認刪除。

##### 刪除您的 Kinesis 資料串流
<a name="examples-tumbling-scala-cleanup-stream"></a>

1. 在以下網址開啟 Kinesis 主控台：[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis)。

1. 在 Kinesis Data Streams 面板中，選擇 **ExampleInputStream**。

1. 在 **ExampleInputStream** 頁面，選擇**刪除 Kinesis 串流**，然後確認刪除。

1. 在 **Kinesis 串流**頁面，依序選擇 **ExampleOutputStream**、**動作**和**刪除**，然後確認刪除。

##### 刪除您的 Amazon S3 物件和儲存貯體
<a name="examples-tumbling-scala-cleanup-s3"></a>

1. 在以下網址開啟 Amazon S3 主控台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 選擇 **ka-app-code-*<username>* 儲存貯體。**

1. 選擇**刪除**，然後輸入儲存貯體名稱以確認刪除。

##### 刪除您的 IAM 資源
<a name="examples-tumbling-scala-cleanup-iam"></a>

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽列中，選擇**政策**。

1. 在篩選器控制項中，輸入 **kinesis**。

1. 選擇 **kinesis-analytics-service-MyApplication-us-west-2** 政策。

1. 選擇**政策動作**，然後選擇**刪除**。

1. 在導覽列中，選擇**角色**。

1. 選擇 **kinesis-analytics-MyApplication-us-west-2** 角色。

1. 選擇**刪除角色**，然後確認刪除。

##### 刪除您的 CloudWatch 資源
<a name="examples-tumbling-scala-cleanup-cw"></a>

1. 在以下網址開啟 CloudWatch 主控台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在導覽列中，選擇**日誌**。

1. 選擇 **/aws/kinesis-analytics/MyApplication** 日誌群組。

1. 選擇**刪除日誌群組**，然後確認刪除。

#### 範例：在 Scala 中建立滑動視窗
<a name="examples-sliding-scala"></a>

**注意**  
如需目前範例，請參閱 [建立和使用 Managed Service for Apache Flink 應用程式的範例](examples-collapsibles.md)。

**注意**  
從 Flink 1.15 版開始，移除了 Scala 相依性。應用程式現在可以使用任何 Scala 版本的 Java API。Flink 仍然在內部的幾個關鍵元件中使用 Scala，但不會將 Scala 公開給使用者程式碼類別加載器。因此，使用者需要將 Scala 相依性添加到他們的 jar 存檔中。  
如需 Flink 1.15 中的 Scala 變更之詳細資訊，請參閱[在 1.15 版中移除了 Scala 相依性](https://flink.apache.org/2022/02/22/scala-free.html)。

在本練習中，您將建立一個使用 Scala 3.2.0 和 Flink 的 Java DataStream API 的簡單串流應用程式。應用程式會從 Kinesis 串流讀取資料，使用滑動視窗彙總資料，並將結果寫入輸出 Kinesis 串流。

**注意**  
若要設定此練習的必要先決條件，請先完成[入門 (Scala)](https://docs.aws.amazon.com/managed-flink/latest/java/examples-gs-scala.html) 練習。

**Topics**
+ [下載並檢查應用程式程式碼](#examples-sliding-scala-download)
+ [編譯和上傳應用程式的程式碼](#examples-sliding-scala-upload)
+ [建立並執行應用程式 （主控台）](#scala-7)
+ [建立並執行應用程式 (CLI)](#examples-sliding-scala-create-run-cli)
+ [更新應用程式的程式碼](#examples-sliding-scala-update-app-code)
+ [清除 AWS 資源](#examples-sliding-scala-cleanup)

##### 下載並檢查應用程式程式碼
<a name="examples-sliding-scala-download"></a>

此範例的 Python 應用程式的程式碼可從 GitHub 下載。若要下載應用程式的程式碼，請執行下列動作：

1. 如果您尚未安裝 Git 用戶端，請先安裝。如需詳細資訊，請參閱[安裝 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。

1. 使用以下指令複製遠端儲存庫：

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. 導覽至 `amazon-kinesis-data-analytics-java-examples/scala/SlidingWindow` 目錄。

請留意下列與應用程式的程式碼相關的資訊：
+ `build.sbt` 檔案包含應用程式的組態和相依性資訊，包括 Managed Service for Apache Flink 程式庫。
+ `BasicStreamingJob.scala` 檔案包含定義應用程式功能的主要方法。
+ 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源：

  ```
  private def createSource: FlinkKinesisConsumer[String] = {
    val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties
    val inputProperties = applicationProperties.get("ConsumerConfigProperties")
  
    new FlinkKinesisConsumer[String](inputProperties.getProperty(streamNameKey, defaultInputStreamName),
      new SimpleStringSchema, inputProperties)
  }
  ```

  應用程式也會使用 Kinesis 接收器寫入結果串流。以下程式碼片段會建立 Kinesis 目的地：

  ```
  private def createSink: KinesisStreamsSink[String] = {
    val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties
    val outputProperties = applicationProperties.get("ProducerConfigProperties")
  
    KinesisStreamsSink.builder[String]
      .setKinesisClientProperties(outputProperties)
      .setSerializationSchema(new SimpleStringSchema)
      .setStreamName(outputProperties.getProperty(streamNameKey, defaultOutputStreamName))
      .setPartitionKeyGenerator((element: String) => String.valueOf(element.hashCode))
      .build
  }
  ```
+ 該應用程式使用視窗運算子在按 5 秒滑動的 10 秒視窗內尋找每個股票代碼的值計數。下列程式碼會建立運算子，並將彙總的資料傳送至新的 Kinesis Data Streams 接收器：

  ```
  environment.addSource(createSource)
      .map { value =>
        val jsonNode = jsonParser.readValue(value, classOf[JsonNode])
        new Tuple2[String, Double](jsonNode.get("ticker").toString, jsonNode.get("price").asDouble)
      }
      .returns(Types.TUPLE(Types.STRING, Types.DOUBLE))
      .keyBy(v => v.f0) // Logically partition the stream for each word
      .window(SlidingProcessingTimeWindows.of(Time.seconds(10), Time.seconds(5)))
      .min(1) // Calculate minimum price per ticker over the window
      .map { value => value.f0 + String.format(",%.2f", value.f1) + "\n" }
      .sinkTo(createSink)
  ```
+ 應用程式會建立來源與目的地連接器，以使用 StreamExecutionEnvironment 物件來存取外部資源。
+ 應用程式會使用動態應用程式屬性來建立來源與目的地連接器。會讀取執行期應用程式的屬性，來設定連接器。如需執行期屬性的詳細資訊，請參閱[執行期屬性](https://docs.aws.amazon.com/managed-flink/latest/java/how-properties.html)。

##### 編譯和上傳應用程式的程式碼
<a name="examples-sliding-scala-upload"></a>

在本節中，您會編譯並上傳您應用程式的程式碼至 Amazon S3 儲存貯體。

**編譯應用程式的程式碼**

使用 [SBT](https://www.scala-sbt.org/) 建置工具為應用程式建置 Scala 程式碼。若要安裝 SBT，請參閱[使用 cs 安裝程式安裝 sbt](https://www.scala-sbt.org/download.html)。您還需要安裝 Java 開發套件 (JDK)。請參閱[完成練習的先決條件](https://docs.aws.amazon.com/managed-flink/latest/java/getting-started.html#setting-up-prerequisites)。

1. 請將應用程式的程式碼編譯並封裝成 JAR 檔案，以使用應用程式的程式碼。您可以使用 SBT 編譯和封裝程式碼：

   ```
   sbt assembly
   ```

1. 如果應用程式成功編譯，則會建立下列檔案：

   ```
   target/scala-3.2.0/sliding-window-scala-1.0.jar
   ```

**上傳 Apache Flink 串流 Scala 程式碼**

在本節中，您會建立 Amazon S3 儲存貯體並上傳您應用程式的程式碼。

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 選擇**建立儲存貯體**。

1. 在**儲存貯體名稱**欄位中，輸入 `ka-app-code-<username>`。新增尾碼至儲存貯體名稱，例如您的使用者名稱，使其成為全域唯一的。選擇**下一步**。

1. 在**設定選項**中，保留原有設定並選擇**下一步**。

1. 在**設定許可**步驟中，保留原有設定並選擇**下一步**。

1. 選擇**建立儲存貯體**。

1. 選擇 `ka-app-code-<username>` 儲存貯體，然後選擇**上傳**。

1. 在**選取檔案**步驟中，選擇 **新增檔案**。導覽至您在上一步驟中建立的 `sliding-window-scala-1.0.jar` 檔案。

1. 您不需要變更物件的任何設定，因此請選擇**上傳**。

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

##### 建立並執行應用程式 （主控台）
<a name="scala-7"></a>

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

##### 建立應用程式
<a name="scala-7-console-create"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 儀表板上，選擇**建立分析應用程式**。

1. 在 **Managed Service for Apache Flink - 建立應用程式**頁面，提供應用程式詳細資訊，如下所示：
   + 在**應用程式名稱**中，輸入 **MyApplication**。
   + 對於 **Description (說明)**，輸入 **My Scala test app**。
   + 對於**​執行期**，選擇 **​Apache Flink**。
   + 將版本保留為 **Apache Flink 1.15.2 版 (建議版本)**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。

**注意**  
使用主控台建立 Managed Service for Apache Flink 應用程式時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
政策：`kinesis-analytics-service-MyApplication-us-west-2`
角色：`kinesisanalytics-MyApplication-us-west-2`

##### 設定應用程式
<a name="scala-7-console-configure"></a>

請使用下列程序設定應用程式。

**設定應用程式**

1. 在**我的應用程式**頁面，選擇**設定**。

1. 在**設定應用程式**頁面，提供**程式碼位置**：
   + 對於 **Amazon S3 儲存貯體**，請輸入 **ka-app-code-*<username>***。
   + 對於 **Amazon S3 物件的路徑**，請輸入 **sliding-window-scala-1.0.jar.**。

1. 在**存取應用程式資源**下，對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 在**屬性**下，選擇**新增群組**。

1. 輸入下列資料：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

   選擇**儲存**。

1. 在**屬性**下，再次選擇**新增群組**。

1. 輸入下列資料：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

1. 在**監控**下，確保**監控指標層級**設為**應用程式**。

1. 針對 **CloudWatch 記錄**，選取**啟用**核取方塊。

1. 選擇**更新**。

**注意**  
當您選擇啟用 Amazon CloudWatch 日誌時，Managed Service for Apache Flink 便會為您建立日誌群組和日誌串流。這些資源的名稱如下所示：  
日誌群組：`/aws/kinesis-analytics/MyApplication`
日誌串流：`kinesis-analytics-log-stream`

##### 編輯 IAM 政策
<a name="scala-7-console-iam"></a>

編輯 IAM 政策以新增 Amazon S3 儲存貯體存取許可。

**編輯 IAM 政策以新增 S3 儲存貯體許可**

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇**政策**。選擇主控台為您在上一節所建立的 **`kinesis-analytics-service-MyApplication-us-west-2`** 政策。

1. 在**摘要**頁面，選擇**編輯政策**。請選擇 **JSON** 標籤。

1. 將下列政策範例的反白部分新增至政策。使用您的帳戶 ID 取代範例帳戶 ID (*012345678901*)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-username/sliding-window-scala-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "Sid": "DescribeLogStreams",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogStreams"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
               ]
           },
           {
               "Sid": "PutLogEvents",
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
               ]
           },
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           },
           {
               "Sid": "WriteOutputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream"
           }
       ]
   }
   ```

------

##### 執行應用程式
<a name="scala-7-console-run"></a>

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業，即可檢視 Flink 作業圖表。

##### 停止應用程式
<a name="scala-7-console-stop"></a>

若要停止應用程式，請在 **MyApplication** 頁面上選擇**停止**。確認動作。

##### 建立並執行應用程式 (CLI)
<a name="examples-sliding-scala-create-run-cli"></a>

在本節中，您可以使用 AWS Command Line Interface 來建立和執行 Managed Service for Apache Flink 應用程式。使用 *kinesisanalyticsv2* AWS CLI 命令來建立 Managed Service for Apache Flink 應用程式並與之互動。

##### 建立許可政策
<a name="examples-sliding-scala-permissions"></a>

**注意**  
您必須為應用程式建立許可政策和角色。如果您未建立這些 IAM 資源，應用程式將無法存取其資料和日誌串流。

您會先建立具有兩條陳述式的許可政策：一條陳述式授與來源串流上 read 動作的許可，而另一條則是授與目的地串流上 write 動作的許可。您之後會將政策連接至 IAM 角色 (您會在下一節中建立)。因此，當 Managed Service for Apache Flink 擔任角色時，服務便具有從來源串流讀取並寫入目的地串流的所需許可。

使用以下程式碼來建立 `AKReadSourceStreamWriteSinkStream` 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 **username**。使用您的帳戶 ID 取代 Amazon Resource Name (ARN) **(012345678901)** 中的帳戶 ID。

```
{
    "ApplicationName": "sliding_window",
    "ApplicationDescription": "Scala sliding window application",
    "RuntimeEnvironment": "FLINK-1_15",
    "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
    "ApplicationConfiguration": {
        "ApplicationCodeConfiguration": {
            "CodeContent": {
                "S3ContentLocation": {
                    "BucketARN": "arn:aws:s3:::ka-app-code-username",
                    "FileKey": "sliding-window-scala-1.0.jar"
                }
            },
            "CodeContentType": "ZIPFILE"
        },
        "EnvironmentProperties":  { 
         "PropertyGroups": [ 
            { 
               "PropertyGroupId": "ConsumerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleInputStream",
                    "flink.stream.initpos" : "LATEST"
               }
            },
            { 
               "PropertyGroupId": "ProducerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleOutputStream"
               }
            }
         ]
      }
    },
    "CloudWatchLoggingOptions": [ 
      { 
         "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream"
      }
   ]
}
```

如需建立許可政策的逐步指示，請參閱《IAM 使用者指南》**中的[教學課程：建立和連接您的第一個客戶管理政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#part-two-create-policy)。

##### 建立 IAM 角色
<a name="examples-sliding-scala-iam-policy"></a>

在本節中，您會建立 Managed Service for Apache Flink 應用程式可以擔任的 IAM 角色，以便讀取來源串流與寫入目的地串流。

Managed Service for Apache Flink 沒有許可，無法存取串流。您可以透過 IAM 角色來授與這些許可。各 IAM 角色都有連接兩項政策。信任政策會授與擔任角色的 Managed Service for Apache Flink 許可，而許可政策決定了 Managed Service for Apache Flink 在擔任角色後可以執行的作業。

您會將在上一節中建立的許可政策連接至此角色。

**若要建立一個 IAM 角色**

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**角色**，然後選擇**建立角色**。

1. 在**選取可信身分類型**下，選擇 **AWS 服務**。

1. 在**選擇將使用此角色的服務**下，選擇 **Kinesis**。

1. 在**選取使用案例**下，選擇 **Managed Service for Apache Flink**。

1. 選擇**下一步：許可**。

1. 在**連接許可政策**頁面，選擇**下一步：檢閱**。您會在建立角色後連接許可政策。

1. 在**建立角色**頁面，輸入 **MF-stream-rw-role** 作為**角色名稱**。選擇建**立角色**。

    現在您已建立新的 IAM 角色，名為 `MF-stream-rw-role`。您接著會更新角色的信任和許可政策

1. 將 許可政策連接到角色。
**注意**  
在此練習中，Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟[建立許可政策](https://docs.aws.amazon.com/managed-flink/latest/java/get-started-exercise.html#get-started-exercise-7-cli-policy)中建立的政策。

   1. 在**摘要**頁面，選擇**許可**標籤。

   1. 選擇**連接政策**。

   1. 在搜尋方塊中，輸入 **AKReadSourceStreamWriteSinkStream** (您在上一節中建立的政策)。

   1. 選擇 `AKReadSourceStreamWriteSinkStream` 政策，然後選擇**連接政策**。

您現在已建立應用程式用於存取資源的服務執行角色。請記下新角色的 ARN。

如需建立角色的逐步指示，請參閱《IAM 使用者指南》**中的[建立 IAM 角色 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console)。

##### 建立應用程式
<a name="examples-sliding-scala-create-application-cli"></a>

將下列 JSON 程式碼複製到名為 `create_request.json` 的檔案。使用您之前建立之角色的 ARN，取代範例角色 ARN。使用您在上一節中選擇的尾碼取代儲存貯體 ARN 尾碼 (username)。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (012345678901)。

```
{
    "ApplicationName": "sliding_window",
    "ApplicationDescription": "Scala sliding_window application",
    "RuntimeEnvironment": "FLINK-1_15",
    "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
    "ApplicationConfiguration": {
        "ApplicationCodeConfiguration": {
            "CodeContent": {
                "S3ContentLocation": {
                    "BucketARN": "arn:aws:s3:::ka-app-code-username",
                    "FileKey": "sliding-window-scala-1.0.jar"
                }
            },
            "CodeContentType": "ZIPFILE"
        },
        "EnvironmentProperties":  { 
         "PropertyGroups": [ 
            { 
               "PropertyGroupId": "ConsumerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleInputStream",
                    "flink.stream.initpos" : "LATEST"
               }
            },
            { 
               "PropertyGroupId": "ProducerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleOutputStream"
               }
            }
         ]
      }
    },
    "CloudWatchLoggingOptions": [ 
      { 
         "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream"
      }
   ]
}
```

使用下列請求執行 [CreateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_CreateApplication.html) 以建立應用程式：

```
aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
```

應用程式現在已建立。您會在下一個步驟中啟動應用程式。

##### 啟動應用程式
<a name="examples-sliding-scala-start"></a>

在本節中，您會透過 [StartApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_StartApplication.html) 動作來啟動應用程式。

**啟動應用程式**

1. 將下列 JSON 程式碼複製到名為 `start_request.json` 的檔案。

   ```
   {
       "ApplicationName": "sliding_window",
       "RunConfiguration": {
           "ApplicationRestoreConfiguration": { 
            "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"
            }
       }
   }
   ```

1. 以啟動應用程式的上述請求，執行 `StartApplication` 動作：

   ```
   aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
   ```

應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上查看 Managed Service for Apache Flink 指標，以確認應用程式是否正常運作。

##### 停止應用程式
<a name="examples-sliding-scala-stop"></a>

在本節，您會使用 [StopApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_StopApplication.html) 動作來停止應用程式。

**停止應用程式**

1. 將下列 JSON 程式碼複製到名為 `stop_request.json` 的檔案。

   ```
   {
      "ApplicationName": "sliding_window"
   }
   ```

1. 使用前述請求執行 `StopApplication` 動作以停止應用程式：

   ```
   aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
   ```

現在已停止應用程式。

##### 新增 CloudWatch 記錄選項
<a name="examples-sliding-scala-cw-option"></a>

您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需搭配應用程式使用 CloudWatch Logs 的相關資訊，請參閱[設定應用程式記錄](https://docs.aws.amazon.com/managed-flink/latest/java/cloudwatch-logs.html)。

##### 更新環境屬性
<a name="examples-sliding-scala-update-environment-properties"></a>

在本節中，您可以使用 [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html) 動作來變更應用程式的環境屬性，無需重新編譯應用程式的程式碼。在此範例中，您會變更來源和目的地串流的「區域」。

**更新應用程式的環境屬性**

1. 將下列 JSON 程式碼複製到名為 `update_properties_request.json` 的檔案。

   ```
   {"ApplicationName": "sliding_window",
      "CurrentApplicationVersionId": 1,
      "ApplicationConfigurationUpdate": { 
         "EnvironmentPropertyUpdates": { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2",
                       "stream.name" : "ExampleInputStream",
                       "flink.stream.initpos" : "LATEST"
                  }
               },
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2",
                       "stream.name" : "ExampleOutputStream"
                  }
               }
            ]
         }
      }
   }
   ```

1. 使用前述請求執行 `UpdateApplication` 動作以更新環境屬性：

   ```
   aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
   ```

##### 更新應用程式的程式碼
<a name="examples-sliding-scala-update-app-code"></a>

需要使用新版本的程式碼套件更新應用程式的程式碼時，請使用 [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html) CLI 動作。

**注意**  
若要載入具有相同檔案名稱的新版應用程式的程式碼，必須指定新的物件版本。如需如何使用 Amazon S3 物件版本的詳細資訊，請參閱[啟用或停用版本控制](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/enable-versioning.html)。

若要使用 AWS CLI，請從 Amazon S3 儲存貯體刪除先前的程式碼套件、上傳新版本，然後呼叫 `UpdateApplication`、指定相同的 Amazon S3 儲存貯體和物件名稱，以及新的物件版本。應用程式將以新的程式碼套件重新啟動。

`UpdateApplication` 動作的下列範例請求會重新載入應用程式的程式碼並重新啟動應用程式。將 `CurrentApplicationVersionId` 更新至目前的應用程式版本。您可以使用 `ListApplications` 或 `DescribeApplication` 動作來檢查目前的應用程式版本。使用您在[建立相依資源](examples-gs-scala.md#examples-gs-scala-resources)一節中選擇的尾碼更新儲存貯體名稱尾碼 (<username>)。

```
{
    "ApplicationName": "sliding_window",
    "CurrentApplicationVersionId": 1,
    "ApplicationConfigurationUpdate": {
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username",
                    "FileKeyUpdate": "-1.0.jar",
                    "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU"
                }
            }
        }
    }
}
```

##### 清除 AWS 資源
<a name="examples-sliding-scala-cleanup"></a>

本節包含清除在滑動視窗教學課程中建立 AWS 之資源的程序。

**Topics**
+ [刪除 Managed Service for Apache Flink 應用程式](#examples-sliding-scala-cleanup-app)
+ [刪除您的 Kinesis 資料串流](#examples-sliding-scala-cleanup-stream)
+ [刪除您的 Amazon S3 物件和儲存貯體](#examples-sliding-scala-cleanup-s3)
+ [刪除您的 IAM 資源](#examples-sliding-scala-cleanup-iam)
+ [刪除您的 CloudWatch 資源](#examples-sliding-scala-cleanup-cw)

##### 刪除 Managed Service for Apache Flink 應用程式
<a name="examples-sliding-scala-cleanup-app"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 面板中，選擇 **MyApplication**。

1. 在應用程式的頁面，選擇**刪除**，然後確認刪除。

##### 刪除您的 Kinesis 資料串流
<a name="examples-sliding-scala-cleanup-stream"></a>

1. 在以下網址開啟 Kinesis 主控台：[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis)。

1. 在 Kinesis Data Streams 面板中，選擇 **ExampleInputStream**。

1. 在 **ExampleInputStream** 頁面，選擇**刪除 Kinesis 串流**，然後確認刪除。

1. 在 **Kinesis 串流**頁面，依序選擇 **ExampleOutputStream**、**動作**和**刪除**，然後確認刪除。

##### 刪除您的 Amazon S3 物件和儲存貯體
<a name="examples-sliding-scala-cleanup-s3"></a>

1. 在以下網址開啟 Amazon S3 主控台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 選擇 **ka-app-code-*<username>* 儲存貯體。**

1. 選擇**刪除**，然後輸入儲存貯體名稱以確認刪除。

##### 刪除您的 IAM 資源
<a name="examples-sliding-scala-cleanup-iam"></a>

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽列中，選擇**政策**。

1. 在篩選器控制項中，輸入 **kinesis**。

1. 選擇 **kinesis-analytics-service-MyApplication-us-west-2** 政策。

1. 選擇**政策動作**，然後選擇**刪除**。

1. 在導覽列中，選擇**角色**。

1. 選擇 **kinesis-analytics-MyApplication-us-west-2** 角色。

1. 選擇**刪除角色**，然後確認刪除。

##### 刪除您的 CloudWatch 資源
<a name="examples-sliding-scala-cleanup-cw"></a>

1. 在以下網址開啟 CloudWatch 主控台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在導覽列中，選擇**日誌**。

1. 選擇 **/aws/kinesis-analytics/MyApplication** 日誌群組。

1. 選擇**刪除日誌群組**，然後確認刪除。

#### 範例：在 Scala 中將串流資料傳送至 Amazon S3
<a name="examples-s3sink-scala"></a>

**注意**  
如需目前範例，請參閱 [建立和使用 Managed Service for Apache Flink 應用程式的範例](examples-collapsibles.md)。

**注意**  
從 Flink 1.15 版開始，移除了 Scala 相依性。應用程式現在可以使用任何 Scala 版本的 Java API。Flink 仍然在內部的幾個關鍵元件中使用 Scala，但不會將 Scala 公開給使用者程式碼類別加載器。因此，使用者需要將 Scala 相依性添加到他們的 jar 存檔中。  
如需 Flink 1.15 中的 Scala 變更之詳細資訊，請參閱[在 1.15 版中移除了 Scala 相依性](https://flink.apache.org/2022/02/22/scala-free.html)。

在本練習中，您將建立一個使用 Scala 3.2.0 和 Flink 的 Java DataStream API 的簡單串流應用程式。應用程式會從 Kinesis 串流讀取資料，使用滑動視窗彙總資料，並將結果寫入 S3。

**注意**  
若要設定此練習的必要先決條件，請先完成[入門 (Scala)](https://docs.aws.amazon.com/managed-flink/latest/java/examples-gs-scala.html) 練習。您只需要在 Amazon S3 儲存貯體 *ka-app-code-<username>* 中建立一個額外的資料夾 **data/**。

**Topics**
+ [下載並檢查應用程式程式碼](#examples-s3sink-scala-download)
+ [編譯和上傳應用程式的程式碼](#examples-s3sink-scala-upload)
+ [建立並執行應用程式 （主控台）](#scala-7)
+ [建立並執行應用程式 (CLI)](#examples-s3sink-scala-create-run-cli)
+ [更新應用程式的程式碼](#examples-s3sink-scala-update-app-code)
+ [清除 AWS 資源](#examples-s3sink-scala-cleanup)

##### 下載並檢查應用程式程式碼
<a name="examples-s3sink-scala-download"></a>

此範例的 Python 應用程式的程式碼可從 GitHub 下載。若要下載應用程式的程式碼，請執行下列動作：

1. 如果您尚未安裝 Git 用戶端，請先安裝。如需詳細資訊，請參閱[安裝 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。

1. 使用以下指令複製遠端儲存庫：

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. 導覽至 `amazon-kinesis-data-analytics-java-examples/scala/S3Sink` 目錄。

請留意下列與應用程式的程式碼相關的資訊：
+ `build.sbt` 檔案包含應用程式的組態和相依性資訊，包括 Managed Service for Apache Flink 程式庫。
+ `BasicStreamingJob.scala` 檔案包含定義應用程式功能的主要方法。
+ 應用程式使用 Kinesis 來源從來源串流讀取。以下程式碼片段會建立 Kinesis 來源：

  ```
  private def createSource: FlinkKinesisConsumer[String] = {
    val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties
    val inputProperties = applicationProperties.get("ConsumerConfigProperties")
  
    new FlinkKinesisConsumer[String](inputProperties.getProperty(streamNameKey, defaultInputStreamName),
      new SimpleStringSchema, inputProperties)
  }
  ```

  應用程式也使用 StreamingFileSink 來寫入 Amazon S3 儲存貯體：`

  ```
  def createSink: StreamingFileSink[String] = {
    val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties
    val s3SinkPath = applicationProperties.get("ProducerConfigProperties").getProperty("s3.sink.path")
  
    StreamingFileSink
      .forRowFormat(new Path(s3SinkPath), new SimpleStringEncoder[String]("UTF-8"))
      .build()
  }
  ```
+ 應用程式會建立來源與目的地連接器，以使用 StreamExecutionEnvironment 物件來存取外部資源。
+ 應用程式會使用動態應用程式屬性來建立來源與目的地連接器。會讀取執行期應用程式的屬性，來設定連接器。如需執行期屬性的詳細資訊，請參閱[執行期屬性](https://docs.aws.amazon.com/managed-flink/latest/java/how-properties.html)。

##### 編譯和上傳應用程式的程式碼
<a name="examples-s3sink-scala-upload"></a>

在本節中，您會編譯並上傳您應用程式的程式碼至 Amazon S3 儲存貯體。

**編譯應用程式的程式碼**

使用 [SBT](https://www.scala-sbt.org/) 建置工具為應用程式建置 Scala 程式碼。若要安裝 SBT，請參閱[使用 cs 安裝程式安裝 sbt](https://www.scala-sbt.org/download.html)。您還需要安裝 Java 開發套件 (JDK)。請參閱[完成練習的先決條件](https://docs.aws.amazon.com/managed-flink/latest/java/getting-started.html#setting-up-prerequisites)。

1. 請將應用程式的程式碼編譯並封裝成 JAR 檔案，以使用應用程式的程式碼。您可以使用 SBT 編譯和封裝程式碼：

   ```
   sbt assembly
   ```

1. 如果應用程式成功編譯，則會建立下列檔案：

   ```
   target/scala-3.2.0/s3-sink-scala-1.0.jar
   ```

**上傳 Apache Flink 串流 Scala 程式碼**

在本節中，您會建立 Amazon S3 儲存貯體並上傳您應用程式的程式碼。

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 選擇**建立儲存貯體**。

1. 在**儲存貯體名稱**欄位中，輸入 `ka-app-code-<username>`。新增尾碼至儲存貯體名稱，例如您的使用者名稱，使其成為全域唯一的。選擇**下一步**。

1. 在**設定選項**中，保留原有設定並選擇**下一步**。

1. 在**設定許可**步驟中，保留原有設定並選擇**下一步**。

1. 選擇**建立儲存貯體**。

1. 選擇 `ka-app-code-<username>` 儲存貯體，然後選擇**上傳**。

1. 在**選取檔案**步驟中，選擇 **新增檔案**。導覽至您在上一步驟中建立的 `s3-sink-scala-1.0.jar` 檔案。

1. 您不需要變更物件的任何設定，因此請選擇**上傳**。

您的應用程式的程式碼現在儲存在您的應用程式可以存取的 Amazon S3 儲存貯體中。

##### 建立並執行應用程式 （主控台）
<a name="scala-7"></a>

依照以下步驟來使用主控台建立、設定、更新及執行應用程式。

##### 建立應用程式
<a name="scala-7-console-create"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 儀表板上，選擇**建立分析應用程式**。

1. 在 **Managed Service for Apache Flink - 建立應用程式**頁面，提供應用程式詳細資訊，如下所示：
   + 在**應用程式名稱**中，輸入 **MyApplication**。
   + 對於 **Description (說明)**，輸入 **My java test app**。
   + 對於**​執行期**，選擇 **​Apache Flink**。
   + 將版本保留為 **Apache Flink 1.15.2 版 (建議版本)**。

1. 對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 選擇 **建立應用程式**。

**注意**  
使用主控台建立 Managed Service for Apache Flink 應用程式時，可以選擇是否為應用程式建立 IAM 角色和政策。應用程式使用此角色和政策來存取其相依資源。這些 IAM 資源會如下所述使用您的應用程式名稱和區域命名：  
政策：`kinesis-analytics-service-MyApplication-us-west-2`
角色：`kinesisanalytics-MyApplication-us-west-2`

##### 設定應用程式
<a name="scala-7-console-configure"></a>

請使用下列程序設定應用程式。

**設定應用程式**

1. 在**我的應用程式**頁面，選擇**設定**。

1. 在**設定應用程式**頁面，提供**程式碼位置**：
   + 對於 **Amazon S3 儲存貯體**，請輸入 **ka-app-code-*<username>***。
   + 對於 **Amazon S3 物件的路徑**，請輸入 **s3-sink-scala-1.0.jar**。

1. 在**存取應用程式資源**下，對於**存取許可**，選擇**建立/更新 IAM 角色 `kinesis-analytics-MyApplication-us-west-2`**。

1. 在**屬性**下，選擇**新增群組**。

1. 輸入下列資料：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

   選擇**儲存**。

1. 在**屬性**下，選擇**新增群組**。

1. 輸入下列資料：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/managed-flink/latest/java/earlier.html)

1. 在**監控**下，確保**監控指標層級**設為**應用程式**。

1. 針對 **CloudWatch 記錄**，選取**啟用**核取方塊。

1. 選擇**更新**。

**注意**  
當您選擇啟用 Amazon CloudWatch 日誌時，Managed Service for Apache Flink 便會為您建立日誌群組和日誌串流。這些資源的名稱如下所示：  
日誌群組：`/aws/kinesis-analytics/MyApplication`
日誌串流：`kinesis-analytics-log-stream`

##### 編輯 IAM 政策
<a name="scala-7-console-iam"></a>

編輯 IAM 政策以新增 Amazon S3 儲存貯體存取許可。

**編輯 IAM 政策以新增 S3 儲存貯體許可**

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇**政策**。選擇主控台為您在上一節所建立的 **`kinesis-analytics-service-MyApplication-us-west-2`** 政策。

1. 在**摘要**頁面，選擇**編輯政策**。請選擇 **JSON** 標籤。

1. 將下列政策範例的反白部分新增至政策。使用您的帳戶 ID 取代範例帳戶 ID (*012345678901*)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:Abort*", 
                   "s3:DeleteObject*", 
                   "s3:GetObject*", 
                   "s3:GetBucket*", 
                   "s3:List*", 
                   "s3:ListBucket", 
                   "s3:PutObject"
               ],
               "Resource": [ 
                   "arn:aws:s3:::ka-app-code-<username>", 
                   "arn:aws:s3:::ka-app-code-<username>/*" 
               ]
           },
           {
               "Sid": "DescribeLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "Sid": "DescribeLogStreams",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogStreams"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
               ]
           },
           {
               "Sid": "PutLogEvents",
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
               ]
           },
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           }
       ]
   }
   ```

------

##### 執行應用程式
<a name="scala-7-console-run"></a>

透過執行應用程式、開啟 Apache Flink 儀表板並選擇所需的 Flink 作業，即可檢視 Flink 作業圖表。

##### 停止應用程式
<a name="scala-7-console-stop"></a>

若要停止應用程式，請在 **MyApplication** 頁面上選擇**停止**。確認動作。

##### 建立並執行應用程式 (CLI)
<a name="examples-s3sink-scala-create-run-cli"></a>

在本節中，您可以使用 AWS Command Line Interface 來建立和執行 Managed Service for Apache Flink 應用程式。使用 *kinesisanalyticsv2* AWS CLI 命令來建立 Managed Service for Apache Flink 應用程式並與之互動。

##### 建立許可政策
<a name="examples-s3sink-scala-permissions"></a>

**注意**  
您必須為應用程式建立許可政策和角色。如果您未建立這些 IAM 資源，應用程式將無法存取其資料和日誌串流。

您會先建立具有兩條陳述式的許可政策：一條陳述式授與來源串流上 read 動作的許可，而另一條則是授與目的地串流上 write 動作的許可。您之後會將政策連接至 IAM 角色 (您會在下一節中建立)。因此，當 Managed Service for Apache Flink 擔任角色時，服務便具有從來源串流讀取並寫入目的地串流的所需許可。

使用以下程式碼來建立 `AKReadSourceStreamWriteSinkStream` 許可政策。以您用於建立 Amazon S3 儲存貯體 (以儲存應用程式的程式碼) 的使用者名稱來取代 **username**。使用您的帳戶 ID 取代 Amazon Resource Name (ARN) **(012345678901)** 中的帳戶 ID。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ReadCode",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::ka-app-code-username/getting-started-scala-1.0.jar"
            ]
        },
        {
            "Sid": "DescribeLogGroups",
            "Effect": "Allow",
            "Action": [
                "logs:DescribeLogGroups"
            ],
            "Resource": [
                "arn:aws:logs:us-west-2:123456789012:*"
            ]
        },
        {
            "Sid": "DescribeLogStreams",
            "Effect": "Allow",
            "Action": [
                "logs:DescribeLogStreams"
            ],
            "Resource": [
                "arn:aws:logs:us-west-2:123456789012:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
            ]
        },
        {
            "Sid": "PutLogEvents",
            "Effect": "Allow",
            "Action": [
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:us-west-2:123456789012:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
            ]
        },
        {
            "Sid": "ReadInputStream",
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": "arn:aws:kinesis:us-west-2:123456789012:stream/ExampleInputStream"
        },
        {
            "Sid": "WriteOutputStream",
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": "arn:aws:kinesis:us-west-2:123456789012:stream/ExampleOutputStream"
        }
    ]
}
```

------

如需建立許可政策的逐步指示，請參閱《IAM 使用者指南》**中的[教學課程：建立和連接您的第一個客戶管理政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#part-two-create-policy)。

##### 建立 IAM 角色
<a name="examples-s3sink-scala-iam-policy"></a>

在本節中，您會建立 Managed Service for Apache Flink 應用程式可以擔任的 IAM 角色，以便讀取來源串流與寫入目的地串流。

Managed Service for Apache Flink 沒有許可，無法存取串流。您可以透過 IAM 角色來授與這些許可。各 IAM 角色都有連接兩項政策。信任政策會授與擔任角色的 Managed Service for Apache Flink 許可，而許可政策決定了 Managed Service for Apache Flink 在擔任角色後可以執行的作業。

您會將在上一節中建立的許可政策連接至此角色。

**若要建立一個 IAM 角色**

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**角色**，然後選擇**建立角色**。

1. 在**選取可信身分類型**下，選擇 **AWS 服務**。

1. 在**選擇將使用此角色的服務**下，選擇 **Kinesis**。

1. 在**選取使用案例**下，選擇 **Managed Service for Apache Flink**。

1. 選擇**下一步：許可**。

1. 在**連接許可政策**頁面，選擇**下一步：檢閱**。您會在建立角色後連接許可政策。

1. 在**建立角色**頁面，輸入 **MF-stream-rw-role** 作為**角色名稱**。選擇建**立角色**。

    現在您已建立新的 IAM 角色，名為 `MF-stream-rw-role`。您接著會更新角色的信任和許可政策

1. 將 許可政策連接到角色。
**注意**  
在此練習中，Managed Service for Apache Flink 擔任從 Kinesis 資料串流 (來源) 讀取資料並將輸出寫入另一個 Kinesis 資料串流的角色。因此您會連接在上一個步驟[建立許可政策](https://docs.aws.amazon.com/managed-flink/latest/java/get-started-exercise.html#get-started-exercise-7-cli-policy)中建立的政策。

   1. 在**摘要**頁面，選擇**許可**標籤。

   1. 選擇**連接政策**。

   1. 在搜尋方塊中，輸入 **AKReadSourceStreamWriteSinkStream** (您在上一節中建立的政策)。

   1. 選擇 `AKReadSourceStreamWriteSinkStream` 政策，然後選擇**連接政策**。

您現在已建立應用程式用於存取資源的服務執行角色。請記下新角色的 ARN。

如需建立角色的逐步指示，請參閱《IAM 使用者指南》**中的[建立 IAM 角色 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console)。

##### 建立應用程式
<a name="examples-s3sink-scala-create-application-cli"></a>

將下列 JSON 程式碼複製到名為 `create_request.json` 的檔案。使用您之前建立之角色的 ARN，取代範例角色 ARN。使用您在上一節中選擇的尾碼取代儲存貯體 ARN 尾碼 (username)。使用您的帳戶 ID 取代服務執行角色中的範例帳戶 ID (012345678901)。

```
{
    "ApplicationName": "s3_sink",
    "ApplicationDescription": "Scala tumbling window application",
    "RuntimeEnvironment": "FLINK-1_15",
    "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
    "ApplicationConfiguration": {
        "ApplicationCodeConfiguration": {
            "CodeContent": {
                "S3ContentLocation": {
                    "BucketARN": "arn:aws:s3:::ka-app-code-username",
                    "FileKey": "s3-sink-scala-1.0.jar"
                }
            },
            "CodeContentType": "ZIPFILE"
        },
        "EnvironmentProperties":  { 
         "PropertyGroups": [ 
            { 
               "PropertyGroupId": "ConsumerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleInputStream",
                    "flink.stream.initpos" : "LATEST"
               }
            },
            { 
               "PropertyGroupId": "ProducerConfigProperties",
               "PropertyMap" : {
                    "s3.sink.path" : "s3a://ka-app-code-<username>/data"
               }
            }
         ]
      }
    },
    "CloudWatchLoggingOptions": [ 
      { 
         "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream"
      }
   ]
}
```

使用下列請求執行 [CreateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_CreateApplication.html) 以建立應用程式：

```
aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
```

應用程式現在已建立。您會在下一個步驟中啟動應用程式。

##### 啟動應用程式
<a name="examples-s3sink-scala-start"></a>

在本節中，您會透過 [StartApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_StartApplication.html) 動作來啟動應用程式。

**啟動應用程式**

1. 將下列 JSON 程式碼複製到名為 `start_request.json` 的檔案。

   ```
   {{
       "ApplicationName": "s3_sink",
       "RunConfiguration": {
           "ApplicationRestoreConfiguration": { 
            "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"
            }
       }
   }
   ```

1. 以啟動應用程式的上述請求，執行 `StartApplication` 動作：

   ```
   aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
   ```

應用程式現在正在執行。您可以在 Amazon CloudWatch 主控台上查看 Managed Service for Apache Flink 指標，以確認應用程式是否正常運作。

##### 停止應用程式
<a name="examples-s3sink-scala-stop"></a>

在本節，您會使用 [StopApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_StopApplication.html) 動作來停止應用程式。

**停止應用程式**

1. 將下列 JSON 程式碼複製到名為 `stop_request.json` 的檔案。

   ```
   {
      "ApplicationName": "s3_sink"
   }
   ```

1. 使用前述請求執行 `StopApplication` 動作以停止應用程式：

   ```
   aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
   ```

現在已停止應用程式。

##### 新增 CloudWatch 記錄選項
<a name="examples-s3sink-scala-cw-option"></a>

您可以使用 AWS CLI 將 Amazon CloudWatch 日誌串流新增至您的應用程式。如需搭配應用程式使用 CloudWatch Logs 的相關資訊，請參閱[設定應用程式記錄](https://docs.aws.amazon.com/managed-flink/latest/java/cloudwatch-logs.html)。

##### 更新環境屬性
<a name="examples-s3sink-scala-update-environment-properties"></a>

在本節中，您可以使用 [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html) 動作來變更應用程式的環境屬性，無需重新編譯應用程式的程式碼。在此範例中，您會變更來源和目的地串流的「區域」。

**更新應用程式的環境屬性**

1. 將下列 JSON 程式碼複製到名為 `update_properties_request.json` 的檔案。

   ```
   {"ApplicationName": "s3_sink",
      "CurrentApplicationVersionId": 1,
      "ApplicationConfigurationUpdate": { 
         "EnvironmentPropertyUpdates": { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2",
                       "stream.name" : "ExampleInputStream",
                       "flink.stream.initpos" : "LATEST"
                  }
               },
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "s3.sink.path" : "s3a://ka-app-code-<username>/data"
                  }
               }
            ]
         }
      }
   }
   ```

1. 使用前述請求執行 `UpdateApplication` 動作以更新環境屬性：

   ```
   aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
   ```

##### 更新應用程式的程式碼
<a name="examples-s3sink-scala-update-app-code"></a>

需要使用新版本的程式碼套件更新應用程式的程式碼時，請使用 [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html) CLI 動作。

**注意**  
若要載入具有相同檔案名稱的新版應用程式的程式碼，必須指定新的物件版本。如需如何使用 Amazon S3 物件版本的詳細資訊，請參閱[啟用或停用版本控制](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/enable-versioning.html)。

若要使用 AWS CLI，請從 Amazon S3 儲存貯體刪除先前的程式碼套件、上傳新版本，然後呼叫 `UpdateApplication`、指定相同的 Amazon S3 儲存貯體和物件名稱，以及新的物件版本。應用程式將以新的程式碼套件重新啟動。

`UpdateApplication` 動作的下列範例請求會重新載入應用程式的程式碼並重新啟動應用程式。將 `CurrentApplicationVersionId` 更新至目前的應用程式版本。您可以使用 `ListApplications` 或 `DescribeApplication` 動作來檢查目前的應用程式版本。使用您在[建立相依資源](examples-gs-scala.md#examples-gs-scala-resources)一節中選擇的尾碼更新儲存貯體名稱尾碼 (<username>)。

```
{
    "ApplicationName": "s3_sink",
    "CurrentApplicationVersionId": 1,
    "ApplicationConfigurationUpdate": {
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username",
                    "FileKeyUpdate": "s3-sink-scala-1.0.jar",
                    "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU"
                }
            }
        }
    }
}
```

##### 清除 AWS 資源
<a name="examples-s3sink-scala-cleanup"></a>

本節包含清除在輪轉時段教學課程中建立 AWS 之資源的程序。

**Topics**
+ [刪除 Managed Service for Apache Flink 應用程式](#examples-s3sink-scala-cleanup-app)
+ [刪除您的 Kinesis 資料串流](#examples-s3sink-scala-cleanup-stream)
+ [刪除您的 Amazon S3 物件和儲存貯體](#examples-s3sink-scala-cleanup-s3)
+ [刪除您的 IAM 資源](#examples-s3sink-scala-cleanup-iam)
+ [刪除您的 CloudWatch 資源](#examples-s3sink-scala-cleanup-cw)

##### 刪除 Managed Service for Apache Flink 應用程式
<a name="examples-s3sink-scala-cleanup-app"></a>

1. 登入 AWS 管理主控台，並在 https：//https://console.aws.amazon.com/flink 開啟 Amazon MSF 主控台。

1. 在 Managed Service for Apache Flink 面板中，選擇 **MyApplication**。

1. 在應用程式的頁面，選擇**刪除**，然後確認刪除。

##### 刪除您的 Kinesis 資料串流
<a name="examples-s3sink-scala-cleanup-stream"></a>

1. 在以下網址開啟 Kinesis 主控台：[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis)。

1. 在 Kinesis Data Streams 面板中，選擇 **ExampleInputStream**。

1. 在 **ExampleInputStream** 頁面，選擇**刪除 Kinesis 串流**，然後確認刪除。

1. 在 **Kinesis 串流**頁面，依序選擇 **ExampleOutputStream**、**動作**和**刪除**，然後確認刪除。

##### 刪除您的 Amazon S3 物件和儲存貯體
<a name="examples-s3sink-scala-cleanup-s3"></a>

1. 在以下網址開啟 Amazon S3 主控台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 選擇 **ka-app-code-*<username>* 儲存貯體。**

1. 選擇**刪除**，然後輸入儲存貯體名稱以確認刪除。

##### 刪除您的 IAM 資源
<a name="examples-s3sink-scala-cleanup-iam"></a>

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽列中，選擇**政策**。

1. 在篩選器控制項中，輸入 **kinesis**。

1. 選擇 **kinesis-analytics-service-MyApplication-us-west-2** 政策。

1. 選擇**政策動作**，然後選擇**刪除**。

1. 在導覽列中，選擇**角色**。

1. 選擇 **kinesis-analytics-MyApplication-us-west-2** 角色。

1. 選擇**刪除角色**，然後確認刪除。

##### 刪除您的 CloudWatch 資源
<a name="examples-s3sink-scala-cleanup-cw"></a>

1. 在以下網址開啟 CloudWatch 主控台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在導覽列中，選擇**日誌**。

1. 選擇 **/aws/kinesis-analytics/MyApplication** 日誌群組。

1. 選擇**刪除日誌群組**，然後確認刪除。