

這是新的 *CloudFormation 範本參考指南*。請更新您的書籤和連結。如需 CloudFormation 入門的說明，請參閱 [AWS CloudFormation 使用者指南](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)。

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

# cfn-init
<a name="cfn-init"></a>

在 CloudFormation 範本中，您可以在 Amazon EC2 資源的 `Metadata` 區段中使用 `AWS::CloudFormation::Init` 來定義初始化任務。如需詳細資訊，請參閱[`AWS::CloudFormation::Init`](aws-resource-init.md)。

`cfn-init` 協助程式指令碼可從 `AWS::CloudFormation::Init` 金鑰中讀取範本中繼資料並相應地執行以下動作：
+ 從 CloudFormation 擷取及剖析中繼資料
+ 安裝套件
+ 將檔案寫入磁碟
+ 啟用/停用及啟動/停止服務

`cfn-init` 協助程式指令碼通常從 Amazon EC2 執行個體或啟動範本的使用者資料中執行。

如果您是初次使用協助程式指令碼，建議您先完成**《AWS CloudFormation 使用者指南》中的在 [Amazon EC2 上部署應用程式](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/deploying.applications.html)教學課程。

**Topics**
+ [語法](#cfn-init-Syntax)
+ [選項](#cfn-init-options)
+ [範例](#cfn-init-examples)
+ [相關資源](#cfn-init-related-resources)

**注意**  
如果使用 `cfn-init` 更新現有的檔案，則會在相同的目錄中建立原始檔案的備份複本 (副檔名為 .bak)。例如，如果您更新 `/{{path}}/{{to}}/{{file_name}}`，此動作會產生兩個檔案：`/{{path}}/{{to}}/{{file_name}}.bak` 包含原始檔案的內容，而 `/{{path}}/{{to}}/{{file_name}}` 包含更新的內容。

## 語法
<a name="cfn-init-Syntax"></a>

```
cfn-init --stack|-s {{stack.name.or.id}} \
         --resource|-r {{logical.resource.id}} \
         --region {{region}} \
         --access-key {{access.key}} \
         --secret-key {{secret.key}} \
         --role {{rolename}} \
         --credential-file|-f {{credential.file}} \
         --configsets|-c {{config.sets}} \
         --url|-u {{service.url}} \
         --http-proxy {{HTTP.proxy}} \
         --https-proxy {{HTTPS.proxy}} \
         --verbose|-v
```

**注意**  
`cfn-init` 不需要憑證，因此您不需要使用 `--access-key`、`--secret-key`、`--role` 或 `--credential-file` 選項。不過，如果未指定憑證，CloudFormation 會檢查是否有堆疊成員資格，並將呼叫範圍限制為執行個體所屬的堆疊。如需詳細資訊，請參閱[協助程式指令碼的許可](cfn-helper-scripts-reference.md#cfn-helper-scripts-reference-permissions)。

## 選項
<a name="cfn-init-options"></a>


| 名稱 | 描述 | 必要 | 
| --- | --- | --- | 
|  `-s, --stack`  | 堆疊名稱或堆疊 ID。<br />*類型*：字串<br />*預設*：無<br />*範例*：`--stack { "Ref" : "AWS::StackName" },` | 是 | 
|  `-r, --resource `  | 包含中繼資料之資源的邏輯資源 ID。<br />*類型：*字串<br />*範例*：`--resource WebServerHost` | 是 | 
|  `--region`  | 要使用的 CloudFormation 區域端點。<br />*類型：*字串<br />*預設*：`us-east-1`<br />*範例*：`--region ", { "Ref" : "AWS::Region" },` | 否 | 
|  `--access-key`  | AWS 具有在 CloudFormation `DescribeStackResource` 上呼叫 許可之帳戶的 存取金鑰。憑證檔案參數會取代此參數。<br />*類型：*字串 | 否 | 
|  `--secret-key`  | AWS 對應至指定存取金鑰的私密 AWS 存取金鑰。<br />*類型：*字串 | 否 | 
|  `--role`  | 與執行個體相關聯的 IAM 角色名稱。<br />*類型：*字串<br />條件：憑證檔案參數會取代此參數。 | 否 | 
|  `-f, --credential-file`  | 包含私密存取金鑰和存取金鑰的檔案。憑證檔案參數會取代 --role、--access-key 和 --secret-key 參數。<br />*類型：*字串 | 否 | 
|  `-c, --configsets`  | 要 (循序) 執行的組態集逗號分隔清單。<br />*類型：*字串<br />*預設*：`default` | 否 | 
|  `-u, --url`  | 要使用的 CloudFormation 端點。<br />*類型：*字串 | 否 | 
| `--http-proxy` | HTTP 代理 (非 SSL)。使用下列格式：`http://{{user:password}}@{{host}}:{{port}}`<br />*類型：*字串 | 否 | 
| `--https-proxy` | HTTPS 代理。使用下列格式：`https://{{user:password}}@{{host}}:{{port}}`<br />*類型：*字串 | 否 | 
| `-v, --verbose` | 詳細資訊輸出。對於 `cfn-init` 無法初始化的除錯情況，這很有用。 若要對初始化事件除錯，應該開啟 `DisableRollback`。然後，可以使用 SSH 登入主控台，並讀取 `/var/log/cfn-init.log` 中的日誌。如需詳細資訊，請參閱**《AWS CloudFormation 使用者指南》中的[選擇如何處理佈建資源時的失敗](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stack-failure-options.html)。  | 否 | 
| `-h, --help` | 顯示協助訊息並退出。 | 否 | 

## 範例
<a name="cfn-init-examples"></a>

### Amazon Linux 範例
<a name="w2aac32c27c21b3"></a>

下列範例顯示 EC2 執行個體的 `UserData` 屬性，此屬性執行與 `InstallAndRun` 資源相關聯的 `WebServerInstance` 組態集。

若要包含最新版本，請將 `yum install -y aws-cfn-bootstrap` 新增至 `UserData`。

#### JSON
<a name="cfn-init-example.json"></a>

`UserData` 屬性，使用 `Fn::Join` 內部函數。

```
{
    "UserData": {
        "Fn::Base64": {
            "Fn::Join": [
                "",
                [
                    "#!/bin/bash -xe\n",
                    "",
                    "yum install -y aws-cfn-bootstrap",
                    "/opt/aws/bin/cfn-init -v ",
                    "         --stack ",
                    {
                        "Ref": "AWS::StackName"
                    },
                    "         --resource WebServerInstance ",
                    "         --configsets InstallAndRun ",
                    "         --region ",
                    {
                        "Ref": "AWS::Region"
                    },
                    "\n"
                ]
            ]
        }
    }
}
```

#### YAML
<a name="cfn-init-example.yaml"></a>

`UserData` 屬性，使用 `Fn::Sub` 內部函數。

```
UserData:
  Fn::Base64: !Sub |
    #!/bin/bash -xe
    yum update -y aws-cfn-bootstrap
    # Install the files and packages from the metadata
    /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource WebServerInstance --configsets InstallAndRun --region ${AWS::Region}
```

## 相關資源
<a name="cfn-init-related-resources"></a>

如需範例範本的教學課程，請參閱**《AWS CloudFormation 使用者指南》中的在 [Amazon EC2 上部署應用程式](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/deploying.applications.html)。

如需 Windows 範例，請參閱**《AWS CloudFormation 使用者指南》中的[引導基於 Windows 的 CloudFormation 堆疊](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-windows-stacks-bootstrapping.html)。

您也可以造訪我們的 GitHub 儲存庫，下載使用 `cfn-init` 的[範例範本](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html#sample-templates)，包括下列範本。
+  [InstanceWithCfnInit.yaml](https://github.com/aws-cloudformation/aws-cloudformation-templates/blob/main/EC2/InstanceWithCfnInit.yaml) 
+  [AutoScalingRollingUpdates.yaml](https://github.com/aws-cloudformation/aws-cloudformation-templates/blob/main/AutoScaling/AutoScalingRollingUpdates.yaml) 

如需使用 `cfn-init` 的 LAMP 堆疊範本範例，請參閱 GitHub 網站上的 [ec2-lamp-server](https://github.com/aws-samples/ec2-lamp-server)。