

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

# 將 部署為具有持久狀態的應用程式
<a name="how-notebook-durable"></a>

您可以建立程式碼並將其匯出到 Amazon S3。您可以將在筆記中撰寫的程式碼升級為持續執行的串流處理應用程式。在 Managed Service for Apache Flink 上執行 Apache Flink 應用程式有兩種模式：使用 Studio 筆記本，您可以互動方式開發程式碼、即時檢視程式碼結果，並在筆記中以視覺化方式呈現。您將筆記部署為在串流模式下執行後，Managed Service for Apache Flink 可以建立一個持續執行的應用程式、從來源讀取資料、寫入目的地、讓應用程式維持長時間執行狀態，以及根據來源串流的輸送量自動擴展資源。

**注意**  
應用程式的程式碼匯出到的 S3 儲存貯體必須與 Studio 筆記本位於相同的區域。

只有在符合下列條件的情況下，才能部署 Studio 筆記本的筆記：
+ 段落必須按順序排列。部署應用程式時，筆記中的所有段落都會依序執行 (從左至右、從上至下)，如同它們在筆記中顯示的一樣。您可以透過在筆記中選擇**執行所有段落**來檢查此順序。
+ 你的程式碼是 Python 和 SQL 或 Scala 和 SQL 的組合。對於部署即應用程式，目前不支援 Python 和 Scala 的組合。
+ 您的筆記必須只包含下列解譯器：`%flink`、`%flink.ssql`、`%flink.pyflink`、`%flink.ipyflink`、`%md`。
+ 不支援使用 [Zeppelin 內容](https://zeppelin.apache.org/docs/0.9.0/usage/other_features/zeppelin_context.html)物件 `z`。不傳回任何結果的方法不會執行任何動作，除記錄警告之外。其他方法將引發 Python 例外狀況或無法在 Scala 中編譯。
+ 筆記必須產生單一 Apache Flink 作業。
+ 不支援將具有[動態資料表](https://zeppelin.apache.org/docs/0.9.0/usage/dynamic_form/intro.html)的筆記部署為應用程式。
+ %md ([Markdown](https://zeppelin.apache.org/docs/0.9.0/interpreter/markdown.html)) 段落在部署為應用程式時會略過，因為這些段落預期會包含人類可讀的文件，不適合作為產生的應用程式的一部分執行。
+ 部署為應用程式時，將會略過不在 Zeppelin 中執行的停用段落。即使停用的段落使用不相容的解譯器 (例如含有`%flink` `and %flink.ssql` 解譯器的筆記中的 `%flink.ipyflink`)，在將筆記部署為應用程式時，仍會略過該解譯器，並且不會產生錯誤。
+ 來源程式碼 (Flink SQL、PyFlink 或 Flink Scala) 中必須至少有一個段落處於啟用且可執行狀態，才能成功部署應用程式。
+ 在某個段落內的解譯器指令中設定平行處理 (例如 `%flink.ssql(parallelism=32)`) 將在從筆記部署的應用程式中略過。反之，您可以透過 AWS 管理主控台、 AWS Command Line Interface 或 AWS API 更新已部署的應用程式，以根據應用程式所需的平行處理層級變更平行處理和/或ParallelismPerKPU 設定，或者您可以為已部署的應用程式啟用自動擴展。
+ 如果要部署為具有持久狀態的應用程式，則您的 VPC 必須具有網際網路存取。如果您的 VPC 無法存取網際網路，請參閱[在無網際網路存取的 VPC 中，部署為具有持久狀態的應用程式](how-zeppelin-troubleshooting.md#how-zeppelin-troubleshooting-deploying-no-internet)。

## Scala/Python 條件
<a name="how-notebook-durable-scala"></a>
+ 在 Scala 或 Python 程式碼中，使用 [Blink 規劃器](https://nightlies.apache.org/flink/flink-docs-release-1.15/dev/table/#dependency-structure) (對於 Scala，是 `senv`，`stenv`；對於 Python，是 `s_env`，`st_env`)，而不是較舊的「Flink」規劃器 (對於 Scala，是 `stenv_2`；對於 Python，是 `st_env_2`)。Apache Flink 專案建議在生產用例中使用 Blink 規劃器，這是 Zeppelin 和 Flink 中的預設規劃器。
+ Python 段落不得在預定部署為應用程式的筆記中使用使用 `!` 的 [shell 調用/指派](https://ipython.readthedocs.io/en/stable/interactive/python-ipython-diff.html#shell-assignment)或 [IPython 魔術命令](https://ipython.readthedocs.io/en/stable/interactive/magics.html)，例如 `%timeit` 或 `%conda`。
+ 您不能使用 Scala 案例類別作為傳遞給高階資料流程運算子 (如 `map` 和 `filter`) 的函數的參數。如需 Scala 案例類別的相關資訊，請參閱 Scala 文件中的[案例類別](https://docs.scala-lang.org/overviews/scala-book/case-classes.html)。

## SQL 條件
<a name="how-notebook-durable-sql"></a>
+ 不允許使用簡單的 SELECT 陳述式，因為沒有相當於段落的輸出部分可以傳遞資料。
+ 在任何指定段落中，DDL 陳述式 (`USE`、`CREATE`、`ALTER`、`DROP`、`SET`、`RESET`) 都必須放在 DML (`INSERT`) 陳述式前面。這是因為，段落中的 DML 陳述式必須作為單一 Flink 作業一起提交。
+ 最多只能有一個段落中包含 DML 陳述式。這是因為，對於「部署即應用程式」功能，我們僅支援提交單一作業至 Flink。

如需詳細資訊和範例，請參閱[搭配使用 SQL 函數與 Amazon Managed Service for Apache Flink、Amazon Translate 和 Amazon Comprehend 來翻譯、修訂和分析串流資料](https://aws.amazon.com/blogs/machine-learning/translate-redact-and-analyze-streaming-data-using-sql-functions-with-amazon-kinesisanalytics-MyApplicatioamazon-translate-and-amazon-comprehend/)。