Amazon web services 在CloudFormation cfn init中运行shell脚本

Amazon web services 在CloudFormation cfn init中运行shell脚本,amazon-web-services,amazon-cloudformation,Amazon Web Services,Amazon Cloudformation,我试图在cfn init命令中运行脚本,但它一直超时。 运行startup-script.sh时我做错了什么 "WebServerInstance" : { "Type" : "AWS::EC2::Instance", "DependsOn" : "AttachGateway", "Metadata" : { "Comment" : "Install a simple application", "AWS::CloudForma

我试图在cfn init命令中运行脚本,但它一直超时。 运行startup-script.sh时我做错了什么

"WebServerInstance" : {
      "Type" : "AWS::EC2::Instance",
      "DependsOn" : "AttachGateway",
      "Metadata" : {
        "Comment" : "Install a simple application",
        "AWS::CloudFormation::Init" : {
          "config" : {
            "files": {
              "/home/ec2-user/startup_script.sh": {
                "content": {
                  "Fn::Join": [
                    "",
                    [
                      "#!/bin/bash\n",
                      "aws s3 cp s3://server-assets/startserver.jar . --region=ap-northeast-1\n",
                      "aws s3 cp s3://server-assets/site-home-sprint2.jar . --region=ap-northeast-1\n",
                      "java -jar startserver.jar\n",
                      "java -jar site-home-sprint2.jar --spring.datasource.password=`< password.txt` --spring.datasource.username=`< username.txt` --spring.datasource.url=`<db_url.txt`\n"
                    ]
                  ]
                },
                "mode": "000755"
              }
            },
            "commands": {
              "start_server": {
                "command": "./startup_script.sh",
                "cwd": "~",
              }
            }
          }
        }
      },
文件部分工作正常,创建文件,但在运行命令时超时。
执行shell脚本的正确方法是什么?

除非另有规定,否则初始化脚本通常由root用户执行。您可以尝试在运行启动脚本时提供完整路径吗。你可以试一试。它是一个在线云信息模板生成器。更容易创建对象,如aws::cloudformation::init。

您可以跟踪/var/log/cfn-init.log中的日志,并在运行脚本时检测问题

默认情况下,Cloudformation Init中的命令作为sudo用户运行。如果您的脚本位于/home/ec2 user/中,并且您试图从“~”即/root运行脚本,则可能会出现问题

请在cwd中提供绝对路径/home/ec2用户。这会解决你的问题


但是,确切的问题只能从日志中获取。

您说它超时了:是因为脚本挂起,还是因为它运行的时间太长而超出了默认的超时时间?