【发布时间】:2022-11-10 21:57:43
【问题描述】:
我一直在努力在使用 UserData 字段创建时将 EFS 卷安装到 EC2 实例。我正在使用 Pulumi 的 Go 库,我拥有的内容如下所示:
// ... EFS with proper security groups and mountTarget created above ...
dir := configuration.Deployment.Efs.MountPoint
availabilityZone := configuration.Deployment.AvailabilityZone
region := configuration.Deployment.Region
userdata := args.Efs.ID().ToStringOutput().ApplyT(func(id string) (string, error) {
script := `
#!/bin/bash -xe
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
mkdir -p %s
echo "%s.%s.%s.amazonaws.com:/ %s nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0" | tee -a /etc/fstab
mount -a
`
return fmt.Sprintf(script, dir, availabilityZone, id, region, dir), nil
}).(pulumi.StringOutput)
ec2, err := ec2.NewInstance(ctx, fmt.Sprintf("%s_instance", name), &ec2.InstanceArgs{
// ... (other fields) ...
UserData: userdata,
// ... (other fields) ...
})
但是当我用 Pulumi 创建所有资源时,UserData 脚本根本没有运行。我的假设是在创建 EC2 实例时 EFS ID 没有及时解析,但我认为 Pulumi 会自动处理依赖关系排序,因为 EC2 实例现在依赖于 EFS 卷。我还添加了一个明确的DependsOn() 以查看这是否可能是问题所在,但这并没有帮助。
有什么我做错了吗?任何帮助将不胜感激,谢谢!
我已经尝试了上述示例的几种变体。我看了这个例子:Pulumi - EFS Id output to EC2 LaunchConfiguration UserData
但也无法让它发挥作用。
【问题讨论】:
-
您的 cloud-init 日志中是否有错误?
-
我不确定,我没有直接使用 cloud-init 做任何事情。 Pulumi 在后端使用 cloud-init 吗?我在哪里可以找到这方面的日志?
-
Cloud-init 负责处理用户数据并执行用户数据脚本。它在启动时从您的 ec2 实例运行。相关日志为 /var/log/cloud-init.log。此处的文档:cloudinit.readthedocs.io/en/latest
-
谢谢您的帮助!我最终找出了问题所在,我在下面发布了解决方案。
标签: amazon-web-services go amazon-ec2 amazon-efs pulumi