您可以将参数传递给 Cloudformation 中的 bash 脚本吗?

Can you pass a parameter into a bash script in Cloudformation?

我正在尝试创建一个 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

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

你通常使用 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}