【问题标题】:Can you pass a parameter into a bash script in Cloudformation?您可以将参数传递到 Cloudformation 中的 bash 脚本吗?
【发布时间】:2022-01-17 09:21:41
【问题描述】:

我正在尝试创建一个 bash 脚本来将 EC2 实例更新到最新版本的 Boto3。为此,我需要将 .zip 文件放入指定的 S3 存储桶中。我希望用户在部署堆栈时输入其 S3 存储桶的名称,然后将其输入 bash 脚本。 这是我的代码:

Parameters:
  BucketName:
    Type: String

Resources:  
  rRunLambdaLayerScript:
    Type: AWS::SSM::Association
    Properties:
      Name: AWS-RunShellScript
      WaitForSuccessTimeoutSeconds: 300
      Targets:
      - Key: tag:Lambda
        Values:
        - layer
      Parameters:
        commands:
            - |
                #!/usr/bin/env bash

                mkdir lambda_layer
                cd lambda_layer/
                mkdir python
                cd python/
                pip3 install boto3 -t ./
                cd ..
                zip -r /tmp/lambda_layer.zip .
                aws s3 cp /tmp/lambda_layer.zip s3://$BucketName

这样做会导致脚本将其留空并出现“参数验证失败”错误。

【问题讨论】:

    标签: bash amazon-web-services amazon-cloudformation


    【解决方案1】:

    您通常为此使用Sub

    Parameters:
      BucketName:
        Type: String
    
    Resources:  
      rRunLambdaLayerScript:
        Type: AWS::SSM::Association
        Properties:
          Name: AWS-RunShellScript
          WaitForSuccessTimeoutSeconds: 300
          Targets:
          - Key: tag:Lambda
            Values:
            - layer
          Parameters:
            commands:
                - !Sub |
                    #!/usr/bin/env bash
    
                    mkdir lambda_layer
                    cd lambda_layer/
                    mkdir python
                    cd python/
                    pip3 install boto3 -t ./
                    cd ..
                    zip -r /tmp/lambda_layer.zip .
                    aws s3 cp /tmp/lambda_layer.zip s3://${BucketName}
    

    【讨论】:

      猜你喜欢
      • 2019-03-11
      • 1970-01-01
      • 2019-11-22
      • 2021-11-18
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      相关资源
      最近更新 更多