

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 步骤 1：创建 Amazon S3 存储桶
<a name="using-s3-bucket"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

您必须先创建 Amazon S3 存储桶。您可以使用 Amazon S3 控制台、API 或 CLI 来直接完成此操作，不过创建资源更简单的方法通常是使用 CloudFormation 模板。以下模板为此示例创建 Amazon S3 存储桶，并设置具有 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/instance-profiles.html)的[实例配置文件](https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html)，授予对存储桶的无限制访问权限。然后，您可以使用层设置来将实例配置文件附加到堆栈的应用程序服务器实例，这会允许应用程序访问存储桶，如下文所述。实例配置文件的实效性不限制为 Amazon S3，对于集成各种 Amazon Web Service 非常有价值。

```
{
   "AWSTemplateFormatVersion" : "2010-09-09",
   "Resources" : {
      "AppServerRootRole": {
         "Type": "AWS::IAM::Role",
         "Properties": {
            "AssumeRolePolicyDocument": {
               "Statement": [ {
                  "Effect": "Allow",
                  "Principal": {
                     "Service": [ "ec2.amazonaws.com" ]
                  },
                  "Action": [ "sts:AssumeRole" ]
               } ]
            },
            "Path": "/"
         }
      },
      "AppServerRolePolicies": {
         "Type": "AWS::IAM::Policy",
         "Properties": {
            "PolicyName": "AppServerS3Perms",
            "PolicyDocument": {
               "Statement": [ {
                  "Effect": "Allow",
                  "Action": "s3:*",
                  "Resource": { "Fn::Join" : ["", [ "arn:aws:s3:::", { "Ref" : "AppBucket" } , "/*" ]
                  ] }
               } ]
            },
            "Roles": [ { "Ref": "AppServerRootRole" } ]
         }
      },
      "AppServerInstanceProfile": {
         "Type": "AWS::IAM::InstanceProfile",
         "Properties": {
            "Path": "/",
            "Roles": [ { "Ref": "AppServerRootRole" } ]
         }
      },
     "AppBucket" : {
      "Type" : "AWS::S3::Bucket"
      }
   },
   "Outputs" : {
       "BucketName" : {
           "Value" : { "Ref" : "AppBucket" }
       },
       "InstanceProfileName" : {
           "Value" : { "Ref" : "AppServerInstanceProfile" }
       }
   }
}
```

在您启动模板时，将发生几件事：
+ `[AWS::S3::Bucket](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html)` 资源创建 Amazon S3 存储桶。
+ `[AWS::IAM::InstanceProfile](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html)` 资源创建将分配到应用程序服务器实例的实例配置文件。
+ `[AWS::IAM::Role](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html)` 资源创建实例配置文件的角色。
+ `[AWS::IAM::Policy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html)` 资源将角色的权限设置为允许不受限制地访问 Amazon S3 存储桶。
+ 在您启动模板之后，`Outputs` 部分在 CloudFormation 控制台中显示存储桶和实例配置文件名称。

  您需要这些值来设置堆栈和应用程序。

有关如何创建 CloudFormation 模板的更多信息，请参阅[学习模板基础知识](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/gettingstarted.templatebasics.html)。

**创建 Amazon S3 存储桶**

1. 将示例模板复制到系统上的文本文件。

   此示例假定文件名为 `appserver.template`。

1. 打开 [CloudFormation](https://console.aws.amazon.com/cloudformation/) 控制台并选择**创建堆栈**。

1. 在 **Stack Name** 框中，输入堆栈名称。

   此示例假定名称为 **AppServer**。

1. 请依次选择 **Upload template file (上传模板文件)**、**Browse (浏览)**、您在步骤 1 中创建的 `appserver.template` 文件以及 **Next Step (下一步)**。

1. 在 **Specify Parameters (指定参数)** 页面上，选择 **I acknowledge that this template may create IAM resources (我确认，此模板可创建 IAM 资源)**，然后在向导的各页面上选择 **Next Step (下一步)**，直至您完成。选择**创建**。

1. **AppServer**堆栈达到 **CREATE\$1COMPLETE** 状态后，将其选中并选择 “**输出**” 选项卡。

   您可能需要刷新几次来更新状态。

1. 在 “**输出**” 选项卡上，记录**BucketName**和**InstanceProfileName**值以备后用。

**注意**  
CloudFormation 使用术语*堆栈*来指根据模板创建的资源集合；它与堆栈 OpsWorks 堆栈不同。